github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/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 jujutesting "github.com/juju/testing" 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/azuretesting" 19 "github.com/juju/juju/testing" 20 ) 21 22 type environProviderSuite struct { 23 testing.BaseSuite 24 provider environs.EnvironProvider 25 spec environs.CloudSpec 26 requests []*http.Request 27 sender azuretesting.Senders 28 } 29 30 var _ = gc.Suite(&environProviderSuite{}) 31 32 func (s *environProviderSuite) SetUpTest(c *gc.C) { 33 s.BaseSuite.SetUpTest(c) 34 s.provider = newProvider(c, azure.ProviderConfig{ 35 Sender: &s.sender, 36 RequestInspector: azuretesting.RequestRecorder(&s.requests), 37 RandomWindowsAdminPassword: func() string { return "sorandom" }, 38 InteractiveCreateServicePrincipal: azureauth.InteractiveCreateServicePrincipal, 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 := s.provider.Open(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 := s.provider.Open(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 = jujutesting.NewClock(time.Time{}) 110 } 111 if config.InteractiveCreateServicePrincipal == nil { 112 config.InteractiveCreateServicePrincipal = azureauth.InteractiveCreateServicePrincipal 113 } 114 config.RandomWindowsAdminPassword = func() string { return "sorandom" } 115 environProvider, err := azure.NewProvider(config) 116 c.Assert(err, jc.ErrorIsNil) 117 return environProvider 118 }