github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/cloud/personalclouds_test.go (about) 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 }