github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/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  				Type: "dummy-cloud",
   111  				Regions: []jujucloud.Region{
   112  					{Name: "dummy-region"},
   113  					{Name: "another-region"},
   114  				},
   115  			},
   116  		},
   117  	}
   118  }
   119  
   120  type fakeAPIConnection struct {
   121  	api.Connection
   122  }
   123  
   124  func (*fakeAPIConnection) Close() error {
   125  	return nil
   126  }
   127  
   128  type fakeModelDefaultsAPI struct {
   129  	values        map[string]interface{}
   130  	cloud, region string
   131  	defaults      config.ModelDefaultAttributes
   132  	err           error
   133  	keys          []string
   134  }
   135  
   136  func (f *fakeModelDefaultsAPI) Close() error {
   137  	return nil
   138  }
   139  
   140  func (f *fakeModelDefaultsAPI) ModelGet() (map[string]interface{}, error) {
   141  	return f.values, nil
   142  }
   143  
   144  func (f *fakeModelDefaultsAPI) ModelDefaults() (config.ModelDefaultAttributes, error) {
   145  	return f.defaults, nil
   146  }
   147  
   148  func (f *fakeModelDefaultsAPI) SetModelDefaults(cloud, region string, cfg map[string]interface{}) error {
   149  	if f.err != nil {
   150  		return f.err
   151  	}
   152  	f.cloud = cloud
   153  	f.region = region
   154  	for name, val := range cfg {
   155  		f.defaults[name] = config.AttributeDefaultValues{Controller: val}
   156  	}
   157  	return nil
   158  }
   159  
   160  func (f *fakeModelDefaultsAPI) UnsetModelDefaults(cloud, region string, keys ...string) error {
   161  	if f.err != nil {
   162  		return f.err
   163  	}
   164  	f.cloud = cloud
   165  	f.region = region
   166  	for _, key := range keys {
   167  		delete(f.defaults, key)
   168  	}
   169  	return nil
   170  }
   171  
   172  func (f *fakeModelDefaultsAPI) ModelSet(config map[string]interface{}) error {
   173  	f.values = config
   174  	return f.err
   175  }
   176  
   177  func (f *fakeModelDefaultsAPI) ModelUnset(keys ...string) error {
   178  	f.keys = keys
   179  	return f.err
   180  }
   181  
   182  type fakeCloudAPI struct {
   183  	clouds map[string]jujucloud.Cloud
   184  }
   185  
   186  func (f *fakeCloudAPI) Close() error { return nil }
   187  func (f *fakeCloudAPI) DefaultCloud() (names.CloudTag, error) {
   188  	return names.NewCloudTag("dummy"), nil
   189  }
   190  func (f *fakeCloudAPI) Cloud(name names.CloudTag) (jujucloud.Cloud, error) {
   191  	var (
   192  		c  jujucloud.Cloud
   193  		ok bool
   194  	)
   195  	if c, ok = f.clouds[name.String()]; !ok {
   196  		return jujucloud.Cloud{}, errors.New("Unknown cloud")
   197  	}
   198  	return c, nil
   199  }