You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ti...@apache.org on 2021/12/28 09:23:09 UTC
[servicecomb-service-center] branch master updated: [feat] add task and tombstone ut in eventbase (#1185)
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-service-center.git
The following commit(s) were added to refs/heads/master by this push:
new 1e58aa0 [feat] add task and tombstone ut in eventbase (#1185)
1e58aa0 is described below
commit 1e58aa0464c6f4ac7ddd08c6c2a52635900449b1
Author: robotljw <79...@qq.com>
AuthorDate: Tue Dec 28 17:23:01 2021 +0800
[feat] add task and tombstone ut in eventbase (#1185)
---
.github/workflows/eventbase-ci.yml | 45 +++++++
eventbase/README.md | 37 ++++++
eventbase/datasource/etcd/task/task_dao.go | 8 +-
eventbase/datasource/etcd/task/task_dao_test.go | 146 ---------------------
.../datasource/etcd/tombstone/tombstone_dao.go | 4 +-
.../etcd/tombstone/tombstone_dao_test.go | 113 ----------------
eventbase/datasource/mongo/model/types.go | 3 +-
eventbase/datasource/mongo/mongo.go | 4 +-
eventbase/datasource/mongo/task/task_dao.go | 10 +-
eventbase/datasource/mongo/task/task_dao_test.go | 145 --------------------
.../datasource/mongo/tombstone/tombstone_dao.go | 7 +-
.../mongo/tombstone/tombstone_dao_test.go | 112 ----------------
eventbase/datasource/options.go | 12 +-
eventbase/datasource/tlsutil/tlsutil_test.go | 73 -----------
eventbase/datasource/tombstone.go | 4 +-
eventbase/go.mod | 3 +-
eventbase/go.sum | 6 +-
.../tombstone_request.go => model/request.go} | 10 +-
eventbase/service/task/task_svc.go | 10 +-
eventbase/service/task/task_svc_test.go | 118 +++++++++++++++++
eventbase/service/tombstone/tombstone_svc.go | 6 +-
eventbase/service/tombstone/tombstone_svc_test.go | 100 ++++++++++++++
eventbase/test/test.go | 56 +++++++-
scripts/ut_test_in_docker.sh | 4 +-
24 files changed, 398 insertions(+), 638 deletions(-)
diff --git a/.github/workflows/eventbase-ci.yml b/.github/workflows/eventbase-ci.yml
new file mode 100644
index 0000000..a2a0f57
--- /dev/null
+++ b/.github/workflows/eventbase-ci.yml
@@ -0,0 +1,45 @@
+name: eventbase merge check
+on: [ push, pull_request ]
+jobs:
+ mongo-storage:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set up Go
+ uses: actions/setup-go@v1
+ with:
+ go-version: 1.16
+ id: go
+ - name: Start MongoDB
+ uses: supercharge/mongodb-github-action@1.7.0
+ with:
+ mongodb-version: 4.2
+ mongodb-replica-set: test-rs
+ mongodb-port: 27017
+ - name: Check out source code
+ uses: actions/checkout@v1
+ - name: UT test
+ run: |
+ export TEST_DB_MODE=mongo
+ export TEST_DB_URI=mongodb://127.0.0.1:27017
+ cd eventbase
+ go test -short -covermode=atomic $(go list ./... | grep -v etcd | grep -v third_party | grep -v examples)
+ etcd-storage:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set up Go
+ uses: actions/setup-go@v1
+ with:
+ go-version: 1.16
+ id: go
+ - name: Check out code into the Go module directory
+ uses: actions/checkout@v1
+ - name: UT for etcd
+ run: |
+ time docker run -d -p 2379:2379 --name etcd quay.io/coreos/etcd etcd -name etcd --advertise-client-urls http://0.0.0.0:2379 --listen-client-urls http://0.0.0.0:2379
+ while ! nc -z 127.0.0.1 2379; do
+ sleep 1
+ done
+ export TEST_DB_MODE=etcd
+ export TEST_DB_URI=http://127.0.0.1:2379
+ cd eventbase
+ time go test -short -covermode=atomic $(go list ./... | grep -v mongo | grep -v third_party | grep -v examples)
\ No newline at end of file
diff --git a/eventbase/README.md b/eventbase/README.md
new file mode 100644
index 0000000..93ddf88
--- /dev/null
+++ b/eventbase/README.md
@@ -0,0 +1,37 @@
+# eventbase
+
+eventbase provides the crud interface of task and tombstone.
+
+### package
+
+**bootstrap**:used to start initial loading.
+
+**datasource**: realize the dao operation of etcd and mongo on task and tombstone.
+
+**domain**: task and tombstone request.
+
+**service**: Interfaces exposed by task and tombstone.
+
+**test**: test parameters.
+
+### how to use
+
+```go
+import (
+ _ "github.com/apache/servicecomb-service-center/eventbase/bootstrap"
+ "github.com/apache/servicecomb-service-center/eventbase/datasource"
+ )
+
+func Init(){
+ dbCfg := db.Config{
+ Kind: "etcd",
+ URI: "http://127.0.0.1:2379",
+ Timeout: 10 * time.Second,
+ }
+ err := datasource.Init(dbCfg)
+ ...
+ datasource.GetDataSource().TaskDao()
+ datasource.GetDataSource().TombstoneDao()
+ ...
+}
+```
\ No newline at end of file
diff --git a/eventbase/datasource/etcd/task/task_dao.go b/eventbase/datasource/etcd/task/task_dao.go
index bc7a68e..c997752 100644
--- a/eventbase/datasource/etcd/task/task_dao.go
+++ b/eventbase/datasource/etcd/task/task_dao.go
@@ -38,7 +38,7 @@ func (d *Dao) Create(ctx context.Context, task *sync.Task) (*sync.Task, error) {
openlog.Error("fail to marshal task")
return nil, err
}
- ok, err := etcdadpt.InsertBytes(ctx, key.TaskKey(task.Domain, task.Project, task.TaskID, task.Timestamp), taskBytes)
+ ok, err := etcdadpt.InsertBytes(ctx, key.TaskKey(task.Domain, task.Project, task.ID, task.Timestamp), taskBytes)
if err != nil {
openlog.Error("fail to create task" + err.Error())
return nil, err
@@ -51,7 +51,7 @@ func (d *Dao) Create(ctx context.Context, task *sync.Task) (*sync.Task, error) {
}
func (d *Dao) Update(ctx context.Context, task *sync.Task) error {
- keyTask := key.TaskKey(task.Domain, task.Project, task.TaskID, task.Timestamp)
+ keyTask := key.TaskKey(task.Domain, task.Project, task.ID, task.Timestamp)
resp, err := etcdadpt.Get(ctx, keyTask)
if err != nil {
openlog.Error("fail to get task" + err.Error())
@@ -79,7 +79,7 @@ func (d *Dao) Update(ctx context.Context, task *sync.Task) error {
func (d *Dao) Delete(ctx context.Context, tasks ...*sync.Task) error {
delOptions := make([]etcdadpt.OpOptions, len(tasks))
for i, task := range tasks {
- delOptions[i] = etcdadpt.OpDel(etcdadpt.WithStrKey(key.TaskKey(task.Domain, task.Project, task.TaskID, task.Timestamp)))
+ delOptions[i] = etcdadpt.OpDel(etcdadpt.WithStrKey(key.TaskKey(task.Domain, task.Project, task.ID, task.Timestamp)))
}
err := etcdadpt.Txn(ctx, delOptions)
if err != nil {
@@ -119,7 +119,7 @@ func filterMatch(task *sync.Task, options datasource.TaskFindOptions) bool {
if options.Action != "" && task.Action != options.Action {
return false
}
- if options.DataType != "" && task.DataType != options.DataType {
+ if options.ResourceType != "" && task.ResourceType != options.ResourceType {
return false
}
if options.Status != "" && task.Status != options.Status {
diff --git a/eventbase/datasource/etcd/task/task_dao_test.go b/eventbase/datasource/etcd/task/task_dao_test.go
deleted file mode 100644
index 97ac43c..0000000
--- a/eventbase/datasource/etcd/task/task_dao_test.go
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package task_test
-
-import (
- "context"
- "testing"
-
- "github.com/go-chassis/cari/db"
- "github.com/go-chassis/cari/sync"
- "github.com/stretchr/testify/assert"
- // support embedded etcd
- _ "github.com/little-cui/etcdadpt/embedded"
- _ "github.com/little-cui/etcdadpt/remote"
-
- "github.com/apache/servicecomb-service-center/eventbase/datasource"
- "github.com/apache/servicecomb-service-center/eventbase/datasource/etcd"
- "github.com/apache/servicecomb-service-center/eventbase/test"
-)
-
-var ds datasource.DataSource
-
-func init() {
- cfg := &db.Config{
- Kind: test.Etcd,
- URI: test.EtcdURI,
- }
- ds, _ = etcd.NewDatasource(cfg)
-}
-
-func TestTask(t *testing.T) {
- var (
- task = sync.Task{
- TaskID: "30b93187-2a38-49e3-ae99-1961b28329b0",
- Action: "create",
- DataType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171566,
- Status: "pending"}
- taskTwo = sync.Task{
- TaskID: "40b93187-2a38-49e3-ae99-1961b28329b0",
- Action: "update",
- DataType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171567,
- Status: "done"}
- taskThree = sync.Task{
- TaskID: "50b93187-2a38-49e3-ae99-1961b28329b0",
- Action: "update",
- DataType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171568,
- Status: "pending"}
- )
-
- t.Run("create task", func(t *testing.T) {
- t.Run("create a task should pass", func(t *testing.T) {
- _, err := ds.TaskDao().Create(context.Background(), &task)
- assert.NoError(t, err)
- })
-
- t.Run("create a same task should fail", func(t *testing.T) {
- _, err := ds.TaskDao().Create(context.Background(), &task)
- assert.NotNil(t, err)
- })
-
- t.Run("create taskTwo and taskThree should pass", func(t *testing.T) {
- _, err := ds.TaskDao().Create(context.Background(), &taskTwo)
- assert.NoError(t, err)
- _, err = ds.TaskDao().Create(context.Background(), &taskThree)
- assert.NoError(t, err)
- })
- })
-
- t.Run("update task", func(t *testing.T) {
- t.Run("update a existing task should pass", func(t *testing.T) {
- task.Status = "done"
- err := ds.TaskDao().Update(context.Background(), &task)
- assert.NoError(t, err)
- })
-
- t.Run("update a not existing task should fail", func(t *testing.T) {
- notExistTask := sync.Task{
- TaskID: "not-exist",
- Action: "create",
- DataType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171568,
- Status: "pending",
- }
- err := ds.TaskDao().Update(context.Background(), ¬ExistTask)
- assert.NotNil(t, err)
- })
- })
-
- t.Run("list task", func(t *testing.T) {
- t.Run("list task with domain, project, action ,dataType and status should pass", func(t *testing.T) {
- opts := []datasource.TaskFindOption{
- datasource.WithDomain(task.Domain),
- datasource.WithProject(task.Project),
- datasource.WithAction(task.Action),
- datasource.WithDataType(task.DataType),
- datasource.WithStatus(task.Status),
- }
- tasks, err := ds.TaskDao().List(context.Background(), opts...)
- assert.NoError(t, err)
- assert.Equal(t, 1, len(tasks))
- })
-
- t.Run("list task without action ,dataType and status should pass", func(t *testing.T) {
- tasks, err := ds.TaskDao().List(context.Background())
- assert.NoError(t, err)
- assert.Equal(t, 3, len(tasks))
- assert.Equal(t, tasks[0].Timestamp, task.Timestamp)
- assert.Equal(t, tasks[1].Timestamp, taskTwo.Timestamp)
- assert.Equal(t, tasks[2].Timestamp, taskThree.Timestamp)
- })
-
- })
-
- t.Run("delete task", func(t *testing.T) {
- t.Run("delete tasks should pass", func(t *testing.T) {
- err := ds.TaskDao().Delete(context.Background(), []*sync.Task{&task, &taskTwo, &taskThree}...)
- assert.NoError(t, err)
- })
- })
-}
diff --git a/eventbase/datasource/etcd/tombstone/tombstone_dao.go b/eventbase/datasource/etcd/tombstone/tombstone_dao.go
index 26467c5..d42a76f 100644
--- a/eventbase/datasource/etcd/tombstone/tombstone_dao.go
+++ b/eventbase/datasource/etcd/tombstone/tombstone_dao.go
@@ -27,13 +27,13 @@ import (
"github.com/apache/servicecomb-service-center/eventbase/datasource"
"github.com/apache/servicecomb-service-center/eventbase/datasource/etcd/key"
- "github.com/apache/servicecomb-service-center/eventbase/request"
+ "github.com/apache/servicecomb-service-center/eventbase/model"
)
type Dao struct {
}
-func (d *Dao) Get(ctx context.Context, req *request.GetTombstoneRequest) (*sync.Tombstone, error) {
+func (d *Dao) Get(ctx context.Context, req *model.GetTombstoneRequest) (*sync.Tombstone, error) {
tombstoneKey := key.TombstoneKey(req.Domain, req.Project, req.ResourceType, req.ResourceID)
kv, err := etcdadpt.Get(ctx, tombstoneKey)
if err != nil {
diff --git a/eventbase/datasource/etcd/tombstone/tombstone_dao_test.go b/eventbase/datasource/etcd/tombstone/tombstone_dao_test.go
deleted file mode 100644
index aedd0f0..0000000
--- a/eventbase/datasource/etcd/tombstone/tombstone_dao_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package tombstone_test
-
-import (
- "context"
- "testing"
-
- "github.com/go-chassis/cari/db"
- "github.com/go-chassis/cari/sync"
- "github.com/stretchr/testify/assert"
- // support embedded etcd
- _ "github.com/little-cui/etcdadpt/embedded"
- _ "github.com/little-cui/etcdadpt/remote"
-
- "github.com/apache/servicecomb-service-center/eventbase/datasource"
- "github.com/apache/servicecomb-service-center/eventbase/datasource/etcd"
- "github.com/apache/servicecomb-service-center/eventbase/request"
- "github.com/apache/servicecomb-service-center/eventbase/test"
-)
-
-var ds datasource.DataSource
-
-func init() {
- cfg := &db.Config{
- Kind: test.Etcd,
- URI: test.EtcdURI,
- }
- ds, _ = etcd.NewDatasource(cfg)
-}
-
-func TestTombstone(t *testing.T) {
- var (
- tombstoneOne = sync.Tombstone{
- ResourceID: "app/test",
- ResourceType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171566,
- }
- tombstoneTwo = sync.Tombstone{
- ResourceID: "property/test",
- ResourceType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171567,
- }
- )
-
- t.Run("create tombstone", func(t *testing.T) {
- t.Run("create two tombstone should pass", func(t *testing.T) {
- tombstone, err := ds.TombstoneDao().Create(context.Background(), &tombstoneOne)
- assert.NoError(t, err)
- assert.NotNil(t, tombstone)
- tombstone, err = ds.TombstoneDao().Create(context.Background(), &tombstoneTwo)
- assert.NoError(t, err)
- assert.NotNil(t, tombstone)
- })
- })
-
- t.Run("get tombstone", func(t *testing.T) {
- t.Run("get one tombstone should pass", func(t *testing.T) {
- req := request.GetTombstoneRequest{
- Domain: tombstoneOne.Domain,
- Project: tombstoneOne.Project,
- ResourceType: tombstoneOne.ResourceType,
- ResourceID: tombstoneOne.ResourceID,
- }
- tombstone, err := ds.TombstoneDao().Get(context.Background(), &req)
- assert.NoError(t, err)
- assert.Equal(t, tombstone.Timestamp, tombstoneOne.Timestamp)
- })
- })
-
- t.Run("list tombstone", func(t *testing.T) {
- t.Run("list tombstone with Domain, Project ,ResourceType and BeforeTimestamp should pass", func(t *testing.T) {
- opts := []datasource.TombstoneFindOption{
- datasource.WithTombstoneDomain("default"),
- datasource.WithTombstoneDomain("default"),
- datasource.WithResourceType(tombstoneOne.ResourceType),
- datasource.WithBeforeTimestamp(1638171600),
- }
- tombstones, err := ds.TombstoneDao().List(context.Background(), opts...)
- assert.NoError(t, err)
- assert.Equal(t, 2, len(tombstones))
- assert.Equal(t, tombstones[0].Timestamp, tombstoneOne.Timestamp)
- assert.Equal(t, tombstones[1].Timestamp, tombstoneTwo.Timestamp)
- })
- })
-
- t.Run("delete tombstone", func(t *testing.T) {
- t.Run("delete two tombstone should pass", func(t *testing.T) {
- err := ds.TombstoneDao().Delete(context.Background(), []*sync.Tombstone{&tombstoneOne, &tombstoneTwo}...)
- assert.NoError(t, err)
- })
- })
-
-}
diff --git a/eventbase/datasource/mongo/model/types.go b/eventbase/datasource/mongo/model/types.go
index 04d4421..c53efb1 100644
--- a/eventbase/datasource/mongo/model/types.go
+++ b/eventbase/datasource/mongo/model/types.go
@@ -24,11 +24,10 @@ const (
CollectionTombstone = "tombstone"
ColumnDomain = "domain"
ColumnProject = "project"
- ColumnTaskID = "task_id"
+ ColumnID = "id"
ColumnTimestamp = "timestamp"
ColumnResourceID = "resource_id"
ColumnResourceType = "resource_type"
ColumnStatus = "status"
ColumnAction = "action"
- ColumnDataType = "data_type"
)
diff --git a/eventbase/datasource/mongo/mongo.go b/eventbase/datasource/mongo/mongo.go
index 580a6f9..72f6099 100644
--- a/eventbase/datasource/mongo/mongo.go
+++ b/eventbase/datasource/mongo/mongo.go
@@ -113,14 +113,14 @@ func wrapError(err error, skipMsg ...string) {
func ensureTask(session *mgo.Session) {
c := session.DB(model.DBName).C(model.CollectionTask)
err := c.Create(&mgo.CollectionInfo{Validator: bson.M{
- model.ColumnTaskID: bson.M{"$exists": true},
+ model.ColumnID: bson.M{"$exists": true},
model.ColumnDomain: bson.M{"$exists": true},
model.ColumnProject: bson.M{"$exists": true},
model.ColumnTimestamp: bson.M{"$exists": true},
}})
wrapError(err)
err = c.EnsureIndex(mgo.Index{
- Key: []string{model.ColumnDomain, model.ColumnProject, model.ColumnTaskID, model.ColumnTimestamp},
+ Key: []string{model.ColumnDomain, model.ColumnProject, model.ColumnID, model.ColumnTimestamp},
Unique: true,
})
wrapError(err)
diff --git a/eventbase/datasource/mongo/task/task_dao.go b/eventbase/datasource/mongo/task/task_dao.go
index c647a51..a012871 100644
--- a/eventbase/datasource/mongo/task/task_dao.go
+++ b/eventbase/datasource/mongo/task/task_dao.go
@@ -47,7 +47,7 @@ func (d *Dao) Create(ctx context.Context, task *sync.Task) (*sync.Task, error) {
func (d *Dao) Update(ctx context.Context, task *sync.Task) error {
collection := client.GetMongoClient().GetDB().Collection(model.CollectionTask)
result, err := collection.UpdateOne(ctx,
- bson.M{model.ColumnTaskID: task.TaskID, model.ColumnDomain: task.Domain, model.ColumnProject: task.Project, model.ColumnTimestamp: task.Timestamp},
+ bson.M{model.ColumnID: task.ID, model.ColumnDomain: task.Domain, model.ColumnProject: task.Project, model.ColumnTimestamp: task.Timestamp},
bson.D{{Key: "$set", Value: bson.D{
{Key: model.ColumnStatus, Value: task.Status}}},
})
@@ -66,11 +66,11 @@ func (d *Dao) Delete(ctx context.Context, tasks ...*sync.Task) error {
tasksIDs := make([]string, len(tasks))
filter := bson.A{}
for i, task := range tasks {
- tasksIDs[i] = task.TaskID
+ tasksIDs[i] = task.ID
dFilter := bson.D{
{model.ColumnDomain, task.Domain},
{model.ColumnProject, task.Project},
- {model.ColumnTaskID, task.TaskID},
+ {model.ColumnID, task.ID},
{model.ColumnTimestamp, task.Timestamp},
}
filter = append(filter, dFilter)
@@ -103,8 +103,8 @@ func (d *Dao) List(ctx context.Context, options ...datasource.TaskFindOption) ([
if opts.Action != "" {
filter[model.ColumnAction] = opts.Action
}
- if opts.DataType != "" {
- filter[model.ColumnDataType] = opts.DataType
+ if opts.ResourceType != "" {
+ filter[model.ColumnResourceType] = opts.ResourceType
}
if opts.Status != "" {
filter[model.ColumnStatus] = opts.Status
diff --git a/eventbase/datasource/mongo/task/task_dao_test.go b/eventbase/datasource/mongo/task/task_dao_test.go
deleted file mode 100644
index 47c2d7b..0000000
--- a/eventbase/datasource/mongo/task/task_dao_test.go
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package task_test
-
-import (
- "context"
- "testing"
- "time"
-
- "github.com/go-chassis/cari/db"
- "github.com/go-chassis/cari/sync"
- "github.com/stretchr/testify/assert"
-
- "github.com/apache/servicecomb-service-center/eventbase/datasource"
- "github.com/apache/servicecomb-service-center/eventbase/datasource/mongo"
- "github.com/apache/servicecomb-service-center/eventbase/test"
-)
-
-var ds datasource.DataSource
-
-func init() {
- cfg := &db.Config{
- Kind: test.Mongo,
- URI: test.MongoURI,
- Timeout: 10 * time.Second,
- }
- ds, _ = mongo.NewDatasource(cfg)
-}
-
-func TestTask(t *testing.T) {
- var (
- task = sync.Task{
- TaskID: "30b93187-2a38-49e3-ae99-1961b28329b0",
- Action: "create",
- DataType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171566,
- Status: "pending"}
- taskTwo = sync.Task{
- TaskID: "40b93187-2a38-49e3-ae99-1961b28329b0",
- Action: "update",
- DataType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171567,
- Status: "done"}
- taskThree = sync.Task{
- TaskID: "50b93187-2a38-49e3-ae99-1961b28329b0",
- Action: "update",
- DataType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171568,
- Status: "pending"}
- )
-
- t.Run("create task", func(t *testing.T) {
- t.Run("create a task should pass", func(t *testing.T) {
- _, err := ds.TaskDao().Create(context.Background(), &task)
- assert.NoError(t, err)
- })
-
- t.Run("create a same task should fail", func(t *testing.T) {
- _, err := ds.TaskDao().Create(context.Background(), &task)
- assert.NotNil(t, err)
- })
-
- t.Run("create taskTwo and taskThree should pass", func(t *testing.T) {
- _, err := ds.TaskDao().Create(context.Background(), &taskTwo)
- assert.NoError(t, err)
- _, err = ds.TaskDao().Create(context.Background(), &taskThree)
- assert.NoError(t, err)
- })
- })
-
- t.Run("update task", func(t *testing.T) {
- t.Run("update a existing task should pass", func(t *testing.T) {
- task.Status = "done"
- err := ds.TaskDao().Update(context.Background(), &task)
- assert.NoError(t, err)
- })
-
- t.Run("update a not existing task should fail", func(t *testing.T) {
- notExistTask := sync.Task{
- TaskID: "not-exist",
- Action: "create",
- DataType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171568,
- Status: "pending",
- }
- err := ds.TaskDao().Update(context.Background(), ¬ExistTask)
- assert.NotNil(t, err)
- })
- })
-
- t.Run("list task", func(t *testing.T) {
- t.Run("list task with domain, project, action ,dataType and status should pass", func(t *testing.T) {
- opts := []datasource.TaskFindOption{
- datasource.WithDomain(task.Domain),
- datasource.WithProject(task.Project),
- datasource.WithAction(task.Action),
- datasource.WithDataType(task.DataType),
- datasource.WithStatus(task.Status),
- }
- tasks, err := ds.TaskDao().List(context.Background(), opts...)
- assert.NoError(t, err)
- assert.Equal(t, 1, len(tasks))
- })
-
- t.Run("list task without action ,dataType and status should pass", func(t *testing.T) {
- tasks, err := ds.TaskDao().List(context.Background())
- assert.NoError(t, err)
- assert.Equal(t, 3, len(tasks))
- assert.Equal(t, tasks[0].Timestamp, task.Timestamp)
- assert.Equal(t, tasks[1].Timestamp, taskTwo.Timestamp)
- assert.Equal(t, tasks[2].Timestamp, taskThree.Timestamp)
- })
-
- })
-
- t.Run("delete task", func(t *testing.T) {
- t.Run("delete tasks should pass", func(t *testing.T) {
- err := ds.TaskDao().Delete(context.Background(), []*sync.Task{&task, &taskTwo, &taskThree}...)
- assert.NoError(t, err)
- })
- })
-}
diff --git a/eventbase/datasource/mongo/tombstone/tombstone_dao.go b/eventbase/datasource/mongo/tombstone/tombstone_dao.go
index f83b3eb..0bc038b 100644
--- a/eventbase/datasource/mongo/tombstone/tombstone_dao.go
+++ b/eventbase/datasource/mongo/tombstone/tombstone_dao.go
@@ -28,15 +28,16 @@ import (
"github.com/apache/servicecomb-service-center/eventbase/datasource"
"github.com/apache/servicecomb-service-center/eventbase/datasource/mongo/client"
"github.com/apache/servicecomb-service-center/eventbase/datasource/mongo/model"
- "github.com/apache/servicecomb-service-center/eventbase/request"
+ emodel "github.com/apache/servicecomb-service-center/eventbase/model"
)
type Dao struct {
}
-func (d *Dao) Get(ctx context.Context, req *request.GetTombstoneRequest) (*sync.Tombstone, error) {
+func (d *Dao) Get(ctx context.Context, req *emodel.GetTombstoneRequest) (*sync.Tombstone, error) {
collection := client.GetMongoClient().GetDB().Collection(model.CollectionTombstone)
- filter := bson.M{model.ColumnDomain: req.Domain, model.ColumnProject: req.Project, model.ColumnResourceType: req.ResourceType, model.ColumnResourceID: req.ResourceID}
+ filter := bson.M{model.ColumnDomain: req.Domain, model.ColumnProject: req.Project,
+ model.ColumnResourceType: req.ResourceType, model.ColumnResourceID: req.ResourceID}
result := collection.FindOne(ctx, filter)
if result != nil && result.Err() != nil {
openlog.Error("fail to get tombstone" + result.Err().Error())
diff --git a/eventbase/datasource/mongo/tombstone/tombstone_dao_test.go b/eventbase/datasource/mongo/tombstone/tombstone_dao_test.go
deleted file mode 100644
index dccb1da..0000000
--- a/eventbase/datasource/mongo/tombstone/tombstone_dao_test.go
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package tombstone_test
-
-import (
- "context"
- "testing"
- "time"
-
- "github.com/go-chassis/cari/db"
- "github.com/go-chassis/cari/sync"
- "github.com/stretchr/testify/assert"
-
- "github.com/apache/servicecomb-service-center/eventbase/datasource"
- "github.com/apache/servicecomb-service-center/eventbase/datasource/mongo"
- "github.com/apache/servicecomb-service-center/eventbase/request"
- "github.com/apache/servicecomb-service-center/eventbase/test"
-)
-
-var ds datasource.DataSource
-
-func init() {
- cfg := &db.Config{
- Kind: test.Mongo,
- URI: test.MongoURI,
- Timeout: 10 * time.Second,
- }
- ds, _ = mongo.NewDatasource(cfg)
-}
-
-func TestTombstone(t *testing.T) {
- var (
- tombstoneOne = sync.Tombstone{
- ResourceID: "app/test",
- ResourceType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171566,
- }
- tombstoneTwo = sync.Tombstone{
- ResourceID: "property/test",
- ResourceType: "config",
- Domain: "default",
- Project: "default",
- Timestamp: 1638171567,
- }
- )
-
- t.Run("create tombstone", func(t *testing.T) {
- t.Run("create two tombstone should pass", func(t *testing.T) {
- tombstone, err := ds.TombstoneDao().Create(context.Background(), &tombstoneOne)
- assert.NoError(t, err)
- assert.NotNil(t, tombstone)
- tombstone, err = ds.TombstoneDao().Create(context.Background(), &tombstoneTwo)
- assert.NoError(t, err)
- assert.NotNil(t, tombstone)
- })
- })
-
- t.Run("get tombstone", func(t *testing.T) {
- t.Run("get one tombstone should pass", func(t *testing.T) {
- req := request.GetTombstoneRequest{
- Domain: tombstoneOne.Domain,
- Project: tombstoneOne.Project,
- ResourceType: tombstoneOne.ResourceType,
- ResourceID: tombstoneOne.ResourceID,
- }
- tombstone, err := ds.TombstoneDao().Get(context.Background(), &req)
- assert.NoError(t, err)
- assert.Equal(t, tombstone.Timestamp, tombstoneOne.Timestamp)
- })
- })
-
- t.Run("list tombstone", func(t *testing.T) {
- t.Run("list tombstone with ResourceType and BeforeTimestamp should pass", func(t *testing.T) {
- opts := []datasource.TombstoneFindOption{
- datasource.WithTombstoneDomain("default"),
- datasource.WithTombstoneProject("default"),
- datasource.WithResourceType(tombstoneOne.ResourceType),
- datasource.WithBeforeTimestamp(1638171600),
- }
- tombstones, err := ds.TombstoneDao().List(context.Background(), opts...)
- assert.NoError(t, err)
- assert.Equal(t, 2, len(tombstones))
- assert.Equal(t, tombstones[0].Timestamp, tombstoneOne.Timestamp)
- assert.Equal(t, tombstones[1].Timestamp, tombstoneTwo.Timestamp)
- })
- })
-
- t.Run("delete tombstone", func(t *testing.T) {
- t.Run("delete two tombstone should pass", func(t *testing.T) {
- err := ds.TombstoneDao().Delete(context.Background(), []*sync.Tombstone{&tombstoneOne, &tombstoneTwo}...)
- assert.NoError(t, err)
- })
- })
-
-}
diff --git a/eventbase/datasource/options.go b/eventbase/datasource/options.go
index 6c13236..1aee3e7 100644
--- a/eventbase/datasource/options.go
+++ b/eventbase/datasource/options.go
@@ -18,11 +18,11 @@
package datasource
type TaskFindOptions struct {
- Domain string
- Project string
- Action string
- Status string
- DataType string
+ Domain string
+ Project string
+ Action string
+ Status string
+ ResourceType string
}
type TombstoneFindOptions struct {
@@ -75,7 +75,7 @@ func WithStatus(status string) TaskFindOption {
// WithDataType find task with dataType
func WithDataType(dataType string) TaskFindOption {
return func(options *TaskFindOptions) {
- options.DataType = dataType
+ options.ResourceType = dataType
}
}
diff --git a/eventbase/datasource/tlsutil/tlsutil_test.go b/eventbase/datasource/tlsutil/tlsutil_test.go
deleted file mode 100644
index fd99c05..0000000
--- a/eventbase/datasource/tlsutil/tlsutil_test.go
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package tlsutil_test
-
-import (
- "testing"
-
- "github.com/go-chassis/cari/db"
- "github.com/go-chassis/go-archaius"
- "github.com/go-chassis/go-chassis/v2/security/cipher"
- _ "github.com/go-chassis/go-chassis/v2/security/cipher/plugins/plain"
- "github.com/stretchr/testify/assert"
-
- "github.com/apache/servicecomb-service-center/eventbase/datasource/tlsutil"
-)
-
-const sslRoot = "./../../../examples/service_center/ssl/"
-
-func init() {
- err := archaius.Init()
- if err != nil {
- panic(err)
- }
- err = cipher.Init()
- if err != nil {
- panic(err)
- }
-}
-
-func TestConfig(t *testing.T) {
- t.Run("normal scene, should return ok", func(t *testing.T) {
- cfg, err := tlsutil.Config(&db.Config{
- RootCA: sslRoot + "trust.cer",
- CertFile: sslRoot + "server.cer",
- KeyFile: sslRoot + "server_key.pem",
- CertPwdFile: sslRoot + "cert_pwd",
- VerifyPeer: false,
- })
- assert.NoError(t, err)
- assert.NotNil(t, cfg)
- })
- t.Run("without ca file, should return false", func(t *testing.T) {
- cfg, err := tlsutil.Config(&db.Config{})
- assert.ErrorIs(t, tlsutil.ErrRootCAMissing, err)
- assert.Nil(t, cfg)
- })
- t.Run("set not exist pwd file, should return false", func(t *testing.T) {
- cfg, err := tlsutil.Config(&db.Config{
- RootCA: sslRoot + "trust.cer",
- CertFile: sslRoot + "server.cer",
- KeyFile: sslRoot + "server_key.pem",
- CertPwdFile: sslRoot + "xxx",
- VerifyPeer: false,
- })
- assert.Error(t, err)
- assert.Nil(t, cfg)
- })
-}
diff --git a/eventbase/datasource/tombstone.go b/eventbase/datasource/tombstone.go
index ee1e924..6afa856 100644
--- a/eventbase/datasource/tombstone.go
+++ b/eventbase/datasource/tombstone.go
@@ -22,12 +22,12 @@ import (
"github.com/go-chassis/cari/sync"
- "github.com/apache/servicecomb-service-center/eventbase/request"
+ "github.com/apache/servicecomb-service-center/eventbase/model"
)
// TombstoneDao provide api of Tombstone entity
type TombstoneDao interface {
- Get(ctx context.Context, req *request.GetTombstoneRequest) (*sync.Tombstone, error)
+ Get(ctx context.Context, req *model.GetTombstoneRequest) (*sync.Tombstone, error)
// Create func is used for ut
Create(ctx context.Context, tombstone *sync.Tombstone) (*sync.Tombstone, error)
Delete(ctx context.Context, tombstones ...*sync.Tombstone) error
diff --git a/eventbase/go.mod b/eventbase/go.mod
index 4a659fe..1604c3d 100644
--- a/eventbase/go.mod
+++ b/eventbase/go.mod
@@ -1,7 +1,7 @@
module github.com/apache/servicecomb-service-center/eventbase
require (
- github.com/go-chassis/cari v0.5.1-0.20211208092532-78a52aa9d52e
+ github.com/go-chassis/cari v0.5.1-0.20211227133501-53aa20cf7a44
github.com/go-chassis/foundation v0.4.0
github.com/go-chassis/go-archaius v1.5.1
github.com/go-chassis/go-chassis/v2 v2.3.0
@@ -25,6 +25,7 @@ require (
github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect
github.com/fsnotify/fsnotify v1.4.7 // indirect
github.com/go-stack/stack v1.8.0 // indirect
+ github.com/gofrs/uuid v4.0.0+incompatible // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/snappy v0.0.1 // indirect
diff --git a/eventbase/go.sum b/eventbase/go.sum
index 4ed735a..baec718 100644
--- a/eventbase/go.sum
+++ b/eventbase/go.sum
@@ -112,8 +112,8 @@ github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/
github.com/go-chassis/cari v0.0.0-20201210041921-7b6fbef2df11/go.mod h1:MgtsEI0AM4Ush6Lyw27z9Gk4nQ/8GWTSXrFzupawWDM=
github.com/go-chassis/cari v0.4.0/go.mod h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
github.com/go-chassis/cari v0.5.0/go.mod h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
-github.com/go-chassis/cari v0.5.1-0.20211208092532-78a52aa9d52e h1:6z88U255Sm/Ds10uT7ZqYomKLanDzTWxseDBITONFhk=
-github.com/go-chassis/cari v0.5.1-0.20211208092532-78a52aa9d52e/go.mod h1:av/19fqwEP4eOC8unL/z67AAbFDwXUCko6SKa4Avrd8=
+github.com/go-chassis/cari v0.5.1-0.20211227133501-53aa20cf7a44 h1:2JThhCkuZ5mneXFy0qRvKS7HG1/omq+Hc6I4yNhOZkI=
+github.com/go-chassis/cari v0.5.1-0.20211227133501-53aa20cf7a44/go.mod h1:HG0Olv4sy/4e/3e9S0pofO0pzchaDjJ0hMweyFU7d5Q=
github.com/go-chassis/foundation v0.2.2-0.20201210043510-9f6d3de40234/go.mod h1:2PjwqpVwYEVaAldl5A58a08viH8p27pNeYaiE3ZxOBA=
github.com/go-chassis/foundation v0.2.2/go.mod h1:2PjwqpVwYEVaAldl5A58a08viH8p27pNeYaiE3ZxOBA=
github.com/go-chassis/foundation v0.3.0/go.mod h1:2PjwqpVwYEVaAldl5A58a08viH8p27pNeYaiE3ZxOBA=
@@ -174,6 +174,8 @@ github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGt
github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
+github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
diff --git a/eventbase/request/tombstone_request.go b/eventbase/model/request.go
similarity index 87%
rename from eventbase/request/tombstone_request.go
rename to eventbase/model/request.go
index 63d1cb0..5f2b368 100644
--- a/eventbase/request/tombstone_request.go
+++ b/eventbase/model/request.go
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package request
+package model
// GetTombstoneRequest contains tombstone get request params
type GetTombstoneRequest struct {
@@ -29,9 +29,9 @@ type GetTombstoneRequest struct {
type ListTaskRequest struct {
Domain string `json:"domain,omitempty" yaml:"domain,omitempty"`
Project string `json:"project,omitempty" yaml:"project,omitempty"`
- TaskAction string `json:"task_action,omitempty" yaml:"task_action,omitempty"`
- TaskStatus string `json:"task_status,omitempty" yaml:"task_status,omitempty"`
- TaskDataType string `json:"task_data_type,omitempty" yaml:"task_data_type,omitempty"`
+ Action string `json:"action,omitempty" yaml:"action,omitempty"`
+ Status string `json:"status,omitempty" yaml:"status,omitempty"`
+ ResourceType string `json:"resource_type,omitempty" yaml:"resource_type,omitempty"`
}
// ListTombstoneRequest contains tombstone list request params
@@ -40,4 +40,4 @@ type ListTombstoneRequest struct {
Project string `json:"project,omitempty" yaml:"project,omitempty"`
ResourceType string `json:"resource_type,omitempty" yaml:"resource_type,omitempty"`
BeforeTimestamp int64 `json:"before_timestamp,omitempty" yaml:"before_timestamp,omitempty"`
-}
\ No newline at end of file
+}
diff --git a/eventbase/service/task/task_svc.go b/eventbase/service/task/task_svc.go
index d35bfbf..ee5b436 100644
--- a/eventbase/service/task/task_svc.go
+++ b/eventbase/service/task/task_svc.go
@@ -23,7 +23,7 @@ import (
"github.com/go-chassis/cari/sync"
"github.com/apache/servicecomb-service-center/eventbase/datasource"
- "github.com/apache/servicecomb-service-center/eventbase/request"
+ "github.com/apache/servicecomb-service-center/eventbase/model"
)
func Delete(ctx context.Context, tasks ...*sync.Task) error {
@@ -34,13 +34,13 @@ func Update(ctx context.Context, task *sync.Task) error {
return datasource.GetTaskDao().Update(ctx, task)
}
-func List(ctx context.Context, request *request.ListTaskRequest) ([]*sync.Task, error) {
+func List(ctx context.Context, request *model.ListTaskRequest) ([]*sync.Task, error) {
opts := []datasource.TaskFindOption{
datasource.WithDomain(request.Domain),
datasource.WithProject(request.Project),
- datasource.WithAction(request.TaskAction),
- datasource.WithDataType(request.TaskDataType),
- datasource.WithStatus(request.TaskStatus),
+ datasource.WithAction(request.Action),
+ datasource.WithDataType(request.ResourceType),
+ datasource.WithStatus(request.Status),
}
tasks, err := datasource.GetTaskDao().List(ctx, opts...)
if err != nil {
diff --git a/eventbase/service/task/task_svc_test.go b/eventbase/service/task/task_svc_test.go
new file mode 100644
index 0000000..304741e
--- /dev/null
+++ b/eventbase/service/task/task_svc_test.go
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package task_test
+
+import (
+ "context"
+ "testing"
+
+ "github.com/go-chassis/cari/discovery"
+ "github.com/go-chassis/cari/sync"
+ "github.com/stretchr/testify/assert"
+
+ "github.com/apache/servicecomb-service-center/eventbase/datasource"
+ "github.com/apache/servicecomb-service-center/eventbase/model"
+ "github.com/apache/servicecomb-service-center/eventbase/service/task"
+ "github.com/apache/servicecomb-service-center/eventbase/test"
+)
+
+func init() {
+ err := datasource.Init(test.DbCfg)
+ if err != nil {
+ panic(err)
+ }
+}
+
+func TestTaskService(t *testing.T) {
+ taskOne, _ := sync.NewTask("task", "task", sync.CreateAction, "service",
+ discovery.MicroService{
+ ServiceId: "123",
+ AppId: "appId1",
+ ServiceName: "svc1",
+ Version: "1.0",
+ })
+ taskTwo, _ := sync.NewTask("task", "task", sync.UpdateAction, "service",
+ discovery.MicroService{
+ ServiceId: "456",
+ AppId: "appId2",
+ ServiceName: "svc2",
+ Version: "1.0",
+ })
+ taskThree, _ := sync.NewTask("task", "task", sync.DeleteAction, "service",
+ discovery.MicroService{
+ ServiceId: "789",
+ AppId: "appId3",
+ ServiceName: "svc3",
+ Version: "1.0",
+ })
+ t.Run("to create three tasks for next delete update and list operations, should pass", func(t *testing.T) {
+ _, err := datasource.GetDataSource().TaskDao().Create(context.Background(), taskOne)
+ assert.Nil(t, err)
+ _, err = datasource.GetDataSource().TaskDao().Create(context.Background(), taskTwo)
+ assert.Nil(t, err)
+ _, err = datasource.GetDataSource().TaskDao().Create(context.Background(), taskThree)
+ assert.Nil(t, err)
+ })
+
+ t.Run("list task service", func(t *testing.T) {
+ t.Run("list task with default domain and default project should pass", func(t *testing.T) {
+ listReq := model.ListTaskRequest{
+ Domain: "task",
+ Project: "task",
+ }
+ tasks, err := task.List(context.Background(), &listReq)
+ assert.Nil(t, err)
+ assert.Equal(t, 3, len(tasks))
+ })
+ })
+
+ t.Run("update task service", func(t *testing.T) {
+ t.Run("set the status of the taskOne to done should pass", func(t *testing.T) {
+ taskOne.Status = sync.DoneStatus
+ err := task.Update(context.Background(), taskOne)
+ assert.Nil(t, err)
+ listReq := model.ListTaskRequest{
+ Domain: taskOne.Domain,
+ Project: taskOne.Project,
+ Action: taskOne.Action,
+ ResourceType: taskOne.ResourceType,
+ Status: taskOne.Status,
+ }
+ tasks, err := task.List(context.Background(), &listReq)
+ assert.Nil(t, err)
+ assert.Equal(t, 1, len(tasks))
+ })
+ })
+
+ t.Run("delete task service", func(t *testing.T) {
+ t.Run("delete all tasks in default domain and default project should pass", func(t *testing.T) {
+ listReq := model.ListTaskRequest{
+ Domain: "task",
+ Project: "task",
+ }
+ tasks, err := task.List(context.Background(), &listReq)
+ assert.Nil(t, err)
+ assert.Equal(t, 3, len(tasks))
+ err = task.Delete(context.Background(), tasks...)
+ assert.Nil(t, err)
+ dTasks, err := task.List(context.Background(), &listReq)
+ assert.Nil(t, err)
+ assert.Equal(t, 0, len(dTasks))
+ })
+ })
+}
diff --git a/eventbase/service/tombstone/tombstone_svc.go b/eventbase/service/tombstone/tombstone_svc.go
index 17e7bbb..dfb64e4 100644
--- a/eventbase/service/tombstone/tombstone_svc.go
+++ b/eventbase/service/tombstone/tombstone_svc.go
@@ -23,10 +23,10 @@ import (
"github.com/go-chassis/cari/sync"
"github.com/apache/servicecomb-service-center/eventbase/datasource"
- "github.com/apache/servicecomb-service-center/eventbase/request"
+ "github.com/apache/servicecomb-service-center/eventbase/model"
)
-func Get(ctx context.Context, req *request.GetTombstoneRequest) (*sync.Tombstone, error) {
+func Get(ctx context.Context, req *model.GetTombstoneRequest) (*sync.Tombstone, error) {
return datasource.GetTombstoneDao().Get(ctx, req)
}
@@ -34,7 +34,7 @@ func Delete(ctx context.Context, tombstones ...*sync.Tombstone) error {
return datasource.GetTombstoneDao().Delete(ctx, tombstones...)
}
-func List(ctx context.Context, request *request.ListTombstoneRequest) ([]*sync.Tombstone, error) {
+func List(ctx context.Context, request *model.ListTombstoneRequest) ([]*sync.Tombstone, error) {
opts := []datasource.TombstoneFindOption{
datasource.WithTombstoneDomain(request.Domain),
datasource.WithTombstoneProject(request.Project),
diff --git a/eventbase/service/tombstone/tombstone_svc_test.go b/eventbase/service/tombstone/tombstone_svc_test.go
new file mode 100644
index 0000000..1330104
--- /dev/null
+++ b/eventbase/service/tombstone/tombstone_svc_test.go
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tombstone_test
+
+import (
+ "context"
+ "testing"
+
+ "github.com/go-chassis/cari/sync"
+ "github.com/stretchr/testify/assert"
+
+ "github.com/apache/servicecomb-service-center/eventbase/datasource"
+ "github.com/apache/servicecomb-service-center/eventbase/model"
+ "github.com/apache/servicecomb-service-center/eventbase/service/tombstone"
+ "github.com/apache/servicecomb-service-center/eventbase/test"
+)
+
+func init() {
+ err := datasource.Init(test.DbCfg)
+ if err != nil {
+ panic(err)
+ }
+}
+
+func TestTombstoneService(t *testing.T) {
+ tombstoneOne := sync.NewTombstone("tombstone", "tombstone", "config", "111111")
+ tombstoneTwo := sync.NewTombstone("tombstone", "tombstone", "config", "222222")
+ tombstoneThree := sync.NewTombstone("tombstone", "tombstone", "config", "333333")
+
+ t.Run("to create three tasks for next get delete and list operations, should pass", func(t *testing.T) {
+ _, err := datasource.GetDataSource().TombstoneDao().Create(context.Background(), tombstoneOne)
+ assert.Nil(t, err)
+ _, err = datasource.GetDataSource().TombstoneDao().Create(context.Background(), tombstoneTwo)
+ assert.Nil(t, err)
+ _, err = datasource.GetDataSource().TombstoneDao().Create(context.Background(), tombstoneThree)
+ assert.Nil(t, err)
+ })
+
+ t.Run("get tombstone service", func(t *testing.T) {
+ t.Run("get tombstoneOne should pass", func(t *testing.T) {
+ getReq := model.GetTombstoneRequest{
+ Project: tombstoneOne.Project,
+ Domain: tombstoneOne.Domain,
+ ResourceType: tombstoneOne.ResourceType,
+ ResourceID: tombstoneOne.ResourceID,
+ }
+ tmpTombstone, err := tombstone.Get(context.Background(), &getReq)
+ assert.Nil(t, err)
+ assert.Equal(t, tmpTombstone.ResourceID, tmpTombstone.ResourceID)
+ assert.Equal(t, tmpTombstone.ResourceType, tmpTombstone.ResourceType)
+ assert.Equal(t, tmpTombstone.Domain, tmpTombstone.Domain)
+ assert.Equal(t, tmpTombstone.Project, tmpTombstone.Project)
+ })
+ })
+
+ t.Run("list tombstone service", func(t *testing.T) {
+ t.Run("list all tombstones in default domain and default project should pass", func(t *testing.T) {
+ listReq := model.ListTombstoneRequest{
+ Domain: "tombstone",
+ Project: "tombstone",
+ }
+ tombstones, err := tombstone.List(context.Background(), &listReq)
+ assert.Nil(t, err)
+ assert.Equal(t, 3, len(tombstones))
+ })
+ })
+
+ t.Run("delete tombstone service", func(t *testing.T) {
+ t.Run("delete all tombstones in default domain and default project should pass", func(t *testing.T) {
+ listReq := model.ListTombstoneRequest{
+ Domain: "tombstone",
+ Project: "tombstone",
+ }
+ tombstones, err := tombstone.List(context.Background(), &listReq)
+ assert.Nil(t, err)
+ assert.Equal(t, 3, len(tombstones))
+ err = tombstone.Delete(context.Background(), tombstones...)
+ assert.Nil(t, err)
+ dTombstones, err := tombstone.List(context.Background(), &listReq)
+ assert.Nil(t, err)
+ assert.Equal(t, 0, len(dTombstones))
+ })
+ })
+
+}
diff --git a/eventbase/test/test.go b/eventbase/test/test.go
index c71d5ad..71f74a9 100644
--- a/eventbase/test/test.go
+++ b/eventbase/test/test.go
@@ -1,8 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package test
+import (
+ "time"
+
+ "github.com/go-chassis/cari/db"
+ "github.com/go-chassis/go-archaius"
+
+ _ "github.com/apache/servicecomb-service-center/eventbase/bootstrap"
+)
+
var (
- Etcd = "etcd"
- EtcdURI = "http://127.0.0.1:2379"
- Mongo = "mongo"
- MongoURI = "mongodb://127.0.0.1:27017"
+ Etcd = "etcd"
+ EtcdURI = "http://127.0.0.1:2379"
+ Mongo = "mongo"
+ MongoURI = "mongodb://127.0.0.1:27017"
+ DefaultTestDB = "etcd"
+ DefaultTestDBURI = "http://127.0.0.1:2379"
)
+
+var DbCfg = db.Config{}
+
+func init() {
+ err := archaius.Init(archaius.WithMemorySource(), archaius.WithENVSource())
+ if err != nil {
+ panic(err)
+ }
+ mode, ok := archaius.Get("TEST_DB_MODE").(string)
+ if ok {
+ DefaultTestDB = mode
+ }
+ uri, ok := archaius.Get("TEST_DB_URI").(string)
+ if ok {
+ DefaultTestDBURI = uri
+ }
+ DbCfg.Kind = DefaultTestDB
+ DbCfg.URI = DefaultTestDBURI
+ DbCfg.Timeout = 10 * time.Second
+}
diff --git a/scripts/ut_test_in_docker.sh b/scripts/ut_test_in_docker.sh
index cf3ef07..2337cb9 100644
--- a/scripts/ut_test_in_docker.sh
+++ b/scripts/ut_test_in_docker.sh
@@ -67,13 +67,11 @@ if [ ${db_name} == "etcd" ];then
[ $? == 0 ] && ut_for_dir pkg
[ $? == 0 ] && ut_for_dir server
[ $? == 0 ] && ut_for_dir scctl
- [ $? == 0 ] && ut_for_dir eventbase/datasource/etcd
elif [ ${db_name} == "mongo" ];then
export TEST_MODE=mongo
[ $? == 0 ] && ut_for_file datasource
[ $? == 0 ] && ut_for_dir datasource/mongo
[ $? == 0 ] && ut_for_dir server
- [ $? == 0 ] && ut_for_dir eventbase/datasource/mongo
else
echo "${db_name} non-existent"
exit 1
@@ -92,4 +90,4 @@ fi
echo "${green}Service-Center finished${reset}"
echo "${green}Cleaning up the $db_name docker container${reset}"
-docker rm -f $db_name
\ No newline at end of file
+docker rm -f $db_name