github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/framework/internal/config/config_test.go (about) 1 package config_test 2 3 import ( 4 "github.com/apolloconfig/agollo/v4" 5 "github.com/apolloconfig/agollo/v4/agcache/memory" 6 apolloConfig "github.com/apolloconfig/agollo/v4/env/config" 7 "github.com/golang/mock/gomock" 8 "github.com/pkg/errors" 9 . "github.com/smartystreets/goconvey/convey" 10 "github.com/unionj-cloud/go-doudou/framework/configmgr" 11 "github.com/unionj-cloud/go-doudou/framework/configmgr/mock" 12 "github.com/unionj-cloud/go-doudou/framework/internal/config" 13 "github.com/wubin1989/nacos-sdk-go/clients/cache" 14 "github.com/wubin1989/nacos-sdk-go/clients/config_client" 15 "github.com/wubin1989/nacos-sdk-go/vo" 16 "testing" 17 ) 18 19 func Test_envVariable_String(t *testing.T) { 20 Convey("Should be on", t, func() { 21 config.GddBanner.Write("on") 22 So(config.GddBanner.String(), ShouldEqual, "on") 23 So(config.GddBanner.Load(), ShouldEqual, "on") 24 }) 25 } 26 27 func TestMain(m *testing.M) { 28 config.GddNacosServerAddr.Write("http://localhost:8848") 29 m.Run() 30 } 31 32 func TestLoadConfigFromRemote_Apollo(t *testing.T) { 33 Convey("Should not panic to load config from apollo", t, func() { 34 ctrl := gomock.NewController(t) 35 defer ctrl.Finish() 36 config.GddApolloAddr.Write("http://apollo-config-dev-svc:8080") 37 config.GddConfigRemoteType.Write(config.ApolloConfigType) 38 config.GddServiceName.Write("configmgr") 39 configClient := mock.NewMockClient(ctrl) 40 factory := &memory.DefaultCacheFactory{} 41 cache := factory.Create() 42 cache.Set("gdd.retry.count", "3", 0) 43 cache.Set("gdd.weight", "5", 0) 44 configClient. 45 EXPECT(). 46 GetConfigCache(config.DefaultGddApolloNamespace). 47 AnyTimes(). 48 Return(cache) 49 50 configmgr.StartWithConfig = func(loadAppConfig func() (*apolloConfig.AppConfig, error)) (agollo.Client, error) { 51 _, _ = loadAppConfig() 52 return configClient, nil 53 } 54 55 if configmgr.ApolloClient != nil { 56 configmgr.ApolloClient = configClient 57 } 58 59 So(func() { 60 config.LoadConfigFromRemote() 61 }, ShouldNotPanic) 62 }) 63 } 64 65 func TestLoadConfigFromRemote_Apollo_Panic(t *testing.T) { 66 Convey("Should panic to load config from apollo", t, func() { 67 ctrl := gomock.NewController(t) 68 defer ctrl.Finish() 69 config.GddApolloAddr.Write("http://apollo-config-dev-svc:8080") 70 config.GddConfigRemoteType.Write(config.ApolloConfigType) 71 config.GddServiceName.Write("") 72 configClient := mock.NewMockClient(ctrl) 73 factory := &memory.DefaultCacheFactory{} 74 cache := factory.Create() 75 cache.Set("gdd.retry.count", "3", 0) 76 cache.Set("gdd.weight", "5", 0) 77 configClient. 78 EXPECT(). 79 GetConfigCache(config.DefaultGddApolloNamespace). 80 AnyTimes(). 81 Return(cache) 82 83 configmgr.StartWithConfig = func(loadAppConfig func() (*apolloConfig.AppConfig, error)) (agollo.Client, error) { 84 _, _ = loadAppConfig() 85 return configClient, nil 86 } 87 88 if configmgr.ApolloClient != nil { 89 configmgr.ApolloClient = configClient 90 } 91 92 So(func() { 93 config.LoadConfigFromRemote() 94 }, ShouldPanic) 95 }) 96 } 97 98 func TestLoadConfigFromRemote_Apollo_Panic2(t *testing.T) { 99 Convey("Should panic to load config from apollo", t, func() { 100 ctrl := gomock.NewController(t) 101 defer ctrl.Finish() 102 config.GddConfigRemoteType.Write(config.ApolloConfigType) 103 config.GddServiceName.Write("configmgr") 104 config.GddApolloAddr.Write("") 105 configClient := mock.NewMockClient(ctrl) 106 factory := &memory.DefaultCacheFactory{} 107 cache := factory.Create() 108 cache.Set("gdd.retry.count", "3", 0) 109 cache.Set("gdd.weight", "5", 0) 110 configClient. 111 EXPECT(). 112 GetConfigCache(config.DefaultGddApolloNamespace). 113 AnyTimes(). 114 Return(cache) 115 116 configmgr.StartWithConfig = func(loadAppConfig func() (*apolloConfig.AppConfig, error)) (agollo.Client, error) { 117 _, _ = loadAppConfig() 118 return configClient, nil 119 } 120 121 if configmgr.ApolloClient != nil { 122 configmgr.ApolloClient = configClient 123 } 124 125 So(func() { 126 config.LoadConfigFromRemote() 127 }, ShouldPanic) 128 }) 129 } 130 131 func TestLoadConfigFromRemote_Apollo_Log(t *testing.T) { 132 Convey("Should panic to load config from apollo", t, func() { 133 ctrl := gomock.NewController(t) 134 defer ctrl.Finish() 135 config.GddConfigRemoteType.Write(config.ApolloConfigType) 136 config.GddServiceName.Write("configmgr") 137 config.GddApolloAddr.Write("http://apollo-config-dev-svc:8080") 138 config.GddApolloLogEnable.Write("true") 139 configClient := mock.NewMockClient(ctrl) 140 factory := &memory.DefaultCacheFactory{} 141 cache := factory.Create() 142 cache.Set("gdd.retry.count", "3", 0) 143 cache.Set("gdd.weight", "5", 0) 144 configClient. 145 EXPECT(). 146 GetConfigCache(config.DefaultGddApolloNamespace). 147 AnyTimes(). 148 Return(cache) 149 150 configmgr.StartWithConfig = func(loadAppConfig func() (*apolloConfig.AppConfig, error)) (agollo.Client, error) { 151 _, _ = loadAppConfig() 152 return configClient, nil 153 } 154 155 if configmgr.ApolloClient != nil { 156 configmgr.ApolloClient = configClient 157 } 158 159 So(func() { 160 config.LoadConfigFromRemote() 161 }, ShouldNotPanic) 162 }) 163 } 164 165 func TestLoadConfigFromRemote_Nacos(t *testing.T) { 166 Convey("Should not panic to load config from nacos", t, func() { 167 config.GddConfigRemoteType.Write(config.NacosConfigType) 168 config.GddNacosConfigDataid.Write(".env") 169 ctrl := gomock.NewController(t) 170 defer ctrl.Finish() 171 dataId := ".env" 172 configClient := mock.NewMockIConfigClient(ctrl) 173 configClient. 174 EXPECT(). 175 GetConfig(vo.ConfigParam{ 176 DataId: dataId, 177 Group: config.DefaultGddNacosConfigGroup, 178 }). 179 AnyTimes(). 180 Return("GDD_SERVICE_NAME=configmgr\n\nGDD_READ_TIMEOUT=60s\nGDD_WRITE_TIMEOUT=60s\nGDD_IDLE_TIMEOUT=120s", nil) 181 182 configClient. 183 EXPECT(). 184 ListenConfig(gomock.Any()). 185 AnyTimes(). 186 Return(nil) 187 188 configmgr.NewConfigClient = func(param vo.NacosClientParam) (iClient config_client.IConfigClient, err error) { 189 return configClient, nil 190 } 191 192 if configmgr.NacosClient != nil { 193 configmgr.NacosClient = configmgr.NewNacosConfigMgr([]string{dataId}, 194 config.DefaultGddNacosConfigGroup, configmgr.DotenvConfigFormat, config.DefaultGddNacosNamespaceId, configClient, cache.NewConcurrentMap()) 195 } 196 197 So(func() { 198 config.LoadConfigFromRemote() 199 }, ShouldNotPanic) 200 }) 201 } 202 203 func TestLoadConfigFromRemote_Nacos_Panic(t *testing.T) { 204 Convey("Should panic to load config from nacos", t, func() { 205 config.GddConfigRemoteType.Write(config.NacosConfigType) 206 config.GddNacosConfigDataid.Write("") 207 ctrl := gomock.NewController(t) 208 defer ctrl.Finish() 209 dataId := ".env" 210 configClient := mock.NewMockIConfigClient(ctrl) 211 configClient. 212 EXPECT(). 213 GetConfig(vo.ConfigParam{ 214 DataId: dataId, 215 Group: config.DefaultGddNacosConfigGroup, 216 }). 217 AnyTimes(). 218 Return("GDD_SERVICE_NAME=configmgr\n\nGDD_READ_TIMEOUT=60s\nGDD_WRITE_TIMEOUT=60s\nGDD_IDLE_TIMEOUT=120s", nil) 219 220 configClient. 221 EXPECT(). 222 ListenConfig(gomock.Any()). 223 AnyTimes(). 224 Return(nil) 225 226 configmgr.NewConfigClient = func(param vo.NacosClientParam) (iClient config_client.IConfigClient, err error) { 227 return configClient, nil 228 } 229 230 if configmgr.NacosClient != nil { 231 configmgr.NacosClient = configmgr.NewNacosConfigMgr([]string{dataId}, 232 config.DefaultGddNacosConfigGroup, configmgr.DotenvConfigFormat, config.DefaultGddNacosNamespaceId, configClient, cache.NewConcurrentMap()) 233 } 234 235 So(func() { 236 config.LoadConfigFromRemote() 237 }, ShouldPanic) 238 }) 239 } 240 241 func TestLoadConfigFromRemote_Nacos_Panic2(t *testing.T) { 242 Convey("Should panic to load config from nacos", t, func() { 243 config.GddConfigRemoteType.Write(config.NacosConfigType) 244 config.GddNacosConfigDataid.Write(".env") 245 ctrl := gomock.NewController(t) 246 defer ctrl.Finish() 247 dataId := ".env" 248 configClient := mock.NewMockIConfigClient(ctrl) 249 configClient. 250 EXPECT(). 251 GetConfig(vo.ConfigParam{ 252 DataId: dataId, 253 Group: config.DefaultGddNacosConfigGroup, 254 }). 255 AnyTimes(). 256 Return("", errors.New("mock error from GetConfig")) 257 258 configClient. 259 EXPECT(). 260 ListenConfig(gomock.Any()). 261 AnyTimes(). 262 Return(nil) 263 264 configmgr.NewConfigClient = func(param vo.NacosClientParam) (iClient config_client.IConfigClient, err error) { 265 return configClient, nil 266 } 267 268 if configmgr.NacosClient != nil { 269 configmgr.NacosClient = configmgr.NewNacosConfigMgr([]string{dataId}, 270 config.DefaultGddNacosConfigGroup, configmgr.DotenvConfigFormat, config.DefaultGddNacosNamespaceId, configClient, cache.NewConcurrentMap()) 271 } 272 273 So(func() { 274 config.LoadConfigFromRemote() 275 }, ShouldPanic) 276 }) 277 } 278 279 func TestLoadConfigFromRemote_Panic(t *testing.T) { 280 Convey("Should panic to load config from remote", t, func() { 281 config.GddConfigRemoteType.Write("Unknown remote config type") 282 So(func() { 283 config.LoadConfigFromRemote() 284 }, ShouldPanic) 285 }) 286 } 287 288 func TestGetNacosClientParam(t *testing.T) { 289 Convey("Should panic because of invalid url", t, func() { 290 config.GddNacosNamespaceId.Write("test namespace") 291 config.GddNacosTimeoutMs.Write("300") 292 config.GddNacosNotLoadCacheAtStart.Write("true") 293 config.GddNacosLogDir.Write("/tmp") 294 config.GddNacosCacheDir.Write("/tmp") 295 config.GddNacosLogLevel.Write("debug") 296 So(func() { 297 config.GetNacosClientParam() 298 }, ShouldNotPanic) 299 }) 300 } 301 302 func TestGetNacosClientParam_Panic(t *testing.T) { 303 Convey("Should panic because of invalid url", t, func() { 304 config.GddNacosNamespaceId.Write("test namespace") 305 config.GddNacosTimeoutMs.Write("300") 306 config.GddNacosNotLoadCacheAtStart.Write("true") 307 config.GddNacosLogDir.Write("/tmp") 308 config.GddNacosCacheDir.Write("/tmp") 309 config.GddNacosLogLevel.Write("debug") 310 config.GddNacosServerAddr.Write("invalid url") 311 So(func() { 312 config.GetNacosClientParam() 313 }, ShouldPanic) 314 }) 315 } 316 317 func TestGetNacosClientParam_Panic1(t *testing.T) { 318 Convey("Should panic because of invalid url", t, func() { 319 config.GddNacosNamespaceId.Write("test namespace") 320 config.GddNacosTimeoutMs.Write("300") 321 config.GddNacosNotLoadCacheAtStart.Write("true") 322 config.GddNacosLogDir.Write("/tmp") 323 config.GddNacosCacheDir.Write("/tmp") 324 config.GddNacosLogLevel.Write("debug") 325 config.GddNacosServerAddr.Write("#$@$%^&$@@") 326 So(func() { 327 config.GetNacosClientParam() 328 }, ShouldPanic) 329 }) 330 } 331 332 func Test_envVariable_MarshalJSON(t *testing.T) { 333 Convey("Should be equal to ", t, func() { 334 config.GddPort.Write("8080") 335 data, err := config.GddPort.MarshalJSON() 336 So(err, ShouldBeNil) 337 So(string(data), ShouldEqual, `"8080"`) 338 }) 339 }