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  }