You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by zh...@apache.org on 2022/11/21 08:52:55 UTC

[dubbo-go] branch revert-2127-feat/polaris_ratelimit created (now 7c349ae2e)

This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a change to branch revert-2127-feat/polaris_ratelimit
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


      at 7c349ae2e Revert "[ISSUE #2123] Feat/polaris ratelimit (#2127)"

This branch includes the following new commits:

     new 7c349ae2e Revert "[ISSUE #2123] Feat/polaris ratelimit (#2127)"

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[dubbo-go] 01/01: Revert "[ISSUE #2123] Feat/polaris ratelimit (#2127)"

Posted by zh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

zhaoyunxing pushed a commit to branch revert-2127-feat/polaris_ratelimit
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git

commit 7c349ae2ee5ed2ddfe75ebc4d74c996c5ff95d8d
Author: zhaoyunxing <zh...@apache.org>
AuthorDate: Mon Nov 21 16:52:51 2022 +0800

    Revert "[ISSUE #2123] Feat/polaris ratelimit (#2127)"
    
    This reverts commit cd2e6056d21a5e3c4d5d2583242f390489565c4e.
---
 common/constant/key.go                 |  12 +++
 common/constant/polaris_key.go         |  34 -------
 filter/filter_impl/import.go           |   1 -
 filter/polaris/limit/default.go        |  30 ------
 filter/polaris/limit/limiter.go        | 167 --------------------------------
 go.mod                                 |   1 -
 go.sum                                 |   2 -
 imports/imports.go                     |   1 -
 remoting/polaris/builder.go            |  13 +--
 remoting/polaris/parser/parser.go      | 125 ------------------------
 remoting/polaris/parser/parser_test.go | 168 ---------------------------------
 11 files changed, 15 insertions(+), 539 deletions(-)

diff --git a/common/constant/key.go b/common/constant/key.go
index 7adafa75b..d7fb47884 100644
--- a/common/constant/key.go
+++ b/common/constant/key.go
@@ -264,6 +264,18 @@ const (
 	NacosUpdateCacheWhenEmpty = "nacos.updateCacheWhenEmpty"
 )
 
+const (
+	PolarisKey                  = "polaris"
+	PolarisDefaultRoleType      = 3
+	PolarisServiceToken         = "token"
+	PolarisServiceNameSeparator = ":"
+	PolarisDubboPath            = "DUBBOPATH"
+	PolarisInstanceID           = "polaris.instanceID"
+	PolarisDefaultNamespace     = "default"
+	PolarisDubboGroup           = "dubbo.group"
+	PolarisClientName           = "polaris-client"
+)
+
 const (
 	FileKey = "file"
 )
diff --git a/common/constant/polaris_key.go b/common/constant/polaris_key.go
deleted file mode 100644
index 97d0ab552..000000000
--- a/common/constant/polaris_key.go
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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 constant
-
-const (
-	PolarisKey                  = "polaris"
-	PolarisDefaultRoleType      = 3
-	PolarisServiceToken         = "token"
-	PolarisServiceNameSeparator = ":"
-	PolarisDubboPath            = "DUBBOPATH"
-	PolarisInstanceID           = "polaris.instanceID"
-	PolarisDefaultNamespace     = "default"
-	PolarisDubboGroup           = "dubbo.group"
-	PolarisClientName           = "polaris-client"
-)
-
-const (
-	PluginPolarisTpsLimiter = "polaris-limit"
-)
diff --git a/filter/filter_impl/import.go b/filter/filter_impl/import.go
index 2e389b90a..ca38303ca 100644
--- a/filter/filter_impl/import.go
+++ b/filter/filter_impl/import.go
@@ -30,7 +30,6 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/filter/graceful_shutdown"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/hystrix"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/metrics"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/polaris/limit"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/seata"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/sentinel"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/token"
diff --git a/filter/polaris/limit/default.go b/filter/polaris/limit/default.go
deleted file mode 100644
index 5f40295c4..000000000
--- a/filter/polaris/limit/default.go
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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 limit
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common/constant"
-	"dubbo.apache.org/dubbo-go/v3/common/extension"
-	"dubbo.apache.org/dubbo-go/v3/filter"
-)
-
-func init() {
-	extension.SetTpsLimiter(constant.PluginPolarisTpsLimiter, func() filter.TpsLimiter {
-		return &polarisTpsLimiter{}
-	})
-}
diff --git a/filter/polaris/limit/limiter.go b/filter/polaris/limit/limiter.go
deleted file mode 100644
index 64ecb6ef6..000000000
--- a/filter/polaris/limit/limiter.go
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * 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 limit
-
-import (
-	"fmt"
-	"time"
-)
-
-import (
-	"github.com/dubbogo/gost/log/logger"
-
-	"github.com/polarismesh/polaris-go"
-	"github.com/polarismesh/polaris-go/pkg/flow/data"
-	"github.com/polarismesh/polaris-go/pkg/model"
-	v1 "github.com/polarismesh/polaris-go/pkg/model/pb/v1"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common"
-	"dubbo.apache.org/dubbo-go/v3/common/constant"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/protocol"
-	remotingpolaris "dubbo.apache.org/dubbo-go/v3/remoting/polaris"
-	"dubbo.apache.org/dubbo-go/v3/remoting/polaris/parser"
-)
-
-type polarisTpsLimiter struct {
-	limitApi polaris.LimitAPI
-}
-
-func (pl *polarisTpsLimiter) IsAllowable(url *common.URL, invocation protocol.Invocation) bool {
-	var err error
-
-	pl.limitApi, err = remotingpolaris.GetLimiterAPI()
-	if err != nil {
-		logger.Error("[TpsLimiter][Polaris] create polaris LimitAPI fail : %+v", err)
-		return true
-	}
-
-	req := pl.buildQuotaRequest(url, invocation)
-	if req == nil {
-		return true
-	}
-	logger.Debugf("[TpsLimiter][Polaris] quota req : %+v", req)
-
-	resp, err := pl.limitApi.GetQuota(req)
-	if err != nil {
-		logger.Error("[TpsLimiter][Polaris] ns:%s svc:%s get quota fail : %+v", remotingpolaris.GetNamespace(), url.Service(), err)
-		return true
-	}
-
-	return resp.Get().Code == model.QuotaResultOk
-}
-
-func (pl *polarisTpsLimiter) buildQuotaRequest(url *common.URL, invoaction protocol.Invocation) polaris.QuotaRequest {
-	ns := remotingpolaris.GetNamespace()
-	applicationMode := false
-	for _, item := range config.GetRootConfig().Registries {
-		if item.Protocol == constant.PolarisKey {
-			applicationMode = item.RegistryType == constant.ServiceKey
-		}
-	}
-
-	svc := "providers:" + url.Service()
-	method := invoaction.MethodName()
-	if applicationMode {
-		svc = config.GetApplicationConfig().Name
-		method = url.Interface() + "/" + invoaction.MethodName()
-	}
-
-	req := polaris.NewQuotaRequest()
-	req.SetNamespace(ns)
-	req.SetService(svc)
-	req.SetMethod(method)
-
-	matchs, ok := pl.buildArguments(req.(*model.QuotaRequestImpl))
-	if !ok {
-		return nil
-	}
-
-	attachement := invoaction.Attachments()
-	arguments := invoaction.Arguments()
-
-	for i := range matchs {
-		item := matchs[i]
-		switch item.GetType() {
-		case v1.MatchArgument_HEADER:
-			if val, ok := attachement[item.GetKey()]; ok {
-				req.AddArgument(model.BuildHeaderArgument(item.GetKey(), fmt.Sprintf("%+v", val)))
-			}
-		case v1.MatchArgument_QUERY:
-			if val := parser.ParseArgumentsByExpression(item.GetKey(), arguments); val != nil {
-				req.AddArgument(model.BuildQueryArgument(item.GetKey(), fmt.Sprintf("%+v", val)))
-			}
-		case v1.MatchArgument_CALLER_IP:
-			callerIp := url.GetParam(constant.RemoteAddr, "")
-			if len(callerIp) != 0 {
-				req.AddArgument(model.BuildCallerIPArgument(callerIp))
-			}
-		case model.ArgumentTypeCallerService:
-		}
-	}
-
-	return req
-}
-
-func (pl *polarisTpsLimiter) buildArguments(req *model.QuotaRequestImpl) ([]*v1.MatchArgument, bool) {
-	engine := pl.limitApi.SDKContext().GetEngine()
-
-	getRuleReq := &data.CommonRateLimitRequest{
-		DstService: model.ServiceKey{
-			Namespace: req.GetNamespace(),
-			Service:   req.GetService(),
-		},
-		Trigger: model.NotifyTrigger{
-			EnableDstRateLimit: true,
-		},
-		ControlParam: model.ControlParam{
-			Timeout: time.Millisecond * 500,
-		},
-	}
-
-	if err := engine.SyncGetResources(getRuleReq); err != nil {
-		logger.Error("[TpsLimiter][Polaris] ns:%s svc:%s get RateLimit Rule fail : %+v", req.GetNamespace(), req.GetService(), err)
-		return nil, false
-	}
-
-	svcRule := getRuleReq.RateLimitRule
-	if svcRule == nil || svcRule.GetValue() == nil {
-		logger.Warnf("[TpsLimiter][Polaris] ns:%s svc:%s get RateLimit Rule is nil", req.GetNamespace(), req.GetService())
-		return nil, false
-	}
-
-	rules, ok := svcRule.GetValue().(*v1.RateLimit)
-	if !ok {
-		logger.Error("[TpsLimiter][Polaris] ns:%s svc:%s get RateLimit Rule invalid", req.GetNamespace(), req.GetService())
-		return nil, false
-	}
-
-	ret := make([]*v1.MatchArgument, 0, 4)
-	for i := range rules.GetRules() {
-		rule := rules.GetRules()[i]
-		if len(rule.GetArguments()) == 0 {
-			continue
-		}
-
-		ret = append(ret, rule.Arguments...)
-	}
-
-	return ret, true
-}
diff --git a/go.mod b/go.mod
index 19871490e..b67c712bc 100644
--- a/go.mod
+++ b/go.mod
@@ -38,7 +38,6 @@ require (
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
 	github.com/nacos-group/nacos-sdk-go/v2 v2.1.2
 	github.com/natefinch/lumberjack v2.0.0+incompatible
-	github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852
 	github.com/opentracing/opentracing-go v1.2.0
 	github.com/pkg/errors v0.9.1
 	github.com/polarismesh/polaris-go v1.2.0
diff --git a/go.sum b/go.sum
index 00fc9ce36..47f43871e 100644
--- a/go.sum
+++ b/go.sum
@@ -598,8 +598,6 @@ github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtb
 github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
 github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
-github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 h1:Yl0tPBa8QPjGmesFh1D0rDy+q1Twx6FyU7VWHi8wZbI=
-github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
diff --git a/imports/imports.go b/imports/imports.go
index f3ecaf225..f818e4322 100644
--- a/imports/imports.go
+++ b/imports/imports.go
@@ -46,7 +46,6 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/filter/hystrix"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/metrics"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/otel/trace"
-	_ "dubbo.apache.org/dubbo-go/v3/filter/polaris/limit"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/seata"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/sentinel"
 	_ "dubbo.apache.org/dubbo-go/v3/filter/token"
diff --git a/remoting/polaris/builder.go b/remoting/polaris/builder.go
index f384345e1..a45fad7d9 100644
--- a/remoting/polaris/builder.go
+++ b/remoting/polaris/builder.go
@@ -36,13 +36,11 @@ import (
 
 import (
 	"dubbo.apache.org/dubbo-go/v3/common"
-	"dubbo.apache.org/dubbo-go/v3/common/constant"
 )
 
 var (
-	once      sync.Once
-	namesapce string
-	sdkCtx    api.SDKContext
+	once   sync.Once
+	sdkCtx api.SDKContext
 )
 
 var (
@@ -85,11 +83,6 @@ func GetLimiterAPI() (polaris.LimitAPI, error) {
 	return polaris.NewLimitAPIByContext(sdkCtx), nil
 }
 
-// GetNamespace gets user defined namespace info
-func GetNamespace() string {
-	return namesapce
-}
-
 // InitSDKContext inits polaris SDKContext by URL
 func InitSDKContext(url *common.URL) error {
 	if url == nil {
@@ -98,6 +91,7 @@ func InitSDKContext(url *common.URL) error {
 
 	var rerr error
 	once.Do(func() {
+
 		addresses := strings.Split(url.Location, ",")
 		serverConfigs := make([]string, 0, len(addresses))
 		for _, addr := range addresses {
@@ -113,7 +107,6 @@ func InitSDKContext(url *common.URL) error {
 		_sdkCtx, err := api.InitContextByConfig(polarisConf)
 		rerr = err
 		sdkCtx = _sdkCtx
-		namesapce = url.GetParam(constant.RegistryNamespaceKey, constant.PolarisDefaultNamespace)
 	})
 
 	return rerr
diff --git a/remoting/polaris/parser/parser.go b/remoting/polaris/parser/parser.go
deleted file mode 100644
index 42e42b57b..000000000
--- a/remoting/polaris/parser/parser.go
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * 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 parser
-
-import (
-	"encoding/json"
-	"regexp"
-	"strconv"
-	"strings"
-)
-
-import (
-	"github.com/dubbogo/gost/log/logger"
-
-	"github.com/oliveagle/jsonpath"
-)
-
-const (
-	_pefixParam     = "param"
-	_prefixParamArr = "param["
-)
-
-var (
-	_arrayRegx, _ = regexp.Compile(`"^.+\\[[0-9]+\\]"`)
-)
-
-// ParseArgumentsByExpression follow https://goessner.net/articles/JsonPath/
-//
-//	{
-//	    "store":{
-//	        "book":[
-//	            {
-//	                "category":"reference",
-//	                "author":"Nigel Rees",
-//	                "title":"Sayings of the Century",
-//	                "price":8.95
-//	            },
-//	            {
-//	                "category":"fiction",
-//	                "author":"Evelyn Waugh",
-//	                "title":"Sword of Honor",
-//	                "price":12.99
-//	            },
-//	            {
-//	                "category":"fiction",
-//	                "author":"Herman Melville",
-//	                "title":"Moby Dick",
-//	                "isbn":"0-553-21311-3",
-//	                "price":8.99
-//	            },
-//	            {
-//	                "category":"fiction",
-//	                "author":"J. R. R. Tolkien",
-//	                "title":"The Lord of the Rings",
-//	                "isbn":"0-395-19395-8",
-//	                "price":22.99
-//	            }
-//	        ],
-//	        "bicycle":{
-//	            "color":"red",
-//	            "price":19.95
-//	        }
-//	    }
-//	}
-//
-// examples
-//   - case 1: param.$.store.book[*].author
-func ParseArgumentsByExpression(key string, parameters []interface{}) interface{} {
-	index, key := resolveIndex(key)
-	if index == -1 || index >= len(parameters) {
-		logger.Errorf("[Parser][Polaris] invalid expression for : %s", key)
-		return nil
-	}
-
-	data, err := json.Marshal(parameters[index])
-	if err != nil {
-		logger.Errorf("[Parser][Polaris] marshal parameter %+v fail : %+v", parameters[index], err)
-		return nil
-	}
-	var searchVal interface{}
-	_ = json.Unmarshal(data, &searchVal)
-	res, err := jsonpath.JsonPathLookup(searchVal, key)
-	if err != nil {
-		logger.Errorf("[Parser][Polaris] invalid do json path lookup by key : %s, err : %+v", key, err)
-	}
-
-	return res
-}
-
-func resolveIndex(key string) (int, string) {
-	if strings.HasPrefix(key, _prefixParamArr) {
-		// param[0].$.
-		endIndex := strings.Index(key, "]")
-		indexStr := key[len(_prefixParamArr):endIndex]
-		index, err := strconv.ParseInt(indexStr, 10, 32)
-		if err != nil {
-			return -1, ""
-		}
-		startIndex := endIndex + 2
-		if rune(key[endIndex+1]) != rune('.') {
-			startIndex = endIndex + 1
-		}
-		return int(index), key[startIndex:]
-	} else if strings.HasPrefix(key, _pefixParam) {
-		key = strings.TrimPrefix(key, _pefixParam+".")
-		return 0, strings.TrimPrefix(key, _pefixParam+".")
-	}
-
-	return -1, ""
-}
diff --git a/remoting/polaris/parser/parser_test.go b/remoting/polaris/parser/parser_test.go
deleted file mode 100644
index 1917b4905..000000000
--- a/remoting/polaris/parser/parser_test.go
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * 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 parser
-
-import (
-	"encoding/json"
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-var (
-	testDataStore = `
-	{
-		"book":[
-			{
-				"category":"reference",
-				"author":"Nigel Rees",
-				"title":"Sayings of the Century",
-				"price":8.95
-			},
-			{
-				"category":"fiction",
-				"author":"Evelyn Waugh",
-				"title":"Sword of Honor",
-				"price":12.99
-			},
-			{
-				"category":"fiction",
-				"author":"Herman Melville",
-				"title":"Moby Dick",
-				"isbn":"0-553-21311-3",
-				"price":8.99
-			},
-			{
-				"category":"fiction",
-				"author":"J. R. R. Tolkien",
-				"title":"The Lord of the Rings",
-				"isbn":"0-395-19395-8",
-				"price":22.99
-			}
-		],
-		"bicycle":{
-			"color":"red",
-			"price":19.95
-		}
-	}
-	`
-
-	testDataBicyle = `
-	{
-		"color":"red",
-		"price":19.95
-	}
-	`
-)
-
-func TestParseArgumentsByExpression(t *testing.T) {
-
-	var (
-		argStore, argBicyle interface{}
-	)
-
-	json.Unmarshal([]byte(testDataStore), &argStore)
-	json.Unmarshal([]byte(testDataBicyle), &argBicyle)
-
-	t.Run("test-case-1", func(t *testing.T) {
-		ret := ParseArgumentsByExpression("param.$.book[0].category", []interface{}{argStore})
-		assert.Equal(t, "reference", ret)
-	})
-
-	t.Run("test-case-2", func(t *testing.T) {
-		ret := ParseArgumentsByExpression("param[0].$.book[0].category", []interface{}{argStore, argBicyle})
-		assert.Equal(t, "reference", ret)
-	})
-
-	t.Run("test-case-2", func(t *testing.T) {
-		ret := ParseArgumentsByExpression("param[1].$.color", []interface{}{argStore, argBicyle})
-		assert.Equal(t, "red", ret)
-	})
-
-	t.Run("test-case-3", func(t *testing.T) {
-		ret := ParseArgumentsByExpression("param.$.color", []interface{}{argBicyle})
-		assert.Equal(t, "red", ret)
-	})
-
-}
-
-func Test_resolveIndex(t *testing.T) {
-	type args struct {
-		key string
-	}
-	tests := []struct {
-		name  string
-		args  args
-		want  int
-		want1 string
-	}{
-		{
-			name: "case-1",
-			args: args{
-				key: "param.$.key",
-			},
-			want:  0,
-			want1: "$.key",
-		},
-		{
-			name: "case-2",
-			args: args{
-				key: "param[1].$.key",
-			},
-			want:  1,
-			want1: "$.key",
-		},
-		{
-			name: "case-3",
-			args: args{
-				key: "param[10].$.key",
-			},
-			want:  10,
-			want1: "$.key",
-		},
-		{
-			name: "case-4",
-			args: args{
-				key: "param[11]$.key",
-			},
-			want:  11,
-			want1: "$.key",
-		},
-		{
-			name: "case-5",
-			args: args{
-				key: "param[11]key",
-			},
-			want:  11,
-			want1: "key",
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			got, got1 := resolveIndex(tt.args.key)
-			if got != tt.want {
-				t.Errorf("resolveIndex() got = %v, want %v", got, tt.want)
-			}
-			if got1 != tt.want1 {
-				t.Errorf("resolveIndex() got1 = %v, want %v", got1, tt.want1)
-			}
-		})
-	}
-}