diff --git a/cluster/router/condition_router.go b/cluster/router/condition_router.go index a926e1adc26910fdf89ad2afcfe7e4482f81bf45..cc3fec83d95d57f9835eddf57943b4c754fad6b6 100644 --- a/cluster/router/condition_router.go +++ b/cluster/router/condition_router.go @@ -227,7 +227,7 @@ func (c *ConditionRouter) MatchThen(url common.URL, param common.URL) (bool, err func MatchCondition(pairs map[string]MatchPair, url *common.URL, param *common.URL, invocation protocol.Invocation) (bool, error) { sample := url.ToMap() if sample == nil { - return true, perrors.Errorf("") + return true, perrors.Errorf("url is not allowed be nil") } result := false for key, matchPair := range pairs { diff --git a/cluster/router/router_factory.go b/cluster/router/router_factory.go index 9f4aca2fd75acde55385a4af45a72cbcacdfc6ba..8f1f911ffa10b1589a0fa49046903171fe3c17df 100644 --- a/cluster/router/router_factory.go +++ b/cluster/router/router_factory.go @@ -10,8 +10,7 @@ func init() { extension.SetRouterFactory("condition", NewConditionRouterFactory) } -type ConditionRouterFactory struct { -} +type ConditionRouterFactory struct{} func NewConditionRouterFactory() cluster.RouterFactory { return ConditionRouterFactory{} diff --git a/common/url_test.go b/common/url_test.go index 4524d4859f165aef8571994f6738aba395a9b10f..986855370813c365e7acc36dc624a6b4dc231c76 100644 --- a/common/url_test.go +++ b/common/url_test.go @@ -19,6 +19,7 @@ package common import ( "context" + "encoding/base64" "net/url" "testing" ) @@ -129,6 +130,42 @@ func TestURL_GetParamBool(t *testing.T) { assert.Equal(t, false, v) } +func TestURL_GetParameterAndDecoded(t *testing.T) { + rule := "host = 2.2.2.2,1.1.1.1,3.3.3.3 & host !=1.1.1.1 => host = 1.2.3.4" + params := url.Values{} + params.Set("rule", base64.URLEncoding.EncodeToString([]byte(rule))) + u := URL{baseUrl: baseUrl{Params: params}} + v, _ := u.GetParameterAndDecoded("rule") + assert.Equal(t, rule, v) +} +func TestURL_GetRawParameter(t *testing.T) { + u, _ := NewURL(context.TODO(), "condition://0.0.0.0:8080/com.foo.BarService?serialization=fastjson") + u.Username = "test" + u.Password = "test" + assert.Equal(t, "condition", u.GetRawParameter("protocol")) + assert.Equal(t, "0.0.0.0", u.GetRawParameter("host")) + assert.Equal(t, "8080", u.GetRawParameter("port")) + assert.Equal(t, "test", u.GetRawParameter("username")) + assert.Equal(t, "test", u.GetRawParameter("password")) + assert.Equal(t, "/com.foo.BarService", u.GetRawParameter("path")) + assert.Equal(t, "fastjson", u.GetRawParameter("serialization")) +} +func TestURL_ToMap(t *testing.T) { + u, _ := NewURL(context.TODO(), "condition://0.0.0.0:8080/com.foo.BarService?serialization=fastjson") + u.Username = "test" + u.Password = "test" + + m := u.ToMap() + assert.Equal(t, 7, len(m)) + assert.Equal(t, "condition", m["protocol"]) + assert.Equal(t, "0.0.0.0", m["host"]) + assert.Equal(t, "8080", m["port"]) + assert.Equal(t, "test", m["username"]) + assert.Equal(t, "test", m["password"]) + assert.Equal(t, "/com.foo.BarService", m["path"]) + assert.Equal(t, "fastjson", m["serialization"]) +} + func TestURL_GetMethodParamInt(t *testing.T) { params := url.Values{} params.Set("methods.GetValue.timeout", "3")