mirror of
https://github.com/project-zot/zot.git
synced 2025-02-10 23:39:39 -05:00
Initial code was contributed by Bogdan BIVOLARU <104334+bogdanbiv@users.noreply.github.com> Moved implementation from a separate db to repodb by Andrei Aaron <aaaron@luxoft.com> Not done yet: - run/test dynamodb implementation, only boltdb was tested - add additional coverage for existing functionality - add web-based APIs to toggle the stars/bookmarks on/off Initially graphql mutation was discussed for the missing API but we decided REST endpoints would be better suited for configuration feat(userdb): complete functionality for userdb integration - dynamodb rollback changes to user starred repos in case increasing the total star count fails - dynamodb increment/decrement repostars in repometa when user stars/unstars a repo - dynamodb check anonymous user permissions are working as intendend - common test handle anonymous users - RepoMeta2RepoSummary set IsStarred and IsBookmarked feat(userdb): rest api calls for toggling stars/bookmarks on/off test(userdb): blackbox tests test(userdb): move preferences tests in a different file with specific build tags feat(repodb): add is-starred and is-bookmarked fields to repo-meta - removed duplicated logic for determining if a repo is starred/bookmarked Signed-off-by: Laurentiu Niculae <niculae.laurentiu1@gmail.com> Co-authored-by: Andrei Aaron <aaaron@luxoft.com>
115 lines
3.4 KiB
Go
115 lines
3.4 KiB
Go
package dynamo
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/aws"
|
|
"github.com/aws/aws-sdk-go-v2/config"
|
|
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
|
|
guuid "github.com/gofrs/uuid"
|
|
"github.com/rs/zerolog"
|
|
. "github.com/smartystreets/goconvey/convey"
|
|
|
|
"zotregistry.io/zot/pkg/log" //nolint:go-staticcheck
|
|
"zotregistry.io/zot/pkg/meta/version"
|
|
)
|
|
|
|
func TestWrapperErrors(t *testing.T) {
|
|
const (
|
|
endpoint = "http://localhost:4566"
|
|
region = "us-east-2"
|
|
)
|
|
|
|
uuid, err := guuid.NewV4()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
repoMetaTablename := "RepoMetadataTable" + uuid.String()
|
|
manifestDataTablename := "ManifestDataTable" + uuid.String()
|
|
indexDataTablename := "IndexDataTable" + uuid.String()
|
|
artifactDataTablename := "ArtifactDataTable" + uuid.String()
|
|
userDataTablename := "UserDataTable" + uuid.String()
|
|
|
|
versionTablename := "Version" + uuid.String()
|
|
|
|
Convey("Create table errors", t, func() {
|
|
badEndpoint := endpoint + "1"
|
|
|
|
customResolver := aws.EndpointResolverWithOptionsFunc(
|
|
func(service, region string, options ...interface{}) (aws.Endpoint, error) {
|
|
return aws.Endpoint{
|
|
PartitionID: "aws",
|
|
URL: badEndpoint,
|
|
SigningRegion: region,
|
|
}, nil
|
|
},
|
|
)
|
|
|
|
cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(region),
|
|
config.WithEndpointResolverWithOptions(customResolver))
|
|
So(err, ShouldBeNil)
|
|
|
|
dynamoWrapper := DBWrapper{
|
|
Client: dynamodb.NewFromConfig(cfg),
|
|
RepoMetaTablename: repoMetaTablename,
|
|
ManifestDataTablename: manifestDataTablename,
|
|
IndexDataTablename: indexDataTablename,
|
|
ArtifactDataTablename: artifactDataTablename,
|
|
VersionTablename: versionTablename,
|
|
UserDataTablename: userDataTablename,
|
|
Patches: version.GetDynamoDBPatches(),
|
|
Log: log.Logger{Logger: zerolog.New(os.Stdout)},
|
|
}
|
|
|
|
// The table creation should fail as the endpoint is not configured correctly
|
|
err = dynamoWrapper.createRepoMetaTable()
|
|
So(err, ShouldNotBeNil)
|
|
|
|
err = dynamoWrapper.createManifestDataTable()
|
|
So(err, ShouldNotBeNil)
|
|
|
|
err = dynamoWrapper.createIndexDataTable()
|
|
So(err, ShouldNotBeNil)
|
|
|
|
err = dynamoWrapper.createVersionTable()
|
|
So(err, ShouldNotBeNil)
|
|
})
|
|
|
|
Convey("Delete table errors", t, func() {
|
|
customResolver := aws.EndpointResolverWithOptionsFunc(
|
|
func(service, region string, options ...interface{}) (aws.Endpoint, error) {
|
|
return aws.Endpoint{
|
|
PartitionID: "aws",
|
|
URL: endpoint,
|
|
SigningRegion: region,
|
|
}, nil
|
|
},
|
|
)
|
|
|
|
cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(region),
|
|
config.WithEndpointResolverWithOptions(customResolver))
|
|
So(err, ShouldBeNil)
|
|
|
|
dynamoWrapper := DBWrapper{
|
|
Client: dynamodb.NewFromConfig(cfg),
|
|
RepoMetaTablename: repoMetaTablename,
|
|
ManifestDataTablename: manifestDataTablename,
|
|
VersionTablename: versionTablename,
|
|
IndexDataTablename: indexDataTablename,
|
|
ArtifactDataTablename: artifactDataTablename,
|
|
UserDataTablename: userDataTablename,
|
|
Patches: version.GetDynamoDBPatches(),
|
|
Log: log.Logger{Logger: zerolog.New(os.Stdout)},
|
|
}
|
|
|
|
// The tables were not created so delete calls fail, but dynamoWrapper should not error
|
|
err = dynamoWrapper.deleteRepoMetaTable()
|
|
So(err, ShouldBeNil)
|
|
|
|
err = dynamoWrapper.deleteManifestDataTable()
|
|
So(err, ShouldBeNil)
|
|
})
|
|
}
|