github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/http/secured_transport_test.go (about) 1 package http_test 2 3 import ( 4 "errors" 5 "net/http" 6 "net/url" 7 "testing" 8 9 httputil "github.com/kyma-incubator/compass/components/director/pkg/http" 10 "github.com/kyma-incubator/compass/components/director/pkg/http/httpfakes" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestSecuredTransport_RoundTripSuccessfullyObtainsAuthorizationFromCorrectAuthorizationProviderAndUsesIt(t *testing.T) { 15 const accessToken = "accessToken" 16 17 transport := &httpfakes.FakeHTTPRoundTripper{} 18 transport.RoundTripStub = func(req *http.Request) (*http.Response, error) { 19 authHeader := req.Header.Get("Authorization") 20 require.Equal(t, "Bearer "+accessToken, authHeader) 21 22 return nil, nil 23 } 24 25 tokenAuthorizationProvider := &httpfakes.FakeAuthorizationProvider{} 26 tokenAuthorizationProvider.MatchesReturns(true) 27 tokenAuthorizationProvider.GetAuthorizationReturns("Bearer "+accessToken, nil) 28 29 tokenAuthorizationProvider2 := &httpfakes.FakeAuthorizationProvider{} 30 tokenAuthorizationProvider2.MatchesReturns(false) 31 tokenAuthorizationProvider2.GetAuthorizationReturns("Bearer "+accessToken+"2", nil) 32 33 tokenAuthorizationProvider3 := &httpfakes.FakeAuthorizationProvider{} 34 tokenAuthorizationProvider3.MatchesReturns(true) 35 tokenAuthorizationProvider3.GetAuthorizationReturns("Bearer "+accessToken+"3", nil) 36 37 testURL, err := url.Parse("http://localhost:8080") 38 require.NoError(t, err) 39 request := &http.Request{ 40 Method: http.MethodGet, 41 URL: testURL, 42 Header: map[string][]string{}, 43 } 44 45 securedTransport := httputil.NewSecuredTransport(transport, tokenAuthorizationProvider) 46 _, err = securedTransport.RoundTrip(request) 47 require.NoError(t, err) 48 } 49 50 func TestSecuredTransport_RoundTripDoesNotSetAuthorizationWhenNoAuthorizationProviderMatches(t *testing.T) { 51 const accessToken = "accessToken" 52 53 transport := &httpfakes.FakeHTTPRoundTripper{} 54 transport.RoundTripStub = func(req *http.Request) (*http.Response, error) { 55 authHeader := req.Header.Get("Authorization") 56 require.Empty(t, authHeader) 57 58 return nil, nil 59 } 60 61 tokenAuthorizationProvider := &httpfakes.FakeAuthorizationProvider{} 62 tokenAuthorizationProvider.MatchesReturns(false) 63 tokenAuthorizationProvider.GetAuthorizationReturns("Bearer "+accessToken, nil) 64 65 tokenAuthorizationProvider2 := &httpfakes.FakeAuthorizationProvider{} 66 tokenAuthorizationProvider2.MatchesReturns(false) 67 tokenAuthorizationProvider2.GetAuthorizationReturns("Bearer "+accessToken+"2", nil) 68 69 testURL, err := url.Parse("http://localhost:8080") 70 require.NoError(t, err) 71 request := &http.Request{ 72 Method: http.MethodGet, 73 URL: testURL, 74 Header: map[string][]string{}, 75 } 76 77 securedTransport := httputil.NewSecuredTransport(transport, tokenAuthorizationProvider) 78 _, err = securedTransport.RoundTrip(request) 79 require.NoError(t, err) 80 require.Equal(t, request.URL, testURL) 81 } 82 83 func TestSecuredTransport_RoundTripFailsOnAuthorizationProviderError(t *testing.T) { 84 transport := &httpfakes.FakeHTTPRoundTripper{} 85 86 tokenAuthorizationProvider := &httpfakes.FakeAuthorizationProvider{} 87 tokenAuthorizationProvider.MatchesReturns(true) 88 tokenAuthorizationProvider.GetAuthorizationReturns("", errors.New("error")) 89 90 testURL, err := url.Parse("http://localhost:8080") 91 require.NoError(t, err) 92 request := &http.Request{ 93 Method: http.MethodGet, 94 URL: testURL, 95 Header: map[string][]string{}, 96 } 97 98 securedTransport := httputil.NewSecuredTransport(transport, tokenAuthorizationProvider) 99 _, err = securedTransport.RoundTrip(request) 100 require.EqualError(t, err, "error while obtaining authorization: error") 101 require.Equal(t, request.URL, testURL) 102 }