github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/environs/imagemetadata_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package environs_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	jc "github.com/juju/testing/checkers"
     9  	"github.com/juju/utils"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/environs"
    13  	"github.com/juju/juju/environs/imagemetadata"
    14  	"github.com/juju/juju/environs/simplestreams"
    15  	sstesting "github.com/juju/juju/environs/simplestreams/testing"
    16  	envtesting "github.com/juju/juju/environs/testing"
    17  	"github.com/juju/juju/jujuclient/jujuclienttesting"
    18  	"github.com/juju/juju/provider/dummy"
    19  	"github.com/juju/juju/testing"
    20  	coretesting "github.com/juju/juju/testing"
    21  )
    22  
    23  type ImageMetadataSuite struct {
    24  	coretesting.BaseSuite
    25  }
    26  
    27  var _ = gc.Suite(&ImageMetadataSuite{})
    28  
    29  func (s *ImageMetadataSuite) TearDownTest(c *gc.C) {
    30  	dummy.Reset(c)
    31  	s.BaseSuite.TearDownTest(c)
    32  }
    33  
    34  func (s *ImageMetadataSuite) env(c *gc.C, imageMetadataURL, stream string) environs.Environ {
    35  	attrs := dummy.SampleConfig()
    36  	if stream != "" {
    37  		attrs = attrs.Merge(testing.Attrs{
    38  			"image-stream": stream,
    39  		})
    40  	}
    41  	if imageMetadataURL != "" {
    42  		attrs = attrs.Merge(testing.Attrs{
    43  			"image-metadata-url": imageMetadataURL,
    44  		})
    45  	}
    46  	env, err := environs.Prepare(
    47  		envtesting.BootstrapContext(c),
    48  		jujuclienttesting.NewMemStore(),
    49  		environs.PrepareParams{
    50  			ControllerName: attrs["name"].(string),
    51  			BaseConfig:     attrs,
    52  			CloudName:      "dummy",
    53  		},
    54  	)
    55  	c.Assert(err, jc.ErrorIsNil)
    56  	return env
    57  }
    58  
    59  func (s *ImageMetadataSuite) TestImageMetadataURLsNoConfigURL(c *gc.C) {
    60  	env := s.env(c, "", "")
    61  	sources, err := environs.ImageMetadataSources(env)
    62  	c.Assert(err, jc.ErrorIsNil)
    63  	sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{
    64  		{"https://streams.canonical.com/juju/images/releases/", imagemetadata.SimplestreamsImagesPublicKey},
    65  		{"http://cloud-images.ubuntu.com/releases/", imagemetadata.SimplestreamsImagesPublicKey},
    66  	})
    67  }
    68  
    69  func (s *ImageMetadataSuite) TestImageMetadataURLs(c *gc.C) {
    70  	env := s.env(c, "config-image-metadata-url", "")
    71  	sources, err := environs.ImageMetadataSources(env)
    72  	c.Assert(err, jc.ErrorIsNil)
    73  	sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{
    74  		{"config-image-metadata-url/", ""},
    75  		{"https://streams.canonical.com/juju/images/releases/", imagemetadata.SimplestreamsImagesPublicKey},
    76  		{"http://cloud-images.ubuntu.com/releases/", imagemetadata.SimplestreamsImagesPublicKey},
    77  	})
    78  }
    79  
    80  func (s *ImageMetadataSuite) TestImageMetadataURLsRegisteredFuncs(c *gc.C) {
    81  	environs.RegisterImageDataSourceFunc("id0", func(environs.Environ) (simplestreams.DataSource, error) {
    82  		return simplestreams.NewURLDataSource("id0", "betwixt/releases", utils.NoVerifySSLHostnames, simplestreams.DEFAULT_CLOUD_DATA, false), nil
    83  	})
    84  	environs.RegisterImageDataSourceFunc("id1", func(environs.Environ) (simplestreams.DataSource, error) {
    85  		return simplestreams.NewURLDataSource("id1", "yoink", utils.NoVerifySSLHostnames, simplestreams.SPECIFIC_CLOUD_DATA, false), nil
    86  	})
    87  	// overwrite the one previously registered against id1
    88  	environs.RegisterImageDataSourceFunc("id1", func(environs.Environ) (simplestreams.DataSource, error) {
    89  		return nil, errors.NewNotSupported(nil, "oyvey")
    90  	})
    91  	environs.RegisterUserImageDataSourceFunc("id2", func(environs.Environ) (simplestreams.DataSource, error) {
    92  		return simplestreams.NewURLDataSource("id2", "foobar", utils.NoVerifySSLHostnames, simplestreams.CUSTOM_CLOUD_DATA, false), nil
    93  	})
    94  	defer environs.UnregisterImageDataSourceFunc("id0")
    95  	defer environs.UnregisterImageDataSourceFunc("id1")
    96  	defer environs.UnregisterImageDataSourceFunc("id2")
    97  
    98  	env := s.env(c, "config-image-metadata-url", "")
    99  	sources, err := environs.ImageMetadataSources(env)
   100  	c.Assert(err, jc.ErrorIsNil)
   101  	sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{
   102  		{"config-image-metadata-url/", ""},
   103  		{"foobar/", ""},
   104  		{"betwixt/releases/", ""},
   105  		{"https://streams.canonical.com/juju/images/releases/", imagemetadata.SimplestreamsImagesPublicKey},
   106  		{"http://cloud-images.ubuntu.com/releases/", imagemetadata.SimplestreamsImagesPublicKey},
   107  	})
   108  }
   109  
   110  func (s *ImageMetadataSuite) TestImageMetadataURLsRegisteredFuncsError(c *gc.C) {
   111  	environs.RegisterImageDataSourceFunc("id0", func(environs.Environ) (simplestreams.DataSource, error) {
   112  		return nil, errors.New("oyvey!")
   113  	})
   114  	defer environs.UnregisterImageDataSourceFunc("id0")
   115  
   116  	env := s.env(c, "config-image-metadata-url", "")
   117  	_, err := environs.ImageMetadataSources(env)
   118  	c.Assert(err, gc.ErrorMatches, "oyvey!")
   119  }
   120  
   121  func (s *ImageMetadataSuite) TestImageMetadataURLsNonReleaseStream(c *gc.C) {
   122  	env := s.env(c, "", "daily")
   123  	sources, err := environs.ImageMetadataSources(env)
   124  	c.Assert(err, jc.ErrorIsNil)
   125  	sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{
   126  		{"https://streams.canonical.com/juju/images/daily/", imagemetadata.SimplestreamsImagesPublicKey},
   127  		{"http://cloud-images.ubuntu.com/daily/", imagemetadata.SimplestreamsImagesPublicKey},
   128  	})
   129  }