[ARVADOS] created: 1.1.4-247-g7bf7c2b
Git user
git at public.curoverse.com
Thu May 10 14:28:32 EDT 2018
at 7bf7c2b7c3ae457e2bcbd1400bb52a7552ea22cf (commit)
commit 7bf7c2b7c3ae457e2bcbd1400bb52a7552ea22cf
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Thu May 10 14:28:01 2018 -0400
9918: Don't mask http/network error with response body format error.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/sdk/go/arvados/client_test.go b/sdk/go/arvados/client_test.go
index b0627fd..df93800 100644
--- a/sdk/go/arvados/client_test.go
+++ b/sdk/go/arvados/client_test.go
@@ -12,6 +12,7 @@ import (
"net/url"
"sync"
"testing"
+ "testing/iotest"
)
type stubTransport struct {
@@ -51,6 +52,22 @@ func (stub *errorTransport) RoundTrip(req *http.Request) (*http.Response, error)
return nil, fmt.Errorf("something awful happened")
}
+type timeoutTransport struct {
+ response []byte
+}
+
+func (stub *timeoutTransport) RoundTrip(req *http.Request) (*http.Response, error) {
+ return &http.Response{
+ Status: "200 OK",
+ StatusCode: 200,
+ Proto: "HTTP/1.1",
+ ProtoMajor: 1,
+ ProtoMinor: 1,
+ Request: req,
+ Body: ioutil.NopCloser(iotest.TimeoutReader(bytes.NewReader(stub.response))),
+ }, nil
+}
+
func TestCurrentUser(t *testing.T) {
t.Parallel()
stub := &stubTransport{
diff --git a/sdk/go/arvados/keep_service.go b/sdk/go/arvados/keep_service.go
index 9797440..0c86635 100644
--- a/sdk/go/arvados/keep_service.go
+++ b/sdk/go/arvados/keep_service.go
@@ -127,6 +127,13 @@ func (s *KeepService) index(c *Client, url string) ([]KeepServiceIndexEntry, err
scanner := bufio.NewScanner(resp.Body)
sawEOF := false
for scanner.Scan() {
+ if scanner.Err() != nil {
+ // If we encounter a read error (timeout,
+ // connection failure), stop now and return it
+ // below, so it doesn't get masked by the
+ // ensuing "badly formatted response" error.
+ break
+ }
if sawEOF {
return nil, fmt.Errorf("Index response contained non-terminal blank line")
}
diff --git a/sdk/go/arvados/keep_service_test.go b/sdk/go/arvados/keep_service_test.go
new file mode 100644
index 0000000..8715f74
--- /dev/null
+++ b/sdk/go/arvados/keep_service_test.go
@@ -0,0 +1,27 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+package arvados
+
+import (
+ "net/http"
+
+ check "gopkg.in/check.v1"
+)
+
+var _ = check.Suite(&KeepServiceSuite{})
+
+type KeepServiceSuite struct{}
+
+func (*KeepServiceSuite) TestIndexTimeout(c *check.C) {
+ client := &Client{
+ Client: &http.Client{
+ Transport: &timeoutTransport{response: []byte("\n")},
+ },
+ APIHost: "zzzzz.arvadosapi.com",
+ AuthToken: "xyzzy",
+ }
+ _, err := (&KeepService{}).IndexMount(client, "fake", "")
+ c.Check(err, check.ErrorMatches, `.*timeout.*`)
+}
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list