github.com/choria-io/go-choria@v0.28.1-0.20240416190746-b3bf9c7d5a45/providers/provtarget/provtarget_test.go (about) 1 // Copyright (c) 2021-2022, R.I. Pienaar and the Choria Project contributors 2 // 3 // SPDX-License-Identifier: Apache-2.0 4 5 package provtarget 6 7 import ( 8 "context" 9 "io" 10 "testing" 11 12 "github.com/choria-io/go-choria/build" 13 "github.com/choria-io/go-choria/providers/provtarget/builddefaults" 14 "github.com/golang/mock/gomock" 15 . "github.com/onsi/ginkgo/v2" 16 . "github.com/onsi/gomega" 17 "github.com/sirupsen/logrus" 18 ) 19 20 func TestServer(t *testing.T) { 21 RegisterFailHandler(Fail) 22 RunSpecs(t, "Providers/Provtarget") 23 } 24 25 var _ = Describe("Provision", func() { 26 var ( 27 mockctl *gomock.Controller 28 mockresolver *MockTargetResolver 29 log *logrus.Entry 30 ctx context.Context 31 cancel func() 32 ) 33 34 BeforeEach(func() { 35 mockctl = gomock.NewController(GinkgoT()) 36 mockresolver = NewMockTargetResolver(mockctl) 37 mockresolver.EXPECT().Name().Return("Mock Resolver").AnyTimes() 38 RegisterTargetResolver(builddefaults.Provider()) 39 ctx, cancel = context.WithCancel(context.Background()) 40 log = logrus.NewEntry(logrus.New()) 41 log.Logger.Out = io.Discard 42 }) 43 44 AfterEach(func() { 45 mockctl.Finish() 46 cancel() 47 }) 48 49 Describe("RegisterTargetResolver", func() { 50 It("Should register the resolver", func() { 51 Expect(Name()).To(Equal("Choria JWT Resolver")) 52 RegisterTargetResolver(mockresolver) 53 Expect(Name()).To(Equal("Mock Resolver")) 54 }) 55 }) 56 57 Describe("Targets", func() { 58 It("Should handle no resolver", func() { 59 resolver = nil 60 t, err := Targets(ctx, log) 61 Expect(err).To(MatchError("no Provisioning Target Resolver registered")) 62 Expect(t.Count()).To(Equal(0)) 63 }) 64 65 It("Should handle empty response from the resolver", func() { 66 build.ProvisionBrokerURLs = "" 67 t, err := Targets(ctx, log) 68 Expect(err).To(MatchError("provisioning target plugin Choria JWT Resolver returned no servers")) 69 Expect(t.Count()).To(Equal(0)) 70 }) 71 72 It("Should handle invalid format hosts", func() { 73 build.ProvisionBrokerURLs = "foo,bar" 74 t, err := Targets(ctx, log) 75 Expect(err).To(MatchError("could not determine provisioning servers using Choria JWT Resolver provisioning target plugin: could not parse host foo: address foo: missing port in address")) 76 Expect(t.Count()).To(Equal(0)) 77 }) 78 79 It("Should handle valid format hosts", func() { 80 build.ProvisionBrokerURLs = "foo:4222, nats://bar:4222" 81 t, err := Targets(ctx, log) 82 Expect(err).ToNot(HaveOccurred()) 83 84 servers := t.Servers() 85 Expect(servers[0].Host()).To(Equal("foo")) 86 Expect(servers[1].Host()).To(Equal("bar")) 87 }) 88 }) 89 })