github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/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/bootstrap"
    14  	"github.com/juju/juju/environs/imagemetadata"
    15  	"github.com/juju/juju/environs/simplestreams"
    16  	sstesting "github.com/juju/juju/environs/simplestreams/testing"
    17  	envtesting "github.com/juju/juju/environs/testing"
    18  	"github.com/juju/juju/juju/keys"
    19  	"github.com/juju/juju/jujuclient/jujuclienttesting"
    20  	"github.com/juju/juju/provider/dummy"
    21  	"github.com/juju/juju/testing"
    22  	coretesting "github.com/juju/juju/testing"
    23  )
    24  
    25  type ImageMetadataSuite struct {
    26  	coretesting.BaseSuite
    27  }
    28  
    29  var _ = gc.Suite(&ImageMetadataSuite{})
    30  
    31  func (s *ImageMetadataSuite) TearDownTest(c *gc.C) {
    32  	dummy.Reset(c)
    33  	s.BaseSuite.TearDownTest(c)
    34  }
    35  
    36  func (s *ImageMetadataSuite) env(c *gc.C, imageMetadataURL, stream string) environs.Environ {
    37  	attrs := dummy.SampleConfig()
    38  	if stream != "" {
    39  		attrs = attrs.Merge(testing.Attrs{
    40  			"image-stream": stream,
    41  		})
    42  	}
    43  	if imageMetadataURL != "" {
    44  		attrs = attrs.Merge(testing.Attrs{
    45  			"image-metadata-url": imageMetadataURL,
    46  		})
    47  	}
    48  	env, err := bootstrap.Prepare(
    49  		envtesting.BootstrapContext(c),
    50  		jujuclienttesting.NewMemStore(),
    51  		bootstrap.PrepareParams{
    52  			ControllerConfig: testing.FakeControllerConfig(),
    53  			ControllerName:   attrs["name"].(string),
    54  			ModelConfig:      attrs,
    55  			Cloud:            dummy.SampleCloudSpec(),
    56  			AdminSecret:      "admin-secret",
    57  		},
    58  	)
    59  	c.Assert(err, jc.ErrorIsNil)
    60  	return env
    61  }
    62  
    63  func (s *ImageMetadataSuite) TestImageMetadataURLsNoConfigURL(c *gc.C) {
    64  	env := s.env(c, "", "")
    65  	sources, err := environs.ImageMetadataSources(env)
    66  	c.Assert(err, jc.ErrorIsNil)
    67  	sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{
    68  		{"https://streams.canonical.com/juju/images/releases/", keys.JujuPublicKey},
    69  		{"http://cloud-images.ubuntu.com/releases/", imagemetadata.SimplestreamsImagesPublicKey},
    70  	})
    71  }
    72  
    73  func (s *ImageMetadataSuite) TestImageMetadataURLs(c *gc.C) {
    74  	env := s.env(c, "config-image-metadata-url", "")
    75  	sources, err := environs.ImageMetadataSources(env)
    76  	c.Assert(err, jc.ErrorIsNil)
    77  	sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{
    78  		{"config-image-metadata-url/", ""},
    79  		{"https://streams.canonical.com/juju/images/releases/", keys.JujuPublicKey},
    80  		{"http://cloud-images.ubuntu.com/releases/", imagemetadata.SimplestreamsImagesPublicKey},
    81  	})
    82  }
    83  
    84  func (s *ImageMetadataSuite) TestImageMetadataURLsRegisteredFuncs(c *gc.C) {
    85  	environs.RegisterImageDataSourceFunc("id0", func(environs.Environ) (simplestreams.DataSource, error) {
    86  		return simplestreams.NewURLDataSource("id0", "betwixt/releases", utils.NoVerifySSLHostnames, simplestreams.DEFAULT_CLOUD_DATA, false), nil
    87  	})
    88  	environs.RegisterImageDataSourceFunc("id1", func(environs.Environ) (simplestreams.DataSource, error) {
    89  		return simplestreams.NewURLDataSource("id1", "yoink", utils.NoVerifySSLHostnames, simplestreams.SPECIFIC_CLOUD_DATA, false), nil
    90  	})
    91  	// overwrite the one previously registered against id1
    92  	environs.RegisterImageDataSourceFunc("id1", func(environs.Environ) (simplestreams.DataSource, error) {
    93  		return nil, errors.NewNotSupported(nil, "oyvey")
    94  	})
    95  	environs.RegisterUserImageDataSourceFunc("id2", func(environs.Environ) (simplestreams.DataSource, error) {
    96  		return simplestreams.NewURLDataSource("id2", "foobar", utils.NoVerifySSLHostnames, simplestreams.CUSTOM_CLOUD_DATA, false), nil
    97  	})
    98  	defer environs.UnregisterImageDataSourceFunc("id0")
    99  	defer environs.UnregisterImageDataSourceFunc("id1")
   100  	defer environs.UnregisterImageDataSourceFunc("id2")
   101  
   102  	env := s.env(c, "config-image-metadata-url", "")
   103  	sources, err := environs.ImageMetadataSources(env)
   104  	c.Assert(err, jc.ErrorIsNil)
   105  	sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{
   106  		{"config-image-metadata-url/", ""},
   107  		{"foobar/", ""},
   108  		{"betwixt/releases/", ""},
   109  		{"https://streams.canonical.com/juju/images/releases/", keys.JujuPublicKey},
   110  		{"http://cloud-images.ubuntu.com/releases/", imagemetadata.SimplestreamsImagesPublicKey},
   111  	})
   112  }
   113  
   114  func (s *ImageMetadataSuite) TestImageMetadataURLsRegisteredFuncsError(c *gc.C) {
   115  	environs.RegisterImageDataSourceFunc("id0", func(environs.Environ) (simplestreams.DataSource, error) {
   116  		return nil, errors.New("oyvey!")
   117  	})
   118  	defer environs.UnregisterImageDataSourceFunc("id0")
   119  
   120  	env := s.env(c, "config-image-metadata-url", "")
   121  	_, err := environs.ImageMetadataSources(env)
   122  	c.Assert(err, gc.ErrorMatches, "oyvey!")
   123  }
   124  
   125  func (s *ImageMetadataSuite) TestImageMetadataURLsNonReleaseStream(c *gc.C) {
   126  	env := s.env(c, "", "daily")
   127  	sources, err := environs.ImageMetadataSources(env)
   128  	c.Assert(err, jc.ErrorIsNil)
   129  	sstesting.AssertExpectedSources(c, sources, []sstesting.SourceDetails{
   130  		{"https://streams.canonical.com/juju/images/daily/", keys.JujuPublicKey},
   131  		{"http://cloud-images.ubuntu.com/daily/", imagemetadata.SimplestreamsImagesPublicKey},
   132  	})
   133  }