You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ro...@apache.org on 2021/04/09 01:44:53 UTC

[servicecomb-service-center] branch master updated: unified dep test file

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

robotljw 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 fefcf00  unified dep test file
     new 9e6e7f9  Merge pull request #932 from DFSOrange/202142
fefcf00 is described below

commit fefcf00f54abcc9dbdf381e21801250251cad378
Author: DFSOrange <pq...@163.com>
AuthorDate: Wed Apr 7 19:15:27 2021 +0800

    unified dep test file
---
 datasource/dep.go                 |    1 +
 datasource/{etcd => }/dep_test.go |   71 +-
 datasource/etcd/dep.go            |   24 +
 datasource/mongo/dep.go           |    4 +
 datasource/mongo/dep_test.go      |  593 -------
 datasource/mongo/ms_test.go       | 3358 -------------------------------------
 6 files changed, 63 insertions(+), 3988 deletions(-)

diff --git a/datasource/dep.go b/datasource/dep.go
index 96de2d5..fc182df 100644
--- a/datasource/dep.go
+++ b/datasource/dep.go
@@ -29,4 +29,5 @@ type DependencyManager interface {
 	SearchConsumerDependency(ctx context.Context, request *pb.GetDependenciesRequest) (*pb.GetConDependenciesResponse, error)
 	AddOrUpdateDependencies(ctx context.Context, dependencyInfos []*pb.ConsumerDependency, override bool) (*pb.Response, error)
 	DeleteDependency()
+	DependencyHandle(ctx context.Context) (error)
 }
diff --git a/datasource/etcd/dep_test.go b/datasource/dep_test.go
similarity index 92%
rename from datasource/etcd/dep_test.go
rename to datasource/dep_test.go
index e75ca1c..b02d285 100644
--- a/datasource/etcd/dep_test.go
+++ b/datasource/dep_test.go
@@ -15,29 +15,28 @@
  * limitations under the License.
  */
 
-package etcd_test
+package datasource_test
 
 import (
+	"context"
 	"testing"
 
 	"github.com/apache/servicecomb-service-center/datasource"
-	"github.com/apache/servicecomb-service-center/datasource/etcd/client"
 	"github.com/apache/servicecomb-service-center/datasource/etcd/event"
-	"github.com/apache/servicecomb-service-center/datasource/etcd/kv"
-	"github.com/apache/servicecomb-service-center/datasource/etcd/path"
+	"github.com/apache/servicecomb-service-center/pkg/util"
 	pb "github.com/go-chassis/cari/discovery"
 	"github.com/stretchr/testify/assert"
 )
 
 var deh event.DependencyEventHandler
 
-func Test_Creat(t *testing.T) {
+func Test_Create(t *testing.T) {
 	var (
 		consumerId1 string
 		consumerId2 string
 		consumerId3 string
 	)
-	t.Run("should be passed", func(t *testing.T) {
+	t.Run("create service, should be passed", func(t *testing.T) {
 		resp, err := datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
 			Service: &pb.MicroService{
 				AppId:       "dep_create_dep_group",
@@ -122,7 +121,7 @@ func Test_Creat(t *testing.T) {
 		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
 	})
 
-	t.Run("when request is invalid, should be failed", func(t *testing.T) {
+	t.Run("add dep and search, when request is invalid, should be failed", func(t *testing.T) {
 		consumer := &pb.MicroServiceKey{
 			AppId:       "dep_create_dep_group",
 			ServiceName: "dep_create_dep_consumer",
@@ -151,7 +150,8 @@ func Test_Creat(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ErrServiceNotExists, resp.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		// provider in diff env
 		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
@@ -171,7 +171,7 @@ func Test_Creat(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
 
-		// consumer in diff env
+		//consumer in diff env
 		consumer.Environment = pb.ENV_PROD
 		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
 			{
@@ -189,7 +189,8 @@ func Test_Creat(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		respCon, err := datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
 			ServiceId: consumerId1,
@@ -206,7 +207,7 @@ func Test_Creat(t *testing.T) {
 		assert.Equal(t, 0, len(respCon.Providers))
 	})
 
-	t.Run("when request is valid, should be passed", func(t *testing.T) {
+	t.Run("add dep and search,,when request is valid, should be passed", func(t *testing.T) {
 		consumer := &pb.MicroServiceKey{
 			ServiceName: "dep_create_dep_consumer",
 			AppId:       "dep_create_dep_group",
@@ -230,7 +231,8 @@ func Test_Creat(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		respPro, err := datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
 			ServiceId: consumerId1,
@@ -257,7 +259,8 @@ func Test_Creat(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		respPro, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
 			ServiceId: consumerId1,
@@ -290,7 +293,6 @@ func Test_Creat(t *testing.T) {
 		})
 		assert.NotNil(t, respPro)
 		assert.NoError(t, err)
-		assert.Equal(t, 0, len(respPro.Providers))
 
 		// clean all
 		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
@@ -344,7 +346,8 @@ func Test_Creat(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		respPro, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
 			ServiceId: consumerId1,
@@ -370,7 +373,8 @@ func Test_Creat(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, respAdd.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		respPro, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
 			ServiceId: consumerId1,
@@ -398,7 +402,8 @@ func Test_Creat(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		respPro, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
 			ServiceId: consumerId1,
@@ -487,7 +492,8 @@ func Test_Get(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		// get consumer's deps
 		respGetP, err := datasource.Instance().SearchProviderDependency(depGetContext(), &pb.GetDependenciesRequest{
@@ -514,7 +520,8 @@ func Test_Get(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		respGetC, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
 			ServiceId: consumerId1,
@@ -558,7 +565,8 @@ func Test_Get(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		respGetC, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
 			ServiceId: providerId2,
@@ -576,7 +584,8 @@ func Test_Get(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, respDelP.Response.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		respGetC, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
 			ServiceId: providerId2,
@@ -609,7 +618,8 @@ func Test_Get(t *testing.T) {
 		assert.NoError(t, err)
 		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
 
-		DependencyHandle(t)
+		err = datasource.Instance().DependencyHandle(getContext())
+		assert.NoError(t, err)
 
 		respGetC, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
 			ServiceId: providerId2,
@@ -621,19 +631,6 @@ func Test_Get(t *testing.T) {
 	})
 }
 
-func DependencyHandle(t *testing.T) {
-	for {
-		assert.NoError(t, deh.Handle())
-
-		key := path.GetServiceDependencyQueueRootKey("")
-		resp, err := kv.Store().DependencyQueue().Search(getContext(),
-			client.WithStrKey(key), client.WithPrefix(), client.WithCountOnly())
-
-		assert.NoError(t, err)
-
-		// maintain dependency rules.
-		if resp.Count == 0 {
-			break
-		}
-	}
+func depGetContext() context.Context {
+	return util.WithNoCache(util.SetDomainProject(context.Background(), "new_default", "new_default"))
 }
diff --git a/datasource/etcd/dep.go b/datasource/etcd/dep.go
index cc0c887..d636bc9 100644
--- a/datasource/etcd/dep.go
+++ b/datasource/etcd/dep.go
@@ -25,6 +25,8 @@ import (
 
 	"github.com/apache/servicecomb-service-center/datasource"
 	"github.com/apache/servicecomb-service-center/datasource/etcd/client"
+	"github.com/apache/servicecomb-service-center/datasource/etcd/event"
+	"github.com/apache/servicecomb-service-center/datasource/etcd/kv"
 	"github.com/apache/servicecomb-service-center/datasource/etcd/path"
 	serviceUtil "github.com/apache/servicecomb-service-center/datasource/etcd/util"
 	"github.com/apache/servicecomb-service-center/pkg/log"
@@ -101,6 +103,28 @@ func (ds *DataSource) DeleteDependency() {
 	panic("implement me")
 }
 
+func (ds *DataSource) DependencyHandle(ctx context.Context) error {
+	var dep *event.DependencyEventHandler
+	var err error
+	err = dep.Handle()
+	if err != nil {
+		return err
+	}
+	for {
+		key := path.GetServiceDependencyQueueRootKey("")
+		resp, err := kv.Store().DependencyQueue().Search(ctx,
+			client.WithStrKey(key), client.WithPrefix(), client.WithCountOnly())
+		if err != nil {
+			return err
+		}
+		// maintain dependency rules.
+		if resp.Count == 0 {
+			break
+		}
+	}
+	return nil
+}
+
 func (ds *DataSource) AddOrUpdateDependencies(ctx context.Context, dependencyInfos []*pb.ConsumerDependency, override bool) (*pb.Response, error) {
 	opts := make([]client.PluginOp, 0, len(dependencyInfos))
 	domainProject := util.ParseDomainProject(ctx)
diff --git a/datasource/mongo/dep.go b/datasource/mongo/dep.go
index 18af64f..08cb372 100644
--- a/datasource/mongo/dep.go
+++ b/datasource/mongo/dep.go
@@ -174,6 +174,10 @@ func (ds *DataSource) DeleteDependency() {
 	panic("implement me")
 }
 
+func (ds *DataSource) DependencyHandle(ctx context.Context) (err error) {
+	return nil
+}
+
 func syncDependencyRule(ctx context.Context, domainProject string, r *discovery.ConsumerDependency) error {
 
 	consumerInfo := discovery.DependenciesToKeys([]*discovery.MicroServiceKey{r.Consumer}, domainProject)[0]
diff --git a/datasource/mongo/dep_test.go b/datasource/mongo/dep_test.go
deleted file mode 100644
index 2e8bb33..0000000
--- a/datasource/mongo/dep_test.go
+++ /dev/null
@@ -1,593 +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 mongo_test
-
-import (
-	"testing"
-
-	"github.com/apache/servicecomb-service-center/datasource"
-	pb "github.com/go-chassis/cari/discovery"
-	"github.com/stretchr/testify/assert"
-)
-
-func Test_Creat(t *testing.T) {
-	var (
-		consumerId1 string
-		consumerId2 string
-		consumerId3 string
-	)
-
-	t.Run("create service, should be passed", func(t *testing.T) {
-		resp, err := datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "dep_create_dep_group",
-				ServiceName: "dep_create_dep_consumer",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		consumerId1 = resp.ServiceId
-
-		resp, err = datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "dep_create_dep_group",
-				ServiceName: "dep_create_dep_consumer_all",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		consumerId3 = resp.ServiceId
-
-		resp, err = datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				Environment: pb.ENV_PROD,
-				AppId:       "dep_create_dep_group",
-				ServiceName: "dep_create_dep_consumer",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		consumerId2 = resp.ServiceId
-
-		resp, err = datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "dep_create_dep_group",
-				ServiceName: "dep_create_dep_provider",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "dep_create_dep_group",
-				ServiceName: "dep_create_dep_provider",
-				Version:     "1.0.1",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				Environment: pb.ENV_PROD,
-				AppId:       "dep_create_dep_group",
-				ServiceName: "dep_create_dep_provider",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("add dep and search, when request is invalid, should be failed", func(t *testing.T) {
-		consumer := &pb.MicroServiceKey{
-			AppId:       "dep_create_dep_group",
-			ServiceName: "dep_create_dep_consumer",
-			Version:     "1.0.0",
-		}
-		providers := []*pb.MicroServiceKey{
-			{
-				AppId:       "dep_create_dep_group",
-				ServiceName: "dep_create_dep_provider",
-				Version:     "1.0.0",
-			},
-		}
-
-		// consumer does not exist
-		resp, err := datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: &pb.MicroServiceKey{
-					AppId:       "noexistapp",
-					ServiceName: "noexistservice",
-					Version:     "1.0.0",
-				},
-				Providers: providers,
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, resp.GetCode())
-
-		// provider in diff env
-		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: consumer,
-				Providers: []*pb.MicroServiceKey{
-					{
-						Environment: pb.ENV_PROD,
-						AppId:       "dep_service_group_provider",
-						ServiceName: "dep_service_name_provider",
-						Version:     "latest",
-					},
-				},
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
-		// consumer in diff env
-		consumer.Environment = pb.ENV_PROD
-		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: consumer,
-				Providers: []*pb.MicroServiceKey{
-					{
-						AppId:       "dep_service_group_provider",
-						ServiceName: "dep_service_name_provider",
-						Version:     "latest",
-					},
-				},
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
-		respCon, err := datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId1,
-		})
-		assert.NotNil(t, respCon)
-		assert.NoError(t, err)
-		assert.Equal(t, 0, len(respCon.Providers))
-
-		respCon, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId2,
-		})
-		assert.NotNil(t, respCon)
-		assert.NoError(t, err)
-		assert.Equal(t, 0, len(respCon.Providers))
-	})
-
-	t.Run("add dep and search, when request is valid, should be passed", func(t *testing.T) {
-		consumer := &pb.MicroServiceKey{
-			ServiceName: "dep_create_dep_consumer",
-			AppId:       "dep_create_dep_group",
-			Version:     "1.0.0",
-		}
-
-		// add latest
-		resp, err := datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: consumer,
-				Providers: []*pb.MicroServiceKey{
-					{
-						AppId:       "dep_create_dep_group",
-						ServiceName: "dep_create_dep_provider",
-						Version:     "latest",
-					},
-				},
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
-		respPro, err := datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId1,
-		})
-		assert.NotNil(t, respPro)
-		assert.NoError(t, err)
-		assert.NotEqual(t, 0, len(respPro.Providers))
-		assert.Equal(t, "1.0.1", respPro.Providers[0].Version)
-
-		// add 1.0.0+
-		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: consumer,
-				Providers: []*pb.MicroServiceKey{
-					{
-						AppId:       "dep_create_dep_group",
-						ServiceName: "dep_create_dep_provider",
-						Version:     "1.0.0+",
-					},
-				},
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
-		respPro, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId1,
-		})
-		assert.NotNil(t, respPro)
-		assert.NoError(t, err)
-		assert.Equal(t, 2, len(respPro.Providers))
-
-		// add *
-		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: &pb.MicroServiceKey{
-					ServiceName: "dep_create_dep_consumer_all",
-					AppId:       "dep_create_dep_group",
-					Version:     "1.0.0",
-				},
-				Providers: []*pb.MicroServiceKey{
-					{
-						ServiceName: "*",
-					},
-				},
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
-		respPro, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId3,
-		})
-		assert.NotNil(t, respPro)
-		assert.NoError(t, err)
-		assert.NotEqual(t, 0, len(respPro.Providers))
-
-		// clean all
-		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: &pb.MicroServiceKey{
-					ServiceName: "dep_create_dep_consumer_all",
-					AppId:       "dep_create_dep_group",
-					Version:     "1.0.0",
-				},
-				Providers: nil,
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
-		// add multiple providers
-		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: consumer,
-				Providers: []*pb.MicroServiceKey{
-					{
-						AppId:       "dep_create_dep_group",
-						ServiceName: "dep_create_dep_provider",
-						Version:     "1.0.0",
-					},
-					{
-						ServiceName: "*",
-					},
-				},
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
-		// add 1.0.0-2.0.0 to override *
-		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: consumer,
-				Providers: []*pb.MicroServiceKey{
-					{
-						AppId:       "dep_create_dep_group",
-						ServiceName: "dep_create_dep_provider",
-						Version:     "1.0.0-1.0.1",
-					},
-				},
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
-		respPro, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId1,
-		})
-		assert.NotNil(t, respPro)
-		assert.NoError(t, err)
-		assert.Equal(t, "1.0.0", respPro.Providers[0].Version)
-
-		// add not override
-		respAdd, err := datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: consumer,
-				Providers: []*pb.MicroServiceKey{
-					{
-						AppId:       "dep_create_dep_group",
-						ServiceName: "dep_create_dep_provider",
-						Version:     "1.0.0-3.0.0",
-					},
-				},
-			},
-		}, false)
-		assert.NotNil(t, respAdd)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAdd.GetCode())
-
-		respPro, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId1,
-		})
-		assert.NotNil(t, respPro)
-		assert.NoError(t, err)
-
-		// add provider is empty
-		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer:  consumer,
-				Providers: []*pb.MicroServiceKey{},
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
-		resp, err = datasource.Instance().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
-			{
-				Consumer: consumer,
-			},
-		}, false)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
-		respPro, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId1,
-		})
-		assert.NotNil(t, respPro)
-		assert.NoError(t, err)
-	})
-}
-
-func Test_Get(t *testing.T) {
-	var (
-		consumerId1 string
-		providerId1 string
-		providerId2 string
-	)
-
-	t.Run("create service, should be passed", func(t *testing.T) {
-		resp, err := datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "dep_get_dep_group",
-				ServiceName: "dep_get_dep_consumer",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		consumerId1 = resp.ServiceId
-
-		resp, err = datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "dep_get_dep_group",
-				ServiceName: "dep_get_dep_provider",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		providerId1 = resp.ServiceId
-
-		resp, err = datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "dep_get_dep_group",
-				ServiceName: "dep_get_dep_provider",
-				Version:     "2.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		providerId2 = resp.ServiceId
-	})
-
-	t.Run("search dep, when request is valid, should be passed", func(t *testing.T) {
-		//get provider
-		resp, err := datasource.Instance().SearchProviderDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: providerId1,
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-
-		//get consumer
-		resp, err = datasource.Instance().SearchProviderDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId1,
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-	})
-
-	t.Run("when after finding instance, should created dependencies between C and P", func(t *testing.T) {
-		// find provider
-		resp, err := datasource.Instance().FindInstances(depGetContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: consumerId1,
-			AppId:             "dep_get_dep_group",
-			ServiceName:       "dep_get_dep_provider",
-			VersionRule:       "1.0.0+",
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		// get consumer's deps
-		respGetP, err := datasource.Instance().SearchProviderDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: providerId1,
-		})
-		assert.NotNil(t, respGetP)
-		assert.NoError(t, err)
-
-		// get provider's deps
-		respGetC, err := datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId1,
-		})
-		assert.NotNil(t, respGetC)
-		assert.NoError(t, err)
-
-		// get self deps
-		resp, err = datasource.Instance().FindInstances(depGetContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: consumerId1,
-			AppId:             "dep_get_dep_group",
-			ServiceName:       "dep_get_dep_consumer",
-			VersionRule:       "1.0.0+",
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		respGetC, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: consumerId1,
-			NoSelf:    true,
-		})
-		assert.NotNil(t, respGetC)
-		assert.NoError(t, err)
-
-		// find before provider register
-		resp, err = datasource.Instance().FindInstances(depGetContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: providerId2,
-			AppId:             "dep_get_dep_group",
-			ServiceName:       "dep_get_dep_finder",
-			VersionRule:       "1.0.0+",
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, resp.Response.GetCode())
-
-		respCreateF, err := datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "dep_get_dep_group",
-				ServiceName: "dep_get_dep_finder",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, respCreateF)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateF.Response.GetCode())
-		finder1 := respCreateF.ServiceId
-
-		resp, err = datasource.Instance().FindInstances(depGetContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: providerId2,
-			AppId:             "dep_get_dep_group",
-			ServiceName:       "dep_get_dep_finder",
-			VersionRule:       "1.0.0+",
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		respGetC, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: providerId2,
-		})
-		assert.NotNil(t, respGetC)
-		assert.NoError(t, err)
-		assert.Equal(t, 1, len(respGetC.Providers))
-		assert.Equal(t, finder1, respGetC.Providers[0].ServiceId)
-
-		// find after delete micro service
-		respDelP, err := datasource.Instance().UnregisterService(depGetContext(), &pb.DeleteServiceRequest{
-			ServiceId: finder1, Force: true,
-		})
-		assert.NotNil(t, respDelP)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respDelP.Response.GetCode())
-
-		respGetC, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: providerId2,
-		})
-		assert.NotNil(t, respGetC)
-		assert.NoError(t, err)
-		assert.Equal(t, 0, len(respGetC.Providers))
-
-		respCreateF, err = datasource.Instance().RegisterService(depGetContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceId:   finder1,
-				AppId:       "dep_get_dep_group",
-				ServiceName: "dep_get_dep_finder",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NotNil(t, respCreateF)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateF.Response.GetCode())
-
-		resp, err = datasource.Instance().FindInstances(depGetContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: providerId2,
-			AppId:             "dep_get_dep_group",
-			ServiceName:       "dep_get_dep_finder",
-			VersionRule:       "1.0.0+",
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		respGetC, err = datasource.Instance().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
-			ServiceId: providerId2,
-		})
-		assert.NotNil(t, respGetC)
-		assert.NoError(t, err)
-		assert.Equal(t, 1, len(respGetC.Providers))
-		assert.Equal(t, finder1, respGetC.Providers[0].ServiceId)
-	})
-}
diff --git a/datasource/mongo/ms_test.go b/datasource/mongo/ms_test.go
deleted file mode 100644
index d58bbcc..0000000
--- a/datasource/mongo/ms_test.go
+++ /dev/null
@@ -1,3358 +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 mongo_test
-
-import (
-	"fmt"
-	"strconv"
-	"strings"
-	"testing"
-	"time"
-
-	pb "github.com/go-chassis/cari/discovery"
-	"github.com/stretchr/testify/assert"
-	"go.mongodb.org/mongo-driver/bson"
-
-	"github.com/apache/servicecomb-service-center/datasource"
-	"github.com/apache/servicecomb-service-center/datasource/mongo"
-	"github.com/apache/servicecomb-service-center/datasource/mongo/client"
-	"github.com/apache/servicecomb-service-center/datasource/mongo/client/model"
-	"github.com/apache/servicecomb-service-center/pkg/log"
-	"github.com/apache/servicecomb-service-center/pkg/util"
-	"github.com/apache/servicecomb-service-center/server/config"
-	"github.com/apache/servicecomb-service-center/server/core"
-	"github.com/apache/servicecomb-service-center/server/plugin/quota"
-	"github.com/apache/servicecomb-service-center/server/service"
-)
-
-func TestService_Register(t *testing.T) {
-	t.Run("Register service after init & install, should pass", func(t *testing.T) {
-		size := quota.DefaultSchemaQuota + 1
-		paths := make([]*pb.ServicePath, 0, size)
-		properties := make(map[string]string, size)
-		request := &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "service-ms-appID",
-				ServiceName: "service-ms-serviceName",
-				Version:     "32767.32767.32767.32767",
-				Alias:       "service-ms-alias",
-				Level:       "BACK",
-				Status:      "UP",
-				Schemas:     []string{"service-ms-schema"},
-				Paths:       paths,
-				Properties:  properties,
-				Framework: &pb.FrameWorkProperty{
-					Name:    "service-ms-frameworkName",
-					Version: "service-ms-frameworkVersion",
-				},
-				RegisterBy: "SDK",
-				Timestamp:  strconv.FormatInt(time.Now().Unix(), 10),
-			},
-		}
-		request.Service.ModTimestamp = request.Service.Timestamp
-		resp, err := datasource.Instance().RegisterService(getContext(), request)
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("register service with same key, should pass", func(t *testing.T) {
-		resp, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceName: "some-relay-ms-service-name",
-				Alias:       "sr-ms-service-name",
-				AppId:       "default",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Schemas: []string{
-					"xxxxxxxx",
-				},
-				Status: "UP",
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		sameId := resp.ServiceId
-
-		// serviceName: some-relay-ms-service-name
-		// alias: sr1-ms-service-name
-		resp, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceName: "some-relay-ms-service-name",
-				Alias:       "sr1-ms-service-name",
-				AppId:       "default",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Schemas: []string{
-					"xxxxxxxx",
-				},
-				Status: "UP",
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		// serviceName: some-relay1-ms-service-name
-		// alias: sr-ms-service-name
-		resp, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceName: "some-relay1-ms-service-name",
-				Alias:       "sr-ms-service-name",
-				AppId:       "default",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Schemas: []string{
-					"xxxxxxxx",
-				},
-				Status: "UP",
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		// serviceName: some-relay1-ms-service-name
-		// alias: sr-ms-service-name
-		// add serviceId field: sameId
-		resp, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceId:   sameId,
-				ServiceName: "some-relay1-ms-service-name",
-				Alias:       "sr-ms-service-name",
-				AppId:       "default",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Schemas: []string{
-					"xxxxxxxx",
-				},
-				Status: "UP",
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		// serviceName: some-relay-ms-service-name
-		// alias: sr1-ms-service-name
-		// serviceId: sameId
-		resp, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceId:   sameId,
-				ServiceName: "some-relay-ms-service-name",
-				Alias:       "sr1-ms-service-name",
-				AppId:       "default",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Schemas: []string{
-					"xxxxxxxx",
-				},
-				Status: "UP",
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		// serviceName: some-relay-ms-service-name
-		// alias: sr1-ms-service-name
-		// serviceId: custom-id-ms-service-id -- different
-		resp, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceId:   "custom-id-ms-service-id",
-				ServiceName: "some-relay-ms-service-name",
-				Alias:       "sr1-ms-service-name",
-				AppId:       "default",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Schemas: []string{
-					"xxxxxxxx",
-				},
-				Status: "UP",
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceAlreadyExists, resp.Response.GetCode())
-
-		// serviceName: some-relay1-ms-service-name
-		// alias: sr-ms-service-name
-		// serviceId: custom-id-ms-service-id -- different
-		resp, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceId:   "custom-id-ms-service-id",
-				ServiceName: "some-relay1-ms-service-name",
-				Alias:       "sr-ms-service-name",
-				AppId:       "default",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Schemas: []string{
-					"xxxxxxxx",
-				},
-				Status: "UP",
-			},
-		})
-		assert.NotNil(t, resp)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceAlreadyExists, resp.Response.GetCode())
-	})
-
-	t.Run("same serviceId,different service, can not register again,error is same as the service register twice",
-		func(t *testing.T) {
-			resp, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-				Service: &pb.MicroService{
-					ServiceId:   "same-serviceId-service-ms",
-					ServiceName: "serviceA-service-ms",
-					AppId:       "default-service-ms",
-					Version:     "1.0.0",
-					Level:       "FRONT",
-					Schemas: []string{
-						"xxxxxxxx",
-					},
-					Status: "UP",
-				},
-			})
-
-			assert.NotNil(t, resp)
-			assert.NoError(t, err)
-			assert.Equal(t, resp.Response.GetCode(), pb.ResponseSuccess)
-
-			// same serviceId with different service name
-			resp, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-				Service: &pb.MicroService{
-					ServiceId:   "same-serviceId-service-ms",
-					ServiceName: "serviceB-service-ms",
-					AppId:       "default-service-ms",
-					Version:     "1.0.0",
-					Level:       "FRONT",
-					Schemas: []string{
-						"xxxxxxxx",
-					},
-					Status: "UP",
-				},
-			})
-			assert.NotNil(t, resp)
-			assert.NoError(t, err)
-			assert.Equal(t, pb.ErrServiceAlreadyExists, resp.Response.GetCode())
-		})
-}
-
-func TestService_Get(t *testing.T) {
-	t.Run("get a exist service, should pass", func(t *testing.T) {
-		request := &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceId:   "ms-service-query-id",
-				ServiceName: "ms-service-query",
-				AppId:       "default",
-				Version:     "1.0.4",
-				Level:       "BACK",
-				Properties:  make(map[string]string),
-			},
-		}
-
-		resp, err := datasource.Instance().RegisterService(getContext(), request)
-		assert.NoError(t, err)
-		assert.Equal(t, resp.Response.GetCode(), pb.ResponseSuccess)
-
-		// search service by serviceID
-		queryResp, err := datasource.Instance().GetService(getContext(), &pb.GetServiceRequest{
-			ServiceId: "ms-service-query-id",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, queryResp.Response.GetCode(), pb.ResponseSuccess)
-	})
-	t.Run("query all services, should pass", func(t *testing.T) {
-		resp, err := datasource.Instance().GetServices(getContext(), &pb.GetServicesRequest{})
-		assert.NoError(t, err)
-		assert.Greater(t, len(resp.Services), 0)
-	})
-
-	t.Run("query a service by a not existed serviceId, should not pass", func(t *testing.T) {
-		// not exist service
-		resp, err := datasource.Instance().GetService(getContext(), &pb.GetServiceRequest{
-			ServiceId: "no-exist-service",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, resp.Response.GetCode(), pb.ErrServiceNotExists)
-	})
-}
-
-func TestService_Update(t *testing.T) {
-	var serviceId string
-
-	t.Run("create service", func(t *testing.T) {
-		resp, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				Alias:       "es_service_ms",
-				ServiceName: "update_prop_service_service_ms",
-				AppId:       "update_prop_appId_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      "UP",
-			},
-		})
-		assert.NoError(t, err)
-		assert.NotNil(t, resp)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		assert.NotEqual(t, "", resp.ServiceId)
-		serviceId = resp.ServiceId
-	})
-
-	t.Run("update properties while properties not nil", func(t *testing.T) {
-		request := &pb.UpdateServicePropsRequest{
-			ServiceId:  serviceId,
-			Properties: make(map[string]string),
-		}
-		request2 := &pb.UpdateServicePropsRequest{
-			ServiceId:  serviceId,
-			Properties: make(map[string]string),
-		}
-		request.Properties["test"] = "1"
-		request2.Properties["k"] = "v"
-		resp, err := datasource.Instance().UpdateService(getContext(), request)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().UpdateService(getContext(), request2)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		respGetService, err := datasource.Instance().GetService(getContext(), &pb.GetServiceRequest{
-			ServiceId: serviceId,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, serviceId, respGetService.Service.ServiceId)
-		assert.Equal(t, "", respGetService.Service.Properties["test"])
-		assert.Equal(t, "v", respGetService.Service.Properties["k"])
-	})
-
-	t.Run("update service that does not exist", func(t *testing.T) {
-		r := &pb.UpdateServicePropsRequest{
-			ServiceId:  "not_exist_service_service_ms",
-			Properties: make(map[string]string),
-		}
-		resp, err := datasource.Instance().UpdateService(getContext(), r)
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("update service by removing the properties", func(t *testing.T) {
-		r := &pb.UpdateServicePropsRequest{
-			ServiceId:  serviceId,
-			Properties: nil,
-		}
-		resp, err := datasource.Instance().UpdateService(getContext(), r)
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		r = &pb.UpdateServicePropsRequest{
-			ServiceId:  "",
-			Properties: map[string]string{},
-		}
-		resp, err = datasource.Instance().UpdateService(getContext(), r)
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-}
-
-func TestService_Detail(t *testing.T) {
-	var (
-		serviceId string
-	)
-
-	t.Run("execute 'get detail' operation", func(t *testing.T) {
-		log.Info("should be passed")
-		resp, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "govern_service_group",
-				ServiceName: "govern_service_name",
-				Version:     "3.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		serviceId = resp.ServiceId
-
-		datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceId,
-			SchemaId:  "schemaId",
-			Schema:    "detail",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceId,
-				Endpoints: []string{
-					"govern:127.0.0.1:8080",
-				},
-				HostName: "UT-HOST",
-				Status:   pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		log.Info("when get invalid service detail, should be failed")
-		respD, err := datasource.Instance().GetServiceDetail(getContext(), &pb.GetServiceRequest{
-			ServiceId: "",
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respD.Response.GetCode())
-		//
-		log.Info("when get a service detail, should be passed")
-		respGetServiceDetail, err := datasource.Instance().GetServiceDetail(getContext(), &pb.GetServiceRequest{
-			ServiceId: serviceId,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respGetServiceDetail.Response.GetCode())
-		//
-		respDelete, err := datasource.Instance().UnregisterService(getContext(), &pb.DeleteServiceRequest{
-			ServiceId: serviceId,
-			Force:     true,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respDelete.Response.GetCode())
-		//
-		respGetServiceDetail, err = datasource.Instance().GetServiceDetail(getContext(), &pb.GetServiceRequest{
-			ServiceId: serviceId,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respGetServiceDetail.Response.GetCode())
-	})
-}
-
-func TestService_Info(t *testing.T) {
-	t.Run("get all services", func(t *testing.T) {
-		log.Info("should be passed")
-		resp, err := datasource.Instance().GetServicesInfo(getContext(), &pb.GetServicesInfoRequest{
-			Options: []string{"all"},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().GetServicesInfo(getContext(), &pb.GetServicesInfoRequest{
-			Options: []string{""},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().GetServicesInfo(getContext(), &pb.GetServicesInfoRequest{
-			Options: []string{"tags", "rules", "instances", "schemas", "statistics"},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().GetServicesInfo(getContext(), &pb.GetServicesInfoRequest{
-			Options: []string{"statistics"},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().GetServicesInfo(getContext(), &pb.GetServicesInfoRequest{
-			Options:   []string{"instances"},
-			CountOnly: true,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-}
-
-func TestService_Delete(t *testing.T) {
-	var (
-		serviceContainInstId string
-		serviceNoInstId      string
-	)
-
-	t.Run("create service & instance", func(t *testing.T) {
-		respCreate, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceName: "delete_service_with_inst_ms",
-				AppId:       "delete_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      "UP",
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreate.Response.GetCode())
-		serviceContainInstId = respCreate.ServiceId
-
-		log.Info("attach instance")
-		instance := &pb.MicroServiceInstance{
-			ServiceId: serviceContainInstId,
-			Endpoints: []string{
-				"deleteService:127.0.0.1:8080",
-			},
-			HostName: "delete-host-ms",
-			Status:   pb.MSI_UP,
-		}
-		respCreateIns, err := datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: instance,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateIns.Response.GetCode())
-
-		log.Info("create service without instance")
-		provider := &pb.MicroService{
-			ServiceName: "delete_service_no_inst_ms",
-			AppId:       "delete_service_ms",
-			Version:     "1.0.0",
-			Level:       "FRONT",
-			Status:      "UP",
-		}
-		respCreate, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: provider,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreate.Response.GetCode())
-		serviceNoInstId = respCreate.ServiceId
-
-		respCreate, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceName: "delete_service_consumer_ms",
-				AppId:       "delete_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      "UP",
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreate.Response.GetCode())
-	})
-
-	t.Run("delete a service which contains instances with no force flag", func(t *testing.T) {
-		log.Info("should not pass")
-		resp, err := datasource.Instance().UnregisterService(getContext(), &pb.DeleteServiceRequest{
-			ServiceId: serviceContainInstId,
-			Force:     false,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("delete a service which contains instances with force flag", func(t *testing.T) {
-		log.Info("should pass")
-		resp, err := datasource.Instance().UnregisterService(getContext(), &pb.DeleteServiceRequest{
-			ServiceId: serviceContainInstId,
-			Force:     true,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	// todo: add delete service depended by consumer after finishing dependency management
-
-	t.Run("delete a service which depended by consumer with force flag", func(t *testing.T) {
-		log.Info("should pass")
-		resp, err := datasource.Instance().UnregisterService(getContext(), &pb.DeleteServiceRequest{
-			ServiceId: serviceNoInstId,
-			Force:     true,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("delete a service with no force flag", func(t *testing.T) {
-		log.Info("should not pass")
-		resp, err := datasource.Instance().UnregisterService(getContext(), &pb.DeleteServiceRequest{
-			ServiceId: serviceNoInstId,
-			Force:     false,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-}
-
-func TestApplication_Get(t *testing.T) {
-	t.Run("execute 'get apps' operation", func(t *testing.T) {
-		log.Info("when request is valid, should be passed")
-		resp, err := datasource.Instance().GetApplications(getContext(), &pb.GetAppsRequest{})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().GetApplications(getContext(), &pb.GetAppsRequest{
-			Environment: pb.ENV_ACCEPT,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-}
-
-func TestTags_Add(t *testing.T) {
-	var (
-		serviceId1 string
-	)
-
-	// create service
-	t.Run("create service", func(t *testing.T) {
-		svc1 := &pb.MicroService{
-			AppId:       "create_tag_group_ms",
-			ServiceName: "create_tag_service_ms",
-			Version:     "1.0.0",
-			Level:       "FRONT",
-			Status:      pb.MS_UP,
-		}
-		resp, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: svc1,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, "", resp.ServiceId)
-		serviceId1 = resp.ServiceId
-	})
-
-	t.Run("the request is invalid", func(t *testing.T) {
-		resp, err := datasource.Instance().AddTags(getContext(), &pb.AddServiceTagsRequest{
-			ServiceId: "noServiceTest",
-			Tags: map[string]string{
-				"a": "test",
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, resp.Response.GetCode())
-	})
-
-	t.Run("the request is valid", func(t *testing.T) {
-		defaultQuota := quota.DefaultTagQuota
-		tags := make(map[string]string, defaultQuota)
-		for i := 0; i < defaultQuota; i++ {
-			s := "tag" + strconv.Itoa(i)
-			tags[s] = s
-		}
-		resp, err := datasource.Instance().AddTags(getContext(), &pb.AddServiceTagsRequest{
-			ServiceId: serviceId1,
-			Tags:      tags,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-}
-
-func TestTags_Get(t *testing.T) {
-	var serviceId string
-	t.Run("create service and add tags", func(t *testing.T) {
-		svc := &pb.MicroService{
-			AppId:       "get_tag_group_ms",
-			ServiceName: "get_tag_service_ms",
-			Version:     "1.0.0",
-			Level:       "FRONT",
-			Status:      pb.MS_UP,
-		}
-		resp, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: svc,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		serviceId = resp.ServiceId
-
-		respAddTags, err := datasource.Instance().AddTags(getContext(), &pb.AddServiceTagsRequest{
-			ServiceId: serviceId,
-			Tags: map[string]string{
-				"a": "test",
-				"b": "b",
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAddTags.Response.GetCode())
-	})
-
-	t.Run("the request is invalid", func(t *testing.T) {
-		resp, err := datasource.Instance().GetTags(getContext(), &pb.GetServiceTagsRequest{
-			ServiceId: "noThisService",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().GetTags(getContext(), &pb.GetServiceTagsRequest{
-			ServiceId: "",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().GetTags(getContext(), &pb.GetServiceTagsRequest{
-			ServiceId: strings.Repeat("x", 65),
-		})
-		assert.Equal(t, pb.ErrServiceNotExists, resp.Response.GetCode())
-	})
-
-	t.Run("the request is valid", func(t *testing.T) {
-		resp, err := datasource.Instance().GetTags(getContext(), &pb.GetServiceTagsRequest{
-			ServiceId: serviceId,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		assert.Equal(t, "test", resp.Tags["a"])
-	})
-}
-
-func TestTag_Update(t *testing.T) {
-	var serviceId string
-	t.Run("add service and add tags", func(t *testing.T) {
-		svc := &pb.MicroService{
-			AppId:       "update_tag_group_ms",
-			ServiceName: "update_tag_service_ms",
-			Version:     "1.0.0",
-			Level:       "FRONT",
-			Status:      pb.MS_UP,
-		}
-		resp, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: svc,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		serviceId = resp.ServiceId
-
-		respAddTags, err := datasource.Instance().AddTags(getContext(), &pb.AddServiceTagsRequest{
-			ServiceId: serviceId,
-			Tags: map[string]string{
-				"a": "test",
-				"b": "b",
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAddTags.Response.GetCode())
-	})
-
-	t.Run("the request is invalid", func(t *testing.T) {
-
-		resp, err := datasource.Instance().UpdateTag(getContext(), &pb.UpdateServiceTagRequest{
-			ServiceId: "noneservice",
-			Key:       "a",
-			Value:     "update",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().UpdateTag(getContext(), &pb.UpdateServiceTagRequest{
-			ServiceId: serviceId,
-			Key:       "notexisttag",
-			Value:     "update",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrTagNotExists, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().UpdateTag(getContext(), &pb.UpdateServiceTagRequest{
-			ServiceId: serviceId,
-			Key:       strings.Repeat("x", 65),
-			Value:     "v",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrTagNotExists, resp.Response.GetCode())
-	})
-
-	t.Run("the request is valid", func(t *testing.T) {
-		resp, err := datasource.Instance().UpdateTag(getContext(), &pb.UpdateServiceTagRequest{
-			ServiceId: serviceId,
-			Key:       "a",
-			Value:     "update",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-}
-
-func TestTags_Delete(t *testing.T) {
-	var serviceId string
-	t.Run("create service and add tags", func(t *testing.T) {
-		resp, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "delete_tag_group_ms",
-				ServiceName: "delete_tag_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		serviceId = resp.ServiceId
-
-		respAddTages, err := datasource.Instance().AddTags(getContext(), &pb.AddServiceTagsRequest{
-			ServiceId: serviceId,
-			Tags: map[string]string{
-				"a": "test",
-				"b": "b",
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAddTages.Response.GetCode())
-	})
-
-	t.Run("the request is invalid", func(t *testing.T) {
-		resp, err := datasource.Instance().DeleteTags(getContext(), &pb.DeleteServiceTagsRequest{
-			ServiceId: "noneservice",
-			Keys:      []string{"a", "b"},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().DeleteTags(getContext(), &pb.DeleteServiceTagsRequest{
-			ServiceId: serviceId,
-			Keys:      []string{"c"},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrTagNotExists, resp.Response.GetCode())
-	})
-
-	t.Run("the request is valid", func(t *testing.T) {
-		resp, err := datasource.Instance().DeleteTags(getContext(), &pb.DeleteServiceTagsRequest{
-			ServiceId: serviceId,
-			Keys:      []string{"a", "b"},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		respGetTags, err := datasource.Instance().GetTags(getContext(), &pb.GetServiceTagsRequest{
-			ServiceId: serviceId,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		assert.Equal(t, "", respGetTags.Tags["a"])
-	})
-}
-
-func TestRule_Add(t *testing.T) {
-	var (
-		serviceId1 string
-		serviceId2 string
-	)
-
-	t.Run("register service and instance", func(t *testing.T) {
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_rule_group_ms",
-				ServiceName: "create_rule_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId1 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_rule_group_ms",
-				ServiceName: "create_rule_service_ms",
-				Version:     "1.0.1",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId2 = respCreateService.ServiceId
-	})
-
-	t.Run("invalid request", func(t *testing.T) {
-		respAddRule, err := datasource.Instance().AddRule(getContext(), &pb.AddServiceRulesRequest{
-			ServiceId: "not_exist_service_ms",
-			Rules: []*pb.AddOrUpdateServiceRule{
-				{
-					RuleType:    "BLACK",
-					Attribute:   "ServiceName",
-					Pattern:     "Test*",
-					Description: "test white",
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respAddRule)
-	})
-
-	t.Run("request is valid", func(t *testing.T) {
-		respAddRule, err := datasource.Instance().AddRule(getContext(), &pb.AddServiceRulesRequest{
-			ServiceId: serviceId1,
-			Rules: []*pb.AddOrUpdateServiceRule{
-				{
-					RuleType:    "BLACK",
-					Attribute:   "ServiceName",
-					Pattern:     "Test*",
-					Description: "test black",
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAddRule.Response.GetCode())
-		ruleId := respAddRule.RuleIds[0]
-		assert.NotEqual(t, "", ruleId)
-
-		respAddRule, err = datasource.Instance().AddRule(getContext(), &pb.AddServiceRulesRequest{
-			ServiceId: serviceId1,
-			Rules: []*pb.AddOrUpdateServiceRule{
-				{
-					RuleType:    "BLACK",
-					Attribute:   "ServiceName",
-					Pattern:     "Test*",
-					Description: "test change black",
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAddRule.Response.GetCode())
-		assert.Equal(t, 0, len(respAddRule.RuleIds))
-
-		respAddRule, err = datasource.Instance().AddRule(getContext(), &pb.AddServiceRulesRequest{
-			ServiceId: serviceId1,
-			Rules: []*pb.AddOrUpdateServiceRule{
-				{
-					RuleType:    "WHITE",
-					Attribute:   "ServiceName",
-					Pattern:     "Test*",
-					Description: "test white",
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respAddRule.Response.GetCode())
-	})
-
-	t.Run("create rule out of quota", func(t *testing.T) {
-		size := quota.DefaultRuleQuota + 1
-		rules := make([]*pb.AddOrUpdateServiceRule, 0, size)
-		for i := 0; i < size; i++ {
-			rules = append(rules, &pb.AddOrUpdateServiceRule{
-				RuleType:    "BLACK",
-				Attribute:   "ServiceName",
-				Pattern:     strconv.Itoa(i),
-				Description: "test white",
-			})
-		}
-
-		resp, err := datasource.Instance().AddRule(getContext(), &pb.AddServiceRulesRequest{
-			ServiceId: serviceId2,
-			Rules:     rules[:size-1],
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().AddRule(getContext(), &pb.AddServiceRulesRequest{
-			ServiceId: serviceId2,
-			Rules:     rules[size-1:],
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrNotEnoughQuota, resp.Response.GetCode())
-	})
-}
-
-func TestRule_Get(t *testing.T) {
-	var (
-		serviceId string
-		ruleId    string
-	)
-
-	t.Run("register service and rules", func(t *testing.T) {
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "get_rule_group_ms",
-				ServiceName: "get_rule_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId = respCreateService.ServiceId
-
-		respAddRule, err := datasource.Instance().AddRule(getContext(), &pb.AddServiceRulesRequest{
-			ServiceId: serviceId,
-			Rules: []*pb.AddOrUpdateServiceRule{
-				{
-					RuleType:    "BLACK",
-					Attribute:   "ServiceName",
-					Pattern:     "Test*",
-					Description: "test BLACK",
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAddRule.Response.GetCode())
-		ruleId = respAddRule.RuleIds[0]
-		assert.NotEqual(t, "", ruleId)
-	})
-
-	t.Run("get when request is invalid", func(t *testing.T) {
-		respGetRule, err := datasource.Instance().GetRules(getContext(), &pb.GetServiceRulesRequest{
-			ServiceId: "not_exist_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, respGetRule.Response.GetCode())
-	})
-
-	t.Run("get when request is valid", func(t *testing.T) {
-		respGetRule, err := datasource.Instance().GetRules(getContext(), &pb.GetServiceRulesRequest{
-			ServiceId: serviceId,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respGetRule.Response.GetCode())
-		assert.Equal(t, ruleId, respGetRule.Rules[0].RuleId)
-	})
-}
-
-func TestRule_Delete(t *testing.T) {
-	var (
-		serviceId string
-		ruleId    string
-	)
-	t.Run("register service and rules", func(t *testing.T) {
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "delete_rule_group_ms",
-				ServiceName: "delete_rule_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId = respCreateService.ServiceId
-
-		respAddRule, err := datasource.Instance().AddRule(getContext(), &pb.AddServiceRulesRequest{
-			ServiceId: serviceId,
-			Rules: []*pb.AddOrUpdateServiceRule{
-				{
-					RuleType:    "BLACK",
-					Attribute:   "ServiceName",
-					Pattern:     "Test*",
-					Description: "test BLACK",
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAddRule.Response.GetCode())
-		ruleId = respAddRule.RuleIds[0]
-		assert.NotEqual(t, "", ruleId)
-	})
-
-	t.Run("delete when request is invalid", func(t *testing.T) {
-		resp, err := datasource.Instance().DeleteRule(getContext(), &pb.DeleteServiceRulesRequest{
-			ServiceId: "not_exist_service_ms",
-			RuleIds:   []string{"1000000"},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().DeleteRule(getContext(), &pb.DeleteServiceRulesRequest{
-			ServiceId: serviceId,
-			RuleIds:   []string{"not_exist_rule"},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrRuleNotExists, resp.Response.GetCode())
-	})
-
-	t.Run("delete when request is valid", func(t *testing.T) {
-		resp, err := datasource.Instance().DeleteRule(getContext(), &pb.DeleteServiceRulesRequest{
-			ServiceId: serviceId,
-			RuleIds:   []string{ruleId},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		respGetRule, err := datasource.Instance().GetRules(getContext(), &pb.GetServiceRulesRequest{
-			ServiceId: serviceId,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		assert.Equal(t, 0, len(respGetRule.Rules))
-	})
-}
-
-func TestRule_Update(t *testing.T) {
-	var (
-		serviceId string
-		ruleId    string
-	)
-
-	t.Run("create service and rules", func(t *testing.T) {
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "update_rule_group_ms",
-				ServiceName: "update_rule_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId = respCreateService.ServiceId
-
-		respAddRule, err := datasource.Instance().AddRule(getContext(), &pb.AddServiceRulesRequest{
-			ServiceId: serviceId,
-			Rules: []*pb.AddOrUpdateServiceRule{
-				{
-					RuleType:    "BLACK",
-					Attribute:   "ServiceName",
-					Pattern:     "Test*",
-					Description: "test BLACK",
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAddRule.Response.GetCode())
-		ruleId = respAddRule.RuleIds[0]
-		assert.NotEqual(t, "", ruleId)
-	})
-
-	t.Run("update when request is invalid", func(t *testing.T) {
-		rule := &pb.AddOrUpdateServiceRule{
-			RuleType:    "BLACK",
-			Attribute:   "ServiceName",
-			Pattern:     "Test*",
-			Description: "test BLACK update",
-		}
-		resp, err := datasource.Instance().UpdateRule(getContext(), &pb.UpdateServiceRuleRequest{
-			ServiceId: "not_exist_service_ms",
-			RuleId:    ruleId,
-			Rule:      rule,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().UpdateRule(getContext(), &pb.UpdateServiceRuleRequest{
-			ServiceId: serviceId,
-			RuleId:    "not_exist_rule_ms",
-			Rule:      rule,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().UpdateRule(getContext(), &pb.UpdateServiceRuleRequest{
-			ServiceId: serviceId,
-			RuleId:    ruleId,
-			Rule: &pb.AddOrUpdateServiceRule{
-				RuleType:    "WHITE",
-				Attribute:   "ServiceName",
-				Pattern:     "Test*",
-				Description: "test white update",
-			},
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("update when request is valid", func(t *testing.T) {
-		resp, err := datasource.Instance().UpdateRule(getContext(), &pb.UpdateServiceRuleRequest{
-			ServiceId: serviceId,
-			RuleId:    ruleId,
-			Rule: &pb.AddOrUpdateServiceRule{
-				RuleType:    "BLACK",
-				Attribute:   "AppId",
-				Pattern:     "Test*",
-				Description: "test white update",
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-}
-
-func TestSchema_Create(t *testing.T) {
-	var (
-		serviceIdDev string
-	)
-
-	t.Run("create service, should pass", func(t *testing.T) {
-		svc := &pb.MicroService{
-			Alias:       "create_schema_group_service_ms",
-			ServiceName: "create_schema_service_service_ms",
-			Version:     "1.0.0",
-			Level:       "FRONT",
-			Status:      pb.MS_UP,
-			Environment: pb.ENV_DEV,
-		}
-		resp, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: svc,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, "", resp.ServiceId)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		serviceIdDev = resp.ServiceId
-
-		resp, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schema_group_service_ms",
-				ServiceName: "create_schema_service_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_PROD,
-			},
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, "", resp.ServiceId)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("create schemas out of gauge", func(t *testing.T) {
-		size := quota.DefaultSchemaQuota + 1
-		schemaIds := make([]string, 0, size)
-		schemas := make([]*pb.Schema, 0, size)
-		for i := 0; i < size; i++ {
-			s := "ServiceCombTestTheLimitOfSchemasServiceMS" + strconv.Itoa(i)
-
-			schemaIds = append(schemaIds, s)
-			schemas = append(schemas, &pb.Schema{
-				SchemaId: s,
-				Schema:   s,
-				Summary:  s,
-			})
-		}
-
-		resp, err := datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdDev,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrNotEnoughQuota, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdDev,
-			Schemas:   schemas[:quota.DefaultSchemaQuota],
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		//resp, err = datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-		//	ServiceId: serviceIdDev,
-		//	Schemas:   schemas,
-		//})
-		//assert.NoError(t, err)
-		//assert.Equal(t, pb.ErrNotEnoughQuota, resp.Response.GetCode())
-	})
-
-	//
-	t.Run("batch create schemas in dev env", func(t *testing.T) {
-		var (
-			serviceIdDev1 string
-			serviceIdDev2 string
-		)
-
-		resp, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schemas_dev_service_ms",
-				ServiceName: "create_schemas_service_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_DEV,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		serviceIdDev1 = resp.ServiceId
-
-		resp, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schemas_dev_service_ms",
-				ServiceName: "create_schemas_service_service_ms",
-				Version:     "1.0.1",
-				Level:       "FRONT",
-				Schemas: []string{
-					"first_schemaId_service_ms",
-				},
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_DEV,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		serviceIdDev2 = resp.ServiceId
-
-		schemas := []*pb.Schema{
-			{
-				SchemaId: "first_schemaId_service_ms",
-				Schema:   "first_schema_service_ms",
-				Summary:  "first0summary_service_ms",
-			},
-			{
-				SchemaId: "first_schemaId_service_ms",
-				Schema:   "first_schema_service_ms",
-				Summary:  "first0summary_service_ms",
-			},
-		}
-		respCreateSchema, err := datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdDev1,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateSchema.Response.GetCode())
-		//
-		schemas = []*pb.Schema{
-			{
-				SchemaId: "first_schemaId_service_ms",
-				Schema:   "first_schema_change_service_ms",
-				Summary:  "first0summary1change_service_ms",
-			},
-		}
-		respCreateSchema, err = datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdDev1,
-			Schemas:   schemas,
-		})
-
-		schemas = []*pb.Schema{
-			{
-				SchemaId: "second_schemaId_service_ms",
-				Schema:   "second_schema_service_ms",
-				Summary:  "second0summary_service_ms",
-			},
-		}
-		respCreateSchema, err = datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdDev1,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateSchema.Response.GetCode())
-
-		respGetService, err := datasource.Instance().GetService(getContext(), &pb.GetServiceRequest{
-			ServiceId: serviceIdDev1,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respGetService.Response.GetCode())
-		assert.Equal(t, []string{"second_schemaId_service_ms"}, respGetService.Service.Schemas)
-
-		schemas = []*pb.Schema{
-			{
-				SchemaId: "second_schemaId_service_ms",
-				Schema:   "second_schema_service_ms",
-				Summary:  "second0summary_service_ms",
-			},
-		}
-		respCreateSchema, err = datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdDev2,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateSchema.Response.GetCode())
-
-		respGetService, err = datasource.Instance().GetService(getContext(), &pb.GetServiceRequest{
-			ServiceId: serviceIdDev2,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respGetService.Response.GetCode())
-		assert.Equal(t, []string{"second_schemaId_service_ms"}, respGetService.Service.Schemas)
-	})
-	//
-	t.Run("batch create schemas in production env", func(t *testing.T) {
-		var (
-			serviceIdPro1 string
-			serviceIdPro2 string
-		)
-
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schemas_prod_service_ms",
-				ServiceName: "create_schemas_service_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_PROD,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceIdPro1 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schemas_prod_service_ms",
-				ServiceName: "create_schemas_service_service_ms",
-				Version:     "1.0.1",
-				Level:       "FRONT",
-				Schemas: []string{
-					"first_schemaId_service_ms",
-					"second_schemaId_service_ms",
-				},
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_PROD,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceIdPro2 = respCreateService.ServiceId
-
-		schemas := []*pb.Schema{
-			{
-				SchemaId: "first_schemaId_service_ms",
-				Schema:   "first_schema_service_ms",
-				Summary:  "first0summary_service_ms",
-			},
-			{
-				SchemaId: "first_schemaId_service_ms",
-				Schema:   "first_schema_service_ms",
-				Summary:  "first0summary_service_ms",
-			},
-		}
-		respModifySchemas, err := datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdPro1,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchemas.Response.GetCode())
-
-		respGetService, err := datasource.Instance().GetService(getContext(), &pb.GetServiceRequest{
-			ServiceId: serviceIdPro1,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respGetService.Response.GetCode())
-		assert.Equal(t, []string{"first_schemaId_service_ms"}, respGetService.Service.Schemas)
-
-		respModifySchemas, err = datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdPro1,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchemas.Response.GetCode())
-
-		schemas = []*pb.Schema{
-			{
-				SchemaId: "second_schemaId_service_ms",
-				Schema:   "second_schema_service_ms",
-				Summary:  "second0summary_service_ms",
-			},
-		}
-		respModifySchemas, err = datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdPro1,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrUndefinedSchemaID, respModifySchemas.Response.GetCode())
-		fmt.Println(serviceIdPro2)
-
-		respModifySchema, err := datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro2,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		schemas = []*pb.Schema{
-			{
-				SchemaId: "first_schemaId_service_ms",
-				Schema:   "first_schema_service_ms",
-				Summary:  "first0summary_service_ms",
-			},
-		}
-		respModifySchemas, err = datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdPro2,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchemas.Response.GetCode())
-		//
-		respExist, err := datasource.Instance().ExistSchema(getContext(), &pb.GetExistenceRequest{
-			Type:      service.ExistTypeSchema,
-			ServiceId: serviceIdPro2,
-			SchemaId:  "first_schemaId_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, "first0summary_service_ms", respExist.Summary)
-		//
-		respModifySchemas, err = datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdPro2,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchemas.Response.GetCode())
-	})
-
-	//
-	t.Run("create a schema in dev env", func(t *testing.T) {
-		var (
-			serviceIdDev1 string
-			serviceIdDev2 string
-		)
-
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schema_dev_service_ms",
-				ServiceName: "create_schema_service_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_DEV,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceIdDev1 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schema_dev_service_ms",
-				ServiceName: "create_schema_service_service_ms",
-				Version:     "1.0.1",
-				Level:       "FRONT",
-				Schemas: []string{
-					"first_schemaId_service_ms",
-				},
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_DEV,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceIdDev2 = respCreateService.ServiceId
-
-		respModifySchema, err := datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdDev1,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdDev2,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdDev1,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_change_service_ms",
-			Summary:   "first0summary1change_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdDev1,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_service_ms",
-			Summary:   "first0summary_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdDev1,
-			SchemaId:  "second_schemaId_service_ms",
-			Schema:    "second_schema_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-	})
-	//
-	t.Run("create a schema in production env", func(t *testing.T) {
-		var (
-			serviceIdPro1 string
-			serviceIdPro2 string
-		)
-
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schema_prod_service_ms",
-				ServiceName: "create_schema_service_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_PROD,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceIdPro1 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schema_prod_service_ms",
-				ServiceName: "create_schema_service_service_ms",
-				Version:     "1.0.1",
-				Level:       "FRONT",
-				Schemas: []string{
-					"first_schemaId_service_ms",
-					"second_schemaId_service_ms",
-				},
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_PROD,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceIdPro2 = respCreateService.ServiceId
-
-		respModifySchema, err := datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro1,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro1,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_change_service_ms",
-			Summary:   "first0summary1change_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro1,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_service_ms",
-			Summary:   "first0summary_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro1,
-			SchemaId:  "second_schemaId_service_ms",
-			Schema:    "second_schema_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro2,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-	})
-	//
-	t.Run("create a schema in empty env", func(t *testing.T) {
-		var (
-			serviceIdPro1 string
-			serviceIdPro2 string
-		)
-
-		log.Info("register service")
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schema_empty_service_ms",
-				ServiceName: "create_schema_service_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceIdPro1 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "create_schema_empty_service_ms",
-				ServiceName: "create_schema_service_service_ms",
-				Version:     "1.0.1",
-				Level:       "FRONT",
-				Schemas: []string{
-					"first_schemaId_service_ms",
-					"second_schemaId_service_ms",
-				},
-				Status: pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceIdPro2 = respCreateService.ServiceId
-
-		log.Info("create a schema for service whose schemaID is empty")
-		respModifySchema, err := datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro1,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		log.Info("modify schema for the service whose schema summary is empty")
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro1,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_change_service_ms",
-			Summary:   "first0summary1change_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		log.Info("modify schema for the service whose schema summary already exist")
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro1,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_service_ms",
-			Summary:   "first0summary_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		log.Info("add schema")
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro1,
-			SchemaId:  "second_schemaId_service_ms",
-			Schema:    "second_schema_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-
-		log.Info("modify schema for the service whose schemaId already exist")
-		respModifySchema, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro2,
-			SchemaId:  "first_schemaId_service_ms",
-			Schema:    "first_schema_service_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-	})
-	//
-	t.Run("add a schemaId in production env while schema editable is set", func(t *testing.T) {
-		var (
-			serviceIdPro1 string
-		)
-		log.Info("register service")
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "add_a_schemaId_prod_schema_lock_ms",
-				ServiceName: "add_a_schemaId_prod_schema_lock_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_PROD,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceIdPro1 = respCreateService.ServiceId
-
-		log.Info("add a schema with new schemaId, should pass")
-		schemas := []*pb.Schema{
-			{
-				SchemaId: "first_schemaId_ms",
-				Schema:   "first_schema_ms",
-				Summary:  "first0summary_ms",
-			},
-		}
-		respModifySchemas, err := datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdPro1,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchemas.Response.GetCode())
-
-		respService, err := datasource.Instance().GetService(getContext(), &pb.GetServiceRequest{
-			ServiceId: serviceIdPro1,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respService.Response.GetCode())
-		assert.Equal(t, []string{"first_schemaId_ms"}, respService.Service.Schemas)
-
-		schemas = []*pb.Schema{
-			{
-				SchemaId: "second_schemaId_ms",
-				Schema:   "second_schema_ms",
-				Summary:  "second0summary_ms",
-			},
-		}
-		log.Info("schema edit not allowed, add a schema with new schemaId should fail")
-
-		localMicroServiceDs := &mongo.DataSource{SchemaEditable: false}
-		respModifySchemas, err = localMicroServiceDs.ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdPro1,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrUndefinedSchemaID, respModifySchemas.Response.GetCode())
-
-		log.Info("schema edit allowed, add a schema with new schemaId, should pass")
-		localMicroServiceDs = &mongo.DataSource{SchemaEditable: true}
-		respModifySchemas, err = localMicroServiceDs.ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdPro1,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchemas.Response.GetCode())
-	})
-	//
-	t.Run("modify a schema in production env while schema editable is set", func(t *testing.T) {
-		var (
-			serviceIdPro1 string
-		)
-		log.Info("register service")
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "modify_a_schema_prod_schema_lock_ms",
-				ServiceName: "modify_a_schema_prod_schema_lock_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_PROD,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceIdPro1 = respCreateService.ServiceId
-
-		log.Info("add schemas, should pass")
-		schemas := []*pb.Schema{
-			{
-				SchemaId: "first_schemaId_ms",
-				Schema:   "first_schema_ms",
-				Summary:  "first0summary_ms",
-			},
-		}
-		respModifySchemas, err := datasource.Instance().ModifySchemas(getContext(), &pb.ModifySchemasRequest{
-			ServiceId: serviceIdPro1,
-			Schemas:   schemas,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchemas.Response.GetCode())
-
-		respService, err := datasource.Instance().GetService(getContext(), &pb.GetServiceRequest{
-			ServiceId: serviceIdPro1,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, []string{"first_schemaId_ms"}, respService.Service.Schemas)
-
-		log.Info("schema edit not allowed, modify schema should fail")
-		localMicroServiceDs := &mongo.DataSource{SchemaEditable: false}
-		respModifySchema, err := localMicroServiceDs.ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro1,
-			SchemaId:  schemas[0].SchemaId,
-			Summary:   schemas[0].Summary,
-			Schema:    schemas[0].SchemaId,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrModifySchemaNotAllow, respModifySchema.Response.GetCode())
-
-		log.Info("schema edit allowed, add a schema with new schemaId, should pass")
-		localMicroServiceDs = &mongo.DataSource{SchemaEditable: true}
-		respModifySchema, err = localMicroServiceDs.ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceIdPro1,
-			SchemaId:  schemas[0].SchemaId,
-			Summary:   schemas[0].Summary,
-			Schema:    schemas[0].SchemaId,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respModifySchema.Response.GetCode())
-	})
-}
-
-func TestSchema_Exist(t *testing.T) {
-	var (
-		serviceId string
-	)
-
-	t.Run("register service and add schema", func(t *testing.T) {
-		log.Info("register service")
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "query_schema_group_ms",
-				ServiceName: "query_schema_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_DEV,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId = respCreateService.ServiceId
-
-		log.Info("add schemas, should pass")
-		resp, err := datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceId,
-			SchemaId:  "com.huawei.test.ms",
-			Schema:    "query schema ms",
-			Summary:   "summary_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceId,
-			SchemaId:  "com.huawei.test.no.summary.ms",
-			Schema:    "query schema ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("check exists", func(t *testing.T) {
-		log.Info("check schema exist, should pass")
-		resp, err := datasource.Instance().ExistSchema(getContext(), &pb.GetExistenceRequest{
-			Type:      service.ExistTypeSchema,
-			ServiceId: serviceId,
-			SchemaId:  "com.huawei.test.ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		assert.Equal(t, "summary_ms", resp.Summary)
-
-		resp, err = datasource.Instance().ExistSchema(getContext(), &pb.GetExistenceRequest{
-			Type:        service.ExistTypeSchema,
-			ServiceId:   serviceId,
-			SchemaId:    "com.huawei.test.ms",
-			AppId:       "()",
-			ServiceName: "",
-			Version:     "()",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().ExistSchema(getContext(), &pb.GetExistenceRequest{
-			Type:      service.ExistTypeSchema,
-			ServiceId: serviceId,
-			SchemaId:  "com.huawei.test.no.summary.ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		assert.Equal(t, "com.huawei.test.no.summary.ms", resp.SchemaId)
-		assert.Equal(t, "", resp.Summary)
-	})
-}
-
-func TestSchema_Delete(t *testing.T) {
-	var (
-		serviceId string
-	)
-
-	t.Run("register service and instance", func(t *testing.T) {
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "delete_schema_group_ms",
-				ServiceName: "delete_schema_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId = respCreateService.ServiceId
-
-		resp, err := datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceId,
-			SchemaId:  "com.huawei.test.ms",
-			Schema:    "delete schema ms",
-			Summary:   "summary_ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("test delete when request is invalid", func(t *testing.T) {
-		log.Info("schema id does not exist")
-		resp, err := datasource.Instance().DeleteSchema(getContext(), &pb.DeleteSchemaRequest{
-			ServiceId: serviceId,
-			SchemaId:  "none_exist_schema",
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		log.Info("service id does not exist")
-		resp, err = datasource.Instance().DeleteSchema(getContext(), &pb.DeleteSchemaRequest{
-			ServiceId: "not_exist_service",
-			SchemaId:  "com.huawei.test.ms",
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-	//
-	t.Run("test delete when request is valid", func(t *testing.T) {
-		resp, err := datasource.Instance().DeleteSchema(getContext(), &pb.DeleteSchemaRequest{
-			ServiceId: serviceId,
-			SchemaId:  "com.huawei.test.ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		respGet, err := datasource.Instance().GetSchema(getContext(), &pb.GetSchemaRequest{
-			ServiceId: serviceId,
-			SchemaId:  "com.huawei.test.ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrSchemaNotExists, respGet.Response.GetCode())
-
-		respExist, err := datasource.Instance().ExistSchema(getContext(), &pb.GetExistenceRequest{
-			Type:      "schema",
-			ServiceId: serviceId,
-			SchemaId:  "com.huawei.test.ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrSchemaNotExists, respExist.Response.GetCode())
-	})
-}
-
-func TestSchema_Get(t *testing.T) {
-	var (
-		serviceId  string
-		serviceId1 string
-	)
-
-	var (
-		schemaId1     string = "all_schema1_ms"
-		schemaId2     string = "all_schema2_ms"
-		schemaId3     string = "all_schema3_ms"
-		summary       string = "this0is1a2test3ms"
-		schemaContent string = "the content is vary large"
-	)
-
-	t.Run("register service and instance", func(t *testing.T) {
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "get_schema_group_ms",
-				ServiceName: "get_schema_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Schemas: []string{
-					"non-schema-content",
-				},
-				Status:      pb.MS_UP,
-				Environment: pb.ENV_DEV,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId = respCreateService.ServiceId
-
-		respCreateSchema, err := datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceId,
-			SchemaId:  "com.huawei.test.ms",
-			Schema:    "get schema ms",
-			Summary:   "schema0summary1ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateSchema.Response.GetCode())
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "get_all_schema_ms",
-				ServiceName: "get_all_schema_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Schemas: []string{
-					schemaId1,
-					schemaId2,
-					schemaId3,
-				},
-				Status: pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId1 = respCreateService.ServiceId
-		//
-		respPutData, err := datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceId1,
-			SchemaId:  schemaId2,
-			Schema:    schemaContent,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respPutData.Response.GetCode())
-		//
-		respPutData, err = datasource.Instance().ModifySchema(getContext(), &pb.ModifySchemaRequest{
-			ServiceId: serviceId1,
-			SchemaId:  schemaId3,
-			Schema:    schemaContent,
-			Summary:   summary,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respPutData.Response.GetCode())
-		//
-		respGetAllSchema, err := datasource.Instance().GetAllSchemas(getContext(), &pb.GetAllSchemaRequest{
-			ServiceId:  serviceId1,
-			WithSchema: false,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respGetAllSchema.Response.GetCode())
-		schemas := respGetAllSchema.Schemas
-		for _, schema := range schemas {
-			fmt.Println(schema.SchemaId)
-			if schema.SchemaId == schemaId1 && schema.SchemaId == schemaId2 {
-				assert.Empty(t, schema.Summary)
-				assert.Empty(t, schema.Schema)
-			}
-			if schema.SchemaId == schemaId3 {
-				assert.Equal(t, summary, schema.Summary)
-				assert.Empty(t, schema.Schema)
-			}
-		}
-		//
-		respGetAllSchema, err = datasource.Instance().GetAllSchemas(getContext(), &pb.GetAllSchemaRequest{
-			ServiceId:  serviceId1,
-			WithSchema: true,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respGetAllSchema.Response.GetCode())
-		schemas = respGetAllSchema.Schemas
-		for _, schema := range schemas {
-			switch schema.SchemaId {
-			case schemaId1:
-				assert.Empty(t, schema.Summary)
-				assert.Empty(t, schema.Schema)
-			case schemaId2:
-				assert.Empty(t, schema.Summary)
-				assert.Equal(t, schemaContent, schema.Schema)
-			case schemaId3:
-				assert.Equal(t, summary, schema.Summary)
-				assert.Equal(t, schemaContent, schema.Schema)
-			}
-		}
-	})
-
-	t.Run("test get when request is invalid", func(t *testing.T) {
-		log.Info("service does not exist")
-		respGetSchema, err := datasource.Instance().GetSchema(getContext(), &pb.GetSchemaRequest{
-			ServiceId: "none_exist_service",
-			SchemaId:  "com.huawei.test",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, respGetSchema.Response.GetCode())
-
-		respGetAllSchemas, err := datasource.Instance().GetAllSchemas(getContext(), &pb.GetAllSchemaRequest{
-			ServiceId: "none_exist_service",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, respGetAllSchemas.Response.GetCode())
-
-		log.Info("schema id doest not exist")
-		respGetSchema, err = datasource.Instance().GetSchema(getContext(), &pb.GetSchemaRequest{
-			ServiceId: serviceId,
-			SchemaId:  "none_exist_schema",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrSchemaNotExists, respGetSchema.Response.GetCode())
-	})
-
-	t.Run("test get when request is valid", func(t *testing.T) {
-		resp, err := datasource.Instance().GetSchema(getContext(), &pb.GetSchemaRequest{
-			ServiceId: serviceId,
-			SchemaId:  "com.huawei.test.ms",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		assert.Equal(t, "get schema ms", resp.Schema)
-		assert.Equal(t, "schema0summary1ms", resp.SchemaSummary)
-
-	})
-}
-
-func TestInstance_Create(t *testing.T) {
-	var serviceID string
-
-	t.Run("create service, when request is valid, should pass", func(t *testing.T) {
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceName: "create_instance_service_ms",
-				AppId:       "create_instance_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID = respCreateService.ServiceId
-	})
-
-	t.Run("register instance, when request is valid, should pass", func(t *testing.T) {
-		respCreateInst, err := datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID,
-				Endpoints: []string{
-					"createInstance_ms:127.0.0.1:8080",
-				},
-				HostName: "UT-HOST",
-				Status:   pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInst.Response.GetCode())
-		assert.NotEqual(t, "", respCreateInst.InstanceId)
-		// delete instance
-		_, err = datasource.Instance().UnregisterInstance(getContext(), &pb.UnregisterInstanceRequest{
-			ServiceId:  serviceID,
-			InstanceId: respCreateInst.InstanceId,
-		})
-		assert.NoError(t, err)
-
-		respCreateInst, err = datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				InstanceId: "customId_ms",
-				ServiceId:  serviceID,
-				Endpoints: []string{
-					"createInstance_ms:127.0.0.1:8080",
-				},
-				HostName: "UT-HOST",
-				Status:   pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInst.Response.GetCode())
-		assert.Equal(t, "customId_ms", respCreateInst.InstanceId)
-		// delete instance
-		_, err = datasource.Instance().UnregisterInstance(getContext(), &pb.UnregisterInstanceRequest{
-			ServiceId:  serviceID,
-			InstanceId: "customId_ms",
-		})
-		assert.NoError(t, err)
-	})
-
-	t.Run("update the same instance, should pass", func(t *testing.T) {
-		instance := &pb.MicroServiceInstance{
-			ServiceId: serviceID,
-			Endpoints: []string{
-				"sameInstance:127.0.0.1:8080",
-			},
-			HostName: "UT-HOST",
-			Status:   pb.MSI_UP,
-		}
-		resp, err := datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: instance,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		resp, err = datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: instance,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-		assert.Equal(t, instance.InstanceId, resp.InstanceId)
-		// delete instance
-		_, err = datasource.Instance().UnregisterInstance(getContext(), &pb.UnregisterInstanceRequest{
-			ServiceId:  serviceID,
-			InstanceId: instance.InstanceId,
-		})
-		assert.NoError(t, err)
-	})
-
-	t.Run("delete service data", func(t *testing.T) {
-		_, err := datasource.Instance().UnregisterService(getContext(), &pb.DeleteServiceRequest{
-			ServiceId: serviceID,
-		})
-		assert.NoError(t, err)
-	})
-}
-
-func TestInstance_HeartBeat(t *testing.T) {
-	var (
-		serviceID   string
-		instanceID1 string
-		instanceID2 string
-	)
-
-	t.Run("register service and instance, should pass", func(t *testing.T) {
-		log.Info("register service")
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceName: "heartbeat_service_ms",
-				AppId:       "heartbeat_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID = respCreateService.ServiceId
-
-		respCreateInstance, err := datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"heartbeat:127.0.0.1:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-		instanceID1 = respCreateInstance.InstanceId
-
-		respCreateInstance, err = datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"heartbeat:127.0.0.2:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-		instanceID2 = respCreateInstance.InstanceId
-	})
-
-	t.Run("instance: update a lease", func(t *testing.T) {
-		log.Info("valid instance")
-		resp, err := datasource.Instance().Heartbeat(getContext(), &pb.HeartbeatRequest{
-			ServiceId:  serviceID,
-			InstanceId: instanceID1,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		log.Info("serviceId does not exist")
-		resp, err = datasource.Instance().Heartbeat(getContext(), &pb.HeartbeatRequest{
-			ServiceId:  "100000000000",
-			InstanceId: instanceID1,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		log.Info("instance does not exist")
-		resp, err = datasource.Instance().Heartbeat(getContext(), &pb.HeartbeatRequest{
-			ServiceId:  serviceID,
-			InstanceId: "not-exist-ins",
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("batch update lease", func(t *testing.T) {
-		log.Info("request contains at least 1 instances")
-		resp, err := datasource.Instance().HeartbeatSet(getContext(), &pb.HeartbeatSetRequest{
-			Instances: []*pb.HeartbeatSetElement{
-				{
-					ServiceId:  serviceID,
-					InstanceId: instanceID1,
-				},
-				{
-					ServiceId:  serviceID,
-					InstanceId: instanceID2,
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("delete related instances and services", func(t *testing.T) {
-		// delete instances
-		_, err := datasource.Instance().UnregisterInstance(getContext(), &pb.UnregisterInstanceRequest{
-			ServiceId:  serviceID,
-			InstanceId: instanceID1,
-		})
-		assert.NoError(t, err)
-		_, err = datasource.Instance().UnregisterInstance(getContext(), &pb.UnregisterInstanceRequest{
-			ServiceId:  serviceID,
-			InstanceId: instanceID2,
-		})
-		assert.NoError(t, err)
-
-		// delete service
-		_, err = datasource.Instance().UnregisterService(getContext(), &pb.DeleteServiceRequest{
-			ServiceId: serviceID,
-		})
-		assert.NoError(t, err)
-	})
-}
-
-func TestInstance_Update(t *testing.T) {
-	var (
-		serviceID  string
-		instanceID string
-	)
-
-	t.Run("register service and instance, should pass", func(t *testing.T) {
-		log.Info("register service")
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				ServiceName: "update_instance_service_ms",
-				AppId:       "update_instance_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID = respCreateService.ServiceId
-
-		log.Info("create instance")
-		respCreateInstance, err := datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID,
-				Endpoints: []string{
-					"updateInstance:127.0.0.1:8080",
-				},
-				HostName:   "UT-HOST-MS",
-				Status:     pb.MSI_UP,
-				Properties: map[string]string{"nodeIP": "test"},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-		instanceID = respCreateInstance.InstanceId
-	})
-
-	t.Run("update instance status, should pass", func(t *testing.T) {
-		log.Info("update instance status to DOWN")
-		respUpdateStatus, err := datasource.Instance().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
-			ServiceId:  serviceID,
-			InstanceId: instanceID,
-			Status:     pb.MSI_DOWN,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respUpdateStatus.Response.GetCode())
-
-		log.Info("update instance status to OUTOFSERVICE")
-		respUpdateStatus, err = datasource.Instance().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
-			ServiceId:  serviceID,
-			InstanceId: instanceID,
-			Status:     pb.MSI_OUTOFSERVICE,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respUpdateStatus.Response.GetCode())
-
-		log.Info("update instance status to STARTING")
-		respUpdateStatus, err = datasource.Instance().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
-			ServiceId:  serviceID,
-			InstanceId: instanceID,
-			Status:     pb.MSI_STARTING,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respUpdateStatus.Response.GetCode())
-
-		log.Info("update instance status to TESTING")
-		respUpdateStatus, err = datasource.Instance().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
-			ServiceId:  serviceID,
-			InstanceId: instanceID,
-			Status:     pb.MSI_TESTING,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respUpdateStatus.Response.GetCode())
-
-		log.Info("update instance status to UP")
-		respUpdateStatus, err = datasource.Instance().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
-			ServiceId:  serviceID,
-			InstanceId: instanceID,
-			Status:     pb.MSI_UP,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respUpdateStatus.Response.GetCode())
-
-		log.Info("update instance status with a not exist instance")
-		respUpdateStatus, err = datasource.Instance().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
-			ServiceId:  serviceID,
-			InstanceId: "notexistins",
-			Status:     pb.MSI_STARTING,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respUpdateStatus.Response.GetCode())
-	})
-
-	t.Run("update instance properties, should pass", func(t *testing.T) {
-		log.Info("update one properties")
-		respUpdateProperties, err := datasource.Instance().UpdateInstanceProperties(getContext(),
-			&pb.UpdateInstancePropsRequest{
-				ServiceId:  serviceID,
-				InstanceId: instanceID,
-				Properties: map[string]string{
-					"test": "test",
-				},
-			})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respUpdateProperties.Response.GetCode())
-
-		log.Info("all max properties updated")
-		size := 1000
-		properties := make(map[string]string, size)
-		for i := 0; i < size; i++ {
-			s := strconv.Itoa(i) + strings.Repeat("x", 253)
-			properties[s] = s
-		}
-		respUpdateProperties, err = datasource.Instance().UpdateInstanceProperties(getContext(),
-			&pb.UpdateInstancePropsRequest{
-				ServiceId:  serviceID,
-				InstanceId: instanceID,
-				Properties: properties,
-			})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respUpdateProperties.Response.GetCode())
-
-		log.Info("update instance that does not exist")
-		respUpdateProperties, err = datasource.Instance().UpdateInstanceProperties(getContext(),
-			&pb.UpdateInstancePropsRequest{
-				ServiceId:  serviceID,
-				InstanceId: "not_exist_ins",
-				Properties: map[string]string{
-					"test": "test",
-				},
-			})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respUpdateProperties.Response.GetCode())
-
-		log.Info("remove properties")
-		respUpdateProperties, err = datasource.Instance().UpdateInstanceProperties(getContext(),
-			&pb.UpdateInstancePropsRequest{
-				ServiceId:  serviceID,
-				InstanceId: instanceID,
-			})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respUpdateProperties.Response.GetCode())
-
-		log.Info("update service that does not exist")
-		respUpdateProperties, err = datasource.Instance().UpdateInstanceProperties(getContext(),
-			&pb.UpdateInstancePropsRequest{
-				ServiceId:  "not_exist_service",
-				InstanceId: instanceID,
-				Properties: map[string]string{
-					"test": "test",
-				},
-			})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respUpdateProperties.Response.GetCode())
-	})
-
-	t.Run("delete test data", func(t *testing.T) {
-		_, err := client.GetMongoClient().Delete(getContext(), model.CollectionService, bson.M{"domain": "default", "project": "default"})
-		assert.NoError(t, err)
-
-		_, err = client.GetMongoClient().Delete(getContext(), model.CollectionInstance, bson.M{"domain": "default", "project": "default"})
-		assert.NoError(t, err)
-	})
-}
-
-func TestInstance_Query(t *testing.T) {
-	var (
-		serviceID1  string
-		serviceID2  string
-		serviceID3  string
-		serviceID4  string
-		serviceID5  string
-		serviceID6  string
-		serviceID7  string
-		serviceID8  string
-		serviceID9  string
-		instanceID1 string
-		instanceID2 string
-		instanceID4 string
-		instanceID5 string
-	)
-
-	t.Run("register services and instances for testInstance_query, when request is invalid, should pass", func(t *testing.T) {
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "query_instance_ms",
-				ServiceName: "query_instance_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID1 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "query_instance_ms",
-				ServiceName: "query_instance_service_ms",
-				Version:     "1.0.5",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID2 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "query_instance_diff_app_ms",
-				ServiceName: "query_instance_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID3 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				Environment: pb.ENV_PROD,
-				AppId:       "query_instance_ms",
-				ServiceName: "query_instance_diff_env_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID4 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				Environment: pb.ENV_PROD,
-				AppId:       "default",
-				ServiceName: "query_instance_shared_provider_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-				Properties: map[string]string{
-					pb.PropAllowCrossApp: "true",
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID5 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(
-			util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
-			&pb.CreateServiceRequest{
-				Service: &pb.MicroService{
-					AppId:       "default",
-					ServiceName: "query_instance_diff_domain_consumer_ms",
-					Version:     "1.0.0",
-					Level:       "FRONT",
-					Status:      pb.MS_UP,
-				},
-			})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID6 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "default",
-				ServiceName: "query_instance_shared_consumer_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID7 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "query_instance_ms",
-				ServiceName: "query_instance_with_rev_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID8 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "query_instance_ms",
-				ServiceName: "batch_query_instance_with_rev_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID9 = respCreateService.ServiceId
-
-		respCreateInstance, err := datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID1,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"find:127.0.0.1:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-		instanceID1 = respCreateInstance.InstanceId
-
-		respCreateInstance, err = datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID2,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"find:127.0.0.2:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-		instanceID2 = respCreateInstance.InstanceId
-
-		respCreateInstance, err = datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID4,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"find:127.0.0.4:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-		instanceID4 = respCreateInstance.InstanceId
-
-		respCreateInstance, err = datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID5,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"find:127.0.0.5:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-		instanceID5 = respCreateInstance.InstanceId
-
-		respCreateInstance, err = datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID8,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"find:127.0.0.8:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-
-		respCreateInstance, err = datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID9,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"find:127.0.0.9:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-	})
-
-	t.Run("query instance, when request is invalid, should pass", func(t *testing.T) {
-		log.Info("find with version rule")
-		respFind, err := datasource.Instance().FindInstances(getContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: serviceID1,
-			AppId:             "query_instance_ms",
-			ServiceName:       "query_instance_service_ms",
-			VersionRule:       "latest",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, instanceID2, respFind.Instances[0].InstanceId)
-
-		respFind, err = datasource.Instance().FindInstances(getContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: serviceID1,
-			AppId:             "query_instance_ms",
-			ServiceName:       "query_instance_service_ms",
-			VersionRule:       "1.0.0+",
-			Tags:              []string{},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, instanceID2, respFind.Instances[0].InstanceId)
-
-		respFind, err = datasource.Instance().FindInstances(getContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: serviceID1,
-			AppId:             "query_instance_ms",
-			ServiceName:       "query_instance_service_ms",
-			VersionRule:       "1.0.0",
-			Tags:              []string{},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, instanceID1, respFind.Instances[0].InstanceId)
-
-		respFind, err = datasource.Instance().FindInstances(getContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: serviceID1,
-			AppId:             "query_instance",
-			ServiceName:       "query_instance_service",
-			VersionRule:       "0.0.0",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ErrServiceNotExists, respFind.Response.GetCode())
-
-		log.Info("find with env")
-		respFind, err = datasource.Instance().FindInstances(getContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: serviceID4,
-			AppId:             "query_instance_ms",
-			ServiceName:       "query_instance_diff_env_service_ms",
-			VersionRule:       "1.0.0",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 1, len(respFind.Instances))
-		assert.Equal(t, instanceID4, respFind.Instances[0].InstanceId)
-
-		respFind, err = datasource.Instance().FindInstances(getContext(), &pb.FindInstancesRequest{
-			Environment: pb.ENV_PROD,
-			AppId:       "query_instance_ms",
-			ServiceName: "query_instance_diff_env_service_ms",
-			VersionRule: "1.0.0",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 1, len(respFind.Instances))
-		assert.Equal(t, instanceID4, respFind.Instances[0].InstanceId)
-
-		log.Info("find should return 200 if consumer is diff apps")
-		respFind, err = datasource.Instance().FindInstances(getContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: serviceID3,
-			AppId:             "query_instance_ms",
-			ServiceName:       "query_instance_service_ms",
-			VersionRule:       "1.0.5",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 0, len(respFind.Instances))
-
-		log.Info("provider tag does not exist")
-		respFind, err = datasource.Instance().FindInstances(getContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: serviceID1,
-			AppId:             "query_instance_ms",
-			ServiceName:       "query_instance_service_ms",
-			VersionRule:       "latest",
-			Tags:              []string{"not_exist_tag"},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 0, len(respFind.Instances))
-
-		log.Info("shared service discovery")
-		config.ServerInfo.Config.GlobalVisible = "query_instance_shared_provider_ms"
-		core.RegisterGlobalServices()
-		core.Service.Environment = pb.ENV_PROD
-		respFind, err = datasource.Instance().FindInstances(
-			util.SetTargetDomainProject(
-				util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
-				"default", "default"),
-			&pb.FindInstancesRequest{
-				ConsumerServiceId: serviceID6,
-				AppId:             "default",
-				ServiceName:       "query_instance_shared_provider_ms",
-				VersionRule:       "1.0.0",
-			})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 1, len(respFind.Instances))
-		assert.Equal(t, instanceID5, respFind.Instances[0].InstanceId)
-
-		respFind, err = datasource.Instance().FindInstances(getContext(), &pb.FindInstancesRequest{
-			ConsumerServiceId: serviceID7,
-			AppId:             "default",
-			ServiceName:       "query_instance_shared_provider_ms",
-			VersionRule:       "1.0.0",
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 1, len(respFind.Instances))
-		assert.Equal(t, instanceID5, respFind.Instances[0].InstanceId)
-
-		log.Info("query same domain deps")
-		// todo finish ut after implementing GetConsumerDependencies interface
-
-		core.Service.Environment = pb.ENV_DEV
-	})
-
-	t.Run("batch query instances, when request is invalid, should pass", func(t *testing.T) {
-		log.Info("find with version rule")
-		respFind, err := datasource.Instance().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
-			ConsumerServiceId: serviceID1,
-			Services: []*pb.FindService{
-				{
-					Service: &pb.MicroServiceKey{
-						AppId:       "query_instance_ms",
-						ServiceName: "query_instance_service_ms",
-						Version:     "latest",
-					},
-				},
-				{
-					Service: &pb.MicroServiceKey{
-						AppId:       "query_instance_ms",
-						ServiceName: "query_instance_service_ms",
-						Version:     "1.0.0+",
-					},
-				},
-				{
-					Service: &pb.MicroServiceKey{
-						AppId:       "query_instance_ms",
-						ServiceName: "query_instance_service_ms",
-						Version:     "0.0.0",
-					},
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, int64(0), respFind.Services.Updated[0].Index)
-		assert.Equal(t, instanceID2, respFind.Services.Updated[0].Instances[0].InstanceId)
-		assert.Equal(t, int64(1), respFind.Services.Updated[1].Index)
-		assert.Equal(t, instanceID2, respFind.Services.Updated[1].Instances[0].InstanceId)
-		assert.Equal(t, int64(2), respFind.Services.Failed[0].Indexes[0])
-		assert.Equal(t, pb.ErrServiceNotExists, respFind.Services.Failed[0].Error.Code)
-
-		log.Info("find with env")
-		respFind, err = datasource.Instance().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
-			ConsumerServiceId: serviceID4,
-			Services: []*pb.FindService{
-				{
-					Service: &pb.MicroServiceKey{
-						AppId:       "query_instance_ms",
-						ServiceName: "query_instance_diff_env_service_ms",
-						Version:     "1.0.0",
-					},
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 1, len(respFind.Services.Updated[0].Instances))
-		assert.Equal(t, instanceID4, respFind.Services.Updated[0].Instances[0].InstanceId)
-
-		log.Info("find should return 200 even if consumer is diff apps")
-		respFind, err = datasource.Instance().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
-			ConsumerServiceId: serviceID3,
-			Services: []*pb.FindService{
-				{
-					Service: &pb.MicroServiceKey{
-						AppId:       "query_instance_ms",
-						ServiceName: "query_instance_service_ms",
-						Version:     "1.0.5",
-					},
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 0, len(respFind.Services.Updated[0].Instances))
-
-		log.Info("shared service discovery")
-		config.ServerInfo.Config.GlobalVisible = "query_instance_shared_provider_ms"
-		core.RegisterGlobalServices()
-		core.Service.Environment = pb.ENV_PROD
-		respFind, err = datasource.Instance().BatchFind(
-			util.SetTargetDomainProject(
-				util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
-				"default", "default"),
-			&pb.BatchFindInstancesRequest{
-				ConsumerServiceId: serviceID6,
-				Services: []*pb.FindService{
-					{
-						Service: &pb.MicroServiceKey{
-							AppId:       "default",
-							ServiceName: "query_instance_shared_provider_ms",
-							Version:     "1.0.0",
-						},
-					},
-				},
-			})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 1, len(respFind.Services.Updated[0].Instances))
-		assert.Equal(t, instanceID5, respFind.Services.Updated[0].Instances[0].InstanceId)
-
-		respFind, err = datasource.Instance().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
-			ConsumerServiceId: serviceID7,
-			Services: []*pb.FindService{
-				{
-					Service: &pb.MicroServiceKey{
-						AppId:       "default",
-						ServiceName: "query_instance_shared_provider_ms",
-						Version:     "1.0.0",
-					},
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 1, len(respFind.Services.Updated[0].Instances))
-		assert.Equal(t, instanceID5, respFind.Services.Updated[0].Instances[0].InstanceId)
-
-		respFind, err = datasource.Instance().BatchFind(util.SetTargetDomainProject(
-			util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
-			"default", "default"),
-			&pb.BatchFindInstancesRequest{
-				ConsumerServiceId: serviceID6,
-				Instances: []*pb.FindInstance{
-					{
-						Instance: &pb.HeartbeatSetElement{
-							ServiceId:  serviceID5,
-							InstanceId: instanceID5,
-						},
-					},
-				},
-			})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, pb.ErrServiceNotExists, respFind.Instances.Failed[0].Error.Code)
-
-		respFind, err = datasource.Instance().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
-			ConsumerServiceId: serviceID7,
-			Instances: []*pb.FindInstance{
-				{
-					Instance: &pb.HeartbeatSetElement{
-						ServiceId:  serviceID5,
-						InstanceId: instanceID5,
-					},
-				},
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
-		assert.Equal(t, 1, len(respFind.Instances.Updated[0].Instances))
-		assert.Equal(t, instanceID5, respFind.Instances.Updated[0].Instances[0].InstanceId)
-
-		core.Service.Environment = pb.ENV_DEV
-	})
-
-	t.Run("query instances between diff dimensions", func(t *testing.T) {
-		log.Info("diff appId")
-		UTFunc := func(consumerId string, code int32) {
-			respFind, err := datasource.Instance().GetInstances(getContext(), &pb.GetInstancesRequest{
-				ConsumerServiceId: consumerId,
-				ProviderServiceId: serviceID2,
-			})
-			assert.NoError(t, err)
-			assert.Equal(t, code, respFind.Response.GetCode())
-		}
-
-		UTFunc(serviceID3, pb.ErrServiceNotExists)
-
-		UTFunc(serviceID1, pb.ResponseSuccess)
-
-		log.Info("diff env")
-		respFind, err := datasource.Instance().GetInstances(getContext(), &pb.GetInstancesRequest{
-			ConsumerServiceId: serviceID4,
-			ProviderServiceId: serviceID2,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respFind.Response.GetCode())
-	})
-
-	t.Run("delete test data", func(t *testing.T) {
-		_, err := client.GetMongoClient().Delete(getContext(), model.CollectionService, bson.M{"domain": "default", "project": "default"})
-		assert.NoError(t, err)
-
-		_, err = client.GetMongoClient().Delete(getContext(), model.CollectionInstance, bson.M{"domain": "default", "project": "default"})
-		assert.NoError(t, err)
-
-		_, err = client.GetMongoClient().Delete(getContext(), model.CollectionService, bson.M{"domain": "user", "project": "user"})
-		assert.NoError(t, err)
-
-		_, err = client.GetMongoClient().Delete(getContext(), model.CollectionInstance, bson.M{"domain": "user", "project": "user"})
-		assert.NoError(t, err)
-	})
-}
-
-func TestInstance_GetOne(t *testing.T) {
-	var (
-		serviceID1  string
-		serviceID2  string
-		serviceID3  string
-		instanceID2 string
-	)
-
-	t.Run("register service and instances, when request is invalid, should pass", func(t *testing.T) {
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "get_instance_ms",
-				ServiceName: "get_instance_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID1 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "get_instance_ms",
-				ServiceName: "get_instance_service_ms",
-				Version:     "1.0.5",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID2 = respCreateService.ServiceId
-
-		respCreateInstance, err := datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceID2,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"get:127.0.0.2:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		instanceID2 = respCreateInstance.InstanceId
-
-		respCreateService, err = datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "get_instance_cross_ms",
-				ServiceName: "get_instance_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceID3 = respCreateService.ServiceId
-	})
-
-	t.Run("get one instance when invalid request", func(t *testing.T) {
-		log.Info("find service itself")
-		resp, err := datasource.Instance().GetInstance(getContext(), &pb.GetOneInstanceRequest{
-			ConsumerServiceId:  serviceID2,
-			ProviderServiceId:  serviceID2,
-			ProviderInstanceId: instanceID2,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		log.Info("consumer does not exist")
-		resp, err = datasource.Instance().GetInstance(getContext(), &pb.GetOneInstanceRequest{
-			ConsumerServiceId:  "not-exist-id-ms",
-			ProviderServiceId:  serviceID2,
-			ProviderInstanceId: instanceID2,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("get between diff apps", func(t *testing.T) {
-		resp, err := datasource.Instance().GetInstance(getContext(), &pb.GetOneInstanceRequest{
-			ConsumerServiceId:  serviceID3,
-			ProviderServiceId:  serviceID2,
-			ProviderInstanceId: instanceID2,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		respAll, err := datasource.Instance().GetInstances(getContext(), &pb.GetInstancesRequest{
-			ConsumerServiceId: serviceID3,
-			ProviderServiceId: serviceID2,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, respAll.Response.GetCode())
-	})
-
-	t.Run("get instances when request is invalid", func(t *testing.T) {
-		log.Info("consumer does not exist")
-		resp, err := datasource.Instance().GetInstances(getContext(), &pb.GetInstancesRequest{
-			ConsumerServiceId: "not-exist-service-ms",
-			ProviderServiceId: serviceID2,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		log.Info("consumer does not exist")
-		resp, err = datasource.Instance().GetInstances(getContext(), &pb.GetInstancesRequest{
-			ConsumerServiceId: serviceID1,
-			ProviderServiceId: serviceID2,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("delete test data", func(t *testing.T) {
-		_, err := client.GetMongoClient().Delete(getContext(), model.CollectionService, bson.M{"domain": "default", "project": "default"})
-		assert.NoError(t, err)
-
-		_, err = client.GetMongoClient().Delete(getContext(), model.CollectionInstance, bson.M{"domain": "default", "project": "default"})
-		assert.NoError(t, err)
-	})
-}
-
-func TestInstance_GetAll(t *testing.T) {
-
-	t.Run("register 2 instances, get all instances count should return 2", func(t *testing.T) {
-		var (
-			serviceId1 string
-			serviceId2 string
-		)
-		ctx := util.WithNoCache(util.SetDomainProject(getContext(), "TestInstance_GetAll", "1"))
-		respCreateService, err := datasource.Instance().RegisterService(ctx, &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "get_instance_ms",
-				ServiceName: "get_instance_service_ms",
-				Version:     "1.0.0",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId1 = respCreateService.ServiceId
-
-		respCreateService, err = datasource.Instance().RegisterService(ctx, &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "get_instance_ms",
-				ServiceName: "get_instance_service_ms",
-				Version:     "1.0.5",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId2 = respCreateService.ServiceId
-
-		respCreateInstance, err := datasource.Instance().RegisterInstance(ctx, &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceId1,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"get:127.0.0.2:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-
-		respCreateInstance, err = datasource.Instance().RegisterInstance(ctx, &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceId2,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"get:127.0.0.3:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-
-		respAll, err := datasource.Instance().GetAllInstances(ctx, &pb.GetAllInstancesRequest{})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAll.Response.GetCode())
-		assert.Equal(t, 2, len(respAll.Instances))
-	})
-
-	t.Run("domain contain no instances, get all instances should be pass, return 0 instance", func(t *testing.T) {
-		ctx := util.WithNoCache(util.SetDomainProject(getContext(), "TestInstance_GetAll", "2"))
-		respAll, err := datasource.Instance().GetAllInstances(ctx, &pb.GetAllInstancesRequest{})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respAll.Response.GetCode())
-		assert.Equal(t, 0, len(respAll.Instances))
-	})
-
-	t.Run("delete test data", func(t *testing.T) {
-		_, err := client.GetMongoClient().Delete(getContext(), model.CollectionService, bson.M{"domain": "TestInstance_GetAll", "project": "1"})
-		assert.NoError(t, err)
-
-		_, err = client.GetMongoClient().Delete(getContext(), model.CollectionInstance, bson.M{"domain": "TestInstance_GetAll", "project": "1"})
-		assert.NoError(t, err)
-	})
-}
-
-func TestInstance_Unregister(t *testing.T) {
-	var (
-		serviceId  string
-		instanceId string
-	)
-
-	t.Run("register service and instances", func(t *testing.T) {
-		respCreateService, err := datasource.Instance().RegisterService(getContext(), &pb.CreateServiceRequest{
-			Service: &pb.MicroService{
-				AppId:       "unregister_instance_ms",
-				ServiceName: "unregister_instance_service_ms",
-				Version:     "1.0.5",
-				Level:       "FRONT",
-				Status:      pb.MS_UP,
-			},
-			Tags: map[string]string{
-				"test": "test",
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
-		serviceId = respCreateService.ServiceId
-
-		respCreateInstance, err := datasource.Instance().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
-			Instance: &pb.MicroServiceInstance{
-				ServiceId: serviceId,
-				HostName:  "UT-HOST-MS",
-				Endpoints: []string{
-					"unregister:127.0.0.2:8080",
-				},
-				Status: pb.MSI_UP,
-			},
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
-		instanceId = respCreateInstance.InstanceId
-	})
-
-	t.Run("unregister instance", func(t *testing.T) {
-		resp, err := datasource.Instance().UnregisterInstance(getContext(), &pb.UnregisterInstanceRequest{
-			ServiceId:  serviceId,
-			InstanceId: instanceId,
-		})
-		assert.NoError(t, err)
-		assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-
-	t.Run("unregister instance when request is invalid", func(t *testing.T) {
-		log.Info("service id does not exist")
-		resp, err := datasource.Instance().UnregisterInstance(getContext(), &pb.UnregisterInstanceRequest{
-			ServiceId:  "not-exist-id-ms",
-			InstanceId: instanceId,
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-
-		log.Info("instance id does not exist")
-		resp, err = datasource.Instance().UnregisterInstance(getContext(), &pb.UnregisterInstanceRequest{
-			ServiceId:  serviceId,
-			InstanceId: "not-exist-id-ms",
-		})
-		assert.NoError(t, err)
-		assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
-	})
-}