LEFT | RIGHT |
1 // Copyright 2012, 2013 Canonical Ltd. | 1 // Copyright 2012, 2013 Canonical Ltd. |
2 // Licensed under the AGPLv3, see LICENCE file for details. | 2 // Licensed under the AGPLv3, see LICENCE file for details. |
3 | 3 |
4 package tools_test | 4 package tools_test |
5 | 5 |
6 import ( | 6 import ( |
7 gc "launchpad.net/gocheck" | 7 gc "launchpad.net/gocheck" |
8 | 8 |
9 "launchpad.net/juju-core/environs" | 9 "launchpad.net/juju-core/environs" |
10 "launchpad.net/juju-core/environs/config" | 10 "launchpad.net/juju-core/environs/config" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 for k, v := range attrs { | 52 for k, v := range attrs { |
53 final[k] = v | 53 final[k] = v |
54 } | 54 } |
55 cfg, err := config.New(final) | 55 cfg, err := config.New(final) |
56 c.Assert(err, gc.IsNil) | 56 c.Assert(err, gc.IsNil) |
57 env, err := environs.Prepare(cfg) | 57 env, err := environs.Prepare(cfg) |
58 c.Assert(err, gc.IsNil) | 58 c.Assert(err, gc.IsNil) |
59 s.env = env | 59 s.env = env |
60 envtesting.RemoveAllTools(c, s.env) | 60 envtesting.RemoveAllTools(c, s.env) |
61 } | 61 } |
62 | |
63 var ( | |
64 v100 = version.MustParse("1.0.0") | |
65 v100p64 = version.MustParseBinary("1.0.0-precise-amd64") | |
66 v100p32 = version.MustParseBinary("1.0.0-precise-i386") | |
67 v100p = []version.Binary{v100p64, v100p32} | |
68 | |
69 v100q64 = version.MustParseBinary("1.0.0-quantal-amd64") | |
70 v100q32 = version.MustParseBinary("1.0.0-quantal-i386") | |
71 v100q = []version.Binary{v100q64, v100q32} | |
72 v100all = append(v100p, v100q...) | |
73 | |
74 v1001 = version.MustParse("1.0.0.1") | |
75 v1001p64 = version.MustParseBinary("1.0.0.1-precise-amd64") | |
76 v100Xall = append(v100all, v1001p64) | |
77 | |
78 v110 = version.MustParse("1.1.0") | |
79 v110p64 = version.MustParseBinary("1.1.0-precise-amd64") | |
80 v110p32 = version.MustParseBinary("1.1.0-precise-i386") | |
81 v110p = []version.Binary{v110p64, v110p32} | |
82 | |
83 v110q64 = version.MustParseBinary("1.1.0-quantal-amd64") | |
84 v110q32 = version.MustParseBinary("1.1.0-quantal-i386") | |
85 v110q = []version.Binary{v110q64, v110q32} | |
86 v110all = append(v110p, v110q...) | |
87 | |
88 v120 = version.MustParse("1.2.0") | |
89 v120p64 = version.MustParseBinary("1.2.0-precise-amd64") | |
90 v120p32 = version.MustParseBinary("1.2.0-precise-i386") | |
91 v120p = []version.Binary{v120p64, v120p32} | |
92 | |
93 v120q64 = version.MustParseBinary("1.2.0-quantal-amd64") | |
94 v120q32 = version.MustParseBinary("1.2.0-quantal-i386") | |
95 v120q = []version.Binary{v120q64, v120q32} | |
96 v120all = append(v120p, v120q...) | |
97 v1all = append(v100Xall, append(v110all, v120all...)...) | |
98 | |
99 v220 = version.MustParse("2.2.0") | |
100 v220p32 = version.MustParseBinary("2.2.0-precise-i386") | |
101 v220p64 = version.MustParseBinary("2.2.0-precise-amd64") | |
102 v220q32 = version.MustParseBinary("2.2.0-quantal-i386") | |
103 v220q64 = version.MustParseBinary("2.2.0-quantal-amd64") | |
104 v220all = []version.Binary{v220p64, v220p32, v220q64, v220q32} | |
105 vAll = append(v1all, v220all...) | |
106 ) | |
107 | 62 |
108 func (s *ToolsSuite) uploadVersions(c *gc.C, storage environs.Storage, verses ..
.version.Binary) map[version.Binary]string { | 63 func (s *ToolsSuite) uploadVersions(c *gc.C, storage environs.Storage, verses ..
.version.Binary) map[version.Binary]string { |
109 uploaded := map[version.Binary]string{} | 64 uploaded := map[version.Binary]string{} |
110 for _, vers := range verses { | 65 for _, vers := range verses { |
111 uploaded[vers] = envtesting.UploadFakeToolsVersion(c, storage, v
ers).URL | 66 uploaded[vers] = envtesting.UploadFakeToolsVersion(c, storage, v
ers).URL |
112 } | 67 } |
113 return uploaded | 68 return uploaded |
114 } | 69 } |
115 | 70 |
116 func (s *ToolsSuite) uploadPrivate(c *gc.C, verses ...version.Binary) map[versio
n.Binary]string { | 71 func (s *ToolsSuite) uploadPrivate(c *gc.C, verses ...version.Binary) map[versio
n.Binary]string { |
(...skipping 14 matching lines...) Expand all Loading... |
131 expect []version.Binary | 86 expect []version.Binary |
132 err error | 87 err error |
133 }{{ | 88 }{{ |
134 info: "none available anywhere", | 89 info: "none available anywhere", |
135 major: 1, | 90 major: 1, |
136 err: envtools.ErrNoTools, | 91 err: envtools.ErrNoTools, |
137 }, { | 92 }, { |
138 info: "private tools only, none matching", | 93 info: "private tools only, none matching", |
139 major: 1, | 94 major: 1, |
140 minor: 2, | 95 minor: 2, |
141 » private: v220all, | 96 » private: envtesting.V220all, |
142 err: coretools.ErrNoMatches, | 97 err: coretools.ErrNoMatches, |
143 }, { | 98 }, { |
144 info: "tools found in private bucket", | 99 info: "tools found in private bucket", |
145 major: 1, | 100 major: 1, |
146 minor: 2, | 101 minor: 2, |
147 » private: vAll, | 102 » private: envtesting.VAll, |
148 » expect: v120all, | 103 » expect: envtesting.V120all, |
149 }, { | 104 }, { |
150 info: "tools found in public bucket", | 105 info: "tools found in public bucket", |
151 major: 1, | 106 major: 1, |
152 minor: 1, | 107 minor: 1, |
153 » public: vAll, | 108 » public: envtesting.VAll, |
154 » expect: v110all, | 109 » expect: envtesting.V110all, |
155 }, { | 110 }, { |
156 info: "tools found in both buckets, only taken from private", | 111 info: "tools found in both buckets, only taken from private", |
157 major: 1, | 112 major: 1, |
158 minor: 1, | 113 minor: 1, |
159 » private: v110p, | 114 » private: envtesting.V110p, |
160 » public: vAll, | 115 » public: envtesting.VAll, |
161 » expect: v110p, | 116 » expect: envtesting.V110p, |
162 }, { | 117 }, { |
163 info: "private tools completely block public ones", | 118 info: "private tools completely block public ones", |
164 major: 1, | 119 major: 1, |
165 » private: v220all, | 120 » private: envtesting.V220all, |
166 » public: vAll, | 121 » public: envtesting.VAll, |
167 err: coretools.ErrNoMatches, | 122 err: coretools.ErrNoMatches, |
168 }, { | 123 }, { |
169 info: "tools matching major version only", | 124 info: "tools matching major version only", |
170 major: 1, | 125 major: 1, |
171 minor: -1, | 126 minor: -1, |
172 » public: vAll, | 127 » public: envtesting.VAll, |
173 » expect: v1all, | 128 » expect: envtesting.V1all, |
174 }} | 129 }} |
175 | 130 |
176 func (s *ToolsSuite) TestFindTools(c *gc.C) { | 131 func (s *ToolsSuite) TestFindTools(c *gc.C) { |
177 for i, test := range findToolsTests { | 132 for i, test := range findToolsTests { |
178 c.Logf("\ntest %d: %s", i, test.info) | 133 c.Logf("\ntest %d: %s", i, test.info) |
179 s.Reset(c, nil) | 134 s.Reset(c, nil) |
180 private := s.uploadPrivate(c, test.private...) | 135 private := s.uploadPrivate(c, test.private...) |
181 public := s.uploadPublic(c, test.public...) | 136 public := s.uploadPublic(c, test.public...) |
182 actual, err := envtools.FindTools(environs.StorageInstances(s.en
v), test.major, test.minor, coretools.Filter{}) | 137 actual, err := envtools.FindTools(environs.StorageInstances(s.en
v), test.major, test.minor, coretools.Filter{}) |
183 if test.err != nil { | 138 if test.err != nil { |
184 if len(actual) > 0 { | 139 if len(actual) > 0 { |
185 c.Logf(actual.String()) | 140 c.Logf(actual.String()) |
186 } | 141 } |
187 c.Check(err, jc.Satisfies, errors.IsNotFoundError) | 142 c.Check(err, jc.Satisfies, errors.IsNotFoundError) |
188 continue | 143 continue |
189 } | 144 } |
190 source := private | 145 source := private |
191 if len(source) == 0 { | 146 if len(source) == 0 { |
192 // We only use the public bucket if the private one has
*no* envtools. | 147 // We only use the public bucket if the private one has
*no* envtools. |
193 source = public | 148 source = public |
194 } | 149 } |
195 expect := map[version.Binary]string{} | 150 expect := map[version.Binary]string{} |
196 for _, expected := range test.expect { | 151 for _, expected := range test.expect { |
197 expect[expected] = source[expected] | 152 expect[expected] = source[expected] |
198 } | 153 } |
199 c.Check(actual.URLs(), gc.DeepEquals, expect) | 154 c.Check(actual.URLs(), gc.DeepEquals, expect) |
200 } | 155 } |
201 } | 156 } |
202 | 157 |
203 var findBootstrapToolsTests = []struct { | |
204 info string | |
205 available []version.Binary | |
206 cliVersion version.Binary | |
207 defaultSeries string | |
208 agentVersion version.Number | |
209 development bool | |
210 arch string | |
211 expect []version.Binary | |
212 err error | |
213 }{{ | |
214 info: "no tools at all", | |
215 cliVersion: v100p64, | |
216 defaultSeries: "precise", | |
217 err: envtools.ErrNoTools, | |
218 }, { | |
219 info: "released cli: use newest compatible release version", | |
220 available: vAll, | |
221 cliVersion: v100p64, | |
222 defaultSeries: "precise", | |
223 expect: v100p, | |
224 }, { | |
225 info: "released cli: cli arch ignored", | |
226 available: vAll, | |
227 cliVersion: v100p32, | |
228 defaultSeries: "precise", | |
229 expect: v100p, | |
230 }, { | |
231 info: "released cli: cli series ignored", | |
232 available: vAll, | |
233 cliVersion: v100q64, | |
234 defaultSeries: "precise", | |
235 expect: v100p, | |
236 }, { | |
237 info: "released cli: series taken from default-series", | |
238 available: v120all, | |
239 cliVersion: v120p64, | |
240 defaultSeries: "quantal", | |
241 expect: v120q, | |
242 }, { | |
243 info: "released cli: ignore close dev match", | |
244 available: v100Xall, | |
245 cliVersion: v100p64, | |
246 defaultSeries: "precise", | |
247 expect: v100p, | |
248 }, { | |
249 info: "released cli: filter by arch constraints", | |
250 available: v120all, | |
251 cliVersion: v120p64, | |
252 defaultSeries: "precise", | |
253 arch: "i386", | |
254 expect: []version.Binary{v120p32}, | |
255 }, { | |
256 info: "released cli: specific released version", | |
257 available: vAll, | |
258 cliVersion: v100p64, | |
259 agentVersion: v100, | |
260 defaultSeries: "precise", | |
261 expect: v100p, | |
262 }, { | |
263 info: "released cli: specific dev version", | |
264 available: vAll, | |
265 cliVersion: v110p64, | |
266 agentVersion: v110, | |
267 defaultSeries: "precise", | |
268 expect: v110p, | |
269 }, { | |
270 info: "released cli: major upgrades bad", | |
271 available: v220all, | |
272 cliVersion: v100p64, | |
273 defaultSeries: "precise", | |
274 err: coretools.ErrNoMatches, | |
275 }, { | |
276 info: "released cli: minor upgrades bad", | |
277 available: v120all, | |
278 cliVersion: v100p64, | |
279 defaultSeries: "precise", | |
280 err: coretools.ErrNoMatches, | |
281 }, { | |
282 info: "released cli: major downgrades bad", | |
283 available: v100Xall, | |
284 cliVersion: v220p64, | |
285 defaultSeries: "precise", | |
286 err: coretools.ErrNoMatches, | |
287 }, { | |
288 info: "released cli: minor downgrades bad", | |
289 available: v100Xall, | |
290 cliVersion: v120p64, | |
291 defaultSeries: "quantal", | |
292 err: coretools.ErrNoMatches, | |
293 }, { | |
294 info: "released cli: no matching series", | |
295 available: vAll, | |
296 cliVersion: v100p64, | |
297 defaultSeries: "raring", | |
298 err: coretools.ErrNoMatches, | |
299 }, { | |
300 info: "released cli: no matching arches", | |
301 available: vAll, | |
302 cliVersion: v100p64, | |
303 defaultSeries: "precise", | |
304 arch: "arm", | |
305 err: coretools.ErrNoMatches, | |
306 }, { | |
307 info: "released cli: specific bad major 1", | |
308 available: vAll, | |
309 cliVersion: v220p64, | |
310 agentVersion: v120, | |
311 defaultSeries: "precise", | |
312 err: coretools.ErrNoMatches, | |
313 }, { | |
314 info: "released cli: specific bad major 2", | |
315 available: vAll, | |
316 cliVersion: v120p64, | |
317 agentVersion: v220, | |
318 defaultSeries: "precise", | |
319 err: coretools.ErrNoMatches, | |
320 }, { | |
321 info: "released cli: ignore dev tools 1", | |
322 available: v110all, | |
323 cliVersion: v100p64, | |
324 defaultSeries: "precise", | |
325 err: coretools.ErrNoMatches, | |
326 }, { | |
327 info: "released cli: ignore dev tools 2", | |
328 available: v110all, | |
329 cliVersion: v120p64, | |
330 defaultSeries: "precise", | |
331 err: coretools.ErrNoMatches, | |
332 }, { | |
333 info: "released cli: ignore dev tools 3", | |
334 available: []version.Binary{v1001p64}, | |
335 cliVersion: v100p64, | |
336 defaultSeries: "precise", | |
337 err: coretools.ErrNoMatches, | |
338 }, { | |
339 info: "released cli with dev setting respects agent-version", | |
340 available: vAll, | |
341 cliVersion: v100q32, | |
342 agentVersion: v1001, | |
343 defaultSeries: "precise", | |
344 development: true, | |
345 expect: []version.Binary{v1001p64}, | |
346 }, { | |
347 info: "dev cli respects agent-version", | |
348 available: vAll, | |
349 cliVersion: v100q32, | |
350 agentVersion: v1001, | |
351 defaultSeries: "precise", | |
352 expect: []version.Binary{v1001p64}, | |
353 }} | |
354 | |
355 func (s *ToolsSuite) TestFindBootstrapTools(c *gc.C) { | 158 func (s *ToolsSuite) TestFindBootstrapTools(c *gc.C) { |
356 » for i, test := range findBootstrapToolsTests { | 159 » for i, test := range envtesting.BootstrapToolsTests { |
357 » » c.Logf("\ntest %d: %s", i, test.info) | 160 » » c.Logf("\ntest %d: %s", i, test.Info) |
358 attrs := map[string]interface{}{ | 161 attrs := map[string]interface{}{ |
359 » » » "development": test.development, | 162 » » » "development": test.Development, |
360 » » » "default-series": test.defaultSeries, | 163 » » » "default-series": test.DefaultSeries, |
361 } | 164 } |
362 var agentVersion *version.Number | 165 var agentVersion *version.Number |
363 » » if test.agentVersion != version.Zero { | 166 » » if test.AgentVersion != version.Zero { |
364 » » » attrs["agent-version"] = test.agentVersion.String() | 167 » » » attrs["agent-version"] = test.AgentVersion.String() |
365 » » » agentVersion = &test.agentVersion | 168 » » » agentVersion = &test.AgentVersion |
366 } | 169 } |
367 s.Reset(c, attrs) | 170 s.Reset(c, attrs) |
368 » » version.Current = test.cliVersion | 171 » » version.Current = test.CliVersion |
369 » » available := s.uploadPrivate(c, test.available...) | 172 » » available := s.uploadPrivate(c, test.Available...) |
370 if len(available) > 0 { | 173 if len(available) > 0 { |
371 // These should never be chosen. | 174 // These should never be chosen. |
372 » » » s.uploadPublic(c, vAll...) | 175 » » » s.uploadPublic(c, envtesting.VAll...) |
373 } | 176 } |
374 | 177 |
375 cfg := s.env.Config() | 178 cfg := s.env.Config() |
376 actual, err := envtools.FindBootstrapTools( | 179 actual, err := envtools.FindBootstrapTools( |
377 » » » environs.StorageInstances(s.env), agentVersion, cfg.Defa
ultSeries(), &test.arch, cfg.Development()) | 180 » » » environs.StorageInstances(s.env), agentVersion, cfg.Defa
ultSeries(), &test.Arch, cfg.Development()) |
378 » » if test.err != nil { | 181 » » if test.Err != nil { |
379 if len(actual) > 0 { | 182 if len(actual) > 0 { |
380 c.Logf(actual.String()) | 183 c.Logf(actual.String()) |
381 } | 184 } |
382 c.Check(err, jc.Satisfies, errors.IsNotFoundError) | 185 c.Check(err, jc.Satisfies, errors.IsNotFoundError) |
383 continue | 186 continue |
384 } | 187 } |
385 expect := map[version.Binary]string{} | 188 expect := map[version.Binary]string{} |
386 » » for _, expected := range test.expect { | 189 » » for _, expected := range test.Expect { |
387 expect[expected] = available[expected] | 190 expect[expected] = available[expected] |
388 } | 191 } |
389 c.Check(actual.URLs(), gc.DeepEquals, expect) | 192 c.Check(actual.URLs(), gc.DeepEquals, expect) |
390 } | 193 } |
391 } | 194 } |
392 | 195 |
393 var findInstanceToolsTests = []struct { | 196 var findInstanceToolsTests = []struct { |
394 info string | 197 info string |
395 available []version.Binary | 198 available []version.Binary |
396 agentVersion version.Number | 199 agentVersion version.Number |
397 series string | 200 series string |
398 arch string | 201 arch string |
399 expect []version.Binary | 202 expect []version.Binary |
400 err error | 203 err error |
401 }{{ | 204 }{{ |
402 info: "nothing at all", | 205 info: "nothing at all", |
403 » agentVersion: v120, | 206 » agentVersion: envtesting.V120, |
404 series: "precise", | 207 series: "precise", |
405 err: envtools.ErrNoTools, | 208 err: envtools.ErrNoTools, |
406 }, { | 209 }, { |
407 info: "nothing matching 1", | 210 info: "nothing matching 1", |
408 » available: v100Xall, | 211 » available: envtesting.V100Xall, |
409 » agentVersion: v120, | 212 » agentVersion: envtesting.V120, |
410 series: "precise", | 213 series: "precise", |
411 err: coretools.ErrNoMatches, | 214 err: coretools.ErrNoMatches, |
412 }, { | 215 }, { |
413 info: "nothing matching 2", | 216 info: "nothing matching 2", |
414 » available: v120all, | 217 » available: envtesting.V120all, |
415 » agentVersion: v110, | 218 » agentVersion: envtesting.V110, |
416 series: "precise", | 219 series: "precise", |
417 err: coretools.ErrNoMatches, | 220 err: coretools.ErrNoMatches, |
418 }, { | 221 }, { |
419 info: "nothing matching 3", | 222 info: "nothing matching 3", |
420 » available: v120q, | 223 » available: envtesting.V120q, |
421 » agentVersion: v120, | 224 » agentVersion: envtesting.V120, |
422 series: "precise", | 225 series: "precise", |
423 err: coretools.ErrNoMatches, | 226 err: coretools.ErrNoMatches, |
424 }, { | 227 }, { |
425 info: "nothing matching 4", | 228 info: "nothing matching 4", |
426 » available: v120q, | 229 » available: envtesting.V120q, |
427 » agentVersion: v120, | 230 » agentVersion: envtesting.V120, |
428 series: "quantal", | 231 series: "quantal", |
429 arch: "arm", | 232 arch: "arm", |
430 err: coretools.ErrNoMatches, | 233 err: coretools.ErrNoMatches, |
431 }, { | 234 }, { |
432 info: "actual match 1", | 235 info: "actual match 1", |
433 » available: vAll, | 236 » available: envtesting.VAll, |
434 » agentVersion: v1001, | 237 » agentVersion: envtesting.V1001, |
435 » series: "precise", | 238 » series: "precise", |
436 » expect: []version.Binary{v1001p64}, | 239 » expect: []version.Binary{envtesting.V1001p64}, |
437 }, { | 240 }, { |
438 info: "actual match 2", | 241 info: "actual match 2", |
439 » available: vAll, | 242 » available: envtesting.VAll, |
440 » agentVersion: v120, | 243 » agentVersion: envtesting.V120, |
441 series: "quantal", | 244 series: "quantal", |
442 » expect: []version.Binary{v120q64, v120q32}, | 245 » expect: []version.Binary{envtesting.V120q64, envtesting.V120q32}, |
443 }, { | 246 }, { |
444 info: "actual match 3", | 247 info: "actual match 3", |
445 » available: vAll, | 248 » available: envtesting.VAll, |
446 » agentVersion: v110, | 249 » agentVersion: envtesting.V110, |
447 series: "quantal", | 250 series: "quantal", |
448 arch: "i386", | 251 arch: "i386", |
449 » expect: []version.Binary{v110q32}, | 252 » expect: []version.Binary{envtesting.V110q32}, |
450 }} | 253 }} |
451 | 254 |
452 func (s *ToolsSuite) TestFindInstanceTools(c *gc.C) { | 255 func (s *ToolsSuite) TestFindInstanceTools(c *gc.C) { |
453 for i, test := range findInstanceToolsTests { | 256 for i, test := range findInstanceToolsTests { |
454 c.Logf("\ntest %d: %s", i, test.info) | 257 c.Logf("\ntest %d: %s", i, test.info) |
455 s.Reset(c, map[string]interface{}{ | 258 s.Reset(c, map[string]interface{}{ |
456 "agent-version": test.agentVersion.String(), | 259 "agent-version": test.agentVersion.String(), |
457 }) | 260 }) |
458 available := s.uploadPrivate(c, test.available...) | 261 available := s.uploadPrivate(c, test.available...) |
459 if len(available) > 0 { | 262 if len(available) > 0 { |
460 // These should never be chosen. | 263 // These should never be chosen. |
461 » » » s.uploadPublic(c, vAll...) | 264 » » » s.uploadPublic(c, envtesting.VAll...) |
462 } | 265 } |
463 | 266 |
464 agentVersion, _ := s.env.Config().AgentVersion() | 267 agentVersion, _ := s.env.Config().AgentVersion() |
465 actual, err := envtools.FindInstanceTools(environs.StorageInstan
ces(s.env), agentVersion, test.series, &test.arch) | 268 actual, err := envtools.FindInstanceTools(environs.StorageInstan
ces(s.env), agentVersion, test.series, &test.arch) |
466 if test.err != nil { | 269 if test.err != nil { |
467 if len(actual) > 0 { | 270 if len(actual) > 0 { |
468 c.Logf(actual.String()) | 271 c.Logf(actual.String()) |
469 } | 272 } |
470 c.Check(err, jc.Satisfies, errors.IsNotFoundError) | 273 c.Check(err, jc.Satisfies, errors.IsNotFoundError) |
471 continue | 274 continue |
472 } | 275 } |
473 expect := map[version.Binary]string{} | 276 expect := map[version.Binary]string{} |
474 for _, expected := range test.expect { | 277 for _, expected := range test.expect { |
475 expect[expected] = available[expected] | 278 expect[expected] = available[expected] |
476 } | 279 } |
477 c.Check(actual.URLs(), gc.DeepEquals, expect) | 280 c.Check(actual.URLs(), gc.DeepEquals, expect) |
478 } | 281 } |
479 } | 282 } |
480 | 283 |
481 var findExactToolsTests = []struct { | 284 var findExactToolsTests = []struct { |
482 info string | 285 info string |
483 private []version.Binary | 286 private []version.Binary |
484 public []version.Binary | 287 public []version.Binary |
485 seek version.Binary | 288 seek version.Binary |
486 err error | 289 err error |
487 }{{ | 290 }{{ |
488 info: "nothing available", | 291 info: "nothing available", |
489 » seek: v100p64, | 292 » seek: envtesting.V100p64, |
490 err: envtools.ErrNoTools, | 293 err: envtools.ErrNoTools, |
491 }, { | 294 }, { |
492 info: "only non-matches available in private", | 295 info: "only non-matches available in private", |
493 » private: append(v110all, v100p32, v100q64, v1001p64), | 296 » private: append(envtesting.V110all, envtesting.V100p32, envtesting.V100q
64, envtesting.V1001p64), |
494 » seek: v100p64, | 297 » seek: envtesting.V100p64, |
495 err: coretools.ErrNoMatches, | 298 err: coretools.ErrNoMatches, |
496 }, { | 299 }, { |
497 info: "exact match available in private", | 300 info: "exact match available in private", |
498 » private: []version.Binary{v100p64}, | 301 » private: []version.Binary{envtesting.V100p64}, |
499 » seek: v100p64, | 302 » seek: envtesting.V100p64, |
500 }, { | 303 }, { |
501 info: "only non-matches available in public", | 304 info: "only non-matches available in public", |
502 » private: append(v110all, v100p32, v100q64, v1001p64), | 305 » private: append(envtesting.V110all, envtesting.V100p32, envtesting.V100q
64, envtesting.V1001p64), |
503 » seek: v100p64, | 306 » seek: envtesting.V100p64, |
504 err: coretools.ErrNoMatches, | 307 err: coretools.ErrNoMatches, |
505 }, { | 308 }, { |
506 info: "exact match available in public", | 309 info: "exact match available in public", |
507 » public: []version.Binary{v100p64}, | 310 » public: []version.Binary{envtesting.V100p64}, |
508 » seek: v100p64, | 311 » seek: envtesting.V100p64, |
509 }, { | 312 }, { |
510 info: "exact match in public blocked by private", | 313 info: "exact match in public blocked by private", |
511 » private: v110all, | 314 » private: envtesting.V110all, |
512 » public: []version.Binary{v100p64}, | 315 » public: []version.Binary{envtesting.V100p64}, |
513 » seek: v100p64, | 316 » seek: envtesting.V100p64, |
514 err: coretools.ErrNoMatches, | 317 err: coretools.ErrNoMatches, |
515 }} | 318 }} |
516 | 319 |
517 func (s *ToolsSuite) TestFindExactTools(c *gc.C) { | 320 func (s *ToolsSuite) TestFindExactTools(c *gc.C) { |
518 for i, test := range findExactToolsTests { | 321 for i, test := range findExactToolsTests { |
519 c.Logf("\ntest %d: %s", i, test.info) | 322 c.Logf("\ntest %d: %s", i, test.info) |
520 s.Reset(c, nil) | 323 s.Reset(c, nil) |
521 private := s.uploadPrivate(c, test.private...) | 324 private := s.uploadPrivate(c, test.private...) |
522 public := s.uploadPublic(c, test.public...) | 325 public := s.uploadPublic(c, test.public...) |
523 actual, err := envtools.FindExactTools(environs.StorageInstances
(s.env), test.seek.Number, test.seek.Series, test.seek.Arch) | 326 actual, err := envtools.FindExactTools(environs.StorageInstances
(s.env), test.seek.Number, test.seek.Series, test.seek.Arch) |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 c.Assert(err, gc.NotNil) | 383 c.Assert(err, gc.NotNil) |
581 c.Check(err, gc.ErrorMatches, "tools mismatch: expected series warty, go
t hoary") | 384 c.Check(err, gc.ErrorMatches, "tools mismatch: expected series warty, go
t hoary") |
582 } | 385 } |
583 | 386 |
584 func (s *ToolsSuite) TestCheckToolsSeriesRejectsToolsForMixedSeries(c *gc.C) { | 387 func (s *ToolsSuite) TestCheckToolsSeriesRejectsToolsForMixedSeries(c *gc.C) { |
585 list := fakeToolsList("precise", "raring") | 388 list := fakeToolsList("precise", "raring") |
586 err := envtools.CheckToolsSeries(list, "precise") | 389 err := envtools.CheckToolsSeries(list, "precise") |
587 c.Assert(err, gc.NotNil) | 390 c.Assert(err, gc.NotNil) |
588 c.Check(err, gc.ErrorMatches, "expected single series, got .*") | 391 c.Check(err, gc.ErrorMatches, "expected single series, got .*") |
589 } | 392 } |
LEFT | RIGHT |