1
// Copyright 2012, 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
"github.com/juju/errors"
8
jc "github.com/juju/testing/checkers"
9
"github.com/juju/utils"
10
gc "gopkg.in/check.v1"
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"
25
type ImageMetadataSuite struct {
29
var _ = gc.Suite(&ImageMetadataSuite{})
31
func (s *ImageMetadataSuite) TearDownTest(c *gc.C) {
33
s.BaseSuite.TearDownTest(c)
36
func (s *ImageMetadataSuite) env(c *gc.C, imageMetadataURL, stream string) environs.Environ {
37
attrs := dummy.SampleConfig()
39
attrs = attrs.Merge(testing.Attrs{
40
"image-stream": stream,
43
if imageMetadataURL != "" {
44
attrs = attrs.Merge(testing.Attrs{
45
"image-metadata-url": imageMetadataURL,
48
env, err := bootstrap.Prepare(
49
envtesting.BootstrapContext(c),
50
jujuclienttesting.NewMemStore(),
51
bootstrap.PrepareParams{
52
ControllerConfig: testing.FakeControllerConfig(),
53
ControllerName: attrs["name"].(string),
55
Cloud: dummy.SampleCloudSpec(),
56
AdminSecret: "admin-secret",
59
c.Assert(err, jc.ErrorIsNil)
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},
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},
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
88
environs.RegisterImageDataSourceFunc("id1", func(environs.Environ) (simplestreams.DataSource, error) {
89
return simplestreams.NewURLDataSource("id1", "yoink", utils.NoVerifySSLHostnames, simplestreams.SPECIFIC_CLOUD_DATA, false), nil
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")
95
environs.RegisterUserImageDataSourceFunc("id2", func(environs.Environ) (simplestreams.DataSource, error) {
96
return simplestreams.NewURLDataSource("id2", "foobar", utils.NoVerifySSLHostnames, simplestreams.CUSTOM_CLOUD_DATA, false), nil
98
defer environs.UnregisterImageDataSourceFunc("id0")
99
defer environs.UnregisterImageDataSourceFunc("id1")
100
defer environs.UnregisterImageDataSourceFunc("id2")
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/", ""},
108
{"betwixt/releases/", ""},
109
{"https://streams.canonical.com/juju/images/releases/", keys.JujuPublicKey},
110
{"http://cloud-images.ubuntu.com/releases/", imagemetadata.SimplestreamsImagesPublicKey},
114
func (s *ImageMetadataSuite) TestImageMetadataURLsRegisteredFuncsError(c *gc.C) {
115
environs.RegisterImageDataSourceFunc("id0", func(environs.Environ) (simplestreams.DataSource, error) {
116
return nil, errors.New("oyvey!")
118
defer environs.UnregisterImageDataSourceFunc("id0")
120
env := s.env(c, "config-image-metadata-url", "")
121
_, err := environs.ImageMetadataSources(env)
122
c.Assert(err, gc.ErrorMatches, "oyvey!")
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},