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 }