...

Source file src/github.com/launchdarkly/go-server-sdk/v6/ldhttp/http_transport_test.go

Documentation: github.com/launchdarkly/go-server-sdk/v6/ldhttp

     1  package ldhttp
     2  
     3  import (
     4  	"crypto/x509"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"net/url"
     8  	"os"
     9  	"reflect"
    10  	"testing"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/stretchr/testify/require"
    14  
    15  	helpers "github.com/launchdarkly/go-test-helpers/v3"
    16  	"github.com/launchdarkly/go-test-helpers/v3/httphelpers"
    17  )
    18  
    19  // See also: proxytest/http_transport_proxy_test.go
    20  
    21  func TestDefaultTransportDoesNotAcceptSelfSignedCert(t *testing.T) {
    22  	alwaysOK := httphelpers.HandlerWithStatus(200)
    23  	httphelpers.WithSelfSignedServer(alwaysOK, func(server *httptest.Server, certData []byte, certs *x509.CertPool) {
    24  		transport, _, err := NewHTTPTransport()
    25  		require.NoError(t, err)
    26  
    27  		client := *http.DefaultClient
    28  		client.Transport = transport
    29  		_, err = client.Get(server.URL)
    30  		require.NotNil(t, err)
    31  		require.Contains(t, err.Error(), "certificate") // the exact error message varies by Go version
    32  	})
    33  }
    34  
    35  func TestCanAcceptSelfSignedCertWithCA(t *testing.T) {
    36  	alwaysOK := httphelpers.HandlerWithStatus(200)
    37  	httphelpers.WithSelfSignedServer(alwaysOK, func(server *httptest.Server, certData []byte, certs *x509.CertPool) {
    38  		transport, _, err := NewHTTPTransport(CACertOption(certData))
    39  		require.NoError(t, err)
    40  
    41  		client := *http.DefaultClient
    42  		client.Transport = transport
    43  		resp, err := client.Get(server.URL)
    44  		require.NoError(t, err)
    45  		assert.Equal(t, 200, resp.StatusCode)
    46  	})
    47  }
    48  
    49  func TestErrorForNonexistentCertFile(t *testing.T) {
    50  	helpers.WithTempFile(func(certFile string) {
    51  		os.Remove(certFile)
    52  		_, _, err := NewHTTPTransport(CACertFileOption(certFile))
    53  		require.Error(t, err)
    54  		require.Contains(t, err.Error(), "can't read CA certificate file")
    55  	})
    56  }
    57  
    58  func TestErrorForCertFileWithBadData(t *testing.T) {
    59  	helpers.WithTempFile(func(certFile string) {
    60  		os.WriteFile(certFile, []byte("sorry"), os.ModeAppend)
    61  		_, _, err := NewHTTPTransport(CACertFileOption(certFile))
    62  		require.Error(t, err)
    63  		require.Contains(t, err.Error(), "invalid CA certificate data")
    64  	})
    65  }
    66  
    67  func TestErrorForBadCertData(t *testing.T) {
    68  	_, _, err := NewHTTPTransport(CACertOption([]byte("sorry")))
    69  	require.Error(t, err)
    70  	require.Contains(t, err.Error(), "invalid CA certificate data")
    71  }
    72  
    73  func TestProxyEnvVarsAreUsedByDefault(t *testing.T) {
    74  	transport, _, err := NewHTTPTransport()
    75  	require.NoError(t, err)
    76  	require.NotNil(t, transport.Proxy)
    77  	assert.Equal(t, reflect.ValueOf(http.ProxyFromEnvironment).Pointer(), reflect.ValueOf(transport.Proxy).Pointer())
    78  }
    79  
    80  func TestCanSetProxyURL(t *testing.T) {
    81  	url, err := url.Parse("https://fake-proxy")
    82  	require.NoError(t, err)
    83  	transport, _, err := NewHTTPTransport(ProxyOption(*url))
    84  	require.NoError(t, err)
    85  	require.NotNil(t, transport.Proxy)
    86  	urlOut, err := transport.Proxy(&http.Request{})
    87  	require.NoError(t, err)
    88  	assert.Equal(t, url, urlOut)
    89  }
    90  

View as plain text