blob: 884932cab2bad65c131232fb1a0e2cf511e2e7d5 [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 service_test
import (
pb "github.com/ServiceComb/service-center/server/core/proto"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("'Dependency' service", func() {
Describe("execute 'create' operartion", func() {
var (
consumerId1 string
consumerId2 string
)
It("should be passed", func() {
respCreateService, err := serviceResource.Create(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
AppId: "create_dep_group",
ServiceName: "create_dep_consumer",
Version: "1.0.0",
Level: "FRONT",
Status: pb.MS_UP,
},
})
Expect(err).To(BeNil())
Expect(respCreateService.Response.Code).To(Equal(pb.Response_SUCCESS))
consumerId1 = respCreateService.ServiceId
respCreateService, err = serviceResource.Create(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
Environment: pb.ENV_PROD,
AppId: "create_dep_group",
ServiceName: "create_dep_consumer",
Version: "1.0.0",
Level: "FRONT",
Status: pb.MS_UP,
},
})
Expect(err).To(BeNil())
Expect(respCreateService.Response.Code).To(Equal(pb.Response_SUCCESS))
consumerId2 = respCreateService.ServiceId
respCreateService, err = serviceResource.Create(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
AppId: "create_dep_group",
ServiceName: "create_dep_provider",
Version: "1.0.0",
Level: "FRONT",
Status: pb.MS_UP,
},
})
Expect(err).To(BeNil())
Expect(respCreateService.Response.Code).To(Equal(pb.Response_SUCCESS))
respCreateService, err = serviceResource.Create(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
Environment: pb.ENV_PROD,
AppId: "create_dep_group",
ServiceName: "create_dep_provider",
Version: "1.0.0",
Level: "FRONT",
Status: pb.MS_UP,
},
})
Expect(err).To(BeNil())
Expect(respCreateService.Response.Code).To(Equal(pb.Response_SUCCESS))
})
Context("when request is invalid", func() {
It("should be failed", func() {
By("dependency is nil")
respCreateDependency, err := serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
consumer := &pb.DependencyKey{
AppId: "create_dep_group",
ServiceName: "create_dep_consumer",
Version: "1.0.0",
}
providers := []*pb.DependencyKey{
{
AppId: "create_dep_group",
ServiceName: "create_dep_provider",
Version: "1.0.0",
},
}
By("consumer does not exist")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: &pb.DependencyKey{
AppId: "noexistapp",
ServiceName: "noexistservice",
Version: "1.0.0",
},
Providers: providers,
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
By("consumer version is invalid")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: &pb.DependencyKey{
AppId: "create_dep_group",
ServiceName: "create_dep_consumer",
Version: "1.0.0+",
},
Providers: providers,
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
By("consumer serviceName is invalid")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: &pb.DependencyKey{
AppId: "create_dep_group",
ServiceName: "*",
Version: "1.0.0",
},
Providers: providers,
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
By("provider is nil")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
By("provider app is invalid")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
AppId: "*",
ServiceName: "service_name_provider",
Version: "2.0.0",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
By("provider serviceName is invalid")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
AppId: "service_group_provider",
ServiceName: "-",
Version: "2.0.0",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
By("provider version is invalid")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
AppId: "service_group_provider",
ServiceName: "service_name_provider",
Version: "",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
By("provider in diff env")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
Environment: pb.ENV_PROD,
AppId: "service_group_provider",
ServiceName: "service_name_provider",
Version: "latest",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).To(Equal(pb.Response_SUCCESS))
respCon, err := serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: consumerId1,
})
Expect(err).To(BeNil())
Expect(respCon.Response.Code).To(Equal(pb.Response_SUCCESS))
Expect(len(respCon.Providers)).To(Equal(0))
By("consumer in diff env")
consumer.Environment = pb.ENV_PROD
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
AppId: "service_group_provider",
ServiceName: "service_name_provider",
Version: "latest",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).To(Equal(pb.Response_SUCCESS))
respCon, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: consumerId2,
})
Expect(err).To(BeNil())
Expect(respCon.Response.Code).To(Equal(pb.Response_SUCCESS))
Expect(len(respCon.Providers)).To(Equal(0))
})
})
Context("when request is valid", func() {
It("should be passed", func() {
consumer := &pb.DependencyKey{
ServiceName: "create_dep_consumer",
AppId: "create_dep_group",
Version: "1.0.0",
}
By("add latest")
respCreateDependency, err := serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
AppId: "create_dep_group",
ServiceName: "create_dep_provider",
Version: "latest",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).To(Equal(pb.Response_SUCCESS))
By("add 1.0.0+")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
AppId: "create_dep_group",
ServiceName: "create_dep_provider",
Version: "1.0.0+",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).To(Equal(pb.Response_SUCCESS))
By("add *")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
ServiceName: "*",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).To(Equal(pb.Response_SUCCESS))
By("add multiple providers")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
AppId: "create_dep_group",
ServiceName: "create_dep_provider",
Version: "1.0.0",
},
{
ServiceName: "*",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).To(Equal(pb.Response_SUCCESS))
By("add 1.0.0-2.0.0")
respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
AppId: "create_dep_group",
ServiceName: "create_dep_provider",
Version: "1.0.0-2.0.0",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respCreateDependency.Response.Code).To(Equal(pb.Response_SUCCESS))
By("add not override")
respAddDependency, err := serviceResource.AddDependenciesForMicroServices(getContext(), &pb.AddDependenciesRequest{
Dependencies: []*pb.ConsumerDependency{
{
Consumer: consumer,
Providers: []*pb.DependencyKey{
{
AppId: "create_dep_group",
ServiceName: "create_dep_provider",
Version: "1.0.0-2.0.0",
},
},
},
},
})
Expect(err).To(BeNil())
Expect(respAddDependency.Response.Code).To(Equal(pb.Response_SUCCESS))
})
})
})
Describe("execute 'get' operartion", func() {
var (
consumerId1 string
providerId1 string
providerId2 string
)
It("should be passed", func() {
respCreateService, err := serviceResource.Create(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
AppId: "get_dep_group",
ServiceName: "get_dep_consumer",
Version: "1.0.0",
Level: "FRONT",
Status: pb.MS_UP,
},
})
Expect(err).To(BeNil())
Expect(respCreateService.Response.Code).To(Equal(pb.Response_SUCCESS))
consumerId1 = respCreateService.ServiceId
respCreateService, err = serviceResource.Create(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
AppId: "get_dep_group",
ServiceName: "get_dep_provider",
Version: "1.0.0",
Level: "FRONT",
Status: pb.MS_UP,
},
})
Expect(err).To(BeNil())
Expect(respCreateService.Response.Code).To(Equal(pb.Response_SUCCESS))
providerId1 = respCreateService.ServiceId
respCreateService, err = serviceResource.Create(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
AppId: "get_dep_group",
ServiceName: "get_dep_provider",
Version: "2.0.0",
Level: "FRONT",
Status: pb.MS_UP,
},
})
Expect(err).To(BeNil())
Expect(respCreateService.Response.Code).To(Equal(pb.Response_SUCCESS))
providerId2 = respCreateService.ServiceId
})
Context("when request is invalid", func() {
It("should be failed", func() {
By("service id is empty when get provider")
respPro, err := serviceResource.GetProviderDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: "",
})
Expect(err).To(BeNil())
Expect(respPro.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
By("service does not exist when get provider")
respPro, err = serviceResource.GetProviderDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: "noneservice",
})
Expect(err).To(BeNil())
Expect(respPro.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
By("service id is empty when get consumer")
respCon, err := serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: "",
})
Expect(err).To(BeNil())
Expect(respCon.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
By("service does not exist when get consumer")
respCon, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: "noneservice",
})
Expect(err).To(BeNil())
Expect(respCon.Response.Code).ToNot(Equal(pb.Response_SUCCESS))
})
})
Context("when request is valid", func() {
It("should be passed", func() {
By("get provider")
respPro, err := serviceResource.GetProviderDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: providerId1,
})
Expect(err).To(BeNil())
Expect(respPro.Response.Code).To(Equal(pb.Response_SUCCESS))
By("get consumer")
respCon, err := serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: consumerId1,
})
Expect(err).To(BeNil())
Expect(respCon.Response.Code).To(Equal(pb.Response_SUCCESS))
})
})
Context("when after finding instance", func() {
It("should created dependencies between C and P", func() {
By("find provider")
resp, err := instanceResource.Find(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: consumerId1,
AppId: "get_dep_group",
ServiceName: "get_dep_provider",
VersionRule: "1.0.0+",
})
Expect(err).To(BeNil())
Expect(resp.Response.Code).To(Equal(pb.Response_SUCCESS))
By("get provider's deps")
respGetP, err := serviceResource.GetProviderDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: providerId1,
})
Expect(err).To(BeNil())
Expect(respGetP.Response.Code).To(Equal(pb.Response_SUCCESS))
Expect(respGetP.Consumers[0].ServiceId).To(Equal(consumerId1))
By("get consumer's deps")
respGetC, err := serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: consumerId1,
})
Expect(err).To(BeNil())
Expect(respGetC.Response.Code).To(Equal(pb.Response_SUCCESS))
Expect(len(respGetC.Providers)).To(Equal(2))
//重复find
resp, err = instanceResource.Find(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: consumerId1,
AppId: "get_dep_group",
ServiceName: "get_dep_provider",
VersionRule: "2.0.0+",
})
Expect(err).To(BeNil())
Expect(resp.Response.Code).To(Equal(pb.Response_SUCCESS))
By("get provider again")
respGetP, err = serviceResource.GetProviderDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: providerId1,
})
Expect(err).To(BeNil())
Expect(respGetP.Response.Code).To(Equal(pb.Response_SUCCESS))
Expect(len(respGetP.Consumers)).To(Equal(0))
By("get consumer again")
respGetC, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: consumerId1,
})
Expect(err).To(BeNil())
Expect(respGetC.Response.Code).To(Equal(pb.Response_SUCCESS))
Expect(respGetC.Providers[0].ServiceId).To(Equal(providerId2))
})
})
})
})