From fc4ed3de0f3fcbea3a1c5c50046f58966b7d7b67 Mon Sep 17 00:00:00 2001 From: Joe Zou <yixian.zou@gmail.com> Date: Wed, 26 Feb 2020 18:16:52 +0800 Subject: [PATCH] add test case --- cluster/router/chain/chain.go | 5 ++++- cluster/router/chain/chain_test.go | 36 ++++++++++++++++++++++++++++++ cluster/router/condition/router.go | 4 +++- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/cluster/router/chain/chain.go b/cluster/router/chain/chain.go index 8358bdffc..28ff6bdcc 100644 --- a/cluster/router/chain/chain.go +++ b/cluster/router/chain/chain.go @@ -80,9 +80,12 @@ func (c *RouterChain) AddRouters(routers []router.Router) { // NewRouterChain Use url to init router chain // Loop routerFactories and call NewRouter method func NewRouterChain(url *common.URL) (*RouterChain, error) { + if url == nil { + return nil, perrors.Errorf("No route URL for create router chain!") + } routerFactories := extension.GetRouterFactories() if len(routerFactories) == 0 { - return nil, perrors.Errorf("Illegal route rule!") + return nil, perrors.Errorf("No routerFactory exits , create one please") } routers := make([]router.Router, 0, len(routerFactories)) for key, routerFactory := range routerFactories { diff --git a/cluster/router/chain/chain_test.go b/cluster/router/chain/chain_test.go index 54e9ac41c..2343fc80d 100644 --- a/cluster/router/chain/chain_test.go +++ b/cluster/router/chain/chain_test.go @@ -18,6 +18,7 @@ package chain import ( + "encoding/base64" "strconv" "testing" "time" @@ -28,10 +29,12 @@ import ( ) import ( + "github.com/apache/dubbo-go/cluster/router" "github.com/apache/dubbo-go/cluster/router/condition" _ "github.com/apache/dubbo-go/cluster/router/condition" "github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common/config" + "github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/extension" _ "github.com/apache/dubbo-go/config_center/zookeeper" "github.com/apache/dubbo-go/remoting/zookeeper" @@ -81,6 +84,39 @@ conditions: assert.Equal(t, "", rule.Key) } +func TestNewRouterChainURLNil(t *testing.T) { + chain, err := NewRouterChain(nil) + assert.Error(t, err) + assert.Nil(t, chain) +} + +func TestRouterChain_AddRouters(t *testing.T) { + chain, err := NewRouterChain(getConditionRouteUrl("test-condition")) + assert.Nil(t, err) + assert.Equal(t, 1, len(chain.routers)) + + url := getConditionRouteUrl("test-condition") + assert.NotNil(t, url) + factory := extension.GetRouterFactory(url.Protocol) + r, err := factory.NewRouter(url) + assert.Nil(t, err) + assert.NotNil(t, r) + + routers := make([]router.Router, 0) + routers = append(routers, r) + chain.AddRouters(routers) + assert.Equal(t, 2, len(chain.routers)) +} + +func getConditionRouteUrl(applicationKey string) *common.URL { + url, _ := common.NewURL("condition://0.0.0.0/com.foo.BarService") + url.AddParam("application", applicationKey) + url.AddParam("force", "true") + rule := base64.URLEncoding.EncodeToString([]byte("host = 127.0.0.1 => ")) + url.AddParam(constant.RULE_KEY, rule) + return &url +} + func getRouteUrl(applicationKey string) *common.URL { url, _ := common.NewURL("condition://0.0.0.0/com.foo.BarService") url.AddParam("application", applicationKey) diff --git a/cluster/router/condition/router.go b/cluster/router/condition/router.go index 98ff3ccd9..c5d46444b 100644 --- a/cluster/router/condition/router.go +++ b/cluster/router/condition/router.go @@ -104,7 +104,9 @@ func NewConditionRouterWithRule(rule string) (*ConditionRouter, error) { // NewConditionRouter Init condition router by URL func NewConditionRouter(url *common.URL) (*ConditionRouter, error) { - + if url == nil { + return nil, perrors.Errorf("Illegal route URL!") + } rule, err := url.GetParamAndDecoded(constant.RULE_KEY) if err != nil || len(rule) == 0 { return nil, perrors.Errorf("Illegal route rule!") -- GitLab