github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/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 }