github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/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/config"
    14  	"github.com/juju/juju/environs/configstore"
    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/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()
    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  	cfg, err := config.New(config.NoDefaults, attrs)
    47  	c.Assert(err, jc.ErrorIsNil)
    48  	env, err := environs.Prepare(cfg, envtesting.BootstrapContext(c), configstore.NewMem())
    49  	c.Assert(err, jc.ErrorIsNil)
    50  	return env
    51  }
    52  
    53  func (s *ImageMetadataSuite) TestImageMetadataURLsNoConfigURL(c *gc.C) {
    54  	env := s.env(c, "", "")
    55  	sources, err := environs.ImageMetadataSources(env)
    56  	c.Assert(err, jc.ErrorIsNil)
    57  	sstesting.AssertExpectedSources(c, sources, []string{
    58  		"http://cloud-images.ubuntu.com/releases/",
    59  	})
    60  }
    61  
    62  func (s *ImageMetadataSuite) TestImageMetadataURLs(c *gc.C) {
    63  	env := s.env(c, "config-image-metadata-url", "")
    64  	sources, err := environs.ImageMetadataSources(env)
    65  	c.Assert(err, jc.ErrorIsNil)
    66  	sstesting.AssertExpectedSources(c, sources, []string{
    67  		"config-image-metadata-url/", "http://cloud-images.ubuntu.com/releases/",
    68  	})
    69  }
    70  
    71  func (s *ImageMetadataSuite) TestImageMetadataURLsRegisteredFuncs(c *gc.C) {
    72  	environs.RegisterImageDataSourceFunc("id0", func(environs.Environ) (simplestreams.DataSource, error) {
    73  		return simplestreams.NewURLDataSource("id0", "betwixt/releases", utils.NoVerifySSLHostnames), nil
    74  	})
    75  	environs.RegisterImageDataSourceFunc("id1", func(environs.Environ) (simplestreams.DataSource, error) {
    76  		return simplestreams.NewURLDataSource("id1", "yoink", utils.NoVerifySSLHostnames), nil
    77  	})
    78  	// overwrite the one previously registered against id1
    79  	environs.RegisterImageDataSourceFunc("id1", func(environs.Environ) (simplestreams.DataSource, error) {
    80  		return nil, errors.NewNotSupported(nil, "oyvey")
    81  	})
    82  	environs.RegisterUserImageDataSourceFunc("id2", func(environs.Environ) (simplestreams.DataSource, error) {
    83  		return simplestreams.NewURLDataSource("id2", "foobar", utils.NoVerifySSLHostnames), nil
    84  	})
    85  	defer environs.UnregisterImageDataSourceFunc("id0")
    86  	defer environs.UnregisterImageDataSourceFunc("id1")
    87  	defer environs.UnregisterImageDataSourceFunc("id2")
    88  
    89  	env := s.env(c, "config-image-metadata-url", "")
    90  	sources, err := environs.ImageMetadataSources(env)
    91  	c.Assert(err, jc.ErrorIsNil)
    92  	sstesting.AssertExpectedSources(c, sources, []string{
    93  		"config-image-metadata-url/",
    94  		"foobar/",
    95  		"betwixt/releases/",
    96  		"http://cloud-images.ubuntu.com/releases/",
    97  	})
    98  }
    99  
   100  func (s *ImageMetadataSuite) TestImageMetadataURLsRegisteredFuncsError(c *gc.C) {
   101  	environs.RegisterImageDataSourceFunc("id0", func(environs.Environ) (simplestreams.DataSource, error) {
   102  		return nil, errors.New("oyvey!")
   103  	})
   104  	defer environs.UnregisterImageDataSourceFunc("id0")
   105  
   106  	env := s.env(c, "config-image-metadata-url", "")
   107  	_, err := environs.ImageMetadataSources(env)
   108  	c.Assert(err, gc.ErrorMatches, "oyvey!")
   109  }
   110  
   111  func (s *ImageMetadataSuite) TestImageMetadataURLsNonReleaseStream(c *gc.C) {
   112  	env := s.env(c, "", "daily")
   113  	sources, err := environs.ImageMetadataSources(env)
   114  	c.Assert(err, jc.ErrorIsNil)
   115  	sstesting.AssertExpectedSources(c, sources, []string{
   116  		"http://cloud-images.ubuntu.com/daily/",
   117  	})
   118  }