Skip to content
Snippets Groups Projects
Unverified Commit 21245ba3 authored by Xin.Zh's avatar Xin.Zh Committed by GitHub
Browse files

Merge pull request #634 from williamfeng323/feature/config-sonarqube-fix

Mod: fixed some issues in config folder that reported by sonar-qube
parents ab31c0d9 80bf6827
No related branches found
No related tags found
No related merge requests found
......@@ -124,20 +124,20 @@ func getKeyPrefix(val reflect.Value) []string {
var (
prefix string
)
configPrefixMethod := "Prefix"
if val.CanAddr() {
prefix = val.Addr().MethodByName("Prefix").Call(nil)[0].String()
prefix = val.Addr().MethodByName(configPrefixMethod).Call(nil)[0].String()
} else {
prefix = val.MethodByName("Prefix").Call(nil)[0].String()
prefix = val.MethodByName(configPrefixMethod).Call(nil)[0].String()
}
var retPrefixs []string
var retPrefixes []string
for _, pfx := range strings.Split(prefix, "|") {
retPrefixs = append(retPrefixs, pfx)
retPrefixes = append(retPrefixes, pfx)
}
return retPrefixs
return retPrefixes
}
......@@ -164,13 +164,13 @@ func setFieldValue(val reflect.Value, id reflect.Value, config *config.InmemoryC
idStr string
)
prefixs := getKeyPrefix(val)
prefixes := getKeyPrefix(val)
if id.Kind() == reflect.String {
idStr = id.Interface().(string)
}
for _, pfx := range prefixs {
for _, pfx := range prefixes {
if len(pfx) > 0 {
if len(idStr) > 0 {
......@@ -190,18 +190,20 @@ func setFieldValue(val reflect.Value, id reflect.Value, config *config.InmemoryC
}
if ok {
errMsg := func(structName string, fieldName string, errorDetails error) {
logger.Errorf("Dynamic change the configuration in struct {%v} field {%v} error ,error message is {%v}",
structName, fieldName, errorDetails)
}
switch f.Kind() {
case reflect.Int64:
x, err := strconv.Atoi(value)
if err != nil {
logger.Errorf("Dynamic change the configuration in struct {%v} field {%v} error ,error message is {%v}",
val.Type().Name(), val.Type().Field(i).Name, err)
errMsg(val.Type().Name(), val.Type().Field(i).Name, err)
} else {
if !f.OverflowInt(int64(x)) {
f.SetInt(int64(x))
} else {
logger.Errorf("Dynamic change the configuration in struct {%v} field {%v} error ,error message is {%v}",
val.Type().Name(), val.Type().Field(i).Name, perrors.Errorf("the int64 value {%v} from config center is overflow", int64(x)))
errMsg(val.Type().Name(), val.Type().Field(i).Name, perrors.Errorf("the int64 value {%v} from config center is overflow", int64(x)))
}
}
case reflect.String:
......@@ -209,21 +211,18 @@ func setFieldValue(val reflect.Value, id reflect.Value, config *config.InmemoryC
case reflect.Bool:
x, err := strconv.ParseBool(value)
if err != nil {
logger.Errorf("Dynamic change the configuration in struct {%v} field {%v} error ,error message is {%v}",
val.Type().Name(), val.Type().Field(i).Name, err)
errMsg(val.Type().Name(), val.Type().Field(i).Name, err)
}
f.SetBool(x)
case reflect.Float64:
x, err := strconv.ParseFloat(value, 64)
if err != nil {
logger.Errorf("Dynamic change the configuration in struct {%v} field {%v} error ,error message is {%v}",
val.Type().Name(), val.Type().Field(i).Name, err)
errMsg(val.Type().Name(), val.Type().Field(i).Name, err)
} else {
if !f.OverflowFloat(x) {
f.SetFloat(x)
} else {
logger.Errorf("Dynamic change the configuration in struct {%v} field {%v} error ,error message is {%v}",
val.Type().Name(), val.Type().Field(i).Name, perrors.Errorf("the float64 value {%v} from config center is overflow", x))
errMsg(val.Type().Name(), val.Type().Field(i).Name, perrors.Errorf("the float64 value {%v} from config center is overflow", x))
}
}
default:
......@@ -328,39 +327,40 @@ func (c *BaseConfig) SetFatherConfig(fatherConfig interface{}) {
}
func initializeStruct(t reflect.Type, v reflect.Value) {
if v.Kind() == reflect.Struct {
for i := 0; i < v.NumField(); i++ {
f := v.Field(i)
ft := t.Field(i)
if ft.Tag.Get("property") != "" {
switch ft.Type.Kind() {
case reflect.Map:
if f.IsNil() {
f.Set(reflect.MakeMap(ft.Type))
}
case reflect.Slice:
if f.IsNil() {
f.Set(reflect.MakeSlice(ft.Type, 0, 0))
}
case reflect.Chan:
if f.IsNil() {
f.Set(reflect.MakeChan(ft.Type, 0))
}
case reflect.Struct:
if f.IsNil() {
initializeStruct(ft.Type, f)
}
case reflect.Ptr:
if f.IsNil() {
fv := reflect.New(ft.Type.Elem())
initializeStruct(ft.Type.Elem(), fv.Elem())
f.Set(fv)
}
default:
}
}
if v.Kind() != reflect.Struct {
return
}
for i := 0; i < v.NumField(); i++ {
f := v.Field(i)
ft := t.Field(i)
if ft.Tag.Get("property") == "" {
continue
}
switch ft.Type.Kind() {
case reflect.Map:
if f.IsNil() {
f.Set(reflect.MakeMap(ft.Type))
}
case reflect.Slice:
if f.IsNil() {
f.Set(reflect.MakeSlice(ft.Type, 0, 0))
}
case reflect.Chan:
if f.IsNil() {
f.Set(reflect.MakeChan(ft.Type, 0))
}
case reflect.Struct:
if f.IsNil() {
initializeStruct(ft.Type, f)
}
case reflect.Ptr:
if f.IsNil() {
fv := reflect.New(ft.Type.Elem())
initializeStruct(ft.Type.Elem(), fv.Elem())
f.Set(fv)
}
default:
}
}
}
......@@ -33,89 +33,93 @@ import (
_ "github.com/apache/dubbo-go/config_center/apollo"
)
func Test_refresh(t *testing.T) {
c := &BaseConfig{}
mockMap := map[string]string{}
mockMap["dubbo.registries.shanghai_reg1.protocol"] = "mock100"
mockMap["dubbo.reference.com.MockService.MockService.retries"] = "10"
mockMap["dubbo.com.MockService.MockService.GetUser.retries"] = "10"
mockMap["dubbo.consumer.check"] = "false"
mockMap["dubbo.application.name"] = "dubbo"
mockMap["dubbo.shutdown.timeout"] = "12s"
func getMockMap() map[string]string {
baseMockMap := map[string]string{
"dubbo.registries.shanghai_reg1.protocol": "mock100",
"dubbo.reference.com.MockService.MockService.retries": "10",
"dubbo.com.MockService.MockService.GetUser.retries": "10",
"dubbo.consumer.check": "false",
"dubbo.application.name": "dubbo",
}
return baseMockMap
}
config.GetEnvInstance().UpdateExternalConfigMap(mockMap)
var baseAppConfig = &ApplicationConfig{
Organization: "dubbo_org",
Name: "dubbo",
Module: "module",
Version: "2.6.0",
Owner: "dubbo",
Environment: "test",
}
father := &ConsumerConfig{
Check: &[]bool{true}[0],
ApplicationConfig: &ApplicationConfig{
Organization: "dubbo_org",
Name: "dubbo",
Module: "module",
Version: "2.6.0",
Owner: "dubbo",
Environment: "test"},
Registries: map[string]*RegistryConfig{
//"shanghai_reg1": {
// id: "shanghai_reg1",
// Protocol: "mock",
// TimeoutStr: "2s",
// Group: "shanghai_idc",
// Address: "127.0.0.1:2181",
// Username: "user1",
// Password: "pwd1",
//},
"shanghai_reg2": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "shanghai_idc",
Address: "127.0.0.2:2181",
Username: "user1",
Password: "pwd1",
},
"hangzhou_reg1": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "hangzhou_idc",
Address: "127.0.0.3:2181",
Username: "user1",
Password: "pwd1",
},
"hangzhou_reg2": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "hangzhou_idc",
Address: "127.0.0.4:2181",
Username: "user1",
Password: "pwd1",
var baseRegistries = map[string]*RegistryConfig{
"shanghai_reg2": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "shanghai_idc",
Address: "127.0.0.2:2181",
Username: "user1",
Password: "pwd1",
},
"hangzhou_reg1": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "hangzhou_idc",
Address: "127.0.0.3:2181",
Username: "user1",
Password: "pwd1",
},
"hangzhou_reg2": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "hangzhou_idc",
Address: "127.0.0.4:2181",
Username: "user1",
Password: "pwd1",
},
}
var baseMockRef = map[string]*ReferenceConfig{
"MockService": {
InterfaceName: "com.MockService",
Protocol: "mock",
Cluster: "failover",
Loadbalance: "random",
Retries: "3",
Group: "huadong_idc",
Version: "1.0.0",
Methods: []*MethodConfig{
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Name: "GetUser",
Retries: "2",
Loadbalance: "random",
},
},
References: map[string]*ReferenceConfig{
"MockService": {
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Protocol: "mock",
Cluster: "failover",
Name: "GetUser1",
Retries: "2",
Loadbalance: "random",
Retries: "3",
Group: "huadong_idc",
Version: "1.0.0",
Methods: []*MethodConfig{
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Name: "GetUser",
Retries: "2",
Loadbalance: "random",
},
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Name: "GetUser1",
Retries: "2",
Loadbalance: "random",
},
},
},
},
},
}
func TestRefresh(t *testing.T) {
c := &BaseConfig{}
mockMap := getMockMap()
mockMap["dubbo.shutdown.timeout"] = "12s"
config.GetEnvInstance().UpdateExternalConfigMap(mockMap)
father := &ConsumerConfig{
Check: &[]bool{true}[0],
ApplicationConfig: baseAppConfig,
Registries: baseRegistries,
References: baseMockRef,
ShutdownConfig: &ShutdownConfig{
Timeout: "12s",
StepTimeout: "2s",
......@@ -135,90 +139,19 @@ func Test_refresh(t *testing.T) {
assert.Equal(t, "dubbo", father.ApplicationConfig.Name)
}
func Test_appExternal_refresh(t *testing.T) {
func TestAppExternalRefresh(t *testing.T) {
c := &BaseConfig{}
mockMap := map[string]string{}
mockMap["dubbo.registries.shanghai_reg1.protocol"] = "mock100"
mockMap["dubbo.reference.com.MockService.MockService.retries"] = "10"
mockMap := getMockMap()
mockMap["dubbo.reference.com.MockService.retries"] = "5"
mockMap["dubbo.com.MockService.MockService.GetUser.retries"] = "10"
mockMap["dubbo.consumer.check"] = "false"
mockMap["dubbo.application.name"] = "dubbo"
config.GetEnvInstance().UpdateAppExternalConfigMap(mockMap)
mockMap["dubbo.consumer.check"] = "true"
config.GetEnvInstance().UpdateExternalConfigMap(mockMap)
father := &ConsumerConfig{
Check: &[]bool{true}[0],
ApplicationConfig: &ApplicationConfig{
Organization: "dubbo_org",
Name: "dubbo",
Module: "module",
Version: "2.6.0",
Owner: "dubbo",
Environment: "test"},
Registries: map[string]*RegistryConfig{
//"shanghai_reg1": {
// id: "shanghai_reg1",
// Protocol: "mock",
// TimeoutStr: "2s",
// Group: "shanghai_idc",
// Address: "127.0.0.1:2181",
// Username: "user1",
// Password: "pwd1",
//},
"shanghai_reg2": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "shanghai_idc",
Address: "127.0.0.2:2181",
Username: "user1",
Password: "pwd1",
},
"hangzhou_reg1": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "hangzhou_idc",
Address: "127.0.0.3:2181",
Username: "user1",
Password: "pwd1",
},
"hangzhou_reg2": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "hangzhou_idc",
Address: "127.0.0.4:2181",
Username: "user1",
Password: "pwd1",
},
},
References: map[string]*ReferenceConfig{
"MockService": {
InterfaceName: "com.MockService",
Protocol: "mock",
Cluster: "failover",
Loadbalance: "random",
Retries: "3",
Group: "huadong_idc",
Version: "1.0.0",
Methods: []*MethodConfig{
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Name: "GetUser",
Retries: "2",
Loadbalance: "random",
},
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Name: "GetUser1",
Retries: "2",
Loadbalance: "random",
},
},
},
},
Check: &[]bool{true}[0],
ApplicationConfig: baseAppConfig,
Registries: baseRegistries,
References: baseMockRef,
}
c.SetFatherConfig(father)
......@@ -231,89 +164,20 @@ func Test_appExternal_refresh(t *testing.T) {
assert.Equal(t, "dubbo", father.ApplicationConfig.Name)
}
func Test_appExternalWithoutId_refresh(t *testing.T) {
func TestAppExternalWithoutIDRefresh(t *testing.T) {
c := &BaseConfig{}
mockMap := map[string]string{}
mockMap["dubbo.registries.shanghai_reg1.protocol"] = "mock100"
mockMap := getMockMap()
delete(mockMap, "dubbo.reference.com.MockService.MockService.retries")
mockMap["dubbo.reference.com.MockService.retries"] = "10"
mockMap["dubbo.com.MockService.MockService.GetUser.retries"] = "10"
mockMap["dubbo.consumer.check"] = "false"
mockMap["dubbo.application.name"] = "dubbo"
config.GetEnvInstance().UpdateAppExternalConfigMap(mockMap)
mockMap["dubbo.consumer.check"] = "true"
config.GetEnvInstance().UpdateExternalConfigMap(mockMap)
father := &ConsumerConfig{
Check: &[]bool{true}[0],
ApplicationConfig: &ApplicationConfig{
Organization: "dubbo_org",
Name: "dubbo",
Module: "module",
Version: "2.6.0",
Owner: "dubbo",
Environment: "test"},
Registries: map[string]*RegistryConfig{
//"shanghai_reg1": {
// id: "shanghai_reg1",
// Protocol: "mock",
// TimeoutStr: "2s",
// Group: "shanghai_idc",
// Address: "127.0.0.1:2181",
// Username: "user1",
// Password: "pwd1",
//},
"shanghai_reg2": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "shanghai_idc",
Address: "127.0.0.2:2181",
Username: "user1",
Password: "pwd1",
},
"hangzhou_reg1": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "hangzhou_idc",
Address: "127.0.0.3:2181",
Username: "user1",
Password: "pwd1",
},
"hangzhou_reg2": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "hangzhou_idc",
Address: "127.0.0.4:2181",
Username: "user1",
Password: "pwd1",
},
},
References: map[string]*ReferenceConfig{
"MockService": {
InterfaceName: "com.MockService",
Protocol: "mock",
Cluster: "failover",
Loadbalance: "random",
Retries: "3",
Group: "huadong_idc",
Version: "1.0.0",
Methods: []*MethodConfig{
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Name: "GetUser",
Retries: "3",
Loadbalance: "random",
},
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Name: "GetUser1",
Retries: "2",
Loadbalance: "random",
},
},
},
},
Check: &[]bool{true}[0],
ApplicationConfig: baseAppConfig,
Registries: baseRegistries,
References: baseMockRef,
}
c.SetFatherConfig(father)
......@@ -326,7 +190,7 @@ func Test_appExternalWithoutId_refresh(t *testing.T) {
assert.Equal(t, "dubbo", father.ApplicationConfig.Name)
}
func Test_refresh_singleRegistry(t *testing.T) {
func TestRefreshSingleRegistry(t *testing.T) {
c := &BaseConfig{}
mockMap := map[string]string{}
mockMap["dubbo.registry.address"] = "mock100://127.0.0.1:2181"
......@@ -338,43 +202,11 @@ func Test_refresh_singleRegistry(t *testing.T) {
config.GetEnvInstance().UpdateExternalConfigMap(mockMap)
father := &ConsumerConfig{
Check: &[]bool{true}[0],
ApplicationConfig: &ApplicationConfig{
Organization: "dubbo_org",
Name: "dubbo",
Module: "module",
Version: "2.6.0",
Owner: "dubbo",
Environment: "test"},
Registries: map[string]*RegistryConfig{},
Registry: &RegistryConfig{},
References: map[string]*ReferenceConfig{
"MockService": {
InterfaceName: "com.MockService",
Protocol: "mock",
Cluster: "failover",
Loadbalance: "random",
Retries: "3",
Group: "huadong_idc",
Version: "1.0.0",
Methods: []*MethodConfig{
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Name: "GetUser",
Retries: "2",
Loadbalance: "random",
},
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Name: "GetUser1",
Retries: "2",
Loadbalance: "random",
},
},
},
},
Check: &[]bool{true}[0],
ApplicationConfig: baseAppConfig,
Registries: map[string]*RegistryConfig{},
Registry: &RegistryConfig{},
References: baseMockRef,
}
c.SetFatherConfig(father)
......@@ -387,14 +219,11 @@ func Test_refresh_singleRegistry(t *testing.T) {
assert.Equal(t, "dubbo", father.ApplicationConfig.Name)
}
func Test_refreshProvider(t *testing.T) {
func TestRefreshProvider(t *testing.T) {
c := &BaseConfig{}
mockMap := map[string]string{}
mockMap["dubbo.registries.shanghai_reg1.protocol"] = "mock100"
mockMap := getMockMap()
delete(mockMap, "dubbo.reference.com.MockService.MockService.retries")
mockMap["dubbo.service.com.MockService.MockService.retries"] = "10"
mockMap["dubbo.com.MockService.MockService.GetUser.retries"] = "10"
mockMap["dubbo.consumer.check"] = "false"
mockMap["dubbo.application.name"] = "dubbo"
mockMap["dubbo.protocols.jsonrpc1.name"] = "jsonrpc"
mockMap["dubbo.protocols.jsonrpc1.ip"] = "127.0.0.1"
mockMap["dubbo.protocols.jsonrpc1.port"] = "20001"
......@@ -402,48 +231,8 @@ func Test_refreshProvider(t *testing.T) {
config.GetEnvInstance().UpdateExternalConfigMap(mockMap)
father := &ProviderConfig{
ApplicationConfig: &ApplicationConfig{
Organization: "dubbo_org",
Name: "dubbo",
Module: "module",
Version: "2.6.0",
Owner: "dubbo",
Environment: "test"},
Registries: map[string]*RegistryConfig{
//"shanghai_reg1": {
// id: "shanghai_reg1",
// Protocol: "mock",
// TimeoutStr: "2s",
// Group: "shanghai_idc",
// Address: "127.0.0.1:2181",
// Username: "user1",
// Password: "pwd1",
//},
"shanghai_reg2": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "shanghai_idc",
Address: "127.0.0.2:2181",
Username: "user1",
Password: "pwd1",
},
"hangzhou_reg1": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "hangzhou_idc",
Address: "127.0.0.3:2181",
Username: "user1",
Password: "pwd1",
},
"hangzhou_reg2": {
Protocol: "mock",
TimeoutStr: "2s",
Group: "hangzhou_idc",
Address: "127.0.0.4:2181",
Username: "user1",
Password: "pwd1",
},
},
ApplicationConfig: baseAppConfig,
Registries: baseRegistries,
Services: map[string]*ServiceConfig{
"MockService": {
InterfaceName: "com.MockService",
......@@ -461,7 +250,8 @@ func Test_refreshProvider(t *testing.T) {
Retries: "2",
Loadbalance: "random",
},
{InterfaceId: "MockService",
{
InterfaceId: "MockService",
InterfaceName: "com.MockService",
Name: "GetUser1",
Retries: "2",
......@@ -482,7 +272,7 @@ func Test_refreshProvider(t *testing.T) {
assert.Equal(t, "20001", father.Protocols["jsonrpc1"].Port)
}
func Test_startConfigCenter(t *testing.T) {
func TestStartConfigCenter(t *testing.T) {
extension.SetConfigCenterFactory("mock", func() config_center.DynamicConfigurationFactory {
return &config_center.MockDynamicConfigurationFactory{}
})
......@@ -499,7 +289,7 @@ func Test_startConfigCenter(t *testing.T) {
assert.Equal(t, "ikurento.com", v)
}
func Test_initializeStruct(t *testing.T) {
func TestInitializeStruct(t *testing.T) {
testConsumerConfig := &ConsumerConfig{}
tp := reflect.TypeOf(ConsumerConfig{})
v := reflect.New(tp)
......
......@@ -89,7 +89,7 @@ func loadConsumerConfig() {
// init other consumer config
conConfigType := consumerConfig.ConfigType
for key, value := range extension.GetDefaultConfigReader() {
if conConfigType == nil {
if conConfigType != nil {
if v, ok := conConfigType[key]; ok {
value = v
}
......
......@@ -36,10 +36,13 @@ import (
"github.com/apache/dubbo-go/config_center"
)
const mockConsumerConfigPath = "./testdata/consumer_config.yml"
const mockProviderConfigPath = "./testdata/provider_config.yml"
func TestConfigLoader(t *testing.T) {
conPath, err := filepath.Abs("./testdata/consumer_config.yml")
conPath, err := filepath.Abs(mockConsumerConfigPath)
assert.NoError(t, err)
proPath, err := filepath.Abs("./testdata/provider_config.yml")
proPath, err := filepath.Abs(mockProviderConfigPath)
assert.NoError(t, err)
assert.Nil(t, consumerConfig)
......@@ -152,7 +155,7 @@ func TestConfigLoaderWithConfigCenter(t *testing.T) {
conPath, err := filepath.Abs("./testdata/consumer_config_with_configcenter.yml")
assert.NoError(t, err)
proPath, err := filepath.Abs("./testdata/provider_config.yml")
proPath, err := filepath.Abs(mockProviderConfigPath)
assert.NoError(t, err)
assert.Nil(t, consumerConfig)
......@@ -205,7 +208,7 @@ func TestConfigLoaderWithConfigCenterSingleRegistry(t *testing.T) {
conPath, err := filepath.Abs("./testdata/consumer_config_with_configcenter.yml")
assert.NoError(t, err)
proPath, err := filepath.Abs("./testdata/provider_config.yml")
proPath, err := filepath.Abs(mockProviderConfigPath)
assert.NoError(t, err)
assert.Nil(t, consumerConfig)
......
......@@ -18,6 +18,7 @@
package config
import (
"fmt"
"regexp"
"strings"
)
......@@ -30,50 +31,35 @@ func mergeValue(str1, str2, def string) string {
if str1 == "" && str2 == "" {
return def
}
str := "," + strings.Trim(str1, ",")
if str1 == "" {
str = "," + strings.Trim(str2, ",")
} else if str2 != "" {
str = str + "," + strings.Trim(str2, ",")
}
s1 := strings.Split(str1, ",")
s2 := strings.Split(str2, ",")
str := "," + strings.Join(append(s1, s2...), ",")
defKey := strings.Contains(str, ","+constant.DEFAULT_KEY)
if !defKey {
str = "," + constant.DEFAULT_KEY + str
}
str = strings.TrimPrefix(strings.Replace(str, ","+constant.DEFAULT_KEY, ","+def, -1), ",")
return removeMinus(strings.Split(str, ","))
}
strArr := strings.Split(str, ",")
strMap := make(map[string][]int)
for k, v := range strArr {
add := true
func removeMinus(strArr []string) string {
if len(strArr) == 0 {
return ""
}
var normalStr string
var minusStrArr []string
for _, v := range strArr {
if strings.HasPrefix(v, "-") {
v = v[1:]
add = false
}
if _, ok := strMap[v]; !ok {
if add {
strMap[v] = []int{1, k}
}
minusStrArr = append(minusStrArr, v[1:])
} else {
if add {
strMap[v][0] += 1
strMap[v] = append(strMap[v], k)
} else {
strMap[v][0] -= 1
strMap[v] = strMap[v][:len(strMap[v])-1]
}
normalStr += fmt.Sprintf(",%s", v)
}
}
strArr = make([]string, len(strArr))
for key, value := range strMap {
if value[0] == 0 {
continue
}
for i := 1; i < len(value); i++ {
strArr[value[i]] = key
}
normalStr = strings.Trim(normalStr, ",")
for _, v := range minusStrArr {
normalStr = strings.Replace(normalStr, v, "", 1)
}
reg := regexp.MustCompile("[,]+")
str = reg.ReplaceAllString(strings.Join(strArr, ","), ",")
return strings.Trim(str, ",")
normalStr = reg.ReplaceAllString(strings.Trim(normalStr, ","), ",")
return normalStr
}
......@@ -41,3 +41,23 @@ func TestMergeValue(t *testing.T) {
str = mergeValue("", "default,-b,e,f", "a,b")
assert.Equal(t, "a,e,f", str)
}
func TestRemoveMinus(t *testing.T) {
strList := removeMinus([]string{})
assert.Equal(t, strList, "")
strList = removeMinus([]string{"a", "b", "c", "d", "-a"})
assert.Equal(t, strList, "b,c,d")
strList = removeMinus([]string{"a", "b", "c", "d", "-a", "-b"})
assert.Equal(t, strList, "c,d")
strList = removeMinus([]string{"a", "b", "c", "-c", "-a", "-b"})
assert.Equal(t, strList, "")
strList = removeMinus([]string{"b", "a", "-c", "c"})
assert.Equal(t, strList, "b,a")
strList = removeMinus([]string{"c", "b", "a", "d", "c", "-c", "-a", "e", "f"})
assert.Equal(t, strList, "b,d,c,e,f")
}
......@@ -26,7 +26,7 @@ import (
"github.com/stretchr/testify/assert"
)
func TestShutdownConfig_GetTimeout(t *testing.T) {
func TestShutdownConfigGetTimeout(t *testing.T) {
config := ShutdownConfig{}
assert.False(t, config.RejectRequest)
assert.False(t, config.RequestsFinished)
......
......@@ -23,7 +23,7 @@ import (
"github.com/stretchr/testify/assert"
)
func TestMetadataReportConfig_ToUrl(t *testing.T) {
func TestMetadataReportConfigToUrl(t *testing.T) {
metadataReportConfig := MetadataReportConfig{
Protocol: "mock",
Address: "127.0.0.1:2181",
......
......@@ -123,6 +123,7 @@ func (m *MockProvider) Reference() string {
}
func (m *MockProvider) CallBack(res common.CallbackResponse) {
// CallBack is a mock function. to implement the interface
}
func doInitConsumerAsync() {
......@@ -178,7 +179,7 @@ func doInitConsumerWithSingleRegistry() {
}
}
func Test_ReferMultireg(t *testing.T) {
func TestReferMultireg(t *testing.T) {
doInitConsumer()
extension.SetProtocol("registry", GetProtocol)
extension.SetCluster("registryAware", cluster_impl.NewRegistryAwareCluster)
......@@ -191,7 +192,7 @@ func Test_ReferMultireg(t *testing.T) {
consumerConfig = nil
}
func Test_Refer(t *testing.T) {
func TestRefer(t *testing.T) {
doInitConsumer()
extension.SetProtocol("registry", GetProtocol)
extension.SetCluster("registryAware", cluster_impl.NewRegistryAwareCluster)
......@@ -205,7 +206,7 @@ func Test_Refer(t *testing.T) {
consumerConfig = nil
}
func Test_ReferAsync(t *testing.T) {
func TestReferAsync(t *testing.T) {
doInitConsumerAsync()
extension.SetProtocol("registry", GetProtocol)
extension.SetCluster("registryAware", cluster_impl.NewRegistryAwareCluster)
......@@ -220,7 +221,7 @@ func Test_ReferAsync(t *testing.T) {
consumerConfig = nil
}
func Test_ReferP2P(t *testing.T) {
func TestReferP2P(t *testing.T) {
doInitConsumer()
extension.SetProtocol("dubbo", GetProtocol)
m := consumerConfig.References["MockService"]
......@@ -234,7 +235,7 @@ func Test_ReferP2P(t *testing.T) {
consumerConfig = nil
}
func Test_ReferMultiP2P(t *testing.T) {
func TestReferMultiP2P(t *testing.T) {
doInitConsumer()
extension.SetProtocol("dubbo", GetProtocol)
m := consumerConfig.References["MockService"]
......@@ -248,7 +249,7 @@ func Test_ReferMultiP2P(t *testing.T) {
consumerConfig = nil
}
func Test_ReferMultiP2PWithReg(t *testing.T) {
func TestReferMultiP2PWithReg(t *testing.T) {
doInitConsumer()
extension.SetProtocol("dubbo", GetProtocol)
extension.SetProtocol("registry", GetProtocol)
......@@ -263,7 +264,7 @@ func Test_ReferMultiP2PWithReg(t *testing.T) {
consumerConfig = nil
}
func Test_Implement(t *testing.T) {
func TestImplement(t *testing.T) {
doInitConsumer()
extension.SetProtocol("registry", GetProtocol)
extension.SetCluster("registryAware", cluster_impl.NewRegistryAwareCluster)
......@@ -276,7 +277,7 @@ func Test_Implement(t *testing.T) {
consumerConfig = nil
}
func Test_Forking(t *testing.T) {
func TestForking(t *testing.T) {
doInitConsumer()
extension.SetProtocol("dubbo", GetProtocol)
extension.SetProtocol("registry", GetProtocol)
......@@ -293,7 +294,7 @@ func Test_Forking(t *testing.T) {
consumerConfig = nil
}
func Test_Sticky(t *testing.T) {
func TestSticky(t *testing.T) {
doInitConsumer()
extension.SetProtocol("dubbo", GetProtocol)
extension.SetProtocol("registry", GetProtocol)
......@@ -332,4 +333,6 @@ func (*mockRegistryProtocol) Export(invoker protocol.Invoker) protocol.Exporter
return protocol.NewBaseExporter("test", invoker, &sync.Map{})
}
func (*mockRegistryProtocol) Destroy() {}
func (*mockRegistryProtocol) Destroy() {
// Destroy is a mock function
}
......@@ -29,7 +29,7 @@ import (
"github.com/apache/dubbo-go/common"
)
func Test_loadRegistries(t *testing.T) {
func TestLoadRegistries(t *testing.T) {
target := "shanghai1"
regs := map[string]*RegistryConfig{
......@@ -47,7 +47,7 @@ func Test_loadRegistries(t *testing.T) {
assert.Equal(t, "127.0.0.2:2181,128.0.0.1:2181", urls[0].Location)
}
func Test_loadRegistries1(t *testing.T) {
func TestLoadRegistries1(t *testing.T) {
target := "shanghai1"
regs := map[string]*RegistryConfig{
......
......@@ -183,7 +183,7 @@ func doInitProviderWithSingleRegistry() {
}
}
func Test_Export(t *testing.T) {
func TestExport(t *testing.T) {
doInitProvider()
extension.SetProtocol("registry", GetProtocol)
......@@ -195,7 +195,7 @@ func Test_Export(t *testing.T) {
providerConfig = nil
}
func Test_getRandomPort(t *testing.T) {
func TestgetRandomPort(t *testing.T) {
protocolConfigs := make([]*ProtocolConfig, 0, 3)
ip, err := gxnet.GetLocalIP()
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment