github.com/line/ostracon@v1.0.10-0.20230328032236-7f20145f065d/libs/net/http_test.go (about) 1 package net 2 3 import ( 4 "github.com/stretchr/testify/require" 5 "io" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 "time" 10 ) 11 12 func TestHttpGet(t *testing.T) { 13 expected := "hello, world" 14 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 15 w.WriteHeader(200) 16 w.Header().Set("Pragma", "no-cache") 17 w.Header().Set("Cache-Control", "no-cache") 18 w.Header().Set("Content-Type", "text/plain; charset=UTF-8") 19 _, err := w.Write([]byte(expected)) 20 require.NoError(t, err) 21 })) 22 defer server.Close() 23 24 response, err := HttpGet(server.URL, 60*time.Second) 25 require.NoError(t, err) 26 bytes, err := io.ReadAll(response.Body) 27 require.NoError(t, err) 28 require.Equal(t, expected, string(bytes)) 29 } 30 31 func TestHttpGetWithTimeout(t *testing.T) { 32 shutdown := make(chan string) 33 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 34 var _ = <-shutdown 35 })) 36 defer server.Close() 37 38 accuracy := 0.05 39 timeout := 10 * time.Second 40 defer func() { shutdown <- "shutdown" }() 41 t0 := time.Now() 42 _, err := HttpGet(server.URL, timeout) 43 t1 := time.Now() 44 require.Error(t, err) 45 delta := t1.Sub(t0).Seconds() 46 require.Greater(t, delta, timeout.Seconds()) 47 require.InDeltaf(t, timeout.Seconds(), delta, accuracy, 48 "response time of %.3f sec exceeded +%d%% of the expected timeout of %.3f sec", delta, uint(accuracy*100), timeout.Seconds()) 49 } 50 51 func TestHttpGetWithInvalidURL(t *testing.T) { 52 _, err := HttpGet("\n", 0*time.Second) 53 require.Error(t, err) 54 }