Hi all, I am attempting to write a test for http client timeout behaviour. 
Here’s my bad test server:

func startBadTestHTTPServer() *httptest.Server {
        ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r 
*http.Request) {
                time.Sleep(60 * time.Second)
                fmt.Fprint(w, "Hello World")
        }))
        return ts
}

func TestFetchBadRemoteResource(t *testing.T) {
        ts := startBadTestHTTPServer()
        defer ts.Close()

        client := http.Client{Timeout: 15 * time.Second}
        data, err := fetchRemoteResource(client, ts.URL)
        if err != nil {
                t.Fatal(err)
        }

        expected := "Hello World"
        got := string(data)

        if expected != got {
                t.Errorf("Expected response to be: %s, Got: %s", expected, got)
        }
}

When I run the test, I get:

RUN   TestFetchBadRemoteResource
    fetch_remote_resource_bad_server_test.go:27: Get "http://127.0.0.1:62721": 
context deadline exceeded (Client.Timeout exceeded while awaiting headers)


This is expected. But I also get:

2020/11/14 22:24:58 httptest.Server blocked in Close after 5 seconds, waiting 
for connections:
  *net.TCPConn 0xc000124040 127.0.0.1:62722 in state active
--- FAIL: TestFetchBadRemoteResource (60.00s)


I understand why this is happening. But, my test still waits for 60 seconds for 
the server to shutdown.

Is there a way around this behaviour where the test server can be forcibly 
terminated and just carry on?

Thanks,
Amit


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/94AE404A-6CB1-44EF-AE10-35CC6F87B3D6%40gmail.com.

Reply via email to