github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/client/charms/services/repofactory_test.go (about) 1 // Copyright 2021 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package services_test 5 6 import ( 7 "github.com/juju/loggo" 8 "github.com/juju/testing" 9 jc "github.com/juju/testing/checkers" 10 "go.uber.org/mock/gomock" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/apiserver/facades/client/charms/services" 14 "github.com/juju/juju/apiserver/facades/client/charms/services/mocks" 15 corecharm "github.com/juju/juju/core/charm" 16 "github.com/juju/juju/core/charm/repository" 17 "github.com/juju/juju/environs/config" 18 ) 19 20 var _ = gc.Suite(&repoFactoryTestSuite{}) 21 22 type repoFactoryTestSuite struct { 23 testing.IsolationSuite 24 25 stateBackend *mocks.MockStateBackend 26 modelBackend *mocks.MockModelBackend 27 repoFactory corecharm.RepositoryFactory 28 } 29 30 func (s *repoFactoryTestSuite) TestGetCharmHubRepository(c *gc.C) { 31 defer s.setupMocks(c).Finish() 32 33 modelCfg, err := config.New(config.UseDefaults, map[string]interface{}{ 34 config.NameKey: "foo", 35 config.TypeKey: "IAAS", 36 config.UUIDKey: "d0d2dad4-b899-405d-b8f7-52d0f9bbe24d", 37 }) 38 c.Assert(err, jc.ErrorIsNil) 39 40 s.modelBackend.EXPECT().Config().Return(modelCfg, nil) 41 42 repo, err := s.repoFactory.GetCharmRepository(corecharm.CharmHub) 43 c.Assert(err, jc.ErrorIsNil) 44 c.Assert(repo, gc.FitsTypeOf, new(repository.CharmHubRepository), gc.Commentf("expected to get a CharmHubRepository instance")) 45 } 46 47 func (s *repoFactoryTestSuite) TestGetCharmRepositoryMemoization(c *gc.C) { 48 defer s.setupMocks(c).Finish() 49 50 modelCfg, err := config.New(config.UseDefaults, map[string]interface{}{ 51 config.NameKey: "foo", 52 config.TypeKey: "IAAS", 53 config.UUIDKey: "d0d2dad4-b899-405d-b8f7-52d0f9bbe24d", 54 }) 55 c.Assert(err, jc.ErrorIsNil) 56 57 s.modelBackend.EXPECT().Config().Return(modelCfg, nil) 58 59 repo1, err := s.repoFactory.GetCharmRepository(corecharm.CharmHub) 60 c.Assert(err, jc.ErrorIsNil) 61 c.Assert(repo1, gc.FitsTypeOf, new(repository.CharmHubRepository), gc.Commentf("expected to get a CharmHubRepository instance")) 62 63 repo2, err := s.repoFactory.GetCharmRepository(corecharm.CharmHub) 64 c.Assert(err, jc.ErrorIsNil) 65 c.Assert(repo2, gc.FitsTypeOf, new(repository.CharmHubRepository), gc.Commentf("expected to get a CharmHubRepository instance")) 66 67 // Note: we are comparing pointer values here hence the use of gc.Equals. 68 c.Assert(repo1, gc.Equals, repo2, gc.Commentf("expected to get memoized instance for CharmHub repository")) 69 } 70 71 func (s *repoFactoryTestSuite) setupMocks(c *gc.C) *gomock.Controller { 72 ctrl := gomock.NewController(c) 73 s.stateBackend = mocks.NewMockStateBackend(ctrl) 74 s.modelBackend = mocks.NewMockModelBackend(ctrl) 75 76 s.repoFactory = services.NewCharmRepoFactory(services.CharmRepoFactoryConfig{ 77 Logger: loggo.GetLogger("test"), 78 StateBackend: s.stateBackend, 79 ModelBackend: s.modelBackend, 80 }) 81 return ctrl 82 }