blob: 84a8e38629efd24cd334f17d3e0575e6dcc355e6 [file] [log] [blame]
/*
* 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 util_test
// initialize
import (
"context"
"errors"
"testing"
_ "github.com/apache/servicecomb-service-center/test"
"github.com/apache/servicecomb-service-center/datasource"
serviceUtil "github.com/apache/servicecomb-service-center/datasource/etcd/util"
"github.com/apache/servicecomb-service-center/pkg/util"
proto "github.com/go-chassis/cari/discovery"
"github.com/little-cui/etcdadpt"
"github.com/stretchr/testify/assert"
)
func getContextWith(domain string, project string) context.Context {
return util.WithNoCache(util.SetDomainProject(context.Background(), domain, project))
}
func TestFindServiceIds(t *testing.T) {
ctx := getContextWith("default", "default")
t.Run("no service, should return empty", func(t *testing.T) {
ids, exist, err := serviceUtil.FindServiceIds(ctx, &proto.MicroServiceKey{}, false)
assert.NoError(t, err)
assert.False(t, exist)
assert.Empty(t, ids)
ids, exist, err = serviceUtil.FindServiceIds(ctx, &proto.MicroServiceKey{}, true)
assert.NoError(t, err)
assert.False(t, exist)
assert.Empty(t, ids)
})
t.Run("exist service, should return empty", func(t *testing.T) {
resp, err := datasource.GetMetadataManager().RegisterService(ctx, &proto.CreateServiceRequest{
Service: &proto.MicroService{
Alias: "test_find_alias_ids",
ServiceName: "test_find_service_ids",
Version: "2.0",
},
})
assert.NoError(t, err)
serviceID1 := resp.ServiceId
defer datasource.GetMetadataManager().UnregisterService(ctx, &proto.DeleteServiceRequest{ServiceId: serviceID1})
resp, err = datasource.GetMetadataManager().RegisterService(ctx, &proto.CreateServiceRequest{
Service: &proto.MicroService{
Alias: "test_find_alias_ids",
ServiceName: "test_find_service_ids",
Version: "3.0",
},
})
assert.NoError(t, err)
serviceID2 := resp.ServiceId
defer datasource.GetMetadataManager().UnregisterService(ctx, &proto.DeleteServiceRequest{ServiceId: serviceID2})
ids, exist, err := serviceUtil.FindServiceIds(ctx, &proto.MicroServiceKey{
Tenant: "default/default",
ServiceName: "test_find_service_ids",
Version: "1.0",
}, false)
assert.NoError(t, err)
assert.True(t, exist)
assert.Equal(t, 2, len(ids))
ids, exist, err = serviceUtil.FindServiceIds(ctx, &proto.MicroServiceKey{
Tenant: "default/default",
ServiceName: "test_find_service_ids",
Version: "1.0",
}, true)
assert.NoError(t, err)
assert.True(t, exist)
assert.Empty(t, ids)
ids, exist, err = serviceUtil.FindServiceIds(ctx, &proto.MicroServiceKey{
Tenant: "default/default",
ServiceName: "test_find_service_ids",
Version: "2.0",
}, true)
assert.NoError(t, err)
assert.True(t, exist)
assert.Equal(t, []string{serviceID1}, ids)
})
}
func TestGetService(t *testing.T) {
var err error
t.Run("when there is no such a service in db", func(t *testing.T) {
_, err = serviceUtil.GetService(context.Background(), "", "")
if err != nil && !errors.Is(err, datasource.ErrNoData) {
t.Fatalf("TestGetService failed")
}
assert.Equal(t, datasource.ErrNoData, err)
})
_, err = serviceUtil.GetServicesByDomainProject(context.Background(), "")
if err != nil {
t.Fatalf("TestGetService failed")
}
_, err = serviceUtil.GetAllServiceUtil(context.Background())
if err != nil {
t.Fatalf("TestGetService failed")
}
t.Run("when there is no such a service in db", func(t *testing.T) {
_, err = serviceUtil.GetServiceWithRev(context.Background(), "", "", 0)
if err != nil && !errors.Is(err, datasource.ErrNoData) {
t.Fatalf("TestGetService failed")
}
assert.Equal(t, datasource.ErrNoData, err)
})
//_, err = serviceUtil.GetServiceWithRev(context.Background(), "", "", 1)
//if err != nil {
// t.Fatalf("TestGetService failed")
//}
}
func TestServiceExist(t *testing.T) {
defer func() {
if r := recover(); r != nil {
t.Fatalf("TestServiceExist failed")
}
}()
serviceUtil.ServiceExist(util.WithCacheOnly(context.Background()), "", "")
}
func TestFromContext(t *testing.T) {
ctx := util.WithNoCache(context.Background())
opts := serviceUtil.FromContext(ctx)
if len(opts) == 0 {
t.Fatalf("TestFromContext failed")
}
op := etcdadpt.OptionsToOp(opts...)
if op.Mode != etcdadpt.ModeNoCache {
t.Fatalf("TestFromContext failed")
}
ctx = util.WithCacheOnly(context.Background())
opts = serviceUtil.FromContext(ctx)
if len(opts) == 0 {
t.Fatalf("TestFromContext failed")
}
op = etcdadpt.OptionsToOp(opts...)
if op.Mode != etcdadpt.ModeCache {
t.Fatalf("TestFromContext failed")
}
}