Skip to content

Commit

Permalink
Merge pull request #587 from Patrick0308/config-center-nacos-parser-c…
Browse files Browse the repository at this point in the history
…over

Improve code coverage of nacos config center and configuration parser
  • Loading branch information
flycash authored Jun 6, 2020
2 parents 36076fa + baf103d commit 4dac621
Show file tree
Hide file tree
Showing 4 changed files with 161 additions and 2 deletions.
44 changes: 44 additions & 0 deletions config_center/dynamic_configuration_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package config_center

import (
"testing"
"time"
)

import (
"github.com/stretchr/testify/assert"
)

import (
"github.com/apache/dubbo-go/common"
)

func TestWithTimeout(t *testing.T) {
fa := WithTimeout(12 * time.Second)
opt := &Options{}
fa(opt)
assert.Equal(t, 12*time.Second, opt.Timeout)
}

func TestGetRuleKey(t *testing.T) {
url, err := common.NewURL("dubbo://192.168.1.1:20000/com.ikurento.user.UserProvider?interface=test&group=groupA&version=0")
assert.NoError(t, err)
assert.Equal(t, "test:0:groupA", GetRuleKey(url))
}
59 changes: 59 additions & 0 deletions config_center/nacos/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,62 @@ func Test_newNacosClient(t *testing.T) {
<-c.client.Done()
c.Destroy()
}

func Test_setNacosClient(t *testing.T) {
server := mockCommonNacosServer()
nacosURL := server.Listener.Addr().String()
registryUrl, _ := common.NewURL(nacosURL)
c := &nacosDynamicConfiguration{
url: &registryUrl,
done: make(chan struct{}),
}
var client *NacosClient
client = &NacosClient{
name: nacosClientName,
NacosAddrs: []string{nacosURL},
Timeout: 15,
exit: make(chan struct{}),
onceClose: func() {
close(client.exit)
},
}
c.SetNacosClient(client)
err := ValidateNacosClient(c, WithNacosName(nacosClientName))
assert.NoError(t, err)
c.wg.Add(1)
go HandleClientRestart(c)
go func() {
// c.client.Close() and <-c.client.Done() have order requirements.
// If c.client.Close() is called first.It is possible that "go HandleClientRestart(c)"
// sets c.client to nil before calling c.client.Done().
time.Sleep(time.Second)
c.client.Close()
}()
<-c.client.Done()
c.Destroy()
}

func Test_newNacosClient_connectError(t *testing.T) {
nacosURL := "registry://127.0.0.1:8888"
registryUrl, err := common.NewURL(nacosURL)
assert.NoError(t, err)
c := &nacosDynamicConfiguration{
url: &registryUrl,
done: make(chan struct{}),
}
err = ValidateNacosClient(c, WithNacosName(nacosClientName))
assert.NoError(t, err)
c.wg.Add(1)
go HandleClientRestart(c)
go func() {
// c.client.Close() and <-c.client.Done() have order requirements.
// If c.client.Close() is called first.It is possible that "go HandleClientRestart(c)"
// sets c.client to nil before calling c.client.Done().
time.Sleep(time.Second)
c.client.Close()
}()
<-c.client.Done()
// let client do retry
time.Sleep(5 * time.Second)
c.Destroy()
}
5 changes: 3 additions & 2 deletions config_center/nacos/impl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,13 @@ func initNacosData(t *testing.T) (*nacosDynamicConfiguration, error) {
server := mockCommonNacosServer()
nacosURL := strings.ReplaceAll(server.URL, "http", "registry")
regurl, _ := common.NewURL(nacosURL)
nacosConfiguration, err := newNacosDynamicConfiguration(&regurl)
factory := &nacosDynamicConfigurationFactory{}
nacosConfiguration, err := factory.GetDynamicConfiguration(&regurl)
assert.NoError(t, err)

nacosConfiguration.SetParser(&parser.DefaultConfigurationParser{})

return nacosConfiguration, err
return nacosConfiguration.(*nacosDynamicConfiguration), err
}

func Test_GetConfig(t *testing.T) {
Expand Down
55 changes: 55 additions & 0 deletions config_center/parser/configuration_parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,58 @@ func TestDefaultConfigurationParser_Parser(t *testing.T) {
assert.Equal(t, 2, len(m))
assert.Equal(t, "172.0.0.1", m["dubbo.registry.address"])
}

func TestDefaultConfigurationParser_appItemToUrls_ParserToUrls(t *testing.T) {
parser := &DefaultConfigurationParser{}
content := `configVersion: 2.7.1
scope: application
key: org.apache.dubbo-go.mockService
enabled: true
configs:
- type: application
enabled: true
addresses:
- 0.0.0.0
providerAddresses: []
services:
- org.apache.dubbo-go.mockService
applications: []
parameters:
cluster: mock1
side: provider`
urls, err := parser.ParseToUrls(content)
assert.NoError(t, err)
assert.Equal(t, 1, len(urls))
assert.Equal(t, "org.apache.dubbo-go.mockService", urls[0].GetParam("application", ""))
assert.Equal(t, "mock1", urls[0].GetParam("cluster", ""))
assert.Equal(t, "override", urls[0].Protocol)
assert.Equal(t, "0.0.0.0", urls[0].Location)
}

func TestDefaultConfigurationParser_serviceItemToUrls_ParserToUrls(t *testing.T) {
parser := &DefaultConfigurationParser{}
content := `configVersion: 2.7.1
scope: notApplication
key: groupA/test:1
enabled: true
configs:
- type: application
enabled: true
addresses:
- 0.0.0.0
providerAddresses: []
services:
- org.apache.dubbo-go.mockService
applications: []
parameters:
cluster: mock1
side: provider`
urls, err := parser.ParseToUrls(content)
assert.NoError(t, err)
assert.Equal(t, 1, len(urls))
assert.Equal(t, "groupA", urls[0].GetParam("group", ""))
assert.Equal(t, "/test", urls[0].Path)
assert.Equal(t, "mock1", urls[0].GetParam("cluster", ""))
assert.Equal(t, "override", urls[0].Protocol)
assert.Equal(t, "0.0.0.0", urls[0].Location)
}

0 comments on commit 4dac621

Please sign in to comment.