zotregistry.io/zot@v1.4.4-0.20231124084042-02a8ed785457/pkg/meta/dynamodb/dynamodb_internal_test.go (about) 1 package dynamodb 2 3 import ( 4 "context" 5 "os" 6 "testing" 7 8 "github.com/aws/aws-sdk-go-v2/aws" 9 "github.com/aws/aws-sdk-go-v2/config" 10 "github.com/aws/aws-sdk-go-v2/service/dynamodb" 11 guuid "github.com/gofrs/uuid" 12 "github.com/rs/zerolog" 13 . "github.com/smartystreets/goconvey/convey" 14 15 "zotregistry.io/zot/pkg/log" //nolint:go-staticcheck 16 "zotregistry.io/zot/pkg/meta/version" 17 tskip "zotregistry.io/zot/pkg/test/skip" 18 ) 19 20 func TestWrapperErrors(t *testing.T) { 21 tskip.SkipDynamo(t) 22 23 const region = "us-east-2" 24 endpoint := os.Getenv("DYNAMODBMOCK_ENDPOINT") 25 26 uuid, err := guuid.NewV4() 27 if err != nil { 28 panic(err) 29 } 30 31 repoMetaTablename := "RepoMetadataTable" + uuid.String() 32 userDataTablename := "UserDataTable" + uuid.String() 33 apiKeyTablename := "ApiKeyTable" + uuid.String() 34 35 versionTablename := "Version" + uuid.String() 36 37 Convey("Create table errors", t, func() { 38 badEndpoint := endpoint + "1" 39 40 customResolver := aws.EndpointResolverWithOptionsFunc( 41 func(service, region string, options ...interface{}) (aws.Endpoint, error) { 42 return aws.Endpoint{ 43 PartitionID: "aws", 44 URL: badEndpoint, 45 SigningRegion: region, 46 }, nil 47 }, 48 ) 49 50 cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(region), 51 config.WithEndpointResolverWithOptions(customResolver)) 52 So(err, ShouldBeNil) 53 54 dynamoWrapper := DynamoDB{ 55 Client: dynamodb.NewFromConfig(cfg), 56 RepoMetaTablename: repoMetaTablename, 57 VersionTablename: versionTablename, 58 UserDataTablename: userDataTablename, 59 APIKeyTablename: apiKeyTablename, 60 Patches: version.GetDynamoDBPatches(), 61 Log: log.Logger{Logger: zerolog.New(os.Stdout)}, 62 } 63 64 // The table creation should fail as the endpoint is not configured correctly 65 err = dynamoWrapper.createTable(dynamoWrapper.RepoMetaTablename) 66 So(err, ShouldNotBeNil) 67 68 err = dynamoWrapper.createVersionTable() 69 So(err, ShouldNotBeNil) 70 71 err = dynamoWrapper.createTable(dynamoWrapper.APIKeyTablename) 72 So(err, ShouldNotBeNil) 73 }) 74 75 Convey("Delete table errors", t, func() { 76 customResolver := aws.EndpointResolverWithOptionsFunc( 77 func(service, region string, options ...interface{}) (aws.Endpoint, error) { 78 return aws.Endpoint{ 79 PartitionID: "aws", 80 URL: endpoint, 81 SigningRegion: region, 82 }, nil 83 }, 84 ) 85 86 cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(region), 87 config.WithEndpointResolverWithOptions(customResolver)) 88 So(err, ShouldBeNil) 89 90 dynamoWrapper := DynamoDB{ 91 Client: dynamodb.NewFromConfig(cfg), 92 RepoMetaTablename: repoMetaTablename, 93 VersionTablename: versionTablename, 94 UserDataTablename: userDataTablename, 95 Patches: version.GetDynamoDBPatches(), 96 Log: log.Logger{Logger: zerolog.New(os.Stdout)}, 97 } 98 99 // The tables were not created so delete calls fail, but dynamoWrapper should not error 100 err = dynamoWrapper.deleteTable(dynamoWrapper.RepoMetaTablename) 101 So(err, ShouldBeNil) 102 }) 103 }