[bugfix] set sync context when call SyncAll func (#1265)
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 @@
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 @@
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 @@
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 @@
"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 @@
})
})
+ 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)
+ })
+ })
}