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  }