~nskaggs/+junk/juju-packaging-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/cloud/personalclouds_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-27 20:23:11 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161027202311-sux4jk2o73p1d6rg
Re-add src

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2016 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package cloud_test
 
5
 
 
6
import (
 
7
        "io/ioutil"
 
8
 
 
9
        jc "github.com/juju/testing/checkers"
 
10
        gc "gopkg.in/check.v1"
 
11
 
 
12
        "github.com/juju/juju/cloud"
 
13
        "github.com/juju/juju/juju/osenv"
 
14
        "github.com/juju/juju/testing"
 
15
)
 
16
 
 
17
type personalCloudSuite struct {
 
18
        testing.FakeJujuXDGDataHomeSuite
 
19
}
 
20
 
 
21
var _ = gc.Suite(&personalCloudSuite{})
 
22
 
 
23
func (s *personalCloudSuite) TestWritePersonalClouds(c *gc.C) {
 
24
        clouds := map[string]cloud.Cloud{
 
25
                "homestack": cloud.Cloud{
 
26
                        Type:      "openstack",
 
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"},
 
31
                        },
 
32
                },
 
33
                "azurestack": cloud.Cloud{
 
34
                        Type:      "azure",
 
35
                        AuthTypes: []cloud.AuthType{"userpass"},
 
36
                        Regions: []cloud.Region{{
 
37
                                Name:     "prod",
 
38
                                Endpoint: "http://prod.azurestack.local",
 
39
                        }, {
 
40
                                Name:     "dev",
 
41
                                Endpoint: "http://dev.azurestack.local",
 
42
                        }, {
 
43
                                Name:     "test",
 
44
                                Endpoint: "http://test.azurestack.local",
 
45
                        }},
 
46
                },
 
47
        }
 
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, `
 
53
clouds:
 
54
  azurestack:
 
55
    type: azure
 
56
    auth-types: [userpass]
 
57
    regions:
 
58
      prod:
 
59
        endpoint: http://prod.azurestack.local
 
60
      dev:
 
61
        endpoint: http://dev.azurestack.local
 
62
      test:
 
63
        endpoint: http://test.azurestack.local
 
64
  homestack:
 
65
    type: openstack
 
66
    auth-types: [userpass, access-key]
 
67
    endpoint: http://homestack
 
68
    regions:
 
69
      london:
 
70
        endpoint: http://london/1.0
 
71
`[1:])
 
72
}
 
73
 
 
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)
 
78
}
 
79
 
 
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)
 
85
}
 
86
 
 
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)
 
93
}
 
94
 
 
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{
 
98
                        Type:      "openstack",
 
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"},
 
103
                        },
 
104
                },
 
105
                "azurestack": cloud.Cloud{
 
106
                        Type:            "azure",
 
107
                        AuthTypes:       []cloud.AuthType{"userpass"},
 
108
                        StorageEndpoint: "http://storage.azurestack.local",
 
109
                        Regions: []cloud.Region{
 
110
                                cloud.Region{
 
111
                                        Name:            "local",
 
112
                                        Endpoint:        "http://azurestack.local",
 
113
                                        StorageEndpoint: "http://storage.azurestack.local",
 
114
                                },
 
115
                        },
 
116
                },
 
117
        })
 
118
}
 
119
 
 
120
func (s *personalCloudSuite) setupReadClouds(c *gc.C, destPath string) {
 
121
        data := `
 
122
clouds:
 
123
  homestack:
 
124
    type: openstack
 
125
    auth-types: [userpass, access-key]
 
126
    endpoint: http://homestack
 
127
    regions:
 
128
      london:
 
129
        endpoint: http://london/1.0
 
130
  azurestack:
 
131
    type: azure
 
132
    auth-types: [userpass]
 
133
    storage-endpoint: http://storage.azurestack.local
 
134
    regions:
 
135
      local:
 
136
        endpoint: http://azurestack.local
 
137
`[1:]
 
138
        err := ioutil.WriteFile(destPath, []byte(data), 0600)
 
139
        c.Assert(err, jc.ErrorIsNil)
 
140
}