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  }