From ce498403277ea43bbf3a8f77822b433e09d9123f Mon Sep 17 00:00:00 2001 From: Joe Zou <yixian.zou@gmail.com> Date: Tue, 21 Jan 2020 17:29:35 +0800 Subject: [PATCH] add router chain --- cluster/router/condition/factory_test.go | 63 ++++++++++++------------ 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/cluster/router/condition/factory_test.go b/cluster/router/condition/factory_test.go index ff63a282f..1bb638289 100644 --- a/cluster/router/condition/factory_test.go +++ b/cluster/router/condition/factory_test.go @@ -21,7 +21,6 @@ import ( "context" "encoding/base64" "fmt" - router7 "github.com/apache/dubbo-go/cluster/router" "reflect" "testing" ) @@ -116,32 +115,32 @@ func (bi *MockInvoker) Destroy() { func TestRoute_matchWhen(t *testing.T) { inv := &invocation.RPCInvocation{} rule := base64.URLEncoding.EncodeToString([]byte("=> host = 1.2.3.4")) - router, _ := router7.Router(getRouteUrl(rule)) + router, _ := NewConditionRouterFactory().Router(getRouteUrl(rule)) cUrl, _ := common.NewURL(context.TODO(), "consumer://1.1.1.1/com.foo.BarService") matchWhen, _ := router.(*ConditionRouter).MatchWhen(&cUrl, inv) assert.Equal(t, true, matchWhen) rule1 := base64.URLEncoding.EncodeToString([]byte("host = 2.2.2.2,1.1.1.1,3.3.3.3 => host = 1.2.3.4")) - router1, _ := router7.Router(getRouteUrl(rule1)) + router1, _ := NewConditionRouterFactory().Router(getRouteUrl(rule1)) matchWhen1, _ := router1.(*ConditionRouter).MatchWhen(&cUrl, inv) assert.Equal(t, true, matchWhen1) rule2 := base64.URLEncoding.EncodeToString([]byte("host = 2.2.2.2,1.1.1.1,3.3.3.3 & host !=1.1.1.1 => host = 1.2.3.4")) - router2, _ := router7.Router(getRouteUrl(rule2)) + router2, _ := NewConditionRouterFactory().Router(getRouteUrl(rule2)) matchWhen2, _ := router2.(*ConditionRouter).MatchWhen(&cUrl, inv) assert.Equal(t, false, matchWhen2) rule3 := base64.URLEncoding.EncodeToString([]byte("host !=4.4.4.4 & host = 2.2.2.2,1.1.1.1,3.3.3.3 => host = 1.2.3.4")) - router3, _ := router7.Router(getRouteUrl(rule3)) + router3, _ := NewConditionRouterFactory().Router(getRouteUrl(rule3)) matchWhen3, _ := router3.(*ConditionRouter).MatchWhen(&cUrl, inv) assert.Equal(t, true, matchWhen3) rule4 := base64.URLEncoding.EncodeToString([]byte("host !=4.4.4.* & host = 2.2.2.2,1.1.1.1,3.3.3.3 => host = 1.2.3.4")) - router4, _ := router7.Router(getRouteUrl(rule4)) + router4, _ := NewConditionRouterFactory().Router(getRouteUrl(rule4)) matchWhen4, _ := router4.(*ConditionRouter).MatchWhen(&cUrl, inv) assert.Equal(t, true, matchWhen4) rule5 := base64.URLEncoding.EncodeToString([]byte("host = 2.2.2.2,1.1.1.*,3.3.3.3 & host != 1.1.1.1 => host = 1.2.3.4")) - router5, _ := router7.Router(getRouteUrl(rule5)) + router5, _ := NewConditionRouterFactory().Router(getRouteUrl(rule5)) matchWhen5, _ := router5.(*ConditionRouter).MatchWhen(&cUrl, inv) assert.Equal(t, false, matchWhen5) rule6 := base64.URLEncoding.EncodeToString([]byte("host = 2.2.2.2,1.1.1.*,3.3.3.3 & host != 1.1.1.2 => host = 1.2.3.4")) - router6, _ := router7.Router(getRouteUrl(rule6)) + router6, _ := NewConditionRouterFactory().Router(getRouteUrl(rule6)) matchWhen6, _ := router6.(*ConditionRouter).MatchWhen(&cUrl, inv) assert.Equal(t, true, matchWhen6) } @@ -159,19 +158,19 @@ func TestRoute_matchFilter(t *testing.T) { rule4 := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => " + " host = 10.20.3.2,10.20.3.3,10.20.3.4")) rule5 := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => " + " host != 10.20.3.3")) rule6 := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => " + " serialization = fastjson")) - router1, _ := router7.Router(getRouteUrl(rule1)) - router2, _ := router7.Router(getRouteUrl(rule2)) - router3, _ := router7.Router(getRouteUrl(rule3)) - router4, _ := router7.Router(getRouteUrl(rule4)) - router5, _ := router7.Router(getRouteUrl(rule5)) - router6, _ := router7.Router(getRouteUrl(rule6)) + router1, _ := NewConditionRouterFactory().Router(getRouteUrl(rule1)) + router2, _ := NewConditionRouterFactory().Router(getRouteUrl(rule2)) + router3, _ := NewConditionRouterFactory().Router(getRouteUrl(rule3)) + router4, _ := NewConditionRouterFactory().Router(getRouteUrl(rule4)) + router5, _ := NewConditionRouterFactory().Router(getRouteUrl(rule5)) + router6, _ := NewConditionRouterFactory().Router(getRouteUrl(rule6)) cUrl, _ := common.NewURL(context.TODO(), "consumer://"+localIP+"/com.foo.BarService") - fileredInvokers1 := router7.Route(invokers, &cUrl, &invocation.RPCInvocation{}) - fileredInvokers2 := router7.Route(invokers, &cUrl, &invocation.RPCInvocation{}) - fileredInvokers3 := router7.Route(invokers, &cUrl, &invocation.RPCInvocation{}) - fileredInvokers4 := router7.Route(invokers, &cUrl, &invocation.RPCInvocation{}) - fileredInvokers5 := router7.Route(invokers, &cUrl, &invocation.RPCInvocation{}) - fileredInvokers6 := router7.Route(invokers, &cUrl, &invocation.RPCInvocation{}) + fileredInvokers1 := router1.Route(invokers, &cUrl, &invocation.RPCInvocation{}) + fileredInvokers2 := router2.Route(invokers, &cUrl, &invocation.RPCInvocation{}) + fileredInvokers3 := router3.Route(invokers, &cUrl, &invocation.RPCInvocation{}) + fileredInvokers4 := router4.Route(invokers, &cUrl, &invocation.RPCInvocation{}) + fileredInvokers5 := router5.Route(invokers, &cUrl, &invocation.RPCInvocation{}) + fileredInvokers6 := router6.Route(invokers, &cUrl, &invocation.RPCInvocation{}) assert.Equal(t, 1, len(fileredInvokers1)) assert.Equal(t, 0, len(fileredInvokers2)) assert.Equal(t, 0, len(fileredInvokers3)) @@ -184,7 +183,7 @@ func TestRoute_matchFilter(t *testing.T) { func TestRoute_methodRoute(t *testing.T) { inv := invocation.NewRPCInvocationWithOptions(invocation.WithMethodName("getFoo"), invocation.WithParameterTypes([]reflect.Type{}), invocation.WithArguments([]interface{}{})) rule := base64.URLEncoding.EncodeToString([]byte("host !=4.4.4.* & host = 2.2.2.2,1.1.1.1,3.3.3.3 => host = 1.2.3.4")) - router, _ := router7.Router(getRouteUrl(rule)) + router, _ := NewConditionRouterFactory().Router(getRouteUrl(rule)) url, _ := common.NewURL(context.TODO(), "consumer://1.1.1.1/com.foo.BarService?methods=setFoo,getFoo,findFoo") matchWhen, _ := router.(*ConditionRouter).MatchWhen(&url, inv) assert.Equal(t, true, matchWhen) @@ -193,12 +192,12 @@ func TestRoute_methodRoute(t *testing.T) { assert.Equal(t, true, matchWhen) url2, _ := common.NewURL(context.TODO(), "consumer://1.1.1.1/com.foo.BarService?methods=getFoo") rule2 := base64.URLEncoding.EncodeToString([]byte("methods=getFoo & host!=1.1.1.1 => host = 1.2.3.4")) - router2, _ := router7.Router(getRouteUrl(rule2)) + router2, _ := NewConditionRouterFactory().Router(getRouteUrl(rule2)) matchWhen, _ = router2.(*ConditionRouter).MatchWhen(&url2, inv) assert.Equal(t, false, matchWhen) url3, _ := common.NewURL(context.TODO(), "consumer://1.1.1.1/com.foo.BarService?methods=getFoo") rule3 := base64.URLEncoding.EncodeToString([]byte("methods=getFoo & host=1.1.1.1 => host = 1.2.3.4")) - router3, _ := router7.Router(getRouteUrl(rule3)) + router3, _ := NewConditionRouterFactory().Router(getRouteUrl(rule3)) matchWhen, _ = router3.(*ConditionRouter).MatchWhen(&url3, inv) assert.Equal(t, true, matchWhen) @@ -211,7 +210,7 @@ func TestRoute_ReturnFalse(t *testing.T) { inv := &invocation.RPCInvocation{} rule := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => false")) curl, _ := common.NewURL(context.TODO(), "consumer://"+localIP+"/com.foo.BarService") - router, _ := router7.Router(getRouteUrl(rule)) + router, _ := NewConditionRouterFactory().Router(getRouteUrl(rule)) fileredInvokers := router.(*ConditionRouter).Route(invokers, &curl, inv) assert.Equal(t, 0, len(fileredInvokers)) } @@ -223,7 +222,7 @@ func TestRoute_ReturnEmpty(t *testing.T) { inv := &invocation.RPCInvocation{} rule := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => ")) curl, _ := common.NewURL(context.TODO(), "consumer://"+localIP+"/com.foo.BarService") - router, _ := router7.Router(getRouteUrl(rule)) + router, _ := NewConditionRouterFactory().Router(getRouteUrl(rule)) fileredInvokers := router.(*ConditionRouter).Route(invokers, &curl, inv) assert.Equal(t, 0, len(fileredInvokers)) } @@ -234,7 +233,7 @@ func TestRoute_ReturnAll(t *testing.T) { inv := &invocation.RPCInvocation{} rule := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => " + " host = " + localIP)) curl, _ := common.NewURL(context.TODO(), "consumer://"+localIP+"/com.foo.BarService") - router, _ := router7.Router(getRouteUrl(rule)) + router, _ := NewConditionRouterFactory().Router(getRouteUrl(rule)) fileredInvokers := router.(*ConditionRouter).Route(invokers, &curl, inv) assert.Equal(t, invokers, fileredInvokers) } @@ -251,7 +250,7 @@ func TestRoute_HostFilter(t *testing.T) { inv := &invocation.RPCInvocation{} rule := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => " + " host = " + localIP)) curl, _ := common.NewURL(context.TODO(), "consumer://"+localIP+"/com.foo.BarService") - router, _ := router7.Router(getRouteUrl(rule)) + router, _ := NewConditionRouterFactory().Router(getRouteUrl(rule)) fileredInvokers := router.(*ConditionRouter).Route(invokers, &curl, inv) assert.Equal(t, 2, len(fileredInvokers)) assert.Equal(t, invoker2, fileredInvokers[0]) @@ -270,7 +269,7 @@ func TestRoute_Empty_HostFilter(t *testing.T) { inv := &invocation.RPCInvocation{} rule := base64.URLEncoding.EncodeToString([]byte(" => " + " host = " + localIP)) curl, _ := common.NewURL(context.TODO(), "consumer://"+localIP+"/com.foo.BarService") - router, _ := router7.Router(getRouteUrl(rule)) + router, _ := NewConditionRouterFactory().Router(getRouteUrl(rule)) fileredInvokers := router.(*ConditionRouter).Route(invokers, &curl, inv) assert.Equal(t, 2, len(fileredInvokers)) assert.Equal(t, invoker2, fileredInvokers[0]) @@ -289,7 +288,7 @@ func TestRoute_False_HostFilter(t *testing.T) { inv := &invocation.RPCInvocation{} rule := base64.URLEncoding.EncodeToString([]byte("true => " + " host = " + localIP)) curl, _ := common.NewURL(context.TODO(), "consumer://"+localIP+"/com.foo.BarService") - router, _ := router7.Router(getRouteUrl(rule)) + router, _ := NewConditionRouterFactory().Router(getRouteUrl(rule)) fileredInvokers := router.(*ConditionRouter).Route(invokers, &curl, inv) assert.Equal(t, 2, len(fileredInvokers)) assert.Equal(t, invoker2, fileredInvokers[0]) @@ -308,7 +307,7 @@ func TestRoute_Placeholder(t *testing.T) { inv := &invocation.RPCInvocation{} rule := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => " + " host = $host")) curl, _ := common.NewURL(context.TODO(), "consumer://"+localIP+"/com.foo.BarService") - router, _ := router7.Router(getRouteUrl(rule)) + router, _ := NewConditionRouterFactory().Router(getRouteUrl(rule)) fileredInvokers := router.(*ConditionRouter).Route(invokers, &curl, inv) assert.Equal(t, 2, len(fileredInvokers)) assert.Equal(t, invoker2, fileredInvokers[0]) @@ -327,7 +326,7 @@ func TestRoute_NoForce(t *testing.T) { inv := &invocation.RPCInvocation{} rule := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => " + " host = 1.2.3.4")) curl, _ := common.NewURL(context.TODO(), "consumer://"+localIP+"/com.foo.BarService") - router, _ := router7.Router(getRouteUrlWithNoForce(rule)) + router, _ := NewConditionRouterFactory().Router(getRouteUrlWithNoForce(rule)) fileredInvokers := router.(*ConditionRouter).Route(invokers, &curl, inv) assert.Equal(t, invokers, fileredInvokers) } @@ -344,7 +343,7 @@ func TestRoute_Force(t *testing.T) { inv := &invocation.RPCInvocation{} rule := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => " + " host = 1.2.3.4")) curl, _ := common.NewURL(context.TODO(), "consumer://"+localIP+"/com.foo.BarService") - router, _ := router7.Router(getRouteUrlWithForce(rule, "true")) + router, _ := NewConditionRouterFactory().Router(getRouteUrlWithForce(rule, "true")) fileredInvokers := router.(*ConditionRouter).Route(invokers, &curl, inv) assert.Equal(t, 0, len(fileredInvokers)) } -- GitLab