github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/common/cloudspec/cloudspec_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package cloudspec_test 5 6 import ( 7 "errors" 8 9 "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 "github.com/juju/utils" 12 gc "gopkg.in/check.v1" 13 "gopkg.in/juju/names.v2" 14 15 "github.com/juju/juju/apiserver/common" 16 "github.com/juju/juju/apiserver/common/cloudspec" 17 "github.com/juju/juju/apiserver/params" 18 "github.com/juju/juju/cloud" 19 "github.com/juju/juju/environs" 20 coretesting "github.com/juju/juju/testing" 21 ) 22 23 type CloudSpecSuite struct { 24 testing.IsolationSuite 25 testing.Stub 26 result environs.CloudSpec 27 authFunc common.AuthFunc 28 api cloudspec.CloudSpecAPI 29 } 30 31 var _ = gc.Suite(&CloudSpecSuite{}) 32 33 func (s *CloudSpecSuite) SetUpTest(c *gc.C) { 34 s.IsolationSuite.SetUpTest(c) 35 s.Stub.ResetCalls() 36 37 s.authFunc = func(tag names.Tag) bool { 38 s.AddCall("Auth", tag) 39 return tag == coretesting.ModelTag 40 } 41 s.api = cloudspec.NewCloudSpec(func(tag names.ModelTag) (environs.CloudSpec, error) { 42 s.AddCall("CloudSpec", tag) 43 return s.result, s.NextErr() 44 }, func() (common.AuthFunc, error) { 45 s.AddCall("GetAuthFunc") 46 return s.authFunc, s.NextErr() 47 }) 48 49 credential := cloud.NewCredential( 50 "auth-type", 51 map[string]string{"k": "v"}, 52 ) 53 s.result = environs.CloudSpec{ 54 Type: "type", 55 Name: "name", 56 Region: "region", 57 Endpoint: "endpoint", 58 IdentityEndpoint: "identity-endpoint", 59 StorageEndpoint: "storage-endpoint", 60 Credential: &credential, 61 CACertificates: []string{coretesting.CACert}, 62 } 63 } 64 65 func (s *CloudSpecSuite) TestCloudSpec(c *gc.C) { 66 otherModelTag := names.NewModelTag(utils.MustNewUUID().String()) 67 machineTag := names.NewMachineTag("42") 68 result, err := s.api.CloudSpec(params.Entities{Entities: []params.Entity{ 69 {coretesting.ModelTag.String()}, 70 {otherModelTag.String()}, 71 {machineTag.String()}, 72 }}) 73 c.Assert(err, jc.ErrorIsNil) 74 c.Assert(result.Results, jc.DeepEquals, []params.CloudSpecResult{{ 75 Result: ¶ms.CloudSpec{ 76 Type: "type", 77 Name: "name", 78 Region: "region", 79 Endpoint: "endpoint", 80 IdentityEndpoint: "identity-endpoint", 81 StorageEndpoint: "storage-endpoint", 82 Credential: ¶ms.CloudCredential{ 83 AuthType: "auth-type", 84 Attributes: map[string]string{"k": "v"}, 85 }, 86 CACertificates: []string{coretesting.CACert}, 87 }, 88 }, { 89 Error: ¶ms.Error{ 90 Code: params.CodeUnauthorized, 91 Message: "permission denied", 92 }, 93 }, { 94 Error: ¶ms.Error{ 95 Message: `"machine-42" is not a valid model tag`, 96 }, 97 }}) 98 s.CheckCalls(c, []testing.StubCall{ 99 {"GetAuthFunc", nil}, 100 {"Auth", []interface{}{coretesting.ModelTag}}, 101 {"CloudSpec", []interface{}{coretesting.ModelTag}}, 102 {"Auth", []interface{}{otherModelTag}}, 103 }) 104 } 105 106 func (s *CloudSpecSuite) TestCloudSpecNilCredential(c *gc.C) { 107 s.result.Credential = nil 108 result, err := s.api.CloudSpec(params.Entities{ 109 Entities: []params.Entity{{coretesting.ModelTag.String()}}, 110 }) 111 c.Assert(err, jc.ErrorIsNil) 112 c.Assert(result.Results, jc.DeepEquals, []params.CloudSpecResult{{ 113 Result: ¶ms.CloudSpec{ 114 Type: "type", 115 Name: "name", 116 Region: "region", 117 Endpoint: "endpoint", 118 IdentityEndpoint: "identity-endpoint", 119 StorageEndpoint: "storage-endpoint", 120 Credential: nil, 121 CACertificates: []string{coretesting.CACert}, 122 }, 123 }}) 124 } 125 126 func (s *CloudSpecSuite) TestCloudSpecGetAuthFuncError(c *gc.C) { 127 expect := errors.New("bewm") 128 s.SetErrors(expect) 129 result, err := s.api.CloudSpec(params.Entities{ 130 Entities: []params.Entity{{coretesting.ModelTag.String()}}, 131 }) 132 c.Assert(err, gc.Equals, expect) 133 c.Assert(result, jc.DeepEquals, params.CloudSpecResults{}) 134 } 135 136 func (s *CloudSpecSuite) TestCloudSpecCloudSpecError(c *gc.C) { 137 s.SetErrors(nil, errors.New("bewm")) 138 result, err := s.api.CloudSpec(params.Entities{ 139 Entities: []params.Entity{{coretesting.ModelTag.String()}}, 140 }) 141 c.Assert(err, jc.ErrorIsNil) 142 c.Assert(result, jc.DeepEquals, params.CloudSpecResults{Results: []params.CloudSpecResult{{ 143 Error: ¶ms.Error{Message: "bewm"}, 144 }}}) 145 }