github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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 gitjujutesting "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 "gopkg.in/juju/names.v2" 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 ) 70 71 func (s *baseImageMetadataSuite) constructState(cfg *config.Config) *mockState { 72 return &mockState{ 73 Stub: &gitjujutesting.Stub{}, 74 findMetadata: func(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) { 75 return nil, nil 76 }, 77 saveMetadata: func(m []cloudimagemetadata.Metadata) error { 78 return nil 79 }, 80 deleteMetadata: func(imageId string) error { 81 return nil 82 }, 83 modelConfig: func() (*config.Config, error) { 84 return cfg, nil 85 }, 86 controllerTag: func() names.ControllerTag { 87 return names.NewControllerTag("deadbeef-2f18-4fd2-967d-db9663db7bea") 88 }, 89 } 90 } 91 92 type mockState struct { 93 *gitjujutesting.Stub 94 95 findMetadata func(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) 96 saveMetadata func(m []cloudimagemetadata.Metadata) error 97 deleteMetadata func(imageId string) error 98 modelConfig func() (*config.Config, error) 99 controllerTag func() names.ControllerTag 100 } 101 102 func (st *mockState) FindMetadata(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) { 103 st.Stub.MethodCall(st, findMetadata, f) 104 return st.findMetadata(f) 105 } 106 107 func (st *mockState) SaveMetadata(m []cloudimagemetadata.Metadata) error { 108 st.Stub.MethodCall(st, saveMetadata, m) 109 return st.saveMetadata(m) 110 } 111 112 func (st *mockState) DeleteMetadata(imageId string) error { 113 st.Stub.MethodCall(st, deleteMetadata, imageId) 114 return st.deleteMetadata(imageId) 115 } 116 117 func (st *mockState) ModelConfig() (*config.Config, error) { 118 st.Stub.MethodCall(st, modelConfig) 119 return st.modelConfig() 120 } 121 122 func (st *mockState) ControllerTag() names.ControllerTag { 123 st.Stub.MethodCall(st, controllerTag) 124 return st.controllerTag() 125 } 126 127 func testConfig(c *gc.C) *config.Config { 128 cfg, err := config.New(config.UseDefaults, coretesting.FakeConfig().Merge(coretesting.Attrs{ 129 "type": "mock", 130 })) 131 c.Assert(err, jc.ErrorIsNil) 132 return cfg 133 } 134 135 // mockEnviron is an environment without networking support. 136 type mockEnviron struct { 137 environs.Environ 138 } 139 140 func (e mockEnviron) Config() *config.Config { 141 cfg, err := config.New(config.NoDefaults, mockConfig()) 142 if err != nil { 143 panic("invalid configuration for testing") 144 } 145 return cfg 146 } 147 148 // Region is specified in the HasRegion interface. 149 func (e *mockEnviron) Region() (simplestreams.CloudSpec, error) { 150 return simplestreams.CloudSpec{ 151 Region: "dummy_region", 152 Endpoint: "https://anywhere", 153 }, nil 154 } 155 156 // mockConfig returns a configuration for the usage of the 157 // mock provider below. 158 func mockConfig() coretesting.Attrs { 159 return dummy.SampleConfig().Merge(coretesting.Attrs{ 160 "type": "mock", 161 }) 162 }