Пытается издеваться над HTTP-ответом в тесте Go. Кода ниже, никогда не заканчивается, если я запускаю его сЗаключительный тупик
идут тест example.com/auth/...
package auth_test
import (
"testing"
"net/http/httptest"
"net/http"
)
func TestAuthorization(t *testing.T) {
t.Log("Should return 401 when Gateway returns 401")
{
url := oneOffUrlWithResponseCode(http.StatusUnauthorized)
request, _ := http.NewRequest("GET", url, nil)
response, _ := http.DefaultClient.Do(request)
if response.StatusCode != http.StatusUnauthorized {
t.Fatalf("Response should be 401 (Unauthorized)")
}
}
}
func oneOffUrlWithResponseCode(responseCode int) string {
var server *httptest.Server
server = httptest.NewServer(http.HandlerFunc(func(response http.ResponseWriter, request *http.Request) {
defer server.Close()
response.WriteHeader(responseCode)
}))
return server.URL
}
Однако, если я закомментировать эту строку
отложить сервер.Закрыть()
все работает нормально.
В идеале, я не хочу «утечка» * httptest.Server за пределами функции oneOffUrlWithResponseCode и, очевидно, закрывает его после первого запроса.
Почему он никогда не заканчивается? Что я делаю не так? Что правильно делать?
Просто любопытно, но почему вы хотите, чтобы скрыть сервер. Кажется довольно разумным, что сервер возвращается, так как ожидается, что он будет использоваться для теста, например. сервер создается, и сервер закрывается тестом (а не его обратным вызовом). –