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 }