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  })