blob: ac97a343779c883e28a2b2519a00ca6ba96dcadd [file] [log] [blame]
//Copyright 2017 Huawei Technologies Co., Ltd
//
//Licensed 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
import (
_ "github.com/ServiceComb/service-center/server/plugin/infra/quota/buildin"
_ "github.com/ServiceComb/service-center/server/plugin/infra/registry/buildin"
)
import (
"fmt"
"github.com/ServiceComb/service-center/pkg/util"
"github.com/ServiceComb/service-center/server/core/proto"
"github.com/ServiceComb/service-center/server/infra/registry"
serviceUtil "github.com/ServiceComb/service-center/server/service/util"
"github.com/coreos/etcd/mvcc/mvccpb"
. "github.com/onsi/ginkgo"
"github.com/onsi/ginkgo/reporters"
. "github.com/onsi/gomega"
"golang.org/x/net/context"
"testing"
)
func init() {
}
func TestMicroservice(t *testing.T) {
RegisterFailHandler(Fail)
junitReporter := reporters.NewJUnitReporter("model.junit.xml")
RunSpecsWithDefaultAndCustomReporters(t, "model Suite", []Reporter{junitReporter})
}
func TestFindServiceIds(t *testing.T) {
_, err := serviceUtil.FindServiceIds(util.SetContext(context.Background(), "cacheOnly", "1"),
"latest", &proto.MicroServiceKey{})
if err != nil {
t.FailNow()
}
_, err = serviceUtil.FindServiceIds(util.SetContext(context.Background(), "cacheOnly", "1"),
"1.0.0", &proto.MicroServiceKey{})
if err != nil {
t.FailNow()
}
_, err = serviceUtil.FindServiceIds(util.SetContext(context.Background(), "cacheOnly", "1"),
"1.0+", &proto.MicroServiceKey{Alias: "test"})
if err != nil {
t.FailNow()
}
}
func TestGetService(t *testing.T) {
_, err := serviceUtil.GetService(util.SetContext(context.Background(), "cacheOnly", "1"), "", "")
if err != nil {
t.FailNow()
}
_, err = serviceUtil.GetService(context.Background(), "", "")
if err == nil {
t.FailNow()
}
_, err = serviceUtil.GetServicesRawData(util.SetContext(context.Background(), "cacheOnly", "1"), "")
if err != nil {
t.FailNow()
}
_, err = serviceUtil.GetServicesRawData(context.Background(), "")
if err == nil {
t.FailNow()
}
_, err = serviceUtil.GetServicesByDomain(util.SetContext(context.Background(), "cacheOnly", "1"), "")
if err != nil {
t.FailNow()
}
_, err = serviceUtil.GetServicesByDomain(context.Background(), "")
if err == nil {
t.FailNow()
}
_, err = serviceUtil.GetAllServiceUtil(util.SetContext(context.Background(), "cacheOnly", "1"))
if err != nil {
t.FailNow()
}
_, err = serviceUtil.GetAllServiceUtil(context.Background())
if err == nil {
t.FailNow()
}
_, err = serviceUtil.GetServiceWithRev(context.Background(), "", "", 0)
if err == nil {
t.FailNow()
}
_, err = serviceUtil.GetServiceWithRev(context.Background(), "", "", 1)
if err == nil {
t.FailNow()
}
}
func TestMsCache(t *testing.T) {
defer func() {
if r := recover(); r != nil {
t.FailNow()
}
}()
_, err := serviceUtil.GetServiceInCache(context.Background(), "", "")
if err == nil {
t.FailNow()
}
ms := serviceUtil.MsCache()
if ms == nil {
t.FailNow()
}
ms.Set("", &proto.MicroService{}, 0)
_, err = serviceUtil.GetServiceInCache(context.Background(), "", "")
if err != nil {
t.FailNow()
}
}
func TestFromContext(t *testing.T) {
ctx := context.WithValue(context.Background(), "noCache", "1")
opts := serviceUtil.FromContext(ctx)
if len(opts) == 0 {
t.FailNow()
}
op := registry.OptionsToOp(opts...)
if op.Mode != registry.MODE_NO_CACHE {
t.FailNow()
}
ctx = context.WithValue(context.Background(), "cacheOnly", "1")
opts = serviceUtil.FromContext(ctx)
if len(opts) == 0 {
t.FailNow()
}
op = registry.OptionsToOp(opts...)
if op.Mode != registry.MODE_CACHE {
t.FailNow()
}
}
func TestServiceExist(t *testing.T) {
defer func() {
if r := recover(); r != nil {
t.FailNow()
}
}()
serviceUtil.ServiceExist(util.SetContext(context.Background(), "cacheOnly", "1"), "", "")
}
func TestRemandQuota(t *testing.T) {
serviceUtil.RemandServiceQuota(context.Background())
serviceUtil.RemandInstanceQuota(context.Background())
}
func TestSetDefault(t *testing.T) {
service := &proto.MicroService{}
serviceUtil.SetDefault(service)
if len(service.Level) == 0 ||
len(service.Environment) == 0 ||
len(service.RegisterBy) == 0 ||
service.Framework == nil ||
len(service.Framework.Name) == 0 ||
len(service.Status) == 0 {
fmt.Printf(`TestSetDefault failed`)
t.FailNow()
}
}
func TestGetOneDomainProjectServiceCount(t *testing.T) {
_, err := serviceUtil.GetOneDomainProjectServiceCount(util.SetContext(context.Background(), "cacheOnly", "1"), "")
if err != nil {
fmt.Printf("GetOneDomainProjectServiceCount WithCacheOnly failed")
t.FailNow()
}
_, err = serviceUtil.GetOneDomainProjectServiceCount(context.Background(), "")
if err == nil {
fmt.Printf("GetOneDomainProjectServiceCount failed")
t.FailNow()
}
}
func TestGetOneDomainProjectInstanceCount(t *testing.T) {
_, err := serviceUtil.GetOneDomainProjectInstanceCount(util.SetContext(context.Background(), "cacheOnly", "1"), "")
if err != nil {
fmt.Printf("GetOneDomainProjectInstanceCount WithCacheOnly failed")
t.FailNow()
}
_, err = serviceUtil.GetOneDomainProjectInstanceCount(context.Background(), "")
if err == nil {
fmt.Printf("GetOneDomainProjectInstanceCount failed")
t.FailNow()
}
}
const VERSIONRULE_BASE = 5000
func BenchmarkVersionRule_Latest_GetServicesIds(b *testing.B) {
var kvs = make([]*mvccpb.KeyValue, VERSIONRULE_BASE)
for i := 1; i <= VERSIONRULE_BASE; i++ {
kvs[i-1] = &mvccpb.KeyValue{
Key: []byte(fmt.Sprintf("/service/ver/1.%d", i)),
Value: []byte(fmt.Sprintf("%d", i)),
}
}
b.N = VERSIONRULE_BASE
b.ResetTimer()
for i := 0; i < b.N; i++ {
serviceUtil.VersionRule(serviceUtil.Latest).Match(kvs)
}
b.ReportAllocs()
// 5000 7105020 ns/op 2180198 B/op 39068 allocs/op
}
func BenchmarkVersionRule_Range_GetServicesIds(b *testing.B) {
var kvs = make([]*mvccpb.KeyValue, VERSIONRULE_BASE)
for i := 1; i <= VERSIONRULE_BASE; i++ {
kvs[i-1] = &mvccpb.KeyValue{
Key: []byte(fmt.Sprintf("/service/ver/1.%d", i)),
Value: []byte(fmt.Sprintf("%d", i)),
}
}
b.N = VERSIONRULE_BASE
b.ResetTimer()
for i := 0; i < b.N; i++ {
serviceUtil.VersionRule(serviceUtil.Range).Match(kvs, fmt.Sprintf("1.%d", i), fmt.Sprintf("1.%d", i+VERSIONRULE_BASE/10))
}
b.ReportAllocs()
// 5000 7244029 ns/op 2287389 B/op 39584 allocs/op
}
func BenchmarkVersionRule_AtLess_GetServicesIds(b *testing.B) {
var kvs = make([]*mvccpb.KeyValue, VERSIONRULE_BASE)
for i := 1; i <= VERSIONRULE_BASE; i++ {
kvs[i-1] = &mvccpb.KeyValue{
Key: []byte(fmt.Sprintf("/service/ver/1.%d", i)),
Value: []byte(fmt.Sprintf("%d", i)),
}
}
b.N = VERSIONRULE_BASE
b.ResetTimer()
for i := 0; i < b.N; i++ {
serviceUtil.VersionRule(serviceUtil.AtLess).Match(kvs, fmt.Sprintf("1.%d", i))
}
b.ReportAllocs()
// 5000 11221098 ns/op 3174720 B/op 58064 allocs/op
}