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  }