~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/environs/imagemetadata_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}