add Exist method to determine a key's existence (#259)
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 @@
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 @@
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)
+ })
+
+}