You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
kratos/pkg/conf/paladin/file_test.go

155 lines
4.2 KiB

package paladin
import (
"context"
"io/ioutil"
"os"
"path/filepath"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestNewFile(t *testing.T) {
// test data
path := "/tmp/test_conf/"
assert.Nil(t, os.MkdirAll(path, 0700))
assert.Nil(t, ioutil.WriteFile(filepath.Join(path, "test.toml"), []byte(`
text = "hello"
number = 100
slice = [1, 2, 3]
sliceStr = ["1", "2", "3"]
`), 0644))
// test client
cli, err := NewFile(filepath.Join(path, "test.toml"))
assert.Nil(t, err)
assert.NotNil(t, cli)
// test map
m := Map{}
text, err := cli.Get("test.toml").String()
assert.Nil(t, err)
assert.Nil(t, m.Set(text), "text")
s, err := m.Get("text").String()
assert.Nil(t, err)
assert.Equal(t, s, "hello", "text")
n, err := m.Get("number").Int64()
assert.Nil(t, err)
assert.Equal(t, n, int64(100), "number")
}
func TestNewFilePath(t *testing.T) {
// test data
path := "/tmp/test_conf/"
assert.Nil(t, os.MkdirAll(path, 0700))
assert.Nil(t, ioutil.WriteFile(filepath.Join(path, "test.toml"), []byte(`
text = "hello"
number = 100
`), 0644))
assert.Nil(t, ioutil.WriteFile(filepath.Join(path, "abc.toml"), []byte(`
text = "hello"
number = 100
`), 0644))
// test client
cli, err := NewFile(path)
assert.Nil(t, err)
assert.NotNil(t, cli)
// test map
m := Map{}
text, err := cli.Get("test.toml").String()
assert.Nil(t, err)
assert.Nil(t, m.Set(text), "text")
s, err := m.Get("text").String()
assert.Nil(t, err, s)
assert.Equal(t, s, "hello", "text")
n, err := m.Get("number").Int64()
assert.Nil(t, err, s)
assert.Equal(t, n, int64(100), "number")
}
func TestFileEvent(t *testing.T) {
// test data
path := "/tmp/test_conf_event/"
assert.Nil(t, os.MkdirAll(path, 0700))
assert.Nil(t, ioutil.WriteFile(filepath.Join(path, "test.toml"), []byte(`
text = "hello"
number = 100
`), 0644))
assert.Nil(t, ioutil.WriteFile(filepath.Join(path, "abc.toml"), []byte(`
text = "hello"
number = 100
`), 0644))
// test client
cli, err := NewFile(path)
assert.Nil(t, err)
assert.NotNil(t, cli)
ch := cli.WatchEvent(context.Background(), "test.toml", "abc.toml")
time.Sleep(time.Second)
timeout := time.NewTimer(time.Second)
// for file test.toml
ioutil.WriteFile(filepath.Join(path, "test.toml"), []byte(`hello`), 0644)
select {
case <-timeout.C:
t.Fatalf("run test timeout")
case ev := <-ch:
if ev.Key == "test.toml" {
assert.Equal(t, EventUpdate, ev.Event)
assert.Equal(t, "hello", ev.Value)
}
}
content1, _ := cli.Get("test.toml").String()
assert.Equal(t, "hello", content1)
// for file abc.toml
ioutil.WriteFile(filepath.Join(path, "abc.toml"), []byte(`test`), 0644)
select {
case <-timeout.C:
t.Fatalf("run test timeout")
case ev := <-ch:
if ev.Key == "abc.toml" {
assert.Equal(t, EventUpdate, ev.Event)
assert.Equal(t, "test", ev.Value)
}
}
content2, _ := cli.Get("abc.toml").String()
assert.Equal(t, "test", content2)
}
func TestHiddenFile(t *testing.T) {
path := "/tmp/test_hidden_event/"
assert.Nil(t, os.MkdirAll(path, 0700))
assert.Nil(t, ioutil.WriteFile(filepath.Join(path, "test.toml"), []byte(`hello`), 0644))
assert.Nil(t, ioutil.WriteFile(filepath.Join(path, "abc.toml"), []byte(`
text = "hello"
number = 100
`), 0644))
// test client
cli, err := NewFile(path)
assert.Nil(t, err)
assert.NotNil(t, cli)
cli.WatchEvent(context.Background(), "test.toml")
time.Sleep(time.Millisecond)
ioutil.WriteFile(filepath.Join(path, "abc.toml"), []byte(`hello`), 0644)
time.Sleep(time.Second)
content1, _ := cli.Get("test.toml").String()
assert.Equal(t, "hello", content1)
_, err = cli.Get(".abc.toml").String()
assert.NotNil(t, err)
}
func TestOneLevelSymbolicFile(t *testing.T) {
path := "/tmp/test_symbolic_link/"
path2 := "/tmp/test_symbolic_link/configs/"
assert.Nil(t, os.MkdirAll(path2, 0700))
assert.Nil(t, ioutil.WriteFile(filepath.Join(path, "test.toml"), []byte(`hello`), 0644))
assert.Nil(t, os.Symlink(filepath.Join(path, "test.toml"), filepath.Join(path2, "test.toml.ln")))
// test client
cli, err := NewFile(path2)
assert.Nil(t, err)
assert.NotNil(t, cli)
content, _ := cli.Get("test.toml.ln").String()
assert.Equal(t, "hello", content)
os.Remove(filepath.Join(path, "test.toml"))
os.Remove(filepath.Join(path2, "test.toml.ln"))
}