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 }