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 }