github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/provider/common/supportedarchitectures_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/environs" 11 "github.com/juju/juju/environs/filestorage" 12 "github.com/juju/juju/environs/imagemetadata" 13 "github.com/juju/juju/environs/simplestreams" 14 "github.com/juju/juju/provider/common" 15 coretesting "github.com/juju/juju/testing" 16 ) 17 18 type archSuite struct { 19 coretesting.FakeJujuHomeSuite 20 } 21 22 var _ = gc.Suite(&archSuite{}) 23 24 func (s *archSuite) setupMetadata(c *gc.C, arches []string) (environs.Environ, simplestreams.CloudSpec) { 25 s.PatchValue(&imagemetadata.DefaultBaseURL, "") 26 env := &mockEnviron{ 27 config: configGetter(c), 28 } 29 30 var images []*imagemetadata.ImageMetadata 31 for _, arch := range arches { 32 images = append(images, &imagemetadata.ImageMetadata{ 33 Id: "image-id", 34 Arch: arch, 35 RegionName: "Region", 36 Endpoint: "https://endpoint/", 37 }) 38 } 39 // Append an image from another region with some other arch to ensure it is ignored. 40 images = append(images, &imagemetadata.ImageMetadata{ 41 Id: "image-id", 42 Arch: "arch", 43 RegionName: "Region-Two", 44 Endpoint: "https://endpoint/", 45 }) 46 cloudSpec := simplestreams.CloudSpec{ 47 Region: "Region", 48 Endpoint: "https://endpoint/", 49 } 50 51 metadataDir := c.MkDir() 52 stor, err := filestorage.NewFileStorageWriter(metadataDir) 53 c.Assert(err, jc.ErrorIsNil) 54 err = imagemetadata.MergeAndWriteMetadata("precise", images, &cloudSpec, stor) 55 c.Assert(err, jc.ErrorIsNil) 56 57 id := "SupportedArchitectures" 58 environs.RegisterImageDataSourceFunc(id, func(environs.Environ) (simplestreams.DataSource, error) { 59 return simplestreams.NewURLDataSource(id, "file://"+metadataDir+"/images", false), nil 60 }) 61 s.AddCleanup(func(*gc.C) { 62 environs.UnregisterImageDataSourceFunc(id) 63 }) 64 65 return env, cloudSpec 66 } 67 68 func (s *archSuite) TestSupportedArchitecturesNone(c *gc.C) { 69 env, cloudSpec := s.setupMetadata(c, nil) 70 imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{ 71 CloudSpec: cloudSpec, 72 }) 73 arches, err := common.SupportedArchitectures(env, imageConstraint) 74 c.Assert(err, jc.ErrorIsNil) 75 c.Assert(arches, gc.HasLen, 0) 76 } 77 78 func (s *archSuite) TestSupportedArchitecturesOne(c *gc.C) { 79 env, cloudSpec := s.setupMetadata(c, []string{"ppc64el"}) 80 imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{ 81 CloudSpec: cloudSpec, 82 }) 83 arches, err := common.SupportedArchitectures(env, imageConstraint) 84 c.Assert(err, jc.ErrorIsNil) 85 c.Assert(arches, jc.SameContents, []string{"ppc64el"}) 86 } 87 88 func (s *archSuite) TestSupportedArchitecturesMany(c *gc.C) { 89 env, cloudSpec := s.setupMetadata(c, []string{"ppc64el", "amd64"}) 90 imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{ 91 CloudSpec: cloudSpec, 92 }) 93 arches, err := common.SupportedArchitectures(env, imageConstraint) 94 c.Assert(err, jc.ErrorIsNil) 95 c.Assert(arches, jc.SameContents, []string{"amd64", "ppc64el"}) 96 }