[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