Skip to content
Snippets Groups Projects
Commit a466df08 authored by Joe Zou's avatar Joe Zou Committed by GitHub
Browse files

Merge pull request #590 from georgehao/develop

Imp: modify codes by code review of gitee
parents 2ea7570c d14c44cd
No related branches found
No related tags found
No related merge requests found
Showing
with 209 additions and 168 deletions
...@@ -19,6 +19,7 @@ package cluster_impl ...@@ -19,6 +19,7 @@ package cluster_impl
import ( import (
"context" "context"
"fmt"
"strings" "strings"
"testing" "testing"
) )
...@@ -32,6 +33,7 @@ import ( ...@@ -32,6 +33,7 @@ import (
"github.com/apache/dubbo-go/cluster/directory" "github.com/apache/dubbo-go/cluster/directory"
"github.com/apache/dubbo-go/cluster/loadbalance" "github.com/apache/dubbo-go/cluster/loadbalance"
"github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common"
"github.com/apache/dubbo-go/common/constant"
"github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/extension"
"github.com/apache/dubbo-go/protocol" "github.com/apache/dubbo-go/protocol"
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
...@@ -39,7 +41,8 @@ import ( ...@@ -39,7 +41,8 @@ import (
) )
var ( var (
availableUrl, _ = common.NewURL("dubbo://192.168.1.1:20000/com.ikurento.user.UserProvider") availableUrl, _ = common.NewURL(fmt.Sprintf("dubbo://%s:%d/com.ikurento.user.UserProvider",
constant.LOCAL_HOST_VALUE, constant.DEFAULT_PORT))
) )
func registerAvailable(invoker *mock.MockInvoker) protocol.Invoker { func registerAvailable(invoker *mock.MockInvoker) protocol.Invoker {
......
...@@ -88,6 +88,10 @@ func (invoker *baseClusterInvoker) checkWhetherDestroyed() error { ...@@ -88,6 +88,10 @@ func (invoker *baseClusterInvoker) checkWhetherDestroyed() error {
func (invoker *baseClusterInvoker) doSelect(lb cluster.LoadBalance, invocation protocol.Invocation, invokers []protocol.Invoker, invoked []protocol.Invoker) protocol.Invoker { func (invoker *baseClusterInvoker) doSelect(lb cluster.LoadBalance, invocation protocol.Invocation, invokers []protocol.Invoker, invoked []protocol.Invoker) protocol.Invoker {
var selectedInvoker protocol.Invoker var selectedInvoker protocol.Invoker
if len(invokers) <= 0 {
return selectedInvoker
}
url := invokers[0].GetUrl() url := invokers[0].GetUrl()
sticky := url.GetParamBool(constant.STICKY_KEY, false) sticky := url.GetParamBool(constant.STICKY_KEY, false)
//Get the service method sticky config if have //Get the service method sticky config if have
...@@ -97,19 +101,17 @@ func (invoker *baseClusterInvoker) doSelect(lb cluster.LoadBalance, invocation p ...@@ -97,19 +101,17 @@ func (invoker *baseClusterInvoker) doSelect(lb cluster.LoadBalance, invocation p
invoker.stickyInvoker = nil invoker.stickyInvoker = nil
} }
if sticky && invoker.stickyInvoker != nil && (invoked == nil || !isInvoked(invoker.stickyInvoker, invoked)) { if sticky && invoker.availablecheck &&
if invoker.availablecheck && invoker.stickyInvoker.IsAvailable() { invoker.stickyInvoker != nil && invoker.stickyInvoker.IsAvailable() &&
return invoker.stickyInvoker (invoked == nil || !isInvoked(invoker.stickyInvoker, invoked)) {
} return invoker.stickyInvoker
} }
selectedInvoker = invoker.doSelectInvoker(lb, invocation, invokers, invoked) selectedInvoker = invoker.doSelectInvoker(lb, invocation, invokers, invoked)
if sticky { if sticky {
invoker.stickyInvoker = selectedInvoker invoker.stickyInvoker = selectedInvoker
} }
return selectedInvoker return selectedInvoker
} }
func (invoker *baseClusterInvoker) doSelectInvoker(lb cluster.LoadBalance, invocation protocol.Invocation, invokers []protocol.Invoker, invoked []protocol.Invoker) protocol.Invoker { func (invoker *baseClusterInvoker) doSelectInvoker(lb cluster.LoadBalance, invocation protocol.Invocation, invokers []protocol.Invoker, invoked []protocol.Invoker) protocol.Invoker {
......
...@@ -33,7 +33,7 @@ import ( ...@@ -33,7 +33,7 @@ import (
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
) )
func Test_StickyNormal(t *testing.T) { func TestStickyNormal(t *testing.T) {
invokers := []protocol.Invoker{} invokers := []protocol.Invoker{}
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
url, _ := common.NewURL(fmt.Sprintf("dubbo://192.168.1.%v:20000/com.ikurento.user.UserProvider", i)) url, _ := common.NewURL(fmt.Sprintf("dubbo://192.168.1.%v:20000/com.ikurento.user.UserProvider", i))
...@@ -43,12 +43,15 @@ func Test_StickyNormal(t *testing.T) { ...@@ -43,12 +43,15 @@ func Test_StickyNormal(t *testing.T) {
base := &baseClusterInvoker{} base := &baseClusterInvoker{}
base.availablecheck = true base.availablecheck = true
invoked := []protocol.Invoker{} invoked := []protocol.Invoker{}
result := base.doSelect(loadbalance.NewRandomLoadBalance(), invocation.NewRPCInvocation("getUser", nil, nil), invokers, invoked)
result1 := base.doSelect(loadbalance.NewRandomLoadBalance(), invocation.NewRPCInvocation("getUser", nil, nil), invokers, invoked) tmpRandomBalance := loadbalance.NewRandomLoadBalance()
tmpInvocation := invocation.NewRPCInvocation("getUser", nil, nil)
result := base.doSelect(tmpRandomBalance, tmpInvocation, invokers, invoked)
result1 := base.doSelect(tmpRandomBalance, tmpInvocation, invokers, invoked)
assert.Equal(t, result, result1) assert.Equal(t, result, result1)
} }
func Test_StickyNormalWhenError(t *testing.T) { func TestStickyNormalWhenError(t *testing.T) {
invokers := []protocol.Invoker{} invokers := []protocol.Invoker{}
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
url, _ := common.NewURL(fmt.Sprintf("dubbo://192.168.1.%v:20000/com.ikurento.user.UserProvider", i)) url, _ := common.NewURL(fmt.Sprintf("dubbo://192.168.1.%v:20000/com.ikurento.user.UserProvider", i))
......
...@@ -20,6 +20,7 @@ package cluster_impl ...@@ -20,6 +20,7 @@ package cluster_impl
import ( import (
"context" "context"
"errors" "errors"
"fmt"
"testing" "testing"
) )
...@@ -32,6 +33,7 @@ import ( ...@@ -32,6 +33,7 @@ import (
"github.com/apache/dubbo-go/cluster/directory" "github.com/apache/dubbo-go/cluster/directory"
"github.com/apache/dubbo-go/cluster/loadbalance" "github.com/apache/dubbo-go/cluster/loadbalance"
"github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common"
"github.com/apache/dubbo-go/common/constant"
"github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/extension"
"github.com/apache/dubbo-go/protocol" "github.com/apache/dubbo-go/protocol"
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
...@@ -39,10 +41,11 @@ import ( ...@@ -39,10 +41,11 @@ import (
) )
var ( var (
broadcastUrl, _ = common.NewURL("dubbo://192.168.1.1:20000/com.ikurento.user.UserProvider") broadcastUrl, _ = common.NewURL(
fmt.Sprintf("dubbo://%s:%d/com.ikurento.user.UserProvider", constant.LOCAL_HOST_VALUE, constant.DEFAULT_PORT))
) )
func registerBroadcast(t *testing.T, mockInvokers ...*mock.MockInvoker) protocol.Invoker { func registerBroadcast(mockInvokers ...*mock.MockInvoker) protocol.Invoker {
extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance) extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance)
invokers := []protocol.Invoker{} invokers := []protocol.Invoker{}
...@@ -59,7 +62,7 @@ func registerBroadcast(t *testing.T, mockInvokers ...*mock.MockInvoker) protocol ...@@ -59,7 +62,7 @@ func registerBroadcast(t *testing.T, mockInvokers ...*mock.MockInvoker) protocol
return clusterInvoker return clusterInvoker
} }
func Test_BroadcastInvokeSuccess(t *testing.T) { func TestBroadcastInvokeSuccess(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
...@@ -72,13 +75,13 @@ func Test_BroadcastInvokeSuccess(t *testing.T) { ...@@ -72,13 +75,13 @@ func Test_BroadcastInvokeSuccess(t *testing.T) {
invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult) invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
} }
clusterInvoker := registerBroadcast(t, invokers...) clusterInvoker := registerBroadcast(invokers...)
result := clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{}) result := clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{})
assert.Equal(t, mockResult, result) assert.Equal(t, mockResult, result)
} }
func Test_BroadcastInvokeFailed(t *testing.T) { func TestBroadcastInvokeFailed(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
...@@ -102,7 +105,7 @@ func Test_BroadcastInvokeFailed(t *testing.T) { ...@@ -102,7 +105,7 @@ func Test_BroadcastInvokeFailed(t *testing.T) {
invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult) invoker.EXPECT().Invoke(gomock.Any()).Return(mockResult)
} }
clusterInvoker := registerBroadcast(t, invokers...) clusterInvoker := registerBroadcast(invokers...)
result := clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{}) result := clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{})
assert.Equal(t, mockFailedResult.Err, result.Error()) assert.Equal(t, mockFailedResult.Err, result.Error())
......
...@@ -19,6 +19,7 @@ package cluster_impl ...@@ -19,6 +19,7 @@ package cluster_impl
import ( import (
"context" "context"
"fmt"
"sync" "sync"
"testing" "testing"
"time" "time"
...@@ -34,6 +35,7 @@ import ( ...@@ -34,6 +35,7 @@ import (
"github.com/apache/dubbo-go/cluster/directory" "github.com/apache/dubbo-go/cluster/directory"
"github.com/apache/dubbo-go/cluster/loadbalance" "github.com/apache/dubbo-go/cluster/loadbalance"
"github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common"
"github.com/apache/dubbo-go/common/constant"
"github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/extension"
"github.com/apache/dubbo-go/protocol" "github.com/apache/dubbo-go/protocol"
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
...@@ -41,11 +43,12 @@ import ( ...@@ -41,11 +43,12 @@ import (
) )
var ( var (
failbackUrl, _ = common.NewURL("dubbo://192.168.1.1:20000/com.ikurento.user.UserProvider") failbackUrl, _ = common.NewURL(
fmt.Sprintf("dubbo://%s:%d/com.ikurento.user.UserProvider", constant.LOCAL_HOST_VALUE, constant.DEFAULT_PORT))
) )
// registerFailback register failbackCluster to cluster extension. // registerFailback register failbackCluster to cluster extension.
func registerFailback(t *testing.T, invoker *mock.MockInvoker) protocol.Invoker { func registerFailback(invoker *mock.MockInvoker) protocol.Invoker {
extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance) extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance)
failbackCluster := NewFailbackCluster() failbackCluster := NewFailbackCluster()
...@@ -60,12 +63,12 @@ func registerFailback(t *testing.T, invoker *mock.MockInvoker) protocol.Invoker ...@@ -60,12 +63,12 @@ func registerFailback(t *testing.T, invoker *mock.MockInvoker) protocol.Invoker
} }
// success firstly, failback should return origin invoke result. // success firstly, failback should return origin invoke result.
func Test_FailbackSuceess(t *testing.T) { func TestFailbackSuceess(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
invoker := mock.NewMockInvoker(ctrl) invoker := mock.NewMockInvoker(ctrl)
clusterInvoker := registerFailback(t, invoker).(*failbackClusterInvoker) clusterInvoker := registerFailback(invoker).(*failbackClusterInvoker)
invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes() invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes()
...@@ -77,12 +80,12 @@ func Test_FailbackSuceess(t *testing.T) { ...@@ -77,12 +80,12 @@ func Test_FailbackSuceess(t *testing.T) {
} }
// failed firstly, success later after one retry. // failed firstly, success later after one retry.
func Test_FailbackRetryOneSuccess(t *testing.T) { func TestFailbackRetryOneSuccess(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
invoker := mock.NewMockInvoker(ctrl) invoker := mock.NewMockInvoker(ctrl)
clusterInvoker := registerFailback(t, invoker).(*failbackClusterInvoker) clusterInvoker := registerFailback(invoker).(*failbackClusterInvoker)
invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes() invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes()
...@@ -95,7 +98,7 @@ func Test_FailbackRetryOneSuccess(t *testing.T) { ...@@ -95,7 +98,7 @@ func Test_FailbackRetryOneSuccess(t *testing.T) {
wg.Add(1) wg.Add(1)
now := time.Now() now := time.Now()
mockSuccResult := &protocol.RPCResult{Rest: rest{tried: 0, success: true}} mockSuccResult := &protocol.RPCResult{Rest: rest{tried: 0, success: true}}
invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(func(invocation protocol.Invocation) protocol.Result { invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(func(protocol.Invocation) protocol.Result {
delta := time.Since(now).Nanoseconds() / int64(time.Second) delta := time.Since(now).Nanoseconds() / int64(time.Second)
assert.True(t, delta >= 5) assert.True(t, delta >= 5)
wg.Done() wg.Done()
...@@ -120,12 +123,12 @@ func Test_FailbackRetryOneSuccess(t *testing.T) { ...@@ -120,12 +123,12 @@ func Test_FailbackRetryOneSuccess(t *testing.T) {
} }
// failed firstly, and failed again after ech retry time. // failed firstly, and failed again after ech retry time.
func Test_FailbackRetryFailed(t *testing.T) { func TestFailbackRetryFailed(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
invoker := mock.NewMockInvoker(ctrl) invoker := mock.NewMockInvoker(ctrl)
clusterInvoker := registerFailback(t, invoker).(*failbackClusterInvoker) clusterInvoker := registerFailback(invoker).(*failbackClusterInvoker)
invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes() invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes()
...@@ -141,7 +144,7 @@ func Test_FailbackRetryFailed(t *testing.T) { ...@@ -141,7 +144,7 @@ func Test_FailbackRetryFailed(t *testing.T) {
// add retry call that eventually failed. // add retry call that eventually failed.
for i := 0; i < retries; i++ { for i := 0; i < retries; i++ {
j := i + 1 j := i + 1
invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(func(invocation protocol.Invocation) protocol.Result { invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(func(protocol.Invocation) protocol.Result {
delta := time.Since(now).Nanoseconds() / int64(time.Second) delta := time.Since(now).Nanoseconds() / int64(time.Second)
assert.True(t, delta >= int64(5*j)) assert.True(t, delta >= int64(5*j))
wg.Done() wg.Done()
...@@ -166,12 +169,12 @@ func Test_FailbackRetryFailed(t *testing.T) { ...@@ -166,12 +169,12 @@ func Test_FailbackRetryFailed(t *testing.T) {
} }
// add 10 tasks but all failed firstly, and failed again with one retry. // add 10 tasks but all failed firstly, and failed again with one retry.
func Test_FailbackRetryFailed10Times(t *testing.T) { func TestFailbackRetryFailed10Times(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
invoker := mock.NewMockInvoker(ctrl) invoker := mock.NewMockInvoker(ctrl)
clusterInvoker := registerFailback(t, invoker).(*failbackClusterInvoker) clusterInvoker := registerFailback(invoker).(*failbackClusterInvoker)
clusterInvoker.maxRetries = 10 clusterInvoker.maxRetries = 10
invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes() invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes()
...@@ -184,7 +187,7 @@ func Test_FailbackRetryFailed10Times(t *testing.T) { ...@@ -184,7 +187,7 @@ func Test_FailbackRetryFailed10Times(t *testing.T) {
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(10) wg.Add(10)
now := time.Now() now := time.Now()
invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(func(invocation protocol.Invocation) protocol.Result { invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(func(protocol.Invocation) protocol.Result {
delta := time.Since(now).Nanoseconds() / int64(time.Second) delta := time.Since(now).Nanoseconds() / int64(time.Second)
assert.True(t, delta >= 5) assert.True(t, delta >= 5)
wg.Done() wg.Done()
...@@ -208,12 +211,12 @@ func Test_FailbackRetryFailed10Times(t *testing.T) { ...@@ -208,12 +211,12 @@ func Test_FailbackRetryFailed10Times(t *testing.T) {
assert.Equal(t, int64(0), clusterInvoker.taskList.Len()) assert.Equal(t, int64(0), clusterInvoker.taskList.Len())
} }
func Test_FailbackOutOfLimit(t *testing.T) { func TestFailbackOutOfLimit(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
invoker := mock.NewMockInvoker(ctrl) invoker := mock.NewMockInvoker(ctrl)
clusterInvoker := registerFailback(t, invoker).(*failbackClusterInvoker) clusterInvoker := registerFailback(invoker).(*failbackClusterInvoker)
clusterInvoker.failbackTasks = 1 clusterInvoker.failbackTasks = 1
invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes() invoker.EXPECT().GetUrl().Return(failbackUrl).AnyTimes()
......
...@@ -19,6 +19,7 @@ package cluster_impl ...@@ -19,6 +19,7 @@ package cluster_impl
import ( import (
"context" "context"
"fmt"
"testing" "testing"
) )
...@@ -32,6 +33,7 @@ import ( ...@@ -32,6 +33,7 @@ import (
"github.com/apache/dubbo-go/cluster/directory" "github.com/apache/dubbo-go/cluster/directory"
"github.com/apache/dubbo-go/cluster/loadbalance" "github.com/apache/dubbo-go/cluster/loadbalance"
"github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common"
"github.com/apache/dubbo-go/common/constant"
"github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/extension"
"github.com/apache/dubbo-go/protocol" "github.com/apache/dubbo-go/protocol"
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
...@@ -39,11 +41,12 @@ import ( ...@@ -39,11 +41,12 @@ import (
) )
var ( var (
failfastUrl, _ = common.NewURL("dubbo://192.168.1.1:20000/com.ikurento.user.UserProvider") failfastUrl, _ = common.NewURL(
fmt.Sprintf("dubbo://%s:%d/com.ikurento.user.UserProvider", constant.LOCAL_HOST_VALUE, constant.DEFAULT_PORT))
) )
// registerFailfast register failfastCluster to cluster extension. // registerFailfast register failfastCluster to cluster extension.
func registerFailfast(t *testing.T, invoker *mock.MockInvoker) protocol.Invoker { func registerFailfast(invoker *mock.MockInvoker) protocol.Invoker {
extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance) extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance)
failfastCluster := NewFailFastCluster() failfastCluster := NewFailFastCluster()
...@@ -57,12 +60,12 @@ func registerFailfast(t *testing.T, invoker *mock.MockInvoker) protocol.Invoker ...@@ -57,12 +60,12 @@ func registerFailfast(t *testing.T, invoker *mock.MockInvoker) protocol.Invoker
return clusterInvoker return clusterInvoker
} }
func Test_FailfastInvokeSuccess(t *testing.T) { func TestFailfastInvokeSuccess(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
invoker := mock.NewMockInvoker(ctrl) invoker := mock.NewMockInvoker(ctrl)
clusterInvoker := registerFailfast(t, invoker) clusterInvoker := registerFailfast(invoker)
invoker.EXPECT().GetUrl().Return(failfastUrl).AnyTimes() invoker.EXPECT().GetUrl().Return(failfastUrl).AnyTimes()
...@@ -77,12 +80,12 @@ func Test_FailfastInvokeSuccess(t *testing.T) { ...@@ -77,12 +80,12 @@ func Test_FailfastInvokeSuccess(t *testing.T) {
assert.Equal(t, 0, res.tried) assert.Equal(t, 0, res.tried)
} }
func Test_FailfastInvokeFail(t *testing.T) { func TestFailfastInvokeFail(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
invoker := mock.NewMockInvoker(ctrl) invoker := mock.NewMockInvoker(ctrl)
clusterInvoker := registerFailfast(t, invoker) clusterInvoker := registerFailfast(invoker)
invoker.EXPECT().GetUrl().Return(failfastUrl).AnyTimes() invoker.EXPECT().GetUrl().Return(failfastUrl).AnyTimes()
......
...@@ -45,52 +45,35 @@ func newFailoverClusterInvoker(directory cluster.Directory) protocol.Invoker { ...@@ -45,52 +45,35 @@ func newFailoverClusterInvoker(directory cluster.Directory) protocol.Invoker {
} }
func (invoker *failoverClusterInvoker) Invoke(ctx context.Context, invocation protocol.Invocation) protocol.Result { func (invoker *failoverClusterInvoker) Invoke(ctx context.Context, invocation protocol.Invocation) protocol.Result {
var (
result protocol.Result
invoked []protocol.Invoker
providers []string
)
invokers := invoker.directory.List(invocation) invokers := invoker.directory.List(invocation)
err := invoker.checkInvokers(invokers, invocation) if err := invoker.checkInvokers(invokers, invocation); err != nil {
if err != nil {
return &protocol.RPCResult{Err: err} return &protocol.RPCResult{Err: err}
} }
loadbalance := getLoadBalance(invokers[0], invocation)
methodName := invocation.MethodName() methodName := invocation.MethodName()
url := invokers[0].GetUrl() retries := getRetries(invokers, methodName)
loadBalance := getLoadBalance(invokers[0], invocation)
//get reties
retriesConfig := url.GetParam(constant.RETRIES_KEY, constant.DEFAULT_RETRIES)
//Get the service method loadbalance config if have
if v := url.GetMethodParam(methodName, constant.RETRIES_KEY, ""); len(v) != 0 {
retriesConfig = v
}
retries, err := strconv.Atoi(retriesConfig)
if err != nil || retries < 0 {
logger.Error("Your retries config is invalid,pls do a check. And will use the default retries configuration instead.")
retries = constant.DEFAULT_RETRIES_INT
}
invoked := []protocol.Invoker{}
providers := []string{}
var result protocol.Result
if retries > len(invokers) {
retries = len(invokers)
}
for i := 0; i <= retries; i++ { for i := 0; i <= retries; i++ {
//Reselect before retry to avoid a change of candidate `invokers`. //Reselect before retry to avoid a change of candidate `invokers`.
//NOTE: if `invokers` changed, then `invoked` also lose accuracy. //NOTE: if `invokers` changed, then `invoked` also lose accuracy.
if i > 0 { if i > 0 {
err := invoker.checkWhetherDestroyed() if err := invoker.checkWhetherDestroyed(); err != nil {
if err != nil {
return &protocol.RPCResult{Err: err} return &protocol.RPCResult{Err: err}
} }
invokers = invoker.directory.List(invocation) invokers = invoker.directory.List(invocation)
err = invoker.checkInvokers(invokers, invocation) if err := invoker.checkInvokers(invokers, invocation); err != nil {
if err != nil {
return &protocol.RPCResult{Err: err} return &protocol.RPCResult{Err: err}
} }
} }
ivk := invoker.doSelect(loadbalance, invocation, invokers, invoked) ivk := invoker.doSelect(loadBalance, invocation, invokers, invoked)
if ivk == nil { if ivk == nil {
continue continue
} }
...@@ -100,13 +83,40 @@ func (invoker *failoverClusterInvoker) Invoke(ctx context.Context, invocation pr ...@@ -100,13 +83,40 @@ func (invoker *failoverClusterInvoker) Invoke(ctx context.Context, invocation pr
if result.Error() != nil { if result.Error() != nil {
providers = append(providers, ivk.GetUrl().Key()) providers = append(providers, ivk.GetUrl().Key())
continue continue
} else {
return result
} }
return result
} }
ip, _ := gxnet.GetLocalIP() ip, _ := gxnet.GetLocalIP()
return &protocol.RPCResult{Err: perrors.Errorf("Failed to invoke the method %v in the service %v. Tried %v times of "+ invokerSvc := invoker.GetUrl().Service()
"the providers %v (%v/%v)from the registry %v on the consumer %v using the dubbo version %v. Last error is %v.", invokerUrl := invoker.directory.GetUrl()
methodName, invoker.GetUrl().Service(), retries, providers, len(providers), len(invokers), invoker.directory.GetUrl(), ip, constant.Version, result.Error().Error(), return &protocol.RPCResult{
)} Err: perrors.Errorf("Failed to invoke the method %v in the service %v. Tried %v times of the providers %v (%v/%v)from the registry %v on the consumer %v using the dubbo version %v. Last error is %v.",
methodName, invokerSvc, retries, providers, len(providers), len(invokers), invokerUrl, ip, constant.Version, result.Error().Error(),
)}
}
func getRetries(invokers []protocol.Invoker, methodName string) int {
if len(invokers) <= 0 {
return constant.DEFAULT_RETRIES_INT
}
url := invokers[0].GetUrl()
//get reties
retriesConfig := url.GetParam(constant.RETRIES_KEY, constant.DEFAULT_RETRIES)
//Get the service method loadbalance config if have
if v := url.GetMethodParam(methodName, constant.RETRIES_KEY, ""); len(v) != 0 {
retriesConfig = v
}
retries, err := strconv.Atoi(retriesConfig)
if err != nil || retries < 0 {
logger.Error("Your retries config is invalid,pls do a check. And will use the default retries configuration instead.")
retries = constant.DEFAULT_RETRIES_INT
}
if retries > len(invokers) {
retries = len(invokers)
}
return retries
} }
...@@ -101,7 +101,7 @@ func (bi *MockInvoker) Destroy() { ...@@ -101,7 +101,7 @@ func (bi *MockInvoker) Destroy() {
var count int var count int
func normalInvoke(t *testing.T, successCount int, urlParam url.Values, invocations ...*invocation.RPCInvocation) protocol.Result { func normalInvoke(successCount int, urlParam url.Values, invocations ...*invocation.RPCInvocation) protocol.Result {
extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance) extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance)
failoverCluster := NewFailoverCluster() failoverCluster := NewFailoverCluster()
...@@ -119,40 +119,40 @@ func normalInvoke(t *testing.T, successCount int, urlParam url.Values, invocatio ...@@ -119,40 +119,40 @@ func normalInvoke(t *testing.T, successCount int, urlParam url.Values, invocatio
return clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{}) return clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{})
} }
func Test_FailoverInvokeSuccess(t *testing.T) { func TestFailoverInvokeSuccess(t *testing.T) {
urlParams := url.Values{} urlParams := url.Values{}
result := normalInvoke(t, 3, urlParams) result := normalInvoke(3, urlParams)
assert.NoError(t, result.Error()) assert.NoError(t, result.Error())
count = 0 count = 0
} }
func Test_FailoverInvokeFail(t *testing.T) { func TestFailoverInvokeFail(t *testing.T) {
urlParams := url.Values{} urlParams := url.Values{}
result := normalInvoke(t, 4, urlParams) result := normalInvoke(4, urlParams)
assert.Errorf(t, result.Error(), "error") assert.Errorf(t, result.Error(), "error")
count = 0 count = 0
} }
func Test_FailoverInvoke1(t *testing.T) { func TestFailoverInvoke1(t *testing.T) {
urlParams := url.Values{} urlParams := url.Values{}
urlParams.Set(constant.RETRIES_KEY, "3") urlParams.Set(constant.RETRIES_KEY, "3")
result := normalInvoke(t, 4, urlParams) result := normalInvoke(4, urlParams)
assert.NoError(t, result.Error()) assert.NoError(t, result.Error())
count = 0 count = 0
} }
func Test_FailoverInvoke2(t *testing.T) { func TestFailoverInvoke2(t *testing.T) {
urlParams := url.Values{} urlParams := url.Values{}
urlParams.Set(constant.RETRIES_KEY, "2") urlParams.Set(constant.RETRIES_KEY, "2")
urlParams.Set("methods.test."+constant.RETRIES_KEY, "3") urlParams.Set("methods.test."+constant.RETRIES_KEY, "3")
ivc := invocation.NewRPCInvocationWithOptions(invocation.WithMethodName("test")) ivc := invocation.NewRPCInvocationWithOptions(invocation.WithMethodName("test"))
result := normalInvoke(t, 4, urlParams, ivc) result := normalInvoke(4, urlParams, ivc)
assert.NoError(t, result.Error()) assert.NoError(t, result.Error())
count = 0 count = 0
} }
func Test_FailoverDestroy(t *testing.T) { func TestFailoverDestroy(t *testing.T) {
extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance) extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance)
failoverCluster := NewFailoverCluster() failoverCluster := NewFailoverCluster()
...@@ -170,5 +170,4 @@ func Test_FailoverDestroy(t *testing.T) { ...@@ -170,5 +170,4 @@ func Test_FailoverDestroy(t *testing.T) {
count = 0 count = 0
clusterInvoker.Destroy() clusterInvoker.Destroy()
assert.Equal(t, false, clusterInvoker.IsAvailable()) assert.Equal(t, false, clusterInvoker.IsAvailable())
} }
...@@ -19,6 +19,7 @@ package cluster_impl ...@@ -19,6 +19,7 @@ package cluster_impl
import ( import (
"context" "context"
"fmt"
"testing" "testing"
) )
...@@ -32,6 +33,7 @@ import ( ...@@ -32,6 +33,7 @@ import (
"github.com/apache/dubbo-go/cluster/directory" "github.com/apache/dubbo-go/cluster/directory"
"github.com/apache/dubbo-go/cluster/loadbalance" "github.com/apache/dubbo-go/cluster/loadbalance"
"github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common"
"github.com/apache/dubbo-go/common/constant"
"github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/extension"
"github.com/apache/dubbo-go/protocol" "github.com/apache/dubbo-go/protocol"
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
...@@ -39,11 +41,12 @@ import ( ...@@ -39,11 +41,12 @@ import (
) )
var ( var (
failsafeUrl, _ = common.NewURL("dubbo://192.168.1.1:20000/com.ikurento.user.UserProvider") failsafeUrl, _ = common.NewURL(
fmt.Sprintf("dubbo://%s:%d/com.ikurento.user.UserProvider", constant.LOCAL_HOST_VALUE, constant.DEFAULT_PORT))
) )
// registerFailsafe register failsafeCluster to cluster extension. // registerFailsafe register failsafeCluster to cluster extension.
func registerFailsafe(t *testing.T, invoker *mock.MockInvoker) protocol.Invoker { func registerFailsafe(invoker *mock.MockInvoker) protocol.Invoker {
extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance) extension.SetLoadbalance("random", loadbalance.NewRandomLoadBalance)
failsafeCluster := NewFailsafeCluster() failsafeCluster := NewFailsafeCluster()
...@@ -57,12 +60,12 @@ func registerFailsafe(t *testing.T, invoker *mock.MockInvoker) protocol.Invoker ...@@ -57,12 +60,12 @@ func registerFailsafe(t *testing.T, invoker *mock.MockInvoker) protocol.Invoker
return clusterInvoker return clusterInvoker
} }
func Test_FailSafeInvokeSuccess(t *testing.T) { func TestFailSafeInvokeSuccess(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
invoker := mock.NewMockInvoker(ctrl) invoker := mock.NewMockInvoker(ctrl)
clusterInvoker := registerFailsafe(t, invoker) clusterInvoker := registerFailsafe(invoker)
invoker.EXPECT().GetUrl().Return(failsafeUrl).AnyTimes() invoker.EXPECT().GetUrl().Return(failsafeUrl).AnyTimes()
...@@ -76,12 +79,12 @@ func Test_FailSafeInvokeSuccess(t *testing.T) { ...@@ -76,12 +79,12 @@ func Test_FailSafeInvokeSuccess(t *testing.T) {
assert.True(t, res.success) assert.True(t, res.success)
} }
func Test_FailSafeInvokeFail(t *testing.T) { func TestFailSafeInvokeFail(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
invoker := mock.NewMockInvoker(ctrl) invoker := mock.NewMockInvoker(ctrl)
clusterInvoker := registerFailsafe(t, invoker) clusterInvoker := registerFailsafe(invoker)
invoker.EXPECT().GetUrl().Return(failsafeUrl).AnyTimes() invoker.EXPECT().GetUrl().Return(failsafeUrl).AnyTimes()
......
...@@ -46,14 +46,12 @@ func newForkingClusterInvoker(directory cluster.Directory) protocol.Invoker { ...@@ -46,14 +46,12 @@ func newForkingClusterInvoker(directory cluster.Directory) protocol.Invoker {
// Invoke ... // Invoke ...
func (invoker *forkingClusterInvoker) Invoke(ctx context.Context, invocation protocol.Invocation) protocol.Result { func (invoker *forkingClusterInvoker) Invoke(ctx context.Context, invocation protocol.Invocation) protocol.Result {
err := invoker.checkWhetherDestroyed() if err := invoker.checkWhetherDestroyed(); err != nil {
if err != nil {
return &protocol.RPCResult{Err: err} return &protocol.RPCResult{Err: err}
} }
invokers := invoker.directory.List(invocation) invokers := invoker.directory.List(invocation)
err = invoker.checkInvokers(invokers, invocation) if err := invoker.checkInvokers(invokers, invocation); err != nil {
if err != nil {
return &protocol.RPCResult{Err: err} return &protocol.RPCResult{Err: err}
} }
...@@ -63,11 +61,9 @@ func (invoker *forkingClusterInvoker) Invoke(ctx context.Context, invocation pro ...@@ -63,11 +61,9 @@ func (invoker *forkingClusterInvoker) Invoke(ctx context.Context, invocation pro
if forks < 0 || forks > len(invokers) { if forks < 0 || forks > len(invokers) {
selected = invokers selected = invokers
} else { } else {
selected = make([]protocol.Invoker, 0) loadBalance := getLoadBalance(invokers[0], invocation)
loadbalance := getLoadBalance(invokers[0], invocation)
for i := 0; i < forks; i++ { for i := 0; i < forks; i++ {
ivk := invoker.doSelect(loadbalance, invocation, invokers, selected) if ivk := invoker.doSelect(loadBalance, invocation, invokers, selected); ivk != nil {
if ivk != nil {
selected = append(selected, ivk) selected = append(selected, ivk)
} }
} }
...@@ -77,8 +73,7 @@ func (invoker *forkingClusterInvoker) Invoke(ctx context.Context, invocation pro ...@@ -77,8 +73,7 @@ func (invoker *forkingClusterInvoker) Invoke(ctx context.Context, invocation pro
for _, ivk := range selected { for _, ivk := range selected {
go func(k protocol.Invoker) { go func(k protocol.Invoker) {
result := k.Invoke(ctx, invocation) result := k.Invoke(ctx, invocation)
err := resultQ.Put(result) if err := resultQ.Put(result); err != nil {
if err != nil {
logger.Errorf("resultQ put failed with exception: %v.\n", err) logger.Errorf("resultQ put failed with exception: %v.\n", err)
} }
}(ivk) }(ivk)
...@@ -99,6 +94,5 @@ func (invoker *forkingClusterInvoker) Invoke(ctx context.Context, invocation pro ...@@ -99,6 +94,5 @@ func (invoker *forkingClusterInvoker) Invoke(ctx context.Context, invocation pro
if !ok { if !ok {
return &protocol.RPCResult{Err: fmt.Errorf("failed to forking invoke provider %v, but not legal resp", selected)} return &protocol.RPCResult{Err: fmt.Errorf("failed to forking invoke provider %v, but not legal resp", selected)}
} }
return result return result
} }
...@@ -19,6 +19,7 @@ package cluster_impl ...@@ -19,6 +19,7 @@ package cluster_impl
import ( import (
"context" "context"
"fmt"
"strconv" "strconv"
"sync" "sync"
"testing" "testing"
...@@ -42,10 +43,11 @@ import ( ...@@ -42,10 +43,11 @@ import (
) )
var ( var (
forkingUrl, _ = common.NewURL("dubbo://192.168.1.1:20000/com.ikurento.user.UserProvider") forkingUrl, _ = common.NewURL(
fmt.Sprintf("dubbo://%s:%d/com.ikurento.user.UserProvider", constant.LOCAL_HOST_VALUE, constant.DEFAULT_PORT))
) )
func registerForking(t *testing.T, mockInvokers ...*mock.MockInvoker) protocol.Invoker { func registerForking(mockInvokers ...*mock.MockInvoker) protocol.Invoker {
extension.SetLoadbalance(loadbalance.RoundRobin, loadbalance.NewRoundRobinLoadBalance) extension.SetLoadbalance(loadbalance.RoundRobin, loadbalance.NewRoundRobinLoadBalance)
invokers := []protocol.Invoker{} invokers := []protocol.Invoker{}
...@@ -62,7 +64,7 @@ func registerForking(t *testing.T, mockInvokers ...*mock.MockInvoker) protocol.I ...@@ -62,7 +64,7 @@ func registerForking(t *testing.T, mockInvokers ...*mock.MockInvoker) protocol.I
return clusterInvoker return clusterInvoker
} }
func Test_ForkingInvokeSuccess(t *testing.T) { func TestForkingInvokeSuccess(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
...@@ -79,20 +81,20 @@ func Test_ForkingInvokeSuccess(t *testing.T) { ...@@ -79,20 +81,20 @@ func Test_ForkingInvokeSuccess(t *testing.T) {
invokers = append(invokers, invoker) invokers = append(invokers, invoker)
invoker.EXPECT().IsAvailable().Return(true).AnyTimes() invoker.EXPECT().IsAvailable().Return(true).AnyTimes()
invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn( invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(
func(invocation protocol.Invocation) protocol.Result { func(protocol.Invocation) protocol.Result {
wg.Done() wg.Done()
return mockResult return mockResult
}) })
} }
clusterInvoker := registerForking(t, invokers...) clusterInvoker := registerForking(invokers...)
result := clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{}) result := clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{})
assert.Equal(t, mockResult, result) assert.Equal(t, mockResult, result)
wg.Wait() wg.Wait()
} }
func Test_ForkingInvokeTimeout(t *testing.T) { func TestForkingInvokeTimeout(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
...@@ -108,14 +110,14 @@ func Test_ForkingInvokeTimeout(t *testing.T) { ...@@ -108,14 +110,14 @@ func Test_ForkingInvokeTimeout(t *testing.T) {
invokers = append(invokers, invoker) invokers = append(invokers, invoker)
invoker.EXPECT().IsAvailable().Return(true).AnyTimes() invoker.EXPECT().IsAvailable().Return(true).AnyTimes()
invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn( invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(
func(invocation protocol.Invocation) protocol.Result { func(protocol.Invocation) protocol.Result {
time.Sleep(2 * time.Second) time.Sleep(2 * time.Second)
wg.Done() wg.Done()
return mockResult return mockResult
}) })
} }
clusterInvoker := registerForking(t, invokers...) clusterInvoker := registerForking(invokers...)
result := clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{}) result := clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{})
assert.NotNil(t, result) assert.NotNil(t, result)
...@@ -123,7 +125,7 @@ func Test_ForkingInvokeTimeout(t *testing.T) { ...@@ -123,7 +125,7 @@ func Test_ForkingInvokeTimeout(t *testing.T) {
wg.Wait() wg.Wait()
} }
func Test_ForkingInvokeHalfTimeout(t *testing.T) { func TestForkingInvokeHalfTimeout(t *testing.T) {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
defer ctrl.Finish() defer ctrl.Finish()
...@@ -140,13 +142,13 @@ func Test_ForkingInvokeHalfTimeout(t *testing.T) { ...@@ -140,13 +142,13 @@ func Test_ForkingInvokeHalfTimeout(t *testing.T) {
invoker.EXPECT().IsAvailable().Return(true).AnyTimes() invoker.EXPECT().IsAvailable().Return(true).AnyTimes()
if i == 1 { if i == 1 {
invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn( invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(
func(invocation protocol.Invocation) protocol.Result { func(protocol.Invocation) protocol.Result {
wg.Done() wg.Done()
return mockResult return mockResult
}) })
} else { } else {
invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn( invoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(
func(invocation protocol.Invocation) protocol.Result { func(protocol.Invocation) protocol.Result {
time.Sleep(2 * time.Second) time.Sleep(2 * time.Second)
wg.Done() wg.Done()
return mockResult return mockResult
...@@ -154,7 +156,7 @@ func Test_ForkingInvokeHalfTimeout(t *testing.T) { ...@@ -154,7 +156,7 @@ func Test_ForkingInvokeHalfTimeout(t *testing.T) {
} }
} }
clusterInvoker := registerForking(t, invokers...) clusterInvoker := registerForking(invokers...)
result := clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{}) result := clusterInvoker.Invoke(context.Background(), &invocation.RPCInvocation{})
assert.Equal(t, mockResult, result) assert.Equal(t, mockResult, result)
......
...@@ -33,7 +33,7 @@ import ( ...@@ -33,7 +33,7 @@ import (
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
) )
func Test_RegAwareInvokeSuccess(t *testing.T) { func TestRegAwareInvokeSuccess(t *testing.T) {
regAwareCluster := NewRegistryAwareCluster() regAwareCluster := NewRegistryAwareCluster()
......
...@@ -19,6 +19,7 @@ package directory ...@@ -19,6 +19,7 @@ package directory
import ( import (
"encoding/base64" "encoding/base64"
"fmt"
"testing" "testing"
) )
...@@ -33,19 +34,20 @@ import ( ...@@ -33,19 +34,20 @@ import (
"github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/constant"
) )
var (
url, _ = common.NewURL(
fmt.Sprintf("dubbo://%s:%d/com.ikurento.user.UserProvider", constant.LOCAL_HOST_VALUE, constant.DEFAULT_PORT))
anyUrl, _ = common.NewURL(fmt.Sprintf("condition://%s/com.foo.BarService", constant.ANYHOST_VALUE))
)
func TestNewBaseDirectory(t *testing.T) { func TestNewBaseDirectory(t *testing.T) {
url, _ := common.NewURL("dubbo://192.168.1.1:20000/com.ikurento.user.UserProvider")
directory := NewBaseDirectory(&url) directory := NewBaseDirectory(&url)
assert.NotNil(t, directory) assert.NotNil(t, directory)
assert.Equal(t, url, directory.GetUrl()) assert.Equal(t, url, directory.GetUrl())
assert.Equal(t, &url, directory.GetDirectoryUrl()) assert.Equal(t, &url, directory.GetDirectoryUrl())
} }
func TestBuildRouterChain(t *testing.T) { func TestBuildRouterChain(t *testing.T) {
url, _ := common.NewURL("dubbo://192.168.1.1:20000/com.ikurento.user.UserProvider")
directory := NewBaseDirectory(&url) directory := NewBaseDirectory(&url)
assert.NotNil(t, directory) assert.NotNil(t, directory)
...@@ -62,9 +64,8 @@ func TestBuildRouterChain(t *testing.T) { ...@@ -62,9 +64,8 @@ func TestBuildRouterChain(t *testing.T) {
} }
func getRouteUrl(rule string) *common.URL { func getRouteUrl(rule string) *common.URL {
url, _ := common.NewURL("condition://0.0.0.0/com.foo.BarService") anyUrl.AddParam("rule", rule)
url.AddParam("rule", rule) anyUrl.AddParam("force", "true")
url.AddParam("force", "true") anyUrl.AddParam(constant.ROUTER_KEY, "router")
url.AddParam(constant.ROUTER_KEY, "router")
return &url return &url
} }
...@@ -32,7 +32,7 @@ import ( ...@@ -32,7 +32,7 @@ import (
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
) )
func Test_StaticDirList(t *testing.T) { func TestStaticDirList(t *testing.T) {
invokers := []protocol.Invoker{} invokers := []protocol.Invoker{}
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
url, _ := common.NewURL(fmt.Sprintf("dubbo://192.168.1.%v:20000/com.ikurento.user.UserProvider", i)) url, _ := common.NewURL(fmt.Sprintf("dubbo://192.168.1.%v:20000/com.ikurento.user.UserProvider", i))
...@@ -45,7 +45,7 @@ func Test_StaticDirList(t *testing.T) { ...@@ -45,7 +45,7 @@ func Test_StaticDirList(t *testing.T) {
assert.Len(t, list, 10) assert.Len(t, list, 10)
} }
func Test_StaticDirDestroy(t *testing.T) { func TestStaticDirDestroy(t *testing.T) {
invokers := []protocol.Invoker{} invokers := []protocol.Invoker{}
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
url, _ := common.NewURL(fmt.Sprintf("dubbo://192.168.1.%v:20000/com.ikurento.user.UserProvider", i)) url, _ := common.NewURL(fmt.Sprintf("dubbo://192.168.1.%v:20000/com.ikurento.user.UserProvider", i))
......
...@@ -28,6 +28,7 @@ import ( ...@@ -28,6 +28,7 @@ import (
import ( import (
"github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common"
"github.com/apache/dubbo-go/common/constant"
"github.com/apache/dubbo-go/protocol" "github.com/apache/dubbo-go/protocol"
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
) )
...@@ -37,7 +38,7 @@ func TestLeastActiveSelect(t *testing.T) { ...@@ -37,7 +38,7 @@ func TestLeastActiveSelect(t *testing.T) {
var invokers []protocol.Invoker var invokers []protocol.Invoker
url, _ := common.NewURL("dubbo://192.168.1.0:20000/org.apache.demo.HelloService") url, _ := common.NewURL(fmt.Sprintf("dubbo://%s:%d/org.apache.demo.HelloService", constant.LOCAL_HOST_VALUE, constant.DEFAULT_PORT))
invokers = append(invokers, protocol.NewBaseInvoker(url)) invokers = append(invokers, protocol.NewBaseInvoker(url))
i := loadBalance.Select(invokers, &invocation.RPCInvocation{}) i := loadBalance.Select(invokers, &invocation.RPCInvocation{})
assert.True(t, i.GetUrl().URLEqual(url)) assert.True(t, i.GetUrl().URLEqual(url))
......
...@@ -36,7 +36,7 @@ import ( ...@@ -36,7 +36,7 @@ import (
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
) )
func Test_RandomlbSelect(t *testing.T) { func TestRandomlbSelect(t *testing.T) {
randomlb := NewRandomLoadBalance() randomlb := NewRandomLoadBalance()
invokers := []protocol.Invoker{} invokers := []protocol.Invoker{}
...@@ -53,7 +53,7 @@ func Test_RandomlbSelect(t *testing.T) { ...@@ -53,7 +53,7 @@ func Test_RandomlbSelect(t *testing.T) {
randomlb.Select(invokers, &invocation.RPCInvocation{}) randomlb.Select(invokers, &invocation.RPCInvocation{})
} }
func Test_RandomlbSelectWeight(t *testing.T) { func TestRandomlbSelectWeight(t *testing.T) {
randomlb := NewRandomLoadBalance() randomlb := NewRandomLoadBalance()
invokers := []protocol.Invoker{} invokers := []protocol.Invoker{}
...@@ -84,7 +84,7 @@ func Test_RandomlbSelectWeight(t *testing.T) { ...@@ -84,7 +84,7 @@ func Test_RandomlbSelectWeight(t *testing.T) {
}) })
} }
func Test_RandomlbSelectWarmup(t *testing.T) { func TestRandomlbSelectWarmup(t *testing.T) {
randomlb := NewRandomLoadBalance() randomlb := NewRandomLoadBalance()
invokers := []protocol.Invoker{} invokers := []protocol.Invoker{}
......
...@@ -29,6 +29,7 @@ import ( ...@@ -29,6 +29,7 @@ import (
import ( import (
"github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common"
"github.com/apache/dubbo-go/common/constant"
"github.com/apache/dubbo-go/protocol" "github.com/apache/dubbo-go/protocol"
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
) )
...@@ -38,7 +39,8 @@ func TestRoundRobinSelect(t *testing.T) { ...@@ -38,7 +39,8 @@ func TestRoundRobinSelect(t *testing.T) {
var invokers []protocol.Invoker var invokers []protocol.Invoker
url, _ := common.NewURL("dubbo://192.168.1.0:20000/org.apache.demo.HelloService") url, _ := common.NewURL(fmt.Sprintf("dubbo://%s:%d/org.apache.demo.HelloService",
constant.LOCAL_HOST_VALUE, constant.DEFAULT_PORT))
invokers = append(invokers, protocol.NewBaseInvoker(url)) invokers = append(invokers, protocol.NewBaseInvoker(url))
i := loadBalance.Select(invokers, &invocation.RPCInvocation{}) i := loadBalance.Select(invokers, &invocation.RPCInvocation{})
assert.True(t, i.GetUrl().URLEqual(url)) assert.True(t, i.GetUrl().URLEqual(url))
......
...@@ -42,10 +42,16 @@ import ( ...@@ -42,10 +42,16 @@ import (
"github.com/apache/dubbo-go/remoting/zookeeper" "github.com/apache/dubbo-go/remoting/zookeeper"
) )
const (
path = "/dubbo/config/dubbo/test-condition.condition-router"
zkPrefix = "zookeeper://127.0.0.1:"
anyUrl = "condition://0.0.0.0/com.foo.BarService"
)
func TestNewRouterChain(t *testing.T) { func TestNewRouterChain(t *testing.T) {
ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second) ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second)
assert.NoError(t, err) assert.NoError(t, err)
err = z.Create("/dubbo/config/dubbo/test-condition.condition-router") err = z.Create(path)
assert.NoError(t, err) assert.NoError(t, err)
testyml := `enabled: true testyml := `enabled: true
...@@ -55,12 +61,12 @@ conditions: ...@@ -55,12 +61,12 @@ conditions:
- => host != 172.22.3.91 - => host != 172.22.3.91
` `
_, err = z.Conn.Set("/dubbo/config/dubbo/test-condition.condition-router", []byte(testyml), 0) _, err = z.Conn.Set(path, []byte(testyml), 0)
assert.NoError(t, err) assert.NoError(t, err)
defer ts.Stop() defer ts.Stop()
defer z.Close() defer z.Close()
zkUrl, _ := common.NewURL("zookeeper://127.0.0.1:" + strconv.Itoa(ts.Servers[0].Port)) zkUrl, _ := common.NewURL(zkPrefix + strconv.Itoa(ts.Servers[0].Port))
configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl) configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl)
config.GetEnvInstance().SetDynamicConfiguration(configuration) config.GetEnvInstance().SetDynamicConfiguration(configuration)
...@@ -92,10 +98,10 @@ func TestNewRouterChainURLNil(t *testing.T) { ...@@ -92,10 +98,10 @@ func TestNewRouterChainURLNil(t *testing.T) {
assert.NotNil(t, chain) assert.NotNil(t, chain)
} }
func TestRouterChain_AddRouters(t *testing.T) { func TestRouterChainAddRouters(t *testing.T) {
ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second) ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second)
assert.NoError(t, err) assert.NoError(t, err)
err = z.Create("/dubbo/config/dubbo/test-condition.condition-router") err = z.Create(path)
assert.NoError(t, err) assert.NoError(t, err)
testyml := `enabled: true testyml := `enabled: true
...@@ -105,12 +111,12 @@ conditions: ...@@ -105,12 +111,12 @@ conditions:
- => host != 172.22.3.91 - => host != 172.22.3.91
` `
_, err = z.Conn.Set("/dubbo/config/dubbo/test-condition.condition-router", []byte(testyml), 0) _, err = z.Conn.Set(path, []byte(testyml), 0)
assert.NoError(t, err) assert.NoError(t, err)
defer ts.Stop() defer ts.Stop()
defer z.Close() defer z.Close()
zkUrl, _ := common.NewURL("zookeeper://127.0.0.1:" + strconv.Itoa(ts.Servers[0].Port)) zkUrl, _ := common.NewURL(zkPrefix + strconv.Itoa(ts.Servers[0].Port))
configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl) configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl)
config.GetEnvInstance().SetDynamicConfiguration(configuration) config.GetEnvInstance().SetDynamicConfiguration(configuration)
...@@ -131,12 +137,12 @@ conditions: ...@@ -131,12 +137,12 @@ conditions:
assert.Equal(t, 3, len(chain.routers)) assert.Equal(t, 3, len(chain.routers))
} }
func TestRouterChain_Route(t *testing.T) { func TestRouterChainRoute(t *testing.T) {
ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second) ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second)
defer ts.Stop() defer ts.Stop()
defer z.Close() defer z.Close()
zkUrl, _ := common.NewURL("zookeeper://127.0.0.1:" + strconv.Itoa(ts.Servers[0].Port)) zkUrl, _ := common.NewURL(zkPrefix + strconv.Itoa(ts.Servers[0].Port))
configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl) configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl)
config.GetEnvInstance().SetDynamicConfiguration(configuration) config.GetEnvInstance().SetDynamicConfiguration(configuration)
...@@ -158,10 +164,10 @@ func TestRouterChain_Route(t *testing.T) { ...@@ -158,10 +164,10 @@ func TestRouterChain_Route(t *testing.T) {
assert.Equal(t, 1, len(finalInvokers)) assert.Equal(t, 1, len(finalInvokers))
} }
func TestRouterChain_Route_AppRouter(t *testing.T) { func TestRouterChainRouteAppRouter(t *testing.T) {
ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second) ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second)
assert.NoError(t, err) assert.NoError(t, err)
err = z.Create("/dubbo/config/dubbo/test-condition.condition-router") err = z.Create(path)
assert.NoError(t, err) assert.NoError(t, err)
testyml := `enabled: true testyml := `enabled: true
...@@ -171,12 +177,12 @@ conditions: ...@@ -171,12 +177,12 @@ conditions:
- => host = 1.1.1.1 => host != 1.2.3.4 - => host = 1.1.1.1 => host != 1.2.3.4
` `
_, err = z.Conn.Set("/dubbo/config/dubbo/test-condition.condition-router", []byte(testyml), 0) _, err = z.Conn.Set(path, []byte(testyml), 0)
assert.NoError(t, err) assert.NoError(t, err)
defer ts.Stop() defer ts.Stop()
defer z.Close() defer z.Close()
zkUrl, _ := common.NewURL("zookeeper://127.0.0.1:" + strconv.Itoa(ts.Servers[0].Port)) zkUrl, _ := common.NewURL(zkPrefix + strconv.Itoa(ts.Servers[0].Port))
configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl) configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl)
config.GetEnvInstance().SetDynamicConfiguration(configuration) config.GetEnvInstance().SetDynamicConfiguration(configuration)
...@@ -200,7 +206,7 @@ func TestRouterChain_Route_NoRoute(t *testing.T) { ...@@ -200,7 +206,7 @@ func TestRouterChain_Route_NoRoute(t *testing.T) {
defer ts.Stop() defer ts.Stop()
defer z.Close() defer z.Close()
zkUrl, _ := common.NewURL("zookeeper://127.0.0.1:" + strconv.Itoa(ts.Servers[0].Port)) zkUrl, _ := common.NewURL(zkPrefix + strconv.Itoa(ts.Servers[0].Port))
configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl) configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl)
config.GetEnvInstance().SetDynamicConfiguration(configuration) config.GetEnvInstance().SetDynamicConfiguration(configuration)
...@@ -223,7 +229,7 @@ func TestRouterChain_Route_NoRoute(t *testing.T) { ...@@ -223,7 +229,7 @@ func TestRouterChain_Route_NoRoute(t *testing.T) {
} }
func getConditionNoRouteUrl(applicationKey string) *common.URL { func getConditionNoRouteUrl(applicationKey string) *common.URL {
url, _ := common.NewURL("condition://0.0.0.0/com.foo.BarService") url, _ := common.NewURL(anyUrl)
url.AddParam("application", applicationKey) url.AddParam("application", applicationKey)
url.AddParam("force", "true") url.AddParam("force", "true")
rule := base64.URLEncoding.EncodeToString([]byte("host = 1.1.1.1 => host != 1.2.3.4")) rule := base64.URLEncoding.EncodeToString([]byte("host = 1.1.1.1 => host != 1.2.3.4"))
...@@ -232,7 +238,7 @@ func getConditionNoRouteUrl(applicationKey string) *common.URL { ...@@ -232,7 +238,7 @@ func getConditionNoRouteUrl(applicationKey string) *common.URL {
} }
func getConditionRouteUrl(applicationKey string) *common.URL { func getConditionRouteUrl(applicationKey string) *common.URL {
url, _ := common.NewURL("condition://0.0.0.0/com.foo.BarService") url, _ := common.NewURL(anyUrl)
url.AddParam("application", applicationKey) url.AddParam("application", applicationKey)
url.AddParam("force", "true") url.AddParam("force", "true")
rule := base64.URLEncoding.EncodeToString([]byte("host = 1.1.1.1 => host = 1.2.3.4")) rule := base64.URLEncoding.EncodeToString([]byte("host = 1.1.1.1 => host = 1.2.3.4"))
...@@ -241,7 +247,7 @@ func getConditionRouteUrl(applicationKey string) *common.URL { ...@@ -241,7 +247,7 @@ func getConditionRouteUrl(applicationKey string) *common.URL {
} }
func getRouteUrl(applicationKey string) *common.URL { func getRouteUrl(applicationKey string) *common.URL {
url, _ := common.NewURL("condition://0.0.0.0/com.foo.BarService") url, _ := common.NewURL(anyUrl)
url.AddParam("application", applicationKey) url.AddParam("application", applicationKey)
url.AddParam("force", "true") url.AddParam("force", "true")
return &url return &url
......
...@@ -37,6 +37,10 @@ import ( ...@@ -37,6 +37,10 @@ import (
"github.com/apache/dubbo-go/remoting/zookeeper" "github.com/apache/dubbo-go/remoting/zookeeper"
) )
const (
path = "/dubbo/config/dubbo/test-condition.condition-router"
)
func TestNewAppRouter(t *testing.T) { func TestNewAppRouter(t *testing.T) {
testYML := `enabled: true testYML := `enabled: true
...@@ -47,10 +51,10 @@ conditions: ...@@ -47,10 +51,10 @@ conditions:
` `
ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second) ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second)
assert.NoError(t, err) assert.NoError(t, err)
err = z.Create("/dubbo/config/dubbo/test-condition.condition-router") err = z.Create(path)
assert.NoError(t, err) assert.NoError(t, err)
_, err = z.Conn.Set("/dubbo/config/dubbo/test-condition.condition-router", []byte(testYML), 0) _, err = z.Conn.Set(path, []byte(testYML), 0)
assert.NoError(t, err) assert.NoError(t, err)
defer ts.Stop() defer ts.Stop()
defer z.Close() defer z.Close()
...@@ -93,10 +97,10 @@ conditions: ...@@ -93,10 +97,10 @@ conditions:
` `
ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second) ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second)
assert.NoError(t, err) assert.NoError(t, err)
err = z.Create("/dubbo/config/dubbo/test-condition.condition-router") err = z.Create(path)
assert.NoError(t, err) assert.NoError(t, err)
_, err = z.Conn.Set("/dubbo/config/dubbo/test-condition.condition-router", []byte(testYML), 0) _, err = z.Conn.Set(path, []byte(testYML), 0)
assert.NoError(t, err) assert.NoError(t, err)
defer ts.Stop() defer ts.Stop()
defer z.Close() defer z.Close()
...@@ -130,10 +134,10 @@ conditions: ...@@ -130,10 +134,10 @@ conditions:
` `
ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second) ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second)
assert.NoError(t, err) assert.NoError(t, err)
err = z.Create("/dubbo/config/dubbo/test-condition.condition-router") err = z.Create(path)
assert.NoError(t, err) assert.NoError(t, err)
_, err = z.Conn.Set("/dubbo/config/dubbo/test-condition.condition-router", []byte(testYML), 0) _, err = z.Conn.Set(path, []byte(testYML), 0)
assert.NoError(t, err) assert.NoError(t, err)
defer ts.Stop() defer ts.Stop()
defer z.Close() defer z.Close()
......
...@@ -38,6 +38,8 @@ import ( ...@@ -38,6 +38,8 @@ import (
"github.com/apache/dubbo-go/protocol/invocation" "github.com/apache/dubbo-go/protocol/invocation"
) )
const anyUrl = "condition://0.0.0.0/com.foo.BarService"
type MockInvoker struct { type MockInvoker struct {
url common.URL url common.URL
available bool available bool
...@@ -59,21 +61,21 @@ func (bi *MockInvoker) GetUrl() common.URL { ...@@ -59,21 +61,21 @@ func (bi *MockInvoker) GetUrl() common.URL {
} }
func getRouteUrl(rule string) *common.URL { func getRouteUrl(rule string) *common.URL {
url, _ := common.NewURL("condition://0.0.0.0/com.foo.BarService") url, _ := common.NewURL(anyUrl)
url.AddParam("rule", rule) url.AddParam("rule", rule)
url.AddParam("force", "true") url.AddParam("force", "true")
return &url return &url
} }
func getRouteUrlWithForce(rule, force string) *common.URL { func getRouteUrlWithForce(rule, force string) *common.URL {
url, _ := common.NewURL("condition://0.0.0.0/com.foo.BarService") url, _ := common.NewURL(anyUrl)
url.AddParam("rule", rule) url.AddParam("rule", rule)
url.AddParam("force", force) url.AddParam("force", force)
return &url return &url
} }
func getRouteUrlWithNoForce(rule string) *common.URL { func getRouteUrlWithNoForce(rule string) *common.URL {
url, _ := common.NewURL("condition://0.0.0.0/com.foo.BarService") url, _ := common.NewURL(anyUrl)
url.AddParam("rule", rule) url.AddParam("rule", rule)
return &url return &url
} }
...@@ -116,7 +118,7 @@ func (bi *MockInvoker) Destroy() { ...@@ -116,7 +118,7 @@ func (bi *MockInvoker) Destroy() {
bi.available = false bi.available = false
} }
func TestRoute_matchWhen(t *testing.T) { func TestRouteMatchWhen(t *testing.T) {
inv := &invocation.RPCInvocation{} inv := &invocation.RPCInvocation{}
rule := base64.URLEncoding.EncodeToString([]byte("=> host = 1.2.3.4")) rule := base64.URLEncoding.EncodeToString([]byte("=> host = 1.2.3.4"))
router, _ := newConditionRouterFactory().NewRouter(getRouteUrl(rule)) router, _ := newConditionRouterFactory().NewRouter(getRouteUrl(rule))
...@@ -149,7 +151,7 @@ func TestRoute_matchWhen(t *testing.T) { ...@@ -149,7 +151,7 @@ func TestRoute_matchWhen(t *testing.T) {
assert.Equal(t, true, matchWhen6) assert.Equal(t, true, matchWhen6)
} }
func TestRoute_matchFilter(t *testing.T) { func TestRouteMatchFilter(t *testing.T) {
localIP, _ := gxnet.GetLocalIP() localIP, _ := gxnet.GetLocalIP()
t.Logf("The local ip is %s", localIP) t.Logf("The local ip is %s", localIP)
url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService?default.serialization=fastjson") url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService?default.serialization=fastjson")
...@@ -184,7 +186,7 @@ func TestRoute_matchFilter(t *testing.T) { ...@@ -184,7 +186,7 @@ func TestRoute_matchFilter(t *testing.T) {
} }
func TestRoute_methodRoute(t *testing.T) { func TestRouteMethodRoute(t *testing.T) {
inv := invocation.NewRPCInvocationWithOptions(invocation.WithMethodName("getFoo"), invocation.WithParameterTypes([]reflect.Type{}), invocation.WithArguments([]interface{}{})) 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")) 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, _ := newConditionRouterFactory().NewRouter(getRouteUrl(rule)) router, _ := newConditionRouterFactory().NewRouter(getRouteUrl(rule))
...@@ -207,7 +209,7 @@ func TestRoute_methodRoute(t *testing.T) { ...@@ -207,7 +209,7 @@ func TestRoute_methodRoute(t *testing.T) {
} }
func TestRoute_ReturnFalse(t *testing.T) { func TestRouteReturnFalse(t *testing.T) {
url, _ := common.NewURL("") url, _ := common.NewURL("")
localIP, _ := gxnet.GetLocalIP() localIP, _ := gxnet.GetLocalIP()
invokers := []protocol.Invoker{NewMockInvoker(url, 1), NewMockInvoker(url, 2), NewMockInvoker(url, 3)} invokers := []protocol.Invoker{NewMockInvoker(url, 1), NewMockInvoker(url, 2), NewMockInvoker(url, 3)}
...@@ -219,7 +221,7 @@ func TestRoute_ReturnFalse(t *testing.T) { ...@@ -219,7 +221,7 @@ func TestRoute_ReturnFalse(t *testing.T) {
assert.Equal(t, 0, len(fileredInvokers)) assert.Equal(t, 0, len(fileredInvokers))
} }
func TestRoute_ReturnEmpty(t *testing.T) { func TestRouteReturnEmpty(t *testing.T) {
localIP, _ := gxnet.GetLocalIP() localIP, _ := gxnet.GetLocalIP()
url, _ := common.NewURL("") url, _ := common.NewURL("")
invokers := []protocol.Invoker{NewMockInvoker(url, 1), NewMockInvoker(url, 2), NewMockInvoker(url, 3)} invokers := []protocol.Invoker{NewMockInvoker(url, 1), NewMockInvoker(url, 2), NewMockInvoker(url, 3)}
...@@ -231,7 +233,7 @@ func TestRoute_ReturnEmpty(t *testing.T) { ...@@ -231,7 +233,7 @@ func TestRoute_ReturnEmpty(t *testing.T) {
assert.Equal(t, 0, len(fileredInvokers)) assert.Equal(t, 0, len(fileredInvokers))
} }
func TestRoute_ReturnAll(t *testing.T) { func TestRouteReturnAll(t *testing.T) {
localIP, _ := gxnet.GetLocalIP() localIP, _ := gxnet.GetLocalIP()
urlString := "dubbo://" + localIP + "/com.foo.BarService" urlString := "dubbo://" + localIP + "/com.foo.BarService"
dubboURL, _ := common.NewURL(urlString) dubboURL, _ := common.NewURL(urlString)
...@@ -247,7 +249,7 @@ func TestRoute_ReturnAll(t *testing.T) { ...@@ -247,7 +249,7 @@ func TestRoute_ReturnAll(t *testing.T) {
assert.Equal(t, invokers, fileredInvokers) assert.Equal(t, invokers, fileredInvokers)
} }
func TestRoute_HostFilter(t *testing.T) { func TestRouteHostFilter(t *testing.T) {
localIP, _ := gxnet.GetLocalIP() localIP, _ := gxnet.GetLocalIP()
url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService") url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService")
url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP)) url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP))
...@@ -266,7 +268,7 @@ func TestRoute_HostFilter(t *testing.T) { ...@@ -266,7 +268,7 @@ func TestRoute_HostFilter(t *testing.T) {
assert.Equal(t, invoker3, fileredInvokers[1]) assert.Equal(t, invoker3, fileredInvokers[1])
} }
func TestRoute_Empty_HostFilter(t *testing.T) { func TestRouteEmptyHostFilter(t *testing.T) {
localIP, _ := gxnet.GetLocalIP() localIP, _ := gxnet.GetLocalIP()
url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService") url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService")
url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP)) url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP))
...@@ -285,7 +287,7 @@ func TestRoute_Empty_HostFilter(t *testing.T) { ...@@ -285,7 +287,7 @@ func TestRoute_Empty_HostFilter(t *testing.T) {
assert.Equal(t, invoker3, fileredInvokers[1]) assert.Equal(t, invoker3, fileredInvokers[1])
} }
func TestRoute_False_HostFilter(t *testing.T) { func TestRouteFalseHostFilter(t *testing.T) {
localIP, _ := gxnet.GetLocalIP() localIP, _ := gxnet.GetLocalIP()
url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService") url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService")
url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP)) url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP))
...@@ -304,7 +306,7 @@ func TestRoute_False_HostFilter(t *testing.T) { ...@@ -304,7 +306,7 @@ func TestRoute_False_HostFilter(t *testing.T) {
assert.Equal(t, invoker3, fileredInvokers[1]) assert.Equal(t, invoker3, fileredInvokers[1])
} }
func TestRoute_Placeholder(t *testing.T) { func TestRoutePlaceholder(t *testing.T) {
localIP, _ := gxnet.GetLocalIP() localIP, _ := gxnet.GetLocalIP()
url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService") url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService")
url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP)) url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP))
...@@ -323,7 +325,7 @@ func TestRoute_Placeholder(t *testing.T) { ...@@ -323,7 +325,7 @@ func TestRoute_Placeholder(t *testing.T) {
assert.Equal(t, invoker3, fileredInvokers[1]) assert.Equal(t, invoker3, fileredInvokers[1])
} }
func TestRoute_NoForce(t *testing.T) { func TestRouteNoForce(t *testing.T) {
localIP, _ := gxnet.GetLocalIP() localIP, _ := gxnet.GetLocalIP()
url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService") url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService")
url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP)) url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP))
...@@ -340,7 +342,7 @@ func TestRoute_NoForce(t *testing.T) { ...@@ -340,7 +342,7 @@ func TestRoute_NoForce(t *testing.T) {
assert.Equal(t, invokers, fileredInvokers) assert.Equal(t, invokers, fileredInvokers)
} }
func TestRoute_Force(t *testing.T) { func TestRouteForce(t *testing.T) {
localIP, _ := gxnet.GetLocalIP() localIP, _ := gxnet.GetLocalIP()
url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService") url1, _ := common.NewURL("dubbo://10.20.3.3:20880/com.foo.BarService")
url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP)) url2, _ := common.NewURL(fmt.Sprintf("dubbo://%s:20880/com.foo.BarService", localIP))
......
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