You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ti...@apache.org on 2021/08/16 01:20:11 UTC
[servicecomb-service-center] branch master updated: Bug: continue
if parse value failed (#1134)
This is an automated email from the ASF dual-hosted git repository.
tianxiaoliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git
The following commit(s) were added to refs/heads/master by this push:
new 780a957 Bug: continue if parse value failed (#1134)
780a957 is described below
commit 780a957e2bfe14f1aeb0f91a6ad8b68a3d4d9ab7
Author: little-cui <su...@qq.com>
AuthorDate: Mon Aug 16 09:20:07 2021 +0800
Bug: continue if parse value failed (#1134)
---
datasource/etcd/state/etcd/indexer_etcd.go | 10 ++---
datasource/etcd/state/parser/parser.go | 4 +-
datasource/etcd/value/parser_test.go | 60 ++++++++++--------------------
3 files changed, 27 insertions(+), 47 deletions(-)
diff --git a/datasource/etcd/state/etcd/indexer_etcd.go b/datasource/etcd/state/etcd/indexer_etcd.go
index abce462..74a0c9c 100644
--- a/datasource/etcd/state/etcd/indexer_etcd.go
+++ b/datasource/etcd/state/etcd/indexer_etcd.go
@@ -44,7 +44,7 @@ func (i *Indexer) CheckPrefix(key string) error {
return nil
}
-func (i *Indexer) Search(ctx context.Context, opts ...etcdadpt.OpOption) (r *kvstore.Response, err error) {
+func (i *Indexer) Search(ctx context.Context, opts ...etcdadpt.OpOption) (*kvstore.Response, error) {
op := etcdadpt.OpGet(opts...)
key := util.BytesToStringWithNoCopy(op.Key)
@@ -59,10 +59,10 @@ func (i *Indexer) Search(ctx context.Context, opts ...etcdadpt.OpOption) (r *kvs
return nil, err
}
- r = new(kvstore.Response)
+ r := new(kvstore.Response)
r.Count = resp.Count
if len(resp.Kvs) == 0 || op.CountOnly {
- return
+ return r, nil
}
p := i.Parser
@@ -73,13 +73,13 @@ func (i *Indexer) Search(ctx context.Context, opts ...etcdadpt.OpOption) (r *kvs
kvs := make([]*kvstore.KeyValue, 0, len(resp.Kvs))
for _, src := range resp.Kvs {
kv := kvstore.NewKeyValue()
- if err = FromEtcdKeyValue(kv, src, p); err != nil {
+ if err := FromEtcdKeyValue(kv, src, p); err != nil {
continue
}
kvs = append(kvs, kv)
}
r.Kvs = kvs
- return
+ return r, nil
}
// Creditable implements kvstore.Indexer#Creditable.
diff --git a/datasource/etcd/state/parser/parser.go b/datasource/etcd/state/parser/parser.go
index c16e1c4..777a72b 100644
--- a/datasource/etcd/state/parser/parser.go
+++ b/datasource/etcd/state/parser/parser.go
@@ -37,8 +37,8 @@ var (
MapParser = New(newMap, MapUnmarshal)
UnParse ParseValueFunc = func(src []byte, dist interface{}) error {
- if err := check(src, dist); err != nil {
- return err
+ if dist == nil {
+ return ErrTargetNilPoint
}
d := dist.(*interface{})
*d = src
diff --git a/datasource/etcd/value/parser_test.go b/datasource/etcd/value/parser_test.go
index 45d1bf7..4697b44 100644
--- a/datasource/etcd/value/parser_test.go
+++ b/datasource/etcd/value/parser_test.go
@@ -17,67 +17,47 @@
package value
import (
- "github.com/apache/servicecomb-service-center/datasource/etcd/state/parser"
"testing"
+ "github.com/apache/servicecomb-service-center/datasource/etcd/state/parser"
"github.com/go-chassis/cari/discovery"
"github.com/stretchr/testify/assert"
)
func TestParseInnerValueTypeFunc(t *testing.T) {
r, err := parser.BytesParser.Unmarshal(nil)
- if err == nil {
- t.Fatalf("BytesParser.Unmarshal failed")
- }
+ assert.NoError(t, err)
+ assert.Nil(t, r.([]byte))
+
r, err = parser.BytesParser.Unmarshal([]byte("a"))
- if err != nil {
- t.Fatalf("BytesParser.Unmarshal failed, %s", err.Error())
- }
- if v, ok := r.([]byte); !ok || v[0] != 'a' {
- t.Fatalf("BytesParser.Unmarshal failed, %s", v)
- }
+ assert.NoError(t, err)
+ assert.Equal(t, []byte("a"), r.([]byte))
r, err = parser.StringParser.Unmarshal(nil)
- if err != nil {
- t.Fatalf("StringParser.Unmarshal failed")
- }
+ assert.NoError(t, err)
+ assert.Equal(t, "", r.(string))
+
r, err = parser.StringParser.Unmarshal([]byte("abc"))
- if err != nil {
- t.Fatalf("StringParser.Unmarshal failed, %s", err.Error())
- }
- if v, ok := r.(string); !ok || v != "abc" {
- t.Fatalf("StringParser.Unmarshal failed, %s", v)
- }
+ assert.NoError(t, err)
+ assert.Equal(t, "abc", r.(string))
r, err = parser.MapParser.Unmarshal(nil)
- if err == nil {
- t.Fatalf("MapParser.Unmarshal failed")
- }
+ assert.ErrorIs(t, parser.ErrParseNilPoint, err)
+
r, err = parser.MapParser.Unmarshal([]byte(`{"a": "abc"}`))
- if err != nil {
- t.Fatalf("MapParser.Unmarshal failed, %s", err.Error())
- }
- if v, ok := r.(map[string]string); !ok || v["a"] != "abc" {
- t.Fatalf("MapParser.Unmarshal failed, %s", v)
- }
+ assert.NoError(t, err)
+ assert.Equal(t, map[string]string{"a": "abc"}, r.(map[string]string))
r, err = parser.MapParser.Unmarshal([]byte(`xxx`))
- if err == nil {
- t.Fatalf("MapParser.Unmarshal failed")
- }
+ assert.Error(t, err)
var m interface{} = new(discovery.MicroService)
err = parser.JSONUnmarshal(nil, nil)
- if err == nil {
- t.Fatalf("JSONUnmarshal failed")
- }
+ assert.ErrorIs(t, parser.ErrParseNilPoint, err)
+
err = parser.JSONUnmarshal([]byte(`{"serviceName": "abc"}`), &m)
- if err != nil {
- t.Fatalf("MapParser.Unmarshal failed, %v", err)
- }
- if m.(*discovery.MicroService).ServiceName != "abc" {
- t.Fatalf("MapParser.Unmarshal failed, %s", m)
- }
+ assert.NoError(t, err)
+ assert.Equal(t, "abc", m.(*discovery.MicroService).ServiceName)
}
func TestParseValueTypeFunc(t *testing.T) {