github.com/icyphox/x@v0.0.355-0.20220311094250-029bd783e8b8/httpx/resilient_client_test.go (about)

     1  package httpx
     2  
     3  import (
     4  	"net"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"net/url"
     8  	"testing"
     9  
    10  	"github.com/opentracing/opentracing-go/mocktracer"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestNoPrivateIPs(t *testing.T) {
    17  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    18  		_, _ = w.Write([]byte("Hello, world!"))
    19  	}))
    20  	t.Cleanup(ts.Close)
    21  	c := NewResilientClient(
    22  		ResilientClientWithMaxRetry(1),
    23  		ResilientClientDisallowInternalIPs())
    24  
    25  	target, err := url.ParseRequestURI(ts.URL)
    26  	require.NoError(t, err)
    27  
    28  	_, port, err := net.SplitHostPort(target.Host)
    29  	require.NoError(t, err)
    30  
    31  	for _, host := range []string{
    32  		"127.0.0.1",
    33  		"localhost",
    34  		"192.168.178.5",
    35  	} {
    36  		target.Host = host + ":" + port
    37  		t.Logf("%s", target.String())
    38  		_, err := c.Get(target.String())
    39  		require.Error(t, err)
    40  		assert.Contains(t, err.Error(), "is in the")
    41  	}
    42  }
    43  
    44  func TestClientWithTracer(t *testing.T) {
    45  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    46  		_, _ = w.Write([]byte("Hello, world!"))
    47  	}))
    48  	t.Cleanup(ts.Close)
    49  
    50  	tracer := mocktracer.New()
    51  	c := NewResilientClient(
    52  		ResilientClientWithTracer(tracer),
    53  	)
    54  
    55  	target, err := url.ParseRequestURI(ts.URL)
    56  	require.NoError(t, err)
    57  
    58  	_, err = c.Get(target.String())
    59  
    60  	assert.NoError(t, err)
    61  
    62  }