github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/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 "launchpad.net/gocheck" 9 10 "github.com/juju/juju/environs" 11 "github.com/juju/juju/environs/imagemetadata" 12 "github.com/juju/juju/environs/simplestreams" 13 "github.com/juju/juju/provider/common" 14 coretesting "github.com/juju/juju/testing" 15 ) 16 17 type archSuite struct { 18 coretesting.FakeJujuHomeSuite 19 } 20 21 var _ = gc.Suite(&archSuite{}) 22 23 func (s *archSuite) setupMetadata(c *gc.C, arches []string) (environs.Environ, simplestreams.CloudSpec) { 24 s.PatchValue(&imagemetadata.DefaultBaseURL, "") 25 stor := newStorage(s, c) 26 env := &mockEnviron{ 27 storage: stor, 28 config: configGetter(c), 29 } 30 31 var images []*imagemetadata.ImageMetadata 32 for _, arch := range arches { 33 images = append(images, &imagemetadata.ImageMetadata{ 34 Id: "image-id", 35 Arch: arch, 36 RegionName: "Region", 37 Endpoint: "https://endpoint/", 38 }) 39 } 40 // Append an image from another region with some other arch to ensure it is ignored. 41 images = append(images, &imagemetadata.ImageMetadata{ 42 Id: "image-id", 43 Arch: "arch", 44 RegionName: "Region-Two", 45 Endpoint: "https://endpoint/", 46 }) 47 cloudSpec := simplestreams.CloudSpec{ 48 Region: "Region", 49 Endpoint: "https://endpoint/", 50 } 51 err := imagemetadata.MergeAndWriteMetadata("precise", images, &cloudSpec, env.Storage()) 52 c.Assert(err, gc.IsNil) 53 return env, cloudSpec 54 } 55 56 func (s *archSuite) TestSupportedArchitecturesNone(c *gc.C) { 57 env, cloudSpec := s.setupMetadata(c, nil) 58 imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{ 59 CloudSpec: cloudSpec, 60 }) 61 arches, err := common.SupportedArchitectures(env, imageConstraint) 62 c.Assert(err, gc.IsNil) 63 c.Assert(arches, gc.HasLen, 0) 64 } 65 66 func (s *archSuite) TestSupportedArchitecturesOne(c *gc.C) { 67 env, cloudSpec := s.setupMetadata(c, []string{"ppc64"}) 68 imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{ 69 CloudSpec: cloudSpec, 70 }) 71 arches, err := common.SupportedArchitectures(env, imageConstraint) 72 c.Assert(err, gc.IsNil) 73 c.Assert(arches, jc.SameContents, []string{"ppc64"}) 74 } 75 76 func (s *archSuite) TestSupportedArchitecturesMany(c *gc.C) { 77 env, cloudSpec := s.setupMetadata(c, []string{"ppc64", "amd64"}) 78 imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{ 79 CloudSpec: cloudSpec, 80 }) 81 arches, err := common.SupportedArchitectures(env, imageConstraint) 82 c.Assert(err, gc.IsNil) 83 c.Assert(arches, jc.SameContents, []string{"amd64", "ppc64"}) 84 }