17830: Adds test cases & fixes one more issue.
authorLucas Di Pentima <lucas.dipentima@curii.com>
Tue, 27 Jul 2021 19:22:26 +0000 (16:22 -0300)
committerLucas Di Pentima <lucas.dipentima@curii.com>
Tue, 27 Jul 2021 19:22:26 +0000 (16:22 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas.dipentima@curii.com>

lib/controller/integration_test.go
lib/controller/router/response.go
lib/controller/router/router.go

index bd910aab433b43087d4791961cae0b812e47399f..26f0dbb0d1388da1886cea726fc644648b4d57e3 100644 (file)
@@ -26,6 +26,7 @@ import (
        "git.arvados.org/arvados.git/sdk/go/arvados"
        "git.arvados.org/arvados.git/sdk/go/arvadostest"
        "git.arvados.org/arvados.git/sdk/go/ctxlog"
+       "git.arvados.org/arvados.git/sdk/go/httpserver"
        check "gopkg.in/check.v1"
 )
 
@@ -435,16 +436,30 @@ func (s *IntegrationSuite) TestCreateContainerRequestWithBadToken(c *check.C) {
 func (s *IntegrationSuite) TestRequestIDHeader(c *check.C) {
        conn1 := s.testClusters["z1111"].Conn()
        rootctx1, _, _ := s.testClusters["z1111"].RootClients()
-       _, ac1, _, _ := s.testClusters["z1111"].UserClients(rootctx1, c, conn1, "user@example.com", true)
+       userctx1, ac1, _, _ := s.testClusters["z1111"].UserClients(rootctx1, c, conn1, "user@example.com", true)
+
+       coll, err := conn1.CollectionCreate(userctx1, arvados.CreateOptions{})
+       c.Check(err, check.IsNil)
+       specimen, err := conn1.SpecimenCreate(userctx1, arvados.CreateOptions{})
+       c.Check(err, check.IsNil)
 
        tests := []struct {
-               path          string
-               reqIdProvided bool
+               path            string
+               reqIdProvided   bool
+               notFoundRequest bool
        }{
-               {"/arvados/v1/container_requests", false},
-               {"/arvados/v1/container_requests", true},
-               {"/arvados/v1/links", false},
-               {"/arvados/v1/links", true},
+               {"/arvados/v1/collections", false, false},
+               {"/arvados/v1/collections", true, false},
+               {"/arvados/v1/nonexistant", false, true},
+               {"/arvados/v1/nonexistant", true, true},
+               {"/arvados/v1/collections/" + coll.UUID, false, false},
+               {"/arvados/v1/collections/" + coll.UUID, true, false},
+               {"/arvados/v1/specimens/" + specimen.UUID, false, false},
+               {"/arvados/v1/specimens/" + specimen.UUID, true, false},
+               {"/arvados/v1/collections/z1111-4zz18-0123456789abcde", false, true},
+               {"/arvados/v1/collections/z1111-4zz18-0123456789abcde", true, true},
+               {"/arvados/v1/specimens/z1111-j58dm-0123456789abcde", false, true},
+               {"/arvados/v1/specimens/z1111-j58dm-0123456789abcde", true, true},
        }
 
        for _, tt := range tests {
@@ -459,11 +474,29 @@ func (s *IntegrationSuite) TestRequestIDHeader(c *check.C) {
                }
                resp, err := ac1.Do(req)
                c.Assert(err, check.IsNil)
-               c.Check(resp.StatusCode, check.Equals, http.StatusOK)
+               if tt.notFoundRequest {
+                       c.Check(resp.StatusCode, check.Equals, http.StatusNotFound)
+               } else {
+                       c.Check(resp.StatusCode, check.Equals, http.StatusOK)
+               }
                if !tt.reqIdProvided {
                        c.Check(resp.Header.Get("X-Request-Id"), check.Matches, "^req-[0-9a-zA-Z]{20}$")
+                       if tt.notFoundRequest {
+                               var jresp httpserver.ErrorResponse
+                               err := json.NewDecoder(resp.Body).Decode(&jresp)
+                               c.Check(err, check.IsNil)
+                               c.Assert(jresp.Errors, check.HasLen, 1)
+                               c.Check(jresp.Errors[0], check.Matches, "^.*(req-[0-9a-zA-Z]{20}).*$")
+                       }
                } else {
                        c.Check(resp.Header.Get("X-Request-Id"), check.Equals, customReqId)
+                       if tt.notFoundRequest {
+                               var jresp httpserver.ErrorResponse
+                               err := json.NewDecoder(resp.Body).Decode(&jresp)
+                               c.Check(err, check.IsNil)
+                               c.Assert(jresp.Errors, check.HasLen, 1)
+                               c.Check(jresp.Errors[0], check.Matches, "^.*("+customReqId+").*$")
+                       }
                }
        }
 }
index 35a4e5f1bfd24f466e1be858d8cd248602bc7771..03cdcf18d27e4fcf3df814ab3c652c3479456165 100644 (file)
@@ -67,7 +67,6 @@ func (rtr *router) sendResponse(w http.ResponseWriter, req *http.Request, resp i
                return
        }
 
-       w.Header().Set("X-Request-Id", req.Header.Get("X-Request-Id"))
        err := rtr.transcode(resp, &tmp)
        if err != nil {
                rtr.sendError(w, err)
index 5ceabbfb1d56fab171d8d4a8dfabca585f1362f6..0325e0c9852fe1830da9719eaf5b59947350ea7a 100644 (file)
@@ -506,6 +506,7 @@ func (rtr *router) addRoute(endpoint arvados.APIEndpoint, defaultOpts func() int
                }
                ctx := auth.NewContext(req.Context(), creds)
                ctx = arvados.ContextWithRequestID(ctx, req.Header.Get("X-Request-Id"))
+               w.Header().Set("X-Request-Id", req.Header.Get("X-Request-Id"))
                logger.WithFields(logrus.Fields{
                        "apiEndpoint": endpoint,
                        "apiOptsType": fmt.Sprintf("%T", opts),