|
|
|
package config
|
|
|
|
|
|
|
|
import (
|
|
|
|
"reflect"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/nacos-group/nacos-sdk-go/clients"
|
|
|
|
"github.com/nacos-group/nacos-sdk-go/common/constant"
|
|
|
|
"github.com/nacos-group/nacos-sdk-go/vo"
|
|
|
|
|
|
|
|
"github.com/go-kratos/kratos/v2/config"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestConfig_Load(t *testing.T) {
|
|
|
|
sc := []constant.ServerConfig{
|
|
|
|
*constant.NewServerConfig("127.0.0.1", 8848),
|
|
|
|
}
|
|
|
|
|
|
|
|
cc := constant.ClientConfig{
|
|
|
|
TimeoutMs: 5000,
|
|
|
|
NotLoadCacheAtStart: true,
|
|
|
|
LogDir: "/tmp/nacos/log",
|
|
|
|
CacheDir: "/tmp/nacos/cache",
|
|
|
|
RotateTime: "1h",
|
|
|
|
MaxAge: 3,
|
|
|
|
LogLevel: "debug",
|
|
|
|
}
|
|
|
|
|
|
|
|
client, err := clients.NewConfigClient(
|
|
|
|
vo.NacosClientParam{
|
|
|
|
ClientConfig: &cc,
|
|
|
|
ServerConfigs: sc,
|
|
|
|
},
|
|
|
|
)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
source := NewConfigSource(client, WithGroup("test"), WithDataID("test.yaml"))
|
|
|
|
|
|
|
|
type fields struct {
|
|
|
|
source config.Source
|
|
|
|
}
|
|
|
|
tests := []struct {
|
|
|
|
name string
|
|
|
|
fields fields
|
|
|
|
want []*config.KeyValue
|
|
|
|
wantErr bool
|
|
|
|
preFunc func(t *testing.T)
|
|
|
|
deferFunc func(t *testing.T)
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "normal",
|
|
|
|
fields: fields{
|
|
|
|
source: source,
|
|
|
|
},
|
|
|
|
wantErr: false,
|
|
|
|
preFunc: func(t *testing.T) {
|
|
|
|
_, err = client.PublishConfig(vo.ConfigParam{DataId: "test.yaml", Group: "test", Content: "test: test"})
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
time.Sleep(time.Second * 1)
|
|
|
|
},
|
|
|
|
deferFunc: func(t *testing.T) {
|
|
|
|
_, dErr := client.DeleteConfig(vo.ConfigParam{DataId: "test.yaml", Group: "test"})
|
|
|
|
if dErr != nil {
|
|
|
|
t.Error(dErr)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
want: []*config.KeyValue{{
|
|
|
|
Key: "test.yaml",
|
|
|
|
Value: []byte("test: test"),
|
|
|
|
Format: "yaml",
|
|
|
|
}},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "error",
|
|
|
|
fields: fields{
|
|
|
|
source: source,
|
|
|
|
},
|
|
|
|
wantErr: false,
|
|
|
|
preFunc: func(t *testing.T) {
|
|
|
|
_, err = client.PublishConfig(vo.ConfigParam{DataId: "111.yaml", Group: "notExist", Content: "test: test"})
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
time.Sleep(time.Second * 1)
|
|
|
|
},
|
|
|
|
deferFunc: func(t *testing.T) {
|
|
|
|
_, dErr := client.DeleteConfig(vo.ConfigParam{DataId: "111.yaml", Group: "notExist"})
|
|
|
|
if dErr != nil {
|
|
|
|
t.Error(dErr)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
want: []*config.KeyValue{{
|
|
|
|
Key: "test.yaml",
|
|
|
|
Value: []byte{},
|
|
|
|
Format: "yaml",
|
|
|
|
}},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
for _, test := range tests {
|
|
|
|
t.Run(test.name, func(t *testing.T) {
|
|
|
|
if test.preFunc != nil {
|
|
|
|
test.preFunc(t)
|
|
|
|
}
|
|
|
|
if test.deferFunc != nil {
|
|
|
|
defer test.deferFunc(t)
|
|
|
|
}
|
|
|
|
s := test.fields.source
|
|
|
|
configs, lErr := s.Load()
|
|
|
|
if (lErr != nil) != test.wantErr {
|
|
|
|
t.Errorf("Load error = %v, wantErr %v", lErr, test.wantErr)
|
|
|
|
t.Errorf("Load configs = %v", configs)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if !reflect.DeepEqual(configs, test.want) {
|
|
|
|
t.Errorf("Load configs = %v, want %v", configs, test.want)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestConfig_Watch(t *testing.T) {
|
|
|
|
sc := []constant.ServerConfig{
|
|
|
|
*constant.NewServerConfig("127.0.0.1", 8848),
|
|
|
|
}
|
|
|
|
|
|
|
|
cc := constant.ClientConfig{
|
|
|
|
TimeoutMs: 5000,
|
|
|
|
NotLoadCacheAtStart: true,
|
|
|
|
LogDir: "/tmp/nacos/log",
|
|
|
|
CacheDir: "/tmp/nacos/cache",
|
|
|
|
RotateTime: "1h",
|
|
|
|
MaxAge: 3,
|
|
|
|
LogLevel: "debug",
|
|
|
|
}
|
|
|
|
|
|
|
|
client, err := clients.NewConfigClient(
|
|
|
|
vo.NacosClientParam{
|
|
|
|
ClientConfig: &cc,
|
|
|
|
ServerConfigs: sc,
|
|
|
|
},
|
|
|
|
)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
source := NewConfigSource(client, WithGroup("test"), WithDataID("test.yaml"))
|
|
|
|
|
|
|
|
type fields struct {
|
|
|
|
source config.Source
|
|
|
|
}
|
|
|
|
tests := []struct {
|
|
|
|
name string
|
|
|
|
fields fields
|
|
|
|
want []*config.KeyValue
|
|
|
|
wantErr bool
|
|
|
|
processFunc func(t *testing.T, w config.Watcher)
|
|
|
|
deferFunc func(t *testing.T, w config.Watcher)
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "normal",
|
|
|
|
fields: fields{
|
|
|
|
source: source,
|
|
|
|
},
|
|
|
|
wantErr: false,
|
|
|
|
processFunc: func(t *testing.T, w config.Watcher) {
|
|
|
|
_, pErr := client.PublishConfig(vo.ConfigParam{DataId: "test.yaml", Group: "test", Content: "test: test"})
|
|
|
|
if pErr != nil {
|
|
|
|
t.Error(pErr)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
deferFunc: func(t *testing.T, w config.Watcher) {
|
|
|
|
_, dErr := client.DeleteConfig(vo.ConfigParam{DataId: "test.yaml", Group: "test"})
|
|
|
|
if dErr != nil {
|
|
|
|
t.Error(dErr)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
want: []*config.KeyValue{{
|
|
|
|
Key: "test.yaml",
|
|
|
|
Value: []byte("test: test"),
|
|
|
|
Format: "yaml",
|
|
|
|
}},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
for _, test := range tests {
|
|
|
|
t.Run(test.name, func(t *testing.T) {
|
|
|
|
s := test.fields.source
|
|
|
|
watch, wErr := s.Watch()
|
|
|
|
if wErr != nil {
|
|
|
|
t.Error(wErr)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if test.processFunc != nil {
|
|
|
|
test.processFunc(t, watch)
|
|
|
|
}
|
|
|
|
if test.deferFunc != nil {
|
|
|
|
defer test.deferFunc(t, watch)
|
|
|
|
}
|
|
|
|
want, nErr := watch.Next()
|
|
|
|
if (nErr != nil) != test.wantErr {
|
|
|
|
t.Errorf("Watch error = %v, wantErr %v", nErr, test.wantErr)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if !reflect.DeepEqual(want, test.want) {
|
|
|
|
t.Errorf("Watch watcher = %v, want %v", watch, test.want)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|