github.com/cs3org/reva/v2@v2.27.7/pkg/storage/utils/decomposedfs/mtimesyncedcache/mtimesyncedcache_test.go (about) 1 package mtimesyncedcache_test 2 3 import ( 4 "errors" 5 "time" 6 7 . "github.com/onsi/ginkgo/v2" 8 . "github.com/onsi/gomega" 9 10 "github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/mtimesyncedcache" 11 ) 12 13 var _ = Describe("Mtimesyncedcache", func() { 14 var ( 15 cache mtimesyncedcache.Cache[string, string] 16 17 key = "key" 18 value = "value" 19 ) 20 21 BeforeEach(func() { 22 cache = mtimesyncedcache.New[string, string]() 23 }) 24 25 Describe("Store", func() { 26 It("stores a value", func() { 27 time := time.Now() 28 29 err := cache.Store(key, time, value) 30 Expect(err).ToNot(HaveOccurred()) 31 }) 32 }) 33 34 Describe("Load", func() { 35 It("loads the stored value", func() { 36 err := cache.Store(key, time.Now(), value) 37 Expect(err).ToNot(HaveOccurred()) 38 39 v, ok := cache.Load(key) 40 Expect(ok).To(BeTrue()) 41 Expect(v).To(Equal(value)) 42 }) 43 44 It("reports when the key doesn't exist", func() { 45 _, ok := cache.Load("doesnotexist") 46 Expect(ok).To(BeFalse()) 47 }) 48 }) 49 50 Describe("LoadOrStore", func() { 51 It("does not update the cache if the cache is up to date", func() { 52 cachedTime := time.Now().Add(-1 * time.Hour) 53 err := cache.Store(key, cachedTime, value) 54 Expect(err).ToNot(HaveOccurred()) 55 56 newvalue := "yaaay" 57 v, err := cache.LoadOrStore(key, cachedTime, func() (string, error) { 58 return newvalue, nil 59 }) 60 Expect(err).ToNot(HaveOccurred()) 61 Expect(v).To(Equal(value)) 62 63 v, err = cache.LoadOrStore(key, time.Now().Add(-2*time.Hour), func() (string, error) { 64 return newvalue, nil 65 }) 66 Expect(err).ToNot(HaveOccurred()) 67 Expect(v).To(Equal(value)) 68 }) 69 70 It("updates the cache if the cache is outdated", func() { 71 outdatedTime := time.Now().Add(-1 * time.Hour) 72 err := cache.Store(key, outdatedTime, value) 73 Expect(err).ToNot(HaveOccurred()) 74 75 newvalue := "yaaay" 76 v, err := cache.LoadOrStore(key, time.Now(), func() (string, error) { 77 return newvalue, nil 78 }) 79 Expect(err).ToNot(HaveOccurred()) 80 Expect(v).To(Equal(newvalue)) 81 }) 82 83 It("stores the value if the key doesn't exist yet", func() { 84 newvalue := "yaaay" 85 v, err := cache.LoadOrStore(key, time.Now(), func() (string, error) { 86 return newvalue, nil 87 }) 88 Expect(err).ToNot(HaveOccurred()) 89 Expect(v).To(Equal(newvalue)) 90 }) 91 92 It("sets the mtime when storing the value", func() { 93 newTime := time.Now() 94 95 newvalue := "yaaay" 96 v, err := cache.LoadOrStore(key, newTime, func() (string, error) { 97 return newvalue, nil 98 }) 99 Expect(err).ToNot(HaveOccurred()) 100 Expect(v).To(Equal(newvalue)) 101 102 newvalue2 := "asdfasdf" 103 v, err = cache.LoadOrStore(key, newTime, func() (string, error) { 104 return newvalue2, nil 105 }) 106 Expect(err).ToNot(HaveOccurred()) 107 Expect(v).To(Equal(newvalue)) 108 }) 109 110 It("passes on error from the store func", func() { 111 v, err := cache.LoadOrStore(key, time.Now(), func() (string, error) { 112 return "", errors.New("baa") 113 }) 114 Expect(v).To(Equal("")) 115 Expect(err.Error()).To(Equal("baa")) 116 117 }) 118 }) 119 })