github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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 imagetesting "github.com/juju/juju/environs/imagemetadata/testing" 14 "github.com/juju/juju/environs/simplestreams" 15 "github.com/juju/juju/provider/common" 16 coretesting "github.com/juju/juju/testing" 17 ) 18 19 type archSuite struct { 20 coretesting.FakeJujuXDGDataHomeSuite 21 } 22 23 var _ = gc.Suite(&archSuite{}) 24 25 func (s *archSuite) setupMetadata(c *gc.C, arches []string) (environs.Environ, simplestreams.CloudSpec) { 26 imagetesting.PatchOfficialDataSources(&s.CleanupSuite, "") 27 env := &mockEnviron{ 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 52 metadataDir := c.MkDir() 53 stor, err := filestorage.NewFileStorageWriter(metadataDir) 54 c.Assert(err, jc.ErrorIsNil) 55 err = imagemetadata.MergeAndWriteMetadata("precise", images, &cloudSpec, stor) 56 c.Assert(err, jc.ErrorIsNil) 57 58 id := "SupportedArchitectures" 59 environs.RegisterImageDataSourceFunc(id, func(environs.Environ) (simplestreams.DataSource, error) { 60 return simplestreams.NewURLDataSource(id, "file://"+metadataDir+"/images", false, simplestreams.DEFAULT_CLOUD_DATA, false), nil 61 }) 62 s.AddCleanup(func(*gc.C) { 63 environs.UnregisterImageDataSourceFunc(id) 64 }) 65 66 return env, cloudSpec 67 } 68 69 func (s *archSuite) TestSupportedArchitecturesNone(c *gc.C) { 70 env, cloudSpec := s.setupMetadata(c, nil) 71 imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{ 72 CloudSpec: cloudSpec, 73 }) 74 arches, err := common.SupportedArchitectures(env, imageConstraint) 75 c.Assert(err, jc.ErrorIsNil) 76 c.Assert(arches, gc.HasLen, 0) 77 } 78 79 func (s *archSuite) TestSupportedArchitecturesOne(c *gc.C) { 80 env, cloudSpec := s.setupMetadata(c, []string{"ppc64el"}) 81 imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{ 82 CloudSpec: cloudSpec, 83 }) 84 arches, err := common.SupportedArchitectures(env, imageConstraint) 85 c.Assert(err, jc.ErrorIsNil) 86 c.Assert(arches, jc.SameContents, []string{"ppc64el"}) 87 } 88 89 func (s *archSuite) TestSupportedArchitecturesMany(c *gc.C) { 90 env, cloudSpec := s.setupMetadata(c, []string{"ppc64el", "amd64"}) 91 imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{ 92 CloudSpec: cloudSpec, 93 }) 94 arches, err := common.SupportedArchitectures(env, imageConstraint) 95 c.Assert(err, jc.ErrorIsNil) 96 c.Assert(arches, jc.SameContents, []string{"amd64", "ppc64el"}) 97 }