1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
11
. "launchpad.net/gocheck"
12
"launchpad.net/juju-core/cmd"
13
"launchpad.net/juju-core/testing"
18
type ImageMetadataSuite struct {
22
var _ = Suite(&ImageMetadataSuite{})
24
func (s *ImageMetadataSuite) SetUpSuite(c *C) {
25
s.environ = os.Environ()
28
func (s *ImageMetadataSuite) SetUpTest(c *C) {
32
func (s *ImageMetadataSuite) TearDownTest(c *C) {
33
for _, envstring := range s.environ {
34
kv := strings.SplitN(envstring, "=", 2)
35
os.Setenv(kv[0], kv[1])
39
var seriesVersions map[string]string = map[string]string{
44
func (*ImageMetadataSuite) assertCommandOutput(c *C, errOut, series, arch, indexFileName, imageFileName string) {
45
strippedOut := strings.Replace(errOut, "\n", "", -1)
46
c.Check(strippedOut, Matches, `Boilerplate image metadata files.*have been written.*Copy the files.*`)
47
indexpath := testing.HomePath(".juju", indexFileName)
48
data, err := ioutil.ReadFile(indexpath)
50
var indices interface{}
51
err = json.Unmarshal(data, &indices)
53
c.Assert(indices.(map[string]interface{})["format"], Equals, "index:1.0")
54
prodId := fmt.Sprintf("com.ubuntu.cloud:server:%s:%s", seriesVersions[series], arch)
55
c.Assert(strings.Contains(string(data), prodId), Equals, true)
56
c.Assert(strings.Contains(string(data), `"region": "region"`), Equals, true)
57
c.Assert(strings.Contains(string(data), `"endpoint": "endpoint"`), Equals, true)
58
c.Assert(strings.Contains(string(data), fmt.Sprintf(`"path": "streams/v1/%s"`, imageFileName)), Equals, true)
60
imagepath := testing.HomePath(".juju", imageFileName)
61
data, err = ioutil.ReadFile(imagepath)
63
var images interface{}
64
err = json.Unmarshal(data, &images)
66
c.Assert(images.(map[string]interface{})["format"], Equals, "products:1.0")
67
c.Assert(strings.Contains(string(data), prodId), Equals, true)
68
c.Assert(strings.Contains(string(data), `"id": "1234"`), Equals, true)
72
defaultIndexFileName = "index.json"
73
defaultImageFileName = "imagemetadata.json"
76
func (s *ImageMetadataSuite) TestImageMetadataFilesNoEnv(c *C) {
77
defer testing.MakeEmptyFakeHome(c).Restore()
79
ctx := testing.Context(c)
81
&ImageMetadataCommand{}, ctx, []string{"-i", "1234", "-r", "region", "-a", "arch", "-e", "endpoint", "-s", "raring"})
82
c.Assert(code, Equals, 0)
83
errOut := ctx.Stdout.(*bytes.Buffer).String()
84
s.assertCommandOutput(c, errOut, "raring", "arch", defaultIndexFileName, defaultImageFileName)
87
func (s *ImageMetadataSuite) TestImageMetadataFilesWithName(c *C) {
88
defer testing.MakeEmptyFakeHome(c).Restore()
90
ctx := testing.Context(c)
92
&ImageMetadataCommand{}, ctx, []string{"-n", "foo", "-i", "1234", "-r", "region", "-a", "arch", "-e", "endpoint", "-s", "raring"})
93
c.Assert(code, Equals, 0)
94
errOut := ctx.Stdout.(*bytes.Buffer).String()
95
s.assertCommandOutput(c, errOut, "raring", "arch", "foo-"+defaultIndexFileName, "foo-"+defaultImageFileName)
98
func (s *ImageMetadataSuite) TestImageMetadataFilesDefaultArch(c *C) {
99
defer testing.MakeEmptyFakeHome(c).Restore()
101
ctx := testing.Context(c)
103
&ImageMetadataCommand{}, ctx, []string{"-i", "1234", "-r", "region", "-e", "endpoint", "-s", "raring"})
104
c.Assert(code, Equals, 0)
105
errOut := ctx.Stdout.(*bytes.Buffer).String()
106
s.assertCommandOutput(c, errOut, "raring", "amd64", defaultIndexFileName, defaultImageFileName)
109
func (s *ImageMetadataSuite) TestImageMetadataFilesDefaultSeries(c *C) {
110
defer testing.MakeEmptyFakeHome(c).Restore()
112
ctx := testing.Context(c)
114
&ImageMetadataCommand{}, ctx, []string{"-i", "1234", "-r", "region", "-a", "arch", "-e", "endpoint"})
115
c.Assert(code, Equals, 0)
116
errOut := ctx.Stdout.(*bytes.Buffer).String()
117
s.assertCommandOutput(c, errOut, "precise", "arch", defaultIndexFileName, defaultImageFileName)
120
func (s *ImageMetadataSuite) TestImageMetadataFilesUsingEnvRegion(c *C) {
121
defer testing.MakeEmptyFakeHome(c).Restore()
123
os.Setenv("OS_REGION_NAME", "region")
124
ctx := testing.Context(c)
126
&ImageMetadataCommand{}, ctx, []string{"-i", "1234", "-e", "endpoint"})
127
c.Assert(code, Equals, 0)
128
errOut := ctx.Stdout.(*bytes.Buffer).String()
129
s.assertCommandOutput(c, errOut, "precise", "amd64", defaultIndexFileName, defaultImageFileName)
132
func (s *ImageMetadataSuite) TestImageMetadataFilesUsingEnvEndpoint(c *C) {
133
defer testing.MakeEmptyFakeHome(c).Restore()
135
os.Setenv("OS_AUTH_URL", "endpoint")
136
ctx := testing.Context(c)
138
&ImageMetadataCommand{}, ctx, []string{"-i", "1234", "-r", "region"})
139
c.Assert(code, Equals, 0)
140
errOut := ctx.Stdout.(*bytes.Buffer).String()
141
s.assertCommandOutput(c, errOut, "precise", "amd64", defaultIndexFileName, defaultImageFileName)
144
type errTestParams struct {
148
var errTests = []errTestParams{
151
args: []string{"-r", "region", "-a", "arch", "-e", "endpoint", "-s", "precise"},
155
args: []string{"-i", "1234", "-a", "arch", "-e", "endpoint", "-s", "precise"},
159
args: []string{"-i", "1234", "-e", "endpoint", "-a", "arch", "-s", "precise"},
163
func (s *ImageMetadataSuite) TestImageMetadataBadArgs(c *C) {
164
defer testing.MakeEmptyFakeHome(c).Restore()
165
for i, t := range errTests {
166
c.Logf("test: %d", i)
167
ctx := testing.Context(c)
168
code := cmd.Main(&ImageMetadataCommand{}, ctx, t.args)
169
c.Check(code, Equals, 2)