1
// Copyright 2016 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
jc "github.com/juju/testing/checkers"
10
gc "gopkg.in/check.v1"
12
"github.com/juju/juju/cloud"
13
"github.com/juju/juju/juju/osenv"
14
"github.com/juju/juju/testing"
17
type personalCloudSuite struct {
18
testing.FakeJujuXDGDataHomeSuite
21
var _ = gc.Suite(&personalCloudSuite{})
23
func (s *personalCloudSuite) TestWritePersonalClouds(c *gc.C) {
24
clouds := map[string]cloud.Cloud{
25
"homestack": cloud.Cloud{
27
AuthTypes: []cloud.AuthType{"userpass", "access-key"},
28
Endpoint: "http://homestack",
29
Regions: []cloud.Region{
30
cloud.Region{Name: "london", Endpoint: "http://london/1.0"},
33
"azurestack": cloud.Cloud{
35
AuthTypes: []cloud.AuthType{"userpass"},
36
Regions: []cloud.Region{{
38
Endpoint: "http://prod.azurestack.local",
41
Endpoint: "http://dev.azurestack.local",
44
Endpoint: "http://test.azurestack.local",
48
err := cloud.WritePersonalCloudMetadata(clouds)
49
c.Assert(err, jc.ErrorIsNil)
50
data, err := ioutil.ReadFile(osenv.JujuXDGDataHomePath("clouds.yaml"))
51
c.Assert(err, jc.ErrorIsNil)
52
c.Assert(string(data), gc.Equals, `
56
auth-types: [userpass]
59
endpoint: http://prod.azurestack.local
61
endpoint: http://dev.azurestack.local
63
endpoint: http://test.azurestack.local
66
auth-types: [userpass, access-key]
67
endpoint: http://homestack
70
endpoint: http://london/1.0
74
func (s *personalCloudSuite) TestReadPersonalCloudsNone(c *gc.C) {
75
clouds, err := cloud.PersonalCloudMetadata()
76
c.Assert(err, jc.ErrorIsNil)
77
c.Assert(clouds, gc.IsNil)
80
func (s *personalCloudSuite) TestReadPersonalClouds(c *gc.C) {
81
s.setupReadClouds(c, osenv.JujuXDGDataHomePath("clouds.yaml"))
82
clouds, err := cloud.PersonalCloudMetadata()
83
c.Assert(err, jc.ErrorIsNil)
84
s.assertPersonalClouds(c, clouds)
87
func (s *personalCloudSuite) TestReadUserSpecifiedClouds(c *gc.C) {
88
file := osenv.JujuXDGDataHomePath("somemoreclouds.yaml")
89
s.setupReadClouds(c, file)
90
clouds, err := cloud.ParseCloudMetadataFile(file)
91
c.Assert(err, jc.ErrorIsNil)
92
s.assertPersonalClouds(c, clouds)
95
func (s *personalCloudSuite) assertPersonalClouds(c *gc.C, clouds map[string]cloud.Cloud) {
96
c.Assert(clouds, jc.DeepEquals, map[string]cloud.Cloud{
97
"homestack": cloud.Cloud{
99
AuthTypes: []cloud.AuthType{"userpass", "access-key"},
100
Endpoint: "http://homestack",
101
Regions: []cloud.Region{
102
cloud.Region{Name: "london", Endpoint: "http://london/1.0"},
105
"azurestack": cloud.Cloud{
107
AuthTypes: []cloud.AuthType{"userpass"},
108
StorageEndpoint: "http://storage.azurestack.local",
109
Regions: []cloud.Region{
112
Endpoint: "http://azurestack.local",
113
StorageEndpoint: "http://storage.azurestack.local",
120
func (s *personalCloudSuite) setupReadClouds(c *gc.C, destPath string) {
125
auth-types: [userpass, access-key]
126
endpoint: http://homestack
129
endpoint: http://london/1.0
132
auth-types: [userpass]
133
storage-endpoint: http://storage.azurestack.local
136
endpoint: http://azurestack.local
138
err := ioutil.WriteFile(destPath, []byte(data), 0600)
139
c.Assert(err, jc.ErrorIsNil)