github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/environs/imagemetadata/validation_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package imagemetadata_test 5 6 import ( 7 "path" 8 "path/filepath" 9 10 jc "github.com/juju/testing/checkers" 11 "github.com/juju/utils" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/environs/filestorage" 15 "github.com/juju/juju/environs/imagemetadata" 16 "github.com/juju/juju/environs/simplestreams" 17 "github.com/juju/juju/testing" 18 ) 19 20 type ValidateSuite struct { 21 testing.BaseSuite 22 metadataDir string 23 } 24 25 var _ = gc.Suite(&ValidateSuite{}) 26 27 func (s *ValidateSuite) makeLocalMetadata(c *gc.C, id, region, series, endpoint, stream string) error { 28 metadata := []*imagemetadata.ImageMetadata{ 29 { 30 Id: id, 31 Arch: "amd64", 32 Stream: stream, 33 }, 34 } 35 cloudSpec := simplestreams.CloudSpec{ 36 Region: region, 37 Endpoint: endpoint, 38 } 39 targetStorage, err := filestorage.NewFileStorageWriter(s.metadataDir) 40 c.Assert(err, jc.ErrorIsNil) 41 err = imagemetadata.MergeAndWriteMetadata(series, metadata, &cloudSpec, targetStorage) 42 if err != nil { 43 return err 44 } 45 return nil 46 } 47 48 func (s *ValidateSuite) SetUpTest(c *gc.C) { 49 s.BaseSuite.SetUpTest(c) 50 s.metadataDir = c.MkDir() 51 } 52 53 func (s *ValidateSuite) assertMatch(c *gc.C, stream string) { 54 s.makeLocalMetadata(c, "1234", "region-2", "raring", "some-auth-url", stream) 55 metadataPath := filepath.Join(s.metadataDir, "images") 56 params := &simplestreams.MetadataLookupParams{ 57 Region: "region-2", 58 Series: "raring", 59 Architectures: []string{"amd64"}, 60 Endpoint: "some-auth-url", 61 Stream: stream, 62 Sources: []simplestreams.DataSource{ 63 simplestreams.NewURLDataSource("test", utils.MakeFileURL(metadataPath), utils.VerifySSLHostnames, simplestreams.DEFAULT_CLOUD_DATA, false)}, 64 } 65 imageIds, resolveInfo, err := imagemetadata.ValidateImageMetadata(params) 66 c.Assert(err, jc.ErrorIsNil) 67 c.Assert(imageIds, gc.DeepEquals, []string{"1234"}) 68 c.Check(resolveInfo, gc.DeepEquals, &simplestreams.ResolveInfo{ 69 Source: "test", 70 Signed: false, 71 IndexURL: utils.MakeFileURL(path.Join(metadataPath, "streams/v1/index.json")), 72 MirrorURL: "", 73 }) 74 } 75 76 func (s *ValidateSuite) TestMatch(c *gc.C) { 77 s.assertMatch(c, "") 78 s.assertMatch(c, imagemetadata.ReleasedStream) 79 s.assertMatch(c, "daily") 80 } 81 82 func (s *ValidateSuite) assertNoMatch(c *gc.C, stream string) { 83 s.makeLocalMetadata(c, "1234", "region-2", "raring", "some-auth-url", stream) 84 params := &simplestreams.MetadataLookupParams{ 85 Region: "region-2", 86 Series: "precise", 87 Architectures: []string{"amd64"}, 88 Endpoint: "some-auth-url", 89 Stream: stream, 90 Sources: []simplestreams.DataSource{ 91 simplestreams.NewURLDataSource("test", "file://"+s.metadataDir, utils.VerifySSLHostnames, simplestreams.DEFAULT_CLOUD_DATA, false)}, 92 } 93 _, _, err := imagemetadata.ValidateImageMetadata(params) 94 c.Assert(err, gc.Not(gc.IsNil)) 95 } 96 97 func (s *ValidateSuite) TestNoMatch(c *gc.C) { 98 s.assertNoMatch(c, "") 99 s.assertNoMatch(c, imagemetadata.ReleasedStream) 100 s.assertNoMatch(c, "daily") 101 }