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 }