Merge branch '11917-dont-clear-cache'
[arvados.git] / services / keep-web / cache_test.go
index ef3a760d96adfa2265414c7a0b62f7cffd24ef5a..05325270e6bd3e566037c0a899ceeac5d7600275 100644 (file)
@@ -1,3 +1,7 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
 package main
 
 import (
@@ -7,6 +11,8 @@ import (
 )
 
 func (s *UnitSuite) TestCache(c *check.C) {
+       c.Skip("see #11945")
+
        arv, err := arvadosclient.MakeArvadosClient()
        c.Assert(err, check.Equals, nil)
 
@@ -20,8 +26,8 @@ func (s *UnitSuite) TestCache(c *check.C) {
                coll, err := cache.Get(arv, arvadostest.FooCollection, false)
                c.Check(err, check.Equals, nil)
                c.Assert(coll, check.NotNil)
-               c.Check(coll["portable_data_hash"], check.Equals, arvadostest.FooPdh)
-               c.Check(coll["manifest_text"].(string)[:2], check.Equals, ". ")
+               c.Check(coll.PortableDataHash, check.Equals, arvadostest.FooPdh)
+               c.Check(coll.ManifestText[:2], check.Equals, ". ")
        }
        c.Check(cache.Stats().Requests, check.Equals, uint64(5))
        c.Check(cache.Stats().CollectionHits, check.Equals, uint64(4))
@@ -38,12 +44,71 @@ func (s *UnitSuite) TestCache(c *check.C) {
                coll, err := cache.Get(arv, arvadostest.FooPdh, false)
                c.Check(err, check.Equals, nil)
                c.Assert(coll, check.NotNil)
-               c.Check(coll["portable_data_hash"], check.Equals, arvadostest.FooPdh)
-               c.Check(coll["manifest_text"].(string)[:2], check.Equals, ". ")
+               c.Check(coll.PortableDataHash, check.Equals, arvadostest.FooPdh)
+               c.Check(coll.ManifestText[:2], check.Equals, ". ")
        }
-       c.Check(cache.Stats().Requests, check.Equals, uint64(7))
-       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(6))
-       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(5))
-       c.Check(cache.Stats().PDHHits, check.Equals, uint64(4))
-       c.Check(cache.Stats().APICalls, check.Equals, uint64(2))
+       c.Check(cache.Stats().Requests, check.Equals, uint64(5+2))
+       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(4+2))
+       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(4+1))
+       c.Check(cache.Stats().PDHHits, check.Equals, uint64(4+0))
+       c.Check(cache.Stats().APICalls, check.Equals, uint64(1+1))
+
+       // Alternating between two collections N times should produce
+       // only 2 more API calls.
+       arv.ApiToken = arvadostest.AdminToken
+       for i := 0; i < 20; i++ {
+               var target string
+               if i%2 == 0 {
+                       target = arvadostest.HelloWorldCollection
+               } else {
+                       target = arvadostest.FooBarDirCollection
+               }
+               _, err := cache.Get(arv, target, false)
+               c.Check(err, check.Equals, nil)
+       }
+       c.Check(cache.Stats().Requests, check.Equals, uint64(5+2+20))
+       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(4+2+18))
+       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(4+1+18))
+       c.Check(cache.Stats().PDHHits, check.Equals, uint64(4+0+18))
+       c.Check(cache.Stats().APICalls, check.Equals, uint64(1+1+2))
+}
+
+func (s *UnitSuite) TestCacheForceReloadByPDH(c *check.C) {
+       c.Skip("see #11945")
+
+       arv, err := arvadosclient.MakeArvadosClient()
+       c.Assert(err, check.Equals, nil)
+
+       cache := DefaultConfig().Cache
+
+       for _, forceReload := range []bool{false, true, false, true} {
+               _, err := cache.Get(arv, arvadostest.FooPdh, forceReload)
+               c.Check(err, check.Equals, nil)
+       }
+
+       c.Check(cache.Stats().Requests, check.Equals, uint64(4))
+       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(3))
+       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(1))
+       c.Check(cache.Stats().PDHHits, check.Equals, uint64(0))
+       c.Check(cache.Stats().APICalls, check.Equals, uint64(3))
+}
+
+func (s *UnitSuite) TestCacheForceReloadByUUID(c *check.C) {
+       c.Skip("see #11945")
+
+       arv, err := arvadosclient.MakeArvadosClient()
+       c.Assert(err, check.Equals, nil)
+
+       cache := DefaultConfig().Cache
+
+       for _, forceReload := range []bool{false, true, false, true} {
+               _, err := cache.Get(arv, arvadostest.FooCollection, forceReload)
+               c.Check(err, check.Equals, nil)
+       }
+
+       c.Check(cache.Stats().Requests, check.Equals, uint64(4))
+       c.Check(cache.Stats().CollectionHits, check.Equals, uint64(3))
+       c.Check(cache.Stats().PermissionHits, check.Equals, uint64(1))
+       c.Check(cache.Stats().PDHHits, check.Equals, uint64(3))
+       c.Check(cache.Stats().APICalls, check.Equals, uint64(3))
 }