[ARVADOS] updated: 1.2.0-193-g7ad5d87a9

Git user git at public.curoverse.com
Mon Oct 15 13:52:59 EDT 2018


Summary of changes:
 build/run-tests.sh           |  2 ++
 sdk/go/auth/handlers.go      |  5 ++-
 sdk/go/auth/handlers_test.go | 79 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 85 insertions(+), 1 deletion(-)
 create mode 100644 sdk/go/auth/handlers_test.go

       via  7ad5d87a9e2d67224ed440c9320f1850cbaf6ae1 (commit)
      from  063eb858429a7472c888261d0512fd960e92b7ae (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 7ad5d87a9e2d67224ed440c9320f1850cbaf6ae1
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date:   Mon Oct 15 13:50:10 2018 -0400

    14285: Add tests for LoadToken and RequireLiteralToken.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>

diff --git a/build/run-tests.sh b/build/run-tests.sh
index 4ddbf89c1..26a907fc2 100755
--- a/build/run-tests.sh
+++ b/build/run-tests.sh
@@ -101,6 +101,7 @@ sdk/python:py3
 sdk/ruby
 sdk/go/arvados
 sdk/go/arvadosclient
+sdk/go/auth
 sdk/go/dispatch
 sdk/go/keepclient
 sdk/go/health
@@ -925,6 +926,7 @@ gostuff=(
     lib/dispatchcloud
     sdk/go/arvados
     sdk/go/arvadosclient
+    sdk/go/auth
     sdk/go/blockdigest
     sdk/go/dispatch
     sdk/go/health
diff --git a/sdk/go/auth/handlers.go b/sdk/go/auth/handlers.go
index 7b1760f4b..ad1fa5141 100644
--- a/sdk/go/auth/handlers.go
+++ b/sdk/go/auth/handlers.go
@@ -18,7 +18,10 @@ var contextKeyCredentials contextKey = "credentials"
 // CredentialsFromRequest.
 func LoadToken(next http.Handler) http.Handler {
 	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		next.ServeHTTP(w, r.WithContext(context.WithValue(r.Context(), contextKeyCredentials, CredentialsFromRequest(r))))
+		if _, ok := r.Context().Value(contextKeyCredentials).(*Credentials); !ok {
+			r = r.WithContext(context.WithValue(r.Context(), contextKeyCredentials, CredentialsFromRequest(r)))
+		}
+		next.ServeHTTP(w, r)
 	})
 }
 
diff --git a/sdk/go/auth/handlers_test.go b/sdk/go/auth/handlers_test.go
new file mode 100644
index 000000000..362aeb7f0
--- /dev/null
+++ b/sdk/go/auth/handlers_test.go
@@ -0,0 +1,79 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+package auth
+
+import (
+	"net/http"
+	"net/http/httptest"
+	"testing"
+
+	check "gopkg.in/check.v1"
+)
+
+// Gocheck boilerplate
+func Test(t *testing.T) {
+	check.TestingT(t)
+}
+
+var _ = check.Suite(&HandlersSuite{})
+
+type HandlersSuite struct {
+	served         int
+	gotCredentials *Credentials
+}
+
+func (s *HandlersSuite) SetUpTest(c *check.C) {
+	s.served = 0
+	s.gotCredentials = nil
+}
+
+func (s *HandlersSuite) TestLoadToken(c *check.C) {
+	handler := LoadToken(s)
+	handler.ServeHTTP(httptest.NewRecorder(), httptest.NewRequest("GET", "/foo/bar?api_token=xyzzy", nil))
+	c.Assert(s.gotCredentials, check.NotNil)
+	c.Assert(s.gotCredentials.Tokens, check.HasLen, 1)
+	c.Check(s.gotCredentials.Tokens[0], check.Equals, "xyzzy")
+}
+
+func (s *HandlersSuite) TestRequireLiteralTokenEmpty(c *check.C) {
+	handler := RequireLiteralToken("", s)
+
+	w := httptest.NewRecorder()
+	handler.ServeHTTP(w, httptest.NewRequest("GET", "/foo/bar?api_token=abcdef", nil))
+	c.Check(s.served, check.Equals, 1)
+	c.Check(w.Code, check.Equals, http.StatusOK)
+
+	w = httptest.NewRecorder()
+	handler.ServeHTTP(w, httptest.NewRequest("GET", "/foo/bar", nil))
+	c.Check(s.served, check.Equals, 2)
+	c.Check(w.Code, check.Equals, http.StatusOK)
+}
+
+func (s *HandlersSuite) TestRequireLiteralToken(c *check.C) {
+	handler := RequireLiteralToken("xyzzy", s)
+
+	w := httptest.NewRecorder()
+	handler.ServeHTTP(w, httptest.NewRequest("GET", "/foo/bar?api_token=abcdef", nil))
+	c.Check(s.served, check.Equals, 0)
+	c.Check(w.Code, check.Equals, http.StatusForbidden)
+
+	w = httptest.NewRecorder()
+	handler.ServeHTTP(w, httptest.NewRequest("GET", "/foo/bar", nil))
+	c.Check(s.served, check.Equals, 0)
+	c.Check(w.Code, check.Equals, http.StatusUnauthorized)
+
+	w = httptest.NewRecorder()
+	handler.ServeHTTP(w, httptest.NewRequest("GET", "/foo/bar?api_token=xyzzy", nil))
+	c.Check(s.served, check.Equals, 1)
+	c.Check(w.Code, check.Equals, http.StatusOK)
+	c.Assert(s.gotCredentials, check.NotNil)
+	c.Assert(s.gotCredentials.Tokens, check.HasLen, 1)
+	c.Check(s.gotCredentials.Tokens[0], check.Equals, "xyzzy")
+}
+
+func (s *HandlersSuite) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+	s.served++
+	s.gotCredentials = CredentialsFromRequest(r)
+}

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list