github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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 "github.com/juju/names" 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/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 envtesting "github.com/juju/juju/environs/testing" 21 "github.com/juju/juju/jujuclient/jujuclienttesting" 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 func init() { 31 provider := mockEnvironProvider{} 32 environs.RegisterProvider("mock", provider) 33 } 34 35 type baseImageMetadataSuite struct { 36 coretesting.BaseSuite 37 38 resources *common.Resources 39 authorizer testing.FakeAuthorizer 40 41 api *imagemetadata.API 42 state *mockState 43 } 44 45 func (s *baseImageMetadataSuite) SetUpSuite(c *gc.C) { 46 s.BaseSuite.SetUpSuite(c) 47 imagetesting.PatchOfficialDataSources(&s.CleanupSuite, "test:") 48 } 49 50 func (s *baseImageMetadataSuite) SetUpTest(c *gc.C) { 51 s.BaseSuite.SetUpTest(c) 52 s.resources = common.NewResources() 53 s.authorizer = testing.FakeAuthorizer{names.NewUserTag("testuser"), true} 54 55 s.state = s.constructState(testConfig(c)) 56 57 var err error 58 s.api, err = imagemetadata.CreateAPI(s.state, s.resources, s.authorizer) 59 c.Assert(err, jc.ErrorIsNil) 60 } 61 62 func (s *baseImageMetadataSuite) assertCalls(c *gc.C, expectedCalls ...string) { 63 s.state.Stub.CheckCallNames(c, expectedCalls...) 64 } 65 66 const ( 67 findMetadata = "findMetadata" 68 saveMetadata = "saveMetadata" 69 deleteMetadata = "deleteMetadata" 70 environConfig = "environConfig" 71 ) 72 73 func (s *baseImageMetadataSuite) constructState(cfg *config.Config) *mockState { 74 return &mockState{ 75 Stub: &gitjujutesting.Stub{}, 76 findMetadata: func(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) { 77 return nil, nil 78 }, 79 saveMetadata: func(m []cloudimagemetadata.Metadata) error { 80 return nil 81 }, 82 deleteMetadata: func(imageId string) error { 83 return nil 84 }, 85 environConfig: func() (*config.Config, error) { 86 return cfg, nil 87 }, 88 } 89 } 90 91 type mockState struct { 92 *gitjujutesting.Stub 93 94 findMetadata func(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) 95 saveMetadata func(m []cloudimagemetadata.Metadata) error 96 deleteMetadata func(imageId string) error 97 environConfig func() (*config.Config, error) 98 } 99 100 func (st *mockState) FindMetadata(f cloudimagemetadata.MetadataFilter) (map[string][]cloudimagemetadata.Metadata, error) { 101 st.Stub.MethodCall(st, findMetadata, f) 102 return st.findMetadata(f) 103 } 104 105 func (st *mockState) SaveMetadata(m []cloudimagemetadata.Metadata) error { 106 st.Stub.MethodCall(st, saveMetadata, m) 107 return st.saveMetadata(m) 108 } 109 110 func (st *mockState) DeleteMetadata(imageId string) error { 111 st.Stub.MethodCall(st, deleteMetadata, imageId) 112 return st.deleteMetadata(imageId) 113 } 114 115 func (st *mockState) ModelConfig() (*config.Config, error) { 116 st.Stub.MethodCall(st, environConfig) 117 return st.environConfig() 118 } 119 120 func testConfig(c *gc.C) *config.Config { 121 attrs := coretesting.FakeConfig().Merge(coretesting.Attrs{ 122 "type": "mock", 123 "controller": true, 124 }) 125 env, err := environs.Prepare( 126 envtesting.BootstrapContext(c), 127 jujuclienttesting.NewMemStore(), 128 environs.PrepareParams{ 129 ControllerName: "dummycontroller", 130 BaseConfig: attrs, 131 CloudName: "dummy", 132 }, 133 ) 134 c.Assert(err, jc.ErrorIsNil) 135 return env.Config() 136 }