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-kie.git
The following commit(s) were added to refs/heads/master by this push: new efeb332 add Exist method to determine a key's existence (#259) efeb332 is described below commit efeb3321373fefc64561d46f420228c6d549767c Author: kkf1 <46839758+k...@users.noreply.github.com> AuthorDate: Mon Sep 5 17:38:37 2022 +0800 add Exist method to determine a key's existence (#259) --- server/service/kv/kv_svc.go | 13 +++++++++++++ server/service/kv/kv_svc_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/server/service/kv/kv_svc.go b/server/service/kv/kv_svc.go index 66a958b..9d15534 100644 --- a/server/service/kv/kv_svc.go +++ b/server/service/kv/kv_svc.go @@ -302,3 +302,16 @@ func List(ctx context.Context, project, domain string, options ...datasource.Fin defer listSema.Release() return datasource.GetBroker().GetKVDao().List(ctx, project, domain, options...) } + +func Exist(ctx context.Context, key, project, domain string, labels map[string]string) (bool, error) { + if labels == nil { + labels = map[string]string{} + } + labelFormat := stringutil.FormatMap(labels) + exist, err := datasource.GetBroker().GetKVDao().Exist(ctx, key, project, domain, datasource.WithLabelFormat(labelFormat)) + if err != nil { + openlog.Error(err.Error()) + return false, err + } + return exist, nil +} diff --git a/server/service/kv/kv_svc_test.go b/server/service/kv/kv_svc_test.go index 471c016..879936c 100644 --- a/server/service/kv/kv_svc_test.go +++ b/server/service/kv/kv_svc_test.go @@ -195,3 +195,37 @@ func TestService_Delete(t *testing.T) { assert.NoError(t, err) }) } + +func TestExist(t *testing.T) { + labels := map[string]string{ + "app": "solar-system", + "service": "galaxy", + } + t.Run("determine whether key 'earth' exists, expected: exists", func(t *testing.T) { + ctx := context.TODO() + kv, err := kvsvc.Create(ctx, &model.KVDoc{ + Key: "earth", + Value: "exists", + Status: common.StatusEnabled, + Labels: labels, + Domain: domain, + Project: project, + }) + assert.Nil(t, err) + assert.NotEmpty(t, kv.ID) + exists, queryErr := kvsvc.Exist(ctx, "earth", project, domain, labels) + assert.NoError(t, queryErr) + assert.Equal(t, true, exists) + }) + t.Run("determine whether key 'earth' exists with nil labels, expected: not exists", func(t *testing.T) { + exists, queryErr := kvsvc.Exist(context.TODO(), "earth", project, domain, nil) + assert.NoError(t, queryErr) + assert.Equal(t, false, exists) + }) + t.Run("search wrong key, expected: not exists", func(t *testing.T) { + exists, queryErr := kvsvc.Exist(context.TODO(), "x.x.x.x.x.x", project, domain, labels) + assert.NoError(t, queryErr) + assert.Equal(t, false, exists) + }) + +}