github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/azure/internal/azureauth/discovery_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package azureauth_test
     5  
     6  import (
     7  	"context"
     8  	"net/http"
     9  	"net/url"
    10  
    11  	"github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2016-06-01/subscriptions"
    12  	"github.com/Azure/go-autorest/autorest/mocks"
    13  	"github.com/juju/testing"
    14  	jc "github.com/juju/testing/checkers"
    15  	gc "gopkg.in/check.v1"
    16  
    17  	"github.com/juju/juju/provider/azure/internal/azureauth"
    18  )
    19  
    20  type DiscoverySuite struct {
    21  	testing.IsolationSuite
    22  }
    23  
    24  var _ = gc.Suite(&DiscoverySuite{})
    25  
    26  func (*DiscoverySuite) TestDiscoverAuthorizationURI(c *gc.C) {
    27  	sender := mocks.NewSender()
    28  	resp := mocks.NewResponseWithStatus("", http.StatusUnauthorized)
    29  	mocks.SetResponseHeaderValues(resp, "WWW-Authenticate", []string{
    30  		`foo bar authorization_uri="https://testing.invalid/meep" baz`,
    31  	})
    32  	sender.AppendResponse(resp)
    33  
    34  	client := subscriptions.NewClient()
    35  	sdkCtx := context.Background()
    36  	client.Sender = sender
    37  	authURI, err := azureauth.DiscoverAuthorizationURI(sdkCtx, client, "subscription_id")
    38  	c.Assert(err, jc.ErrorIsNil)
    39  	c.Assert(authURI, jc.DeepEquals, &url.URL{
    40  		Scheme: "https",
    41  		Host:   "testing.invalid",
    42  		Path:   "/meep",
    43  	})
    44  }
    45  
    46  func (*DiscoverySuite) TestDiscoverAuthorizationURIMissingHeader(c *gc.C) {
    47  	sender := mocks.NewSender()
    48  	resp := mocks.NewResponseWithStatus("", http.StatusUnauthorized)
    49  	sender.AppendResponse(resp)
    50  
    51  	client := subscriptions.NewClient()
    52  	client.Sender = sender
    53  	sdkCtx := context.Background()
    54  	_, err := azureauth.DiscoverAuthorizationURI(sdkCtx, client, "subscription_id")
    55  	c.Assert(err, gc.ErrorMatches, `WWW-Authenticate header not found`)
    56  }
    57  
    58  func (*DiscoverySuite) TestDiscoverAuthorizationURIHeaderMismatch(c *gc.C) {
    59  	sender := mocks.NewSender()
    60  	resp := mocks.NewResponseWithStatus("", http.StatusUnauthorized)
    61  	mocks.SetResponseHeaderValues(resp, "WWW-Authenticate", []string{`foo bar baz`})
    62  	sender.AppendResponse(resp)
    63  
    64  	client := subscriptions.NewClient()
    65  	client.Sender = sender
    66  	sdkCtx := context.Background()
    67  	_, err := azureauth.DiscoverAuthorizationURI(sdkCtx, client, "subscription_id")
    68  	c.Assert(err, gc.ErrorMatches, `authorization_uri not found in WWW-Authenticate header \("foo bar baz"\)`)
    69  }
    70  
    71  func (*DiscoverySuite) TestDiscoverAuthorizationURIUnexpectedSuccess(c *gc.C) {
    72  	sender := mocks.NewSender()
    73  	resp := mocks.NewResponseWithStatus("", http.StatusOK)
    74  	sender.AppendResponse(resp)
    75  
    76  	client := subscriptions.NewClient()
    77  	client.Sender = sender
    78  	sdkCtx := context.Background()
    79  	_, err := azureauth.DiscoverAuthorizationURI(sdkCtx, client, "subscription_id")
    80  	c.Assert(err, gc.ErrorMatches, "expected unauthorized error response")
    81  }
    82  
    83  func (*DiscoverySuite) TestDiscoverAuthorizationURIUnexpectedStatusCode(c *gc.C) {
    84  	sender := mocks.NewSender()
    85  	resp := mocks.NewResponseWithStatus("", http.StatusNotFound)
    86  	sender.AppendResponse(resp)
    87  
    88  	client := subscriptions.NewClient()
    89  	client.Sender = sender
    90  	sdkCtx := context.Background()
    91  	_, err := azureauth.DiscoverAuthorizationURI(sdkCtx, client, "subscription_id")
    92  	c.Assert(err, gc.ErrorMatches, "expected unauthorized error response, got 404: .*")
    93  }
    94  
    95  func (*DiscoverySuite) TestAuthorizationURITenantID(c *gc.C) {
    96  	tenantId, err := azureauth.AuthorizationURITenantID(&url.URL{Path: "/3671f5a9-c0d0-472b-a80c-48135cf5a9f1"})
    97  	c.Assert(err, jc.ErrorIsNil)
    98  	c.Assert(tenantId, gc.Equals, "3671f5a9-c0d0-472b-a80c-48135cf5a9f1")
    99  }
   100  
   101  func (*DiscoverySuite) TestAuthorizationURITenantIDError(c *gc.C) {
   102  	url, err := url.Parse("https://testing.invalid/foo")
   103  	c.Assert(err, jc.ErrorIsNil)
   104  	_, err = azureauth.AuthorizationURITenantID(url)
   105  	c.Assert(err, gc.ErrorMatches, `authorization_uri "https://testing.invalid/foo" not valid`)
   106  }