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  }