github.com/rudderlabs/rudder-go-kit@v0.30.0/testhelper/httptest/httptest_test.go (about) 1 package httptest_test 2 3 import ( 4 "io" 5 "net" 6 "net/http" 7 "net/url" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/require" 12 13 "github.com/rudderlabs/rudder-go-kit/httputil" 14 kithttptest "github.com/rudderlabs/rudder-go-kit/testhelper/httptest" 15 ) 16 17 func TestServer(t *testing.T) { 18 httpServer := kithttptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 19 _, _ = w.Write([]byte("Hello, world!")) 20 })) 21 defer httpServer.Close() 22 23 httpServerParsedURL, err := url.Parse(httpServer.URL) 24 require.NoError(t, err) 25 26 _, httpServerPort, err := net.SplitHostPort(httpServerParsedURL.Host) 27 require.NoError(t, err) 28 29 var ( 30 body []byte 31 statusCode int 32 ) 33 require.Eventually(t, func() bool { 34 resp, err := http.Get("http://0.0.0.0:" + httpServerPort) 35 defer func() { httputil.CloseResponse(resp) }() 36 if err == nil { 37 statusCode = resp.StatusCode 38 body, err = io.ReadAll(resp.Body) 39 } 40 return err == nil 41 }, 5*time.Second, 10*time.Millisecond, "failed to connect to proxy") 42 43 require.Equal(t, http.StatusOK, statusCode) 44 require.Equal(t, "Hello, world!", string(body)) 45 } 46 47 func TestUnStartedServer(t *testing.T) { 48 // create a server which is not started 49 httpUnStartedServer := kithttptest.NewUnStartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 50 _, _ = w.Write([]byte("Hello, world!")) 51 })) 52 53 var ( 54 body []byte 55 statusCode int 56 ) 57 require.Never(t, func() bool { 58 resp, err := http.Get("http://" + httpUnStartedServer.Listener.Addr().String()) 59 defer func() { httputil.CloseResponse(resp) }() 60 return err == nil 61 }, 5*time.Second, 10*time.Millisecond, "connected to an un-started server") 62 63 // start the server now 64 httpUnStartedServer.Start() 65 defer httpUnStartedServer.Close() 66 67 require.Eventually(t, func() bool { 68 resp, err := http.Get(httpUnStartedServer.URL) 69 defer func() { httputil.CloseResponse(resp) }() 70 if err == nil { 71 statusCode = resp.StatusCode 72 body, err = io.ReadAll(resp.Body) 73 } 74 return err == nil 75 }, 2*time.Second, 100*time.Millisecond, "failed to connect to server") 76 77 require.Equal(t, http.StatusOK, statusCode) 78 require.Equal(t, "Hello, world!", string(body)) 79 }