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  }