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  }