github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/azure/environprovider_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package azure_test 5 6 import ( 7 "net/http" 8 "time" 9 10 "github.com/juju/clock/testclock" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/cloud" 15 "github.com/juju/juju/environs" 16 "github.com/juju/juju/provider/azure" 17 "github.com/juju/juju/provider/azure/internal/azureauth" 18 "github.com/juju/juju/provider/azure/internal/azurecli" 19 "github.com/juju/juju/provider/azure/internal/azuretesting" 20 "github.com/juju/juju/testing" 21 ) 22 23 type environProviderSuite struct { 24 testing.BaseSuite 25 provider environs.EnvironProvider 26 spec environs.CloudSpec 27 requests []*http.Request 28 sender azuretesting.Senders 29 } 30 31 var _ = gc.Suite(&environProviderSuite{}) 32 33 func (s *environProviderSuite) SetUpTest(c *gc.C) { 34 s.BaseSuite.SetUpTest(c) 35 s.provider = newProvider(c, azure.ProviderConfig{ 36 Sender: &s.sender, 37 RequestInspector: azuretesting.RequestRecorder(&s.requests), 38 RandomWindowsAdminPassword: func() string { return "sorandom" }, 39 }) 40 s.spec = environs.CloudSpec{ 41 Type: "azure", 42 Name: "azure", 43 Region: "westus", 44 Endpoint: "https://api.azurestack.local", 45 IdentityEndpoint: "https://login.azurestack.local", 46 StorageEndpoint: "https://storage.azurestack.local", 47 Credential: fakeServicePrincipalCredential(), 48 } 49 s.sender = nil 50 } 51 52 func fakeServicePrincipalCredential() *cloud.Credential { 53 cred := cloud.NewCredential( 54 "service-principal-secret", 55 map[string]string{ 56 "application-id": fakeApplicationId, 57 "subscription-id": fakeSubscriptionId, 58 "application-password": "opensezme", 59 }, 60 ) 61 return &cred 62 } 63 64 func (s *environProviderSuite) TestPrepareConfig(c *gc.C) { 65 cfg := makeTestModelConfig(c) 66 s.sender = azuretesting.Senders{tokenRefreshSender()} 67 cfg, err := s.provider.PrepareConfig(environs.PrepareConfigParams{ 68 Cloud: s.spec, 69 Config: cfg, 70 }) 71 c.Assert(err, jc.ErrorIsNil) 72 c.Check(cfg, gc.NotNil) 73 } 74 75 func (s *environProviderSuite) TestOpen(c *gc.C) { 76 env, err := environs.Open(s.provider, environs.OpenParams{ 77 Cloud: s.spec, 78 Config: makeTestModelConfig(c), 79 }) 80 c.Assert(err, jc.ErrorIsNil) 81 c.Assert(env, gc.NotNil) 82 } 83 84 func (s *environProviderSuite) TestOpenMissingCredential(c *gc.C) { 85 s.spec.Credential = nil 86 s.testOpenError(c, s.spec, `validating cloud spec: missing credential not valid`) 87 } 88 89 func (s *environProviderSuite) TestOpenUnsupportedCredential(c *gc.C) { 90 credential := cloud.NewCredential(cloud.OAuth1AuthType, map[string]string{}) 91 s.spec.Credential = &credential 92 s.testOpenError(c, s.spec, `validating cloud spec: "oauth1" auth-type not supported`) 93 } 94 95 func (s *environProviderSuite) testOpenError(c *gc.C, spec environs.CloudSpec, expect string) { 96 _, err := environs.Open(s.provider, environs.OpenParams{ 97 Cloud: spec, 98 Config: makeTestModelConfig(c), 99 }) 100 c.Assert(err, gc.ErrorMatches, expect) 101 } 102 103 func newProvider(c *gc.C, config azure.ProviderConfig) environs.EnvironProvider { 104 if config.NewStorageClient == nil { 105 var storage azuretesting.MockStorageClient 106 config.NewStorageClient = storage.NewClient 107 } 108 if config.RetryClock == nil { 109 config.RetryClock = testclock.NewClock(time.Time{}) 110 } 111 if config.ServicePrincipalCreator == nil { 112 config.ServicePrincipalCreator = &azureauth.ServicePrincipalCreator{} 113 } 114 if config.AzureCLI == nil { 115 config.AzureCLI = azurecli.AzureCLI{} 116 } 117 config.RandomWindowsAdminPassword = func() string { return "sorandom" } 118 config.GenerateSSHKey = func(string) (string, string, error) { 119 return "private", "public", nil 120 } 121 environProvider, err := azure.NewProvider(config) 122 c.Assert(err, jc.ErrorIsNil) 123 return environProvider 124 }