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  }