X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b30dca66a056bc6ee627bab5956dd8884a0e74aa..1f82ade9be8494e114156210d600a9624262ddba:/services/keepstore/handler_test.go diff --git a/services/keepstore/handler_test.go b/services/keepstore/handler_test.go index 54b4871fab..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