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.
109 lines
2.1 KiB
109 lines
2.1 KiB
3 years ago
|
package config
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
kconfig "github.com/go-kratos/kratos/v2/config"
|
||
|
"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"
|
||
|
"gopkg.in/yaml.v3"
|
||
|
)
|
||
|
|
||
|
func getIntranetIP() string {
|
||
|
addrs, err := net.InterfaceAddrs()
|
||
|
if err != nil {
|
||
|
return "127.0.0.1"
|
||
|
}
|
||
|
|
||
|
for _, address := range addrs {
|
||
|
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
||
|
if ipnet.IP.To4() != nil {
|
||
|
return ipnet.IP.String()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return "127.0.0.1"
|
||
|
}
|
||
|
|
||
|
func TestGetConfig(t *testing.T) {
|
||
|
ip := getIntranetIP()
|
||
|
// ctx := context.Background()
|
||
|
|
||
|
sc := []constant.ServerConfig{
|
||
|
*constant.NewServerConfig(ip, 8848),
|
||
|
}
|
||
|
|
||
|
cc := constant.ClientConfig{
|
||
|
TimeoutMs: 5000,
|
||
|
NotLoadCacheAtStart: true,
|
||
|
LogDir: "/tmp/nacos/log",
|
||
|
CacheDir: "/tmp/nacos/cache",
|
||
|
RotateTime: "1h",
|
||
|
MaxAge: 3,
|
||
|
LogLevel: "debug",
|
||
|
}
|
||
|
|
||
|
// a more graceful way to create naming client
|
||
|
client, err := clients.NewConfigClient(
|
||
|
vo.NacosClientParam{
|
||
|
ClientConfig: &cc,
|
||
|
ServerConfigs: sc,
|
||
|
},
|
||
|
)
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
dataID := "test.yaml"
|
||
|
group := "test"
|
||
|
_, err = client.PublishConfig(vo.ConfigParam{DataId: dataID, Group: group, Content: `
|
||
|
logger:
|
||
|
level: info
|
||
|
`})
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
time.Sleep(1 * time.Second)
|
||
|
c := kconfig.New(
|
||
|
kconfig.WithSource(
|
||
|
NewConfigSource(client, WithGroup(group), WithDataID(dataID)),
|
||
|
),
|
||
|
kconfig.WithDecoder(func(kv *kconfig.KeyValue, v map[string]interface{}) error {
|
||
|
return yaml.Unmarshal(kv.Value, v)
|
||
|
}),
|
||
|
)
|
||
|
|
||
|
if err = c.Load(); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
name, err := c.Value("logger.level").String()
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
fmt.Println("get value", name)
|
||
|
|
||
|
done := make(chan bool)
|
||
|
err = c.Watch("logger.level", func(key string, value kconfig.Value) {
|
||
|
fmt.Println(key, " value change", value)
|
||
|
done <- true
|
||
|
})
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
_, err = client.PublishConfig(vo.ConfigParam{DataId: dataID, Group: group, Content: `
|
||
|
logger:
|
||
|
level: debug
|
||
|
`})
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
<-done
|
||
|
}
|