13493: Test PATCH request.
[arvados.git] / lib / controller / handler_test.go
index 57bb13d959fd5157167904f4f62da8920b3198d2..4829fe0e44f8e54aed4beed95d99c746c2a803e3 100644 (file)
@@ -8,11 +8,15 @@ import (
        "encoding/json"
        "net/http"
        "net/http/httptest"
+       "net/url"
        "os"
+       "strings"
        "testing"
+       "time"
 
        "git.curoverse.com/arvados.git/sdk/go/arvados"
        "git.curoverse.com/arvados.git/sdk/go/arvadostest"
+       "git.curoverse.com/arvados.git/sdk/go/httpserver"
        check "gopkg.in/check.v1"
 )
 
@@ -31,14 +35,14 @@ type HandlerSuite struct {
 func (s *HandlerSuite) SetUpTest(c *check.C) {
        s.cluster = &arvados.Cluster{
                ClusterID: "zzzzz",
-               SystemNodes: map[string]arvados.SystemNode{
+               NodeProfiles: map[string]arvados.NodeProfile{
                        "*": {
                                Controller: arvados.SystemServiceInstance{Listen: ":"},
-                               RailsAPI:   arvados.SystemServiceInstance{Listen: os.Getenv("ARVADOS_API_HOST"), TLS: true},
+                               RailsAPI:   arvados.SystemServiceInstance{Listen: os.Getenv("ARVADOS_TEST_API_HOST"), TLS: true},
                        },
                },
        }
-       node := s.cluster.SystemNodes["*"]
+       node := s.cluster.NodeProfiles["*"]
        s.handler = newHandler(s.cluster, &node)
 }
 
@@ -56,6 +60,19 @@ func (s *HandlerSuite) TestProxyDiscoveryDoc(c *check.C) {
        c.Check(len(dd.Schemas), check.Not(check.Equals), 0)
 }
 
+func (s *HandlerSuite) TestRequestTimeout(c *check.C) {
+       s.cluster.HTTPRequestTimeout = arvados.Duration(time.Nanosecond)
+       req := httptest.NewRequest("GET", "/discovery/v1/apis/arvados/v1/rest", nil)
+       resp := httptest.NewRecorder()
+       s.handler.ServeHTTP(resp, req)
+       c.Check(resp.Code, check.Equals, http.StatusInternalServerError)
+       var jresp httpserver.ErrorResponse
+       err := json.Unmarshal(resp.Body.Bytes(), &jresp)
+       c.Check(err, check.IsNil)
+       c.Assert(len(jresp.Errors), check.Equals, 1)
+       c.Check(jresp.Errors[0], check.Matches, `.*context deadline exceeded`)
+}
+
 func (s *HandlerSuite) TestProxyWithoutToken(c *check.C) {
        req := httptest.NewRequest("GET", "/arvados/v1/users/current", nil)
        resp := httptest.NewRecorder()
@@ -79,6 +96,21 @@ func (s *HandlerSuite) TestProxyWithToken(c *check.C) {
        c.Check(u.UUID, check.Equals, arvadostest.ActiveUserUUID)
 }
 
+func (s *HandlerSuite) TestProxyWithTokenInRequestBody(c *check.C) {
+       req := httptest.NewRequest("POST", "/arvados/v1/users/current", strings.NewReader(url.Values{
+               "_method":   {"GET"},
+               "api_token": {arvadostest.ActiveToken},
+       }.Encode()))
+       req.Header.Set("Content-type", "application/x-www-form-urlencoded")
+       resp := httptest.NewRecorder()
+       s.handler.ServeHTTP(resp, req)
+       c.Check(resp.Code, check.Equals, http.StatusOK)
+       var u arvados.User
+       err := json.Unmarshal(resp.Body.Bytes(), &u)
+       c.Check(err, check.IsNil)
+       c.Check(u.UUID, check.Equals, arvadostest.ActiveUserUUID)
+}
+
 func (s *HandlerSuite) TestProxyNotFound(c *check.C) {
        req := httptest.NewRequest("GET", "/arvados/v1/xyzzy", nil)
        resp := httptest.NewRecorder()