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

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

Issue 14527043: Fix tools metadata generation for null provider
Left Patch Set: Fix tools metadata generation for null provider Created 11 years, 6 months ago
Right Patch Set: Fix tools metadata generation for null provider Created 11 years, 5 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/simplestreams.go ('k') | environs/tools/tools.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 2013 Canonical Ltd. 1 // Copyright 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 "flag" 7 "flag"
8 "fmt" 8 "fmt"
9 "io" 9 "io"
10 "path/filepath"
11 "reflect" 10 "reflect"
12 "testing" 11 "testing"
13 12
14 "launchpad.net/goamz/aws" 13 "launchpad.net/goamz/aws"
15 gc "launchpad.net/gocheck" 14 gc "launchpad.net/gocheck"
16 15
17 "launchpad.net/juju-core/environs/filestorage" 16 "launchpad.net/juju-core/environs/filestorage"
18 "launchpad.net/juju-core/environs/simplestreams" 17 "launchpad.net/juju-core/environs/simplestreams"
19 sstesting "launchpad.net/juju-core/environs/simplestreams/testing" 18 sstesting "launchpad.net/juju-core/environs/simplestreams/testing"
20 "launchpad.net/juju-core/environs/storage" 19 "launchpad.net/juju-core/environs/storage"
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 FileType: "tar.gz", 273 FileType: "tar.gz",
275 SHA256: "447aeb6a934a5eaec4f703eda4ef2dde", 274 SHA256: "447aeb6a934a5eaec4f703eda4ef2dde",
276 } 275 }
277 c.Assert(err, gc.IsNil) 276 c.Assert(err, gc.IsNil)
278 c.Assert(toolsMetadata[0], gc.DeepEquals, expectedMetadata) 277 c.Assert(toolsMetadata[0], gc.DeepEquals, expectedMetadata)
279 } 278 }
280 279
281 func assertMetadataMatches(c *gc.C, storageDir string, toolList coretools.List, metadata []*tools.ToolsMetadata) { 280 func assertMetadataMatches(c *gc.C, storageDir string, toolList coretools.List, metadata []*tools.ToolsMetadata) {
282 var expectedMetadata []*tools.ToolsMetadata = make([]*tools.ToolsMetadat a, len(toolList)) 281 var expectedMetadata []*tools.ToolsMetadata = make([]*tools.ToolsMetadat a, len(toolList))
283 for i, tool := range toolList { 282 for i, tool := range toolList {
284 if tool.Size == 0 {
285 path := filepath.Join(storageDir, tools.StorageName(tool .Version))
286 size, sha256 := ttesting.SHA256sum(c, path)
287 tool.SHA256 = sha256
288 tool.Size = size
289 }
290 expectedMetadata[i] = &tools.ToolsMetadata{ 283 expectedMetadata[i] = &tools.ToolsMetadata{
291 Release: tool.Version.Series, 284 Release: tool.Version.Series,
292 Version: tool.Version.Number.String(), 285 Version: tool.Version.Number.String(),
293 Arch: tool.Version.Arch, 286 Arch: tool.Version.Arch,
294 Size: tool.Size, 287 Size: tool.Size,
295 Path: fmt.Sprintf("releases/juju-%s.tgz", tool.Versi on.String()), 288 Path: fmt.Sprintf("releases/juju-%s.tgz", tool.Versi on.String()),
296 FileType: "tar.gz", 289 FileType: "tar.gz",
297 SHA256: tool.SHA256, 290 SHA256: tool.SHA256,
298 } 291 }
299 } 292 }
300 c.Assert(metadata, gc.DeepEquals, expectedMetadata) 293 c.Assert(metadata, gc.DeepEquals, expectedMetadata)
301 } 294 }
302 295
303 func (s *simplestreamsSuite) TestWriteMetadataNoFetch(c *gc.C) { 296 func (s *simplestreamsSuite) TestWriteMetadataNoFetch(c *gc.C) {
304 toolsList := coretools.List{ 297 toolsList := coretools.List{
305 { 298 {
306 Version: version.MustParseBinary("1.2.3-precise-amd64"), 299 Version: version.MustParseBinary("1.2.3-precise-amd64"),
307 Size: 123, 300 Size: 123,
308 SHA256: "abcd", 301 SHA256: "abcd",
309 }, { 302 }, {
310 Version: version.MustParseBinary("2.0.1-raring-amd64"), 303 Version: version.MustParseBinary("2.0.1-raring-amd64"),
311 Size: 456, 304 Size: 456,
312 SHA256: "xyz", 305 SHA256: "xyz",
313 }, 306 },
314 } 307 }
315 dir := c.MkDir() 308 dir := c.MkDir()
316 writer, err := filestorage.NewFileStorageWriter(dir, filestorage.UseDefa ultTmpDir) 309 writer, err := filestorage.NewFileStorageWriter(dir, filestorage.UseDefa ultTmpDir)
317 c.Assert(err, gc.IsNil) 310 c.Assert(err, gc.IsNil)
318 » err = tools.MergeAndWriteMetadata(writer, toolsList, tools.DontResolve) 311 » err = tools.MergeAndWriteMetadata(writer, toolsList)
319 c.Assert(err, gc.IsNil) 312 c.Assert(err, gc.IsNil)
320 metadata := ttesting.ParseMetadata(c, dir) 313 metadata := ttesting.ParseMetadata(c, dir)
321 assertMetadataMatches(c, dir, toolsList, metadata) 314 assertMetadataMatches(c, dir, toolsList, metadata)
322 } 315 }
323 316
324 func (s *simplestreamsSuite) TestWriteMetadata(c *gc.C) { 317 func (s *simplestreamsSuite) TestWriteMetadata(c *gc.C) {
325 var versionStrings = []string{ 318 var versionStrings = []string{
326 "1.2.3-precise-amd64", 319 "1.2.3-precise-amd64",
327 "2.0.1-raring-amd64", 320 "2.0.1-raring-amd64",
328 } 321 }
329 dir := c.MkDir() 322 dir := c.MkDir()
330 ttesting.MakeTools(c, dir, "releases", versionStrings) 323 ttesting.MakeTools(c, dir, "releases", versionStrings)
331 324
332 toolsList := coretools.List{ 325 toolsList := coretools.List{
333 { 326 {
334 // If sha256/size is already known, do not recalculate 327 // If sha256/size is already known, do not recalculate
335 Version: version.MustParseBinary("1.2.3-precise-amd64"), 328 Version: version.MustParseBinary("1.2.3-precise-amd64"),
336 Size: 123, 329 Size: 123,
337 SHA256: "abcd", 330 SHA256: "abcd",
338 }, { 331 }, {
339 Version: version.MustParseBinary("2.0.1-raring-amd64"), 332 Version: version.MustParseBinary("2.0.1-raring-amd64"),
340 // The URL is not used for generating metadata. 333 // The URL is not used for generating metadata.
341 URL: "bogus://", 334 URL: "bogus://",
342 }, 335 },
343 } 336 }
344 writer, err := filestorage.NewFileStorageWriter(dir, filestorage.UseDefa ultTmpDir) 337 writer, err := filestorage.NewFileStorageWriter(dir, filestorage.UseDefa ultTmpDir)
345 c.Assert(err, gc.IsNil) 338 c.Assert(err, gc.IsNil)
346 » err = tools.MergeAndWriteMetadata(writer, toolsList, tools.Resolve) 339 » err = tools.MergeAndWriteMetadata(writer, toolsList)
347 c.Assert(err, gc.IsNil) 340 c.Assert(err, gc.IsNil)
348 metadata := ttesting.ParseMetadata(c, dir) 341 metadata := ttesting.ParseMetadata(c, dir)
349 assertMetadataMatches(c, dir, toolsList, metadata) 342 assertMetadataMatches(c, dir, toolsList, metadata)
350 } 343 }
351 344
352 func (s *simplestreamsSuite) TestWriteMetadataMergeWithExisting(c *gc.C) { 345 func (s *simplestreamsSuite) TestWriteMetadataMergeWithExisting(c *gc.C) {
353 dir := c.MkDir() 346 dir := c.MkDir()
354 existingToolsList := coretools.List{ 347 existingToolsList := coretools.List{
355 { 348 {
356 Version: version.MustParseBinary("1.2.3-precise-amd64"), 349 Version: version.MustParseBinary("1.2.3-precise-amd64"),
357 Size: 123, 350 Size: 123,
358 SHA256: "abc", 351 SHA256: "abc",
359 }, { 352 }, {
360 Version: version.MustParseBinary("2.0.1-raring-amd64"), 353 Version: version.MustParseBinary("2.0.1-raring-amd64"),
361 Size: 456, 354 Size: 456,
362 SHA256: "xyz", 355 SHA256: "xyz",
363 }, 356 },
364 } 357 }
365 writer, err := filestorage.NewFileStorageWriter(dir, filestorage.UseDefa ultTmpDir) 358 writer, err := filestorage.NewFileStorageWriter(dir, filestorage.UseDefa ultTmpDir)
366 c.Assert(err, gc.IsNil) 359 c.Assert(err, gc.IsNil)
367 » err = tools.MergeAndWriteMetadata(writer, existingToolsList, tools.Resol ve) 360 » err = tools.MergeAndWriteMetadata(writer, existingToolsList)
368 c.Assert(err, gc.IsNil) 361 c.Assert(err, gc.IsNil)
369 newToolsList := coretools.List{ 362 newToolsList := coretools.List{
370 existingToolsList[0], 363 existingToolsList[0],
371 { 364 {
372 Version: version.MustParseBinary("2.1.0-raring-amd64"), 365 Version: version.MustParseBinary("2.1.0-raring-amd64"),
373 Size: 789, 366 Size: 789,
374 SHA256: "def", 367 SHA256: "def",
375 }, 368 },
376 } 369 }
377 » err = tools.MergeAndWriteMetadata(writer, newToolsList, tools.Resolve) 370 » err = tools.MergeAndWriteMetadata(writer, newToolsList)
378 c.Assert(err, gc.IsNil) 371 c.Assert(err, gc.IsNil)
379 requiredToolsList := append(existingToolsList, newToolsList[1]) 372 requiredToolsList := append(existingToolsList, newToolsList[1])
380 metadata := ttesting.ParseMetadata(c, dir) 373 metadata := ttesting.ParseMetadata(c, dir)
381 assertMetadataMatches(c, dir, requiredToolsList, metadata) 374 assertMetadataMatches(c, dir, requiredToolsList, metadata)
382 } 375 }
383 376
384 type productSpecSuite struct{} 377 type productSpecSuite struct{}
385 378
386 var _ = gc.Suite(&productSpecSuite{}) 379 var _ = gc.Suite(&productSpecSuite{})
387 380
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 Version: "1.2.3", 569 Version: "1.2.3",
577 Arch: "amd64", 570 Arch: "amd64",
578 Path: "path3", 571 Path: "path3",
579 } 572 }
580 573
581 withSize := func(md *tools.ToolsMetadata, size int64) *tools.ToolsMetada ta { 574 withSize := func(md *tools.ToolsMetadata, size int64) *tools.ToolsMetada ta {
582 clone := *md 575 clone := *md
583 clone.Size = size 576 clone.Size = size
584 return &clone 577 return &clone
585 } 578 }
579 withSHA256 := func(md *tools.ToolsMetadata, sha256 string) *tools.ToolsM etadata {
580 clone := *md
581 clone.SHA256 = sha256
582 return &clone
583 }
586 584
587 type mdlist []*tools.ToolsMetadata 585 type mdlist []*tools.ToolsMetadata
588 type test struct { 586 type test struct {
589 name string 587 name string
590 lhs, rhs, merged []*tools.ToolsMetadata 588 lhs, rhs, merged []*tools.ToolsMetadata
589 err string
591 } 590 }
592 tests := []test{{ 591 tests := []test{{
593 name: "non-empty lhs, empty rhs", 592 name: "non-empty lhs, empty rhs",
594 lhs: mdlist{md1}, 593 lhs: mdlist{md1},
595 rhs: nil, 594 rhs: nil,
596 merged: mdlist{md1}, 595 merged: mdlist{md1},
597 }, { 596 }, {
598 name: "empty lhs, non-empty rhs", 597 name: "empty lhs, non-empty rhs",
599 lhs: nil, 598 lhs: nil,
600 rhs: mdlist{md2}, 599 rhs: mdlist{md2},
(...skipping 12 matching lines...) Expand all
613 name: "same tools in lhs and rhs, only lhs has a size: prefer lhs", 612 name: "same tools in lhs and rhs, only lhs has a size: prefer lhs",
614 lhs: mdlist{withSize(md1, 123)}, 613 lhs: mdlist{withSize(md1, 123)},
615 rhs: mdlist{md2}, 614 rhs: mdlist{md2},
616 merged: mdlist{withSize(md1, 123)}, 615 merged: mdlist{withSize(md1, 123)},
617 }, { 616 }, {
618 name: "same tools in lhs and rhs, only rhs has a size: prefer rhs", 617 name: "same tools in lhs and rhs, only rhs has a size: prefer rhs",
619 lhs: mdlist{md1}, 618 lhs: mdlist{md1},
620 rhs: mdlist{withSize(md2, 123)}, 619 rhs: mdlist{withSize(md2, 123)},
621 merged: mdlist{withSize(md2, 123)}, 620 merged: mdlist{withSize(md2, 123)},
622 }, { 621 }, {
623 » » name: "same tools in lhs and rhs, both have a size: prefer lhs ", 622 » » name: "same tools in lhs and rhs, both have the same size: pre fer lhs",
624 lhs: mdlist{withSize(md1, 123)}, 623 lhs: mdlist{withSize(md1, 123)},
625 » » rhs: mdlist{withSize(md2, 456)}, 624 » » rhs: mdlist{withSize(md2, 123)},
626 merged: mdlist{withSize(md1, 123)}, 625 merged: mdlist{withSize(md1, 123)},
626 }, {
627 name: "same tools in lhs and rhs, both have different sizes: err or",
628 lhs: mdlist{withSize(md1, 123)},
629 rhs: mdlist{withSize(md2, 456)},
630 err: "metadata mismatch for 1\\.2\\.3-precise-amd64: sizes=\\(1 23,456\\) sha256=\\(,\\)",
631 }, {
632 name: "same tools in lhs and rhs, both have same size but differ ent sha256: error",
633 lhs: mdlist{withSHA256(withSize(md1, 123), "a")},
634 rhs: mdlist{withSHA256(withSize(md2, 123), "b")},
635 err: "metadata mismatch for 1\\.2\\.3-precise-amd64: sizes=\\(1 23,123\\) sha256=\\(a,b\\)",
627 }, { 636 }, {
628 name: "lhs is a proper superset of rhs: union of lhs and rhs", 637 name: "lhs is a proper superset of rhs: union of lhs and rhs",
629 lhs: mdlist{md1, md3}, 638 lhs: mdlist{md1, md3},
630 rhs: mdlist{md1}, 639 rhs: mdlist{md1},
631 merged: mdlist{md1, md3}, 640 merged: mdlist{md1, md3},
632 }, { 641 }, {
633 name: "rhs is a proper superset of lhs: union of lhs and rhs", 642 name: "rhs is a proper superset of lhs: union of lhs and rhs",
634 lhs: mdlist{md1}, 643 lhs: mdlist{md1},
635 rhs: mdlist{md1, md3}, 644 rhs: mdlist{md1, md3},
636 merged: mdlist{md1, md3}, 645 merged: mdlist{md1, md3},
637 }} 646 }}
638 for i, test := range tests { 647 for i, test := range tests {
639 c.Logf("test %d: %s", i, test.name) 648 c.Logf("test %d: %s", i, test.name)
640 » » merged := tools.MergeMetadata(test.lhs, test.rhs) 649 » » merged, err := tools.MergeMetadata(test.lhs, test.rhs)
641 » » c.Assert(merged, gc.DeepEquals, test.merged) 650 » » if test.err == "" {
rog 2013/10/09 16:29:42 Thanks - I find this much easier to follow (and it
651 » » » c.Assert(err, gc.IsNil)
652 » » » c.Assert(merged, gc.DeepEquals, test.merged)
653 » » } else {
654 » » » c.Assert(err, gc.ErrorMatches, test.err)
655 » » » c.Assert(merged, gc.IsNil)
656 » » }
642 } 657 }
643 } 658 }
644 659
645 func (*metadataHelperSuite) TestReadWriteMetadata(c *gc.C) { 660 func (*metadataHelperSuite) TestReadWriteMetadata(c *gc.C) {
646 metadata := []*tools.ToolsMetadata{{ 661 metadata := []*tools.ToolsMetadata{{
647 Release: "precise", 662 Release: "precise",
648 Version: "1.2.3", 663 Version: "1.2.3",
649 Arch: "amd64", 664 Arch: "amd64",
650 Path: "path1", 665 Path: "path1",
651 }, { 666 }, {
(...skipping 11 matching lines...) Expand all
663 err = tools.WriteMetadata(stor, metadata) 678 err = tools.WriteMetadata(stor, metadata)
664 c.Assert(err, gc.IsNil) 679 c.Assert(err, gc.IsNil)
665 out, err = tools.ReadMetadata(stor) 680 out, err = tools.ReadMetadata(stor)
666 for _, md := range out { 681 for _, md := range out {
667 // FullPath is set by ReadMetadata. 682 // FullPath is set by ReadMetadata.
668 c.Assert(md.FullPath, gc.Not(gc.Equals), "") 683 c.Assert(md.FullPath, gc.Not(gc.Equals), "")
669 md.FullPath = "" 684 md.FullPath = ""
670 } 685 }
671 c.Assert(out, gc.DeepEquals, metadata) 686 c.Assert(out, gc.DeepEquals, metadata)
672 } 687 }
LEFTRIGHT

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