私は単純なRESTライブラリI wroteで受信している非常に珍しいエラーをデバッグしようとしています。複数のリクエストを連続して実行すると、Golang httpリクエストでEOFエラーが発生する
Get、Post、Put、Deleteのリクエストに標準のnet/httpパッケージを使用していますが、複数のリクエストを連続して実行するとテストが失敗することがあります。私のテストでは、次のようになります。
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
を
2つ以上のリクエストを行った場合、エラーが発生します。 PUTリクエスト以外のすべてをコメントアウトすると、テストは一貫して失敗します。 GETなどの2回目のテストを組み込むと、どちらか一方が失敗することがあります(時には両方が失敗する)。
ありがとうございました。ありがとうございます!ソースへ
リンク:http://github.com/chourobin/go.firebase
全体のコードを表示してください
は、このような状況に関連したチケットがあります。 – Volker
'Error:Post https://go-firebase-test.firebaseio.com/.json:EOF'行の' .json'の前にファイル名があるように見えます。 '.json'がweb-root内の有効なファイル名でない場合、すぐに' EOF'を返します。 URL文字列を作成する関数を確認してください。私はそれが問題になると思う。 – Intermernet
コメントありがとう、私はそのショットを与えるだろう。 – chourobin