From a9bdf8e7f68ab4ef462ba661f0321ba007280579 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 12 Oct 2022 22:11:45 +0800 Subject: [PATCH] [add] load dsl & script filesystem --- fs/fs.go | 21 ++++++++++++++++----- fs/fs_test.go | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/fs/fs.go b/fs/fs.go index 30de20b9..194c67da 100644 --- a/fs/fs.go +++ b/fs/fs.go @@ -5,6 +5,7 @@ import ( "path/filepath" "github.com/yaoapp/gou/fs" + "github.com/yaoapp/gou/fs/dsl" "github.com/yaoapp/gou/fs/system" "github.com/yaoapp/yao/config" ) @@ -12,20 +13,30 @@ import ( // Load system fs func Load(cfg config.Config) error { - root, err := Root(cfg) + root, err := filepath.Abs(cfg.Root) if err != nil { return err } - if _, err := os.Stat(root); os.IsNotExist(err) { - err := os.MkdirAll(root, os.ModePerm) + dataRoot, err := Root(cfg) + if err != nil { + return err + } + + scriptRoot := filepath.Join(root, "scripts") + dslDenyList := []string{scriptRoot, dataRoot} + + if _, err := os.Stat(dataRoot); os.IsNotExist(err) { + err := os.MkdirAll(dataRoot, os.ModePerm) if err != nil { return err } } - fs.Register("system", system.New(root)) - fs.Register("binary", system.New(root)) // next + fs.Register("system", system.New(dataRoot)) + fs.Register("dsl", dsl.New(root).DenyAbs(dslDenyList...)) // DSL + fs.Register("script", system.New(scriptRoot)) // Script + fs.Register("binary", system.New(root)) // Binary return nil } diff --git a/fs/fs_test.go b/fs/fs_test.go index cb630182..cf352c8f 100644 --- a/fs/fs_test.go +++ b/fs/fs_test.go @@ -26,5 +26,39 @@ func TestLoad(t *testing.T) { assert.Equal(t, int64(2), info.Size()) err = fs.Remove(data, "test.file") - assert.Nil(t, err) + if err != nil { + t.Fatal(err) + } +} + +func TestDSL(t *testing.T) { + Load(config.Conf) + dsl := fs.MustGet("dsl") + name := filepath.Join("models", "test.mod.json") + _, err := fs.WriteFile(dsl, name, []byte(`{"foo": "bar", "hello":{ "int": 1, "float": 0.618}}`), 0644) + assert.Nil(t, err) + + info, err := os.Stat(filepath.Join(config.Conf.Root, name)) + assert.Nil(t, err) + assert.Equal(t, int64(69), info.Size()) + dsl.Remove(name) + if err != nil { + t.Fatal(err) + } +} + +func TestScirpt(t *testing.T) { + Load(config.Conf) + script := fs.MustGet("script") + name := "test.js" + _, err := fs.WriteFile(script, name, []byte(`console.log("hello")`), 0644) + assert.Nil(t, err) + + info, err := os.Stat(filepath.Join(config.Conf.Root, "scripts", name)) + assert.Nil(t, err) + assert.Equal(t, int64(20), info.Size()) + script.Remove(name) + if err != nil { + t.Fatal(err) + } }