我正在尝试调试我编写的一个简单 REST 库收到的一个非常不寻常的错误。


我使用标准的 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