github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/model/fakeenv_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package model_test
     5  
     6  import (
     7  	"errors"
     8  
     9  	gc "gopkg.in/check.v1"
    10  	"gopkg.in/juju/names.v2"
    11  
    12  	"github.com/juju/juju/api"
    13  	jujucloud "github.com/juju/juju/cloud"
    14  	"github.com/juju/juju/environs/config"
    15  	"github.com/juju/juju/testing"
    16  )
    17  
    18  // ModelConfig related fake environment for testing.
    19  
    20  type fakeEnvSuite struct {
    21  	testing.FakeJujuXDGDataHomeSuite
    22  	fake *fakeEnvAPI
    23  }
    24  
    25  func (s *fakeEnvSuite) SetUpTest(c *gc.C) {
    26  	s.FakeJujuXDGDataHomeSuite.SetUpTest(c)
    27  	s.fake = &fakeEnvAPI{
    28  		values: map[string]interface{}{
    29  			"name":    "test-model",
    30  			"special": "special value",
    31  			"running": true,
    32  		},
    33  		defaults: config.ConfigValues{
    34  			"attr":  {Value: "foo", Source: "default"},
    35  			"attr2": {Value: "bar", Source: "controller"},
    36  			"attr3": {Value: "baz", Source: "region"},
    37  		},
    38  	}
    39  }
    40  
    41  type fakeEnvAPI struct {
    42  	values        map[string]interface{}
    43  	cloud, region string
    44  	defaults      config.ConfigValues
    45  	err           error
    46  	keys          []string
    47  	resetKeys     []string
    48  }
    49  
    50  func (f *fakeEnvAPI) Close() error {
    51  	return nil
    52  }
    53  
    54  func (f *fakeEnvAPI) ModelGet() (map[string]interface{}, error) {
    55  	return f.values, nil
    56  }
    57  
    58  func (f *fakeEnvAPI) ModelGetWithMetadata() (config.ConfigValues, error) {
    59  	result := make(config.ConfigValues)
    60  	for name, val := range f.values {
    61  		result[name] = config.ConfigValue{Value: val, Source: "model"}
    62  	}
    63  	return result, nil
    64  }
    65  
    66  func (f *fakeEnvAPI) ModelSet(config map[string]interface{}) error {
    67  	f.values = config
    68  	return f.err
    69  }
    70  
    71  func (f *fakeEnvAPI) ModelUnset(keys ...string) error {
    72  	f.resetKeys = keys
    73  	return f.err
    74  }
    75  
    76  // ModelDefaults related fake environment for testing.
    77  
    78  type fakeModelDefaultEnvSuite struct {
    79  	testing.FakeJujuXDGDataHomeSuite
    80  	fakeAPIRoot     *fakeAPIConnection
    81  	fakeDefaultsAPI *fakeModelDefaultsAPI
    82  	fakeCloudAPI    *fakeCloudAPI
    83  }
    84  
    85  func (s *fakeModelDefaultEnvSuite) SetUpTest(c *gc.C) {
    86  	s.FakeJujuXDGDataHomeSuite.SetUpTest(c)
    87  	s.fakeAPIRoot = &fakeAPIConnection{}
    88  	s.fakeDefaultsAPI = &fakeModelDefaultsAPI{
    89  		values: map[string]interface{}{
    90  			"name":    "test-model",
    91  			"special": "special value",
    92  			"running": true,
    93  		},
    94  		defaults: config.ModelDefaultAttributes{
    95  			"attr": {Default: "foo"},
    96  			"attr2": {
    97  				Controller: "bar",
    98  				Regions: []config.RegionDefaultValue{{
    99  					"dummy-region",
   100  					"dummy-value",
   101  				}, {
   102  					"another-region",
   103  					"another-value",
   104  				}}},
   105  		},
   106  	}
   107  	s.fakeCloudAPI = &fakeCloudAPI{
   108  		clouds: map[string]jujucloud.Cloud{
   109  			"cloud-dummy": {
   110  				Name: "dummy",
   111  				Type: "dummy-cloud",
   112  				Regions: []jujucloud.Region{
   113  					{Name: "dummy-region"},
   114  					{Name: "another-region"},
   115  				},
   116  			},
   117  		},
   118  	}
   119  }
   120  
   121  type fakeAPIConnection struct {
   122  	api.Connection
   123  }
   124  
   125  func (*fakeAPIConnection) Close() error {
   126  	return nil
   127  }
   128  
   129  type fakeModelDefaultsAPI struct {
   130  	values        map[string]interface{}
   131  	cloud, region string
   132  	defaults      config.ModelDefaultAttributes
   133  	err           error
   134  	keys          []string
   135  }
   136  
   137  func (f *fakeModelDefaultsAPI) Close() error {
   138  	return nil
   139  }
   140  
   141  func (f *fakeModelDefaultsAPI) ModelGet() (map[string]interface{}, error) {
   142  	return f.values, nil
   143  }
   144  
   145  func (f *fakeModelDefaultsAPI) ModelDefaults() (config.ModelDefaultAttributes, error) {
   146  	return f.defaults, nil
   147  }
   148  
   149  func (f *fakeModelDefaultsAPI) SetModelDefaults(cloud, region string, cfg map[string]interface{}) error {
   150  	if f.err != nil {
   151  		return f.err
   152  	}
   153  	f.cloud = cloud
   154  	f.region = region
   155  	for name, val := range cfg {
   156  		f.defaults[name] = config.AttributeDefaultValues{Controller: val}
   157  	}
   158  	return nil
   159  }
   160  
   161  func (f *fakeModelDefaultsAPI) UnsetModelDefaults(cloud, region string, keys ...string) error {
   162  	if f.err != nil {
   163  		return f.err
   164  	}
   165  	f.cloud = cloud
   166  	f.region = region
   167  	for _, key := range keys {
   168  		delete(f.defaults, key)
   169  	}
   170  	return nil
   171  }
   172  
   173  func (f *fakeModelDefaultsAPI) ModelSet(config map[string]interface{}) error {
   174  	f.values = config
   175  	return f.err
   176  }
   177  
   178  func (f *fakeModelDefaultsAPI) ModelUnset(keys ...string) error {
   179  	f.keys = keys
   180  	return f.err
   181  }
   182  
   183  type fakeCloudAPI struct {
   184  	clouds map[string]jujucloud.Cloud
   185  }
   186  
   187  func (f *fakeCloudAPI) Close() error { return nil }
   188  func (f *fakeCloudAPI) DefaultCloud() (names.CloudTag, error) {
   189  	return names.NewCloudTag("dummy"), nil
   190  }
   191  func (f *fakeCloudAPI) Cloud(name names.CloudTag) (jujucloud.Cloud, error) {
   192  	var (
   193  		c  jujucloud.Cloud
   194  		ok bool
   195  	)
   196  	if c, ok = f.clouds[name.String()]; !ok {
   197  		return jujucloud.Cloud{}, errors.New("Unknown cloud")
   198  	}
   199  	return c, nil
   200  }