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 }