github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/environs/imagemetadata/validation_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package imagemetadata_test
     5  
     6  import (
     7  	"path"
     8  	"path/filepath"
     9  
    10  	jc "github.com/juju/testing/checkers"
    11  	"github.com/juju/utils"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/environs/filestorage"
    15  	"github.com/juju/juju/environs/imagemetadata"
    16  	"github.com/juju/juju/environs/simplestreams"
    17  	"github.com/juju/juju/testing"
    18  )
    19  
    20  type ValidateSuite struct {
    21  	testing.BaseSuite
    22  	metadataDir string
    23  }
    24  
    25  var _ = gc.Suite(&ValidateSuite{})
    26  
    27  func (s *ValidateSuite) makeLocalMetadata(c *gc.C, id, region, series, endpoint, stream string) error {
    28  	metadata := []*imagemetadata.ImageMetadata{
    29  		{
    30  			Id:     id,
    31  			Arch:   "amd64",
    32  			Stream: stream,
    33  		},
    34  	}
    35  	cloudSpec := simplestreams.CloudSpec{
    36  		Region:   region,
    37  		Endpoint: endpoint,
    38  	}
    39  	targetStorage, err := filestorage.NewFileStorageWriter(s.metadataDir)
    40  	c.Assert(err, jc.ErrorIsNil)
    41  	err = imagemetadata.MergeAndWriteMetadata(series, metadata, &cloudSpec, targetStorage)
    42  	if err != nil {
    43  		return err
    44  	}
    45  	return nil
    46  }
    47  
    48  func (s *ValidateSuite) SetUpTest(c *gc.C) {
    49  	s.BaseSuite.SetUpTest(c)
    50  	s.metadataDir = c.MkDir()
    51  }
    52  
    53  func (s *ValidateSuite) assertMatch(c *gc.C, stream string) {
    54  	s.makeLocalMetadata(c, "1234", "region-2", "raring", "some-auth-url", stream)
    55  	metadataPath := filepath.Join(s.metadataDir, "images")
    56  	params := &simplestreams.MetadataLookupParams{
    57  		Region:        "region-2",
    58  		Series:        "raring",
    59  		Architectures: []string{"amd64"},
    60  		Endpoint:      "some-auth-url",
    61  		Stream:        stream,
    62  		Sources: []simplestreams.DataSource{
    63  			simplestreams.NewURLDataSource("test", utils.MakeFileURL(metadataPath), utils.VerifySSLHostnames, simplestreams.DEFAULT_CLOUD_DATA, false)},
    64  	}
    65  	imageIds, resolveInfo, err := imagemetadata.ValidateImageMetadata(params)
    66  	c.Assert(err, jc.ErrorIsNil)
    67  	c.Assert(imageIds, gc.DeepEquals, []string{"1234"})
    68  	c.Check(resolveInfo, gc.DeepEquals, &simplestreams.ResolveInfo{
    69  		Source:    "test",
    70  		Signed:    false,
    71  		IndexURL:  utils.MakeFileURL(path.Join(metadataPath, "streams/v1/index.json")),
    72  		MirrorURL: "",
    73  	})
    74  }
    75  
    76  func (s *ValidateSuite) TestMatch(c *gc.C) {
    77  	s.assertMatch(c, "")
    78  	s.assertMatch(c, imagemetadata.ReleasedStream)
    79  	s.assertMatch(c, "daily")
    80  }
    81  
    82  func (s *ValidateSuite) assertNoMatch(c *gc.C, stream string) {
    83  	s.makeLocalMetadata(c, "1234", "region-2", "raring", "some-auth-url", stream)
    84  	params := &simplestreams.MetadataLookupParams{
    85  		Region:        "region-2",
    86  		Series:        "precise",
    87  		Architectures: []string{"amd64"},
    88  		Endpoint:      "some-auth-url",
    89  		Stream:        stream,
    90  		Sources: []simplestreams.DataSource{
    91  			simplestreams.NewURLDataSource("test", "file://"+s.metadataDir, utils.VerifySSLHostnames, simplestreams.DEFAULT_CLOUD_DATA, false)},
    92  	}
    93  	_, _, err := imagemetadata.ValidateImageMetadata(params)
    94  	c.Assert(err, gc.Not(gc.IsNil))
    95  }
    96  
    97  func (s *ValidateSuite) TestNoMatch(c *gc.C) {
    98  	s.assertNoMatch(c, "")
    99  	s.assertNoMatch(c, imagemetadata.ReleasedStream)
   100  	s.assertNoMatch(c, "daily")
   101  }