zotregistry.io/zot@v1.4.4-0.20231124084042-02a8ed785457/pkg/storage/cache/boltdb_test.go (about) 1 package cache_test 2 3 import ( 4 "path" 5 "testing" 6 7 . "github.com/smartystreets/goconvey/convey" 8 9 "zotregistry.io/zot/errors" 10 "zotregistry.io/zot/pkg/log" 11 "zotregistry.io/zot/pkg/storage" 12 "zotregistry.io/zot/pkg/storage/cache" 13 ) 14 15 func TestBoltDBCache(t *testing.T) { 16 Convey("Make a new cache", t, func() { 17 dir := t.TempDir() 18 19 log := log.NewLogger("debug", "") 20 So(log, ShouldNotBeNil) 21 22 _, err := storage.Create("boltdb", "failTypeAssertion", log) 23 So(err, ShouldNotBeNil) 24 25 cacheDriver, _ := storage.Create("boltdb", cache.BoltDBDriverParameters{"/deadBEEF", "cache_test", true}, log) 26 So(cacheDriver, ShouldBeNil) 27 28 cacheDriver, _ = storage.Create("boltdb", cache.BoltDBDriverParameters{dir, "cache_test", true}, log) 29 So(cacheDriver, ShouldNotBeNil) 30 31 name := cacheDriver.Name() 32 So(name, ShouldEqual, "boltdb") 33 34 val, err := cacheDriver.GetBlob("key") 35 So(err, ShouldEqual, errors.ErrCacheMiss) 36 So(val, ShouldBeEmpty) 37 38 exists := cacheDriver.HasBlob("key", "value") 39 So(exists, ShouldBeFalse) 40 41 err = cacheDriver.PutBlob("key", path.Join(dir, "value")) 42 So(err, ShouldBeNil) 43 44 err = cacheDriver.PutBlob("key", "value") 45 So(err, ShouldNotBeNil) 46 47 exists = cacheDriver.HasBlob("key", "value") 48 So(exists, ShouldBeTrue) 49 50 val, err = cacheDriver.GetBlob("key") 51 So(err, ShouldBeNil) 52 So(val, ShouldNotBeEmpty) 53 54 err = cacheDriver.DeleteBlob("bogusKey", "bogusValue") 55 So(err, ShouldEqual, errors.ErrCacheMiss) 56 57 err = cacheDriver.DeleteBlob("key", "bogusValue") 58 So(err, ShouldBeNil) 59 60 // try to insert empty path 61 err = cacheDriver.PutBlob("key", "") 62 So(err, ShouldNotBeNil) 63 So(err, ShouldEqual, errors.ErrEmptyValue) 64 65 cacheDriver, _ = storage.Create("boltdb", cache.BoltDBDriverParameters{t.TempDir(), "cache_test", false}, log) 66 So(cacheDriver, ShouldNotBeNil) 67 68 err = cacheDriver.PutBlob("key1", "originalBlobPath") 69 So(err, ShouldBeNil) 70 71 err = cacheDriver.PutBlob("key1", "duplicateBlobPath") 72 So(err, ShouldBeNil) 73 74 val, err = cacheDriver.GetBlob("key1") 75 So(val, ShouldEqual, "originalBlobPath") 76 So(err, ShouldBeNil) 77 78 err = cacheDriver.DeleteBlob("key1", "duplicateBlobPath") 79 So(err, ShouldBeNil) 80 81 val, err = cacheDriver.GetBlob("key1") 82 So(val, ShouldEqual, "originalBlobPath") 83 So(err, ShouldBeNil) 84 85 err = cacheDriver.PutBlob("key1", "duplicateBlobPath") 86 So(err, ShouldBeNil) 87 88 err = cacheDriver.DeleteBlob("key1", "originalBlobPath") 89 So(err, ShouldBeNil) 90 91 val, err = cacheDriver.GetBlob("key1") 92 So(val, ShouldEqual, "duplicateBlobPath") 93 So(err, ShouldBeNil) 94 95 err = cacheDriver.DeleteBlob("key1", "duplicateBlobPath") 96 So(err, ShouldBeNil) 97 98 // should be empty 99 val, err = cacheDriver.GetBlob("key1") 100 So(err, ShouldNotBeNil) 101 So(val, ShouldBeEmpty) 102 103 // try to add three same values 104 err = cacheDriver.PutBlob("key2", "duplicate") 105 So(err, ShouldBeNil) 106 107 err = cacheDriver.PutBlob("key2", "duplicate") 108 So(err, ShouldBeNil) 109 110 err = cacheDriver.PutBlob("key2", "duplicate") 111 So(err, ShouldBeNil) 112 113 val, err = cacheDriver.GetBlob("key2") 114 So(val, ShouldEqual, "duplicate") 115 So(err, ShouldBeNil) 116 117 err = cacheDriver.DeleteBlob("key2", "duplicate") 118 So(err, ShouldBeNil) 119 120 // should be empty 121 val, err = cacheDriver.GetBlob("key2") 122 So(err, ShouldNotBeNil) 123 So(val, ShouldBeEmpty) 124 }) 125 }