zotregistry.io/zot@v1.4.4-0.20231124084042-02a8ed785457/pkg/storage/cache/dynamodb_test.go (about)

     1  package cache_test
     2  
     3  import (
     4  	"os"
     5  	"path"
     6  	"testing"
     7  
     8  	godigest "github.com/opencontainers/go-digest"
     9  	. "github.com/smartystreets/goconvey/convey"
    10  
    11  	"zotregistry.io/zot/pkg/log"
    12  	"zotregistry.io/zot/pkg/storage"
    13  	"zotregistry.io/zot/pkg/storage/cache"
    14  	tskip "zotregistry.io/zot/pkg/test/skip"
    15  )
    16  
    17  func TestDynamoDB(t *testing.T) {
    18  	tskip.SkipDynamo(t)
    19  	Convey("Test dynamoDB", t, func(c C) {
    20  		log := log.NewLogger("debug", "")
    21  		dir := t.TempDir()
    22  
    23  		// bad params
    24  
    25  		_, err := cache.NewDynamoDBCache("bad params", log)
    26  		So(err, ShouldNotBeNil)
    27  
    28  		keyDigest := godigest.FromString("key")
    29  
    30  		cacheDriver, err := storage.Create("dynamodb", cache.DynamoDBDriverParameters{
    31  			Endpoint:  "http://brokenlink",
    32  			TableName: "BlobTable",
    33  			Region:    "us-east-2",
    34  		}, log)
    35  		So(cacheDriver, ShouldBeNil)
    36  		So(err, ShouldNotBeNil)
    37  
    38  		cacheDriver, err = storage.Create("dynamodb", cache.DynamoDBDriverParameters{
    39  			Endpoint:  os.Getenv("DYNAMODBMOCK_ENDPOINT"),
    40  			TableName: "BlobTable",
    41  			Region:    "us-east-2",
    42  		}, log)
    43  		So(cacheDriver, ShouldNotBeNil)
    44  		So(err, ShouldBeNil)
    45  
    46  		returnedName := cacheDriver.Name()
    47  		So(returnedName, ShouldEqual, "dynamodb")
    48  
    49  		val, err := cacheDriver.GetBlob(keyDigest)
    50  		So(err, ShouldNotBeNil)
    51  		So(val, ShouldBeEmpty)
    52  
    53  		err = cacheDriver.PutBlob(keyDigest, "")
    54  		So(err, ShouldNotBeNil)
    55  
    56  		err = cacheDriver.PutBlob(keyDigest, path.Join(dir, "value"))
    57  		So(err, ShouldBeNil)
    58  
    59  		val, err = cacheDriver.GetBlob(keyDigest)
    60  		So(err, ShouldBeNil)
    61  		So(val, ShouldNotBeEmpty)
    62  
    63  		exists := cacheDriver.HasBlob(keyDigest, path.Join(dir, "value"))
    64  		So(exists, ShouldBeTrue)
    65  
    66  		err = cacheDriver.DeleteBlob(keyDigest, path.Join(dir, "value"))
    67  		So(err, ShouldBeNil)
    68  
    69  		exists = cacheDriver.HasBlob(keyDigest, path.Join(dir, "value"))
    70  		So(exists, ShouldBeFalse)
    71  
    72  		err = cacheDriver.PutBlob(keyDigest, path.Join(dir, "value1"))
    73  		So(err, ShouldBeNil)
    74  
    75  		err = cacheDriver.PutBlob(keyDigest, path.Join(dir, "value2"))
    76  		So(err, ShouldBeNil)
    77  
    78  		err = cacheDriver.DeleteBlob(keyDigest, path.Join(dir, "value1"))
    79  		So(err, ShouldBeNil)
    80  
    81  		exists = cacheDriver.HasBlob(keyDigest, path.Join(dir, "value2"))
    82  		So(exists, ShouldBeTrue)
    83  
    84  		exists = cacheDriver.HasBlob(keyDigest, path.Join(dir, "value1"))
    85  		So(exists, ShouldBeFalse)
    86  
    87  		err = cacheDriver.DeleteBlob(keyDigest, path.Join(dir, "value2"))
    88  		So(err, ShouldBeNil)
    89  
    90  		err = cacheDriver.PutBlob("key1", "originalBlobPath")
    91  		So(err, ShouldBeNil)
    92  
    93  		err = cacheDriver.PutBlob("key1", "duplicateBlobPath")
    94  		So(err, ShouldBeNil)
    95  
    96  		val, err = cacheDriver.GetBlob("key1")
    97  		So(val, ShouldEqual, "originalBlobPath")
    98  		So(err, ShouldBeNil)
    99  
   100  		err = cacheDriver.DeleteBlob("key1", "duplicateBlobPath")
   101  		So(err, ShouldBeNil)
   102  
   103  		val, err = cacheDriver.GetBlob("key1")
   104  		So(val, ShouldEqual, "originalBlobPath")
   105  		So(err, ShouldBeNil)
   106  
   107  		err = cacheDriver.PutBlob("key1", "duplicateBlobPath")
   108  		So(err, ShouldBeNil)
   109  
   110  		err = cacheDriver.DeleteBlob("key1", "originalBlobPath")
   111  		So(err, ShouldBeNil)
   112  
   113  		val, err = cacheDriver.GetBlob("key1")
   114  		So(val, ShouldEqual, "duplicateBlobPath")
   115  		So(err, ShouldBeNil)
   116  
   117  		err = cacheDriver.DeleteBlob("key1", "duplicateBlobPath")
   118  		So(err, ShouldBeNil)
   119  
   120  		// should be empty
   121  		val, err = cacheDriver.GetBlob("key1")
   122  		So(err, ShouldNotBeNil)
   123  		So(val, ShouldBeEmpty)
   124  
   125  		// try to add three same values
   126  		err = cacheDriver.PutBlob("key2", "duplicate")
   127  		So(err, ShouldBeNil)
   128  
   129  		err = cacheDriver.PutBlob("key2", "duplicate")
   130  		So(err, ShouldBeNil)
   131  
   132  		err = cacheDriver.PutBlob("key2", "duplicate")
   133  		So(err, ShouldBeNil)
   134  
   135  		val, err = cacheDriver.GetBlob("key2")
   136  		So(val, ShouldEqual, "duplicate")
   137  		So(err, ShouldBeNil)
   138  
   139  		err = cacheDriver.DeleteBlob("key2", "duplicate")
   140  		So(err, ShouldBeNil)
   141  
   142  		// should be empty
   143  		val, err = cacheDriver.GetBlob("key2")
   144  		So(err, ShouldNotBeNil)
   145  		So(val, ShouldBeEmpty)
   146  	})
   147  }
   148  
   149  func TestDynamoDBError(t *testing.T) {
   150  	tskip.SkipDynamo(t)
   151  	Convey("Test dynamoDB", t, func(c C) {
   152  		log := log.NewLogger("debug", "")
   153  
   154  		cacheDriver, err := cache.NewDynamoDBCache(cache.DynamoDBDriverParameters{
   155  			Endpoint:  os.Getenv("DYNAMODBMOCK_ENDPOINT"),
   156  			TableName: "BlobTable",
   157  			Region:    "us-east-2",
   158  		}, log)
   159  		So(cacheDriver, ShouldNotBeNil)
   160  		So(err, ShouldBeNil)
   161  
   162  		returnedName := cacheDriver.Name()
   163  		So(returnedName, ShouldEqual, "dynamodb")
   164  
   165  		cacheDriver.SetTableName("bad-table")
   166  
   167  		_, err = cacheDriver.GetBlob(godigest.FromString("str"))
   168  		So(err, ShouldNotBeNil)
   169  		found := cacheDriver.HasBlob(godigest.FromString("str"), "path")
   170  		So(found, ShouldBeFalse)
   171  		_, err = cacheDriver.GetDuplicateBlob(godigest.FromString("str"))
   172  		So(err, ShouldNotBeNil)
   173  		err = cacheDriver.DeleteBlob(godigest.FromString("str"), "path")
   174  		So(err, ShouldNotBeNil)
   175  	})
   176  }