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  }