HTTP-запрос Golang приводит к ошибкам EOF при последовательном выполнении нескольких запросов

Я пытаюсь отладить очень необычную ошибку, которую я получаю для простой библиотеки REST Iписал.

Я использую стандартный пакет net / http для выполнения запросов Get, Post, Put, Delete, но мои тесты иногда не проходят, когда я делаю несколько запросов подряд. Мой тест выглядит так:

func TestGetObject(t *testing.T) {
    firebaseRoot := New(firebase_url)
    body, err := firebaseRoot.Get("1")
    if err != nil {
        t.Errorf("Error: %s", err)
    }
    t.Logf("%q", body)
}  

func TestPushObject(t *testing.T) {
    firebaseRoot := New(firebase_url)
    msg := Message{"testing", "1..2..3"}
    body, err := firebaseRoot.Push("/", msg)
    if err != nil {
        t.Errorf("Error: %s", err)
    }
    t.Logf("%q", body)
}

И я делаю запрос так:

// Send HTTP Request, return data
func (f *firebaseRoot) SendRequest(method string, path string, body io.Reader) ([]byte, error) {
url := f.BuildURL(path)

// create a request
req, err := http.NewRequest(method, url, body)
if err != nil {
    return nil, err
}

// send JSON to firebase
resp, err := http.DefaultClient.Do(req)
if err != nil {
    return nil, err
}

if resp.StatusCode != http.StatusOK {
    return nil, fmt.Errorf("Bad HTTP Response: %v", resp.Status)
}

defer resp.Body.Close()
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
    return nil, err
}

return b, nil
} 

Иногда это работает, но в большинстве случаев я получаю 1 или 2 ошибки:

--- FAIL: TestGetObject (0.00 seconds)
firebase_test.go:53: Error: Get https://go-firebase-test.firebaseio.com/1.json: EOF
firebase_test.go:55: ""

--- FAIL: TestPushObject (0.00 seconds)
firebase_test.go:63: Error: Post https://go-firebase-test.firebaseio.com/.json: EOF
firebase_test.go:65: ""
FAIL
exit status 1
FAIL    github.com/chourobin/go.firebase    3.422s

Сбои случаются, когда я делаю более 1 запроса. Если я закомментирую все, кроме запроса PUT, тесты последовательно пройдут. Как только я включаю второй тест, такой как GET, один или другой не проходит (иногда оба проходят).

Любая помощь приветствуется, и спасибо!

Ссылка на источник:http://github.com/chourobin/go.firebase

Ответы на вопрос(3)

Ваш ответ на вопрос