X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f04693da1811e670d4cbb981debeecf14d79137c..b39f7a6141ecd5c53531b7705c0496623b4df9e9:/services/keepstore/handler_test.go diff --git a/services/keepstore/handler_test.go b/services/keepstore/handler_test.go index 251ad0a1df..17ed6402ce 100644 --- a/services/keepstore/handler_test.go +++ b/services/keepstore/handler_test.go @@ -25,10 +25,10 @@ import ( "strings" "time" - "git.curoverse.com/arvados.git/lib/config" - "git.curoverse.com/arvados.git/sdk/go/arvados" - "git.curoverse.com/arvados.git/sdk/go/arvadostest" - "git.curoverse.com/arvados.git/sdk/go/ctxlog" + "git.arvados.org/arvados.git/lib/config" + "git.arvados.org/arvados.git/sdk/go/arvados" + "git.arvados.org/arvados.git/sdk/go/arvadostest" + "git.arvados.org/arvados.git/sdk/go/ctxlog" "github.com/prometheus/client_golang/prometheus" check "gopkg.in/check.v1" ) @@ -46,7 +46,7 @@ func testCluster(t TB) *arvados.Cluster { if err != nil { t.Fatal(err) } - cluster.SystemRootToken = arvadostest.DataManagerToken + cluster.SystemRootToken = arvadostest.SystemRootToken cluster.ManagementToken = arvadostest.ManagementToken cluster.Collections.BlobSigning = false return cluster @@ -318,6 +318,57 @@ func (s *HandlerSuite) TestPutAndDeleteSkipReadonlyVolumes(c *check.C) { } } +// Test TOUCH requests. +func (s *HandlerSuite) TestTouchHandler(c *check.C) { + c.Assert(s.handler.setup(context.Background(), s.cluster, "", prometheus.NewRegistry(), testServiceURL), check.IsNil) + vols := s.handler.volmgr.AllWritable() + vols[0].Put(context.Background(), TestHash, TestBlock) + vols[0].Volume.(*MockVolume).TouchWithDate(TestHash, time.Now().Add(-time.Hour)) + afterPut := time.Now() + t, err := vols[0].Mtime(TestHash) + c.Assert(err, check.IsNil) + c.Assert(t.Before(afterPut), check.Equals, true) + + ExpectStatusCode(c, + "touch with no credentials", + http.StatusUnauthorized, + IssueRequest(s.handler, &RequestTester{ + method: "TOUCH", + uri: "/" + TestHash, + })) + + ExpectStatusCode(c, + "touch with non-root credentials", + http.StatusUnauthorized, + IssueRequest(s.handler, &RequestTester{ + method: "TOUCH", + uri: "/" + TestHash, + apiToken: arvadostest.ActiveTokenV2, + })) + + ExpectStatusCode(c, + "touch non-existent block", + http.StatusNotFound, + IssueRequest(s.handler, &RequestTester{ + method: "TOUCH", + uri: "/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + apiToken: s.cluster.SystemRootToken, + })) + + beforeTouch := time.Now() + ExpectStatusCode(c, + "touch block", + http.StatusOK, + IssueRequest(s.handler, &RequestTester{ + method: "TOUCH", + uri: "/" + TestHash, + apiToken: s.cluster.SystemRootToken, + })) + t, err = vols[0].Mtime(TestHash) + c.Assert(err, check.IsNil) + c.Assert(t.After(beforeTouch), check.Equals, true) +} + // Test /index requests: // - unauthenticated /index request // - unauthenticated /index/prefix request @@ -327,7 +378,7 @@ func (s *HandlerSuite) TestPutAndDeleteSkipReadonlyVolumes(c *check.C) { // - authenticated /index/prefix request | superuser // // The only /index requests that should succeed are those issued by the -// superuser. They should pass regardless of the value of RequireSignatures. +// superuser. They should pass regardless of the value of BlobSigning. // func (s *HandlerSuite) TestIndexHandler(c *check.C) { c.Assert(s.handler.setup(context.Background(), s.cluster, "", prometheus.NewRegistry(), testServiceURL), check.IsNil) @@ -393,7 +444,7 @@ func (s *HandlerSuite) TestIndexHandler(c *check.C) { // => UnauthorizedError response := IssueRequest(s.handler, unauthenticatedReq) ExpectStatusCode(c, - "RequireSignatures on, unauthenticated request", + "permissions on, unauthenticated request", UnauthorizedError.HTTPCode, response) @@ -520,7 +571,7 @@ func (s *HandlerSuite) TestDeleteHandler(c *check.C) { vols := s.handler.volmgr.AllWritable() vols[0].Put(context.Background(), TestHash, TestBlock) - // Explicitly set the BlobSignatureTTL to 0 for these + // Explicitly set the BlobSigningTTL to 0 for these // tests, to ensure the MockVolume deletes the blocks // even though they have just been created. s.cluster.Collections.BlobSigningTTL = arvados.Duration(0) @@ -611,7 +662,7 @@ func (s *HandlerSuite) TestDeleteHandler(c *check.C) { c.Error("superuserExistingBlockReq: block not deleted") } - // A DELETE request on a block newer than BlobSignatureTTL + // A DELETE request on a block newer than BlobSigningTTL // should return success but leave the block on the volume. vols[0].Put(context.Background(), TestHash, TestBlock) s.cluster.Collections.BlobSigningTTL = arvados.Duration(time.Hour) @@ -892,10 +943,7 @@ func ExpectStatusCode( testname string, expectedStatus int, response *httptest.ResponseRecorder) { - if response.Code != expectedStatus { - c.Errorf("%s: expected status %d, got %+v", - testname, expectedStatus, response) - } + c.Check(response.Code, check.Equals, expectedStatus, check.Commentf("%s", testname)) } func ExpectBody( @@ -936,7 +984,7 @@ func (s *HandlerSuite) TestPutNeedsOnlyOneBuffer(c *check.C) { select { case <-ok: case <-time.After(time.Second): - c.Fatal("PUT deadlocks with MaxBuffers==1") + c.Fatal("PUT deadlocks with MaxKeepBlobBuffers==1") } } @@ -947,7 +995,7 @@ func (s *HandlerSuite) TestPutHandlerNoBufferleak(c *check.C) { ok := make(chan bool) go func() { - for i := 0; i < s.cluster.API.MaxKeepBlockBuffers+1; i++ { + for i := 0; i < s.cluster.API.MaxKeepBlobBuffers+1; i++ { // Unauthenticated request, no server key // => OK (unsigned response) unsignedLocator := "/" + TestHash @@ -1039,7 +1087,7 @@ func (s *HandlerSuite) TestGetHandlerNoBufferLeak(c *check.C) { ok := make(chan bool) go func() { - for i := 0; i < s.cluster.API.MaxKeepBlockBuffers+1; i++ { + for i := 0; i < s.cluster.API.MaxKeepBlobBuffers+1; i++ { // Unauthenticated request, unsigned locator // => OK unsignedLocator := "/" + TestHash @@ -1147,12 +1195,7 @@ func (s *HandlerSuite) TestUntrashHandler(c *check.C) { "", http.StatusOK, response) - expected := "Successfully untrashed on: [MockVolume],[MockVolume]" - if response.Body.String() != expected { - c.Errorf( - "Untrash response mismatched: expected %s, got:\n%s", - expected, response.Body.String()) - } + c.Check(response.Body.String(), check.Equals, "Successfully untrashed on: [MockVolume], [MockVolume]\n") } func (s *HandlerSuite) TestUntrashHandlerWithNoWritableVolumes(c *check.C) {