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

littlecui 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 f2b6c3a  [bugfix] set sync context when call SyncAll func (#1265)
f2b6c3a is described below

commit f2b6c3a0832c85b079ad739a841bccb507c519a4
Author: robotljw <[email protected]>
AuthorDate: Tue Feb 15 20:42:23 2022 +0800

    [bugfix] set sync context when call SyncAll func (#1265)
---
 datasource/etcd/sync.go       |  1 +
 datasource/etcd/sync_test.go  | 78 +++++++++++++++++++++++++++++++++++++++++++
 datasource/mongo/sync.go      |  1 +
 datasource/mongo/sync_test.go | 78 +++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 158 insertions(+)

diff --git a/datasource/etcd/sync.go b/datasource/etcd/sync.go
index 3e52f56..c64bc9c 100644
--- a/datasource/etcd/sync.go
+++ b/datasource/etcd/sync.go
@@ -57,6 +57,7 @@ func (s *SyncManager) SyncAll(ctx context.Context) error {
        if !enable {
                return nil
        }
+       ctx = putil.SetContext(ctx, putil.CtxEnableSync, "1")
        exist, err := etcdadpt.Exist(ctx, SyncAllKey)
        if err != nil {
                return err
diff --git a/datasource/etcd/sync_test.go b/datasource/etcd/sync_test.go
index 1fe4603..eed303c 100644
--- a/datasource/etcd/sync_test.go
+++ b/datasource/etcd/sync_test.go
@@ -510,4 +510,82 @@ func TestSyncAll(t *testing.T) {
                        assert.NoError(t, err)
                })
        })
+
+       t.Run("enableOnStart is true ,syncAllKey not exists and context is 
context.Background() will do sync", func(t *testing.T) {
+               _ = archaius.Set("sync.enableOnStart", true)
+               var accountName string
+               ctx := 
util.WithNoCache(util.SetDomainProject(context.Background(), 
"sync-all-background", "sync-all-background"))
+               ctx = util.WithNoCache(util.SetContext(ctx, util.CtxEnableSync, 
"1"))
+               t.Run("create a account and delete the task should pass", 
func(t *testing.T) {
+                       a1 := crbac.Account{
+                               ID:                  
"sync-create-11111-sync-all",
+                               Name:                
"sync-create-account1-sync-all",
+                               Password:            "tnuocca-tset",
+                               Roles:               []string{"admin"},
+                               TokenExpirationTime: "2020-12-30",
+                               CurrentPassword:     "tnuocca-tset1",
+                       }
+                       err := rbac.Instance().CreateAccount(ctx, &a1)
+                       assert.NoError(t, err)
+                       accountName = a1.Name
+                       r, err := rbac.Instance().GetAccount(ctx, a1.Name)
+                       assert.NoError(t, err)
+                       assert.Equal(t, a1, *r)
+                       listTaskReq := model.ListTaskRequest{
+                               Domain:       "",
+                               Project:      "",
+                               ResourceType: datasource.ResourceAccount,
+                       }
+                       tasks, err := task.List(ctx, &listTaskReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 1, len(tasks))
+                       err = task.Delete(ctx, tasks...)
+                       assert.NoError(t, err)
+                       tasks, err = task.List(ctx, &listTaskReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 0, len(tasks))
+               })
+
+               t.Run("do sync will create task should pass", func(t 
*testing.T) {
+                       err := 
datasource.GetSyncManager().SyncAll(context.Background())
+                       assert.Nil(t, err)
+                       listAccountTaskReq := model.ListTaskRequest{
+                               Domain:       "",
+                               Project:      "",
+                               ResourceType: datasource.ResourceAccount,
+                       }
+                       tasks, err := task.List(ctx, &listAccountTaskReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 1, len(tasks))
+                       err = task.Delete(ctx, tasks...)
+                       assert.NoError(t, err)
+                       tasks, err = task.List(ctx, &listAccountTaskReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 0, len(tasks))
+               })
+               t.Run("delete account resource should pass", func(t *testing.T) 
{
+                       _, err := rbac.Instance().DeleteAccount(ctx, 
[]string{accountName})
+                       assert.NoError(t, err)
+                       listAccountTaskReq := model.ListTaskRequest{
+                               Domain:       "",
+                               Project:      "",
+                               ResourceType: datasource.ResourceAccount,
+                       }
+                       tasks, err := task.List(ctx, &listAccountTaskReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 1, len(tasks))
+                       err = task.Delete(ctx, tasks...)
+                       assert.NoError(t, err)
+
+                       tombstoneListReq := model.ListTombstoneRequest{
+                               Domain:  "sync-all-background",
+                               Project: "sync-all-background",
+                       }
+                       tombstones, err := tombstone.List(ctx, 
&tombstoneListReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 1, len(tombstones))
+                       err = tombstone.Delete(ctx, tombstones...)
+                       assert.NoError(t, err)
+               })
+       })
 }
diff --git a/datasource/mongo/sync.go b/datasource/mongo/sync.go
index 8aa3d53..e1b63c9 100644
--- a/datasource/mongo/sync.go
+++ b/datasource/mongo/sync.go
@@ -48,6 +48,7 @@ func (s *SyncManager) SyncAll(ctx context.Context) error {
        if !enable {
                return nil
        }
+       ctx = putil.SetContext(ctx, putil.CtxEnableSync, "1")
        exist, err := syncAllKeyExist(ctx)
        if err != nil {
                return err
diff --git a/datasource/mongo/sync_test.go b/datasource/mongo/sync_test.go
index f1499ac..99a090e 100644
--- a/datasource/mongo/sync_test.go
+++ b/datasource/mongo/sync_test.go
@@ -36,6 +36,7 @@ import (
        "github.com/apache/servicecomb-service-center/datasource/rbac"
        emodel "github.com/apache/servicecomb-service-center/eventbase/model"
        "github.com/apache/servicecomb-service-center/eventbase/service/task"
+       
"github.com/apache/servicecomb-service-center/eventbase/service/tombstone"
        "github.com/apache/servicecomb-service-center/pkg/util"
 )
 
@@ -297,4 +298,81 @@ func TestSyncAll(t *testing.T) {
                })
        })
 
+       t.Run("enableOnStart is true ,syncAllKey not exists and context is 
context.Background() will do sync", func(t *testing.T) {
+               _ = archaius.Set("sync.enableOnStart", true)
+               var accountName string
+               ctx := 
util.WithNoCache(util.SetDomainProject(context.Background(), 
"sync-all-background", "sync-all-background"))
+               ctx = util.WithNoCache(util.SetContext(ctx, util.CtxEnableSync, 
"1"))
+               t.Run("create a account and delete the task should pass", 
func(t *testing.T) {
+                       a1 := crbac.Account{
+                               ID:                  
"sync-create-11111-sync-all",
+                               Name:                
"sync-create-account1-sync-all",
+                               Password:            "tnuocca-tset",
+                               Roles:               []string{"admin"},
+                               TokenExpirationTime: "2020-12-30",
+                               CurrentPassword:     "tnuocca-tset1",
+                       }
+                       err := rbac.Instance().CreateAccount(ctx, &a1)
+                       assert.NoError(t, err)
+                       accountName = a1.Name
+                       r, err := rbac.Instance().GetAccount(ctx, a1.Name)
+                       assert.NoError(t, err)
+                       assert.Equal(t, a1, *r)
+                       listTaskReq := emodel.ListTaskRequest{
+                               Domain:       "",
+                               Project:      "",
+                               ResourceType: datasource.ResourceAccount,
+                       }
+                       tasks, err := task.List(ctx, &listTaskReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 1, len(tasks))
+                       err = task.Delete(ctx, tasks...)
+                       assert.NoError(t, err)
+                       tasks, err = task.List(ctx, &listTaskReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 0, len(tasks))
+               })
+
+               t.Run("do sync will create task should pass", func(t 
*testing.T) {
+                       err := 
datasource.GetSyncManager().SyncAll(context.Background())
+                       assert.Nil(t, err)
+                       listAccountTaskReq := emodel.ListTaskRequest{
+                               Domain:       "",
+                               Project:      "",
+                               ResourceType: datasource.ResourceAccount,
+                       }
+                       tasks, err := task.List(ctx, &listAccountTaskReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 1, len(tasks))
+                       err = task.Delete(ctx, tasks...)
+                       assert.NoError(t, err)
+                       tasks, err = task.List(ctx, &listAccountTaskReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 0, len(tasks))
+               })
+               t.Run("delete account resource should pass", func(t *testing.T) 
{
+                       _, err := rbac.Instance().DeleteAccount(ctx, 
[]string{accountName})
+                       assert.NoError(t, err)
+                       listAccountTaskReq := emodel.ListTaskRequest{
+                               Domain:       "",
+                               Project:      "",
+                               ResourceType: datasource.ResourceAccount,
+                       }
+                       tasks, err := task.List(ctx, &listAccountTaskReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 1, len(tasks))
+                       err = task.Delete(ctx, tasks...)
+                       assert.NoError(t, err)
+
+                       tombstoneListReq := emodel.ListTombstoneRequest{
+                               Domain:  "sync-all-background",
+                               Project: "sync-all-background",
+                       }
+                       tombstones, err := tombstone.List(ctx, 
&tombstoneListReq)
+                       assert.NoError(t, err)
+                       assert.Equal(t, 1, len(tombstones))
+                       err = tombstone.Delete(ctx, tombstones...)
+                       assert.NoError(t, err)
+               })
+       })
 }

Reply via email to