diff --git a/proxy/common/config/json/config_cache.go b/proxy/common/config/json/config_cache.go index 1e1a0f909..957d74d78 100644 --- a/proxy/common/config/json/config_cache.go +++ b/proxy/common/config/json/config_cache.go @@ -7,7 +7,7 @@ import ( type ConfigObjectCreator func() interface{} var ( - configCache = make(map[string]ConfigObjectCreator) + configCache map[string]ConfigObjectCreator ) func getConfigKey(protocol string, cType config.Type) string { @@ -35,3 +35,11 @@ func CreateConfig(protocol string, cType config.Type) interface{} { } return creator() } + +func initializeConfigCache() { + configCache = make(map[string]ConfigObjectCreator) +} + +func init() { + initializeConfigCache() +} diff --git a/proxy/common/config/json/config_cache_test.go b/proxy/common/config/json/config_cache_test.go new file mode 100644 index 000000000..7ac3574ff --- /dev/null +++ b/proxy/common/config/json/config_cache_test.go @@ -0,0 +1,46 @@ +package json + +import ( + "testing" + + "github.com/v2ray/v2ray-core/proxy/common/config" + "github.com/v2ray/v2ray-core/testing/unit" +) + +func TestRegisterInboundConfig(t *testing.T) { + assert := unit.Assert(t) + initializeConfigCache() + + protocol := "test_protocol" + creator := func() interface{} { + return true + } + + err := RegisterInboundConnectionConfig(protocol, creator) + assert.Error(err).IsNil() + + configObj := CreateConfig(protocol, config.TypeInbound) + assert.Bool(configObj.(bool)).IsTrue() + + configObj = CreateConfig(protocol, config.TypeOutbound) + assert.Pointer(configObj).IsNil() +} + +func TestRegisterOutboundConfig(t *testing.T) { + assert := unit.Assert(t) + initializeConfigCache() + + protocol := "test_protocol" + creator := func() interface{} { + return true + } + + err := RegisterOutboundConnectionConfig(protocol, creator) + assert.Error(err).IsNil() + + configObj := CreateConfig(protocol, config.TypeOutbound) + assert.Bool(configObj.(bool)).IsTrue() + + configObj = CreateConfig(protocol, config.TypeInbound) + assert.Pointer(configObj).IsNil() +}