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  }