github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/apiserver/imagemetadata/package_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package imagemetadata_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/imagemetadata" 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/state/cloudimagemetadata" 21 coretesting "github.com/juju/juju/testing" 22 ) 23 24 func TestAll(t *stdtesting.T) { 25 gc.TestingT(t) 26 } 27 28 type baseImageMetadataSuite struct { 29 coretesting.BaseSuite 30 31 resources *common.Resources 32 authorizer testing.FakeAuthorizer 33 34 api *imagemetadata.API 35 state *mockState 36 } 37 38 func (s *baseImageMetadataSuite) SetUpSuite(c *gc.C) { 39 s.BaseSuite.SetUpSuite(c) 40 imagetesting.PatchOfficialDataSources(&s.CleanupSuite, "test:") 41 } 42 43 func (s *baseImageMetadataSuite) SetUpTest(c *gc.C) { 44 s.BaseSuite.SetUpTest(c) 45 s.resources = common.NewResources() 46 s.authorizer = testing.FakeAuthorizer{Tag: names.NewUserTag("testuser"), EnvironManager: true, AdminTag: names.NewUserTag("testuser")} 47 48 s.state = s.constructState(testConfig(c), &mockModel{"meep"}) 49 50 var err error 51 s.api, err = imagemetadata.CreateAPI(s.state, func() (environs.Environ, error) { 52 return &mockEnviron{}, nil 53 }, s.resources, s.authorizer) 54 c.Assert(err, jc.ErrorIsNil) 55 } 56 57 func (s *baseImageMetadataSuite) assertCalls(c *gc.C, expectedCalls ...string) { 58 s.state.Stub.CheckCallNames(c, expectedCalls...) 59 } 60 61 const ( 62 findMetadata = "findMetadata" 63 saveMetadata = "saveMetadata" 64 deleteMetadata = "deleteMetadata" 65 environConfig = "environConfig" 66 ) 67 68 func (s *baseImageMetadataSuite) constructState(cfg *config.Config, model imagemetadata.Model) *mockState { 69 return &mockState{ 70 Stub: &gitjujutesting.Stub{}, 71 findMetadata: func(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) { 72 return nil, nil 73 }, 74 saveMetadata: func(m []cloudimagemetadata.Metadata) error { 75 return nil 76 }, 77 deleteMetadata: func(imageId string) error { 78 return nil 79 }, 80 environConfig: func() (*config.Config, error) { 81 return cfg, nil 82 }, 83 model: func() (imagemetadata.Model, error) { 84 return model, 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 environConfig func() (*config.Config, error) 99 model func() (imagemetadata.Model, 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, environConfig) 120 return st.environConfig() 121 } 122 123 func (st *mockState) Model() (imagemetadata.Model, error) { 124 st.Stub.MethodCall(st, "Model") 125 return st.model() 126 } 127 128 func (st *mockState) ControllerTag() names.ControllerTag { 129 st.Stub.MethodCall(st, "ControllerTag") 130 return st.controllerTag() 131 } 132 133 type mockModel struct { 134 cloudRegion string 135 } 136 137 func (m *mockModel) CloudRegion() string { 138 return m.cloudRegion 139 } 140 141 func testConfig(c *gc.C) *config.Config { 142 cfg, err := config.New(config.UseDefaults, coretesting.FakeConfig().Merge(coretesting.Attrs{ 143 "type": "mock", 144 })) 145 c.Assert(err, jc.ErrorIsNil) 146 return cfg 147 }