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  }