Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(780)

Delta Between Two Patch Sets: environs/tools/tools_test.go

Issue 13278043: Bootstrap uses tools matching major.minor (Closed)
Left Patch Set: Bootstrap uses tools matching major.minor Created 11 years, 7 months ago
Right Patch Set: Bootstrap uses tools matching major.minor Created 11 years, 7 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « environs/tools/tools.go ('k') | provider/instance.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
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
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
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
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 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b