github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/client/imagemetadatamanager/package_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package imagemetadatamanager_test 5 6 import ( 7 stdtesting "testing" 8 9 "github.com/juju/names/v5" 10 gitjujutesting "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/apiserver/common" 15 "github.com/juju/juju/apiserver/facades/client/imagemetadatamanager" 16 "github.com/juju/juju/apiserver/testing" 17 "github.com/juju/juju/environs" 18 "github.com/juju/juju/environs/config" 19 imagetesting "github.com/juju/juju/environs/imagemetadata/testing" 20 "github.com/juju/juju/environs/simplestreams" 21 "github.com/juju/juju/provider/dummy" 22 "github.com/juju/juju/state/cloudimagemetadata" 23 coretesting "github.com/juju/juju/testing" 24 ) 25 26 func TestAll(t *stdtesting.T) { 27 gc.TestingT(t) 28 } 29 30 type baseImageMetadataSuite struct { 31 coretesting.BaseSuite 32 33 resources *common.Resources 34 authorizer testing.FakeAuthorizer 35 36 api *imagemetadatamanager.API 37 state *mockState 38 } 39 40 func (s *baseImageMetadataSuite) SetUpSuite(c *gc.C) { 41 s.BaseSuite.SetUpSuite(c) 42 imagetesting.PatchOfficialDataSources(&s.CleanupSuite, "test:") 43 } 44 45 func (s *baseImageMetadataSuite) SetUpTest(c *gc.C) { 46 s.BaseSuite.SetUpTest(c) 47 s.resources = common.NewResources() 48 s.authorizer = testing.FakeAuthorizer{Tag: names.NewUserTag("testuser"), Controller: true, AdminTag: names.NewUserTag("testuser")} 49 50 s.state = s.constructState(testConfig(c)) 51 52 var err error 53 s.api, err = imagemetadatamanager.CreateAPI(s.state, func() (environs.Environ, error) { 54 return &mockEnviron{}, nil 55 }, s.resources, s.authorizer) 56 c.Assert(err, jc.ErrorIsNil) 57 } 58 59 func (s *baseImageMetadataSuite) assertCalls(c *gc.C, expectedCalls ...string) { 60 s.state.Stub.CheckCallNames(c, expectedCalls...) 61 } 62 63 const ( 64 findMetadata = "findMetadata" 65 saveMetadata = "saveMetadata" 66 deleteMetadata = "deleteMetadata" 67 modelConfig = "modelConfig" 68 controllerTag = "controllerTag" 69 model = "model" 70 ) 71 72 func (s *baseImageMetadataSuite) constructState(cfg *config.Config) *mockState { 73 return &mockState{ 74 Stub: &gitjujutesting.Stub{}, 75 findMetadata: func(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) { 76 return nil, nil 77 }, 78 saveMetadata: func(m []cloudimagemetadata.Metadata) error { 79 return nil 80 }, 81 deleteMetadata: func(imageId string) error { 82 return nil 83 }, 84 modelConfig: func() (*config.Config, error) { 85 return cfg, nil 86 }, 87 controllerTag: func() names.ControllerTag { 88 return names.NewControllerTag("deadbeef-2f18-4fd2-967d-db9663db7bea") 89 }, 90 } 91 } 92 93 type mockState struct { 94 *gitjujutesting.Stub 95 96 findMetadata func(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) 97 saveMetadata func(m []cloudimagemetadata.Metadata) error 98 deleteMetadata func(imageId string) error 99 modelConfig func() (*config.Config, error) 100 controllerTag func() names.ControllerTag 101 } 102 103 func (st *mockState) FindMetadata(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) { 104 st.Stub.MethodCall(st, findMetadata, f) 105 return st.findMetadata(f) 106 } 107 108 func (st *mockState) SaveMetadata(m []cloudimagemetadata.Metadata) error { 109 st.Stub.MethodCall(st, saveMetadata, m) 110 return st.saveMetadata(m) 111 } 112 113 func (st *mockState) DeleteMetadata(imageId string) error { 114 st.Stub.MethodCall(st, deleteMetadata, imageId) 115 return st.deleteMetadata(imageId) 116 } 117 118 func (st *mockState) ModelConfig() (*config.Config, error) { 119 st.Stub.MethodCall(st, modelConfig) 120 return st.modelConfig() 121 } 122 123 func (st *mockState) ControllerTag() names.ControllerTag { 124 st.Stub.MethodCall(st, controllerTag) 125 return st.controllerTag() 126 } 127 128 func (st *mockState) Model() (imagemetadatamanager.Model, error) { 129 st.Stub.MethodCall(st, model) 130 return &mockModel{}, nil 131 } 132 133 type mockModel struct{} 134 135 func (*mockModel) CloudRegion() string { 136 return "some-region" 137 } 138 139 func testConfig(c *gc.C) *config.Config { 140 cfg, err := config.New(config.UseDefaults, coretesting.FakeConfig().Merge(coretesting.Attrs{ 141 "type": "mock", 142 })) 143 c.Assert(err, jc.ErrorIsNil) 144 return cfg 145 } 146 147 // mockEnviron is an environment without networking support. 148 type mockEnviron struct { 149 environs.Environ 150 } 151 152 func (e mockEnviron) Config() *config.Config { 153 cfg, err := config.New(config.NoDefaults, mockConfig()) 154 if err != nil { 155 panic("invalid configuration for testing") 156 } 157 return cfg 158 } 159 160 // Region is specified in the HasRegion interface. 161 func (e *mockEnviron) Region() (simplestreams.CloudSpec, error) { 162 return simplestreams.CloudSpec{ 163 Region: "dummy_region", 164 Endpoint: "https://anywhere", 165 }, nil 166 } 167 168 // mockConfig returns a configuration for the usage of the 169 // mock provider below. 170 func mockConfig() coretesting.Attrs { 171 return dummy.SampleConfig().Merge(coretesting.Attrs{ 172 "type": "mock", 173 }) 174 }