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)
+       })
+
+}

Reply via email to