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  }