From 28de9803196c32eea16f432474a23a4ef27ed27a Mon Sep 17 00:00:00 2001 From: LaurentiuNiculae Date: Tue, 18 Jul 2023 20:27:26 +0300 Subject: [PATCH] feat(refator): refactoring repodb into meta (#1626) Signed-off-by: Laurentiu Niculae --- errors/errors.go | 34 +- pkg/api/authn.go | 14 +- pkg/api/controller.go | 26 +- pkg/api/controller_test.go | 36 +- pkg/api/routes.go | 18 +- pkg/api/routes_test.go | 12 +- pkg/cli/cve_cmd_test.go | 16 +- pkg/extensions/extension_api_key.go | 24 +- pkg/extensions/extension_api_key_disabled.go | 4 +- pkg/extensions/extension_api_key_test.go | 12 +- pkg/extensions/extension_mgmt.go | 30 +- pkg/extensions/extension_mgmt_disabled.go | 4 +- pkg/extensions/extension_search.go | 12 +- pkg/extensions/extension_search_disabled.go | 8 +- pkg/extensions/extension_search_test.go | 12 +- pkg/extensions/extension_sync.go | 6 +- pkg/extensions/extension_sync_disabled.go | 4 +- pkg/extensions/extension_userprefs.go | 20 +- pkg/extensions/extension_userprefs_disable.go | 4 +- pkg/extensions/extension_userprefs_test.go | 48 +- pkg/extensions/search/convert/convert_test.go | 91 +- .../search/convert/{repodb.go => metadb.go} | 34 +- pkg/extensions/search/cve/cve.go | 32 +- pkg/extensions/search/cve/cve_test.go | 202 +-- pkg/extensions/search/cve/pagination_test.go | 29 +- pkg/extensions/search/cve/trivy/scanner.go | 23 +- .../search/cve/trivy/scanner_internal_test.go | 134 +- .../search/cve/trivy/scanner_test.go | 30 +- pkg/extensions/search/resolver.go | 204 +-- pkg/extensions/search/resolver_test.go | 944 +++++++------ pkg/extensions/search/schema.resolvers.go | 26 +- pkg/extensions/search/search_test.go | 50 +- pkg/extensions/sync/local.go | 25 +- pkg/extensions/sync/references/cosign.go | 21 +- pkg/extensions/sync/references/oci.go | 21 +- pkg/extensions/sync/references/oras.go | 21 +- pkg/extensions/sync/references/references.go | 10 +- pkg/extensions/sync/service.go | 12 +- pkg/extensions/sync/sync_internal_test.go | 10 +- pkg/extensions/sync/sync_test.go | 14 +- .../boltdb_wrapper.go => boltdb/boltdb.go} | 620 ++++----- .../boltdb_test.go} | 311 +++-- pkg/meta/{bolt => boltdb}/buckets.go | 2 +- pkg/meta/{bolt => boltdb}/parameters.go | 2 +- pkg/meta/common/common.go | 92 +- pkg/meta/common/common_test.go | 66 +- .../dynamo_wrapper.go => dynamodb/dynamo.go} | 577 ++++---- .../dynamo_internal_test.go | 6 +- .../dynamo_test.go | 266 ++-- pkg/meta/{dynamo => dynamodb}/iterator.go | 2 +- pkg/meta/{dynamo => dynamodb}/parameters.go | 2 +- .../repodb_factory.go => meta.go} | 30 +- .../{repodb/repodb_test.go => meta_test.go} | 1233 +++++++++-------- pkg/meta/{repodb => pagination}/pagination.go | 61 +- .../{repodb => pagination}/pagination_test.go | 95 +- .../repodbfactory/repodb_factory_test.go | 110 -- pkg/meta/{repodb => }/storage_parsing.go | 113 +- pkg/meta/{repodb => }/storage_parsing_test.go | 142 +- .../common.go => types/sort_criteria.go} | 56 +- pkg/meta/{repodb/repodb.go => types/types.go} | 37 +- pkg/meta/update.go | 48 +- pkg/meta/update_test.go | 77 +- pkg/meta/version/version_test.go | 22 +- pkg/test/common.go | 8 +- pkg/test/mocks/repo_db_mock.go | 255 ++-- 65 files changed, 3267 insertions(+), 3243 deletions(-) rename pkg/extensions/search/convert/{repodb.go => metadb.go} (95%) rename pkg/meta/{repodb/boltdb-wrapper/boltdb_wrapper.go => boltdb/boltdb.go} (69%) rename pkg/meta/{repodb/boltdb-wrapper/boltdb_wrapper_test.go => boltdb/boltdb_test.go} (78%) rename pkg/meta/{bolt => boltdb}/buckets.go (94%) rename pkg/meta/{bolt => boltdb}/parameters.go (95%) rename pkg/meta/{repodb/dynamodb-wrapper/dynamo_wrapper.go => dynamodb/dynamo.go} (72%) rename pkg/meta/{repodb/dynamodb-wrapper => dynamodb}/dynamo_internal_test.go (97%) rename pkg/meta/{repodb/dynamodb-wrapper => dynamodb}/dynamo_test.go (84%) rename pkg/meta/{dynamo => dynamodb}/iterator.go (99%) rename pkg/meta/{dynamo => dynamodb}/parameters.go (98%) rename pkg/meta/{repodb/repodbfactory/repodb_factory.go => meta.go} (80%) rename pkg/meta/{repodb/repodb_test.go => meta_test.go} (66%) rename pkg/meta/{repodb => pagination}/pagination.go (73%) rename pkg/meta/{repodb => pagination}/pagination_test.go (65%) delete mode 100644 pkg/meta/repodb/repodbfactory/repodb_factory_test.go rename pkg/meta/{repodb => }/storage_parsing.go (78%) rename pkg/meta/{repodb => }/storage_parsing_test.go (77%) rename pkg/meta/{repodb/common.go => types/sort_criteria.go} (52%) rename pkg/meta/{repodb/repodb.go => types/types.go} (95%) diff --git a/errors/errors.go b/errors/errors.go index a07dc66b..d34562af 100644 --- a/errors/errors.go +++ b/errors/errors.go @@ -63,22 +63,22 @@ var ( ErrBadRange = errors.New("storage: bad range") ErrBadLayerCount = errors.New("manifest: layers count doesn't correspond to config history") ErrManifestConflict = errors.New("manifest: multiple manifests found") - ErrManifestMetaNotFound = errors.New("repodb: image metadata not found for given manifest reference") - ErrManifestDataNotFound = errors.New("repodb: image data not found for given manifest digest") - ErrIndexDataNotFount = errors.New("repodb: index data not found for given digest") - ErrRepoMetaNotFound = errors.New("repodb: repo metadata not found for given repo name") - ErrTagMetaNotFound = errors.New("repodb: tag metadata not found for given repo and tag names") + ErrManifestMetaNotFound = errors.New("metadb: image metadata not found for given manifest reference") + ErrManifestDataNotFound = errors.New("metadb: image data not found for given manifest digest") + ErrIndexDataNotFount = errors.New("metadb: index data not found for given digest") + ErrRepoMetaNotFound = errors.New("metadb: repo metadata not found for given repo name") + ErrTagMetaNotFound = errors.New("metadb: tag metadata not found for given repo and tag names") ErrTypeAssertionFailed = errors.New("storage: failed DatabaseDriver type assertion") ErrInvalidRequestParams = errors.New("resolver: parameter sent has invalid value") ErrBadCtxFormat = errors.New("type assertion failed") - ErrEmptyRepoName = errors.New("repodb: repo name can't be empty string") - ErrEmptyTag = errors.New("repodb: tag can't be empty string") - ErrEmptyDigest = errors.New("repodb: digest can't be empty string") + ErrEmptyRepoName = errors.New("metadb: repo name can't be empty string") + ErrEmptyTag = errors.New("metadb: tag can't be empty string") + ErrEmptyDigest = errors.New("metadb: digest can't be empty string") ErrInvalidRepoRefFormat = errors.New("invalid image reference format") ErrLimitIsNegative = errors.New("pageturner: limit has negative value") ErrOffsetIsNegative = errors.New("pageturner: offset has negative value") ErrSortCriteriaNotSupported = errors.New("pageturner: the sort criteria is not supported") - ErrMediaTypeNotSupported = errors.New("repodb: media type is not supported") + ErrMediaTypeNotSupported = errors.New("metadb: media type is not supported") ErrTimeout = errors.New("operation timeout") ErrNotImplemented = errors.New("not implemented") ErrDedupeRebuild = errors.New("dedupe: couldn't rebuild dedupe index") @@ -89,14 +89,14 @@ var ( ErrOpenIDProviderDoesNotExist = errors.New("openID: provider does not exist in given config") ErrHashKeyNotCreated = errors.New("cookiestore: generated random hash key is nil, not continuing") ErrFailedTypeAssertion = errors.New("type assertion failed") - ErrInvalidOldUserStarredRepos = errors.New("repodb: invalid old entry for user starred repos") - ErrUnmarshalledRepoListIsNil = errors.New("repodb: list of repos is still nil") - ErrCouldNotMarshalStarredRepos = errors.New("repodb: could not repack entry for user starred repos") - ErrInvalidOldUserBookmarkedRepos = errors.New("repodb: invalid old entry for user bookmarked repos") - ErrCouldNotMarshalBookmarkedRepos = errors.New("repodb: could not repack entry for user bookmarked repos") - ErrUserDataNotFound = errors.New("repodb: user data not found for given user identifier") - ErrUserDataNotAllowed = errors.New("repodb: user data operations are not allowed") - ErrCouldNotPersistData = errors.New("repodb: could not persist to db") + ErrInvalidOldUserStarredRepos = errors.New("metadb: invalid old entry for user starred repos") + ErrUnmarshalledRepoListIsNil = errors.New("metadb: list of repos is still nil") + ErrCouldNotMarshalStarredRepos = errors.New("metadb: could not repack entry for user starred repos") + ErrInvalidOldUserBookmarkedRepos = errors.New("metadb: invalid old entry for user bookmarked repos") + ErrCouldNotMarshalBookmarkedRepos = errors.New("metadb: could not repack entry for user bookmarked repos") + ErrUserDataNotFound = errors.New("metadb: user data not found for given user identifier") + ErrUserDataNotAllowed = errors.New("metadb: user data operations are not allowed") + ErrCouldNotPersistData = errors.New("metadb: could not persist to db") ErrSignConfigDirNotSet = errors.New("signatures: signature config dir not set") ErrBadManifestDigest = errors.New("signatures: bad manifest digest") ErrInvalidSignatureType = errors.New("signatures: invalid signature type") diff --git a/pkg/api/authn.go b/pkg/api/authn.go index f1b9a703..3a8845df 100644 --- a/pkg/api/authn.go +++ b/pkg/api/authn.go @@ -93,7 +93,7 @@ func (amw *AuthnMiddleware) sessionAuthn(ctlr *Controller, next http.Handler, re ctx := getReqContextWithAuthorization(identity, []string{}, request) - groups, err := ctlr.RepoDB.GetUserGroups(ctx) + groups, err := ctlr.MetaDB.GetUserGroups(ctx) if err != nil { if errors.Is(err, zerr.ErrUserDataNotFound) { ctlr.Log.Err(err).Str("identity", identity).Msg("can not find user profile in DB") @@ -168,7 +168,7 @@ func (amw *AuthnMiddleware) basicAuthn(ctlr *Controller, response http.ResponseW return false, response, request, err } - if err := ctlr.RepoDB.SetUserGroups(ctx, groups); err != nil { + if err := ctlr.MetaDB.SetUserGroups(ctx, groups); err != nil { ctlr.Log.Error().Err(err).Str("identity", identity).Msg("couldn't update user profile") return false, response, request, err @@ -200,7 +200,7 @@ func (amw *AuthnMiddleware) basicAuthn(ctlr *Controller, response http.ResponseW return false, response, request, err } - if err := ctlr.RepoDB.SetUserGroups(ctx, groups); err != nil { + if err := ctlr.MetaDB.SetUserGroups(ctx, groups); err != nil { ctlr.Log.Error().Err(err).Str("identity", identity).Msg("couldn't update user profile") return false, response, request, err @@ -224,7 +224,7 @@ func (amw *AuthnMiddleware) basicAuthn(ctlr *Controller, response http.ResponseW hashedKey := hashUUID(trimmedAPIKey) - storedIdentity, err := ctlr.RepoDB.GetUserAPIKeyInfo(hashedKey) + storedIdentity, err := ctlr.MetaDB.GetUserAPIKeyInfo(hashedKey) if err != nil { if errors.Is(err, zerr.ErrUserAPIKeyNotFound) { ctlr.Log.Info().Err(err).Msgf("can not find any user info for hashed key %s in DB", hashedKey) @@ -240,14 +240,14 @@ func (amw *AuthnMiddleware) basicAuthn(ctlr *Controller, response http.ResponseW if storedIdentity == identity { ctx := getReqContextWithAuthorization(identity, []string{}, request) - err := ctlr.RepoDB.UpdateUserAPIKeyLastUsed(ctx, hashedKey) + err := ctlr.MetaDB.UpdateUserAPIKeyLastUsed(ctx, hashedKey) if err != nil { ctlr.Log.Err(err).Str("identity", identity).Msg("can not update user profile in DB") return false, nil, nil, err } - groups, err := ctlr.RepoDB.GetUserGroups(ctx) + groups, err := ctlr.MetaDB.GetUserGroups(ctx) if err != nil { ctlr.Log.Err(err).Str("identity", identity).Msg("can not get user's groups in DB") @@ -843,7 +843,7 @@ func OAuth2Callback(ctlr *Controller, w http.ResponseWriter, r *http.Request, st return "", err } - if err := ctlr.RepoDB.SetUserGroups(ctx, groups); err != nil { + if err := ctlr.MetaDB.SetUserGroups(ctx, groups); err != nil { ctlr.Log.Error().Err(err).Str("identity", email).Msg("couldn't update the user profile") return "", err diff --git a/pkg/api/controller.go b/pkg/api/controller.go index 30025b58..8b0d93ce 100644 --- a/pkg/api/controller.go +++ b/pkg/api/controller.go @@ -24,8 +24,8 @@ import ( ext "zotregistry.io/zot/pkg/extensions" "zotregistry.io/zot/pkg/extensions/monitoring" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" - "zotregistry.io/zot/pkg/meta/repodb/repodbfactory" + "zotregistry.io/zot/pkg/meta" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/scheduler" "zotregistry.io/zot/pkg/storage" ) @@ -39,7 +39,7 @@ const ( type Controller struct { Config *config.Config Router *mux.Router - RepoDB repodb.RepoDB + MetaDB mTypes.MetaDB StoreController storage.StoreController Log log.Logger Audit *log.Logger @@ -229,7 +229,7 @@ func (c *Controller) Init(reloadCtx context.Context) error { return err } - if err := c.InitRepoDB(reloadCtx); err != nil { + if err := c.InitMetaDB(reloadCtx); err != nil { return err } @@ -241,7 +241,7 @@ func (c *Controller) Init(reloadCtx context.Context) error { func (c *Controller) InitCVEInfo() { // Enable CVE extension if extension config is provided if c.Config != nil && c.Config.Extensions != nil { - c.CveInfo = ext.GetCVEInfo(c.Config, c.StoreController, c.RepoDB, c.Log) + c.CveInfo = ext.GetCVEInfo(c.Config, c.StoreController, c.MetaDB, c.Log) } } @@ -258,11 +258,11 @@ func (c *Controller) InitImageStore() error { return nil } -func (c *Controller) InitRepoDB(reloadCtx context.Context) error { - // init repoDB if search is enabled or authn enabled (need to store user profiles) or apikey ext is enabled +func (c *Controller) InitMetaDB(reloadCtx context.Context) error { + // init metaDB if search is enabled or authn enabled (need to store user profiles) or apikey ext is enabled if (c.Config.Extensions != nil && c.Config.Extensions.Search != nil && *c.Config.Extensions.Search.Enable) || isAuthnEnabled(c.Config) || isOpenIDAuthEnabled(c.Config) || isAPIKeyEnabled(c.Config) { - driver, err := repodbfactory.New(c.Config.Storage.StorageConfig, c.Log) //nolint:contextcheck + driver, err := meta.New(c.Config.Storage.StorageConfig, c.Log) //nolint:contextcheck if err != nil { return err } @@ -272,12 +272,12 @@ func (c *Controller) InitRepoDB(reloadCtx context.Context) error { return err } - err = repodb.ParseStorage(driver, c.StoreController, c.Log) + err = meta.ParseStorage(driver, c.StoreController, c.Log) if err != nil { return err } - c.RepoDB = driver + c.MetaDB = driver } return nil @@ -335,7 +335,7 @@ func (c *Controller) StartBackgroundTasks(reloadCtx context.Context) { // Enable extensions if extension config is provided for DefaultStore if c.Config != nil && c.Config.Extensions != nil { ext.EnableMetricsExtension(c.Config, c.Log, c.Config.Storage.RootDirectory) - ext.EnableSearchExtension(c.Config, c.StoreController, c.RepoDB, taskScheduler, c.CveInfo, c.Log) + ext.EnableSearchExtension(c.Config, c.StoreController, c.MetaDB, taskScheduler, c.CveInfo, c.Log) } if c.Config.Storage.SubPaths != nil { @@ -361,7 +361,7 @@ func (c *Controller) StartBackgroundTasks(reloadCtx context.Context) { if c.Config.Extensions != nil { ext.EnableScrubExtension(c.Config, c.Log, c.StoreController, taskScheduler) - syncOnDemand, err := ext.EnableSyncExtension(c.Config, c.RepoDB, c.StoreController, taskScheduler, c.Log) + syncOnDemand, err := ext.EnableSyncExtension(c.Config, c.MetaDB, c.StoreController, taskScheduler, c.Log) if err != nil { c.Log.Error().Err(err).Msg("unable to start sync extension") } @@ -371,7 +371,7 @@ func (c *Controller) StartBackgroundTasks(reloadCtx context.Context) { if c.Config.Extensions != nil { if c.Config.Extensions.Mgmt != nil && *c.Config.Extensions.Mgmt.Enable { - ext.EnablePeriodicSignaturesVerification(c.Config, taskScheduler, c.RepoDB, c.Log) //nolint: contextcheck + ext.EnablePeriodicSignaturesVerification(c.Config, taskScheduler, c.MetaDB, c.Log) //nolint: contextcheck } } } diff --git a/pkg/api/controller_test.go b/pkg/api/controller_test.go index c1aa65c9..d765c398 100644 --- a/pkg/api/controller_test.go +++ b/pkg/api/controller_test.go @@ -56,7 +56,7 @@ import ( "zotregistry.io/zot/pkg/common" extconf "zotregistry.io/zot/pkg/extensions/config" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb/repodbfactory" + "zotregistry.io/zot/pkg/meta" "zotregistry.io/zot/pkg/storage" storageConstants "zotregistry.io/zot/pkg/storage/constants" "zotregistry.io/zot/pkg/test" @@ -203,7 +203,7 @@ func TestCreateCacheDatabaseDriver(t *testing.T) { }) } -func TestCreateRepoDBDriver(t *testing.T) { +func TestCreateMetaDBDriver(t *testing.T) { Convey("Test CreateCacheDatabaseDriver dynamo", t, func() { log := log.NewLogger("debug", "") dir := t.TempDir() @@ -230,7 +230,7 @@ func TestCreateRepoDBDriver(t *testing.T) { "userdatatablename": "UserDatatable", } - testFunc := func() { _, _ = repodbfactory.New(conf.Storage.StorageConfig, log) } + testFunc := func() { _, _ = meta.New(conf.Storage.StorageConfig, log) } So(testFunc, ShouldPanic) conf.Storage.CacheDriver = map[string]interface{}{ @@ -244,7 +244,7 @@ func TestCreateRepoDBDriver(t *testing.T) { "versiontablename": 1, } - testFunc = func() { _, _ = repodbfactory.New(conf.Storage.StorageConfig, log) } + testFunc = func() { _, _ = meta.New(conf.Storage.StorageConfig, log) } So(testFunc, ShouldPanic) conf.Storage.CacheDriver = map[string]interface{}{ @@ -260,7 +260,7 @@ func TestCreateRepoDBDriver(t *testing.T) { "versiontablename": "1", } - testFunc = func() { _, _ = repodbfactory.New(conf.Storage.StorageConfig, log) } + testFunc = func() { _, _ = meta.New(conf.Storage.StorageConfig, log) } So(testFunc, ShouldNotPanic) }) @@ -283,7 +283,7 @@ func TestCreateRepoDBDriver(t *testing.T) { err = os.Chmod(path.Join(dir, "repo.db"), 0o200) So(err, ShouldBeNil) - _, err = repodbfactory.New(conf.Storage.StorageConfig, log) + _, err = meta.New(conf.Storage.StorageConfig, log) So(err, ShouldNotBeNil) err = os.Chmod(path.Join(dir, "repo.db"), 0o600) @@ -3103,7 +3103,7 @@ func TestAuthnSessionErrors(t *testing.T) { Convey("trigger basic authn middle(htpasswd) error", func() { client := resty.New() - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ SetUserGroupsFn: func(ctx context.Context, groups []string) error { return ErrUnexpectedError }, @@ -3120,7 +3120,7 @@ func TestAuthnSessionErrors(t *testing.T) { Convey("trigger basic authn middle(ldap) error", func() { client := resty.New() - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ SetUserGroupsFn: func(ctx context.Context, groups []string) error { return ErrUnexpectedError }, @@ -3138,7 +3138,7 @@ func TestAuthnSessionErrors(t *testing.T) { client := resty.New() client.SetRedirectPolicy(test.CustomRedirectPolicy(20)) - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ SetUserGroupsFn: func(ctx context.Context, groups []string) error { return ErrUnexpectedError }, @@ -3153,7 +3153,7 @@ func TestAuthnSessionErrors(t *testing.T) { So(resp.StatusCode(), ShouldEqual, http.StatusInternalServerError) }) - Convey("trigger session middle repoDB errors", func() { + Convey("trigger session middle metaDB errors", func() { client := resty.New() client.SetRedirectPolicy(test.CustomRedirectPolicy(20)) @@ -3162,7 +3162,7 @@ func TestAuthnSessionErrors(t *testing.T) { mockOIDCServer.QueueUser(user) - ctlr.RepoDB = mocks.RepoDBMock{} + ctlr.MetaDB = mocks.MetaDBMock{} // first login user resp, err := client.R(). @@ -3178,7 +3178,7 @@ func TestAuthnSessionErrors(t *testing.T) { client.SetCookies(cookies) - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ GetUserGroupsFn: func(ctx context.Context) ([]string, error) { return []string{}, ErrUnexpectedError }, @@ -3198,7 +3198,7 @@ func TestAuthnSessionErrors(t *testing.T) { client.SetCookies(cookies) - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ GetUserGroupsFn: func(ctx context.Context) ([]string, error) { return []string{}, errors.ErrUserDataNotFound }, @@ -3417,7 +3417,7 @@ func TestAuthnSessionErrors(t *testing.T) { }) } -func TestAuthnRepoDBErrors(t *testing.T) { +func TestAuthnMetaDBErrors(t *testing.T) { Convey("make controller", t, func() { port := test.GetFreePort() baseURL := test.GetBaseURL(port) @@ -3472,7 +3472,7 @@ func TestAuthnRepoDBErrors(t *testing.T) { Convey("trigger basic authn middle(htpasswd) error", func() { client := resty.New() - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ SetUserGroupsFn: func(ctx context.Context, groups []string) error { return ErrUnexpectedError }, @@ -3486,7 +3486,7 @@ func TestAuthnRepoDBErrors(t *testing.T) { So(resp.StatusCode(), ShouldEqual, http.StatusInternalServerError) }) - Convey("trigger session middle repoDB errors", func() { + Convey("trigger session middle metaDB errors", func() { client := resty.New() client.SetRedirectPolicy(test.CustomRedirectPolicy(20)) @@ -3509,7 +3509,7 @@ func TestAuthnRepoDBErrors(t *testing.T) { client.SetCookies(cookies) - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ GetUserGroupsFn: func(ctx context.Context) ([]string, error) { return []string{}, ErrUnexpectedError }, @@ -4727,7 +4727,7 @@ func TestCrossRepoMount(t *testing.T) { // in cache, now try mount blob request status and it should be 201 because now blob is present in cache // and it should do hard link. - // make a new server with dedupe on and same rootDir (can't restart because of repodb - boltdb being open) + // make a new server with dedupe on and same rootDir (can't restart because of metadb - boltdb being open) newDir := t.TempDir() err = test.CopyFiles(dir, newDir) So(err, ShouldBeNil) diff --git a/pkg/api/routes.go b/pkg/api/routes.go index acdb7f1a..93fb6f5e 100644 --- a/pkg/api/routes.go +++ b/pkg/api/routes.go @@ -157,11 +157,11 @@ func (rh *RouteHandler) SetupRoutes() { prefixedExtensionsRouter.Use(CORSHeadersMiddleware(rh.c.Config.HTTP.AllowOrigin)) ext.SetupMgmtRoutes(rh.c.Config, prefixedExtensionsRouter, rh.c.Log) - ext.SetupSearchRoutes(rh.c.Config, prefixedExtensionsRouter, rh.c.StoreController, rh.c.RepoDB, rh.c.CveInfo, + ext.SetupSearchRoutes(rh.c.Config, prefixedExtensionsRouter, rh.c.StoreController, rh.c.MetaDB, rh.c.CveInfo, rh.c.Log) - ext.SetupUserPreferencesRoutes(rh.c.Config, prefixedExtensionsRouter, rh.c.StoreController, rh.c.RepoDB, + ext.SetupUserPreferencesRoutes(rh.c.Config, prefixedExtensionsRouter, rh.c.StoreController, rh.c.MetaDB, rh.c.CveInfo, rh.c.Log) - ext.SetupAPIKeyRoutes(rh.c.Config, prefixedExtensionsRouter, rh.c.RepoDB, rh.c.CookieStore, rh.c.Log) + ext.SetupAPIKeyRoutes(rh.c.Config, prefixedExtensionsRouter, rh.c.MetaDB, rh.c.CookieStore, rh.c.Log) ext.SetupMetricsRoutes(rh.c.Config, rh.c.Router, rh.c.StoreController, authHandler, rh.c.Log) gqlPlayground.SetupGQLPlaygroundRoutes(rh.c.Config, prefixedRouter, rh.c.StoreController, rh.c.Log) @@ -505,8 +505,8 @@ func (rh *RouteHandler) GetManifest(response http.ResponseWriter, request *http. return } - if rh.c.RepoDB != nil { - err := meta.OnGetManifest(name, reference, content, rh.c.StoreController, rh.c.RepoDB, rh.c.Log) + if rh.c.MetaDB != nil { + err := meta.OnGetManifest(name, reference, content, rh.c.StoreController, rh.c.MetaDB, rh.c.Log) if err != nil { response.WriteHeader(http.StatusInternalServerError) @@ -712,8 +712,8 @@ func (rh *RouteHandler) UpdateManifest(response http.ResponseWriter, request *ht return } - if rh.c.RepoDB != nil { - err := meta.OnUpdateManifest(name, reference, mediaType, digest, body, rh.c.StoreController, rh.c.RepoDB, + if rh.c.MetaDB != nil { + err := meta.OnUpdateManifest(name, reference, mediaType, digest, body, rh.c.StoreController, rh.c.MetaDB, rh.c.Log) if err != nil { response.WriteHeader(http.StatusInternalServerError) @@ -813,9 +813,9 @@ func (rh *RouteHandler) DeleteManifest(response http.ResponseWriter, request *ht return } - if rh.c.RepoDB != nil { + if rh.c.MetaDB != nil { err := meta.OnDeleteManifest(name, reference, mediaType, manifestDigest, manifestBlob, - rh.c.StoreController, rh.c.RepoDB, rh.c.Log) + rh.c.StoreController, rh.c.MetaDB, rh.c.Log) if err != nil { response.WriteHeader(http.StatusInternalServerError) diff --git a/pkg/api/routes_test.go b/pkg/api/routes_test.go index 4b8a6857..f7e37ed8 100644 --- a/pkg/api/routes_test.go +++ b/pkg/api/routes_test.go @@ -30,7 +30,7 @@ import ( "zotregistry.io/zot/pkg/api/constants" "zotregistry.io/zot/pkg/extensions" extconf "zotregistry.io/zot/pkg/extensions/config" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" localCtx "zotregistry.io/zot/pkg/requestcontext" storageTypes "zotregistry.io/zot/pkg/storage/types" "zotregistry.io/zot/pkg/test" @@ -1434,7 +1434,7 @@ func TestRoutes(t *testing.T) { request, _ := http.NewRequestWithContext(ctx, http.MethodPost, baseURL, bytes.NewReader([]byte{})) response := httptest.NewRecorder() - extensions.CreateAPIKey(response, request, ctlr.RepoDB, ctlr.CookieStore, ctlr.Log) + extensions.CreateAPIKey(response, request, ctlr.MetaDB, ctlr.CookieStore, ctlr.Log) resp := response.Result() defer resp.Body.Close() @@ -1451,7 +1451,7 @@ func TestRoutes(t *testing.T) { request, _ = http.NewRequestWithContext(ctx, http.MethodPost, baseURL, bytes.NewReader([]byte{})) response = httptest.NewRecorder() - extensions.CreateAPIKey(response, request, ctlr.RepoDB, ctlr.CookieStore, ctlr.Log) + extensions.CreateAPIKey(response, request, ctlr.MetaDB, ctlr.CookieStore, ctlr.Log) resp = response.Result() defer resp.Body.Close() @@ -1468,8 +1468,8 @@ func TestRoutes(t *testing.T) { request, _ = http.NewRequestWithContext(ctx, http.MethodPost, baseURL, bytes.NewReader(reqBody)) response = httptest.NewRecorder() - extensions.CreateAPIKey(response, request, mocks.RepoDBMock{ - AddUserAPIKeyFn: func(ctx context.Context, hashedKey string, apiKeyDetails *repodb.APIKeyDetails) error { + extensions.CreateAPIKey(response, request, mocks.MetaDBMock{ + AddUserAPIKeyFn: func(ctx context.Context, hashedKey string, apiKeyDetails *mTypes.APIKeyDetails) error { return ErrUnexpectedError }, }, ctlr.CookieStore, ctlr.Log) @@ -1486,7 +1486,7 @@ func TestRoutes(t *testing.T) { q.Add("id", "apikeyid") request.URL.RawQuery = q.Encode() - extensions.RevokeAPIKey(response, request, mocks.RepoDBMock{ + extensions.RevokeAPIKey(response, request, mocks.MetaDBMock{ DeleteUserAPIKeyFn: func(ctx context.Context, id string) error { return ErrUnexpectedError }, diff --git a/pkg/cli/cve_cmd_test.go b/pkg/cli/cve_cmd_test.go index 07c87bc0..420f6b89 100644 --- a/pkg/cli/cve_cmd_test.go +++ b/pkg/cli/cve_cmd_test.go @@ -35,7 +35,7 @@ import ( cveinfo "zotregistry.io/zot/pkg/extensions/search/cve" cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" "zotregistry.io/zot/pkg/storage/local" "zotregistry.io/zot/pkg/test" @@ -527,7 +527,7 @@ func TestNegativeServerResponse(t *testing.T) { panic(err) } - ctlr.CveInfo = getMockCveInfo(ctlr.RepoDB, ctlr.Log) + ctlr.CveInfo = getMockCveInfo(ctlr.MetaDB, ctlr.Log) go func() { if err := ctlr.Run(ctx); !errors.Is(err, http.ErrServerClosed) { @@ -602,7 +602,7 @@ func TestServerCVEResponse(t *testing.T) { panic(err) } - ctlr.CveInfo = getMockCveInfo(ctlr.RepoDB, ctlr.Log) + ctlr.CveInfo = getMockCveInfo(ctlr.MetaDB, ctlr.Log) go func() { if err := ctlr.Run(ctx); !errors.Is(err, http.ErrServerClosed) { @@ -1159,8 +1159,8 @@ func MockSearchCve(searchConfig searchConfig) error { return zotErrors.ErrInvalidFlagsCombination } -func getMockCveInfo(repoDB repodb.RepoDB, log log.Logger) cveinfo.CveInfo { - // RepoDB loaded with initial data, mock the scanner +func getMockCveInfo(metaDB mTypes.MetaDB, log log.Logger) cveinfo.CveInfo { + // MetaDB loaded with initial data, mock the scanner severities := map[string]int{ "UNKNOWN": 0, "LOW": 1, @@ -1219,7 +1219,7 @@ func getMockCveInfo(repoDB repodb.RepoDB, log log.Logger) cveinfo.CveInfo { imageDir := repo inputTag := reference - repoMeta, err := repoDB.GetRepoMeta(imageDir) + repoMeta, err := metaDB.GetRepoMeta(imageDir) if err != nil { return false, err } @@ -1242,7 +1242,7 @@ func getMockCveInfo(repoDB repodb.RepoDB, log log.Logger) cveinfo.CveInfo { return false, err } - manifestData, err := repoDB.GetManifestData(manifestDigest) + manifestData, err := metaDB.GetManifestData(manifestDigest) if err != nil { return false, err } @@ -1272,7 +1272,7 @@ func getMockCveInfo(repoDB repodb.RepoDB, log log.Logger) cveinfo.CveInfo { return &cveinfo.BaseCveInfo{ Log: log, Scanner: scanner, - RepoDB: repoDB, + MetaDB: metaDB, } } diff --git a/pkg/extensions/extension_api_key.go b/pkg/extensions/extension_api_key.go index f0e8dc9e..7e112eb8 100644 --- a/pkg/extensions/extension_api_key.go +++ b/pkg/extensions/extension_api_key.go @@ -22,10 +22,10 @@ import ( "zotregistry.io/zot/pkg/api/constants" zcommon "zotregistry.io/zot/pkg/common" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" ) -func SetupAPIKeyRoutes(config *config.Config, router *mux.Router, repoDB repodb.RepoDB, +func SetupAPIKeyRoutes(config *config.Config, router *mux.Router, metaDB mTypes.MetaDB, cookieStore sessions.Store, log log.Logger, ) { if config.Extensions.APIKey != nil && *config.Extensions.APIKey.Enable { @@ -36,7 +36,7 @@ func SetupAPIKeyRoutes(config *config.Config, router *mux.Router, repoDB repodb. apiKeyRouter := router.PathPrefix(constants.ExtAPIKey).Subrouter() apiKeyRouter.Use(zcommon.ACHeadersHandler(allowedMethods...)) apiKeyRouter.Use(zcommon.AddExtensionSecurityHeaders()) - apiKeyRouter.Methods(allowedMethods...).Handler(HandleAPIKeyRequest(repoDB, cookieStore, log)) + apiKeyRouter.Methods(allowedMethods...).Handler(HandleAPIKeyRequest(metaDB, cookieStore, log)) } } @@ -45,17 +45,17 @@ type APIKeyPayload struct { //nolint:revive Scopes []string `json:"scopes"` } -func HandleAPIKeyRequest(repoDB repodb.RepoDB, cookieStore sessions.Store, +func HandleAPIKeyRequest(metaDB mTypes.MetaDB, cookieStore sessions.Store, log log.Logger, ) http.Handler { return http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) { switch req.Method { case http.MethodPost: - CreateAPIKey(resp, req, repoDB, cookieStore, log) //nolint:contextcheck + CreateAPIKey(resp, req, metaDB, cookieStore, log) //nolint:contextcheck return case http.MethodDelete: - RevokeAPIKey(resp, req, repoDB, cookieStore, log) //nolint:contextcheck + RevokeAPIKey(resp, req, metaDB, cookieStore, log) //nolint:contextcheck return } @@ -71,7 +71,7 @@ func HandleAPIKeyRequest(repoDB repodb.RepoDB, cookieStore sessions.Store, // @Failure 401 {string} string "unauthorized" // @Failure 500 {string} string "internal server error" // @Router /v2/_zot/ext/apikey [post]. -func CreateAPIKey(resp http.ResponseWriter, req *http.Request, repoDB repodb.RepoDB, +func CreateAPIKey(resp http.ResponseWriter, req *http.Request, metaDB mTypes.MetaDB, cookieStore sessions.Store, log log.Logger, ) { var payload APIKeyPayload @@ -113,7 +113,7 @@ func CreateAPIKey(resp http.ResponseWriter, req *http.Request, repoDB repodb.Rep return } - apiKeyDetails := &repodb.APIKeyDetails{ + apiKeyDetails := &mTypes.APIKeyDetails{ CreatedAt: time.Now(), LastUsed: time.Now(), CreatorUA: req.UserAgent(), @@ -123,7 +123,7 @@ func CreateAPIKey(resp http.ResponseWriter, req *http.Request, repoDB repodb.Rep UUID: apiKeyID.String(), } - err = repoDB.AddUserAPIKey(req.Context(), hashedAPIKey, apiKeyDetails) + err = metaDB.AddUserAPIKey(req.Context(), hashedAPIKey, apiKeyDetails) if err != nil { log.Error().Err(err).Msg("error storing API key") resp.WriteHeader(http.StatusInternalServerError) @@ -132,7 +132,7 @@ func CreateAPIKey(resp http.ResponseWriter, req *http.Request, repoDB repodb.Rep } apiKeyResponse := struct { - repodb.APIKeyDetails + mTypes.APIKeyDetails APIKey string `json:"apiKey"` }{ APIKey: fmt.Sprintf("%s%s", constants.APIKeysPrefix, apiKey), @@ -166,7 +166,7 @@ func CreateAPIKey(resp http.ResponseWriter, req *http.Request, repoDB repodb.Rep // @Failure 401 {string} string "unauthorized" // @Failure 400 {string} string "bad request" // @Router /v2/_zot/ext/apikey?id=UUID [delete]. -func RevokeAPIKey(resp http.ResponseWriter, req *http.Request, repoDB repodb.RepoDB, +func RevokeAPIKey(resp http.ResponseWriter, req *http.Request, metaDB mTypes.MetaDB, cookieStore sessions.Store, log log.Logger, ) { ids, ok := req.URL.Query()["id"] @@ -178,7 +178,7 @@ func RevokeAPIKey(resp http.ResponseWriter, req *http.Request, repoDB repodb.Rep keyID := ids[0] - err := repoDB.DeleteUserAPIKey(req.Context(), keyID) + err := metaDB.DeleteUserAPIKey(req.Context(), keyID) if err != nil { log.Error().Err(err).Str("keyID", keyID).Msg("error deleting API key") resp.WriteHeader(http.StatusInternalServerError) diff --git a/pkg/extensions/extension_api_key_disabled.go b/pkg/extensions/extension_api_key_disabled.go index 9fa3fc09..df1e3c1f 100644 --- a/pkg/extensions/extension_api_key_disabled.go +++ b/pkg/extensions/extension_api_key_disabled.go @@ -9,10 +9,10 @@ import ( "zotregistry.io/zot/pkg/api/config" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" ) -func SetupAPIKeyRoutes(config *config.Config, router *mux.Router, repoDB repodb.RepoDB, +func SetupAPIKeyRoutes(config *config.Config, router *mux.Router, metaDB mTypes.MetaDB, cookieStore sessions.Store, log log.Logger, ) { log.Warn().Msg("skipping setting up API key routes because given zot binary doesn't include this feature," + diff --git a/pkg/extensions/extension_api_key_test.go b/pkg/extensions/extension_api_key_test.go index 6c43f795..72515f33 100644 --- a/pkg/extensions/extension_api_key_test.go +++ b/pkg/extensions/extension_api_key_test.go @@ -20,7 +20,7 @@ import ( "zotregistry.io/zot/pkg/api/constants" "zotregistry.io/zot/pkg/extensions" extconf "zotregistry.io/zot/pkg/extensions/config" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" localCtx "zotregistry.io/zot/pkg/requestcontext" "zotregistry.io/zot/pkg/test" "zotregistry.io/zot/pkg/test/mocks" @@ -28,7 +28,7 @@ import ( type ( apiKeyResponse struct { - repodb.APIKeyDetails + mTypes.APIKeyDetails APIKey string `json:"apiKey"` } ) @@ -209,7 +209,7 @@ func TestAPIKeys(t *testing.T) { So(resp.StatusCode(), ShouldEqual, http.StatusOK) // trigger errors - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ GetUserAPIKeyInfoFn: func(hashedKey string) (string, error) { return "", ErrUnexpectedError }, @@ -222,7 +222,7 @@ func TestAPIKeys(t *testing.T) { So(resp, ShouldNotBeNil) So(resp.StatusCode(), ShouldEqual, http.StatusInternalServerError) - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ GetUserAPIKeyInfoFn: func(hashedKey string) (string, error) { return user.Email, nil }, @@ -238,7 +238,7 @@ func TestAPIKeys(t *testing.T) { So(resp, ShouldNotBeNil) So(resp.StatusCode(), ShouldEqual, http.StatusInternalServerError) - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ GetUserAPIKeyInfoFn: func(hashedKey string) (string, error) { return user.Email, nil }, @@ -361,7 +361,7 @@ func TestAPIKeys(t *testing.T) { ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - err = ctlr.RepoDB.DeleteUserData(ctx) + err = ctlr.MetaDB.DeleteUserData(ctx) So(err, ShouldBeNil) resp, err = client.R(). diff --git a/pkg/extensions/extension_mgmt.go b/pkg/extensions/extension_mgmt.go index ea6a5d20..f675bebd 100644 --- a/pkg/extensions/extension_mgmt.go +++ b/pkg/extensions/extension_mgmt.go @@ -17,8 +17,8 @@ import ( "zotregistry.io/zot/pkg/api/constants" zcommon "zotregistry.io/zot/pkg/common" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" "zotregistry.io/zot/pkg/meta/signatures" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/scheduler" ) @@ -243,21 +243,21 @@ func HandleCertificatesAndPublicKeysUploads(response http.ResponseWriter, reques } func EnablePeriodicSignaturesVerification(config *config.Config, taskScheduler *scheduler.Scheduler, - repoDB repodb.RepoDB, log log.Logger, + metaDB mTypes.MetaDB, log log.Logger, ) { if config.Extensions.Search != nil && *config.Extensions.Search.Enable { ctx := context.Background() - repos, err := repoDB.GetMultipleRepoMeta(ctx, func(repoMeta repodb.RepoMetadata) bool { + repos, err := metaDB.GetMultipleRepoMeta(ctx, func(repoMeta mTypes.RepoMetadata) bool { return true - }, repodb.PageInput{}) + }, mTypes.PageInput{}) if err != nil { return } generator := &taskGeneratorSigValidity{ repos: repos, - repoDB: repoDB, + metaDB: metaDB, repoIndex: -1, log: log, } @@ -269,8 +269,8 @@ func EnablePeriodicSignaturesVerification(config *config.Config, taskScheduler * } type taskGeneratorSigValidity struct { - repos []repodb.RepoMetadata - repoDB repodb.RepoDB + repos []mTypes.RepoMetadata + metaDB mTypes.MetaDB repoIndex int done bool log log.Logger @@ -285,7 +285,7 @@ func (gen *taskGeneratorSigValidity) Next() (scheduler.Task, error) { return nil, nil } - return NewValidityTask(gen.repoDB, gen.repos[gen.repoIndex], gen.log), nil + return NewValidityTask(gen.metaDB, gen.repos[gen.repoIndex], gen.log), nil } func (gen *taskGeneratorSigValidity) IsDone() bool { @@ -297,9 +297,9 @@ func (gen *taskGeneratorSigValidity) Reset() { gen.repoIndex = -1 ctx := context.Background() - repos, err := gen.repoDB.GetMultipleRepoMeta(ctx, func(repoMeta repodb.RepoMetadata) bool { + repos, err := gen.metaDB.GetMultipleRepoMeta(ctx, func(repoMeta mTypes.RepoMetadata) bool { return true - }, repodb.PageInput{}) + }, mTypes.PageInput{}) if err != nil { return } @@ -308,13 +308,13 @@ func (gen *taskGeneratorSigValidity) Reset() { } type validityTask struct { - repoDB repodb.RepoDB - repo repodb.RepoMetadata + metaDB mTypes.MetaDB + repo mTypes.RepoMetadata log log.Logger } -func NewValidityTask(repoDB repodb.RepoDB, repo repodb.RepoMetadata, log log.Logger) *validityTask { - return &validityTask{repoDB, repo, log} +func NewValidityTask(metaDB mTypes.MetaDB, repo mTypes.RepoMetadata, log log.Logger) *validityTask { + return &validityTask{metaDB, repo, log} } func (validityT *validityTask) DoWork() error { @@ -322,7 +322,7 @@ func (validityT *validityTask) DoWork() error { for signedManifest, sigs := range validityT.repo.Signatures { if len(sigs[signatures.CosignSignature]) != 0 || len(sigs[signatures.NotationSignature]) != 0 { - err := validityT.repoDB.UpdateSignaturesValidity(validityT.repo.Name, digest.Digest(signedManifest)) + err := validityT.metaDB.UpdateSignaturesValidity(validityT.repo.Name, digest.Digest(signedManifest)) if err != nil { validityT.log.Info().Msg("error while verifying signatures") diff --git a/pkg/extensions/extension_mgmt_disabled.go b/pkg/extensions/extension_mgmt_disabled.go index 75d89955..f9ea6dd9 100644 --- a/pkg/extensions/extension_mgmt_disabled.go +++ b/pkg/extensions/extension_mgmt_disabled.go @@ -8,7 +8,7 @@ import ( "zotregistry.io/zot/pkg/api/config" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/scheduler" ) @@ -22,7 +22,7 @@ func SetupMgmtRoutes(config *config.Config, router *mux.Router, log log.Logger) } func EnablePeriodicSignaturesVerification(config *config.Config, taskScheduler *scheduler.Scheduler, - repoDB repodb.RepoDB, log log.Logger, + metaDB mTypes.MetaDB, log log.Logger, ) { log.Warn().Msg("skipping adding to the scheduler a generator for updating signatures validity because " + "given binary doesn't include this feature, please build a binary that does so") diff --git a/pkg/extensions/extension_search.go b/pkg/extensions/extension_search.go index 37ac24e4..5c2113da 100644 --- a/pkg/extensions/extension_search.go +++ b/pkg/extensions/extension_search.go @@ -18,7 +18,7 @@ import ( cveinfo "zotregistry.io/zot/pkg/extensions/search/cve" "zotregistry.io/zot/pkg/extensions/search/gql_generated" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/scheduler" "zotregistry.io/zot/pkg/storage" ) @@ -39,7 +39,7 @@ func IsBuiltWithSearchExtension() bool { } func GetCVEInfo(config *config.Config, storeController storage.StoreController, - repoDB repodb.RepoDB, log log.Logger, + metaDB mTypes.MetaDB, log log.Logger, ) CveInfo { if config.Extensions.Search == nil || !*config.Extensions.Search.Enable || config.Extensions.Search.CVE == nil { return nil @@ -48,11 +48,11 @@ func GetCVEInfo(config *config.Config, storeController storage.StoreController, dbRepository := config.Extensions.Search.CVE.Trivy.DBRepository javaDBRepository := config.Extensions.Search.CVE.Trivy.JavaDBRepository - return cveinfo.NewCVEInfo(storeController, repoDB, dbRepository, javaDBRepository, log) + return cveinfo.NewCVEInfo(storeController, metaDB, dbRepository, javaDBRepository, log) } func EnableSearchExtension(config *config.Config, storeController storage.StoreController, - repoDB repodb.RepoDB, taskScheduler *scheduler.Scheduler, cveInfo CveInfo, log log.Logger, + metaDB mTypes.MetaDB, taskScheduler *scheduler.Scheduler, cveInfo CveInfo, log log.Logger, ) { if config.Extensions.Search != nil && *config.Extensions.Search.Enable && config.Extensions.Search.CVE != nil { updateInterval := config.Extensions.Search.CVE.UpdateInterval @@ -157,12 +157,12 @@ func (trivyT *trivyTask) DoWork() error { } func SetupSearchRoutes(config *config.Config, router *mux.Router, storeController storage.StoreController, - repoDB repodb.RepoDB, cveInfo CveInfo, log log.Logger, + metaDB mTypes.MetaDB, cveInfo CveInfo, log log.Logger, ) { log.Info().Msg("setting up search routes") if config.Extensions.Search != nil && *config.Extensions.Search.Enable { - resConfig := search.GetResolverConfig(log, storeController, repoDB, cveInfo) + resConfig := search.GetResolverConfig(log, storeController, metaDB, cveInfo) allowedMethods := zcommon.AllowedMethods(http.MethodGet, http.MethodPost) diff --git a/pkg/extensions/extension_search_disabled.go b/pkg/extensions/extension_search_disabled.go index f16f84ed..a898d747 100644 --- a/pkg/extensions/extension_search_disabled.go +++ b/pkg/extensions/extension_search_disabled.go @@ -8,7 +8,7 @@ import ( "zotregistry.io/zot/pkg/api/config" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/scheduler" "zotregistry.io/zot/pkg/storage" ) @@ -16,7 +16,7 @@ import ( type CveInfo interface{} func GetCVEInfo(config *config.Config, storeController storage.StoreController, - repoDB repodb.RepoDB, log log.Logger, + metaDB mTypes.MetaDB, log log.Logger, ) CveInfo { return nil } @@ -27,7 +27,7 @@ func IsBuiltWithSearchExtension() bool { // EnableSearchExtension ... func EnableSearchExtension(config *config.Config, storeController storage.StoreController, - repoDB repodb.RepoDB, scheduler *scheduler.Scheduler, cveInfo CveInfo, log log.Logger, + metaDB mTypes.MetaDB, scheduler *scheduler.Scheduler, cveInfo CveInfo, log log.Logger, ) { log.Warn().Msg("skipping enabling search extension because given zot binary doesn't include this feature," + "please build a binary that does so") @@ -35,7 +35,7 @@ func EnableSearchExtension(config *config.Config, storeController storage.StoreC // SetupSearchRoutes ... func SetupSearchRoutes(config *config.Config, router *mux.Router, storeController storage.StoreController, - repoDB repodb.RepoDB, cveInfo CveInfo, log log.Logger, + metaDB mTypes.MetaDB, cveInfo CveInfo, log log.Logger, ) { log.Warn().Msg("skipping setting up search routes because given zot binary doesn't include this feature," + "please build a binary that does so") diff --git a/pkg/extensions/extension_search_test.go b/pkg/extensions/extension_search_test.go index 668280e7..14d4a370 100644 --- a/pkg/extensions/extension_search_test.go +++ b/pkg/extensions/extension_search_test.go @@ -17,7 +17,7 @@ import ( . "zotregistry.io/zot/pkg/extensions" cveinfo "zotregistry.io/zot/pkg/extensions/search/cve" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/scheduler" "zotregistry.io/zot/pkg/storage" . "zotregistry.io/zot/pkg/test" @@ -40,10 +40,10 @@ func TestTrivyDBGenerator(t *testing.T) { cfg.Scheduler = &config.SchedulerConfig{NumWorkers: 3} sch := scheduler.NewScheduler(cfg, logger) - repoDB := &mocks.RepoDBMock{ - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB := &mocks.MetaDBMock{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": {MediaType: ispec.MediaTypeImageIndex}, }, }, nil @@ -57,7 +57,7 @@ func TestTrivyDBGenerator(t *testing.T) { }, } - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "ghcr.io/project-zot/trivy-db", "", logger) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "ghcr.io/project-zot/trivy-db", "", logger) generator := NewTrivyTaskGenerator(time.Minute, cveInfo, logger) sch.SubmitGenerator(generator, 12000*time.Millisecond, scheduler.HighPriority) diff --git a/pkg/extensions/extension_sync.go b/pkg/extensions/extension_sync.go index 716e2d35..852112dc 100644 --- a/pkg/extensions/extension_sync.go +++ b/pkg/extensions/extension_sync.go @@ -13,12 +13,12 @@ import ( syncconf "zotregistry.io/zot/pkg/extensions/config/sync" "zotregistry.io/zot/pkg/extensions/sync" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/scheduler" "zotregistry.io/zot/pkg/storage" ) -func EnableSyncExtension(config *config.Config, repoDB repodb.RepoDB, +func EnableSyncExtension(config *config.Config, metaDB mTypes.MetaDB, storeController storage.StoreController, sch *scheduler.Scheduler, log log.Logger, ) (*sync.BaseOnDemand, error) { if config.Extensions.Sync != nil && *config.Extensions.Sync.Enable { @@ -43,7 +43,7 @@ func EnableSyncExtension(config *config.Config, repoDB repodb.RepoDB, if isPeriodical || isOnDemand { service, err := sync.New(registryConfig, config.Extensions.Sync.CredentialsFile, - storeController, repoDB, log) + storeController, metaDB, log) if err != nil { return nil, err } diff --git a/pkg/extensions/extension_sync_disabled.go b/pkg/extensions/extension_sync_disabled.go index 5772bcb6..4787e75a 100644 --- a/pkg/extensions/extension_sync_disabled.go +++ b/pkg/extensions/extension_sync_disabled.go @@ -7,13 +7,13 @@ import ( "zotregistry.io/zot/pkg/api/config" "zotregistry.io/zot/pkg/extensions/sync" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/scheduler" "zotregistry.io/zot/pkg/storage" ) // EnableSyncExtension ... -func EnableSyncExtension(config *config.Config, repoDB repodb.RepoDB, +func EnableSyncExtension(config *config.Config, metaDB mTypes.MetaDB, storeController storage.StoreController, sch *scheduler.Scheduler, log log.Logger, ) (*sync.BaseOnDemand, error) { log.Warn().Msg("skipping enabling sync extension because given zot binary doesn't include this feature," + diff --git a/pkg/extensions/extension_userprefs.go b/pkg/extensions/extension_userprefs.go index e4f23160..4ca2f05c 100644 --- a/pkg/extensions/extension_userprefs.go +++ b/pkg/extensions/extension_userprefs.go @@ -14,7 +14,7 @@ import ( "zotregistry.io/zot/pkg/api/constants" zcommon "zotregistry.io/zot/pkg/common" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" ) @@ -28,7 +28,7 @@ func IsBuiltWithUserPrefsExtension() bool { } func SetupUserPreferencesRoutes(config *config.Config, router *mux.Router, storeController storage.StoreController, - repoDB repodb.RepoDB, cveInfo CveInfo, log log.Logger, + metaDB mTypes.MetaDB, cveInfo CveInfo, log log.Logger, ) { if config.Extensions.Search != nil && *config.Extensions.Search.Enable { log.Info().Msg("setting up user preferences routes") @@ -39,7 +39,7 @@ func SetupUserPreferencesRoutes(config *config.Config, router *mux.Router, store userprefsRouter.Use(zcommon.ACHeadersHandler(allowedMethods...)) userprefsRouter.Use(zcommon.AddExtensionSecurityHeaders()) - userprefsRouter.HandleFunc("", HandleUserPrefs(repoDB, log)).Methods(allowedMethods...) + userprefsRouter.HandleFunc("", HandleUserPrefs(metaDB, log)).Methods(allowedMethods...) } } @@ -56,7 +56,7 @@ func SetupUserPreferencesRoutes(config *config.Config, router *mux.Router, store // @Failure 403 {string} string "forbidden" // @Failure 500 {string} string "internal server error" // @Failure 400 {string} string "bad request". -func HandleUserPrefs(repoDB repodb.RepoDB, log log.Logger) func(w http.ResponseWriter, r *http.Request) { +func HandleUserPrefs(metaDB mTypes.MetaDB, log log.Logger) func(w http.ResponseWriter, r *http.Request) { return func(rsp http.ResponseWriter, req *http.Request) { if !zcommon.QueryHasParams(req.URL.Query(), []string{"action"}) { rsp.WriteHeader(http.StatusBadRequest) @@ -68,11 +68,11 @@ func HandleUserPrefs(repoDB repodb.RepoDB, log log.Logger) func(w http.ResponseW switch action { case ToggleRepoBookmarkAction: - PutBookmark(rsp, req, repoDB, log) //nolint:contextcheck + PutBookmark(rsp, req, metaDB, log) //nolint:contextcheck return case ToggleRepoStarAction: - PutStar(rsp, req, repoDB, log) //nolint:contextcheck + PutStar(rsp, req, metaDB, log) //nolint:contextcheck return default: @@ -83,7 +83,7 @@ func HandleUserPrefs(repoDB repodb.RepoDB, log log.Logger) func(w http.ResponseW } } -func PutStar(rsp http.ResponseWriter, req *http.Request, repoDB repodb.RepoDB, log log.Logger) { +func PutStar(rsp http.ResponseWriter, req *http.Request, metaDB mTypes.MetaDB, log log.Logger) { if !zcommon.QueryHasParams(req.URL.Query(), []string{"repo"}) { rsp.WriteHeader(http.StatusBadRequest) @@ -98,7 +98,7 @@ func PutStar(rsp http.ResponseWriter, req *http.Request, repoDB repodb.RepoDB, l return } - _, err := repoDB.ToggleStarRepo(req.Context(), repo) + _, err := metaDB.ToggleStarRepo(req.Context(), repo) if err != nil { if errors.Is(err, zerr.ErrRepoMetaNotFound) { rsp.WriteHeader(http.StatusNotFound) @@ -118,7 +118,7 @@ func PutStar(rsp http.ResponseWriter, req *http.Request, repoDB repodb.RepoDB, l rsp.WriteHeader(http.StatusOK) } -func PutBookmark(rsp http.ResponseWriter, req *http.Request, repoDB repodb.RepoDB, log log.Logger) { +func PutBookmark(rsp http.ResponseWriter, req *http.Request, metaDB mTypes.MetaDB, log log.Logger) { if !zcommon.QueryHasParams(req.URL.Query(), []string{"repo"}) { rsp.WriteHeader(http.StatusBadRequest) @@ -133,7 +133,7 @@ func PutBookmark(rsp http.ResponseWriter, req *http.Request, repoDB repodb.RepoD return } - _, err := repoDB.ToggleBookmarkRepo(req.Context(), repo) + _, err := metaDB.ToggleBookmarkRepo(req.Context(), repo) if err != nil { if errors.Is(err, zerr.ErrRepoMetaNotFound) { rsp.WriteHeader(http.StatusNotFound) diff --git a/pkg/extensions/extension_userprefs_disable.go b/pkg/extensions/extension_userprefs_disable.go index 1947a4f7..ad98115c 100644 --- a/pkg/extensions/extension_userprefs_disable.go +++ b/pkg/extensions/extension_userprefs_disable.go @@ -8,7 +8,7 @@ import ( "zotregistry.io/zot/pkg/api/config" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" ) @@ -17,7 +17,7 @@ func IsBuiltWithUserPrefsExtension() bool { } func SetupUserPreferencesRoutes(config *config.Config, router *mux.Router, storeController storage.StoreController, - repoDB repodb.RepoDB, cveInfo CveInfo, log log.Logger, + metaDB mTypes.MetaDB, cveInfo CveInfo, log log.Logger, ) { log.Warn().Msg("userprefs extension is disabled because given zot binary doesn't" + "include this feature please build a binary that does so") diff --git a/pkg/extensions/extension_userprefs_test.go b/pkg/extensions/extension_userprefs_test.go index 6e2c6911..b1c45570 100644 --- a/pkg/extensions/extension_userprefs_test.go +++ b/pkg/extensions/extension_userprefs_test.go @@ -22,7 +22,7 @@ import ( "zotregistry.io/zot/pkg/extensions" extconf "zotregistry.io/zot/pkg/extensions/config" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/test" "zotregistry.io/zot/pkg/test/mocks" ) @@ -62,18 +62,18 @@ func TestHandlers(t *testing.T) { const UserprefsBaseURL = "http://127.0.0.1:8080/v2/_zot/ext/userprefs" log := log.NewLogger("debug", "") - mockrepoDB := mocks.RepoDBMock{} + mockmetaDB := mocks.MetaDBMock{} Convey("No repo in request", t, func() { request := httptest.NewRequest(http.MethodGet, UserprefsBaseURL+"", strings.NewReader("My string")) response := httptest.NewRecorder() - extensions.PutStar(response, request, mockrepoDB, log) + extensions.PutStar(response, request, mockmetaDB, log) res := response.Result() So(res.StatusCode, ShouldEqual, http.StatusBadRequest) defer res.Body.Close() - extensions.PutBookmark(response, request, mockrepoDB, log) + extensions.PutBookmark(response, request, mockmetaDB, log) res = response.Result() So(res.StatusCode, ShouldEqual, http.StatusBadRequest) defer res.Body.Close() @@ -83,12 +83,12 @@ func TestHandlers(t *testing.T) { request := httptest.NewRequest(http.MethodGet, UserprefsBaseURL+"?repo=", strings.NewReader("My string")) response := httptest.NewRecorder() - extensions.PutStar(response, request, mockrepoDB, log) + extensions.PutStar(response, request, mockmetaDB, log) res := response.Result() So(res.StatusCode, ShouldEqual, http.StatusNotFound) defer res.Body.Close() - extensions.PutBookmark(response, request, mockrepoDB, log) + extensions.PutBookmark(response, request, mockmetaDB, log) res = response.Result() So(res.StatusCode, ShouldEqual, http.StatusNotFound) defer res.Body.Close() @@ -99,22 +99,22 @@ func TestHandlers(t *testing.T) { strings.NewReader("My string")) Convey("ErrRepoMetaNotFound", func() { - mockrepoDB.ToggleStarRepoFn = func(ctx context.Context, repo string) (repodb.ToggleState, error) { - return repodb.NotChanged, zerr.ErrRepoMetaNotFound + mockmetaDB.ToggleStarRepoFn = func(ctx context.Context, repo string) (mTypes.ToggleState, error) { + return mTypes.NotChanged, zerr.ErrRepoMetaNotFound } - mockrepoDB.ToggleBookmarkRepoFn = func(ctx context.Context, repo string) (repodb.ToggleState, error) { - return repodb.NotChanged, zerr.ErrRepoMetaNotFound + mockmetaDB.ToggleBookmarkRepoFn = func(ctx context.Context, repo string) (mTypes.ToggleState, error) { + return mTypes.NotChanged, zerr.ErrRepoMetaNotFound } response := httptest.NewRecorder() - extensions.PutBookmark(response, request, mockrepoDB, log) + extensions.PutBookmark(response, request, mockmetaDB, log) res := response.Result() So(res.StatusCode, ShouldEqual, http.StatusNotFound) defer res.Body.Close() response = httptest.NewRecorder() - extensions.PutStar(response, request, mockrepoDB, log) + extensions.PutStar(response, request, mockmetaDB, log) res = response.Result() So(res.StatusCode, ShouldEqual, http.StatusNotFound) defer res.Body.Close() @@ -125,22 +125,22 @@ func TestHandlers(t *testing.T) { "name": "repo", }) - mockrepoDB.ToggleBookmarkRepoFn = func(ctx context.Context, repo string) (repodb.ToggleState, error) { - return repodb.NotChanged, zerr.ErrUserDataNotAllowed + mockmetaDB.ToggleBookmarkRepoFn = func(ctx context.Context, repo string) (mTypes.ToggleState, error) { + return mTypes.NotChanged, zerr.ErrUserDataNotAllowed } - mockrepoDB.ToggleStarRepoFn = func(ctx context.Context, repo string) (repodb.ToggleState, error) { - return repodb.NotChanged, zerr.ErrUserDataNotAllowed + mockmetaDB.ToggleStarRepoFn = func(ctx context.Context, repo string) (mTypes.ToggleState, error) { + return mTypes.NotChanged, zerr.ErrUserDataNotAllowed } response := httptest.NewRecorder() - extensions.PutBookmark(response, request, mockrepoDB, log) + extensions.PutBookmark(response, request, mockmetaDB, log) res := response.Result() So(res.StatusCode, ShouldEqual, http.StatusForbidden) defer res.Body.Close() response = httptest.NewRecorder() - extensions.PutStar(response, request, mockrepoDB, log) + extensions.PutStar(response, request, mockmetaDB, log) res = response.Result() So(res.StatusCode, ShouldEqual, http.StatusForbidden) defer res.Body.Close() @@ -151,21 +151,21 @@ func TestHandlers(t *testing.T) { "name": "repo", }) - mockrepoDB.ToggleBookmarkRepoFn = func(ctx context.Context, repo string) (repodb.ToggleState, error) { - return repodb.NotChanged, ErrTestError + mockmetaDB.ToggleBookmarkRepoFn = func(ctx context.Context, repo string) (mTypes.ToggleState, error) { + return mTypes.NotChanged, ErrTestError } - mockrepoDB.ToggleStarRepoFn = func(ctx context.Context, repo string) (repodb.ToggleState, error) { - return repodb.NotChanged, ErrTestError + mockmetaDB.ToggleStarRepoFn = func(ctx context.Context, repo string) (mTypes.ToggleState, error) { + return mTypes.NotChanged, ErrTestError } response := httptest.NewRecorder() - extensions.PutBookmark(response, request, mockrepoDB, log) + extensions.PutBookmark(response, request, mockmetaDB, log) res := response.Result() So(res.StatusCode, ShouldEqual, http.StatusInternalServerError) defer res.Body.Close() response = httptest.NewRecorder() - extensions.PutStar(response, request, mockrepoDB, log) + extensions.PutStar(response, request, mockmetaDB, log) res = response.Result() So(res.StatusCode, ShouldEqual, http.StatusInternalServerError) defer res.Body.Close() diff --git a/pkg/extensions/search/convert/convert_test.go b/pkg/extensions/search/convert/convert_test.go index 8c9ef5e0..c7526901 100644 --- a/pkg/extensions/search/convert/convert_test.go +++ b/pkg/extensions/search/convert/convert_test.go @@ -16,9 +16,8 @@ import ( cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/extensions/search/gql_generated" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/repodb" - boltdb_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" + "zotregistry.io/zot/pkg/meta/boltdb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/test/mocks" ) @@ -26,13 +25,13 @@ var ErrTestError = errors.New("TestError") func TestConvertErrors(t *testing.T) { Convey("Convert Errors", t, func() { - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: t.TempDir(), } - boltDB, err := bolt.GetBoltDriver(params) + boltDB, err := boltdb.GetBoltDriver(params) So(err, ShouldBeNil) - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDB, log.NewLogger("debug", "")) + metaDB, err := boltdb.New(boltDB, log.NewLogger("debug", "")) So(err, ShouldBeNil) configBlob, err := json.Marshal(ispec.Image{}) @@ -49,19 +48,19 @@ func TestConvertErrors(t *testing.T) { }) So(err, ShouldBeNil) - repoMeta11 := repodb.ManifestMetadata{ + repoMeta11 := mTypes.ManifestMetadata{ ManifestBlob: manifestBlob, ConfigBlob: configBlob, } digest11 := godigest.FromString("abc1") - err = repoDB.SetManifestMeta("repo1", digest11, repoMeta11) + err = metaDB.SetManifestMeta("repo1", digest11, repoMeta11) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo1", "0.1.0", digest11, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "0.1.0", digest11, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - repoMetas, manifestMetaMap, _, _, err := repoDB.SearchRepos(context.Background(), "", repodb.Filter{}, - repodb.PageInput{}) + repoMetas, manifestMetaMap, _, _, err := metaDB.SearchRepos(context.Background(), "", mTypes.Filter{}, + mTypes.PageInput{}) So(err, ShouldBeNil) ctx := graphql.WithResponseContext(context.Background(), @@ -71,7 +70,7 @@ func TestConvertErrors(t *testing.T) { ctx, repoMetas[0], manifestMetaMap, - map[string]repodb.IndexData{}, + map[string]mTypes.IndexData{}, convert.SkipQGLField{}, mocks.CveInfoMock{ GetCVESummaryForImageMediaFn: func(repo string, digest, mediaType string, @@ -94,11 +93,11 @@ func TestConvertErrors(t *testing.T) { "tag", godigest.FromString("indexDigest"), true, - repodb.RepoMetadata{}, - repodb.IndexData{ + mTypes.RepoMetadata{}, + mTypes.IndexData{ IndexBlob: []byte("bad json"), }, - map[string]repodb.ManifestMetadata{}, + map[string]mTypes.ManifestMetadata{}, mocks.CveInfoMock{}, ) So(err, ShouldNotBeNil) @@ -114,11 +113,11 @@ func TestConvertErrors(t *testing.T) { "tag", godigest.FromString("indexDigest"), false, - repodb.RepoMetadata{}, - repodb.IndexData{ + mTypes.RepoMetadata{}, + mTypes.IndexData{ IndexBlob: []byte("{}"), }, - map[string]repodb.ManifestMetadata{}, + map[string]mTypes.ManifestMetadata{}, mocks.CveInfoMock{ GetCVESummaryForImageMediaFn: func(repo, digest, mediaType string) (cvemodel.ImageCVESummary, error) { return cvemodel.ImageCVESummary{}, ErrTestError @@ -146,8 +145,8 @@ func TestConvertErrors(t *testing.T) { "tag", godigest.FromString("manifestDigest"), false, - repodb.RepoMetadata{}, - repodb.ManifestMetadata{ + mTypes.RepoMetadata{}, + mTypes.ManifestMetadata{ ManifestBlob: []byte("{}"), ConfigBlob: configBlob, }, @@ -174,13 +173,13 @@ func TestConvertErrors(t *testing.T) { MediaType: ispec.MediaTypeImageManifest, }, false, - repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{}, - Referrers: map[string][]repodb.ReferrerInfo{}, + mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, }, - repodb.ManifestMetadata{ + mTypes.ManifestMetadata{ ManifestBlob: []byte(`{}`), ConfigBlob: []byte("bad json"), }, @@ -208,13 +207,13 @@ func TestConvertErrors(t *testing.T) { MediaType: ispec.MediaTypeImageManifest, }, false, - repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{"dig": {"cosine": []repodb.SignatureInfo{{}}}}, - Referrers: map[string][]repodb.ReferrerInfo{}, + mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{"dig": {"cosine": []mTypes.SignatureInfo{{}}}}, + Referrers: map[string][]mTypes.ReferrerInfo{}, }, - repodb.ManifestMetadata{ + mTypes.ManifestMetadata{ ManifestBlob: []byte("{}"), ConfigBlob: configBlob, }, @@ -235,18 +234,18 @@ func TestConvertErrors(t *testing.T) { // with bad config json, error while unmarshaling _, imageSummaries := convert.RepoMeta2ExpandedRepoInfo( ctx, - repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag1": {Digest: "dig", MediaType: ispec.MediaTypeImageManifest}, }, }, - map[string]repodb.ManifestMetadata{ + map[string]mTypes.ManifestMetadata{ "dig": { ManifestBlob: []byte("{}"), ConfigBlob: []byte("bad json"), }, }, - map[string]repodb.IndexData{}, + map[string]mTypes.IndexData{}, convert.SkipQGLField{ Vulnerabilities: false, }, @@ -261,18 +260,18 @@ func TestConvertErrors(t *testing.T) { // cveInfo present no error _, imageSummaries = convert.RepoMeta2ExpandedRepoInfo( ctx, - repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag1": {Digest: "dig", MediaType: ispec.MediaTypeImageManifest}, }, }, - map[string]repodb.ManifestMetadata{ + map[string]mTypes.ManifestMetadata{ "dig": { ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }, }, - map[string]repodb.IndexData{}, + map[string]mTypes.IndexData{}, convert.SkipQGLField{ Vulnerabilities: false, }, @@ -379,9 +378,9 @@ func TestLabels(t *testing.T) { func TestGetSignaturesInfo(t *testing.T) { Convey("Test get signatures info - cosign", t, func() { indexDigest := godigest.FromString("123") - repoMeta := repodb.RepoMetadata{ - Signatures: map[string]repodb.ManifestSignatures{string(indexDigest): {"cosign": []repodb.SignatureInfo{{ - LayersInfo: []repodb.LayerInfo{{LayerContent: []byte{}, LayerDigest: "", SignatureKey: "", Signer: "author"}}, + repoMeta := mTypes.RepoMetadata{ + Signatures: map[string]mTypes.ManifestSignatures{string(indexDigest): {"cosign": []mTypes.SignatureInfo{{ + LayersInfo: []mTypes.LayerInfo{{LayerContent: []byte{}, LayerDigest: "", SignatureKey: "", Signer: "author"}}, }}}}, } @@ -394,9 +393,9 @@ func TestGetSignaturesInfo(t *testing.T) { Convey("Test get signatures info - notation", t, func() { indexDigest := godigest.FromString("123") - repoMeta := repodb.RepoMetadata{ - Signatures: map[string]repodb.ManifestSignatures{string(indexDigest): {"notation": []repodb.SignatureInfo{{ - LayersInfo: []repodb.LayerInfo{ + repoMeta := mTypes.RepoMetadata{ + Signatures: map[string]mTypes.ManifestSignatures{string(indexDigest): {"notation": []mTypes.SignatureInfo{{ + LayersInfo: []mTypes.LayerInfo{ { LayerContent: []byte{}, LayerDigest: "", diff --git a/pkg/extensions/search/convert/repodb.go b/pkg/extensions/search/convert/metadb.go similarity index 95% rename from pkg/extensions/search/convert/repodb.go rename to pkg/extensions/search/convert/metadb.go index 207b8491..6c0c1bb9 100644 --- a/pkg/extensions/search/convert/repodb.go +++ b/pkg/extensions/search/convert/metadb.go @@ -20,15 +20,15 @@ import ( cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/extensions/search/gql_generated" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" ) type SkipQGLField struct { Vulnerabilities bool } -func RepoMeta2RepoSummary(ctx context.Context, repoMeta repodb.RepoMetadata, - manifestMetaMap map[string]repodb.ManifestMetadata, indexDataMap map[string]repodb.IndexData, +func RepoMeta2RepoSummary(ctx context.Context, repoMeta mTypes.RepoMetadata, + manifestMetaMap map[string]mTypes.ManifestMetadata, indexDataMap map[string]mTypes.IndexData, skip SkipQGLField, cveInfo cveinfo.CveInfo, ) *gql_generated.RepoSummary { var ( @@ -154,9 +154,9 @@ func UpdateLastUpdatedTimestamp(repoLastUpdatedTimestamp *time.Time, return newLastUpdatedImageSummary } -func Descriptor2ImageSummary(ctx context.Context, descriptor repodb.Descriptor, repo, tag string, skipCVE bool, - repoMeta repodb.RepoMetadata, manifestMetaMap map[string]repodb.ManifestMetadata, - indexDataMap map[string]repodb.IndexData, cveInfo cveinfo.CveInfo, +func Descriptor2ImageSummary(ctx context.Context, descriptor mTypes.Descriptor, repo, tag string, skipCVE bool, + repoMeta mTypes.RepoMetadata, manifestMetaMap map[string]mTypes.ManifestMetadata, + indexDataMap map[string]mTypes.IndexData, cveInfo cveinfo.CveInfo, ) (*gql_generated.ImageSummary, map[string]int64, error) { switch descriptor.MediaType { case ispec.MediaTypeImageManifest: @@ -171,7 +171,7 @@ func Descriptor2ImageSummary(ctx context.Context, descriptor repodb.Descriptor, } func ImageIndex2ImageSummary(ctx context.Context, repo, tag string, indexDigest godigest.Digest, skipCVE bool, - repoMeta repodb.RepoMetadata, indexData repodb.IndexData, manifestMetaMap map[string]repodb.ManifestMetadata, + repoMeta mTypes.RepoMetadata, indexData mTypes.IndexData, manifestMetaMap map[string]mTypes.ManifestMetadata, cveInfo cveinfo.CveInfo, ) (*gql_generated.ImageSummary, map[string]int64, error) { var indexContent ispec.Index @@ -276,7 +276,7 @@ func ImageIndex2ImageSummary(ctx context.Context, repo, tag string, indexDigest } func ImageManifest2ImageSummary(ctx context.Context, repo, tag string, digest godigest.Digest, skipCVE bool, - repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata, cveInfo cveinfo.CveInfo, + repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata, cveInfo cveinfo.CveInfo, ) (*gql_generated.ImageSummary, map[string]int64, error) { var ( manifestContent ispec.Manifest @@ -409,7 +409,7 @@ func ImageManifest2ImageSummary(ctx context.Context, repo, tag string, digest go return &imageSummary, imageBlobsMap, nil } -func getReferrers(referrersInfo []repodb.ReferrerInfo) []*gql_generated.Referrer { +func getReferrers(referrersInfo []mTypes.ReferrerInfo) []*gql_generated.Referrer { referrers := make([]*gql_generated.Referrer, 0, len(referrersInfo)) for _, referrerInfo := range referrersInfo { @@ -444,8 +444,8 @@ func getAnnotationsFromMap(annotationsMap map[string]string) []*gql_generated.An } func ImageManifest2ManifestSummary(ctx context.Context, repo, tag string, descriptor ispec.Descriptor, - skipCVE bool, repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata, referrersInfo []repodb.ReferrerInfo, - cveInfo cveinfo.CveInfo, + skipCVE bool, repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata, + referrersInfo []mTypes.ReferrerInfo, cveInfo cveinfo.CveInfo, ) (*gql_generated.ManifestSummary, map[string]int64, error) { var ( manifestContent ispec.Manifest @@ -567,8 +567,8 @@ func getImageBlobsInfo(manifestDigest string, manifestSize int64, configDigest s return imageSize, imageBlobsMap } -func RepoMeta2ImageSummaries(ctx context.Context, repoMeta repodb.RepoMetadata, - manifestMetaMap map[string]repodb.ManifestMetadata, indexDataMap map[string]repodb.IndexData, +func RepoMeta2ImageSummaries(ctx context.Context, repoMeta mTypes.RepoMetadata, + manifestMetaMap map[string]mTypes.ManifestMetadata, indexDataMap map[string]mTypes.IndexData, skip SkipQGLField, cveInfo cveinfo.CveInfo, ) []*gql_generated.ImageSummary { imageSummaries := make([]*gql_generated.ImageSummary, 0, len(repoMeta.Tags)) @@ -599,8 +599,8 @@ func RepoMeta2ImageSummaries(ctx context.Context, repoMeta repodb.RepoMetadata, return imageSummaries } -func RepoMeta2ExpandedRepoInfo(ctx context.Context, repoMeta repodb.RepoMetadata, - manifestMetaMap map[string]repodb.ManifestMetadata, indexDataMap map[string]repodb.IndexData, +func RepoMeta2ExpandedRepoInfo(ctx context.Context, repoMeta mTypes.RepoMetadata, + manifestMetaMap map[string]mTypes.ManifestMetadata, indexDataMap map[string]mTypes.IndexData, skip SkipQGLField, cveInfo cveinfo.CveInfo, log log.Logger, ) (*gql_generated.RepoSummary, []*gql_generated.ImageSummary) { var ( @@ -629,7 +629,7 @@ func RepoMeta2ExpandedRepoInfo(ctx context.Context, repoMeta repodb.RepoMetadata skip.Vulnerabilities, repoMeta, manifestMetaMap, indexDataMap, cveInfo) if err != nil { log.Error().Str("repository", repoName).Str("reference", tag). - Msg("repodb: erorr while converting descriptor for image") + Msg("metadb: erorr while converting descriptor for image") continue } @@ -771,7 +771,7 @@ func GetPreloadString(prefix, name string) string { return name } -func GetSignaturesInfo(isSigned bool, repoMeta repodb.RepoMetadata, indexDigest godigest.Digest, +func GetSignaturesInfo(isSigned bool, repoMeta mTypes.RepoMetadata, indexDigest godigest.Digest, ) []*gql_generated.SignatureSummary { signaturesInfo := []*gql_generated.SignatureSummary{} diff --git a/pkg/extensions/search/cve/cve.go b/pkg/extensions/search/cve/cve.go index 33464518..5c8cb462 100644 --- a/pkg/extensions/search/cve/cve.go +++ b/pkg/extensions/search/cve/cve.go @@ -13,7 +13,7 @@ import ( cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/extensions/search/cve/trivy" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" ) @@ -39,25 +39,25 @@ type Scanner interface { type BaseCveInfo struct { Log log.Logger Scanner Scanner - RepoDB repodb.RepoDB + MetaDB mTypes.MetaDB } -func NewCVEInfo(storeController storage.StoreController, repoDB repodb.RepoDB, +func NewCVEInfo(storeController storage.StoreController, metaDB mTypes.MetaDB, dbRepository, javaDBRepository string, log log.Logger, ) *BaseCveInfo { - scanner := trivy.NewScanner(storeController, repoDB, dbRepository, javaDBRepository, log) + scanner := trivy.NewScanner(storeController, metaDB, dbRepository, javaDBRepository, log) return &BaseCveInfo{ Log: log, Scanner: scanner, - RepoDB: repoDB, + MetaDB: metaDB, } } func (cveinfo BaseCveInfo) GetImageListForCVE(repo, cveID string) ([]cvemodel.TagInfo, error) { imgList := make([]cvemodel.TagInfo, 0) - repoMeta, err := cveinfo.RepoDB.GetRepoMeta(repo) + repoMeta, err := cveinfo.MetaDB.GetRepoMeta(repo) if err != nil { cveinfo.Log.Error().Err(err).Str("repository", repo).Str("cve-id", cveID). Msg("unable to get list of tags from repo") @@ -104,7 +104,7 @@ func (cveinfo BaseCveInfo) GetImageListForCVE(repo, cveID string) ([]cvemodel.Ta } func (cveinfo BaseCveInfo) GetImageListWithCVEFixed(repo, cveID string) ([]cvemodel.TagInfo, error) { - repoMeta, err := cveinfo.RepoDB.GetRepoMeta(repo) + repoMeta, err := cveinfo.MetaDB.GetRepoMeta(repo) if err != nil { cveinfo.Log.Error().Err(err).Str("repository", repo).Str("cve-id", cveID). Msg("unable to get list of tags from repo") @@ -120,7 +120,7 @@ func (cveinfo BaseCveInfo) GetImageListWithCVEFixed(repo, cveID string) ([]cvemo case ispec.MediaTypeImageManifest: manifestDigestStr := descriptor.Digest - tagInfo, err := getTagInfoForManifest(tag, manifestDigestStr, cveinfo.RepoDB) + tagInfo, err := getTagInfoForManifest(tag, manifestDigestStr, cveinfo.MetaDB) if err != nil { cveinfo.Log.Error().Err(err).Str("repository", repo).Str("tag", tag). Str("cve-id", cveID).Msg("unable to retrieve manifest and config") @@ -136,7 +136,7 @@ func (cveinfo BaseCveInfo) GetImageListWithCVEFixed(repo, cveID string) ([]cvemo case ispec.MediaTypeImageIndex: indexDigestStr := descriptor.Digest - indexContent, err := getIndexContent(cveinfo.RepoDB, indexDigestStr) + indexContent, err := getIndexContent(cveinfo.MetaDB, indexDigestStr) if err != nil { continue } @@ -145,7 +145,7 @@ func (cveinfo BaseCveInfo) GetImageListWithCVEFixed(repo, cveID string) ([]cvemo allManifests := []cvemodel.DescriptorInfo{} for _, manifest := range indexContent.Manifests { - tagInfo, err := getTagInfoForManifest(tag, manifest.Digest.String(), cveinfo.RepoDB) + tagInfo, err := getTagInfoForManifest(tag, manifest.Digest.String(), cveinfo.MetaDB) if err != nil { cveinfo.Log.Error().Err(err).Str("repository", repo).Str("tag", tag). Str("cve-id", cveID).Msg("unable to retrieve manifest and config") @@ -226,8 +226,8 @@ func mostRecentUpdate(allManifests []cvemodel.DescriptorInfo) time.Time { return timeStamp } -func getTagInfoForManifest(tag, manifestDigestStr string, repoDB repodb.RepoDB) (cvemodel.TagInfo, error) { - configContent, manifestDigest, err := getConfigAndDigest(repoDB, manifestDigestStr) +func getTagInfoForManifest(tag, manifestDigestStr string, metaDB mTypes.MetaDB) (cvemodel.TagInfo, error) { + configContent, manifestDigest, err := getConfigAndDigest(metaDB, manifestDigestStr) if err != nil { return cvemodel.TagInfo{}, err } @@ -279,13 +279,13 @@ func (cveinfo *BaseCveInfo) isManifestVulnerable(repo, tag, manifestDigestStr, c return hasCVE } -func getIndexContent(repoDB repodb.RepoDB, indexDigestStr string) (ispec.Index, error) { +func getIndexContent(metaDB mTypes.MetaDB, indexDigestStr string) (ispec.Index, error) { indexDigest, err := godigest.Parse(indexDigestStr) if err != nil { return ispec.Index{}, err } - indexData, err := repoDB.GetIndexData(indexDigest) + indexData, err := metaDB.GetIndexData(indexDigest) if err != nil { return ispec.Index{}, err } @@ -300,13 +300,13 @@ func getIndexContent(repoDB repodb.RepoDB, indexDigestStr string) (ispec.Index, return indexContent, nil } -func getConfigAndDigest(repoDB repodb.RepoDB, manifestDigestStr string) (ispec.Image, godigest.Digest, error) { +func getConfigAndDigest(metaDB mTypes.MetaDB, manifestDigestStr string) (ispec.Image, godigest.Digest, error) { manifestDigest, err := godigest.Parse(manifestDigestStr) if err != nil { return ispec.Image{}, "", err } - manifestData, err := repoDB.GetManifestData(manifestDigest) + manifestData, err := metaDB.GetManifestData(manifestDigest) if err != nil { return ispec.Image{}, "", err } diff --git a/pkg/extensions/search/cve/cve_test.go b/pkg/extensions/search/cve/cve_test.go index 2b2925b1..b2c6aec9 100644 --- a/pkg/extensions/search/cve/cve_test.go +++ b/pkg/extensions/search/cve/cve_test.go @@ -33,9 +33,9 @@ import ( cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/extensions/search/cve/trivy" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/repodb" - boltdb_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" + "zotregistry.io/zot/pkg/meta" + "zotregistry.io/zot/pkg/meta/boltdb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" storageConstants "zotregistry.io/zot/pkg/storage/constants" "zotregistry.io/zot/pkg/storage/local" @@ -319,19 +319,19 @@ func TestImageFormat(t *testing.T) { false, false, log, metrics, nil, nil) storeController := storage.StoreController{DefaultStore: defaultStore} - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: dbDir, } - boltDriver, err := bolt.GetBoltDriver(params) + boltDriver, err := boltdb.GetBoltDriver(params) So(err, ShouldBeNil) - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) + metaDB, err := boltdb.New(boltDriver, log) So(err, ShouldBeNil) - err = repodb.ParseStorage(repoDB, storeController, log) + err = meta.ParseStorage(metaDB, storeController, log) So(err, ShouldBeNil) - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "ghcr.io/project-zot/trivy-db", "", log) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "ghcr.io/project-zot/trivy-db", "", log) isValidImage, err := cveInfo.Scanner.IsImageFormatScannable("zot-test", "") So(err, ShouldNotBeNil) @@ -381,10 +381,10 @@ func TestImageFormat(t *testing.T) { Convey("isIndexScanable", t, func() { log := log.NewLogger("debug", "") - repoDB := &mocks.RepoDBMock{ - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB := &mocks.MetaDBMock{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": { MediaType: ispec.MediaTypeImageIndex, Digest: godigest.FromString("digest").String(), @@ -392,15 +392,15 @@ func TestImageFormat(t *testing.T) { }, }, nil }, - GetIndexDataFn: func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{IndexBlob: []byte(`{}`)}, nil + GetIndexDataFn: func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{IndexBlob: []byte(`{}`)}, nil }, } storeController := storage.StoreController{ DefaultStore: mocks.MockedImageStore{}, } - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "ghcr.io/project-zot/trivy-db", "", log) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "ghcr.io/project-zot/trivy-db", "", log) isScanable, err := cveInfo.Scanner.IsImageFormatScannable("repo", "tag") So(err, ShouldBeNil) @@ -733,16 +733,16 @@ func TestCVESearch(t *testing.T) { func TestCVEStruct(t *testing.T) { Convey("Unit test the CVE struct", t, func() { - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: t.TempDir(), } - boltDriver, err := bolt.GetBoltDriver(params) + boltDriver, err := boltdb.GetBoltDriver(params) So(err, ShouldBeNil) - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log.NewLogger("debug", "")) + metaDB, err := boltdb.New(boltDriver, log.NewLogger("debug", "")) So(err, ShouldBeNil) - // Create repodb data for scannable image with vulnerabilities + // Create metadb data for scannable image with vulnerabilities timeStamp11 := time.Date(2008, 1, 1, 12, 0, 0, 0, time.UTC) configBlob11, err := json.Marshal(ispec.Image{ @@ -766,17 +766,17 @@ func TestCVEStruct(t *testing.T) { }) So(err, ShouldBeNil) - repoMeta11 := repodb.ManifestMetadata{ + repoMeta11 := mTypes.ManifestMetadata{ ManifestBlob: manifestBlob11, ConfigBlob: configBlob11, DownloadCount: 0, - Signatures: repodb.ManifestSignatures{}, + Signatures: mTypes.ManifestSignatures{}, } digest11 := godigest.FromBytes(manifestBlob11) - err = repoDB.SetManifestMeta("repo1", digest11, repoMeta11) + err = metaDB.SetManifestMeta("repo1", digest11, repoMeta11) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo1", "0.1.0", digest11, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "0.1.0", digest11, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) timeStamp12 := time.Date(2009, 1, 1, 12, 0, 0, 0, time.UTC) @@ -802,17 +802,17 @@ func TestCVEStruct(t *testing.T) { }) So(err, ShouldBeNil) - repoMeta12 := repodb.ManifestMetadata{ + repoMeta12 := mTypes.ManifestMetadata{ ManifestBlob: manifestBlob12, ConfigBlob: configBlob12, DownloadCount: 0, - Signatures: repodb.ManifestSignatures{}, + Signatures: mTypes.ManifestSignatures{}, } digest12 := godigest.FromBytes(manifestBlob12) - err = repoDB.SetManifestMeta("repo1", digest12, repoMeta12) + err = metaDB.SetManifestMeta("repo1", digest12, repoMeta12) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo1", "1.0.0", digest12, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "1.0.0", digest12, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) timeStamp13 := time.Date(2010, 1, 1, 12, 0, 0, 0, time.UTC) @@ -838,15 +838,15 @@ func TestCVEStruct(t *testing.T) { }) So(err, ShouldBeNil) - repoMeta13 := repodb.ManifestMetadata{ + repoMeta13 := mTypes.ManifestMetadata{ ManifestBlob: manifestBlob13, ConfigBlob: configBlob13, } digest13 := godigest.FromBytes(manifestBlob13) - err = repoDB.SetManifestMeta("repo1", digest13, repoMeta13) + err = metaDB.SetManifestMeta("repo1", digest13, repoMeta13) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo1", "1.1.0", digest13, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "1.1.0", digest13, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) timeStamp14 := time.Date(2011, 1, 1, 12, 0, 0, 0, time.UTC) @@ -872,18 +872,18 @@ func TestCVEStruct(t *testing.T) { }) So(err, ShouldBeNil) - repoMeta14 := repodb.ManifestMetadata{ + repoMeta14 := mTypes.ManifestMetadata{ ManifestBlob: manifestBlob14, ConfigBlob: configBlob14, } digest14 := godigest.FromBytes(manifestBlob14) - err = repoDB.SetManifestMeta("repo1", digest14, repoMeta14) + err = metaDB.SetManifestMeta("repo1", digest14, repoMeta14) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo1", "1.0.1", digest14, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "1.0.1", digest14, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - // Create repodb data for scannable image with no vulnerabilities + // Create metadb data for scannable image with no vulnerabilities timeStamp61 := time.Date(2011, 1, 1, 12, 0, 0, 0, time.UTC) configBlob61, err := json.Marshal(ispec.Image{ @@ -907,18 +907,18 @@ func TestCVEStruct(t *testing.T) { }) So(err, ShouldBeNil) - repoMeta61 := repodb.ManifestMetadata{ + repoMeta61 := mTypes.ManifestMetadata{ ManifestBlob: manifestBlob61, ConfigBlob: configBlob61, } digest61 := godigest.FromBytes(manifestBlob61) - err = repoDB.SetManifestMeta("repo6", digest61, repoMeta61) + err = metaDB.SetManifestMeta("repo6", digest61, repoMeta61) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo6", "1.0.0", digest61, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo6", "1.0.0", digest61, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - // Create repodb data for image not supporting scanning + // Create metadb data for image not supporting scanning timeStamp21 := time.Date(2009, 1, 1, 12, 0, 0, 0, time.UTC) configBlob21, err := json.Marshal(ispec.Image{ @@ -942,46 +942,46 @@ func TestCVEStruct(t *testing.T) { }) So(err, ShouldBeNil) - repoMeta21 := repodb.ManifestMetadata{ + repoMeta21 := mTypes.ManifestMetadata{ ManifestBlob: manifestBlob21, ConfigBlob: configBlob21, } digest21 := godigest.FromBytes(manifestBlob21) - err = repoDB.SetManifestMeta("repo2", digest21, repoMeta21) + err = metaDB.SetManifestMeta("repo2", digest21, repoMeta21) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo2", "1.0.0", digest21, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo2", "1.0.0", digest21, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - // Create repodb data for invalid images/negative tests + // Create metadb data for invalid images/negative tests manifestBlob31 := []byte("invalid manifest blob") So(err, ShouldBeNil) - repoMeta31 := repodb.ManifestMetadata{ + repoMeta31 := mTypes.ManifestMetadata{ ManifestBlob: manifestBlob31, } digest31 := godigest.FromBytes(manifestBlob31) - err = repoDB.SetManifestMeta("repo3", digest31, repoMeta31) + err = metaDB.SetManifestMeta("repo3", digest31, repoMeta31) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo3", "invalid-manifest", digest31, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo3", "invalid-manifest", digest31, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) configBlob41 := []byte("invalid config blob") So(err, ShouldBeNil) - repoMeta41 := repodb.ManifestMetadata{ + repoMeta41 := mTypes.ManifestMetadata{ ConfigBlob: configBlob41, } digest41 := godigest.FromString("abc7") - err = repoDB.SetManifestMeta("repo4", digest41, repoMeta41) + err = metaDB.SetManifestMeta("repo4", digest41, repoMeta41) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo4", "invalid-config", digest41, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo4", "invalid-config", digest41, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) digest51 := godigest.FromString("abc8") - err = repoDB.SetRepoReference("repo5", "nonexitent-manifest", digest51, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo5", "nonexitent-manifest", digest51, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) // ------ Multiarch image @@ -990,7 +990,7 @@ func TestCVEStruct(t *testing.T) { manifestContent1Blob, err := json.Marshal(manifestContent1) So(err, ShouldBeNil) diestManifestFromIndex1 := godigest.FromBytes(manifestContent1Blob) - err = repoDB.SetManifestData(diestManifestFromIndex1, repodb.ManifestData{ + err = metaDB.SetManifestData(diestManifestFromIndex1, mTypes.ManifestData{ ManifestBlob: manifestContent1Blob, ConfigBlob: []byte("{}"), }) @@ -1001,7 +1001,7 @@ func TestCVEStruct(t *testing.T) { manifestContent2Blob, err := json.Marshal(manifestContent2) So(err, ShouldBeNil) diestManifestFromIndex2 := godigest.FromBytes(manifestContent2Blob) - err = repoDB.SetManifestData(diestManifestFromIndex1, repodb.ManifestData{ + err = metaDB.SetManifestData(diestManifestFromIndex1, mTypes.ManifestData{ ManifestBlob: manifestContent2Blob, ConfigBlob: []byte("{}"), }) @@ -1013,15 +1013,15 @@ func TestCVEStruct(t *testing.T) { So(err, ShouldBeNil) indexDigest := godigest.FromBytes(indexBlob) - err = repoDB.SetIndexData(indexDigest, repodb.IndexData{ + err = metaDB.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repoIndex", "tagIndex", indexDigest, ispec.MediaTypeImageIndex) + err = metaDB.SetRepoReference("repoIndex", "tagIndex", indexDigest, ispec.MediaTypeImageIndex) So(err, ShouldBeNil) - // RepoDB loaded with initial data, mock the scanner + // MetaDB loaded with initial data, mock the scanner severities := map[string]int{ "UNKNOWN": 0, "LOW": 1, @@ -1127,7 +1127,7 @@ func TestCVEStruct(t *testing.T) { // Almost same logic compared to actual Trivy specific implementation imageDir, inputTag := repo, reference - repoMeta, err := repoDB.GetRepoMeta(imageDir) + repoMeta, err := metaDB.GetRepoMeta(imageDir) if err != nil { return false, err } @@ -1150,7 +1150,7 @@ func TestCVEStruct(t *testing.T) { return false, err } - manifestData, err := repoDB.GetManifestData(manifestDigest) + manifestData, err := metaDB.GetManifestData(manifestDigest) if err != nil { return false, err } @@ -1187,7 +1187,7 @@ func TestCVEStruct(t *testing.T) { } log := log.NewLogger("debug", "") - cveInfo := cveinfo.BaseCveInfo{Log: log, Scanner: scanner, RepoDB: repoDB} + cveInfo := cveinfo.BaseCveInfo{Log: log, Scanner: scanner, MetaDB: metaDB} t.Log("Test GetCVESummaryForImage") @@ -1420,7 +1420,7 @@ func TestCVEStruct(t *testing.T) { }, } - cveInfo = cveinfo.BaseCveInfo{Log: log, Scanner: faultyScanner, RepoDB: repoDB} + cveInfo = cveinfo.BaseCveInfo{Log: log, Scanner: faultyScanner, MetaDB: metaDB} cveSummary, err = cveInfo.GetCVESummaryForImage("repo1", "0.1.0") So(err, ShouldNotBeNil) @@ -1445,7 +1445,7 @@ func TestCVEStruct(t *testing.T) { So(err, ShouldBeNil) So(len(tagList), ShouldEqual, 0) - cveInfo = cveinfo.BaseCveInfo{Log: log, Scanner: scanner, RepoDB: repoDB} + cveInfo = cveinfo.BaseCveInfo{Log: log, Scanner: scanner, MetaDB: metaDB} tagList, err = cveInfo.GetImageListForCVE("repoIndex", "CVE1") So(err, ShouldBeNil) @@ -1455,7 +1455,7 @@ func TestCVEStruct(t *testing.T) { IsImageFormatScannableFn: func(repo, reference string) (bool, error) { return false, nil }, - }, RepoDB: repoDB} + }, MetaDB: metaDB} _, err = cveInfo.GetImageListForCVE("repoIndex", "CVE1") So(err, ShouldBeNil) @@ -1467,7 +1467,7 @@ func TestCVEStruct(t *testing.T) { ScanImageFn: func(image string) (map[string]cvemodel.CVE, error) { return nil, zerr.ErrTypeAssertionFailed }, - }, RepoDB: repoDB} + }, MetaDB: metaDB} _, err = cveInfo.GetImageListForCVE("repoIndex", "CVE1") So(err, ShouldBeNil) @@ -1598,12 +1598,12 @@ func TestFixedTagsWithIndex(t *testing.T) { err = UploadImage(simpleVulnImg, baseURL, "repo") So(err, ShouldBeNil) - scanner := trivy.NewScanner(ctlr.StoreController, ctlr.RepoDB, "ghcr.io/project-zot/trivy-db", "", ctlr.Log) + scanner := trivy.NewScanner(ctlr.StoreController, ctlr.MetaDB, "ghcr.io/project-zot/trivy-db", "", ctlr.Log) err = scanner.UpdateDB() So(err, ShouldBeNil) - cveInfo := cveinfo.NewCVEInfo(ctlr.StoreController, ctlr.RepoDB, "ghcr.io/project-zot/trivy-db", "", ctlr.Log) + cveInfo := cveinfo.NewCVEInfo(ctlr.StoreController, ctlr.MetaDB, "ghcr.io/project-zot/trivy-db", "", ctlr.Log) tagsInfo, err := cveInfo.GetImageListWithCVEFixed("repo", Vulnerability1ID) So(err, ShouldBeNil) @@ -1647,13 +1647,13 @@ func TestImageListWithCVEFixedErrors(t *testing.T) { storeController := storage.StoreController{} storeController.DefaultStore = mocks.MockedImageStore{} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} log := log.NewLogger("debug", "") Convey("getIndexContent errors", func() { - repoDB.GetRepoMetaFn = func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB.GetRepoMetaFn = func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": { Digest: indexDigest.String(), MediaType: ispec.MediaTypeImageIndex, @@ -1661,20 +1661,20 @@ func TestImageListWithCVEFixedErrors(t *testing.T) { }, }, nil } - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{}, zerr.ErrIndexDataNotFount + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{}, zerr.ErrIndexDataNotFount } - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "", "", log) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "", "", log) _, err := cveInfo.GetImageListWithCVEFixed("repo", Vulnerability1ID) So(err, ShouldBeNil) }) Convey("getIndexContent bad indexDigest", func() { - repoDB.GetRepoMetaFn = func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB.GetRepoMetaFn = func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": { Digest: "bad digest", MediaType: ispec.MediaTypeImageIndex, @@ -1682,20 +1682,20 @@ func TestImageListWithCVEFixedErrors(t *testing.T) { }, }, nil } - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{}, zerr.ErrIndexDataNotFount + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{}, zerr.ErrIndexDataNotFount } - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "", "", log) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "", "", log) _, err := cveInfo.GetImageListWithCVEFixed("repo", Vulnerability1ID) So(err, ShouldBeNil) }) Convey("getIndexContent bad index content", func() { - repoDB.GetRepoMetaFn = func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB.GetRepoMetaFn = func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": { Digest: indexDigest.String(), MediaType: ispec.MediaTypeImageIndex, @@ -1703,20 +1703,20 @@ func TestImageListWithCVEFixedErrors(t *testing.T) { }, }, nil } - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{IndexBlob: []byte(`bad index`)}, nil + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{IndexBlob: []byte(`bad index`)}, nil } - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "", "", log) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "", "", log) _, err := cveInfo.GetImageListWithCVEFixed("repo", Vulnerability1ID) So(err, ShouldBeNil) }) Convey("getTagInfoForManifest bad manifest digest", func() { - repoDB.GetRepoMetaFn = func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB.GetRepoMetaFn = func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": { Digest: "bad digest", MediaType: ispec.MediaTypeImageManifest, @@ -1725,16 +1725,16 @@ func TestImageListWithCVEFixedErrors(t *testing.T) { }, nil } - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "", "", log) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "", "", log) _, err := cveInfo.GetImageListWithCVEFixed("repo", Vulnerability1ID) So(err, ShouldBeNil) }) Convey("getTagInfoForManifest fails for index", func() { - repoDB.GetRepoMetaFn = func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB.GetRepoMetaFn = func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": { Digest: indexDigest.String(), MediaType: ispec.MediaTypeImageIndex, @@ -1742,8 +1742,8 @@ func TestImageListWithCVEFixedErrors(t *testing.T) { }, }, nil } - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{ + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{ IndexBlob: []byte(fmt.Sprintf(`{ "manifests": [ { @@ -1753,11 +1753,11 @@ func TestImageListWithCVEFixedErrors(t *testing.T) { ]}`, manifestDigest)), }, nil } - repoDB.GetManifestDataFn = func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{}, zerr.ErrManifestDataNotFound + metaDB.GetManifestDataFn = func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{}, zerr.ErrManifestDataNotFound } - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "", "", log) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "", "", log) tagsInfo, err := cveInfo.GetImageListWithCVEFixed("repo", Vulnerability1ID) So(err, ShouldBeNil) @@ -1765,9 +1765,9 @@ func TestImageListWithCVEFixedErrors(t *testing.T) { }) Convey("media type not supported", func() { - repoDB.GetRepoMetaFn = func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB.GetRepoMetaFn = func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": { Digest: godigest.FromString("media type").String(), MediaType: "bad media type", @@ -1776,7 +1776,7 @@ func TestImageListWithCVEFixedErrors(t *testing.T) { }, nil } - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "", "", log) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "", "", log) tagsInfo, err := cveInfo.GetImageListWithCVEFixed("repo", Vulnerability1ID) So(err, ShouldBeNil) @@ -1790,11 +1790,11 @@ func TestGetCVESummaryForImageMediaErrors(t *testing.T) { storeController := storage.StoreController{} storeController.DefaultStore = mocks.MockedImageStore{} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} log := log.NewLogger("debug", "") Convey("IsImageMediaScannable returns false", func() { - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "", "", log) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "", "", log) cveInfo.Scanner = mocks.CveScannerMock{ IsImageMediaScannableFn: func(repo, digest, mediaType string) (bool, error) { return false, zerr.ErrScanNotSupported @@ -1806,7 +1806,7 @@ func TestGetCVESummaryForImageMediaErrors(t *testing.T) { }) Convey("Scan fails", func() { - cveInfo := cveinfo.NewCVEInfo(storeController, repoDB, "", "", log) + cveInfo := cveinfo.NewCVEInfo(storeController, metaDB, "", "", log) cveInfo.Scanner = mocks.CveScannerMock{ IsImageMediaScannableFn: func(repo, digest, mediaType string) (bool, error) { return true, nil diff --git a/pkg/extensions/search/cve/pagination_test.go b/pkg/extensions/search/cve/pagination_test.go index 1c7cedb7..7cadd723 100644 --- a/pkg/extensions/search/cve/pagination_test.go +++ b/pkg/extensions/search/cve/pagination_test.go @@ -17,24 +17,23 @@ import ( cveinfo "zotregistry.io/zot/pkg/extensions/search/cve" cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/repodb" - boltdb_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" + "zotregistry.io/zot/pkg/meta/boltdb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/test/mocks" ) func TestCVEPagination(t *testing.T) { Convey("CVE Pagination", t, func() { - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: t.TempDir(), } - boltDriver, err := bolt.GetBoltDriver(params) + boltDriver, err := boltdb.GetBoltDriver(params) So(err, ShouldBeNil) - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log.NewLogger("debug", "")) + metaDB, err := boltdb.New(boltDriver, log.NewLogger("debug", "")) So(err, ShouldBeNil) - // Create repodb data for scannable image with vulnerabilities + // Create metadb data for scannable image with vulnerabilities timeStamp11 := time.Date(2008, 1, 1, 12, 0, 0, 0, time.UTC) configBlob11, err := json.Marshal(ispec.Image{ @@ -58,15 +57,15 @@ func TestCVEPagination(t *testing.T) { }) So(err, ShouldBeNil) - repoMeta11 := repodb.ManifestMetadata{ + repoMeta11 := mTypes.ManifestMetadata{ ManifestBlob: manifestBlob11, ConfigBlob: configBlob11, } digest11 := godigest.FromBytes(manifestBlob11) - err = repoDB.SetManifestMeta("repo1", digest11, repoMeta11) + err = metaDB.SetManifestMeta("repo1", digest11, repoMeta11) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo1", "0.1.0", digest11, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "0.1.0", digest11, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) timeStamp12 := time.Date(2009, 1, 1, 12, 0, 0, 0, time.UTC) @@ -92,18 +91,18 @@ func TestCVEPagination(t *testing.T) { }) So(err, ShouldBeNil) - repoMeta12 := repodb.ManifestMetadata{ + repoMeta12 := mTypes.ManifestMetadata{ ManifestBlob: manifestBlob12, ConfigBlob: configBlob12, } digest12 := godigest.FromBytes(manifestBlob12) - err = repoDB.SetManifestMeta("repo1", digest12, repoMeta12) + err = metaDB.SetManifestMeta("repo1", digest12, repoMeta12) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo1", "1.0.0", digest12, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "1.0.0", digest12, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - // RepoDB loaded with initial data, mock the scanner + // MetaDB loaded with initial data, mock the scanner severityToInt := map[string]int{ "UNKNOWN": 0, "LOW": 1, @@ -153,7 +152,7 @@ func TestCVEPagination(t *testing.T) { } log := log.NewLogger("debug", "") - cveInfo := cveinfo.BaseCveInfo{Log: log, Scanner: scanner, RepoDB: repoDB} + cveInfo := cveinfo.BaseCveInfo{Log: log, Scanner: scanner, MetaDB: metaDB} Convey("create new paginator errors", func() { paginator, err := cveinfo.NewCvePageFinder(-1, 10, cveinfo.AlphabeticAsc, cveInfo) diff --git a/pkg/extensions/search/cve/trivy/scanner.go b/pkg/extensions/search/cve/trivy/scanner.go index 1e006e0f..0326cf61 100644 --- a/pkg/extensions/search/cve/trivy/scanner.go +++ b/pkg/extensions/search/cve/trivy/scanner.go @@ -25,7 +25,8 @@ import ( zcommon "zotregistry.io/zot/pkg/common" cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mcommon "zotregistry.io/zot/pkg/meta/common" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" ) @@ -70,7 +71,7 @@ type cveTrivyController struct { } type Scanner struct { - repoDB repodb.RepoDB + metaDB mTypes.MetaDB cveController cveTrivyController storeController storage.StoreController log log.Logger @@ -81,7 +82,7 @@ type Scanner struct { } func NewScanner(storeController storage.StoreController, - repoDB repodb.RepoDB, dbRepository, javaDBRepository string, log log.Logger, + metaDB mTypes.MetaDB, dbRepository, javaDBRepository string, log log.Logger, ) *Scanner { cveController := cveTrivyController{} @@ -113,7 +114,7 @@ func NewScanner(storeController storage.StoreController, return &Scanner{ log: log, - repoDB: repoDB, + metaDB: metaDB, cveController: cveController, storeController: storeController, dbLock: &sync.Mutex{}, @@ -189,7 +190,7 @@ func (scanner Scanner) IsImageFormatScannable(repo, ref string) (bool, error) { ) if zcommon.IsTag(ref) { - imgDescriptor, err := repodb.GetImageDescriptor(scanner.repoDB, repo, ref) + imgDescriptor, err := mcommon.GetImageDescriptor(scanner.metaDB, repo, ref) if err != nil { return false, err } @@ -199,7 +200,7 @@ func (scanner Scanner) IsImageFormatScannable(repo, ref string) (bool, error) { } else { var found bool - found, mediaType = repodb.FindMediaTypeForDigest(scanner.repoDB, godigest.Digest(ref)) + found, mediaType = mcommon.FindMediaTypeForDigest(scanner.metaDB, godigest.Digest(ref)) if !found { return false, zerr.ErrManifestNotFound } @@ -236,7 +237,7 @@ func (scanner Scanner) isManifestScanable(digestStr string) (bool, error) { return true, nil } - manifestData, err := scanner.repoDB.GetManifestData(godigest.Digest(digestStr)) + manifestData, err := scanner.metaDB.GetManifestData(godigest.Digest(digestStr)) if err != nil { return false, err } @@ -270,7 +271,7 @@ func (scanner Scanner) isIndexScanable(digestStr string) (bool, error) { return true, nil } - indexData, err := scanner.repoDB.GetIndexData(godigest.Digest(digestStr)) + indexData, err := scanner.metaDB.GetIndexData(godigest.Digest(digestStr)) if err != nil { return false, err } @@ -313,7 +314,7 @@ func (scanner Scanner) ScanImage(image string) (map[string]cvemodel.CVE, error) digest = ref if isTag { - imgDescriptor, err := repodb.GetImageDescriptor(scanner.repoDB, repo, ref) + imgDescriptor, err := mcommon.GetImageDescriptor(scanner.metaDB, repo, ref) if err != nil { return map[string]cvemodel.CVE{}, err } @@ -323,7 +324,7 @@ func (scanner Scanner) ScanImage(image string) (map[string]cvemodel.CVE, error) } else { var found bool - found, mediaType = repodb.FindMediaTypeForDigest(scanner.repoDB, godigest.Digest(ref)) + found, mediaType = mcommon.FindMediaTypeForDigest(scanner.metaDB, godigest.Digest(ref)) if !found { return map[string]cvemodel.CVE{}, zerr.ErrManifestNotFound } @@ -427,7 +428,7 @@ func (scanner Scanner) scanManifest(repo, digest string) (map[string]cvemodel.CV } func (scanner Scanner) scanIndex(repo, digest string) (map[string]cvemodel.CVE, error) { - indexData, err := scanner.repoDB.GetIndexData(godigest.Digest(digest)) + indexData, err := scanner.metaDB.GetIndexData(godigest.Digest(digest)) if err != nil { return map[string]cvemodel.CVE{}, err } diff --git a/pkg/extensions/search/cve/trivy/scanner_internal_test.go b/pkg/extensions/search/cve/trivy/scanner_internal_test.go index 56fe8580..71152011 100644 --- a/pkg/extensions/search/cve/trivy/scanner_internal_test.go +++ b/pkg/extensions/search/cve/trivy/scanner_internal_test.go @@ -20,9 +20,9 @@ import ( "zotregistry.io/zot/pkg/extensions/monitoring" "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/repodb" - boltdb_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" + "zotregistry.io/zot/pkg/meta" + "zotregistry.io/zot/pkg/meta/boltdb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" storageConstants "zotregistry.io/zot/pkg/storage/constants" "zotregistry.io/zot/pkg/storage/local" @@ -93,16 +93,16 @@ func TestMultipleStoragePath(t *testing.T) { storeController.SubStore = subStore - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: firstRootDir, } - boltDriver, err := bolt.GetBoltDriver(params) + boltDriver, err := boltdb.GetBoltDriver(params) So(err, ShouldBeNil) - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) + metaDB, err := boltdb.New(boltDriver, log) So(err, ShouldBeNil) - scanner := NewScanner(storeController, repoDB, "ghcr.io/project-zot/trivy-db", "", log) + scanner := NewScanner(storeController, metaDB, "ghcr.io/project-zot/trivy-db", "", log) So(scanner.storeController.DefaultStore, ShouldNotBeNil) So(scanner.storeController.SubStore, ShouldNotBeNil) @@ -124,7 +124,7 @@ func TestMultipleStoragePath(t *testing.T) { generateTestImage(storeController, img1) generateTestImage(storeController, img2) - err = repodb.ParseStorage(repoDB, storeController, log) + err = meta.ParseStorage(metaDB, storeController, log) So(err, ShouldBeNil) // Try to scan without the DB being downloaded @@ -192,23 +192,23 @@ func TestTrivyLibraryErrors(t *testing.T) { storeController := storage.StoreController{} storeController.DefaultStore = store - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: rootDir, } - boltDriver, err := bolt.GetBoltDriver(params) + boltDriver, err := boltdb.GetBoltDriver(params) So(err, ShouldBeNil) - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) + metaDB, err := boltdb.New(boltDriver, log) So(err, ShouldBeNil) - err = repodb.ParseStorage(repoDB, storeController, log) + err = meta.ParseStorage(metaDB, storeController, log) So(err, ShouldBeNil) img := "zot-test:0.0.1" //nolint:goconst // Download DB fails for missing DB url - scanner := NewScanner(storeController, repoDB, "", "", log) + scanner := NewScanner(storeController, metaDB, "", "", log) err = scanner.UpdateDB() So(err, ShouldNotBeNil) @@ -220,7 +220,7 @@ func TestTrivyLibraryErrors(t *testing.T) { So(err, ShouldWrap, zerr.ErrCVEDBNotFound) // Download DB fails for invalid Java DB - scanner = NewScanner(storeController, repoDB, "ghcr.io/project-zot/trivy-db", + scanner = NewScanner(storeController, metaDB, "ghcr.io/project-zot/trivy-db", "ghcr.io/project-zot/trivy-not-db", log) err = scanner.UpdateDB() @@ -228,7 +228,7 @@ func TestTrivyLibraryErrors(t *testing.T) { // Download DB passes for valid Trivy DB url, and missing Trivy Java DB url // Download DB is necessary since DB download on scan is disabled - scanner = NewScanner(storeController, repoDB, "ghcr.io/project-zot/trivy-db", "", log) + scanner = NewScanner(storeController, metaDB, "ghcr.io/project-zot/trivy-db", "", log) err = scanner.UpdateDB() So(err, ShouldBeNil) @@ -261,18 +261,18 @@ func TestTrivyLibraryErrors(t *testing.T) { func TestImageScannable(t *testing.T) { rootDir := t.TempDir() - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: rootDir, } - boltDriver, err := bolt.GetBoltDriver(params) + boltDriver, err := boltdb.GetBoltDriver(params) if err != nil { panic(err) } log := log.NewLogger("debug", "") - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) + metaDB, err := boltdb.New(boltDriver, log) if err != nil { panic(err) } @@ -281,12 +281,12 @@ func TestImageScannable(t *testing.T) { // - Error: RepoMeta not found in DB // - Error: Tag not found in DB // - Error: Digest in RepoMeta is invalid - // - Error: ManifestData not found in repodb + // - Error: ManifestData not found in metadb // - Error: ManifestData cannot be unmarshalled // - Error: ManifestData contains unscannable layer type // - Valid Scannable image - // Create repodb data for scannable image + // Create metadb data for scannable image timeStamp := time.Date(2008, 1, 1, 12, 0, 0, 0, time.UTC) validConfigBlob, err := json.Marshal(ispec.Image{ @@ -314,24 +314,24 @@ func TestImageScannable(t *testing.T) { panic(err) } - validRepoMeta := repodb.ManifestData{ + validRepoMeta := mTypes.ManifestData{ ManifestBlob: validManifestBlob, ConfigBlob: validConfigBlob, } digestValidManifest := godigest.FromBytes(validManifestBlob) - err = repoDB.SetManifestData(digestValidManifest, validRepoMeta) + err = metaDB.SetManifestData(digestValidManifest, validRepoMeta) if err != nil { panic(err) } - err = repoDB.SetRepoReference("repo1", "valid", digestValidManifest, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "valid", digestValidManifest, ispec.MediaTypeImageManifest) if err != nil { panic(err) } - // Create RepoDB data for manifest with unscannable layers + // Create MetaDB data for manifest with unscannable layers manifestBlobUnscannableLayer, err := json.Marshal(ispec.Manifest{ Config: ispec.Descriptor{ MediaType: ispec.MediaTypeImageConfig, @@ -350,39 +350,39 @@ func TestImageScannable(t *testing.T) { panic(err) } - repoMetaUnscannableLayer := repodb.ManifestData{ + repoMetaUnscannableLayer := mTypes.ManifestData{ ManifestBlob: manifestBlobUnscannableLayer, ConfigBlob: validConfigBlob, } digestManifestUnscannableLayer := godigest.FromBytes(manifestBlobUnscannableLayer) - err = repoDB.SetManifestData(digestManifestUnscannableLayer, repoMetaUnscannableLayer) + err = metaDB.SetManifestData(digestManifestUnscannableLayer, repoMetaUnscannableLayer) if err != nil { panic(err) } - err = repoDB.SetRepoReference("repo1", "unscannable-layer", digestManifestUnscannableLayer, + err = metaDB.SetRepoReference("repo1", "unscannable-layer", digestManifestUnscannableLayer, ispec.MediaTypeImageManifest) if err != nil { panic(err) } - // Create RepoDB data for unmarshable manifest + // Create MetaDB data for unmarshable manifest unmarshableManifestBlob := []byte("Some string") - repoMetaUnmarshable := repodb.ManifestData{ + repoMetaUnmarshable := mTypes.ManifestData{ ManifestBlob: unmarshableManifestBlob, ConfigBlob: validConfigBlob, } digestUnmarshableManifest := godigest.FromBytes(unmarshableManifestBlob) - err = repoDB.SetManifestData(digestUnmarshableManifest, repoMetaUnmarshable) + err = metaDB.SetManifestData(digestUnmarshableManifest, repoMetaUnmarshable) if err != nil { panic(err) } - err = repoDB.SetRepoReference("repo1", "unmarshable", digestUnmarshableManifest, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "unmarshable", digestUnmarshableManifest, ispec.MediaTypeImageManifest) if err != nil { panic(err) } @@ -390,13 +390,13 @@ func TestImageScannable(t *testing.T) { // Manifest meta cannot be found digestMissingManifest := godigest.FromBytes([]byte("Some other string")) - err = repoDB.SetRepoReference("repo1", "missing", digestMissingManifest, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "missing", digestMissingManifest, ispec.MediaTypeImageManifest) if err != nil { panic(err) } // RepoMeta contains invalid digest - err = repoDB.SetRepoReference("repo1", "invalid-digest", "invalid", ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo1", "invalid-digest", "invalid", ispec.MediaTypeImageManifest) if err != nil { panic(err) } @@ -409,7 +409,7 @@ func TestImageScannable(t *testing.T) { storeController := storage.StoreController{} storeController.DefaultStore = store - scanner := NewScanner(storeController, repoDB, "ghcr.io/project-zot/trivy-db", + scanner := NewScanner(storeController, metaDB, "ghcr.io/project-zot/trivy-db", "ghcr.io/aquasecurity/trivy-java-db", log) Convey("Valid image should be scannable", t, func() { @@ -475,20 +475,20 @@ func TestDefaultTrivyDBUrl(t *testing.T) { storeController := storage.StoreController{} storeController.DefaultStore = store - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: rootDir, } - boltDriver, err := bolt.GetBoltDriver(params) + boltDriver, err := boltdb.GetBoltDriver(params) So(err, ShouldBeNil) - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) + metaDB, err := boltdb.New(boltDriver, log) So(err, ShouldBeNil) - err = repodb.ParseStorage(repoDB, storeController, log) + err = meta.ParseStorage(metaDB, storeController, log) So(err, ShouldBeNil) - scanner := NewScanner(storeController, repoDB, "ghcr.io/aquasecurity/trivy-db", + scanner := NewScanner(storeController, metaDB, "ghcr.io/aquasecurity/trivy-db", "ghcr.io/aquasecurity/trivy-java-db", log) // Download DB since DB download on scan is disabled @@ -516,11 +516,11 @@ func TestIsIndexScanable(t *testing.T) { storeController := storage.StoreController{} storeController.DefaultStore = &local.ImageStoreLocal{} - repoDB := &boltdb_wrapper.DBWrapper{} + metaDB := &boltdb.BoltDB{} log := log.NewLogger("debug", "") Convey("Find index in cache", func() { - scanner := NewScanner(storeController, repoDB, "", "", log) + scanner := NewScanner(storeController, metaDB, "", "", log) scanner.cache.Add("digest", make(map[string]model.CVE)) @@ -536,28 +536,28 @@ func TestScanIndexErrors(t *testing.T) { storeController := storage.StoreController{} storeController.DefaultStore = mocks.MockedImageStore{} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} log := log.NewLogger("debug", "") Convey("GetIndexData fails", func() { - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{}, godigest.ErrDigestUnsupported + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{}, godigest.ErrDigestUnsupported } - scanner := NewScanner(storeController, repoDB, "", "", log) + scanner := NewScanner(storeController, metaDB, "", "", log) _, err := scanner.scanIndex("repo", "digest") So(err, ShouldNotBeNil) }) Convey("Bad Index Blob, Unamrshal fails", func() { - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{ + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{ IndexBlob: []byte(`bad-blob`), }, nil } - scanner := NewScanner(storeController, repoDB, "", "", log) + scanner := NewScanner(storeController, metaDB, "", "", log) _, err := scanner.scanIndex("repo", "digest") So(err, ShouldNotBeNil) @@ -570,24 +570,24 @@ func TestIsIndexScanableErrors(t *testing.T) { storeController := storage.StoreController{} storeController.DefaultStore = mocks.MockedImageStore{} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} log := log.NewLogger("debug", "") Convey("GetIndexData errors", func() { - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{}, zerr.ErrManifestDataNotFound + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{}, zerr.ErrManifestDataNotFound } - scanner := NewScanner(storeController, repoDB, "", "", log) + scanner := NewScanner(storeController, metaDB, "", "", log) _, err := scanner.isIndexScanable("digest") So(err, ShouldNotBeNil) }) Convey("bad index data, can't unmarshal", func() { - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{IndexBlob: []byte(`bad`)}, nil + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{IndexBlob: []byte(`bad`)}, nil } - scanner := NewScanner(storeController, repoDB, "", "", log) + scanner := NewScanner(storeController, metaDB, "", "", log) ok, err := scanner.isIndexScanable("digest") So(err, ShouldNotBeNil) @@ -595,8 +595,8 @@ func TestIsIndexScanableErrors(t *testing.T) { }) Convey("is Manifest Scanable errors", func() { - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{IndexBlob: []byte(`{ + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{IndexBlob: []byte(`{ "manifests": [{ "digest": "digest2" }, @@ -606,19 +606,19 @@ func TestIsIndexScanableErrors(t *testing.T) { ] }`)}, nil } - repoDB.GetManifestDataFn = func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { + metaDB.GetManifestDataFn = func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { switch manifestDigest { case "digest1": - return repodb.ManifestData{ + return mTypes.ManifestData{ ManifestBlob: []byte("{}"), }, nil case "digest2": - return repodb.ManifestData{}, zerr.ErrBadBlob + return mTypes.ManifestData{}, zerr.ErrBadBlob } - return repodb.ManifestData{}, nil + return mTypes.ManifestData{}, nil } - scanner := NewScanner(storeController, repoDB, "", "", log) + scanner := NewScanner(storeController, metaDB, "", "", log) ok, err := scanner.isIndexScanable("digest") So(err, ShouldBeNil) @@ -626,18 +626,18 @@ func TestIsIndexScanableErrors(t *testing.T) { }) Convey("is Manifest Scanable returns false because no manifest is scanable", func() { - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{IndexBlob: []byte(`{ + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{IndexBlob: []byte(`{ "manifests": [{ "digest": "digest2" } ] }`)}, nil } - repoDB.GetManifestDataFn = func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{}, zerr.ErrBadBlob + metaDB.GetManifestDataFn = func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{}, zerr.ErrBadBlob } - scanner := NewScanner(storeController, repoDB, "", "", log) + scanner := NewScanner(storeController, metaDB, "", "", log) ok, err := scanner.isIndexScanable("digest") So(err, ShouldBeNil) diff --git a/pkg/extensions/search/cve/trivy/scanner_test.go b/pkg/extensions/search/cve/trivy/scanner_test.go index b9d479e8..8da74e70 100644 --- a/pkg/extensions/search/cve/trivy/scanner_test.go +++ b/pkg/extensions/search/cve/trivy/scanner_test.go @@ -15,9 +15,9 @@ import ( "zotregistry.io/zot/pkg/extensions/monitoring" "zotregistry.io/zot/pkg/extensions/search/cve/trivy" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/repodb" - boltdb_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" + "zotregistry.io/zot/pkg/meta" + "zotregistry.io/zot/pkg/meta/boltdb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" "zotregistry.io/zot/pkg/storage/local" "zotregistry.io/zot/pkg/test" @@ -64,7 +64,7 @@ func TestScanningByDigest(t *testing.T) { So(err, ShouldBeNil) // scan - scanner := trivy.NewScanner(ctlr.StoreController, ctlr.RepoDB, "ghcr.io/project-zot/trivy-db", "", ctlr.Log) + scanner := trivy.NewScanner(ctlr.StoreController, ctlr.MetaDB, "ghcr.io/project-zot/trivy-db", "", ctlr.Log) err = scanner.UpdateDB() So(err, ShouldBeNil) @@ -100,17 +100,17 @@ func TestScannerErrors(t *testing.T) { storeController := storage.StoreController{} storeController.DefaultStore = mocks.MockedImageStore{} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} log := log.NewLogger("debug", "") Convey("IsImageFormatSanable", func() { - repoDB.GetManifestDataFn = func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{}, zerr.ErrManifestDataNotFound + metaDB.GetManifestDataFn = func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{}, zerr.ErrManifestDataNotFound } - repoDB.GetIndexDataFn = func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{}, zerr.ErrManifestDataNotFound + metaDB.GetIndexDataFn = func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{}, zerr.ErrManifestDataNotFound } - scanner := trivy.NewScanner(storeController, repoDB, "", "", log) + scanner := trivy.NewScanner(storeController, metaDB, "", "", log) _, err := scanner.ScanImage("repo@" + digest.String()) So(err, ShouldNotBeNil) @@ -165,19 +165,19 @@ func TestVulnerableLayer(t *testing.T) { err = test.WriteImageToFileSystem(img, "repo", storeController) So(err, ShouldBeNil) - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: tempDir, } - boltDriver, err := bolt.GetBoltDriver(params) + boltDriver, err := boltdb.GetBoltDriver(params) So(err, ShouldBeNil) - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) + metaDB, err := boltdb.New(boltDriver, log) So(err, ShouldBeNil) - err = repodb.ParseStorage(repoDB, storeController, log) + err = meta.ParseStorage(metaDB, storeController, log) So(err, ShouldBeNil) - scanner := trivy.NewScanner(storeController, repoDB, "ghcr.io/project-zot/trivy-db", "", log) + scanner := trivy.NewScanner(storeController, metaDB, "ghcr.io/project-zot/trivy-db", "", log) err = scanner.UpdateDB() So(err, ShouldBeNil) diff --git a/pkg/extensions/search/resolver.go b/pkg/extensions/search/resolver.go index d6423acc..60e43b51 100644 --- a/pkg/extensions/search/resolver.go +++ b/pkg/extensions/search/resolver.go @@ -24,7 +24,7 @@ import ( cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/extensions/search/gql_generated" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" localCtx "zotregistry.io/zot/pkg/requestcontext" "zotregistry.io/zot/pkg/storage" ) @@ -38,18 +38,18 @@ const ( // Resolver ... type Resolver struct { cveInfo cveinfo.CveInfo - repoDB repodb.RepoDB + metaDB mTypes.MetaDB storeController storage.StoreController log log.Logger } // GetResolverConfig ... func GetResolverConfig(log log.Logger, storeController storage.StoreController, - repoDB repodb.RepoDB, cveInfo cveinfo.CveInfo, + metaDB mTypes.MetaDB, cveInfo cveinfo.CveInfo, ) gql_generated.Config { resConfig := &Resolver{ cveInfo: cveInfo, - repoDB: repoDB, + metaDB: metaDB, storeController: storeController, log: log, } @@ -61,11 +61,11 @@ func GetResolverConfig(log log.Logger, storeController storage.StoreController, } func NewResolver(log log.Logger, storeController storage.StoreController, - repoDB repodb.RepoDB, cveInfo cveinfo.CveInfo, + metaDB mTypes.MetaDB, cveInfo cveinfo.CveInfo, ) *Resolver { resolver := &Resolver{ cveInfo: cveInfo, - repoDB: repoDB, + metaDB: metaDB, storeController: storeController, log: log, } @@ -73,8 +73,8 @@ func NewResolver(log log.Logger, storeController storage.StoreController, return resolver } -func FilterByDigest(digest string) repodb.FilterFunc { - return func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { +func FilterByDigest(digest string) mTypes.FilterFunc { + return func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { lookupDigest := digest contains := false @@ -111,7 +111,7 @@ func FilterByDigest(digest string) repodb.FilterFunc { } } -func getImageListForDigest(ctx context.Context, digest string, repoDB repodb.RepoDB, cveInfo cveinfo.CveInfo, +func getImageListForDigest(ctx context.Context, digest string, metaDB mTypes.MetaDB, cveInfo cveinfo.CveInfo, requestedPage *gql_generated.PageInput, ) (*gql_generated.PaginatedImagesResult, error) { imageList := make([]*gql_generated.ImageSummary, 0) @@ -124,17 +124,17 @@ func getImageListForDigest(ctx context.Context, digest string, repoDB repodb.Rep Vulnerabilities: canSkipField(convert.GetPreloads(ctx), "Images.Vulnerabilities"), } - pageInput := repodb.PageInput{ + pageInput := mTypes.PageInput{ Limit: safeDereferencing(requestedPage.Limit, 0), Offset: safeDereferencing(requestedPage.Offset, 0), - SortBy: repodb.SortCriteria( + SortBy: mTypes.SortCriteria( safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), ), } // get all repos - reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.FilterTags(ctx, - FilterByDigest(digest), repodb.Filter{}, pageInput) + reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.FilterTags(ctx, + FilterByDigest(digest), mTypes.Filter{}, pageInput) if err != nil { return &gql_generated.PaginatedImagesResult{}, err } @@ -155,12 +155,12 @@ func getImageListForDigest(ctx context.Context, digest string, repoDB repodb.Rep }, nil } -func getImageSummary(ctx context.Context, repo, tag string, digest *string, repoDB repodb.RepoDB, +func getImageSummary(ctx context.Context, repo, tag string, digest *string, metaDB mTypes.MetaDB, cveInfo cveinfo.CveInfo, log log.Logger, //nolint:unparam ) ( *gql_generated.ImageSummary, error, ) { - repoMeta, err := repoDB.GetRepoMeta(repo) + repoMeta, err := metaDB.GetRepoMeta(repo) if err != nil { return nil, err } @@ -177,8 +177,8 @@ func getImageSummary(ctx context.Context, repo, tag string, digest *string, repo } var ( - manifestMetaMap = map[string]repodb.ManifestMetadata{} - indexDataMap = map[string]repodb.IndexData{} + manifestMetaMap = map[string]mTypes.ManifestMetadata{} + indexDataMap = map[string]mTypes.IndexData{} ) switch manifestDescriptor.MediaType { @@ -190,19 +190,19 @@ func getImageSummary(ctx context.Context, repo, tag string, digest *string, repo manifestDigest, repo, tag, zerr.ErrManifestDataNotFound) } - manifestData, err := repoDB.GetManifestData(godigest.Digest(manifestDigest)) + manifestData, err := metaDB.GetManifestData(godigest.Digest(manifestDigest)) if err != nil { return nil, err } - manifestMetaMap[manifestDigest] = repodb.ManifestMetadata{ + manifestMetaMap[manifestDigest] = mTypes.ManifestMetadata{ ManifestBlob: manifestData.ManifestBlob, ConfigBlob: manifestData.ConfigBlob, } case ispec.MediaTypeImageIndex: indexDigest := manifestDescriptor.Digest - indexData, err := repoDB.GetIndexData(godigest.Digest(indexDigest)) + indexData, err := metaDB.GetIndexData(godigest.Digest(indexDigest)) if err != nil { return nil, err } @@ -232,20 +232,20 @@ func getImageSummary(ctx context.Context, repo, tag string, digest *string, repo manifestDigest, repo, tag, zerr.ErrManifestDataNotFound) } - manifestData, err := repoDB.GetManifestData(godigest.Digest(manifestDigest)) + manifestData, err := metaDB.GetManifestData(godigest.Digest(manifestDigest)) if err != nil { return nil, fmt.Errorf("resolver: can't get ManifestData for digest %s for image '%s:%s' %w", manifestDigest, repo, tag, err) } - manifestMetaMap[manifestDigest] = repodb.ManifestMetadata{ + manifestMetaMap[manifestDigest] = mTypes.ManifestMetadata{ ManifestBlob: manifestData.ManifestBlob, ConfigBlob: manifestData.ConfigBlob, } // We update the tag descriptor to be the manifest descriptor with digest specified in the // 'digest' parameter. We treat it as a standalone image. - repoMeta.Tags[tag] = repodb.Descriptor{ + repoMeta.Tags[tag] = mTypes.Descriptor{ Digest: manifestDigest, MediaType: ispec.MediaTypeImageManifest, } @@ -254,13 +254,13 @@ func getImageSummary(ctx context.Context, repo, tag string, digest *string, repo } for _, manifest := range indexContent.Manifests { - manifestData, err := repoDB.GetManifestData(manifest.Digest) + manifestData, err := metaDB.GetManifestData(manifest.Digest) if err != nil { return nil, fmt.Errorf("resolver: can't get ManifestData for digest %s for image '%s:%s' %w", manifest.Digest, repo, tag, err) } - manifestMetaMap[manifest.Digest.String()] = repodb.ManifestMetadata{ + manifestMetaMap[manifest.Digest.String()] = mTypes.ManifestMetadata{ ManifestBlob: manifestData.ManifestBlob, ConfigBlob: manifestData.ConfigBlob, } @@ -357,8 +357,8 @@ func getCVEListForImage( }, nil } -func FilterByTagInfo(tagsInfo []cvemodel.TagInfo) repodb.FilterFunc { - return func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { +func FilterByTagInfo(tagsInfo []cvemodel.TagInfo) mTypes.FilterFunc { + return func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { manifestDigest := godigest.FromBytes(manifestMeta.ManifestBlob).String() for _, tagInfo := range tagsInfo { @@ -386,16 +386,16 @@ func getImageListForCVE( cveInfo cveinfo.CveInfo, filter *gql_generated.Filter, requestedPage *gql_generated.PageInput, - repoDB repodb.RepoDB, + metaDB mTypes.MetaDB, log log.Logger, ) (*gql_generated.PaginatedImagesResult, error) { // Obtain all repos and tags // Infinite page to make sure we scan all repos in advance, before filtering results // The CVE scan logic is called from here, not in the actual filter, // this is because we shouldn't keep the DB locked while we wait on scan results - reposMeta, err := repoDB.GetMultipleRepoMeta(ctx, - func(repoMeta repodb.RepoMetadata) bool { return true }, - repodb.PageInput{Limit: 0, Offset: 0, SortBy: repodb.SortCriteria(gql_generated.SortCriteriaUpdateTime)}, + reposMeta, err := metaDB.GetMultipleRepoMeta(ctx, + func(repoMeta mTypes.RepoMetadata) bool { return true }, + mTypes.PageInput{Limit: 0, Offset: 0, SortBy: mTypes.SortCriteria(gql_generated.SortCriteriaUpdateTime)}, ) if err != nil { return &gql_generated.PaginatedImagesResult{}, err @@ -428,9 +428,9 @@ func getImageListForCVE( requestedPage = &gql_generated.PageInput{} } - localFilter := repodb.Filter{} + localFilter := mTypes.Filter{} if filter != nil { - localFilter = repodb.Filter{ + localFilter = mTypes.Filter{ Os: filter.Os, Arch: filter.Arch, HasToBeSigned: filter.HasToBeSigned, @@ -440,16 +440,16 @@ func getImageListForCVE( } // Actual page requested by user - pageInput := repodb.PageInput{ + pageInput := mTypes.PageInput{ Limit: safeDereferencing(requestedPage.Limit, 0), Offset: safeDereferencing(requestedPage.Offset, 0), - SortBy: repodb.SortCriteria( + SortBy: mTypes.SortCriteria( safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } // get all repos - reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.FilterTags(ctx, + reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.FilterTags(ctx, FilterByTagInfo(affectedImages), localFilter, pageInput) if err != nil { return &gql_generated.PaginatedImagesResult{}, err @@ -477,7 +477,7 @@ func getImageListWithCVEFixed( cveInfo cveinfo.CveInfo, filter *gql_generated.Filter, requestedPage *gql_generated.PageInput, - repoDB repodb.RepoDB, + metaDB mTypes.MetaDB, log log.Logger, ) (*gql_generated.PaginatedImagesResult, error) { imageList := make([]*gql_generated.ImageSummary, 0) @@ -502,9 +502,9 @@ func getImageListWithCVEFixed( requestedPage = &gql_generated.PageInput{} } - localFilter := repodb.Filter{} + localFilter := mTypes.Filter{} if filter != nil { - localFilter = repodb.Filter{ + localFilter = mTypes.Filter{ Os: filter.Os, Arch: filter.Arch, HasToBeSigned: filter.HasToBeSigned, @@ -514,16 +514,16 @@ func getImageListWithCVEFixed( } // Actual page requested by user - pageInput := repodb.PageInput{ + pageInput := mTypes.PageInput{ Limit: safeDereferencing(requestedPage.Limit, 0), Offset: safeDereferencing(requestedPage.Offset, 0), - SortBy: repodb.SortCriteria( + SortBy: mTypes.SortCriteria( safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } // get all repos - reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.FilterTags(ctx, + reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.FilterTags(ctx, FilterByTagInfo(tagsInfo), localFilter, pageInput, ) if err != nil { @@ -553,7 +553,7 @@ func repoListWithNewestImage( cveInfo cveinfo.CveInfo, log log.Logger, //nolint:unparam // may be used by devs for debugging requestedPage *gql_generated.PageInput, - repoDB repodb.RepoDB, + metaDB mTypes.MetaDB, ) (*gql_generated.PaginatedReposResult, error) { repos := []*gql_generated.RepoSummary{} paginatedRepos := &gql_generated.PaginatedReposResult{} @@ -566,15 +566,15 @@ func repoListWithNewestImage( Vulnerabilities: canSkipField(convert.GetPreloads(ctx), "Results.NewestImage.Vulnerabilities"), } - pageInput := repodb.PageInput{ + pageInput := mTypes.PageInput{ Limit: safeDereferencing(requestedPage.Limit, 0), Offset: safeDereferencing(requestedPage.Offset, 0), - SortBy: repodb.SortCriteria( + SortBy: mTypes.SortCriteria( safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } - reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.SearchRepos(ctx, "", repodb.Filter{}, pageInput) + reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.SearchRepos(ctx, "", mTypes.Filter{}, pageInput) if err != nil { return &gql_generated.PaginatedReposResult{}, err } @@ -599,18 +599,18 @@ func getBookmarkedRepos( cveInfo cveinfo.CveInfo, log log.Logger, //nolint:unparam // may be used by devs for debugging requestedPage *gql_generated.PageInput, - repoDB repodb.RepoDB, + metaDB mTypes.MetaDB, ) (*gql_generated.PaginatedReposResult, error) { - repoNames, err := repoDB.GetBookmarkedRepos(ctx) + repoNames, err := metaDB.GetBookmarkedRepos(ctx) if err != nil { return &gql_generated.PaginatedReposResult{}, err } - filterFn := func(repoMeta repodb.RepoMetadata) bool { + filterFn := func(repoMeta mTypes.RepoMetadata) bool { return zcommon.Contains(repoNames, repoMeta.Name) } - return getFilteredPaginatedRepos(ctx, cveInfo, filterFn, log, requestedPage, repoDB) + return getFilteredPaginatedRepos(ctx, cveInfo, filterFn, log, requestedPage, metaDB) } func getStarredRepos( @@ -618,27 +618,27 @@ func getStarredRepos( cveInfo cveinfo.CveInfo, log log.Logger, //nolint:unparam // may be used by devs for debugging requestedPage *gql_generated.PageInput, - repoDB repodb.RepoDB, + metaDB mTypes.MetaDB, ) (*gql_generated.PaginatedReposResult, error) { - repoNames, err := repoDB.GetStarredRepos(ctx) + repoNames, err := metaDB.GetStarredRepos(ctx) if err != nil { return &gql_generated.PaginatedReposResult{}, err } - filterFn := func(repoMeta repodb.RepoMetadata) bool { + filterFn := func(repoMeta mTypes.RepoMetadata) bool { return zcommon.Contains(repoNames, repoMeta.Name) } - return getFilteredPaginatedRepos(ctx, cveInfo, filterFn, log, requestedPage, repoDB) + return getFilteredPaginatedRepos(ctx, cveInfo, filterFn, log, requestedPage, metaDB) } func getFilteredPaginatedRepos( ctx context.Context, cveInfo cveinfo.CveInfo, - filterFn repodb.FilterRepoFunc, + filterFn mTypes.FilterRepoFunc, log log.Logger, //nolint:unparam // may be used by devs for debugging requestedPage *gql_generated.PageInput, - repoDB repodb.RepoDB, + metaDB mTypes.MetaDB, ) (*gql_generated.PaginatedReposResult, error) { repos := []*gql_generated.RepoSummary{} paginatedRepos := &gql_generated.PaginatedReposResult{} @@ -651,15 +651,15 @@ func getFilteredPaginatedRepos( Vulnerabilities: canSkipField(convert.GetPreloads(ctx), "Results.NewestImage.Vulnerabilities"), } - pageInput := repodb.PageInput{ + pageInput := mTypes.PageInput{ Limit: safeDereferencing(requestedPage.Limit, 0), Offset: safeDereferencing(requestedPage.Offset, 0), - SortBy: repodb.SortCriteria( + SortBy: mTypes.SortCriteria( safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } - reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.FilterRepos(ctx, filterFn, pageInput) + reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.FilterRepos(ctx, filterFn, pageInput) if err != nil { return paginatedRepos, err } @@ -679,7 +679,7 @@ func getFilteredPaginatedRepos( return paginatedRepos, nil } -func globalSearch(ctx context.Context, query string, repoDB repodb.RepoDB, filter *gql_generated.Filter, +func globalSearch(ctx context.Context, query string, metaDB mTypes.MetaDB, filter *gql_generated.Filter, requestedPage *gql_generated.PageInput, cveInfo cveinfo.CveInfo, log log.Logger, //nolint:unparam ) (*gql_generated.PaginatedReposResult, []*gql_generated.ImageSummary, []*gql_generated.LayerSummary, error, ) { @@ -693,9 +693,9 @@ func globalSearch(ctx context.Context, query string, repoDB repodb.RepoDB, filte requestedPage = &gql_generated.PageInput{} } - localFilter := repodb.Filter{} + localFilter := mTypes.Filter{} if filter != nil { - localFilter = repodb.Filter{ + localFilter = mTypes.Filter{ Os: filter.Os, Arch: filter.Arch, HasToBeSigned: filter.HasToBeSigned, @@ -709,15 +709,15 @@ func globalSearch(ctx context.Context, query string, repoDB repodb.RepoDB, filte Vulnerabilities: canSkipField(preloads, "Repos.NewestImage.Vulnerabilities"), } - pageInput := repodb.PageInput{ + pageInput := mTypes.PageInput{ Limit: safeDereferencing(requestedPage.Limit, 0), Offset: safeDereferencing(requestedPage.Offset, 0), - SortBy: repodb.SortCriteria( + SortBy: mTypes.SortCriteria( safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), ), } - reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.SearchRepos(ctx, query, localFilter, pageInput) + reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.SearchRepos(ctx, query, localFilter, pageInput) if err != nil { return &gql_generated.PaginatedReposResult{}, []*gql_generated.ImageSummary{}, []*gql_generated.LayerSummary{}, err } @@ -740,15 +740,15 @@ func globalSearch(ctx context.Context, query string, repoDB repodb.RepoDB, filte Vulnerabilities: canSkipField(preloads, "Images.Vulnerabilities"), } - pageInput := repodb.PageInput{ + pageInput := mTypes.PageInput{ Limit: safeDereferencing(requestedPage.Limit, 0), Offset: safeDereferencing(requestedPage.Offset, 0), - SortBy: repodb.SortCriteria( + SortBy: mTypes.SortCriteria( safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), ), } - reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.SearchTags(ctx, query, localFilter, pageInput) + reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.SearchTags(ctx, query, localFilter, pageInput) if err != nil { return &gql_generated.PaginatedReposResult{}, []*gql_generated.ImageSummary{}, []*gql_generated.LayerSummary{}, err } @@ -774,7 +774,7 @@ func canSkipField(preloads map[string]bool, s string) bool { return !fieldIsPresent } -func derivedImageList(ctx context.Context, image string, digest *string, repoDB repodb.RepoDB, +func derivedImageList(ctx context.Context, image string, digest *string, metaDB mTypes.MetaDB, requestedPage *gql_generated.PageInput, cveInfo cveinfo.CveInfo, log log.Logger, ) (*gql_generated.PaginatedImagesResult, error) { @@ -784,10 +784,10 @@ func derivedImageList(ctx context.Context, image string, digest *string, repoDB requestedPage = &gql_generated.PageInput{} } - pageInput := repodb.PageInput{ + pageInput := mTypes.PageInput{ Limit: safeDereferencing(requestedPage.Limit, 0), Offset: safeDereferencing(requestedPage.Offset, 0), - SortBy: repodb.SortCriteria( + SortBy: mTypes.SortCriteria( safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } @@ -801,7 +801,7 @@ func derivedImageList(ctx context.Context, image string, digest *string, repoDB return &gql_generated.PaginatedImagesResult{}, gqlerror.Errorf("no reference provided") } - searchedImage, err := getImageSummary(ctx, imageRepo, imageTag, digest, repoDB, cveInfo, log) + searchedImage, err := getImageSummary(ctx, imageRepo, imageTag, digest, metaDB, cveInfo, log) if err != nil { if errors.Is(err, zerr.ErrRepoMetaNotFound) { return &gql_generated.PaginatedImagesResult{}, gqlerror.Errorf("repository: not found") @@ -811,9 +811,9 @@ func derivedImageList(ctx context.Context, image string, digest *string, repoDB } // we need all available tags - reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.FilterTags(ctx, + reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.FilterTags(ctx, filterDerivedImages(searchedImage), - repodb.Filter{}, + mTypes.Filter{}, pageInput) if err != nil { return &gql_generated.PaginatedImagesResult{}, err @@ -842,8 +842,8 @@ func derivedImageList(ctx context.Context, image string, digest *string, repoDB }, nil } -func filterDerivedImages(image *gql_generated.ImageSummary) repodb.FilterFunc { - return func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { +func filterDerivedImages(image *gql_generated.ImageSummary) mTypes.FilterFunc { + return func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { var addImageToList bool var imageManifest ispec.Manifest @@ -888,7 +888,7 @@ func filterDerivedImages(image *gql_generated.ImageSummary) repodb.FilterFunc { } } -func baseImageList(ctx context.Context, image string, digest *string, repoDB repodb.RepoDB, +func baseImageList(ctx context.Context, image string, digest *string, metaDB mTypes.MetaDB, requestedPage *gql_generated.PageInput, cveInfo cveinfo.CveInfo, log log.Logger, ) (*gql_generated.PaginatedImagesResult, error) { @@ -898,10 +898,10 @@ func baseImageList(ctx context.Context, image string, digest *string, repoDB rep requestedPage = &gql_generated.PageInput{} } - pageInput := repodb.PageInput{ + pageInput := mTypes.PageInput{ Limit: safeDereferencing(requestedPage.Limit, 0), Offset: safeDereferencing(requestedPage.Offset, 0), - SortBy: repodb.SortCriteria( + SortBy: mTypes.SortCriteria( safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaUpdateTime), ), } @@ -916,7 +916,7 @@ func baseImageList(ctx context.Context, image string, digest *string, repoDB rep return &gql_generated.PaginatedImagesResult{}, gqlerror.Errorf("no reference provided") } - searchedImage, err := getImageSummary(ctx, imageRepo, imageTag, digest, repoDB, cveInfo, log) + searchedImage, err := getImageSummary(ctx, imageRepo, imageTag, digest, metaDB, cveInfo, log) if err != nil { if errors.Is(err, zerr.ErrRepoMetaNotFound) { return &gql_generated.PaginatedImagesResult{}, gqlerror.Errorf("repository: not found") @@ -926,9 +926,9 @@ func baseImageList(ctx context.Context, image string, digest *string, repoDB rep } // we need all available tags - reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.FilterTags(ctx, + reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.FilterTags(ctx, filterBaseImages(searchedImage), - repodb.Filter{}, + mTypes.Filter{}, pageInput) if err != nil { return &gql_generated.PaginatedImagesResult{}, err @@ -957,8 +957,8 @@ func baseImageList(ctx context.Context, image string, digest *string, repoDB rep }, nil } -func filterBaseImages(image *gql_generated.ImageSummary) repodb.FilterFunc { - return func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { +func filterBaseImages(image *gql_generated.ImageSummary) mTypes.FilterFunc { + return func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { var addImageToList bool var manifestContent ispec.Manifest @@ -1122,7 +1122,7 @@ func deleteElementAt(slice []*string, i int) []*string { return slice } -func expandedRepoInfo(ctx context.Context, repo string, repoDB repodb.RepoDB, cveInfo cveinfo.CveInfo, log log.Logger, +func expandedRepoInfo(ctx context.Context, repo string, metaDB mTypes.MetaDB, cveInfo cveinfo.CveInfo, log log.Logger, ) (*gql_generated.RepoInfo, error) { if ok, err := localCtx.RepoIsUserAvailable(ctx, repo); !ok || err != nil { log.Info().Err(err).Str("repository", repo).Bool("availability", ok).Msg("resolver: repo user availability") @@ -1130,7 +1130,7 @@ func expandedRepoInfo(ctx context.Context, repo string, repoDB repodb.RepoDB, cv return &gql_generated.RepoInfo{}, nil //nolint:nilerr // don't give details to a potential attacker } - repoMeta, err := repoDB.GetUserRepoMeta(ctx, repo) + repoMeta, err := metaDB.GetUserRepoMeta(ctx, repo) if err != nil { log.Error().Err(err).Str("repository", repo).Msg("resolver: can't retrieve repoMeta for repo") @@ -1138,8 +1138,8 @@ func expandedRepoInfo(ctx context.Context, repo string, repoDB repodb.RepoDB, cv } var ( - manifestMetaMap = map[string]repodb.ManifestMetadata{} - indexDataMap = map[string]repodb.IndexData{} + manifestMetaMap = map[string]mTypes.ManifestMetadata{} + indexDataMap = map[string]mTypes.IndexData{} ) for tag, descriptor := range repoMeta.Tags { @@ -1151,7 +1151,7 @@ func expandedRepoInfo(ctx context.Context, repo string, repoDB repodb.RepoDB, cv continue } - manifestData, err := repoDB.GetManifestData(godigest.Digest(digest)) + manifestData, err := metaDB.GetManifestData(godigest.Digest(digest)) if err != nil { graphql.AddError(ctx, fmt.Errorf("resolver: failed to get manifest meta for image %s:%s with manifest digest %s %w", repo, tag, digest, err)) @@ -1159,7 +1159,7 @@ func expandedRepoInfo(ctx context.Context, repo string, repoDB repodb.RepoDB, cv continue } - manifestMetaMap[digest] = repodb.ManifestMetadata{ + manifestMetaMap[digest] = mTypes.ManifestMetadata{ ManifestBlob: manifestData.ManifestBlob, ConfigBlob: manifestData.ConfigBlob, } @@ -1170,7 +1170,7 @@ func expandedRepoInfo(ctx context.Context, repo string, repoDB repodb.RepoDB, cv continue } - indexData, err := repoDB.GetIndexData(godigest.Digest(digest)) + indexData, err := metaDB.GetIndexData(godigest.Digest(digest)) if err != nil { graphql.AddError(ctx, fmt.Errorf("resolver: failed to get manifest meta for image %s:%s with manifest digest %s %w", repo, tag, digest, err)) @@ -1191,7 +1191,7 @@ func expandedRepoInfo(ctx context.Context, repo string, repoDB repodb.RepoDB, cv var errorOccured bool for _, descriptor := range indexContent.Manifests { - manifestData, err := repoDB.GetManifestData(descriptor.Digest) + manifestData, err := metaDB.GetManifestData(descriptor.Digest) if err != nil { graphql.AddError(ctx, fmt.Errorf("resolver: failed to get manifest meta with digest '%s' for multiarch image %s:%s %w", @@ -1203,7 +1203,7 @@ func expandedRepoInfo(ctx context.Context, repo string, repoDB repodb.RepoDB, cv break } - manifestMetaMap[descriptor.Digest.String()] = repodb.ManifestMetadata{ + manifestMetaMap[descriptor.Digest.String()] = mTypes.ManifestMetadata{ ManifestBlob: manifestData.ManifestBlob, ConfigBlob: manifestData.ConfigBlob, } @@ -1262,7 +1262,7 @@ func searchingForRepos(query string) bool { return !strings.Contains(query, ":") } -func getImageList(ctx context.Context, repo string, repoDB repodb.RepoDB, cveInfo cveinfo.CveInfo, +func getImageList(ctx context.Context, repo string, metaDB mTypes.MetaDB, cveInfo cveinfo.CveInfo, requestedPage *gql_generated.PageInput, log log.Logger, //nolint:unparam ) (*gql_generated.PaginatedImagesResult, error) { imageList := make([]*gql_generated.ImageSummary, 0) @@ -1275,20 +1275,20 @@ func getImageList(ctx context.Context, repo string, repoDB repodb.RepoDB, cveInf Vulnerabilities: canSkipField(convert.GetPreloads(ctx), "Images.Vulnerabilities"), } - pageInput := repodb.PageInput{ + pageInput := mTypes.PageInput{ Limit: safeDereferencing(requestedPage.Limit, 0), Offset: safeDereferencing(requestedPage.Offset, 0), - SortBy: repodb.SortCriteria( + SortBy: mTypes.SortCriteria( safeDereferencing(requestedPage.SortBy, gql_generated.SortCriteriaRelevance), ), } - // reposMeta, manifestMetaMap, err := repoDB.SearchRepos(ctx, repo, repodb.Filter{}, pageInput) - reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + // reposMeta, manifestMetaMap, err := metaDB.SearchRepos(ctx, repo, mTypes.Filter{}, pageInput) + reposMeta, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.FilterTags(ctx, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, - repodb.Filter{}, + mTypes.Filter{}, pageInput) if err != nil { return &gql_generated.PaginatedImagesResult{}, err @@ -1312,7 +1312,7 @@ func getImageList(ctx context.Context, repo string, repoDB repodb.RepoDB, cveInf }, nil } -func getReferrers(repoDB repodb.RepoDB, repo string, referredDigest string, artifactTypes []string, +func getReferrers(metaDB mTypes.MetaDB, repo string, referredDigest string, artifactTypes []string, log log.Logger, ) ([]*gql_generated.Referrer, error) { refDigest := godigest.Digest(referredDigest) @@ -1323,7 +1323,7 @@ func getReferrers(repoDB repodb.RepoDB, repo string, referredDigest string, arti referredDigest, err) } - referrers, err := repoDB.GetReferrersInfo(repo, refDigest, artifactTypes) + referrers, err := metaDB.GetReferrersInfo(repo, refDigest, artifactTypes) if err != nil { return nil, err } diff --git a/pkg/extensions/search/resolver_test.go b/pkg/extensions/search/resolver_test.go index 751b818b..14ec42a7 100644 --- a/pkg/extensions/search/resolver_test.go +++ b/pkg/extensions/search/resolver_test.go @@ -20,9 +20,9 @@ import ( cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/extensions/search/gql_generated" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/repodb" - boltdb_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" + "zotregistry.io/zot/pkg/meta/boltdb" + "zotregistry.io/zot/pkg/meta/pagination" + mTypes "zotregistry.io/zot/pkg/meta/types" localCtx "zotregistry.io/zot/pkg/requestcontext" "zotregistry.io/zot/pkg/storage" "zotregistry.io/zot/pkg/test/mocks" @@ -33,20 +33,21 @@ var ErrTestError = errors.New("TestError") func TestGlobalSearch(t *testing.T) { Convey("globalSearch", t, func() { const query = "repo1" - Convey("RepoDB SearchRepos error", func() { - mockRepoDB := mocks.RepoDBMock{ - SearchReposFn: func(ctx context.Context, searchText string, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, - error, + Convey("MetaDB SearchRepos error", func() { + mockMetaDB := mocks.MetaDBMock{ + SearchReposFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, ) { - return make([]repodb.RepoMetadata, 0), make(map[string]repodb.ManifestMetadata), - map[string]repodb.IndexData{}, common.PageInfo{}, ErrTestError + return make([]mTypes.RepoMetadata, 0), make(map[string]mTypes.ManifestMetadata), + map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, } responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) mockCve := mocks.CveInfoMock{} - repos, images, layers, err := globalSearch(responseContext, query, mockRepoDB, &gql_generated.Filter{}, + repos, images, layers, err := globalSearch(responseContext, query, mockMetaDB, &gql_generated.Filter{}, &gql_generated.PageInput{}, mockCve, log.NewLogger("debug", "")) So(err, ShouldNotBeNil) So(images, ShouldBeEmpty) @@ -54,14 +55,17 @@ func TestGlobalSearch(t *testing.T) { So(repos.Results, ShouldBeEmpty) }) - Convey("RepoDB SearchRepo is successful", func() { - mockRepoDB := mocks.RepoDBMock{ - SearchReposFn: func(ctx context.Context, searchText string, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + Convey("MetaDB SearchRepo is successful", func() { + mockMetaDB := mocks.MetaDBMock{ + SearchReposFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": { Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest, @@ -71,10 +75,10 @@ func TestGlobalSearch(t *testing.T) { MediaType: ispec.MediaTypeImageManifest, }, }, - Signatures: map[string]repodb.ManifestSignatures{ + Signatures: map[string]mTypes.ManifestSignatures{ "digestTag1.0.1": { - "cosign": []repodb.SignatureInfo{ - {SignatureManifestDigest: "testSignature", LayersInfo: []repodb.LayerInfo{}}, + "cosign": []mTypes.SignatureInfo{ + {SignatureManifestDigest: "testSignature", LayersInfo: []mTypes.LayerInfo{}}, }, }, }, @@ -105,7 +109,7 @@ func TestGlobalSearch(t *testing.T) { manifestBlob, err := json.Marshal(ispec.Manifest{}) So(err, ShouldBeNil) - manifestMetas := map[string]repodb.ManifestMetadata{ + manifestMetas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: manifestBlob, ConfigBlob: configBlob1, @@ -116,7 +120,7 @@ func TestGlobalSearch(t *testing.T) { }, } - return repos, manifestMetas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -133,7 +137,7 @@ func TestGlobalSearch(t *testing.T) { responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) mockCve := mocks.CveInfoMock{} - repos, images, layers, err := globalSearch(responseContext, query, mockRepoDB, + repos, images, layers, err := globalSearch(responseContext, query, mockMetaDB, &gql_generated.Filter{}, &pageInput, mockCve, log.NewLogger("debug", "")) So(err, ShouldBeNil) So(images, ShouldBeEmpty) @@ -142,23 +146,26 @@ func TestGlobalSearch(t *testing.T) { So(len(repos.Results[0].Vendors), ShouldEqual, 2) }) - Convey("RepoDB SearchRepo Bad manifest referenced", func() { - mockRepoDB := mocks.RepoDBMock{ - SearchReposFn: func(ctx context.Context, searchText string, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + Convey("MetaDB SearchRepo Bad manifest referenced", func() { + mockMetaDB := mocks.MetaDBMock{ + SearchReposFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": { Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest, }, }, - Signatures: map[string]repodb.ManifestSignatures{ + Signatures: map[string]mTypes.ManifestSignatures{ "digestTag1.0.1": { - "cosign": []repodb.SignatureInfo{ - {SignatureManifestDigest: "testSignature", LayersInfo: []repodb.LayerInfo{}}, + "cosign": []mTypes.SignatureInfo{ + {SignatureManifestDigest: "testSignature", LayersInfo: []mTypes.LayerInfo{}}, }, }, }, @@ -169,14 +176,14 @@ func TestGlobalSearch(t *testing.T) { configBlob, err := json.Marshal(ispec.Image{}) So(err, ShouldBeNil) - manifestMetas := map[string]repodb.ManifestMetadata{ + manifestMetas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: []byte("bad manifest blob"), ConfigBlob: configBlob, }, } - return repos, manifestMetas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -194,7 +201,7 @@ func TestGlobalSearch(t *testing.T) { graphql.DefaultRecover) mockCve := mocks.CveInfoMock{} - repos, images, layers, err := globalSearch(responseContext, query, mockRepoDB, + repos, images, layers, err := globalSearch(responseContext, query, mockMetaDB, &gql_generated.Filter{}, &pageInput, mockCve, log.NewLogger("debug", "")) So(err, ShouldBeNil) So(images, ShouldBeEmpty) @@ -205,7 +212,7 @@ func TestGlobalSearch(t *testing.T) { responseContext = graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) - repos, images, layers, err = globalSearch(responseContext, query, mockRepoDB, + repos, images, layers, err = globalSearch(responseContext, query, mockMetaDB, &gql_generated.Filter{}, &pageInput, mockCve, log.NewLogger("debug", "")) So(err, ShouldBeNil) So(images, ShouldBeEmpty) @@ -213,23 +220,26 @@ func TestGlobalSearch(t *testing.T) { So(repos.Results, ShouldBeEmpty) }) - Convey("RepoDB SearchRepo good manifest referenced and bad config blob", func() { - mockRepoDB := mocks.RepoDBMock{ - SearchReposFn: func(ctx context.Context, searchText string, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + Convey("MetaDB SearchRepo good manifest referenced and bad config blob", func() { + mockMetaDB := mocks.MetaDBMock{ + SearchReposFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": { Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest, }, }, - Signatures: map[string]repodb.ManifestSignatures{ + Signatures: map[string]mTypes.ManifestSignatures{ "digestTag1.0.1": { - "cosign": []repodb.SignatureInfo{ - {SignatureManifestDigest: "testSignature", LayersInfo: []repodb.LayerInfo{}}, + "cosign": []mTypes.SignatureInfo{ + {SignatureManifestDigest: "testSignature", LayersInfo: []mTypes.LayerInfo{}}, }, }, }, @@ -240,14 +250,14 @@ func TestGlobalSearch(t *testing.T) { manifestBlob, err := json.Marshal(ispec.Manifest{}) So(err, ShouldBeNil) - manifestMetas := map[string]repodb.ManifestMetadata{ + manifestMetas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: manifestBlob, ConfigBlob: []byte("bad config blob"), }, } - return repos, manifestMetas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -265,7 +275,7 @@ func TestGlobalSearch(t *testing.T) { responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) - repos, images, layers, err := globalSearch(responseContext, query, mockRepoDB, + repos, images, layers, err := globalSearch(responseContext, query, mockMetaDB, &gql_generated.Filter{}, &pageInput, mockCve, log.NewLogger("debug", "")) So(err, ShouldBeNil) So(images, ShouldBeEmpty) @@ -275,7 +285,7 @@ func TestGlobalSearch(t *testing.T) { query = "repo1:1.0.1" responseContext = graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) - repos, images, layers, err = globalSearch(responseContext, query, mockRepoDB, + repos, images, layers, err = globalSearch(responseContext, query, mockMetaDB, &gql_generated.Filter{}, &pageInput, mockCve, log.NewLogger("debug", "")) So(err, ShouldBeNil) So(images, ShouldBeEmpty) @@ -283,14 +293,15 @@ func TestGlobalSearch(t *testing.T) { So(repos.Results, ShouldBeEmpty) }) - Convey("RepoDB SearchTags gives error", func() { - mockRepoDB := mocks.RepoDBMock{ - SearchTagsFn: func(ctx context.Context, searchText string, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, + Convey("MetaDB SearchTags gives error", func() { + mockMetaDB := mocks.MetaDBMock{ + SearchTagsFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return make([]repodb.RepoMetadata, 0), make(map[string]repodb.ManifestMetadata), - map[string]repodb.IndexData{}, common.PageInfo{}, ErrTestError + return make([]mTypes.RepoMetadata, 0), make(map[string]mTypes.ManifestMetadata), + map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, } const query = "repo1:1.0.1" @@ -298,7 +309,7 @@ func TestGlobalSearch(t *testing.T) { responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) - repos, images, layers, err := globalSearch(responseContext, query, mockRepoDB, &gql_generated.Filter{}, + repos, images, layers, err := globalSearch(responseContext, query, mockMetaDB, &gql_generated.Filter{}, &gql_generated.PageInput{}, mockCve, log.NewLogger("debug", "")) So(err, ShouldNotBeNil) So(images, ShouldBeEmpty) @@ -306,23 +317,26 @@ func TestGlobalSearch(t *testing.T) { So(repos.Results, ShouldBeEmpty) }) - Convey("RepoDB SearchTags is successful", func() { - mockRepoDB := mocks.RepoDBMock{ - SearchTagsFn: func(ctx context.Context, searchText string, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + Convey("MetaDB SearchTags is successful", func() { + mockMetaDB := mocks.MetaDBMock{ + SearchTagsFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": { Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest, }, }, - Signatures: map[string]repodb.ManifestSignatures{ + Signatures: map[string]mTypes.ManifestSignatures{ "digestTag1.0.1": { - "cosign": []repodb.SignatureInfo{ - {SignatureManifestDigest: "testSignature", LayersInfo: []repodb.LayerInfo{}}, + "cosign": []mTypes.SignatureInfo{ + {SignatureManifestDigest: "testSignature", LayersInfo: []mTypes.LayerInfo{}}, }, }, }, @@ -351,7 +365,7 @@ func TestGlobalSearch(t *testing.T) { manifestBlob, err := json.Marshal(ispec.Manifest{}) So(err, ShouldBeNil) - manifestMetas := map[string]repodb.ManifestMetadata{ + manifestMetas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: manifestBlob, ConfigBlob: configBlob1, @@ -362,7 +376,7 @@ func TestGlobalSearch(t *testing.T) { }, } - return repos, manifestMetas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -380,7 +394,7 @@ func TestGlobalSearch(t *testing.T) { responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) - repos, images, layers, err := globalSearch(responseContext, query, mockRepoDB, + repos, images, layers, err := globalSearch(responseContext, query, mockMetaDB, &gql_generated.Filter{}, &pageInput, mockCve, log.NewLogger("debug", "")) So(err, ShouldBeNil) So(images, ShouldNotBeEmpty) @@ -392,15 +406,15 @@ func TestGlobalSearch(t *testing.T) { func TestRepoListWithNewestImage(t *testing.T) { Convey("RepoListWithNewestImage", t, func() { - Convey("RepoDB SearchRepos error", func() { - mockRepoDB := mocks.RepoDBMock{ - SearchReposFn: func(ctx context.Context, searchText string, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, + Convey("MetaDB SearchRepos error", func() { + mockMetaDB := mocks.MetaDBMock{ + SearchReposFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return make([]repodb.RepoMetadata, 0), make(map[string]repodb.ManifestMetadata), - map[string]repodb.IndexData{}, common.PageInfo{}, ErrTestError + return make([]mTypes.RepoMetadata, 0), make(map[string]mTypes.ManifestMetadata), + map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, } responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, @@ -415,28 +429,31 @@ func TestRepoListWithNewestImage(t *testing.T) { Offset: &offset, SortBy: &sortCriteria, } - repos, err := repoListWithNewestImage(responseContext, mockCve, log.NewLogger("debug", ""), &pageInput, mockRepoDB) + repos, err := repoListWithNewestImage(responseContext, mockCve, log.NewLogger("debug", ""), &pageInput, mockMetaDB) So(err, ShouldNotBeNil) So(repos.Results, ShouldBeEmpty) }) - Convey("RepoDB SearchRepo bad manifest referenced", func() { - mockRepoDB := mocks.RepoDBMock{ - SearchReposFn: func(ctx context.Context, searchText string, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + Convey("MetaDB SearchRepo bad manifest referenced", func() { + mockMetaDB := mocks.MetaDBMock{ + SearchReposFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": { Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest, }, }, - Signatures: map[string]repodb.ManifestSignatures{ + Signatures: map[string]mTypes.ManifestSignatures{ "digestTag1.0.1": { - "cosign": []repodb.SignatureInfo{ - {SignatureManifestDigest: "testSignature", LayersInfo: []repodb.LayerInfo{}}, + "cosign": []mTypes.SignatureInfo{ + {SignatureManifestDigest: "testSignature", LayersInfo: []mTypes.LayerInfo{}}, }, }, }, @@ -444,16 +461,16 @@ func TestRepoListWithNewestImage(t *testing.T) { }, { Name: "repo2", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.2": { Digest: "digestTag1.0.2", MediaType: ispec.MediaTypeImageManifest, }, }, - Signatures: map[string]repodb.ManifestSignatures{ + Signatures: map[string]mTypes.ManifestSignatures{ "digestTag1.0.1": { - "cosign": []repodb.SignatureInfo{ - {SignatureManifestDigest: "testSignature", LayersInfo: []repodb.LayerInfo{}}, + "cosign": []mTypes.SignatureInfo{ + {SignatureManifestDigest: "testSignature", LayersInfo: []mTypes.LayerInfo{}}, }, }, }, @@ -468,7 +485,7 @@ func TestRepoListWithNewestImage(t *testing.T) { }) So(err, ShouldBeNil) - manifestMetas := map[string]repodb.ManifestMetadata{ + manifestMetas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: []byte("bad manifest blob"), ConfigBlob: configBlob1, @@ -479,7 +496,7 @@ func TestRepoListWithNewestImage(t *testing.T) { }, } - return repos, manifestMetas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -495,7 +512,7 @@ func TestRepoListWithNewestImage(t *testing.T) { Offset: &offset, SortBy: &sortCriteria, } - repos, err := repoListWithNewestImage(responseContext, mockCve, log.NewLogger("debug", ""), &pageInput, mockRepoDB) + repos, err := repoListWithNewestImage(responseContext, mockCve, log.NewLogger("debug", ""), &pageInput, mockMetaDB) So(err, ShouldBeNil) So(repos.Results, ShouldNotBeEmpty) }) @@ -503,25 +520,29 @@ func TestRepoListWithNewestImage(t *testing.T) { Convey("Working SearchRepo function", func() { createTime := time.Now() createTime2 := createTime.Add(time.Second) - mockRepoDB := mocks.RepoDBMock{ - SearchReposFn: func(ctx context.Context, searchText string, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - pageFinder, err := repodb.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + mockMetaDB := mocks.MetaDBMock{ + SearchReposFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + pageFinder, err := pagination.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, + requestedPage.SortBy) So(err, ShouldBeNil) - repos := []repodb.RepoMetadata{ + repos := []mTypes.RepoMetadata{ { Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": { Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest, }, }, - Signatures: map[string]repodb.ManifestSignatures{ + Signatures: map[string]mTypes.ManifestSignatures{ "digestTag1.0.1": { - "cosign": []repodb.SignatureInfo{ - {SignatureManifestDigest: "testSignature", LayersInfo: []repodb.LayerInfo{}}, + "cosign": []mTypes.SignatureInfo{ + {SignatureManifestDigest: "testSignature", LayersInfo: []mTypes.LayerInfo{}}, }, }, }, @@ -529,16 +550,16 @@ func TestRepoListWithNewestImage(t *testing.T) { }, { Name: "repo2", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.2": { Digest: "digestTag1.0.2", MediaType: ispec.MediaTypeImageManifest, }, }, - Signatures: map[string]repodb.ManifestSignatures{ + Signatures: map[string]mTypes.ManifestSignatures{ "digestTag1.0.1": { - "cosign": []repodb.SignatureInfo{ - {SignatureManifestDigest: "testSignature", LayersInfo: []repodb.LayerInfo{}}, + "cosign": []mTypes.SignatureInfo{ + {SignatureManifestDigest: "testSignature", LayersInfo: []mTypes.LayerInfo{}}, }, }, }, @@ -547,7 +568,7 @@ func TestRepoListWithNewestImage(t *testing.T) { } for _, repoMeta := range repos { - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, UpdateTime: createTime, }) @@ -575,7 +596,7 @@ func TestRepoListWithNewestImage(t *testing.T) { manifestBlob, err := json.Marshal(ispec.Manifest{}) So(err, ShouldBeNil) - manifestMetas := map[string]repodb.ManifestMetadata{ + manifestMetas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: manifestBlob, ConfigBlob: configBlob1, @@ -586,19 +607,19 @@ func TestRepoListWithNewestImage(t *testing.T) { }, } - return repos, manifestMetas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } - Convey("RepoDB missing requestedPage", func() { + Convey("MetaDB missing requestedPage", func() { responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) mockCve := mocks.CveInfoMock{} - repos, err := repoListWithNewestImage(responseContext, mockCve, log.NewLogger("debug", ""), nil, mockRepoDB) + repos, err := repoListWithNewestImage(responseContext, mockCve, log.NewLogger("debug", ""), nil, mockMetaDB) So(err, ShouldBeNil) So(repos.Results, ShouldNotBeEmpty) }) - Convey("RepoDB SearchRepo is successful", func() { + Convey("MetaDB SearchRepo is successful", func() { limit := 2 offset := 0 sortCriteria := gql_generated.SortCriteriaUpdateTime @@ -613,7 +634,7 @@ func TestRepoListWithNewestImage(t *testing.T) { mockCve := mocks.CveInfoMock{} repos, err := repoListWithNewestImage(responseContext, mockCve, - log.NewLogger("debug", ""), &pageInput, mockRepoDB) + log.NewLogger("debug", ""), &pageInput, mockMetaDB) So(err, ShouldBeNil) So(repos, ShouldNotBeEmpty) So(len(repos.Results), ShouldEqual, 2) @@ -633,7 +654,7 @@ func TestGetBookmarkedRepos(t *testing.T) { mocks.CveInfoMock{}, log.NewLogger("debug", ""), nil, - mocks.RepoDBMock{ + mocks.MetaDBMock{ GetBookmarkedReposFn: func(ctx context.Context) ([]string, error) { return []string{}, ErrTestError }, @@ -652,7 +673,7 @@ func TestGetStarredRepos(t *testing.T) { mocks.CveInfoMock{}, log.NewLogger("debug", ""), nil, - mocks.RepoDBMock{ + mocks.MetaDBMock{ GetStarredReposFn: func(ctx context.Context) ([]string, error) { return []string{}, ErrTestError }, @@ -669,15 +690,15 @@ func TestGetFilteredPaginatedRepos(t *testing.T) { _, err := getFilteredPaginatedRepos( responseContext, mocks.CveInfoMock{}, - func(repoMeta repodb.RepoMetadata) bool { return true }, + func(repoMeta mTypes.RepoMetadata) bool { return true }, log.NewLogger("debug", ""), nil, - mocks.RepoDBMock{ - FilterReposFn: func(ctx context.Context, filter repodb.FilterRepoFunc, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, + mocks.MetaDBMock{ + FilterReposFn: func(ctx context.Context, filter mTypes.FilterRepoFunc, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, }, @@ -689,13 +710,13 @@ func TestGetFilteredPaginatedRepos(t *testing.T) { func TestImageListForDigest(t *testing.T) { Convey("getImageList", t, func() { Convey("no page requested, FilterTagsFn returns error", func() { - mockSearchDB := mocks.RepoDBMock{ - FilterTagsFn: func(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, + mockSearchDB := mocks.MetaDBMock{ + FilterTagsFn: func(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, } @@ -707,14 +728,16 @@ func TestImageListForDigest(t *testing.T) { }) Convey("invalid manifest blob", func() { - mockSearchDB := mocks.RepoDBMock{ - FilterTagsFn: func(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + mockSearchDB := mocks.MetaDBMock{ + FilterTagsFn: func(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "test", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest}, }, Stars: 100, @@ -729,7 +752,7 @@ func TestImageListForDigest(t *testing.T) { So(err, ShouldBeNil) manifestBlob := []byte("invalid") - manifestMetaDatas := map[string]repodb.ManifestMetadata{ + manifestMetaDatas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: manifestBlob, ConfigBlob: configBlob, @@ -737,7 +760,7 @@ func TestImageListForDigest(t *testing.T) { }, } - return repos, manifestMetaDatas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetaDatas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -755,14 +778,16 @@ func TestImageListForDigest(t *testing.T) { manifestDigest := godigest.FromBytes(manifestBlob).String() - mockSearchDB := mocks.RepoDBMock{ - FilterTagsFn: func(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + mockSearchDB := mocks.MetaDBMock{ + FilterTagsFn: func(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "test", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: manifestDigest, MediaType: ispec.MediaTypeImageManifest}, }, Stars: 100, @@ -772,7 +797,7 @@ func TestImageListForDigest(t *testing.T) { configBlob, err := json.Marshal(ispec.ImageConfig{}) So(err, ShouldBeNil) - manifestMetaDatas := map[string]repodb.ManifestMetadata{ + manifestMetaDatas := map[string]mTypes.ManifestMetadata{ manifestDigest: { ManifestBlob: manifestBlob, ConfigBlob: configBlob, @@ -791,7 +816,7 @@ func TestImageListForDigest(t *testing.T) { repos[0].Tags = matchedTags - return repos, manifestMetaDatas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetaDatas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -828,14 +853,16 @@ func TestImageListForDigest(t *testing.T) { configDigest := godigest.FromBytes(configBlob) - mockSearchDB := mocks.RepoDBMock{ - FilterTagsFn: func(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + mockSearchDB := mocks.MetaDBMock{ + FilterTagsFn: func(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "test", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: manifestDigest, MediaType: ispec.MediaTypeImageManifest}, }, Stars: 100, @@ -849,7 +876,7 @@ func TestImageListForDigest(t *testing.T) { }) So(err, ShouldBeNil) - manifestMetaDatas := map[string]repodb.ManifestMetadata{ + manifestMetaDatas := map[string]mTypes.ManifestMetadata{ manifestDigest: { ManifestBlob: manifestBlob, ConfigBlob: configBlob, @@ -869,7 +896,7 @@ func TestImageListForDigest(t *testing.T) { repos[0].Tags = matchedTags - return repos, manifestMetaDatas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetaDatas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -902,14 +929,16 @@ func TestImageListForDigest(t *testing.T) { layerDigest := godigest.Digest("validDigest") - mockSearchDB := mocks.RepoDBMock{ - FilterTagsFn: func(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + mockSearchDB := mocks.MetaDBMock{ + FilterTagsFn: func(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "test", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: manifestDigest, MediaType: ispec.MediaTypeImageManifest}, }, Stars: 100, @@ -925,7 +954,7 @@ func TestImageListForDigest(t *testing.T) { }) So(err, ShouldBeNil) - manifestMetaDatas := map[string]repodb.ManifestMetadata{ + manifestMetaDatas := map[string]mTypes.ManifestMetadata{ manifestDigest: { ManifestBlob: manifestBlob, ConfigBlob: configBlob, @@ -945,7 +974,7 @@ func TestImageListForDigest(t *testing.T) { repos[0].Tags = matchedTags - return repos, manifestMetaDatas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetaDatas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -976,14 +1005,16 @@ func TestImageListForDigest(t *testing.T) { configBlob, err := json.Marshal(ispec.Image{}) So(err, ShouldBeNil) - mockSearchDB := mocks.RepoDBMock{ - FilterTagsFn: func(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + mockSearchDB := mocks.MetaDBMock{ + FilterTagsFn: func(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "test", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: manifestDigest, MediaType: ispec.MediaTypeImageManifest}, "1.0.2": {Digest: manifestDigest, MediaType: ispec.MediaTypeImageManifest}, }, @@ -991,7 +1022,7 @@ func TestImageListForDigest(t *testing.T) { }, } - manifestMetaDatas := map[string]repodb.ManifestMetadata{ + manifestMetaDatas := map[string]mTypes.ManifestMetadata{ manifestDigest: { ManifestBlob: manifestBlob, ConfigBlob: configBlob, @@ -1014,7 +1045,7 @@ func TestImageListForDigest(t *testing.T) { repos[i].Tags = matchedTags } - return repos, manifestMetaDatas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetaDatas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -1045,23 +1076,23 @@ func TestImageListForDigest(t *testing.T) { configBlob, err := json.Marshal(ispec.Image{}) So(err, ShouldBeNil) - mockSearchDB := mocks.RepoDBMock{ - FilterTagsFn: func(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, + mockSearchDB := mocks.MetaDBMock{ + FilterTagsFn: func(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - pageFinder, err := repodb.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, + pageFinder, err := pagination.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, common.PageInfo{}, err } - repos := []repodb.RepoMetadata{ + repos := []mTypes.RepoMetadata{ { Name: "test", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: manifestDigest, MediaType: ispec.MediaTypeImageManifest}, "1.0.2": {Digest: manifestDigest, MediaType: ispec.MediaTypeImageManifest}, }, @@ -1069,7 +1100,7 @@ func TestImageListForDigest(t *testing.T) { }, } - manifestMetaDatas := map[string]repodb.ManifestMetadata{ + manifestMetaDatas := map[string]mTypes.ManifestMetadata{ manifestDigest: { ManifestBlob: manifestBlob, ConfigBlob: configBlob, @@ -1091,14 +1122,14 @@ func TestImageListForDigest(t *testing.T) { repos[i].Tags = matchedTags - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repo, }) } repos, _ = pageFinder.Page() - return repos, manifestMetaDatas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetaDatas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -1128,15 +1159,15 @@ func TestGetImageSummary(t *testing.T) { graphql.DefaultRecover) Convey("Media Type: ImageManifest", func() { - Convey("repoDB.GetManifestMeta fails", func() { + Convey("metaDB.GetManifestMeta fails", func() { var ( - repoDB = mocks.RepoDBMock{ - GetManifestDataFn: func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{}, ErrTestError + metaDB = mocks.MetaDBMock{ + GetManifestDataFn: func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{}, ErrTestError }, - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": {MediaType: ispec.MediaTypeImageManifest, Digest: "digest"}, }, }, nil @@ -1146,16 +1177,16 @@ func TestGetImageSummary(t *testing.T) { log = log.NewLogger("debug", "") ) - _, err := getImageSummary(responseContext, "repo", "tag", nil, repoDB, mocks.CveInfoMock{}, log) + _, err := getImageSummary(responseContext, "repo", "tag", nil, metaDB, mocks.CveInfoMock{}, log) So(err, ShouldNotBeNil) }) Convey("0 len return", func() { var ( - repoDB = mocks.RepoDBMock{ - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB = mocks.MetaDBMock{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": {MediaType: ispec.MediaTypeImageManifest, Digest: "digest"}, }, }, nil @@ -1165,19 +1196,19 @@ func TestGetImageSummary(t *testing.T) { log = log.NewLogger("debug", "") ) - _, err := getImageSummary(responseContext, "repo", "tag", nil, repoDB, mocks.CveInfoMock{}, log) + _, err := getImageSummary(responseContext, "repo", "tag", nil, metaDB, mocks.CveInfoMock{}, log) So(err, ShouldBeNil) }) Convey("digest != nil && *digest != actual image digest", func() { var ( - repoDB = mocks.RepoDBMock{ - GetManifestMetaFn: func(repo string, manifestDigest godigest.Digest) (repodb.ManifestMetadata, error) { - return repodb.ManifestMetadata{}, ErrTestError + metaDB = mocks.MetaDBMock{ + GetManifestMetaFn: func(repo string, manifestDigest godigest.Digest) (mTypes.ManifestMetadata, error) { + return mTypes.ManifestMetadata{}, ErrTestError }, - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": {MediaType: ispec.MediaTypeImageManifest, Digest: "digest"}, }, }, nil @@ -1189,21 +1220,21 @@ func TestGetImageSummary(t *testing.T) { digest = "wrongDigest" ) - _, err := getImageSummary(responseContext, "repo", "tag", &digest, repoDB, mocks.CveInfoMock{}, log) + _, err := getImageSummary(responseContext, "repo", "tag", &digest, metaDB, mocks.CveInfoMock{}, log) So(err, ShouldNotBeNil) }) }) Convey("Media Type: ImageIndex", func() { - Convey("repoDB.GetIndexData fails", func() { + Convey("metaDB.GetIndexData fails", func() { var ( - repoDB = mocks.RepoDBMock{ - GetIndexDataFn: func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{}, ErrTestError + metaDB = mocks.MetaDBMock{ + GetIndexDataFn: func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{}, ErrTestError }, - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": {MediaType: ispec.MediaTypeImageIndex, Digest: "digest"}, }, }, nil @@ -1213,21 +1244,21 @@ func TestGetImageSummary(t *testing.T) { log = log.NewLogger("debug", "") ) - _, err := getImageSummary(responseContext, "repo", "tag", nil, repoDB, mocks.CveInfoMock{}, log) + _, err := getImageSummary(responseContext, "repo", "tag", nil, metaDB, mocks.CveInfoMock{}, log) So(err, ShouldNotBeNil) }) Convey("json.Unmarshal(indexData.IndexBlob, &indexContent) fails", func() { var ( - repoDB = mocks.RepoDBMock{ - GetIndexDataFn: func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{ + metaDB = mocks.MetaDBMock{ + GetIndexDataFn: func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{ IndexBlob: []byte("bad json"), }, nil }, - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": {MediaType: ispec.MediaTypeImageIndex, Digest: "digest"}, }, }, nil @@ -1237,7 +1268,7 @@ func TestGetImageSummary(t *testing.T) { log = log.NewLogger("debug", "") ) - _, err := getImageSummary(responseContext, "repo", "tag", nil, repoDB, mocks.CveInfoMock{}, log) + _, err := getImageSummary(responseContext, "repo", "tag", nil, metaDB, mocks.CveInfoMock{}, log) So(err, ShouldNotBeNil) }) @@ -1254,15 +1285,15 @@ func TestGetImageSummary(t *testing.T) { indexBlob, err := json.Marshal(index) So(err, ShouldBeNil) - repoDB := mocks.RepoDBMock{ - GetIndexDataFn: func(indexDigest godigest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{ + metaDB := mocks.MetaDBMock{ + GetIndexDataFn: func(indexDigest godigest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{ IndexBlob: indexBlob, }, nil }, - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": {MediaType: ispec.MediaTypeImageIndex, Digest: "digest"}, }, }, nil @@ -1275,16 +1306,16 @@ func TestGetImageSummary(t *testing.T) { Convey("digest not found", func() { wrongDigest := "wrongDigest" - _, err = getImageSummary(responseContext, "repo", "tag", &wrongDigest, repoDB, mocks.CveInfoMock{}, log) + _, err = getImageSummary(responseContext, "repo", "tag", &wrongDigest, metaDB, mocks.CveInfoMock{}, log) So(err, ShouldNotBeNil) }) Convey("GetManifestData error", func() { - repoDB.GetManifestDataFn = func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{}, ErrTestError + metaDB.GetManifestDataFn = func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{}, ErrTestError } - _, err = getImageSummary(responseContext, "repo", "tag", &goodDigest, repoDB, mocks.CveInfoMock{}, log) + _, err = getImageSummary(responseContext, "repo", "tag", &goodDigest, metaDB, mocks.CveInfoMock{}, log) So(err, ShouldNotBeNil) }) }) @@ -1292,10 +1323,10 @@ func TestGetImageSummary(t *testing.T) { Convey("Media Type: not supported", func() { var ( - repoDB = mocks.RepoDBMock{ - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB = mocks.MetaDBMock{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tag": {MediaType: "unknown", Digest: "digest"}, }, }, nil @@ -1305,7 +1336,7 @@ func TestGetImageSummary(t *testing.T) { log = log.NewLogger("debug", "") ) - _, err := getImageSummary(responseContext, "repo", "tag", nil, repoDB, mocks.CveInfoMock{}, log) + _, err := getImageSummary(responseContext, "repo", "tag", nil, metaDB, mocks.CveInfoMock{}, log) So(err, ShouldBeNil) }) }) @@ -1315,8 +1346,8 @@ func TestFilterBaseImagesFn(t *testing.T) { Convey("FilterBaseImages", t, func() { filterFunc := filterBaseImages(&gql_generated.ImageSummary{}) ok := filterFunc( - repodb.RepoMetadata{}, - repodb.ManifestMetadata{ + mTypes.RepoMetadata{}, + mTypes.ManifestMetadata{ ManifestBlob: []byte("bad json"), }, ) @@ -1328,14 +1359,14 @@ func TestImageList(t *testing.T) { Convey("getImageList", t, func() { testLogger := log.NewLogger("debug", "") Convey("no page requested, SearchRepoFn returns error", func() { - mockSearchDB := mocks.RepoDBMock{ - FilterTagsFn: func(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, + mockSearchDB := mocks.MetaDBMock{ + FilterTagsFn: func(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, - map[string]repodb.IndexData{}, common.PageInfo{}, ErrTestError + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, + map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, } @@ -1347,23 +1378,25 @@ func TestImageList(t *testing.T) { }) Convey("valid repoList returned", func() { - mockSearchDB := mocks.RepoDBMock{ - FilterTagsFn: func(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { - repos := []repodb.RepoMetadata{ + mockSearchDB := mocks.MetaDBMock{ + FilterTagsFn: func(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + common.PageInfo, error, + ) { + repos := []mTypes.RepoMetadata{ { Name: "test", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": { Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest, }, }, - Signatures: map[string]repodb.ManifestSignatures{ + Signatures: map[string]mTypes.ManifestSignatures{ "digestTag1.0.1": { - "cosign": []repodb.SignatureInfo{ - {SignatureManifestDigest: "testSignature", LayersInfo: []repodb.LayerInfo{}}, + "cosign": []mTypes.SignatureInfo{ + {SignatureManifestDigest: "testSignature", LayersInfo: []mTypes.LayerInfo{}}, }, }, }, @@ -1381,20 +1414,20 @@ func TestImageList(t *testing.T) { manifestBlob, err := json.Marshal(ispec.Manifest{}) So(err, ShouldBeNil) - manifestMetaDatas := map[string]repodb.ManifestMetadata{ + manifestMetaDatas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: manifestBlob, ConfigBlob: configBlob, DownloadCount: 0, - Signatures: repodb.ManifestSignatures{ - "cosign": []repodb.SignatureInfo{ + Signatures: mTypes.ManifestSignatures{ + "cosign": []mTypes.SignatureInfo{ {SignatureManifestDigest: "digestSignature1"}, }, }, }, } - return repos, manifestMetaDatas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetaDatas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } @@ -1430,15 +1463,15 @@ func TestGetReferrers(t *testing.T) { Convey("referredDigest is empty", func() { testLogger := log.NewLogger("debug", "") - _, err := getReferrers(mocks.RepoDBMock{}, "test", "", nil, testLogger) + _, err := getReferrers(mocks.MetaDBMock{}, "test", "", nil, testLogger) So(err, ShouldNotBeNil) }) Convey("GetReferrers returns error", func() { testLogger := log.NewLogger("debug", "") - mockedStore := mocks.RepoDBMock{ + mockedStore := mocks.MetaDBMock{ GetReferrersInfoFn: func(repo string, referredDigest godigest.Digest, artifactTypes []string, - ) ([]repodb.ReferrerInfo, error) { + ) ([]mTypes.ReferrerInfo, error) { return nil, ErrTestError }, } @@ -1458,10 +1491,10 @@ func TestGetReferrers(t *testing.T) { "key": "value", }, } - mockedStore := mocks.RepoDBMock{ + mockedStore := mocks.MetaDBMock{ GetReferrersInfoFn: func(repo string, referredDigest godigest.Digest, artifactTypes []string, - ) ([]repodb.ReferrerInfo, error) { - return []repodb.ReferrerInfo{ + ) ([]mTypes.ReferrerInfo, error) { + return []mTypes.ReferrerInfo{ { Digest: referrerDescriptor.Digest.String(), MediaType: referrerDescriptor.MediaType, @@ -1494,7 +1527,7 @@ func TestQueryResolverErrors(t *testing.T) { resolverConfig := NewResolver( log, storage.StoreController{}, - mocks.RepoDBMock{}, + mocks.MetaDBMock{}, mocks.CveInfoMock{}, ) @@ -1532,11 +1565,11 @@ func TestQueryResolverErrors(t *testing.T) { storage.StoreController{ DefaultStore: mocks.MockedImageStore{}, }, - mocks.RepoDBMock{ - GetMultipleRepoMetaFn: func(ctx context.Context, filter func(repoMeta repodb.RepoMetadata) bool, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, error) { - return []repodb.RepoMetadata{}, ErrTestError + mocks.MetaDBMock{ + GetMultipleRepoMetaFn: func(ctx context.Context, filter func(repoMeta mTypes.RepoMetadata) bool, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, error) { + return []mTypes.RepoMetadata{}, ErrTestError }, }, mocks.CveInfoMock{}, @@ -1556,13 +1589,13 @@ func TestQueryResolverErrors(t *testing.T) { storage.StoreController{ DefaultStore: mocks.MockedImageStore{}, }, - mocks.RepoDBMock{ + mocks.MetaDBMock{ FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, }, @@ -1583,13 +1616,13 @@ func TestQueryResolverErrors(t *testing.T) { storage.StoreController{ DefaultStore: mocks.MockedImageStore{}, }, - mocks.RepoDBMock{ + mocks.MetaDBMock{ FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, }, @@ -1610,10 +1643,10 @@ func TestQueryResolverErrors(t *testing.T) { storage.StoreController{ DefaultStore: mocks.MockedImageStore{}, }, - mocks.RepoDBMock{ - SearchReposFn: func(ctx context.Context, searchText string, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + mocks.MetaDBMock{ + SearchReposFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { return nil, nil, nil, common.PageInfo{}, ErrTestError @@ -1634,10 +1667,10 @@ func TestQueryResolverErrors(t *testing.T) { resolverConfig := NewResolver( log, storage.StoreController{}, - mocks.RepoDBMock{ - SearchReposFn: func(ctx context.Context, searchText string, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + mocks.MetaDBMock{ + SearchReposFn: func(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { return nil, nil, nil, common.PageInfo{}, ErrTestError @@ -1658,13 +1691,13 @@ func TestQueryResolverErrors(t *testing.T) { resolverConfig := NewResolver( log, storage.StoreController{}, - mocks.RepoDBMock{ + mocks.MetaDBMock{ FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, }, @@ -1692,9 +1725,9 @@ func TestQueryResolverErrors(t *testing.T) { }, }, }, - mocks.RepoDBMock{ - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{}, ErrTestError + mocks.MetaDBMock{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{}, ErrTestError }, }, mocks.CveInfoMock{}, @@ -1721,9 +1754,9 @@ func TestQueryResolverErrors(t *testing.T) { }, }, }, - mocks.RepoDBMock{ - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{}, ErrTestError + mocks.MetaDBMock{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{}, ErrTestError }, }, mocks.CveInfoMock{}, @@ -1755,25 +1788,25 @@ func TestQueryResolverErrors(t *testing.T) { resolverConfig := NewResolver( log, storage.StoreController{}, - mocks.RepoDBMock{ + mocks.MetaDBMock{ FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ Name: "repo", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag": {Digest: manifestDigest.String(), MediaType: ispec.MediaTypeImageManifest}, }, }, nil }, - GetManifestMetaFn: func(repo string, manifestDigest godigest.Digest) (repodb.ManifestMetadata, error) { - return repodb.ManifestMetadata{ + GetManifestMetaFn: func(repo string, manifestDigest godigest.Digest) (mTypes.ManifestMetadata, error) { + return mTypes.ManifestMetadata{ ManifestBlob: manifestBlob, ConfigBlob: configBlob, }, nil @@ -1803,7 +1836,7 @@ func TestQueryResolverErrors(t *testing.T) { }, }, }, - mocks.RepoDBMock{}, + mocks.MetaDBMock{}, mocks.CveInfoMock{}, ) @@ -1818,7 +1851,7 @@ func TestQueryResolverErrors(t *testing.T) { } func TestCVEResolvers(t *testing.T) { //nolint:gocyclo - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: t.TempDir(), } @@ -1826,19 +1859,19 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo AMD := "amd" ARM := "arm64" - boltDriver, err := bolt.GetBoltDriver(params) + boltDriver, err := boltdb.GetBoltDriver(params) if err != nil { panic(err) } log := log.NewLogger("debug", "") - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) + metaDB, err := boltdb.New(boltDriver, log) if err != nil { panic(err) } - // Create repodb data for scannable image with vulnerabilities + // Create metadb data for scannable image with vulnerabilities // Create manifets metadata first timeStamp1 := time.Date(2008, 1, 1, 12, 0, 0, 0, time.UTC) @@ -1871,14 +1904,14 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo panic(err) } - repoMeta1 := repodb.ManifestData{ + repoMeta1 := mTypes.ManifestData{ ManifestBlob: manifestBlob1, ConfigBlob: configBlob1, } digest1 := godigest.FromBytes(manifestBlob1) - err = repoDB.SetManifestData(digest1, repoMeta1) + err = metaDB.SetManifestData(digest1, repoMeta1) if err != nil { panic(err) } @@ -1914,14 +1947,14 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo panic(err) } - repoMeta2 := repodb.ManifestData{ + repoMeta2 := mTypes.ManifestData{ ManifestBlob: manifestBlob2, ConfigBlob: configBlob2, } digest2 := godigest.FromBytes(manifestBlob2) - err = repoDB.SetManifestData(digest2, repoMeta2) + err = metaDB.SetManifestData(digest2, repoMeta2) if err != nil { panic(err) } @@ -1957,14 +1990,14 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo panic(err) } - repoMeta3 := repodb.ManifestData{ + repoMeta3 := mTypes.ManifestData{ ManifestBlob: manifestBlob3, ConfigBlob: configBlob3, } digest3 := godigest.FromBytes(manifestBlob3) - err = repoDB.SetManifestData(digest3, repoMeta3) + err = metaDB.SetManifestData(digest3, repoMeta3) if err != nil { panic(err) } @@ -1986,7 +2019,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo for image, digest := range tagsMap { repo, tag := common.GetImageDirAndTag(image) - err := repoDB.SetRepoReference(repo, tag, digest, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo, tag, digest, ispec.MediaTypeImageManifest) if err != nil { panic(err) } @@ -1994,7 +2027,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo // Create the repo metadata using previously defined manifests - // RepoDB loaded with initial data, mock the scanner + // MetaDB loaded with initial data, mock the scanner severities := map[string]int{ "UNKNOWN": 0, "LOW": 1, @@ -2084,7 +2117,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo cveInfo := &cveinfo.BaseCveInfo{ Log: log, Scanner: scanner, - RepoDB: repoDB, + MetaDB: metaDB, } Convey("Get CVE list for image ", t, func() { @@ -2185,7 +2218,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) - images, err := getImageListForCVE(responseContext, "CVE1", cveInfo, nil, nil, repoDB, log) + images, err := getImageListForCVE(responseContext, "CVE1", cveInfo, nil, nil, metaDB, log) So(err, ShouldBeNil) expectedImages := []string{ @@ -2198,7 +2231,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo So(fmt.Sprintf("%s:%s", *image.RepoName, *image.Tag), ShouldBeIn, expectedImages) } - images, err = getImageListForCVE(responseContext, "CVE2", cveInfo, nil, nil, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE2", cveInfo, nil, nil, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2212,7 +2245,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo So(fmt.Sprintf("%s:%s", *image.RepoName, *image.Tag), ShouldBeIn, expectedImages) } - images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, nil, nil, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, nil, nil, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2234,7 +2267,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput := getPageInput(1, 0) - images, err := getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, repoDB, log) + images, err := getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages := []string{ @@ -2248,7 +2281,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(1, 1) - images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2262,19 +2295,19 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(1, 2) - images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) So(len(images.Results), ShouldEqual, 0) pageInput = getPageInput(1, 5) - images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) So(len(images.Results), ShouldEqual, 0) pageInput = getPageInput(2, 0) - images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2289,7 +2322,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(5, 0) - images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2304,7 +2337,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(5, 1) - images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2318,19 +2351,19 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(5, 2) - images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) So(len(images.Results), ShouldEqual, 0) pageInput = getPageInput(5, 5) - images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) So(len(images.Results), ShouldEqual, 0) pageInput = getPageInput(5, 0) - images, err = getImageListForCVE(responseContext, "CVE2", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE2", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2346,7 +2379,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(5, 3) - images, err = getImageListForCVE(responseContext, "CVE2", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE2", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2361,7 +2394,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(5, 0) - images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2376,7 +2409,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(5, 5) - images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2391,7 +2424,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(5, 10) - images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2406,7 +2439,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo amdFilter := &gql_generated.Filter{Arch: []*string{&AMD}} pageInput = getPageInput(5, 0) - images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, amdFilter, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, amdFilter, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2422,7 +2455,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(2, 2) - images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, amdFilter, pageInput, repoDB, log) + images, err = getImageListForCVE(responseContext, "CVE3", cveInfo, amdFilter, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2441,7 +2474,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) - images, err := getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, nil, repoDB, log) + images, err := getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, nil, metaDB, log) So(err, ShouldBeNil) expectedImages := []string{ @@ -2453,7 +2486,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo So(fmt.Sprintf("%s:%s", *image.RepoName, *image.Tag), ShouldBeIn, expectedImages) } - images, err = getImageListWithCVEFixed(responseContext, "CVE2", "repo1", cveInfo, nil, nil, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE2", "repo1", cveInfo, nil, nil, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2465,7 +2498,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo So(fmt.Sprintf("%s:%s", *image.RepoName, *image.Tag), ShouldBeIn, expectedImages) } - images, err = getImageListWithCVEFixed(responseContext, "CVE3", "repo1", cveInfo, nil, nil, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE3", "repo1", cveInfo, nil, nil, metaDB, log) So(err, ShouldBeNil) So(len(images.Results), ShouldEqual, 0) }) @@ -2477,7 +2510,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput := getPageInput(1, 0) - images, err := getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err := getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages := []string{ @@ -2491,7 +2524,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(1, 1) - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2505,7 +2538,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(1, 2) - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2519,19 +2552,19 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(1, 3) - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) So(len(images.Results), ShouldEqual, 0) pageInput = getPageInput(1, 10) - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) So(len(images.Results), ShouldEqual, 0) pageInput = getPageInput(2, 0) - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2545,7 +2578,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(2, 1) - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2559,7 +2592,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(2, 2) - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2573,7 +2606,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(5, 0) - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2587,7 +2620,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(5, 0) - images, err = getImageListWithCVEFixed(responseContext, "CVE2", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE2", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{ @@ -2601,7 +2634,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(5, 2) - images, err = getImageListWithCVEFixed(responseContext, "CVE2", "repo1", cveInfo, nil, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE2", "repo1", cveInfo, nil, pageInput, metaDB, log) So(err, ShouldBeNil) So(len(images.Results), ShouldEqual, 0) @@ -2610,7 +2643,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(3, 0) - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, amdFilter, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, amdFilter, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{"repo1:1.0.1"} @@ -2620,7 +2653,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo So(fmt.Sprintf("%s:%s", *image.RepoName, *image.Tag), ShouldBeIn, expectedImages) } - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, armFilter, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, armFilter, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{"repo1:1.1.0", "repo1:latest"} @@ -2632,7 +2665,7 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo pageInput = getPageInput(1, 1) - images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, armFilter, pageInput, repoDB, log) + images, err = getImageListWithCVEFixed(responseContext, "CVE1", "repo1", cveInfo, armFilter, pageInput, metaDB, log) So(err, ShouldBeNil) expectedImages = []string{"repo1:latest"} @@ -2655,11 +2688,11 @@ func TestCVEResolvers(t *testing.T) { //nolint:gocyclo }, nil, nil, - mocks.RepoDBMock{ - GetMultipleRepoMetaFn: func(ctx context.Context, filter func(repoMeta repodb.RepoMetadata) bool, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, error) { - return []repodb.RepoMetadata{{}}, nil + mocks.MetaDBMock{ + GetMultipleRepoMetaFn: func(ctx context.Context, filter func(repoMeta mTypes.RepoMetadata) bool, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, error) { + return []mTypes.RepoMetadata{{}}, nil }, }, log, @@ -2679,21 +2712,21 @@ func getPageInput(limit int, offset int) *gql_generated.PageInput { } func TestDerivedImageList(t *testing.T) { - Convey("RepoDB FilterTags error", t, func() { - mockSearchDB := mocks.RepoDBMock{ + Convey("MetaDB FilterTags error", t, func() { + mockSearchDB := mocks.MetaDBMock{ FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return make([]repodb.RepoMetadata, 0), make(map[string]repodb.ManifestMetadata), - make(map[string]repodb.IndexData), common.PageInfo{}, ErrTestError + return make([]mTypes.RepoMetadata, 0), make(map[string]mTypes.ManifestMetadata), + make(map[string]mTypes.IndexData), common.PageInfo{}, ErrTestError }, - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{}, ErrTestError + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{}, ErrTestError }, - GetManifestMetaFn: func(repo string, manifestDigest godigest.Digest) (repodb.ManifestMetadata, error) { - return repodb.ManifestMetadata{}, ErrTestError + GetManifestMetaFn: func(repo string, manifestDigest godigest.Digest) (mTypes.ManifestMetadata, error) { + return mTypes.ManifestMetadata{}, ErrTestError }, } responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, @@ -2707,7 +2740,7 @@ func TestDerivedImageList(t *testing.T) { }) //nolint: dupl - Convey("RepoDB FilterTags no repo available", t, func() { + Convey("MetaDB FilterTags no repo available", t, func() { configBlob, err := json.Marshal(ispec.Image{ Config: ispec.ImageConfig{ Labels: map[string]string{}, @@ -2722,25 +2755,25 @@ func TestDerivedImageList(t *testing.T) { manifestDigest := godigest.FromBytes(manifestBlob) - mockSearchDB := mocks.RepoDBMock{ + mockSearchDB := mocks.MetaDBMock{ FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: manifestDigest.String(), MediaType: ispec.MediaTypeImageManifest}, }, }, nil }, - GetManifestMetaFn: func(repo string, manifestDigest godigest.Digest) (repodb.ManifestMetadata, error) { - return repodb.ManifestMetadata{ + GetManifestMetaFn: func(repo string, manifestDigest godigest.Digest) (mTypes.ManifestMetadata, error) { + return mTypes.ManifestMetadata{ ManifestBlob: manifestBlob, ConfigBlob: configBlob, }, nil @@ -2837,55 +2870,56 @@ func TestDerivedImageList(t *testing.T) { }) So(err, ShouldBeNil) - manifestMetas := map[string]repodb.ManifestMetadata{ + manifestMetas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: manifestBlob, ConfigBlob: configBlob, DownloadCount: 100, - Signatures: make(repodb.ManifestSignatures), + Signatures: make(mTypes.ManifestSignatures), }, "digestTag1.0.2": { ManifestBlob: derivedManifestBlob, ConfigBlob: configBlob, DownloadCount: 100, - Signatures: make(repodb.ManifestSignatures), + Signatures: make(mTypes.ManifestSignatures), }, "digestTag1.0.3": { ManifestBlob: derivedManifestBlob, ConfigBlob: configBlob, DownloadCount: 100, - Signatures: make(repodb.ManifestSignatures), + Signatures: make(mTypes.ManifestSignatures), }, } manifestDigest := godigest.FromBytes(manifestBlob) - mockSearchDB := mocks.RepoDBMock{ - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ + mockSearchDB := mocks.MetaDBMock{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: manifestDigest.String(), MediaType: ispec.MediaTypeImageManifest}, }, }, nil }, - GetManifestDataFn: func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{ + GetManifestDataFn: func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{ ManifestBlob: manifestBlob, ConfigBlob: configBlob, }, nil }, FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - pageFinder, err := repodb.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, + requestedPage.SortBy) So(err, ShouldBeNil) - repos := []repodb.RepoMetadata{ + repos := []mTypes.RepoMetadata{ { Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest}, "1.0.2": {Digest: "digestTag1.0.2", MediaType: ispec.MediaTypeImageManifest}, "1.0.3": {Digest: "digestTag1.0.3", MediaType: ispec.MediaTypeImageManifest}, @@ -2908,13 +2942,13 @@ func TestDerivedImageList(t *testing.T) { repos[i].Tags = matchedTags - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repo, }) } repos, pageInfo := pageFinder.Page() - return repos, manifestMetas, map[string]repodb.IndexData{}, pageInfo, nil + return repos, manifestMetas, map[string]mTypes.IndexData{}, pageInfo, nil }, } @@ -2951,21 +2985,21 @@ func TestDerivedImageList(t *testing.T) { } func TestBaseImageList(t *testing.T) { - Convey("RepoDB FilterTags error", t, func() { - mockSearchDB := mocks.RepoDBMock{ + Convey("MetaDB FilterTags error", t, func() { + mockSearchDB := mocks.MetaDBMock{ FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, common.PageInfo{}, ErrTestError }, - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{}, ErrTestError + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{}, ErrTestError }, - GetManifestDataFn: func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{}, ErrTestError + GetManifestDataFn: func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{}, ErrTestError }, } responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, @@ -2979,7 +3013,7 @@ func TestBaseImageList(t *testing.T) { }) //nolint: dupl - Convey("RepoDB FilterTags no repo available", t, func() { + Convey("MetaDB FilterTags no repo available", t, func() { configBlob, err := json.Marshal(ispec.Image{ Config: ispec.ImageConfig{ Labels: map[string]string{}, @@ -2994,25 +3028,25 @@ func TestBaseImageList(t *testing.T) { manifestDigest := godigest.FromBytes(manifestBlob) - mockSearchDB := mocks.RepoDBMock{ + mockSearchDB := mocks.MetaDBMock{ FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.2": {Digest: manifestDigest.String(), MediaType: ispec.MediaTypeImageManifest}, }, }, nil }, - GetManifestDataFn: func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{ + GetManifestDataFn: func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{ ManifestBlob: manifestBlob, ConfigBlob: configBlob, }, nil @@ -3109,49 +3143,50 @@ func TestBaseImageList(t *testing.T) { }) So(err, ShouldBeNil) - manifestMetas := map[string]repodb.ManifestMetadata{ + manifestMetas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: manifestBlob, ConfigBlob: configBlob, DownloadCount: 100, - Signatures: make(repodb.ManifestSignatures), + Signatures: make(mTypes.ManifestSignatures), }, "digestTag1.0.2": { ManifestBlob: derivedManifestBlob, ConfigBlob: configBlob, DownloadCount: 100, - Signatures: make(repodb.ManifestSignatures), + Signatures: make(mTypes.ManifestSignatures), }, } derivedManifestDigest := godigest.FromBytes(derivedManifestBlob) - mockSearchDB := mocks.RepoDBMock{ - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ + mockSearchDB := mocks.MetaDBMock{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.2": {Digest: derivedManifestDigest.String(), MediaType: ispec.MediaTypeImageManifest}, }, }, nil }, - GetManifestDataFn: func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{ + GetManifestDataFn: func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{ ManifestBlob: derivedManifestBlob, ConfigBlob: configBlob, }, nil }, FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - pageFinder, err := repodb.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, + requestedPage.SortBy) So(err, ShouldBeNil) - repos := []repodb.RepoMetadata{ + repos := []mTypes.RepoMetadata{ { Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest}, "1.0.3": {Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest}, "1.0.2": {Digest: "digestTag1.0.2", MediaType: ispec.MediaTypeImageManifest}, @@ -3174,14 +3209,14 @@ func TestBaseImageList(t *testing.T) { repos[i].Tags = matchedTags - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repo, }) } repos, pageInfo := pageFinder.Page() - return repos, manifestMetas, map[string]repodb.IndexData{}, pageInfo, nil + return repos, manifestMetas, map[string]mTypes.IndexData{}, pageInfo, nil }, } responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, @@ -3285,49 +3320,50 @@ func TestBaseImageList(t *testing.T) { }) So(err, ShouldBeNil) - manifestMetas := map[string]repodb.ManifestMetadata{ + manifestMetas := map[string]mTypes.ManifestMetadata{ "digestTag1.0.1": { ManifestBlob: manifestBlob, ConfigBlob: configBlob, DownloadCount: 100, - Signatures: make(repodb.ManifestSignatures), + Signatures: make(mTypes.ManifestSignatures), }, "digestTag1.0.2": { ManifestBlob: derivedManifestBlob, ConfigBlob: configBlob, DownloadCount: 100, - Signatures: make(repodb.ManifestSignatures), + Signatures: make(mTypes.ManifestSignatures), }, } derivedManifestDigest := godigest.FromBytes(derivedManifestBlob) - mockSearchDB := mocks.RepoDBMock{ - GetRepoMetaFn: func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ + mockSearchDB := mocks.MetaDBMock{ + GetRepoMetaFn: func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.2": {Digest: derivedManifestDigest.String(), MediaType: ispec.MediaTypeImageManifest}, }, }, nil }, - GetManifestDataFn: func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{ + GetManifestDataFn: func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{ ManifestBlob: derivedManifestBlob, ConfigBlob: configBlob, }, nil }, FilterTagsFn: func(ctx context.Context, - filterFunc repodb.FilterFunc, filter repodb.Filter, requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, + filterFunc mTypes.FilterFunc, filter mTypes.Filter, requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error, ) { - pageFinder, err := repodb.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, + requestedPage.SortBy) So(err, ShouldBeNil) - repos := []repodb.RepoMetadata{ + repos := []mTypes.RepoMetadata{ { Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "1.0.1": {Digest: "digestTag1.0.1", MediaType: ispec.MediaTypeImageManifest}, "1.0.2": {Digest: "digestTag1.0.2", MediaType: ispec.MediaTypeImageManifest}, }, @@ -3349,12 +3385,12 @@ func TestBaseImageList(t *testing.T) { repos[i].Tags = matchedTags - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repo, }) } - return repos, manifestMetas, map[string]repodb.IndexData{}, common.PageInfo{}, nil + return repos, manifestMetas, map[string]mTypes.IndexData{}, common.PageInfo{}, nil }, } responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, @@ -3375,10 +3411,10 @@ func TestExpandedRepoInfo(t *testing.T) { responseContext := graphql.WithResponseContext(context.Background(), graphql.DefaultErrorPresenter, graphql.DefaultRecover) - repoDB := mocks.RepoDBMock{ - GetUserRepoMetaFn: func(ctx context.Context, repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{ + metaDB := mocks.MetaDBMock{ + GetUserRepoMetaFn: func(ctx context.Context, repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{ "tagManifest": { Digest: "errorDigest", MediaType: ispec.MediaTypeImageManifest, @@ -3406,18 +3442,18 @@ func TestExpandedRepoInfo(t *testing.T) { }, }, nil }, - GetManifestDataFn: func(manifestDigest godigest.Digest) (repodb.ManifestData, error) { + GetManifestDataFn: func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { switch manifestDigest { case "errorDigest": - return repodb.ManifestData{}, ErrTestError + return mTypes.ManifestData{}, ErrTestError default: - return repodb.ManifestData{ + return mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }, nil } }, - GetIndexDataFn: func(indexDigest godigest.Digest) (repodb.IndexData, error) { + GetIndexDataFn: func(indexDigest godigest.Digest) (mTypes.IndexData, error) { goodIndexBadManifestsBlob, err := json.Marshal(ispec.Index{ Manifests: []ispec.Descriptor{ { @@ -3440,22 +3476,22 @@ func TestExpandedRepoInfo(t *testing.T) { switch indexDigest { case "errorIndexDigest": - return repodb.IndexData{}, ErrTestError + return mTypes.IndexData{}, ErrTestError case "goodIndexBadManifests": - return repodb.IndexData{ + return mTypes.IndexData{ IndexBlob: goodIndexBadManifestsBlob, }, nil case "goodIndexGoodManfest": - return repodb.IndexData{ + return mTypes.IndexData{ IndexBlob: goodIndexGoodManfestBlob, }, nil default: - return repodb.IndexData{}, nil + return mTypes.IndexData{}, nil } }, } - _, err := expandedRepoInfo(responseContext, "repo", repoDB, mocks.CveInfoMock{}, log) + _, err := expandedRepoInfo(responseContext, "repo", metaDB, mocks.CveInfoMock{}, log) So(err, ShouldBeNil) }) @@ -3473,7 +3509,7 @@ func TestExpandedRepoInfo(t *testing.T) { responseContext := graphql.WithResponseContext(ctx, graphql.DefaultErrorPresenter, graphql.DefaultRecover) - _, err := expandedRepoInfo(responseContext, "repo", mocks.RepoDBMock{}, mocks.CveInfoMock{}, log) + _, err := expandedRepoInfo(responseContext, "repo", mocks.MetaDBMock{}, mocks.CveInfoMock{}, log) So(err, ShouldBeNil) }) } @@ -3483,8 +3519,8 @@ func TestFilterFunctions(t *testing.T) { Convey("FilterByDigest bad manifest blob", func() { filterFunc := FilterByDigest("digest") ok := filterFunc( - repodb.RepoMetadata{}, - repodb.ManifestMetadata{ + mTypes.RepoMetadata{}, + mTypes.ManifestMetadata{ ManifestBlob: []byte("bad blob"), }, ) @@ -3494,8 +3530,8 @@ func TestFilterFunctions(t *testing.T) { Convey("filterDerivedImages bad manifest blob", func() { filterFunc := filterDerivedImages(&gql_generated.ImageSummary{}) ok := filterFunc( - repodb.RepoMetadata{}, - repodb.ManifestMetadata{ + mTypes.RepoMetadata{}, + mTypes.ManifestMetadata{ ManifestBlob: []byte("bad blob"), }, ) diff --git a/pkg/extensions/search/schema.resolvers.go b/pkg/extensions/search/schema.resolvers.go index ab29d6f3..e0cacfe2 100644 --- a/pkg/extensions/search/schema.resolvers.go +++ b/pkg/extensions/search/schema.resolvers.go @@ -34,7 +34,7 @@ func (r *queryResolver) ImageListForCve(ctx context.Context, id string, filter * filter = cleanFilter(filter) - return getImageListForCVE(ctx, id, r.cveInfo, filter, requestedPage, r.repoDB, r.log) + return getImageListForCVE(ctx, id, r.cveInfo, filter, requestedPage, r.metaDB, r.log) } // ImageListWithCVEFixed is the resolver for the ImageListWithCVEFixed field. @@ -45,14 +45,14 @@ func (r *queryResolver) ImageListWithCVEFixed(ctx context.Context, id string, im filter = cleanFilter(filter) - return getImageListWithCVEFixed(ctx, id, image, r.cveInfo, filter, requestedPage, r.repoDB, r.log) + return getImageListWithCVEFixed(ctx, id, image, r.cveInfo, filter, requestedPage, r.metaDB, r.log) } // ImageListForDigest is the resolver for the ImageListForDigest field. func (r *queryResolver) ImageListForDigest(ctx context.Context, id string, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedImagesResult, error) { r.log.Info().Msg("extracting repositories") - imgResultForDigest, err := getImageListForDigest(ctx, id, r.repoDB, r.cveInfo, requestedPage) + imgResultForDigest, err := getImageListForDigest(ctx, id, r.metaDB, r.cveInfo, requestedPage) return imgResultForDigest, err } @@ -61,7 +61,7 @@ func (r *queryResolver) ImageListForDigest(ctx context.Context, id string, reque func (r *queryResolver) RepoListWithNewestImage(ctx context.Context, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedReposResult, error) { r.log.Info().Msg("extension api: finding image list") - paginatedReposResult, err := repoListWithNewestImage(ctx, r.cveInfo, r.log, requestedPage, r.repoDB) + paginatedReposResult, err := repoListWithNewestImage(ctx, r.cveInfo, r.log, requestedPage, r.metaDB) if err != nil { r.log.Error().Err(err).Msg("unable to retrieve repo list") @@ -75,7 +75,7 @@ func (r *queryResolver) RepoListWithNewestImage(ctx context.Context, requestedPa func (r *queryResolver) ImageList(ctx context.Context, repo string, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedImagesResult, error) { r.log.Info().Msg("extension api: getting a list of all images") - imageList, err := getImageList(ctx, repo, r.repoDB, r.cveInfo, requestedPage, r.log) + imageList, err := getImageList(ctx, repo, r.metaDB, r.cveInfo, requestedPage, r.log) if err != nil { r.log.Error().Err(err).Str("repository", repo).Msg("unable to retrieve image list for repo") @@ -87,7 +87,7 @@ func (r *queryResolver) ImageList(ctx context.Context, repo string, requestedPag // ExpandedRepoInfo is the resolver for the ExpandedRepoInfo field. func (r *queryResolver) ExpandedRepoInfo(ctx context.Context, repo string) (*gql_generated.RepoInfo, error) { - repoInfo, err := expandedRepoInfo(ctx, repo, r.repoDB, r.cveInfo, r.log) + repoInfo, err := expandedRepoInfo(ctx, repo, r.metaDB, r.cveInfo, r.log) return repoInfo, err } @@ -101,7 +101,7 @@ func (r *queryResolver) GlobalSearch(ctx context.Context, query string, filter * query = cleanQuery(query) filter = cleanFilter(filter) - paginatedReposResult, images, layers, err := globalSearch(ctx, query, r.repoDB, filter, requestedPage, r.cveInfo, r.log) + paginatedReposResult, images, layers, err := globalSearch(ctx, query, r.metaDB, filter, requestedPage, r.cveInfo, r.log) return &gql_generated.GlobalSearchResult{ Page: paginatedReposResult.Page, @@ -113,14 +113,14 @@ func (r *queryResolver) GlobalSearch(ctx context.Context, query string, filter * // DependencyListForImage is the resolver for the DependencyListForImage field. func (r *queryResolver) DerivedImageList(ctx context.Context, image string, digest *string, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedImagesResult, error) { - derivedList, err := derivedImageList(ctx, image, digest, r.repoDB, requestedPage, r.cveInfo, r.log) + derivedList, err := derivedImageList(ctx, image, digest, r.metaDB, requestedPage, r.cveInfo, r.log) return derivedList, err } // BaseImageList is the resolver for the BaseImageList field. func (r *queryResolver) BaseImageList(ctx context.Context, image string, digest *string, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedImagesResult, error) { - imageList, err := baseImageList(ctx, image, digest, r.repoDB, requestedPage, r.cveInfo, r.log) + imageList, err := baseImageList(ctx, image, digest, r.metaDB, requestedPage, r.cveInfo, r.log) return imageList, err } @@ -133,12 +133,12 @@ func (r *queryResolver) Image(ctx context.Context, image string) (*gql_generated return &gql_generated.ImageSummary{}, gqlerror.Errorf("no reference provided") } - return getImageSummary(ctx, repo, tag, nil, r.repoDB, r.cveInfo, r.log) + return getImageSummary(ctx, repo, tag, nil, r.metaDB, r.cveInfo, r.log) } // Referrers is the resolver for the Referrers field. func (r *queryResolver) Referrers(ctx context.Context, repo string, digest string, typeArg []string) ([]*gql_generated.Referrer, error) { - referrers, err := getReferrers(r.repoDB, repo, digest, typeArg, r.log) + referrers, err := getReferrers(r.metaDB, repo, digest, typeArg, r.log) if err != nil { r.log.Error().Err(err).Msg("unable to get referrers from default store") @@ -150,12 +150,12 @@ func (r *queryResolver) Referrers(ctx context.Context, repo string, digest strin // StarredRepos is the resolver for the StarredRepos field. func (r *queryResolver) StarredRepos(ctx context.Context, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedReposResult, error) { - return getStarredRepos(ctx, r.cveInfo, r.log, requestedPage, r.repoDB) + return getStarredRepos(ctx, r.cveInfo, r.log, requestedPage, r.metaDB) } // BookmarkedRepos is the resolver for the BookmarkedRepos field. func (r *queryResolver) BookmarkedRepos(ctx context.Context, requestedPage *gql_generated.PageInput) (*gql_generated.PaginatedReposResult, error) { - return getBookmarkedRepos(ctx, r.cveInfo, r.log, requestedPage, r.repoDB) + return getBookmarkedRepos(ctx, r.cveInfo, r.log, requestedPage, r.metaDB) } // Query returns gql_generated.QueryResolver implementation. diff --git a/pkg/extensions/search/search_test.go b/pkg/extensions/search/search_test.go index 2ee8f332..c757581e 100644 --- a/pkg/extensions/search/search_test.go +++ b/pkg/extensions/search/search_test.go @@ -38,7 +38,7 @@ import ( cveinfo "zotregistry.io/zot/pkg/extensions/search/cve" cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" storageConstants "zotregistry.io/zot/pkg/storage/constants" "zotregistry.io/zot/pkg/storage/local" @@ -222,8 +222,8 @@ func uploadNewRepoTag(tag string, repoName string, baseURL string, layers [][]by return err } -func getMockCveInfo(repoDB repodb.RepoDB, log log.Logger) cveinfo.CveInfo { - // RepoDB loaded with initial data, mock the scanner +func getMockCveInfo(metaDB mTypes.MetaDB, log log.Logger) cveinfo.CveInfo { + // MetaDB loaded with initial data, mock the scanner severities := map[string]int{ "UNKNOWN": 0, "LOW": 1, @@ -320,7 +320,7 @@ func getMockCveInfo(repoDB repodb.RepoDB, log log.Logger) cveinfo.CveInfo { imageDir := repo inputTag := reference - repoMeta, err := repoDB.GetRepoMeta(imageDir) + repoMeta, err := metaDB.GetRepoMeta(imageDir) if err != nil { return false, err } @@ -343,7 +343,7 @@ func getMockCveInfo(repoDB repodb.RepoDB, log log.Logger) cveinfo.CveInfo { return false, err } - manifestData, err := repoDB.GetManifestData(manifestDigest) + manifestData, err := metaDB.GetManifestData(manifestDigest) if err != nil { return false, err } @@ -373,7 +373,7 @@ func getMockCveInfo(repoDB repodb.RepoDB, log log.Logger) cveinfo.CveInfo { return &cveinfo.BaseCveInfo{ Log: log, Scanner: scanner, - RepoDB: repoDB, + MetaDB: metaDB, } } @@ -715,7 +715,7 @@ func TestRepoListWithNewestImage(t *testing.T) { panic(err) } - ctlr.CveInfo = getMockCveInfo(ctlr.RepoDB, ctlr.Log) + ctlr.CveInfo = getMockCveInfo(ctlr.MetaDB, ctlr.Log) go func() { if err := ctlr.Run(ctx); !errors.Is(err, http.ErrServerClosed) { @@ -3493,7 +3493,7 @@ func TestGlobalSearch(t *testing.T) { panic(err) } - ctlr.CveInfo = getMockCveInfo(ctlr.RepoDB, ctlr.Log) + ctlr.CveInfo = getMockCveInfo(ctlr.MetaDB, ctlr.Log) go func() { if err := ctlr.Run(ctx); !errors.Is(err, http.ErrServerClosed) { @@ -4360,7 +4360,7 @@ func TestGlobalSearchPagination(t *testing.T) { }) } -func TestRepoDBWhenSigningImages(t *testing.T) { +func TestMetaDBWhenSigningImages(t *testing.T) { Convey("SigningImages", t, func() { subpath := "/a" @@ -4546,9 +4546,9 @@ func TestRepoDBWhenSigningImages(t *testing.T) { }) Convey("image is a signature, AddManifestSignature fails", func() { - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ AddManifestSignatureFn: func(repo string, signedManifestDigest godigest.Digest, - sm repodb.SignatureMetadata, + sm mTypes.SignatureMetadata, ) error { return ErrTestError }, @@ -4613,7 +4613,7 @@ func TestRepoDBWhenSigningImages(t *testing.T) { }) } -func TestRepoDBWhenPushingImages(t *testing.T) { +func TestMetaDBWhenPushingImages(t *testing.T) { Convey("Cover errors when pushing", t, func() { dir := t.TempDir() @@ -4634,8 +4634,8 @@ func TestRepoDBWhenPushingImages(t *testing.T) { defer ctlrManager.StopServer() Convey("SetManifestMeta fails", func() { - ctlr.RepoDB = mocks.RepoDBMock{ - SetManifestDataFn: func(manifestDigest godigest.Digest, mm repodb.ManifestData) error { + ctlr.MetaDB = mocks.MetaDBMock{ + SetManifestDataFn: func(manifestDigest godigest.Digest, mm mTypes.ManifestData) error { return ErrTestError }, } @@ -4670,7 +4670,7 @@ func TestRepoDBWhenPushingImages(t *testing.T) { }) Convey("SetManifestMeta succeeds but SetRepoReference fails", func() { - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ SetRepoReferenceFn: func(repo, reference string, manifestDigest godigest.Digest, mediaType string) error { return ErrTestError }, @@ -4705,7 +4705,7 @@ func TestRepoDBWhenPushingImages(t *testing.T) { }) } -func TestRepoDBIndexOperations(t *testing.T) { +func TestMetaDBIndexOperations(t *testing.T) { Convey("Idex Operations BoltDB", t, func() { dir := t.TempDir() @@ -4726,11 +4726,11 @@ func TestRepoDBIndexOperations(t *testing.T) { ctlrManager.StartAndWait(port) defer ctlrManager.StopServer() - RunRepoDBIndexTests(baseURL, port) + RunMetaDBIndexTests(baseURL, port) }) } -func RunRepoDBIndexTests(baseURL, port string) { +func RunMetaDBIndexTests(baseURL, port string) { Convey("Push test index", func() { const repo = "repo" @@ -5351,7 +5351,7 @@ func RunRepoDBIndexTests(baseURL, port string) { }) } -func TestRepoDBWhenReadingImages(t *testing.T) { +func TestMetaDBWhenReadingImages(t *testing.T) { Convey("Push test image", t, func() { dir := t.TempDir() @@ -5422,7 +5422,7 @@ func TestRepoDBWhenReadingImages(t *testing.T) { }) Convey("Error when incrementing", func() { - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ IncrementImageDownloadsFn: func(repo string, tag string) error { return ErrTestError }, @@ -5435,7 +5435,7 @@ func TestRepoDBWhenReadingImages(t *testing.T) { }) } -func TestRepoDBWhenDeletingImages(t *testing.T) { +func TestMetaDBWhenDeletingImages(t *testing.T) { Convey("Setting up zot repo with test images", t, func() { dir := t.TempDir() port := GetFreePort() @@ -5747,7 +5747,7 @@ func TestRepoDBWhenDeletingImages(t *testing.T) { So(err, ShouldNotBeNil) So(statusCode, ShouldEqual, -1) - // ------- Delete the referrer and see if it disappears from repoDB also + // ------- Delete the referrer and see if it disappears from metaDB also statusCode, err = DeleteImage("repo1", referrerImage.Reference, baseURL) So(err, ShouldBeNil) So(statusCode, ShouldEqual, http.StatusAccepted) @@ -5865,7 +5865,7 @@ func TestRepoDBWhenDeletingImages(t *testing.T) { }, } - ctlr.RepoDB = mocks.RepoDBMock{ + ctlr.MetaDB = mocks.MetaDBMock{ DeleteRepoTagFn: func(repo, tag string) error { return ErrTestError }, } @@ -6304,7 +6304,7 @@ func TestImageSummary(t *testing.T) { So(len(imgSummaryResponse.Errors), ShouldEqual, 1) So(imgSummaryResponse.Errors[0].Message, - ShouldContainSubstring, "repodb: repo metadata not found for given repo name") + ShouldContainSubstring, "metadb: repo metadata not found for given repo name") t.Log("starting Test retrieve image with bad tag") // gql is parametrized with the repo. @@ -6395,7 +6395,7 @@ func TestImageSummary(t *testing.T) { panic(err) } - ctlr.CveInfo = getMockCveInfo(ctlr.RepoDB, ctlr.Log) + ctlr.CveInfo = getMockCveInfo(ctlr.MetaDB, ctlr.Log) go func() { if err := ctlr.Run(ctx); !errors.Is(err, http.ErrServerClosed) { diff --git a/pkg/extensions/sync/local.go b/pkg/extensions/sync/local.go index 98e8ff38..2a7108dc 100644 --- a/pkg/extensions/sync/local.go +++ b/pkg/extensions/sync/local.go @@ -20,7 +20,8 @@ import ( "zotregistry.io/zot/pkg/common" "zotregistry.io/zot/pkg/extensions/monitoring" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + "zotregistry.io/zot/pkg/meta" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" storageCommon "zotregistry.io/zot/pkg/storage/common" storageConstants "zotregistry.io/zot/pkg/storage/constants" @@ -31,14 +32,14 @@ import ( type LocalRegistry struct { storeController storage.StoreController tempStorage OciLayoutStorage - repoDB repodb.RepoDB + metaDB mTypes.MetaDB log log.Logger } -func NewLocalRegistry(storeController storage.StoreController, repoDB repodb.RepoDB, log log.Logger) Local { +func NewLocalRegistry(storeController storage.StoreController, metaDB mTypes.MetaDB, log log.Logger) Local { return &LocalRegistry{ storeController: storeController, - repoDB: repoDB, + metaDB: metaDB, // first we sync from remote (using containers/image copy from docker:// to oci:) to a temp imageStore // then we copy the image from tempStorage to zot's storage using ImageStore APIs tempStorage: NewOciLayoutStorage(storeController), @@ -163,14 +164,14 @@ func (registry *LocalRegistry) CommitImage(imageReference types.ImageReference, return err } - if registry.repoDB != nil { - err = repodb.SetImageMetaFromInput(repo, reference, mediaType, - manifestDigest, manifestBlob, imageStore, registry.repoDB, registry.log) + if registry.metaDB != nil { + err = meta.SetImageMetaFromInput(repo, reference, mediaType, + manifestDigest, manifestBlob, imageStore, registry.metaDB, registry.log) if err != nil { - return fmt.Errorf("repoDB: failed to set metadata for image '%s %s': %w", repo, reference, err) + return fmt.Errorf("metaDB: failed to set metadata for image '%s %s': %w", repo, reference, err) } - registry.log.Debug().Str("repo", repo).Str("reference", reference).Msg("repoDB: successfully set metadata for image") + registry.log.Debug().Str("repo", repo).Str("reference", reference).Msg("metaDB: successfully set metadata for image") } } @@ -221,9 +222,9 @@ func (registry *LocalRegistry) copyManifest(repo string, manifestContent []byte, return err } - if registry.repoDB != nil { - err = repodb.SetImageMetaFromInput(repo, reference, ispec.MediaTypeImageManifest, - digest, manifestContent, imageStore, registry.repoDB, registry.log) + if registry.metaDB != nil { + err = meta.SetImageMetaFromInput(repo, reference, ispec.MediaTypeImageManifest, + digest, manifestContent, imageStore, registry.metaDB, registry.log) if err != nil { registry.log.Error().Str("errorType", common.TypeOf(err)). Err(err).Msg("couldn't set metadata from input") diff --git a/pkg/extensions/sync/references/cosign.go b/pkg/extensions/sync/references/cosign.go index 538029ce..7dd5d13b 100644 --- a/pkg/extensions/sync/references/cosign.go +++ b/pkg/extensions/sync/references/cosign.go @@ -18,24 +18,25 @@ import ( "zotregistry.io/zot/pkg/extensions/sync/constants" client "zotregistry.io/zot/pkg/extensions/sync/httpclient" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + "zotregistry.io/zot/pkg/meta" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" ) type CosignReference struct { client *client.Client storeController storage.StoreController - repoDB repodb.RepoDB + metaDB mTypes.MetaDB log log.Logger } func NewCosignReference(httpClient *client.Client, storeController storage.StoreController, - repoDB repodb.RepoDB, log log.Logger, + metaDB mTypes.MetaDB, log log.Logger, ) CosignReference { return CosignReference{ client: httpClient, storeController: storeController, - repoDB: repoDB, + metaDB: metaDB, log: log, } } @@ -145,9 +146,9 @@ func (ref CosignReference) SyncReferences(localRepo, remoteRepo, subjectDigestSt ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr). Msg("successfully synced cosign reference for image") - if ref.repoDB != nil { + if ref.metaDB != nil { ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("repoDB: trying to sync cosign reference for image") + Msg("metaDB: trying to sync cosign reference for image") isSig, sigType, signedManifestDig, err := storage.CheckIsImageSignature(localRepo, manifestBuf, cosignTag) @@ -157,14 +158,14 @@ func (ref CosignReference) SyncReferences(localRepo, remoteRepo, subjectDigestSt } if isSig { - err = ref.repoDB.AddManifestSignature(localRepo, signedManifestDig, repodb.SignatureMetadata{ + err = ref.metaDB.AddManifestSignature(localRepo, signedManifestDig, mTypes.SignatureMetadata{ SignatureType: sigType, SignatureDigest: referenceDigest.String(), }) } else { - err = repodb.SetImageMetaFromInput(localRepo, cosignTag, ispec.MediaTypeImageManifest, + err = meta.SetImageMetaFromInput(localRepo, cosignTag, ispec.MediaTypeImageManifest, referenceDigest, manifestBuf, ref.storeController.GetImageStore(localRepo), - ref.repoDB, ref.log) + ref.metaDB, ref.log) } if err != nil { @@ -173,7 +174,7 @@ func (ref CosignReference) SyncReferences(localRepo, remoteRepo, subjectDigestSt } ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("repoDB: successfully added cosign reference for image") + Msg("metaDB: successfully added cosign reference for image") } } diff --git a/pkg/extensions/sync/references/oci.go b/pkg/extensions/sync/references/oci.go index ffde9e53..26592b9c 100644 --- a/pkg/extensions/sync/references/oci.go +++ b/pkg/extensions/sync/references/oci.go @@ -17,7 +17,8 @@ import ( "zotregistry.io/zot/pkg/extensions/sync/constants" client "zotregistry.io/zot/pkg/extensions/sync/httpclient" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + "zotregistry.io/zot/pkg/meta" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" storageTypes "zotregistry.io/zot/pkg/storage/types" ) @@ -25,17 +26,17 @@ import ( type OciReferences struct { client *client.Client storeController storage.StoreController - repoDB repodb.RepoDB + metaDB mTypes.MetaDB log log.Logger } func NewOciReferences(httpClient *client.Client, storeController storage.StoreController, - repoDB repodb.RepoDB, log log.Logger, + metaDB mTypes.MetaDB, log log.Logger, ) OciReferences { return OciReferences{ client: httpClient, storeController: storeController, - repoDB: repoDB, + metaDB: metaDB, log: log, } } @@ -129,9 +130,9 @@ func (ref OciReferences) SyncReferences(localRepo, remoteRepo, subjectDigestStr refsDigests = append(refsDigests, referenceDigest) - if ref.repoDB != nil { + if ref.metaDB != nil { ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("repoDB: trying to add oci references for image") + Msg("metaDB: trying to add oci references for image") isSig, sigType, signedManifestDig, err := storage.CheckIsImageSignature(localRepo, referenceBuf, referrer.Digest.String()) @@ -141,14 +142,14 @@ func (ref OciReferences) SyncReferences(localRepo, remoteRepo, subjectDigestStr } if isSig { - err = ref.repoDB.AddManifestSignature(localRepo, signedManifestDig, repodb.SignatureMetadata{ + err = ref.metaDB.AddManifestSignature(localRepo, signedManifestDig, mTypes.SignatureMetadata{ SignatureType: sigType, SignatureDigest: referenceDigest.String(), }) } else { - err = repodb.SetImageMetaFromInput(localRepo, referenceDigest.String(), referrer.MediaType, + err = meta.SetImageMetaFromInput(localRepo, referenceDigest.String(), referrer.MediaType, referenceDigest, referenceBuf, ref.storeController.GetImageStore(localRepo), - ref.repoDB, ref.log) + ref.metaDB, ref.log) } if err != nil { @@ -157,7 +158,7 @@ func (ref OciReferences) SyncReferences(localRepo, remoteRepo, subjectDigestStr } ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("repoDB: successfully added oci references to RepoDB for image") + Msg("metaDB: successfully added oci references to MetaDB for image") } } diff --git a/pkg/extensions/sync/references/oras.go b/pkg/extensions/sync/references/oras.go index 8c49c0d6..6e2316ce 100644 --- a/pkg/extensions/sync/references/oras.go +++ b/pkg/extensions/sync/references/oras.go @@ -17,7 +17,8 @@ import ( "zotregistry.io/zot/pkg/extensions/sync/constants" client "zotregistry.io/zot/pkg/extensions/sync/httpclient" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + "zotregistry.io/zot/pkg/meta" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" ) @@ -28,17 +29,17 @@ type ReferenceList struct { type ORASReferences struct { client *client.Client storeController storage.StoreController - repoDB repodb.RepoDB + metaDB mTypes.MetaDB log log.Logger } func NewORASReferences(httpClient *client.Client, storeController storage.StoreController, - repoDB repodb.RepoDB, log log.Logger, + metaDB mTypes.MetaDB, log log.Logger, ) ORASReferences { return ORASReferences{ client: httpClient, storeController: storeController, - repoDB: repoDB, + metaDB: metaDB, log: log, } } @@ -146,20 +147,20 @@ func (ref ORASReferences) SyncReferences(localRepo, remoteRepo, subjectDigestStr refsDigests = append(refsDigests, referenceDigest) - if ref.repoDB != nil { + if ref.metaDB != nil { ref.log.Debug().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("repoDB: trying to sync oras artifact for image") + Msg("metaDB: trying to sync oras artifact for image") - err := repodb.SetImageMetaFromInput(localRepo, referenceDigest.String(), referrer.MediaType, + err := meta.SetImageMetaFromInput(localRepo, referenceDigest.String(), referrer.MediaType, referenceDigest, orasBuf, ref.storeController.GetImageStore(localRepo), - ref.repoDB, ref.log) + ref.metaDB, ref.log) if err != nil { - return refsDigests, fmt.Errorf("repoDB: failed to set metadata for oras artifact '%s@%s': %w", + return refsDigests, fmt.Errorf("metaDB: failed to set metadata for oras artifact '%s@%s': %w", localRepo, subjectDigestStr, err) } ref.log.Info().Str("repository", localRepo).Str("subject", subjectDigestStr). - Msg("repoDB: successfully added oras artifacts to RepoDB for image") + Msg("metaDB: successfully added oras artifacts to MetaDB for image") } } diff --git a/pkg/extensions/sync/references/references.go b/pkg/extensions/sync/references/references.go index 59aee5e0..08c2259b 100644 --- a/pkg/extensions/sync/references/references.go +++ b/pkg/extensions/sync/references/references.go @@ -17,7 +17,7 @@ import ( "zotregistry.io/zot/pkg/common" client "zotregistry.io/zot/pkg/extensions/sync/httpclient" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" storageTypes "zotregistry.io/zot/pkg/storage/types" ) @@ -37,13 +37,13 @@ type References struct { } func NewReferences(httpClient *client.Client, storeController storage.StoreController, - repoDB repodb.RepoDB, log log.Logger, + metaDB mTypes.MetaDB, log log.Logger, ) References { refs := References{log: log} - refs.referenceList = append(refs.referenceList, NewCosignReference(httpClient, storeController, repoDB, log)) - refs.referenceList = append(refs.referenceList, NewOciReferences(httpClient, storeController, repoDB, log)) - refs.referenceList = append(refs.referenceList, NewORASReferences(httpClient, storeController, repoDB, log)) + refs.referenceList = append(refs.referenceList, NewCosignReference(httpClient, storeController, metaDB, log)) + refs.referenceList = append(refs.referenceList, NewOciReferences(httpClient, storeController, metaDB, log)) + refs.referenceList = append(refs.referenceList, NewORASReferences(httpClient, storeController, metaDB, log)) return refs } diff --git a/pkg/extensions/sync/service.go b/pkg/extensions/sync/service.go index ee90dfc4..bbf99958 100644 --- a/pkg/extensions/sync/service.go +++ b/pkg/extensions/sync/service.go @@ -18,7 +18,7 @@ import ( client "zotregistry.io/zot/pkg/extensions/sync/httpclient" "zotregistry.io/zot/pkg/extensions/sync/references" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" ) @@ -30,7 +30,7 @@ type BaseService struct { retryOptions *retry.RetryOptions contentManager ContentManager storeController storage.StoreController - repoDB repodb.RepoDB + metaDB mTypes.MetaDB repositories []string references references.References client *client.Client @@ -38,13 +38,13 @@ type BaseService struct { } func New(opts syncconf.RegistryConfig, credentialsFilepath string, - storeController storage.StoreController, repodb repodb.RepoDB, log log.Logger, + storeController storage.StoreController, metadb mTypes.MetaDB, log log.Logger, ) (Service, error) { service := &BaseService{} service.config = opts service.log = log - service.repoDB = repodb + service.metaDB = metadb var err error @@ -60,7 +60,7 @@ func New(opts syncconf.RegistryConfig, credentialsFilepath string, service.credentials = credentialsFile service.contentManager = NewContentManager(opts.Content, log) - service.local = NewLocalRegistry(storeController, repodb, log) + service.local = NewLocalRegistry(storeController, metadb, log) retryOptions := &retry.RetryOptions{} @@ -82,7 +82,7 @@ func New(opts syncconf.RegistryConfig, credentialsFilepath string, service.references = references.NewReferences( service.client, service.storeController, - service.repoDB, + service.metaDB, service.log, ) diff --git a/pkg/extensions/sync/sync_internal_test.go b/pkg/extensions/sync/sync_internal_test.go index 3b702d99..b4b3e32e 100644 --- a/pkg/extensions/sync/sync_internal_test.go +++ b/pkg/extensions/sync/sync_internal_test.go @@ -162,7 +162,7 @@ func TestService(t *testing.T) { URLs: []string{"http://localhost"}, } - service, err := New(conf, "", storage.StoreController{}, mocks.RepoDBMock{}, log.Logger{}) + service, err := New(conf, "", storage.StoreController{}, mocks.MetaDBMock{}, log.Logger{}) So(err, ShouldBeNil) err = service.SyncRepo("repo") @@ -337,8 +337,8 @@ func TestLocalRegistry(t *testing.T) { So(err, ShouldNotBeNil) }) - Convey("trigger repoDB error on index manifest in CommitImage()", func() { - registry := NewLocalRegistry(storage.StoreController{DefaultStore: syncImgStore}, mocks.RepoDBMock{ + Convey("trigger metaDB error on index manifest in CommitImage()", func() { + registry := NewLocalRegistry(storage.StoreController{DefaultStore: syncImgStore}, mocks.MetaDBMock{ SetRepoReferenceFn: func(repo, Reference string, manifestDigest godigest.Digest, mediaType string) error { if Reference == "1.0" { return errors.ErrRepoMetaNotFound @@ -352,8 +352,8 @@ func TestLocalRegistry(t *testing.T) { So(err, ShouldNotBeNil) }) - Convey("trigger repoDB error on image manifest in CommitImage()", func() { - registry := NewLocalRegistry(storage.StoreController{DefaultStore: syncImgStore}, mocks.RepoDBMock{ + Convey("trigger metaDB error on image manifest in CommitImage()", func() { + registry := NewLocalRegistry(storage.StoreController{DefaultStore: syncImgStore}, mocks.MetaDBMock{ SetRepoReferenceFn: func(repo, Reference string, manifestDigest godigest.Digest, mediaType string) error { return errors.ErrRepoMetaNotFound }, diff --git a/pkg/extensions/sync/sync_test.go b/pkg/extensions/sync/sync_test.go index 754a5203..e9f1e6c0 100644 --- a/pkg/extensions/sync/sync_test.go +++ b/pkg/extensions/sync/sync_test.go @@ -42,8 +42,8 @@ import ( extconf "zotregistry.io/zot/pkg/extensions/config" syncconf "zotregistry.io/zot/pkg/extensions/config/sync" "zotregistry.io/zot/pkg/extensions/sync" - "zotregistry.io/zot/pkg/meta/repodb" "zotregistry.io/zot/pkg/meta/signatures" + mTypes "zotregistry.io/zot/pkg/meta/types" storageConstants "zotregistry.io/zot/pkg/storage/constants" "zotregistry.io/zot/pkg/test" "zotregistry.io/zot/pkg/test/mocks" @@ -857,10 +857,10 @@ func TestOnDemand(t *testing.T) { dctlr := api.NewController(destConfig) - // repodb fails for syncCosignSignature" - dctlr.RepoDB = mocks.RepoDBMock{ + // metadb fails for syncCosignSignature" + dctlr.MetaDB = mocks.MetaDBMock{ AddManifestSignatureFn: func(repo string, signedManifestDigest godigest.Digest, - sm repodb.SignatureMetadata, + sm mTypes.SignatureMetadata, ) error { if sm.SignatureType == signatures.CosignSignature || sm.SignatureType == signatures.NotationSignature { return sync.ErrTestError @@ -4422,8 +4422,8 @@ func getPortFromBaseURL(baseURL string) string { return slice[len(slice)-1] } -func TestSyncedSignaturesRepoDB(t *testing.T) { - Convey("Verify that repodb update correctly when syncing a signature", t, func() { +func TestSyncedSignaturesMetaDB(t *testing.T) { + Convey("Verify that metadb update correctly when syncing a signature", t, func() { repoName := "signed-repo" tag := "random-signed-image" updateDuration := 30 * time.Minute @@ -4493,7 +4493,7 @@ func TestSyncedSignaturesRepoDB(t *testing.T) { So(err, ShouldBeNil) So(resp.StatusCode(), ShouldEqual, http.StatusOK) - repoMeta, err := dctlr.RepoDB.GetRepoMeta(repoName) + repoMeta, err := dctlr.MetaDB.GetRepoMeta(repoName) So(err, ShouldBeNil) So(repoMeta.Tags, ShouldContainKey, tag) So(len(repoMeta.Tags), ShouldEqual, 1) diff --git a/pkg/meta/repodb/boltdb-wrapper/boltdb_wrapper.go b/pkg/meta/boltdb/boltdb.go similarity index 69% rename from pkg/meta/repodb/boltdb-wrapper/boltdb_wrapper.go rename to pkg/meta/boltdb/boltdb.go index c9dccb04..6350ed68 100644 --- a/pkg/meta/repodb/boltdb-wrapper/boltdb_wrapper.go +++ b/pkg/meta/boltdb/boltdb.go @@ -1,4 +1,4 @@ -package bolt +package boltdb import ( "context" @@ -15,23 +15,23 @@ import ( zerr "zotregistry.io/zot/errors" zcommon "zotregistry.io/zot/pkg/common" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" "zotregistry.io/zot/pkg/meta/common" - "zotregistry.io/zot/pkg/meta/repodb" + "zotregistry.io/zot/pkg/meta/pagination" "zotregistry.io/zot/pkg/meta/signatures" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/meta/version" localCtx "zotregistry.io/zot/pkg/requestcontext" ) -type DBWrapper struct { +type BoltDB struct { DB *bbolt.DB Patches []func(DB *bbolt.DB) error Log log.Logger } -func NewBoltDBWrapper(boltDB *bbolt.DB, log log.Logger) (*DBWrapper, error) { +func New(boltDB *bbolt.DB, log log.Logger) (*BoltDB, error) { err := boltDB.Update(func(transaction *bbolt.Tx) error { - versionBuck, err := transaction.CreateBucketIfNotExists([]byte(bolt.VersionBucket)) + versionBuck, err := transaction.CreateBucketIfNotExists([]byte(VersionBucket)) if err != nil { return err } @@ -41,27 +41,27 @@ func NewBoltDBWrapper(boltDB *bbolt.DB, log log.Logger) (*DBWrapper, error) { return err } - _, err = transaction.CreateBucketIfNotExists([]byte(bolt.ManifestDataBucket)) + _, err = transaction.CreateBucketIfNotExists([]byte(ManifestDataBucket)) if err != nil { return err } - _, err = transaction.CreateBucketIfNotExists([]byte(bolt.IndexDataBucket)) + _, err = transaction.CreateBucketIfNotExists([]byte(IndexDataBucket)) if err != nil { return err } - _, err = transaction.CreateBucketIfNotExists([]byte(bolt.RepoMetadataBucket)) + _, err = transaction.CreateBucketIfNotExists([]byte(RepoMetadataBucket)) if err != nil { return err } - _, err = transaction.CreateBucketIfNotExists([]byte(bolt.UserDataBucket)) + _, err = transaction.CreateBucketIfNotExists([]byte(UserDataBucket)) if err != nil { return err } - _, err = transaction.CreateBucketIfNotExists([]byte(bolt.UserAPIKeysBucket)) + _, err = transaction.CreateBucketIfNotExists([]byte(UserAPIKeysBucket)) if err != nil { return err } @@ -72,25 +72,25 @@ func NewBoltDBWrapper(boltDB *bbolt.DB, log log.Logger) (*DBWrapper, error) { return nil, err } - return &DBWrapper{ + return &BoltDB{ DB: boltDB, Patches: version.GetBoltDBPatches(), Log: log, }, nil } -func (bdw *DBWrapper) SetManifestData(manifestDigest godigest.Digest, manifestData repodb.ManifestData) error { +func (bdw *BoltDB) SetManifestData(manifestDigest godigest.Digest, manifestData mTypes.ManifestData) error { err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.ManifestDataBucket)) + buck := tx.Bucket([]byte(ManifestDataBucket)) mdBlob, err := json.Marshal(manifestData) if err != nil { - return fmt.Errorf("repodb: error while calculating blob for manifest with digest %s %w", manifestDigest, err) + return fmt.Errorf("metadb: error while calculating blob for manifest with digest %s %w", manifestDigest, err) } err = buck.Put([]byte(manifestDigest), mdBlob) if err != nil { - return fmt.Errorf("repodb: error while setting manifest data with for digest %s %w", manifestDigest, err) + return fmt.Errorf("metadb: error while setting manifest data with for digest %s %w", manifestDigest, err) } return nil @@ -99,11 +99,11 @@ func (bdw *DBWrapper) SetManifestData(manifestDigest godigest.Digest, manifestDa return err } -func (bdw *DBWrapper) GetManifestData(manifestDigest godigest.Digest) (repodb.ManifestData, error) { - var manifestData repodb.ManifestData +func (bdw *BoltDB) GetManifestData(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { + var manifestData mTypes.ManifestData err := bdw.DB.View(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.ManifestDataBucket)) + buck := tx.Bucket([]byte(ManifestDataBucket)) mdBlob := buck.Get([]byte(manifestDigest)) @@ -113,7 +113,7 @@ func (bdw *DBWrapper) GetManifestData(manifestDigest godigest.Digest) (repodb.Ma err := json.Unmarshal(mdBlob, &manifestData) if err != nil { - return fmt.Errorf("repodb: error while unmashaling manifest meta for digest %s %w", manifestDigest, err) + return fmt.Errorf("metadb: error while unmashaling manifest meta for digest %s %w", manifestDigest, err) } return nil @@ -122,18 +122,18 @@ func (bdw *DBWrapper) GetManifestData(manifestDigest godigest.Digest) (repodb.Ma return manifestData, err } -func (bdw *DBWrapper) SetManifestMeta(repo string, manifestDigest godigest.Digest, manifestMeta repodb.ManifestMetadata, +func (bdw *BoltDB) SetManifestMeta(repo string, manifestDigest godigest.Digest, manifestMeta mTypes.ManifestMetadata, ) error { err := bdw.DB.Update(func(tx *bbolt.Tx) error { - dataBuck := tx.Bucket([]byte(bolt.ManifestDataBucket)) - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + dataBuck := tx.Bucket([]byte(ManifestDataBucket)) + repoBuck := tx.Bucket([]byte(RepoMetadataBucket)) - repoMeta := repodb.RepoMetadata{ + repoMeta := mTypes.RepoMetadata{ Name: repo, - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{}, - Referrers: map[string][]repodb.ReferrerInfo{}, + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, } repoMetaBlob := repoBuck.Get([]byte(repo)) @@ -144,24 +144,24 @@ func (bdw *DBWrapper) SetManifestMeta(repo string, manifestDigest godigest.Diges } } - mdBlob, err := json.Marshal(repodb.ManifestData{ + mdBlob, err := json.Marshal(mTypes.ManifestData{ ManifestBlob: manifestMeta.ManifestBlob, ConfigBlob: manifestMeta.ConfigBlob, }) if err != nil { - return fmt.Errorf("repodb: error while calculating blob for manifest with digest %s %w", manifestDigest, err) + return fmt.Errorf("metadb: error while calculating blob for manifest with digest %s %w", manifestDigest, err) } err = dataBuck.Put([]byte(manifestDigest), mdBlob) if err != nil { - return fmt.Errorf("repodb: error while setting manifest meta with for digest %s %w", manifestDigest, err) + return fmt.Errorf("metadb: error while setting manifest meta with for digest %s %w", manifestDigest, err) } updatedRepoMeta := common.UpdateManifestMeta(repoMeta, manifestDigest, manifestMeta) updatedRepoMetaBlob, err := json.Marshal(updatedRepoMeta) if err != nil { - return fmt.Errorf("repodb: error while calculating blob for updated repo meta '%s' %w", repo, err) + return fmt.Errorf("metadb: error while calculating blob for updated repo meta '%s' %w", repo, err) } return repoBuck.Put([]byte(repo), updatedRepoMetaBlob) @@ -170,12 +170,12 @@ func (bdw *DBWrapper) SetManifestMeta(repo string, manifestDigest godigest.Diges return err } -func (bdw *DBWrapper) GetManifestMeta(repo string, manifestDigest godigest.Digest) (repodb.ManifestMetadata, error) { - var manifestMetadata repodb.ManifestMetadata +func (bdw *BoltDB) GetManifestMeta(repo string, manifestDigest godigest.Digest) (mTypes.ManifestMetadata, error) { + var manifestMetadata mTypes.ManifestMetadata err := bdw.DB.View(func(tx *bbolt.Tx) error { - dataBuck := tx.Bucket([]byte(bolt.ManifestDataBucket)) - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + dataBuck := tx.Bucket([]byte(ManifestDataBucket)) + repoBuck := tx.Bucket([]byte(RepoMetadataBucket)) mdBlob := dataBuck.Get([]byte(manifestDigest)) @@ -183,20 +183,20 @@ func (bdw *DBWrapper) GetManifestMeta(repo string, manifestDigest godigest.Diges return zerr.ErrManifestMetaNotFound } - var manifestData repodb.ManifestData + var manifestData mTypes.ManifestData err := json.Unmarshal(mdBlob, &manifestData) if err != nil { - return fmt.Errorf("repodb: error while unmashaling manifest meta for digest %s %w", manifestDigest, err) + return fmt.Errorf("metadb: error while unmashaling manifest meta for digest %s %w", manifestDigest, err) } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata repoMetaBlob := repoBuck.Get([]byte(repo)) if len(repoMetaBlob) > 0 { err = json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { - return fmt.Errorf("repodb: error while unmashaling manifest meta for digest %s %w", manifestDigest, err) + return fmt.Errorf("metadb: error while unmashaling manifest meta for digest %s %w", manifestDigest, err) } } @@ -204,7 +204,7 @@ func (bdw *DBWrapper) GetManifestMeta(repo string, manifestDigest godigest.Diges manifestMetadata.ConfigBlob = manifestData.ConfigBlob manifestMetadata.DownloadCount = repoMeta.Statistics[manifestDigest.String()].DownloadCount - manifestMetadata.Signatures = repodb.ManifestSignatures{} + manifestMetadata.Signatures = mTypes.ManifestSignatures{} if repoMeta.Signatures[manifestDigest.String()] != nil { manifestMetadata.Signatures = repoMeta.Signatures[manifestDigest.String()] } @@ -215,20 +215,20 @@ func (bdw *DBWrapper) GetManifestMeta(repo string, manifestDigest godigest.Diges return manifestMetadata, err } -func (bdw *DBWrapper) SetIndexData(indexDigest godigest.Digest, indexMetadata repodb.IndexData) error { +func (bdw *BoltDB) SetIndexData(indexDigest godigest.Digest, indexMetadata mTypes.IndexData) error { // we make the assumption that the oci layout is consistent and all manifests refferenced inside the // index are present err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.IndexDataBucket)) + buck := tx.Bucket([]byte(IndexDataBucket)) imBlob, err := json.Marshal(indexMetadata) if err != nil { - return fmt.Errorf("repodb: error while calculating blob for manifest with digest %s %w", indexDigest, err) + return fmt.Errorf("metadb: error while calculating blob for manifest with digest %s %w", indexDigest, err) } err = buck.Put([]byte(indexDigest), imBlob) if err != nil { - return fmt.Errorf("repodb: error while setting manifest meta with for digest %s %w", indexDigest, err) + return fmt.Errorf("metadb: error while setting manifest meta with for digest %s %w", indexDigest, err) } return nil @@ -237,11 +237,11 @@ func (bdw *DBWrapper) SetIndexData(indexDigest godigest.Digest, indexMetadata re return err } -func (bdw *DBWrapper) GetIndexData(indexDigest godigest.Digest) (repodb.IndexData, error) { - var indexMetadata repodb.IndexData +func (bdw *BoltDB) GetIndexData(indexDigest godigest.Digest) (mTypes.IndexData, error) { + var indexMetadata mTypes.IndexData err := bdw.DB.View(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.IndexDataBucket)) + buck := tx.Bucket([]byte(IndexDataBucket)) mmBlob := buck.Get([]byte(indexDigest)) @@ -251,7 +251,7 @@ func (bdw *DBWrapper) GetIndexData(indexDigest godigest.Digest) (repodb.IndexDat err := json.Unmarshal(mmBlob, &indexMetadata) if err != nil { - return fmt.Errorf("repodb: error while unmashaling manifest meta for digest %s %w", indexDigest, err) + return fmt.Errorf("metadb: error while unmashaling manifest meta for digest %s %w", indexDigest, err) } return nil @@ -260,9 +260,9 @@ func (bdw *DBWrapper) GetIndexData(indexDigest godigest.Digest) (repodb.IndexDat return indexMetadata, err } -func (bdw DBWrapper) SetReferrer(repo string, referredDigest godigest.Digest, referrer repodb.ReferrerInfo) error { +func (bdw BoltDB) SetReferrer(repo string, referredDigest godigest.Digest, referrer mTypes.ReferrerInfo) error { err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) @@ -271,12 +271,12 @@ func (bdw DBWrapper) SetReferrer(repo string, referredDigest godigest.Digest, re var err error // create a new object - repoMeta := repodb.RepoMetadata{ + repoMeta := mTypes.RepoMetadata{ Name: repo, - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{}, - Referrers: map[string][]repodb.ReferrerInfo{ + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{}, + Referrers: map[string][]mTypes.ReferrerInfo{ referredDigest.String(): { referrer, }, @@ -290,7 +290,7 @@ func (bdw DBWrapper) SetReferrer(repo string, referredDigest godigest.Digest, re return buck.Put([]byte(repo), repoMetaBlob) } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -320,11 +320,11 @@ func (bdw DBWrapper) SetReferrer(repo string, referredDigest godigest.Digest, re return err } -func (bdw DBWrapper) DeleteReferrer(repo string, referredDigest godigest.Digest, +func (bdw BoltDB) DeleteReferrer(repo string, referredDigest godigest.Digest, referrerDigest godigest.Digest, ) error { return bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) @@ -332,7 +332,7 @@ func (bdw DBWrapper) DeleteReferrer(repo string, referredDigest godigest.Digest, return zerr.ErrRepoMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -360,19 +360,19 @@ func (bdw DBWrapper) DeleteReferrer(repo string, referredDigest godigest.Digest, }) } -func (bdw DBWrapper) GetReferrersInfo(repo string, referredDigest godigest.Digest, artifactTypes []string, -) ([]repodb.ReferrerInfo, error) { - referrersInfoResult := []repodb.ReferrerInfo{} +func (bdw BoltDB) GetReferrersInfo(repo string, referredDigest godigest.Digest, artifactTypes []string, +) ([]mTypes.ReferrerInfo, error) { + referrersInfoResult := []mTypes.ReferrerInfo{} err := bdw.DB.View(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) if len(repoMetaBlob) == 0 { return zerr.ErrRepoMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -395,7 +395,7 @@ func (bdw DBWrapper) GetReferrersInfo(repo string, referredDigest godigest.Diges return referrersInfoResult, err } -func (bdw *DBWrapper) SetRepoReference(repo string, reference string, manifestDigest godigest.Digest, +func (bdw *BoltDB) SetRepoReference(repo string, reference string, manifestDigest godigest.Digest, mediaType string, ) error { if err := common.ValidateRepoReferenceInput(repo, reference, manifestDigest); err != nil { @@ -403,16 +403,16 @@ func (bdw *DBWrapper) SetRepoReference(repo string, reference string, manifestDi } err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) - repoMeta := repodb.RepoMetadata{ + repoMeta := mTypes.RepoMetadata{ Name: repo, - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{}, - Referrers: map[string][]repodb.ReferrerInfo{}, + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, } // object not found @@ -424,22 +424,22 @@ func (bdw *DBWrapper) SetRepoReference(repo string, reference string, manifestDi } if !common.ReferenceIsDigest(reference) { - repoMeta.Tags[reference] = repodb.Descriptor{ + repoMeta.Tags[reference] = mTypes.Descriptor{ Digest: manifestDigest.String(), MediaType: mediaType, } } if _, ok := repoMeta.Statistics[manifestDigest.String()]; !ok { - repoMeta.Statistics[manifestDigest.String()] = repodb.DescriptorStatistics{DownloadCount: 0} + repoMeta.Statistics[manifestDigest.String()] = mTypes.DescriptorStatistics{DownloadCount: 0} } if _, ok := repoMeta.Signatures[manifestDigest.String()]; !ok { - repoMeta.Signatures[manifestDigest.String()] = repodb.ManifestSignatures{} + repoMeta.Signatures[manifestDigest.String()] = mTypes.ManifestSignatures{} } if _, ok := repoMeta.Referrers[manifestDigest.String()]; !ok { - repoMeta.Referrers[manifestDigest.String()] = []repodb.ReferrerInfo{} + repoMeta.Referrers[manifestDigest.String()] = []mTypes.ReferrerInfo{} } repoMetaBlob, err := json.Marshal(repoMeta) @@ -453,11 +453,11 @@ func (bdw *DBWrapper) SetRepoReference(repo string, reference string, manifestDi return err } -func (bdw *DBWrapper) GetRepoMeta(repo string) (repodb.RepoMetadata, error) { - var repoMeta repodb.RepoMetadata +func (bdw *BoltDB) GetRepoMeta(repo string) (mTypes.RepoMetadata, error) { + var repoMeta mTypes.RepoMetadata err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) @@ -478,11 +478,11 @@ func (bdw *DBWrapper) GetRepoMeta(repo string) (repodb.RepoMetadata, error) { return repoMeta, err } -func (bdw *DBWrapper) GetUserRepoMeta(ctx context.Context, repo string) (repodb.RepoMetadata, error) { - var repoMeta repodb.RepoMetadata +func (bdw *BoltDB) GetUserRepoMeta(ctx context.Context, repo string) (mTypes.RepoMetadata, error) { + var repoMeta mTypes.RepoMetadata err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) userBookmarks := getUserBookmarks(ctx, tx) userStars := getUserStars(ctx, tx) @@ -508,9 +508,9 @@ func (bdw *DBWrapper) GetUserRepoMeta(ctx context.Context, repo string) (repodb. return repoMeta, err } -func (bdw *DBWrapper) SetRepoMeta(repo string, repoMeta repodb.RepoMetadata) error { +func (bdw *BoltDB) SetRepoMeta(repo string, repoMeta mTypes.RepoMetadata) error { err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMeta.Name = repo @@ -525,9 +525,9 @@ func (bdw *DBWrapper) SetRepoMeta(repo string, repoMeta repodb.RepoMetadata) err return err } -func (bdw *DBWrapper) DeleteRepoTag(repo string, tag string) error { +func (bdw *BoltDB) DeleteRepoTag(repo string, tag string) error { err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) @@ -537,7 +537,7 @@ func (bdw *DBWrapper) DeleteRepoTag(repo string, tag string) error { } // object found - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -557,16 +557,16 @@ func (bdw *DBWrapper) DeleteRepoTag(repo string, tag string) error { return err } -func (bdw *DBWrapper) IncrementRepoStars(repo string) error { +func (bdw *BoltDB) IncrementRepoStars(repo string) error { err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) if repoMetaBlob == nil { return zerr.ErrRepoMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -586,16 +586,16 @@ func (bdw *DBWrapper) IncrementRepoStars(repo string) error { return err } -func (bdw *DBWrapper) DecrementRepoStars(repo string) error { +func (bdw *BoltDB) DecrementRepoStars(repo string) error { err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) if repoMetaBlob == nil { return zerr.ErrRepoMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -617,11 +617,11 @@ func (bdw *DBWrapper) DecrementRepoStars(repo string) error { return err } -func (bdw *DBWrapper) GetRepoStars(repo string) (int, error) { +func (bdw *BoltDB) GetRepoStars(repo string) (int, error) { stars := 0 err := bdw.DB.View(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) buck.Get([]byte(repo)) repoMetaBlob := buck.Get([]byte(repo)) @@ -629,7 +629,7 @@ func (bdw *DBWrapper) GetRepoStars(repo string) (int, error) { return zerr.ErrRepoMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -644,21 +644,21 @@ func (bdw *DBWrapper) GetRepoStars(repo string) (int, error) { return stars, err } -func (bdw *DBWrapper) GetMultipleRepoMeta(ctx context.Context, filter func(repoMeta repodb.RepoMetadata) bool, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, error) { +func (bdw *BoltDB) GetMultipleRepoMeta(ctx context.Context, filter func(repoMeta mTypes.RepoMetadata) bool, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, error) { var ( - foundRepos = make([]repodb.RepoMetadata, 0) - pageFinder repodb.PageFinder + foundRepos = make([]mTypes.RepoMetadata, 0) + pageFinder pagination.PageFinder ) - pageFinder, err := repodb.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) if err != nil { return nil, err } err = bdw.DB.View(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) cursor := buck.Cursor() @@ -667,7 +667,7 @@ func (bdw *DBWrapper) GetMultipleRepoMeta(ctx context.Context, filter func(repoM continue } - repoMeta := repodb.RepoMetadata{} + repoMeta := mTypes.RepoMetadata{} err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -675,7 +675,7 @@ func (bdw *DBWrapper) GetMultipleRepoMeta(ctx context.Context, filter func(repoM } if filter(repoMeta) { - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, }) } @@ -689,16 +689,16 @@ func (bdw *DBWrapper) GetMultipleRepoMeta(ctx context.Context, filter func(repoM return foundRepos, err } -func (bdw *DBWrapper) IncrementImageDownloads(repo string, reference string) error { +func (bdw *BoltDB) IncrementImageDownloads(repo string, reference string) error { err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) if repoMetaBlob == nil { return zerr.ErrManifestMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -733,27 +733,27 @@ func (bdw *DBWrapper) IncrementImageDownloads(repo string, reference string) err return err } -func (bdw *DBWrapper) UpdateSignaturesValidity(repo string, manifestDigest godigest.Digest) error { +func (bdw *BoltDB) UpdateSignaturesValidity(repo string, manifestDigest godigest.Digest) error { err := bdw.DB.Update(func(transaction *bbolt.Tx) error { // get ManifestData of signed manifest - manifestBuck := transaction.Bucket([]byte(bolt.ManifestDataBucket)) + manifestBuck := transaction.Bucket([]byte(ManifestDataBucket)) mdBlob := manifestBuck.Get([]byte(manifestDigest)) var blob []byte if len(mdBlob) != 0 { - var manifestData repodb.ManifestData + var manifestData mTypes.ManifestData err := json.Unmarshal(mdBlob, &manifestData) if err != nil { - return fmt.Errorf("repodb: %w error while unmashaling manifest meta for digest %s", err, manifestDigest) + return fmt.Errorf("metadb: %w error while unmashaling manifest meta for digest %s", err, manifestDigest) } blob = manifestData.ManifestBlob } else { - var indexData repodb.IndexData + var indexData mTypes.IndexData - indexBuck := transaction.Bucket([]byte(bolt.IndexDataBucket)) + indexBuck := transaction.Bucket([]byte(IndexDataBucket)) idBlob := indexBuck.Get([]byte(manifestDigest)) if len(idBlob) == 0 { @@ -763,33 +763,33 @@ func (bdw *DBWrapper) UpdateSignaturesValidity(repo string, manifestDigest godig err := json.Unmarshal(idBlob, &indexData) if err != nil { - return fmt.Errorf("repodb: %w error while unmashaling index meta for digest %s", err, manifestDigest) + return fmt.Errorf("metadb: %w error while unmashaling index meta for digest %s", err, manifestDigest) } blob = indexData.IndexBlob } // update signatures with details about validity and author - repoBuck := transaction.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := transaction.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := repoBuck.Get([]byte(repo)) if repoMetaBlob == nil { return zerr.ErrRepoMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { return err } - manifestSignatures := repodb.ManifestSignatures{} + manifestSignatures := mTypes.ManifestSignatures{} for sigType, sigs := range repoMeta.Signatures[manifestDigest.String()] { - signaturesInfo := []repodb.SignatureInfo{} + signaturesInfo := []mTypes.SignatureInfo{} for _, sigInfo := range sigs { - layersInfo := []repodb.LayerInfo{} + layersInfo := []mTypes.LayerInfo{} for _, layerInfo := range sigInfo.LayersInfo { author, date, isTrusted, _ := signatures.VerifySignature(sigType, layerInfo.LayerContent, layerInfo.SignatureKey, @@ -807,7 +807,7 @@ func (bdw *DBWrapper) UpdateSignaturesValidity(repo string, manifestDigest godig layersInfo = append(layersInfo, layerInfo) } - signaturesInfo = append(signaturesInfo, repodb.SignatureInfo{ + signaturesInfo = append(signaturesInfo, mTypes.SignatureInfo{ SignatureManifestDigest: sigInfo.SignatureManifestDigest, LayersInfo: layersInfo, }) @@ -829,23 +829,23 @@ func (bdw *DBWrapper) UpdateSignaturesValidity(repo string, manifestDigest godig return err } -func (bdw *DBWrapper) AddManifestSignature(repo string, signedManifestDigest godigest.Digest, - sygMeta repodb.SignatureMetadata, +func (bdw *BoltDB) AddManifestSignature(repo string, signedManifestDigest godigest.Digest, + sygMeta mTypes.SignatureMetadata, ) error { err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) if len(repoMetaBlob) == 0 { var err error // create a new object - repoMeta := repodb.RepoMetadata{ + repoMeta := mTypes.RepoMetadata{ Name: repo, - Tags: map[string]repodb.Descriptor{}, - Signatures: map[string]repodb.ManifestSignatures{ + Tags: map[string]mTypes.Descriptor{}, + Signatures: map[string]mTypes.ManifestSignatures{ signedManifestDigest.String(): { - sygMeta.SignatureType: []repodb.SignatureInfo{ + sygMeta.SignatureType: []mTypes.SignatureInfo{ { SignatureManifestDigest: sygMeta.SignatureDigest, LayersInfo: sygMeta.LayersInfo, @@ -853,8 +853,8 @@ func (bdw *DBWrapper) AddManifestSignature(repo string, signedManifestDigest god }, }, }, - Statistics: map[string]repodb.DescriptorStatistics{}, - Referrers: map[string][]repodb.ReferrerInfo{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, } repoMetaBlob, err = json.Marshal(repoMeta) @@ -865,7 +865,7 @@ func (bdw *DBWrapper) AddManifestSignature(repo string, signedManifestDigest god return buck.Put([]byte(repo), repoMetaBlob) } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -873,23 +873,23 @@ func (bdw *DBWrapper) AddManifestSignature(repo string, signedManifestDigest god } var ( - manifestSignatures repodb.ManifestSignatures + manifestSignatures mTypes.ManifestSignatures found bool ) if manifestSignatures, found = repoMeta.Signatures[signedManifestDigest.String()]; !found { - manifestSignatures = repodb.ManifestSignatures{} + manifestSignatures = mTypes.ManifestSignatures{} } signatureSlice := manifestSignatures[sygMeta.SignatureType] if !common.SignatureAlreadyExists(signatureSlice, sygMeta) { if sygMeta.SignatureType == signatures.NotationSignature { - signatureSlice = append(signatureSlice, repodb.SignatureInfo{ + signatureSlice = append(signatureSlice, mTypes.SignatureInfo{ SignatureManifestDigest: sygMeta.SignatureDigest, LayersInfo: sygMeta.LayersInfo, }) } else if sygMeta.SignatureType == signatures.CosignSignature { - signatureSlice = []repodb.SignatureInfo{{ + signatureSlice = []mTypes.SignatureInfo{{ SignatureManifestDigest: sygMeta.SignatureDigest, LayersInfo: sygMeta.LayersInfo, }} @@ -911,18 +911,18 @@ func (bdw *DBWrapper) AddManifestSignature(repo string, signedManifestDigest god return err } -func (bdw *DBWrapper) DeleteSignature(repo string, signedManifestDigest godigest.Digest, - sigMeta repodb.SignatureMetadata, +func (bdw *BoltDB) DeleteSignature(repo string, signedManifestDigest godigest.Digest, + sigMeta mTypes.SignatureMetadata, ) error { err := bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := buck.Get([]byte(repo)) if repoMetaBlob == nil { return zerr.ErrManifestMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -932,7 +932,7 @@ func (bdw *DBWrapper) DeleteSignature(repo string, signedManifestDigest godigest sigType := sigMeta.SignatureType var ( - manifestSignatures repodb.ManifestSignatures + manifestSignatures mTypes.ManifestSignatures found bool ) @@ -942,7 +942,7 @@ func (bdw *DBWrapper) DeleteSignature(repo string, signedManifestDigest godigest signatureSlice := manifestSignatures[sigType] - newSignatureSlice := make([]repodb.SignatureInfo, 0, len(signatureSlice)-1) + newSignatureSlice := make([]mTypes.SignatureInfo, 0, len(signatureSlice)-1) for _, sigDigest := range signatureSlice { if sigDigest.SignatureManifestDigest != sigMeta.SignatureDigest { @@ -965,32 +965,32 @@ func (bdw *DBWrapper) DeleteSignature(repo string, signedManifestDigest godigest return err } -func (bdw *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter repodb.Filter, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, zcommon.PageInfo, +func (bdw *BoltDB) SearchRepos(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, zcommon.PageInfo, error, ) { var ( - foundRepos = make([]repodb.RepoMetadata, 0) - foundManifestMetadataMap = make(map[string]repodb.ManifestMetadata) - foundindexDataMap = make(map[string]repodb.IndexData) - pageFinder repodb.PageFinder + foundRepos = make([]mTypes.RepoMetadata, 0) + foundManifestMetadataMap = make(map[string]mTypes.ManifestMetadata) + foundindexDataMap = make(map[string]mTypes.IndexData) + pageFinder pagination.PageFinder pageInfo zcommon.PageInfo ) - pageFinder, err := repodb.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, zcommon.PageInfo{}, err } err = bdw.DB.View(func(transaction *bbolt.Tx) error { var ( - manifestMetadataMap = make(map[string]repodb.ManifestMetadata) - indexDataMap = make(map[string]repodb.IndexData) - repoBuck = transaction.Bucket([]byte(bolt.RepoMetadataBucket)) - indexBuck = transaction.Bucket([]byte(bolt.IndexDataBucket)) - manifestBuck = transaction.Bucket([]byte(bolt.ManifestDataBucket)) + manifestMetadataMap = make(map[string]mTypes.ManifestMetadata) + indexDataMap = make(map[string]mTypes.IndexData) + repoBuck = transaction.Bucket([]byte(RepoMetadataBucket)) + indexBuck = transaction.Bucket([]byte(IndexDataBucket)) + manifestBuck = transaction.Bucket([]byte(ManifestDataBucket)) userBookmarks = getUserBookmarks(ctx, transaction) userStars = getUserStars(ctx, transaction) ) @@ -1002,7 +1002,7 @@ func (bdw *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter continue } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -1034,13 +1034,13 @@ func (bdw *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter manifestMeta, err := fetchManifestMetaWithCheck(repoMeta, manifestDigest, manifestMetadataMap, manifestBuck) if err != nil { - return fmt.Errorf("repodb: error fetching manifest meta for manifest with digest %s %w", + return fmt.Errorf("metadb: error fetching manifest meta for manifest with digest %s %w", manifestDigest, err) } manifestFilterData, err := collectImageManifestFilterData(manifestDigest, repoMeta, manifestMeta) if err != nil { - return fmt.Errorf("repodb: error collecting filter data for manifest with digest %s %w", + return fmt.Errorf("metadb: error collecting filter data for manifest with digest %s %w", manifestDigest, err) } @@ -1062,7 +1062,7 @@ func (bdw *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter indexData, err := fetchIndexDataWithCheck(indexDigest, indexDataMap, indexBuck) if err != nil { - return fmt.Errorf("repodb: error fetching index data for index with digest %s %w", + return fmt.Errorf("metadb: error fetching index data for index with digest %s %w", indexDigest, err) } @@ -1070,7 +1070,7 @@ func (bdw *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter err = json.Unmarshal(indexData.IndexBlob, &indexContent) if err != nil { - return fmt.Errorf("repodb: error while unmashaling index content for %s:%s %w", + return fmt.Errorf("metadb: error while unmashaling index content for %s:%s %w", repoName, tag, err) } @@ -1078,7 +1078,7 @@ func (bdw *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter indexFilterData, err := collectImageIndexFilterInfo(indexDigest, repoMeta, indexData, manifestMetadataMap, manifestBuck) if err != nil { - return fmt.Errorf("repodb: error collecting filter data for index with digest %s %w", + return fmt.Errorf("metadb: error collecting filter data for index with digest %s %w", indexDigest, err) } @@ -1103,7 +1103,7 @@ func (bdw *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter } } - repoFilterData := repodb.FilterData{ + repoFilterData := mTypes.FilterData{ OsList: common.GetMapKeys(osSet), ArchList: common.GetMapKeys(archSet), LastUpdated: repoLastUpdated, @@ -1117,7 +1117,7 @@ func (bdw *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter continue } - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, Rank: rank, Downloads: repoDownloads, @@ -1136,22 +1136,22 @@ func (bdw *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter return foundRepos, foundManifestMetadataMap, foundindexDataMap, pageInfo, err } -func fetchManifestMetaWithCheck(repoMeta repodb.RepoMetadata, manifestDigest string, - manifestMetadataMap map[string]repodb.ManifestMetadata, manifestBuck *bbolt.Bucket, -) (repodb.ManifestMetadata, error) { +func fetchManifestMetaWithCheck(repoMeta mTypes.RepoMetadata, manifestDigest string, + manifestMetadataMap map[string]mTypes.ManifestMetadata, manifestBuck *bbolt.Bucket, +) (mTypes.ManifestMetadata, error) { manifestMeta, manifestDownloaded := manifestMetadataMap[manifestDigest] if !manifestDownloaded { - var manifestData repodb.ManifestData + var manifestData mTypes.ManifestData manifestDataBlob := manifestBuck.Get([]byte(manifestDigest)) if manifestDataBlob == nil { - return repodb.ManifestMetadata{}, zerr.ErrManifestMetaNotFound + return mTypes.ManifestMetadata{}, zerr.ErrManifestMetaNotFound } err := json.Unmarshal(manifestDataBlob, &manifestData) if err != nil { - return repodb.ManifestMetadata{}, fmt.Errorf("repodb: error while unmarshaling manifest metadata for digest %s %w", + return mTypes.ManifestMetadata{}, fmt.Errorf("metadb: error while unmarshaling manifest metadata for digest %s %w", manifestDigest, err) } @@ -1161,11 +1161,11 @@ func fetchManifestMetaWithCheck(repoMeta repodb.RepoMetadata, manifestDigest str return manifestMeta, nil } -func fetchIndexDataWithCheck(indexDigest string, indexDataMap map[string]repodb.IndexData, +func fetchIndexDataWithCheck(indexDigest string, indexDataMap map[string]mTypes.IndexData, indexBuck *bbolt.Bucket, -) (repodb.IndexData, error) { +) (mTypes.IndexData, error) { var ( - indexData repodb.IndexData + indexData mTypes.IndexData err error ) @@ -1174,22 +1174,22 @@ func fetchIndexDataWithCheck(indexDigest string, indexDataMap map[string]repodb. if !indexExists { indexDataBlob := indexBuck.Get([]byte(indexDigest)) if indexDataBlob == nil { - return repodb.IndexData{}, zerr.ErrIndexDataNotFount + return mTypes.IndexData{}, zerr.ErrIndexDataNotFount } err := json.Unmarshal(indexDataBlob, &indexData) if err != nil { - return repodb.IndexData{}, - fmt.Errorf("repodb: error while unmashaling index data for digest %s %w", indexDigest, err) + return mTypes.IndexData{}, + fmt.Errorf("metadb: error while unmashaling index data for digest %s %w", indexDigest, err) } } return indexData, err } -func collectImageManifestFilterData(digest string, repoMeta repodb.RepoMetadata, - manifestMeta repodb.ManifestMetadata, -) (repodb.FilterData, error) { +func collectImageManifestFilterData(digest string, repoMeta mTypes.RepoMetadata, + manifestMeta mTypes.ManifestMetadata, +) (mTypes.FilterData, error) { // get fields related to filtering var ( configContent ispec.Image @@ -1199,8 +1199,8 @@ func collectImageManifestFilterData(digest string, repoMeta repodb.RepoMetadata, err := json.Unmarshal(manifestMeta.ConfigBlob, &configContent) if err != nil { - return repodb.FilterData{}, - fmt.Errorf("repodb: error while unmarshaling config content %w", err) + return mTypes.FilterData{}, + fmt.Errorf("metadb: error while unmarshaling config content %w", err) } if configContent.OS != "" { @@ -1211,7 +1211,7 @@ func collectImageManifestFilterData(digest string, repoMeta repodb.RepoMetadata, archList = append(archList, configContent.Architecture) } - return repodb.FilterData{ + return mTypes.FilterData{ DownloadCount: repoMeta.Statistics[digest].DownloadCount, OsList: osList, ArchList: archList, @@ -1220,16 +1220,16 @@ func collectImageManifestFilterData(digest string, repoMeta repodb.RepoMetadata, }, nil } -func collectImageIndexFilterInfo(indexDigest string, repoMeta repodb.RepoMetadata, - indexData repodb.IndexData, manifestMetadataMap map[string]repodb.ManifestMetadata, +func collectImageIndexFilterInfo(indexDigest string, repoMeta mTypes.RepoMetadata, + indexData mTypes.IndexData, manifestMetadataMap map[string]mTypes.ManifestMetadata, manifestBuck *bbolt.Bucket, -) (repodb.FilterData, error) { +) (mTypes.FilterData, error) { var indexContent ispec.Index err := json.Unmarshal(indexData.IndexBlob, &indexContent) if err != nil { - return repodb.FilterData{}, - fmt.Errorf("repodb: error while unmarshaling index content for digest %s %w", indexDigest, err) + return mTypes.FilterData{}, + fmt.Errorf("metadb: error while unmarshaling index content for digest %s %w", indexDigest, err) } var ( @@ -1245,14 +1245,14 @@ func collectImageIndexFilterInfo(indexDigest string, repoMeta repodb.RepoMetadat manifestMeta, err := fetchManifestMetaWithCheck(repoMeta, manifestDigest.String(), manifestMetadataMap, manifestBuck) if err != nil { - return repodb.FilterData{}, + return mTypes.FilterData{}, fmt.Errorf("%w", err) } manifestFilterData, err := collectImageManifestFilterData(manifestDigest.String(), repoMeta, manifestMeta) if err != nil { - return repodb.FilterData{}, + return mTypes.FilterData{}, fmt.Errorf("%w", err) } @@ -1267,7 +1267,7 @@ func collectImageIndexFilterInfo(indexDigest string, repoMeta repodb.RepoMetadat manifestMetadataMap[manifest.Digest.String()] = manifestMeta } - return repodb.FilterData{ + return mTypes.FilterData{ DownloadCount: repoMeta.Statistics[indexDigest].DownloadCount, LastUpdated: indexLastUpdated, OsList: indexOsList, @@ -1276,17 +1276,17 @@ func collectImageIndexFilterInfo(indexDigest string, repoMeta repodb.RepoMetadat }, nil } -func NewManifestMetadata(manifestDigest string, repoMeta repodb.RepoMetadata, - manifestData repodb.ManifestData, -) repodb.ManifestMetadata { - manifestMeta := repodb.ManifestMetadata{ +func NewManifestMetadata(manifestDigest string, repoMeta mTypes.RepoMetadata, + manifestData mTypes.ManifestData, +) mTypes.ManifestMetadata { + manifestMeta := mTypes.ManifestMetadata{ ManifestBlob: manifestData.ManifestBlob, ConfigBlob: manifestData.ConfigBlob, } manifestMeta.DownloadCount = repoMeta.Statistics[manifestDigest].DownloadCount - manifestMeta.Signatures = repodb.ManifestSignatures{} + manifestMeta.Signatures = mTypes.ManifestSignatures{} if repoMeta.Signatures[manifestDigest] != nil { manifestMeta.Signatures = repoMeta.Signatures[manifestDigest] } @@ -1294,32 +1294,32 @@ func NewManifestMetadata(manifestDigest string, repoMeta repodb.RepoMetadata, return manifestMeta } -func (bdw *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, +func (bdw *BoltDB) FilterTags(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, zcommon.PageInfo, error, ) { var ( - foundRepos = make([]repodb.RepoMetadata, 0) - manifestMetadataMap = make(map[string]repodb.ManifestMetadata) - indexDataMap = make(map[string]repodb.IndexData) - foundManifestMetadataMap = make(map[string]repodb.ManifestMetadata) - foundindexDataMap = make(map[string]repodb.IndexData) - pageFinder repodb.PageFinder + foundRepos = make([]mTypes.RepoMetadata, 0) + manifestMetadataMap = make(map[string]mTypes.ManifestMetadata) + indexDataMap = make(map[string]mTypes.IndexData) + foundManifestMetadataMap = make(map[string]mTypes.ManifestMetadata) + foundindexDataMap = make(map[string]mTypes.IndexData) + pageFinder pagination.PageFinder pageInfo zcommon.PageInfo ) - pageFinder, err := repodb.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, zcommon.PageInfo{}, err } err = bdw.DB.View(func(transaction *bbolt.Tx) error { var ( - repoBuck = transaction.Bucket([]byte(bolt.RepoMetadataBucket)) - indexBuck = transaction.Bucket([]byte(bolt.IndexDataBucket)) - manifestBuck = transaction.Bucket([]byte(bolt.ManifestDataBucket)) + repoBuck = transaction.Bucket([]byte(RepoMetadataBucket)) + indexBuck = transaction.Bucket([]byte(IndexDataBucket)) + manifestBuck = transaction.Bucket([]byte(ManifestDataBucket)) cursor = repoBuck.Cursor() userBookmarks = getUserBookmarks(ctx, transaction) userStars = getUserStars(ctx, transaction) @@ -1332,7 +1332,7 @@ func (bdw *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu continue } - repoMeta := repodb.RepoMetadata{} + repoMeta := mTypes.RepoMetadata{} err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -1342,7 +1342,7 @@ func (bdw *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu repoMeta.IsBookmarked = zcommon.Contains(userBookmarks, repoMeta.Name) repoMeta.IsStarred = zcommon.Contains(userStars, repoMeta.Name) - matchedTags := make(map[string]repodb.Descriptor) + matchedTags := make(map[string]mTypes.Descriptor) // take all manifestMetas for tag, descriptor := range repoMeta.Tags { switch descriptor.MediaType { @@ -1351,12 +1351,12 @@ func (bdw *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu manifestMeta, err := fetchManifestMetaWithCheck(repoMeta, manifestDigest, manifestMetadataMap, manifestBuck) if err != nil { - return fmt.Errorf("repodb: error while unmashaling manifest metadata for digest %s %w", manifestDigest, err) + return fmt.Errorf("metadb: error while unmashaling manifest metadata for digest %s %w", manifestDigest, err) } imageFilterData, err := collectImageManifestFilterData(manifestDigest, repoMeta, manifestMeta) if err != nil { - return fmt.Errorf("repodb: error collecting filter data for manifest with digest %s %w", + return fmt.Errorf("metadb: error collecting filter data for manifest with digest %s %w", manifestDigest, err) } @@ -1373,14 +1373,14 @@ func (bdw *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu indexData, err := fetchIndexDataWithCheck(indexDigest, indexDataMap, indexBuck) if err != nil { - return fmt.Errorf("repodb: error while getting index data for digest %s %w", indexDigest, err) + return fmt.Errorf("metadb: error while getting index data for digest %s %w", indexDigest, err) } var indexContent ispec.Index err = json.Unmarshal(indexData.IndexBlob, &indexContent) if err != nil { - return fmt.Errorf("repodb: error while unmashaling index content for digest %s %w", indexDigest, err) + return fmt.Errorf("metadb: error while unmashaling index content for digest %s %w", indexDigest, err) } matchedManifests := []ispec.Descriptor{} @@ -1390,12 +1390,12 @@ func (bdw *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu manifestMeta, err := fetchManifestMetaWithCheck(repoMeta, manifestDigest, manifestMetadataMap, manifestBuck) if err != nil { - return fmt.Errorf("repodb: error while getting manifest data for digest %s %w", manifestDigest, err) + return fmt.Errorf("metadb: error while getting manifest data for digest %s %w", manifestDigest, err) } manifestFilterData, err := collectImageManifestFilterData(manifestDigest, repoMeta, manifestMeta) if err != nil { - return fmt.Errorf("repodb: error collecting filter data for manifest with digest %s %w", + return fmt.Errorf("metadb: error collecting filter data for manifest with digest %s %w", manifestDigest, err) } @@ -1435,7 +1435,7 @@ func (bdw *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu repoMeta.Tags = matchedTags - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, }) } @@ -1451,30 +1451,30 @@ func (bdw *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu return foundRepos, foundManifestMetadataMap, foundindexDataMap, pageInfo, err } -func (bdw *DBWrapper) FilterRepos(ctx context.Context, - filter repodb.FilterRepoFunc, - requestedPage repodb.PageInput, +func (bdw *BoltDB) FilterRepos(ctx context.Context, + filter mTypes.FilterRepoFunc, + requestedPage mTypes.PageInput, ) ( - []repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, zcommon.PageInfo, error, + []mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, zcommon.PageInfo, error, ) { var ( - foundRepos = make([]repodb.RepoMetadata, 0) - pageFinder repodb.PageFinder + foundRepos = make([]mTypes.RepoMetadata, 0) + pageFinder pagination.PageFinder pageInfo zcommon.PageInfo ) - pageFinder, err := repodb.NewBaseRepoPageFinder( + pageFinder, err := pagination.NewBaseRepoPageFinder( requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy, ) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, pageInfo, err + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } err = bdw.DB.View(func(tx *bbolt.Tx) error { var ( - buck = tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck = tx.Bucket([]byte(RepoMetadataBucket)) cursor = buck.Cursor() userBookmarks = getUserBookmarks(ctx, tx) userStars = getUserStars(ctx, tx) @@ -1485,7 +1485,7 @@ func (bdw *DBWrapper) FilterRepos(ctx context.Context, continue } - repoMeta := repodb.RepoMetadata{} + repoMeta := mTypes.RepoMetadata{} err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -1496,7 +1496,7 @@ func (bdw *DBWrapper) FilterRepos(ctx context.Context, repoMeta.IsStarred = zcommon.Contains(userStars, repoMeta.Name) if filter(repoMeta) { - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, }) } @@ -1507,7 +1507,7 @@ func (bdw *DBWrapper) FilterRepos(ctx context.Context, return nil }) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, pageInfo, err + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } foundManifestMetadataMap, foundIndexDataMap, err := common.FetchDataForRepos(bdw, foundRepos) @@ -1515,38 +1515,38 @@ func (bdw *DBWrapper) FilterRepos(ctx context.Context, return foundRepos, foundManifestMetadataMap, foundIndexDataMap, pageInfo, err } -func (bdw *DBWrapper) SearchTags(ctx context.Context, searchText string, filter repodb.Filter, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, zcommon.PageInfo, error) { +func (bdw *BoltDB) SearchTags(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, zcommon.PageInfo, error) { var ( - foundRepos = make([]repodb.RepoMetadata, 0) - manifestMetadataMap = make(map[string]repodb.ManifestMetadata) - indexDataMap = make(map[string]repodb.IndexData) - foundManifestMetadataMap = make(map[string]repodb.ManifestMetadata) - foundindexDataMap = make(map[string]repodb.IndexData) + foundRepos = make([]mTypes.RepoMetadata, 0) + manifestMetadataMap = make(map[string]mTypes.ManifestMetadata) + indexDataMap = make(map[string]mTypes.IndexData) + foundManifestMetadataMap = make(map[string]mTypes.ManifestMetadata) + foundindexDataMap = make(map[string]mTypes.IndexData) pageInfo zcommon.PageInfo - pageFinder repodb.PageFinder + pageFinder pagination.PageFinder ) - pageFinder, err := repodb.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, zcommon.PageInfo{}, err } searchedRepo, searchedTag, err := common.GetRepoTag(searchText) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, zcommon.PageInfo{}, - fmt.Errorf("repodb: error while parsing search text, invalid format %w", err) + fmt.Errorf("metadb: error while parsing search text, invalid format %w", err) } err = bdw.DB.View(func(transaction *bbolt.Tx) error { var ( - repoBuck = transaction.Bucket([]byte(bolt.RepoMetadataBucket)) - indexBuck = transaction.Bucket([]byte(bolt.IndexDataBucket)) - manifestBuck = transaction.Bucket([]byte(bolt.ManifestDataBucket)) + repoBuck = transaction.Bucket([]byte(RepoMetadataBucket)) + indexBuck = transaction.Bucket([]byte(IndexDataBucket)) + manifestBuck = transaction.Bucket([]byte(ManifestDataBucket)) cursor = repoBuck.Cursor() userBookmarks = getUserBookmarks(ctx, transaction) userStars = getUserStars(ctx, transaction) @@ -1559,7 +1559,7 @@ func (bdw *DBWrapper) SearchTags(ctx context.Context, searchText string, filter continue } - repoMeta := repodb.RepoMetadata{} + repoMeta := mTypes.RepoMetadata{} err := json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -1573,7 +1573,7 @@ func (bdw *DBWrapper) SearchTags(ctx context.Context, searchText string, filter continue } - matchedTags := make(map[string]repodb.Descriptor) + matchedTags := make(map[string]mTypes.Descriptor) for tag, descriptor := range repoMeta.Tags { if !strings.HasPrefix(tag, searchedTag) { @@ -1588,13 +1588,13 @@ func (bdw *DBWrapper) SearchTags(ctx context.Context, searchText string, filter manifestMeta, err := fetchManifestMetaWithCheck(repoMeta, manifestDigest, manifestMetadataMap, manifestBuck) if err != nil { - return fmt.Errorf("repodb: error fetching manifest meta for manifest with digest %s %w", + return fmt.Errorf("metadb: error fetching manifest meta for manifest with digest %s %w", manifestDigest, err) } imageFilterData, err := collectImageManifestFilterData(manifestDigest, repoMeta, manifestMeta) if err != nil { - return fmt.Errorf("repodb: error collecting filter data for manifest with digest %s %w", + return fmt.Errorf("metadb: error collecting filter data for manifest with digest %s %w", manifestDigest, err) } @@ -1610,7 +1610,7 @@ func (bdw *DBWrapper) SearchTags(ctx context.Context, searchText string, filter indexData, err := fetchIndexDataWithCheck(indexDigest, indexDataMap, indexBuck) if err != nil { - return fmt.Errorf("repodb: error fetching index data for index with digest %s %w", + return fmt.Errorf("metadb: error fetching index data for index with digest %s %w", indexDigest, err) } @@ -1618,7 +1618,7 @@ func (bdw *DBWrapper) SearchTags(ctx context.Context, searchText string, filter err = json.Unmarshal(indexData.IndexBlob, &indexContent) if err != nil { - return fmt.Errorf("repodb: error collecting filter data for index with digest %s %w", + return fmt.Errorf("metadb: error collecting filter data for index with digest %s %w", indexDigest, err) } @@ -1629,13 +1629,13 @@ func (bdw *DBWrapper) SearchTags(ctx context.Context, searchText string, filter manifestMeta, err := fetchManifestMetaWithCheck(repoMeta, manifestDigest, manifestMetadataMap, manifestBuck) if err != nil { - return fmt.Errorf("repodb: error fetching from db manifest meta for manifest with digest %s %w", + return fmt.Errorf("metadb: error fetching from db manifest meta for manifest with digest %s %w", manifestDigest, err) } manifestFilterData, err := collectImageManifestFilterData(manifestDigest, repoMeta, manifestMeta) if err != nil { - return fmt.Errorf("repodb: error collecting filter data for manifest with digest %s %w", + return fmt.Errorf("metadb: error collecting filter data for manifest with digest %s %w", manifestDigest, err) } @@ -1670,7 +1670,7 @@ func (bdw *DBWrapper) SearchTags(ctx context.Context, searchText string, filter repoMeta.Tags = matchedTags - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, }) } @@ -1686,27 +1686,27 @@ func (bdw *DBWrapper) SearchTags(ctx context.Context, searchText string, filter return foundRepos, foundManifestMetadataMap, foundindexDataMap, pageInfo, err } -func (bdw *DBWrapper) ToggleStarRepo(ctx context.Context, repo string) (repodb.ToggleState, error) { +func (bdw *BoltDB) ToggleStarRepo(ctx context.Context, repo string) (mTypes.ToggleState, error) { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { - return repodb.NotChanged, err + return mTypes.NotChanged, err } userid := localCtx.GetUsernameFromContext(acCtx) if userid == "" { // empty user is anonymous - return repodb.NotChanged, zerr.ErrUserDataNotAllowed + return mTypes.NotChanged, zerr.ErrUserDataNotAllowed } if ok, err := localCtx.RepoIsUserAvailable(ctx, repo); !ok || err != nil { - return repodb.NotChanged, zerr.ErrUserDataNotAllowed + return mTypes.NotChanged, zerr.ErrUserDataNotAllowed } - var res repodb.ToggleState + var res mTypes.ToggleState if err := bdw.DB.Update(func(tx *bbolt.Tx) error { //nolint:varnamelen - var userData repodb.UserData + var userData mTypes.UserData err := bdw.getUserData(userid, tx, &userData) if err != nil && !errors.Is(err, zerr.ErrUserDataNotFound) { @@ -1716,10 +1716,10 @@ func (bdw *DBWrapper) ToggleStarRepo(ctx context.Context, repo string) (repodb.T isRepoStarred := zcommon.Contains(userData.StarredRepos, repo) if isRepoStarred { - res = repodb.Removed + res = mTypes.Removed userData.StarredRepos = zcommon.RemoveFrom(userData.StarredRepos, repo) } else { - res = repodb.Added + res = mTypes.Added userData.StarredRepos = append(userData.StarredRepos, repo) } @@ -1728,14 +1728,14 @@ func (bdw *DBWrapper) ToggleStarRepo(ctx context.Context, repo string) (repodb.T return err } - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(RepoMetadataBucket)) repoMetaBlob := repoBuck.Get([]byte(repo)) if repoMetaBlob == nil { return zerr.ErrRepoMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err = json.Unmarshal(repoMetaBlob, &repoMeta) if err != nil { @@ -1743,9 +1743,9 @@ func (bdw *DBWrapper) ToggleStarRepo(ctx context.Context, repo string) (repodb.T } switch res { - case repodb.Added: + case mTypes.Added: repoMeta.Stars++ - case repodb.Removed: + case mTypes.Removed: repoMeta.Stars-- } @@ -1761,13 +1761,13 @@ func (bdw *DBWrapper) ToggleStarRepo(ctx context.Context, repo string) (repodb.T return nil }); err != nil { - return repodb.NotChanged, err + return mTypes.NotChanged, err } return res, nil } -func (bdw *DBWrapper) GetStarredRepos(ctx context.Context) ([]string, error) { +func (bdw *BoltDB) GetStarredRepos(ctx context.Context) ([]string, error) { userData, err := bdw.GetUserData(ctx) if errors.Is(err, zerr.ErrUserDataNotFound) || errors.Is(err, zerr.ErrUserDataNotAllowed) { return []string{}, nil @@ -1776,26 +1776,26 @@ func (bdw *DBWrapper) GetStarredRepos(ctx context.Context) ([]string, error) { return userData.StarredRepos, err } -func (bdw *DBWrapper) ToggleBookmarkRepo(ctx context.Context, repo string) (repodb.ToggleState, error) { +func (bdw *BoltDB) ToggleBookmarkRepo(ctx context.Context, repo string) (mTypes.ToggleState, error) { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { - return repodb.NotChanged, err + return mTypes.NotChanged, err } userid := localCtx.GetUsernameFromContext(acCtx) if userid == "" { // empty user is anonymous - return repodb.NotChanged, zerr.ErrUserDataNotAllowed + return mTypes.NotChanged, zerr.ErrUserDataNotAllowed } if ok, err := localCtx.RepoIsUserAvailable(ctx, repo); !ok || err != nil { - return repodb.NotChanged, zerr.ErrUserDataNotAllowed + return mTypes.NotChanged, zerr.ErrUserDataNotAllowed } - var res repodb.ToggleState + var res mTypes.ToggleState if err := bdw.DB.Update(func(transaction *bbolt.Tx) error { //nolint:dupl - var userData repodb.UserData + var userData mTypes.UserData err := bdw.getUserData(userid, transaction, &userData) if err != nil && !errors.Is(err, zerr.ErrUserDataNotFound) { @@ -1805,22 +1805,22 @@ func (bdw *DBWrapper) ToggleBookmarkRepo(ctx context.Context, repo string) (repo isRepoBookmarked := zcommon.Contains(userData.BookmarkedRepos, repo) if isRepoBookmarked { - res = repodb.Removed + res = mTypes.Removed userData.BookmarkedRepos = zcommon.RemoveFrom(userData.BookmarkedRepos, repo) } else { - res = repodb.Added + res = mTypes.Added userData.BookmarkedRepos = append(userData.BookmarkedRepos, repo) } return bdw.setUserData(userid, transaction, userData) }); err != nil { - return repodb.NotChanged, err + return mTypes.NotChanged, err } return res, nil } -func (bdw *DBWrapper) GetBookmarkedRepos(ctx context.Context) ([]string, error) { +func (bdw *BoltDB) GetBookmarkedRepos(ctx context.Context) ([]string, error) { userData, err := bdw.GetUserData(ctx) if errors.Is(err, zerr.ErrUserDataNotFound) || errors.Is(err, zerr.ErrUserDataNotAllowed) { return []string{}, nil @@ -1829,11 +1829,11 @@ func (bdw *DBWrapper) GetBookmarkedRepos(ctx context.Context) ([]string, error) return userData.BookmarkedRepos, err } -func (bdw *DBWrapper) PatchDB() error { +func (bdw *BoltDB) PatchDB() error { var DBVersion string err := bdw.DB.View(func(tx *bbolt.Tx) error { - versionBuck := tx.Bucket([]byte(bolt.VersionBucket)) + versionBuck := tx.Bucket([]byte(VersionBucket)) DBVersion = string(versionBuck.Get([]byte(version.DBVersionKey))) return nil @@ -1867,9 +1867,9 @@ func getUserStars(ctx context.Context, transaction *bbolt.Tx) []string { } var ( - userData repodb.UserData + userData mTypes.UserData userid = localCtx.GetUsernameFromContext(acCtx) - userdb = transaction.Bucket([]byte(bolt.UserDataBucket)) + userdb = transaction.Bucket([]byte(UserDataBucket)) ) if userid == "" || userdb == nil { @@ -1895,9 +1895,9 @@ func getUserBookmarks(ctx context.Context, transaction *bbolt.Tx) []string { } var ( - userData repodb.UserData + userData mTypes.UserData userid = localCtx.GetUsernameFromContext(acCtx) - userdb = transaction.Bucket([]byte(bolt.UserDataBucket)) + userdb = transaction.Bucket([]byte(UserDataBucket)) ) if userid == "" || userdb == nil { @@ -1916,7 +1916,7 @@ func getUserBookmarks(ctx context.Context, transaction *bbolt.Tx) []string { return userData.BookmarkedRepos } -func (bdw *DBWrapper) SetUserGroups(ctx context.Context, groups []string) error { +func (bdw *BoltDB) SetUserGroups(ctx context.Context, groups []string) error { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { return err @@ -1930,7 +1930,7 @@ func (bdw *DBWrapper) SetUserGroups(ctx context.Context, groups []string) error } err = bdw.DB.Update(func(tx *bbolt.Tx) error { //nolint:varnamelen - var userData repodb.UserData + var userData mTypes.UserData err := bdw.getUserData(userid, tx, &userData) if err != nil && !errors.Is(err, zerr.ErrUserDataNotFound) { @@ -1947,13 +1947,13 @@ func (bdw *DBWrapper) SetUserGroups(ctx context.Context, groups []string) error return err } -func (bdw *DBWrapper) GetUserGroups(ctx context.Context) ([]string, error) { +func (bdw *BoltDB) GetUserGroups(ctx context.Context) ([]string, error) { userData, err := bdw.GetUserData(ctx) return userData.Groups, err } -func (bdw *DBWrapper) UpdateUserAPIKeyLastUsed(ctx context.Context, hashedKey string) error { +func (bdw *BoltDB) UpdateUserAPIKeyLastUsed(ctx context.Context, hashedKey string) error { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { return err @@ -1967,7 +1967,7 @@ func (bdw *DBWrapper) UpdateUserAPIKeyLastUsed(ctx context.Context, hashedKey st } err = bdw.DB.Update(func(tx *bbolt.Tx) error { //nolint:varnamelen - var userData repodb.UserData + var userData mTypes.UserData err := bdw.getUserData(userid, tx, &userData) if err != nil { @@ -1987,7 +1987,7 @@ func (bdw *DBWrapper) UpdateUserAPIKeyLastUsed(ctx context.Context, hashedKey st return err } -func (bdw *DBWrapper) AddUserAPIKey(ctx context.Context, hashedKey string, apiKeyDetails *repodb.APIKeyDetails) error { +func (bdw *BoltDB) AddUserAPIKey(ctx context.Context, hashedKey string, apiKeyDetails *mTypes.APIKeyDetails) error { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { return err @@ -2000,16 +2000,16 @@ func (bdw *DBWrapper) AddUserAPIKey(ctx context.Context, hashedKey string, apiKe } err = bdw.DB.Update(func(transaction *bbolt.Tx) error { - var userData repodb.UserData + var userData mTypes.UserData - apiKeysbuck := transaction.Bucket([]byte(bolt.UserAPIKeysBucket)) + apiKeysbuck := transaction.Bucket([]byte(UserAPIKeysBucket)) if apiKeysbuck == nil { return zerr.ErrBucketDoesNotExist } err := apiKeysbuck.Put([]byte(hashedKey), []byte(userid)) if err != nil { - return fmt.Errorf("repoDB: error while setting userData for identity %s %w", userid, err) + return fmt.Errorf("metaDB: error while setting userData for identity %s %w", userid, err) } err = bdw.getUserData(userid, transaction, &userData) @@ -2018,7 +2018,7 @@ func (bdw *DBWrapper) AddUserAPIKey(ctx context.Context, hashedKey string, apiKe } if userData.APIKeys == nil { - userData.APIKeys = make(map[string]repodb.APIKeyDetails) + userData.APIKeys = make(map[string]mTypes.APIKeyDetails) } userData.APIKeys[hashedKey] = *apiKeyDetails @@ -2031,7 +2031,7 @@ func (bdw *DBWrapper) AddUserAPIKey(ctx context.Context, hashedKey string, apiKe return err } -func (bdw *DBWrapper) DeleteUserAPIKey(ctx context.Context, keyID string) error { +func (bdw *BoltDB) DeleteUserAPIKey(ctx context.Context, keyID string) error { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { return err @@ -2044,9 +2044,9 @@ func (bdw *DBWrapper) DeleteUserAPIKey(ctx context.Context, keyID string) error } err = bdw.DB.Update(func(transaction *bbolt.Tx) error { - var userData repodb.UserData + var userData mTypes.UserData - apiKeysbuck := transaction.Bucket([]byte(bolt.UserAPIKeysBucket)) + apiKeysbuck := transaction.Bucket([]byte(UserAPIKeysBucket)) if apiKeysbuck == nil { return zerr.ErrBucketDoesNotExist } @@ -2073,10 +2073,10 @@ func (bdw *DBWrapper) DeleteUserAPIKey(ctx context.Context, keyID string) error return err } -func (bdw *DBWrapper) GetUserAPIKeyInfo(hashedKey string) (string, error) { +func (bdw *BoltDB) GetUserAPIKeyInfo(hashedKey string) (string, error) { var userid string err := bdw.DB.View(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.UserAPIKeysBucket)) + buck := tx.Bucket([]byte(UserAPIKeysBucket)) if buck == nil { return zerr.ErrBucketDoesNotExist } @@ -2094,8 +2094,8 @@ func (bdw *DBWrapper) GetUserAPIKeyInfo(hashedKey string) (string, error) { return userid, err } -func (bdw *DBWrapper) GetUserData(ctx context.Context) (repodb.UserData, error) { - var userData repodb.UserData +func (bdw *BoltDB) GetUserData(ctx context.Context) (mTypes.UserData, error) { + var userData mTypes.UserData acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { @@ -2115,8 +2115,8 @@ func (bdw *DBWrapper) GetUserData(ctx context.Context) (repodb.UserData, error) return userData, err } -func (bdw *DBWrapper) getUserData(userid string, transaction *bbolt.Tx, res *repodb.UserData) error { - buck := transaction.Bucket([]byte(bolt.UserDataBucket)) +func (bdw *BoltDB) getUserData(userid string, transaction *bbolt.Tx, res *mTypes.UserData) error { + buck := transaction.Bucket([]byte(UserDataBucket)) if buck == nil { return zerr.ErrBucketDoesNotExist } @@ -2135,7 +2135,7 @@ func (bdw *DBWrapper) getUserData(userid string, transaction *bbolt.Tx, res *rep return nil } -func (bdw *DBWrapper) SetUserData(ctx context.Context, userData repodb.UserData) error { +func (bdw *BoltDB) SetUserData(ctx context.Context, userData mTypes.UserData) error { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { return err @@ -2154,8 +2154,8 @@ func (bdw *DBWrapper) SetUserData(ctx context.Context, userData repodb.UserData) return err } -func (bdw *DBWrapper) setUserData(userid string, transaction *bbolt.Tx, userData repodb.UserData) error { - buck := transaction.Bucket([]byte(bolt.UserDataBucket)) +func (bdw *BoltDB) setUserData(userid string, transaction *bbolt.Tx, userData mTypes.UserData) error { + buck := transaction.Bucket([]byte(UserDataBucket)) if buck == nil { return zerr.ErrBucketDoesNotExist } @@ -2167,13 +2167,13 @@ func (bdw *DBWrapper) setUserData(userid string, transaction *bbolt.Tx, userData err = buck.Put([]byte(userid), upBlob) if err != nil { - return fmt.Errorf("repoDB: error while setting userData for identity %s %w", userid, err) + return fmt.Errorf("metaDB: error while setting userData for identity %s %w", userid, err) } return nil } -func (bdw *DBWrapper) DeleteUserData(ctx context.Context) error { +func (bdw *BoltDB) DeleteUserData(ctx context.Context) error { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { return err @@ -2186,14 +2186,14 @@ func (bdw *DBWrapper) DeleteUserData(ctx context.Context) error { } err = bdw.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.UserDataBucket)) + buck := tx.Bucket([]byte(UserDataBucket)) if buck == nil { return zerr.ErrBucketDoesNotExist } err := buck.Delete([]byte(userid)) if err != nil { - return fmt.Errorf("repoDB: error while deleting userData for identity %s %w", userid, err) + return fmt.Errorf("metaDB: error while deleting userData for identity %s %w", userid, err) } return nil diff --git a/pkg/meta/repodb/boltdb-wrapper/boltdb_wrapper_test.go b/pkg/meta/boltdb/boltdb_test.go similarity index 78% rename from pkg/meta/repodb/boltdb-wrapper/boltdb_wrapper_test.go rename to pkg/meta/boltdb/boltdb_test.go index 6302eb25..79fbc846 100644 --- a/pkg/meta/repodb/boltdb-wrapper/boltdb_wrapper_test.go +++ b/pkg/meta/boltdb/boltdb_test.go @@ -1,4 +1,4 @@ -package bolt_test +package boltdb_test import ( "context" @@ -15,10 +15,9 @@ import ( zerr "zotregistry.io/zot/errors" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/repodb" - boltdb_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" + "zotregistry.io/zot/pkg/meta/boltdb" "zotregistry.io/zot/pkg/meta/signatures" + mTypes "zotregistry.io/zot/pkg/meta/types" localCtx "zotregistry.io/zot/pkg/requestcontext" "zotregistry.io/zot/pkg/test" ) @@ -26,19 +25,19 @@ import ( func TestWrapperErrors(t *testing.T) { Convey("Errors", t, func() { tmpDir := t.TempDir() - boltDBParams := bolt.DBParameters{RootDir: tmpDir} - boltDriver, err := bolt.GetBoltDriver(boltDBParams) + boltDBParams := boltdb.DBParameters{RootDir: tmpDir} + boltDriver, err := boltdb.GetBoltDriver(boltDBParams) So(err, ShouldBeNil) log := log.NewLogger("debug", "") - boltdbWrapper, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) + boltdbWrapper, err := boltdb.New(boltDriver, log) So(boltdbWrapper, ShouldNotBeNil) So(err, ShouldBeNil) - repoMeta := repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{}, - Signatures: map[string]repodb.ManifestSignatures{}, + repoMeta := mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{}, + Signatures: map[string]mTypes.ManifestSignatures{}, } repoMetaBlob, err := json.Marshal(repoMeta) @@ -59,28 +58,28 @@ func TestWrapperErrors(t *testing.T) { } ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - err = boltdbWrapper.AddUserAPIKey(ctx, "", &repodb.APIKeyDetails{}) + err = boltdbWrapper.AddUserAPIKey(ctx, "", &mTypes.APIKeyDetails{}) So(err, ShouldNotBeNil) }) - err = boltdbWrapper.AddUserAPIKey(ctx, "", &repodb.APIKeyDetails{}) + err = boltdbWrapper.AddUserAPIKey(ctx, "", &mTypes.APIKeyDetails{}) So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - return tx.DeleteBucket([]byte(bolt.UserDataBucket)) + return tx.DeleteBucket([]byte(boltdb.UserDataBucket)) }) So(err, ShouldBeNil) - err = boltdbWrapper.AddUserAPIKey(ctx, "test", &repodb.APIKeyDetails{}) + err = boltdbWrapper.AddUserAPIKey(ctx, "test", &mTypes.APIKeyDetails{}) So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - return tx.DeleteBucket([]byte(bolt.UserAPIKeysBucket)) + return tx.DeleteBucket([]byte(boltdb.UserAPIKeysBucket)) }) So(err, ShouldBeNil) - err = boltdbWrapper.AddUserAPIKey(ctx, "", &repodb.APIKeyDetails{}) + err = boltdbWrapper.AddUserAPIKey(ctx, "", &mTypes.APIKeyDetails{}) So(err, ShouldEqual, zerr.ErrBucketDoesNotExist) }) @@ -98,15 +97,15 @@ func TestWrapperErrors(t *testing.T) { }) Convey("DeleteUserAPIKey", func() { - err = boltdbWrapper.SetUserData(ctx, repodb.UserData{}) + err = boltdbWrapper.SetUserData(ctx, mTypes.UserData{}) So(err, ShouldBeNil) - err = boltdbWrapper.AddUserAPIKey(ctx, "hashedKey", &repodb.APIKeyDetails{}) + err = boltdbWrapper.AddUserAPIKey(ctx, "hashedKey", &mTypes.APIKeyDetails{}) So(err, ShouldBeNil) Convey("no such bucket", func() { err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - return tx.DeleteBucket([]byte(bolt.UserAPIKeysBucket)) + return tx.DeleteBucket([]byte(boltdb.UserAPIKeysBucket)) }) So(err, ShouldBeNil) @@ -148,7 +147,7 @@ func TestWrapperErrors(t *testing.T) { So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - return tx.DeleteBucket([]byte(bolt.UserDataBucket)) + return tx.DeleteBucket([]byte(boltdb.UserDataBucket)) }) So(err, ShouldBeNil) @@ -158,7 +157,7 @@ func TestWrapperErrors(t *testing.T) { Convey("GetUserAPIKeyInfo", func() { err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - return tx.DeleteBucket([]byte(bolt.UserAPIKeysBucket)) + return tx.DeleteBucket([]byte(boltdb.UserAPIKeysBucket)) }) So(err, ShouldBeNil) @@ -168,7 +167,7 @@ func TestWrapperErrors(t *testing.T) { Convey("GetUserData", func() { err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.UserDataBucket)) + buck := tx.Bucket([]byte(boltdb.UserDataBucket)) So(buck, ShouldNotBeNil) return buck.Put([]byte("test"), []byte("dsa8")) @@ -180,7 +179,7 @@ func TestWrapperErrors(t *testing.T) { So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - return tx.DeleteBucket([]byte(bolt.UserAPIKeysBucket)) + return tx.DeleteBucket([]byte(boltdb.UserAPIKeysBucket)) }) So(err, ShouldBeNil) @@ -195,7 +194,7 @@ func TestWrapperErrors(t *testing.T) { ctx = context.WithValue(context.Background(), authzCtxKey, acCtx) - err = boltdbWrapper.SetUserData(ctx, repodb.UserData{}) + err = boltdbWrapper.SetUserData(ctx, mTypes.UserData{}) So(err, ShouldNotBeNil) buff := make([]byte, int(math.Ceil(float64(1000000)/float64(1.33333333333)))) @@ -212,11 +211,11 @@ func TestWrapperErrors(t *testing.T) { ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - err = boltdbWrapper.SetUserData(ctx, repodb.UserData{}) //nolint: contextcheck + err = boltdbWrapper.SetUserData(ctx, mTypes.UserData{}) //nolint: contextcheck So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - return tx.DeleteBucket([]byte(bolt.UserDataBucket)) + return tx.DeleteBucket([]byte(boltdb.UserDataBucket)) }) So(err, ShouldBeNil) @@ -226,7 +225,7 @@ func TestWrapperErrors(t *testing.T) { ctx = context.WithValue(context.Background(), authzCtxKey, acCtx) - err = boltdbWrapper.SetUserData(ctx, repodb.UserData{}) //nolint: contextcheck + err = boltdbWrapper.SetUserData(ctx, mTypes.UserData{}) //nolint: contextcheck So(err, ShouldNotBeNil) }) @@ -241,7 +240,7 @@ func TestWrapperErrors(t *testing.T) { So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - return tx.DeleteBucket([]byte(bolt.UserDataBucket)) + return tx.DeleteBucket([]byte(boltdb.UserDataBucket)) }) So(err, ShouldBeNil) @@ -271,7 +270,7 @@ func TestWrapperErrors(t *testing.T) { Convey("GetManifestData", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - dataBuck := tx.Bucket([]byte(bolt.ManifestDataBucket)) + dataBuck := tx.Bucket([]byte(boltdb.ManifestDataBucket)) return dataBuck.Put([]byte("digest1"), []byte("wrong json")) }) @@ -286,8 +285,8 @@ func TestWrapperErrors(t *testing.T) { Convey("SetManifestMeta", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) - dataBuck := tx.Bucket([]byte(bolt.ManifestDataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) + dataBuck := tx.Bucket([]byte(boltdb.ManifestDataBucket)) err := dataBuck.Put([]byte("digest1"), repoMetaBlob) if err != nil { @@ -298,7 +297,7 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - err = boltdbWrapper.SetManifestMeta("repo1", "digest1", repodb.ManifestMetadata{}) + err = boltdbWrapper.SetManifestMeta("repo1", "digest1", mTypes.ManifestMetadata{}) So(err, ShouldNotBeNil) _, err = boltdbWrapper.GetManifestMeta("repo1", "digest1") @@ -307,7 +306,7 @@ func TestWrapperErrors(t *testing.T) { Convey("FilterRepos", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - buck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + buck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) err := buck.Put([]byte("badRepo"), []byte("bad repo")) So(err, ShouldBeNil) @@ -316,19 +315,19 @@ func TestWrapperErrors(t *testing.T) { So(err, ShouldBeNil) _, _, _, _, err = boltdbWrapper.FilterRepos(context.Background(), - func(repoMeta repodb.RepoMetadata) bool { return true }, repodb.PageInput{}) + func(repoMeta mTypes.RepoMetadata) bool { return true }, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) Convey("SetReferrer", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo"), []byte("wrong json")) }) So(err, ShouldBeNil) - err = boltdbWrapper.SetReferrer("repo", "ref", repodb.ReferrerInfo{}) + err = boltdbWrapper.SetReferrer("repo", "ref", mTypes.ReferrerInfo{}) So(err, ShouldNotBeNil) }) @@ -340,7 +339,7 @@ func TestWrapperErrors(t *testing.T) { Convey("bad repo meta blob", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo"), []byte("wrong json")) }) @@ -353,7 +352,7 @@ func TestWrapperErrors(t *testing.T) { Convey("SetRepoReference", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) @@ -365,7 +364,7 @@ func TestWrapperErrors(t *testing.T) { Convey("GetRepoMeta", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) @@ -377,7 +376,7 @@ func TestWrapperErrors(t *testing.T) { Convey("DeleteRepoTag", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) @@ -392,7 +391,7 @@ func TestWrapperErrors(t *testing.T) { So(err, ShouldNotBeNil) err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) @@ -404,7 +403,7 @@ func TestWrapperErrors(t *testing.T) { Convey("IncrementRepoStars", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) @@ -419,7 +418,7 @@ func TestWrapperErrors(t *testing.T) { Convey("DecrementRepoStars", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) @@ -434,7 +433,7 @@ func TestWrapperErrors(t *testing.T) { Convey("GetRepoStars", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) @@ -446,21 +445,21 @@ func TestWrapperErrors(t *testing.T) { Convey("GetMultipleRepoMeta", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) So(err, ShouldBeNil) - _, err = boltdbWrapper.GetMultipleRepoMeta(context.TODO(), func(repoMeta repodb.RepoMetadata) bool { + _, err = boltdbWrapper.GetMultipleRepoMeta(context.TODO(), func(repoMeta mTypes.RepoMetadata) bool { return true - }, repodb.PageInput{}) + }, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) Convey("IncrementImageDownloads", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) @@ -473,7 +472,7 @@ func TestWrapperErrors(t *testing.T) { So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), repoMetaBlob) }) @@ -485,18 +484,18 @@ func TestWrapperErrors(t *testing.T) { Convey("AddManifestSignature", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) So(err, ShouldBeNil) err = boltdbWrapper.AddManifestSignature("repo1", digest.FromString("dig"), - repodb.SignatureMetadata{}) + mTypes.SignatureMetadata{}) So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), repoMetaBlob) }) @@ -504,16 +503,16 @@ func TestWrapperErrors(t *testing.T) { // signatures not found err = boltdbWrapper.AddManifestSignature("repo1", digest.FromString("dig"), - repodb.SignatureMetadata{}) + mTypes.SignatureMetadata{}) So(err, ShouldBeNil) // err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) - repoMeta := repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{}, - Signatures: map[string]repodb.ManifestSignatures{ + repoMeta := mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{}, + Signatures: map[string]mTypes.ManifestSignatures{ "digest1": { "cosgin": {{}}, }, @@ -531,14 +530,14 @@ func TestWrapperErrors(t *testing.T) { So(err, ShouldBeNil) err = boltdbWrapper.AddManifestSignature("repo1", digest.FromString("dig"), - repodb.SignatureMetadata{ + mTypes.SignatureMetadata{ SignatureType: "cosign", SignatureDigest: "digest1", }) So(err, ShouldBeNil) err = boltdbWrapper.AddManifestSignature("repo1", digest.FromString("dig"), - repodb.SignatureMetadata{ + mTypes.SignatureMetadata{ SignatureType: "cosign", SignatureDigest: "digest2", }) @@ -552,7 +551,7 @@ func TestWrapperErrors(t *testing.T) { ShouldEqual, "digest2") err = boltdbWrapper.AddManifestSignature("repo1", digest.FromString("dig"), - repodb.SignatureMetadata{ + mTypes.SignatureMetadata{ SignatureType: "notation", SignatureDigest: "digest2", }) @@ -561,28 +560,28 @@ func TestWrapperErrors(t *testing.T) { Convey("DeleteSignature", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) So(err, ShouldBeNil) err = boltdbWrapper.DeleteSignature("repo2", digest.FromString("dig"), - repodb.SignatureMetadata{}) + mTypes.SignatureMetadata{}) So(err, ShouldNotBeNil) err = boltdbWrapper.DeleteSignature("repo1", digest.FromString("dig"), - repodb.SignatureMetadata{}) + mTypes.SignatureMetadata{}) So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) - repoMeta := repodb.RepoMetadata{ - Tags: map[string]repodb.Descriptor{}, - Signatures: map[string]repodb.ManifestSignatures{ + repoMeta := mTypes.RepoMetadata{ + Tags: map[string]mTypes.Descriptor{}, + Signatures: map[string]mTypes.ManifestSignatures{ "digest1": { - "cosgin": []repodb.SignatureInfo{ + "cosgin": []mTypes.SignatureInfo{ { SignatureManifestDigest: "sigDigest1", }, @@ -605,7 +604,7 @@ func TestWrapperErrors(t *testing.T) { So(err, ShouldBeNil) err = boltdbWrapper.DeleteSignature("repo1", "digest1", - repodb.SignatureMetadata{ + mTypes.SignatureMetadata{ SignatureType: "cosgin", SignatureDigest: "sigDigest2", }) @@ -614,30 +613,30 @@ func TestWrapperErrors(t *testing.T) { Convey("SearchRepos", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) So(err, ShouldBeNil) - _, _, _, _, err = boltdbWrapper.SearchRepos(context.Background(), "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchRepos(context.Background(), "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) - dataBuck := tx.Bucket([]byte(bolt.ManifestDataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) + dataBuck := tx.Bucket([]byte(boltdb.ManifestDataBucket)) err := dataBuck.Put([]byte("dig1"), []byte("wrong json")) if err != nil { return err } - repoMeta := repodb.RepoMetadata{ + repoMeta := mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag1": {Digest: "dig1", MediaType: ispec.MediaTypeImageManifest}, }, - Signatures: map[string]repodb.ManifestSignatures{}, + Signatures: map[string]mTypes.ManifestSignatures{}, } repoMetaBlob, err := json.Marshal(repoMeta) So(err, ShouldBeNil) @@ -647,12 +646,12 @@ func TestWrapperErrors(t *testing.T) { return err } - repoMeta = repodb.RepoMetadata{ + repoMeta = mTypes.RepoMetadata{ Name: "repo2", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag2": {Digest: "dig2", MediaType: ispec.MediaTypeImageManifest}, }, - Signatures: map[string]repodb.ManifestSignatures{}, + Signatures: map[string]mTypes.ManifestSignatures{}, } repoMetaBlob, err = json.Marshal(repoMeta) So(err, ShouldBeNil) @@ -661,20 +660,20 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - _, _, _, _, err = boltdbWrapper.SearchRepos(context.Background(), "repo1", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchRepos(context.Background(), "repo1", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) - _, _, _, _, err = boltdbWrapper.SearchRepos(context.Background(), "repo2", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchRepos(context.Background(), "repo2", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) - dataBuck := tx.Bucket([]byte(bolt.ManifestDataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) + dataBuck := tx.Bucket([]byte(boltdb.ManifestDataBucket)) - manifestMeta := repodb.ManifestMetadata{ + manifestMeta := mTypes.ManifestMetadata{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("wrong json"), - Signatures: repodb.ManifestSignatures{}, + Signatures: mTypes.ManifestSignatures{}, } manifestMetaBlob, err := json.Marshal(manifestMeta) @@ -687,12 +686,12 @@ func TestWrapperErrors(t *testing.T) { return err } - repoMeta = repodb.RepoMetadata{ + repoMeta = mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag1": {Digest: "dig1", MediaType: ispec.MediaTypeImageManifest}, }, - Signatures: map[string]repodb.ManifestSignatures{}, + Signatures: map[string]mTypes.ManifestSignatures{}, } repoMetaBlob, err = json.Marshal(repoMeta) So(err, ShouldBeNil) @@ -701,7 +700,7 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - _, _, _, _, err = boltdbWrapper.SearchRepos(context.Background(), "repo1", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchRepos(context.Background(), "repo1", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -715,10 +714,10 @@ func TestWrapperErrors(t *testing.T) { err = setBadIndexData(boltdbWrapper.DB, indexDigest.String()) So(err, ShouldBeNil) - _, _, _, _, err = boltdbWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) - _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -728,15 +727,15 @@ func TestWrapperErrors(t *testing.T) { err := boltdbWrapper.SetRepoReference("repo", "tag1", indexDigest, ispec.MediaTypeImageIndex) //nolint:contextcheck So(err, ShouldBeNil) - err = boltdbWrapper.SetIndexData(indexDigest, repodb.IndexData{ + err = boltdbWrapper.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: []byte("bad json"), }) So(err, ShouldBeNil) - _, _, _, _, err = boltdbWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) - _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -755,27 +754,27 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - err = boltdbWrapper.SetIndexData(indexDigest, repodb.IndexData{ + err = boltdbWrapper.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = boltdbWrapper.SetManifestData(manifestDigestFromIndex1, repodb.ManifestData{ + err = boltdbWrapper.SetManifestData(manifestDigestFromIndex1, mTypes.ManifestData{ ManifestBlob: []byte("Bad Manifest"), ConfigBlob: []byte("Bad Manifest"), }) So(err, ShouldBeNil) - err = boltdbWrapper.SetManifestData(manifestDigestFromIndex2, repodb.ManifestData{ + err = boltdbWrapper.SetManifestData(manifestDigestFromIndex2, mTypes.ManifestData{ ManifestBlob: []byte("Bad Manifest"), ConfigBlob: []byte("Bad Manifest"), }) So(err, ShouldBeNil) - _, _, _, _, err = boltdbWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) - _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) }) @@ -784,26 +783,26 @@ func TestWrapperErrors(t *testing.T) { ctx := context.Background() err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) So(err, ShouldBeNil) - _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) - _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo1:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo1:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) - dataBuck := tx.Bucket([]byte(bolt.ManifestDataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) + dataBuck := tx.Bucket([]byte(boltdb.ManifestDataBucket)) - manifestMeta := repodb.ManifestMetadata{ + manifestMeta := mTypes.ManifestMetadata{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("wrong json"), - Signatures: repodb.ManifestSignatures{}, + Signatures: mTypes.ManifestSignatures{}, } manifestMetaBlob, err := json.Marshal(manifestMeta) @@ -822,12 +821,12 @@ func TestWrapperErrors(t *testing.T) { } // manifest data doesn't exist - repoMeta = repodb.RepoMetadata{ + repoMeta = mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag2": {Digest: "dig2", MediaType: ispec.MediaTypeImageManifest}, }, - Signatures: map[string]repodb.ManifestSignatures{}, + Signatures: map[string]mTypes.ManifestSignatures{}, } repoMetaBlob, err = json.Marshal(repoMeta) So(err, ShouldBeNil) @@ -838,12 +837,12 @@ func TestWrapperErrors(t *testing.T) { } // manifest data is wrong - repoMeta = repodb.RepoMetadata{ + repoMeta = mTypes.RepoMetadata{ Name: "repo2", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag2": {Digest: "wrongManifestData", MediaType: ispec.MediaTypeImageManifest}, }, - Signatures: map[string]repodb.ManifestSignatures{}, + Signatures: map[string]mTypes.ManifestSignatures{}, } repoMetaBlob, err = json.Marshal(repoMeta) So(err, ShouldBeNil) @@ -853,12 +852,12 @@ func TestWrapperErrors(t *testing.T) { return err } - repoMeta = repodb.RepoMetadata{ + repoMeta = mTypes.RepoMetadata{ Name: "repo3", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag1": {Digest: "dig1", MediaType: ispec.MediaTypeImageManifest}, }, - Signatures: map[string]repodb.ManifestSignatures{}, + Signatures: map[string]mTypes.ManifestSignatures{}, } repoMetaBlob, err = json.Marshal(repoMeta) So(err, ShouldBeNil) @@ -867,13 +866,13 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo1:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo1:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) - _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo2:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo2:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) - _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo3:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo3:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -888,9 +887,9 @@ func TestWrapperErrors(t *testing.T) { So(err, ShouldBeNil) _, _, _, _, err = boltdbWrapper.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) }) @@ -901,15 +900,15 @@ func TestWrapperErrors(t *testing.T) { err := boltdbWrapper.SetRepoReference("repo", "tag1", indexDigest, ispec.MediaTypeImageIndex) //nolint:contextcheck So(err, ShouldBeNil) - err = boltdbWrapper.SetIndexData(indexDigest, repodb.IndexData{ + err = boltdbWrapper.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: []byte("bad json"), }) So(err, ShouldBeNil) _, _, _, _, err = boltdbWrapper.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) }) @@ -929,27 +928,27 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - err = boltdbWrapper.SetIndexData(indexDigest, repodb.IndexData{ + err = boltdbWrapper.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = boltdbWrapper.SetManifestData(manifestDigestFromIndex1, repodb.ManifestData{ + err = boltdbWrapper.SetManifestData(manifestDigestFromIndex1, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) So(err, ShouldBeNil) - err = boltdbWrapper.SetManifestData(manifestDigestFromIndex2, repodb.ManifestData{ + err = boltdbWrapper.SetManifestData(manifestDigestFromIndex2, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) So(err, ShouldBeNil) _, _, _, _, err = boltdbWrapper.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return false }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return false }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldBeNil) }) @@ -962,16 +961,16 @@ func TestWrapperErrors(t *testing.T) { ) So(err, ShouldBeNil) - err = boltdbWrapper.SetManifestData(manifestDigest, repodb.ManifestData{ + err = boltdbWrapper.SetManifestData(manifestDigest, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("bad blob"), }) So(err, ShouldBeNil) _, _, _, _, err = boltdbWrapper.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) }) @@ -993,27 +992,27 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - err = boltdbWrapper.SetIndexData(indexDigest, repodb.IndexData{ + err = boltdbWrapper.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = boltdbWrapper.SetManifestData(manifestDigestFromIndex1, repodb.ManifestData{ + err = boltdbWrapper.SetManifestData(manifestDigestFromIndex1, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) So(err, ShouldBeNil) - err = boltdbWrapper.SetManifestData(manifestDigestFromIndex2, repodb.ManifestData{ + err = boltdbWrapper.SetManifestData(manifestDigestFromIndex2, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("bad blob"), }) So(err, ShouldBeNil) _, _, _, _, err = boltdbWrapper.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) }) @@ -1038,7 +1037,7 @@ func TestWrapperErrors(t *testing.T) { ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) err := repoBuck.Put([]byte("repo"), []byte("bad repo")) So(err, ShouldBeNil) @@ -1085,7 +1084,7 @@ func TestWrapperErrors(t *testing.T) { authzCtxKey := localCtx.GetContextKey() ctx := context.WithValue(context.Background(), authzCtxKey, "bad context") - err := boltdbWrapper.SetUserData(ctx, repodb.UserData{}) + err := boltdbWrapper.SetUserData(ctx, mTypes.UserData{}) So(err, ShouldNotBeNil) }) @@ -1112,7 +1111,7 @@ func TestWrapperErrors(t *testing.T) { authzCtxKey := localCtx.GetContextKey() ctx := context.WithValue(context.Background(), authzCtxKey, "bad context") - err := boltdbWrapper.AddUserAPIKey(ctx, "", &repodb.APIKeyDetails{}) + err := boltdbWrapper.AddUserAPIKey(ctx, "", &mTypes.APIKeyDetails{}) So(err, ShouldNotBeNil) }) @@ -1162,17 +1161,17 @@ func TestWrapperErrors(t *testing.T) { err := boltdbWrapper.SetRepoReference("repo", "tag1", digest, "invalid type") //nolint:contextcheck So(err, ShouldBeNil) - _, _, _, _, err = boltdbWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) - _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = boltdbWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) _, _, _, _, err = boltdbWrapper.FilterTags( ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldBeNil) }) @@ -1188,7 +1187,7 @@ func TestWrapperErrors(t *testing.T) { ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) err := repoBuck.Put([]byte("repo"), []byte("bad repo")) So(err, ShouldBeNil) @@ -1209,7 +1208,7 @@ func TestWrapperErrors(t *testing.T) { Convey("repoMeta of signed manifest not found", func() { // repo Meta not found - err := boltdbWrapper.SetManifestData(digest.FromString("dig"), repodb.ManifestData{ + err := boltdbWrapper.SetManifestData(digest.FromString("dig"), mTypes.ManifestData{ ManifestBlob: []byte("Bad Manifest"), ConfigBlob: []byte("Bad Manifest"), }) @@ -1221,7 +1220,7 @@ func TestWrapperErrors(t *testing.T) { Convey("manifest - bad content", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - dataBuck := tx.Bucket([]byte(bolt.ManifestDataBucket)) + dataBuck := tx.Bucket([]byte(boltdb.ManifestDataBucket)) return dataBuck.Put([]byte("digest1"), []byte("wrong json")) }) @@ -1233,7 +1232,7 @@ func TestWrapperErrors(t *testing.T) { Convey("index - bad content", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - dataBuck := tx.Bucket([]byte(bolt.IndexDataBucket)) + dataBuck := tx.Bucket([]byte(boltdb.IndexDataBucket)) return dataBuck.Put([]byte("digest1"), []byte("wrong json")) }) @@ -1245,14 +1244,14 @@ func TestWrapperErrors(t *testing.T) { Convey("repo - bad content", func() { // repo Meta not found - err := boltdbWrapper.SetManifestData(digest.FromString("dig"), repodb.ManifestData{ + err := boltdbWrapper.SetManifestData(digest.FromString("dig"), mTypes.ManifestData{ ManifestBlob: []byte("Bad Manifest"), ConfigBlob: []byte("Bad Manifest"), }) So(err, ShouldBeNil) err = boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - repoBuck := tx.Bucket([]byte(bolt.RepoMetadataBucket)) + repoBuck := tx.Bucket([]byte(boltdb.RepoMetadataBucket)) return repoBuck.Put([]byte("repo1"), []byte("wrong json")) }) @@ -1267,7 +1266,7 @@ func TestWrapperErrors(t *testing.T) { func setBadIndexData(dB *bbolt.DB, digest string) error { return dB.Update(func(tx *bbolt.Tx) error { - indexDataBuck := tx.Bucket([]byte(bolt.IndexDataBucket)) + indexDataBuck := tx.Bucket([]byte(boltdb.IndexDataBucket)) return indexDataBuck.Put([]byte(digest), []byte("bad json")) }) diff --git a/pkg/meta/bolt/buckets.go b/pkg/meta/boltdb/buckets.go similarity index 94% rename from pkg/meta/bolt/buckets.go rename to pkg/meta/boltdb/buckets.go index 72ce7872..84649902 100644 --- a/pkg/meta/bolt/buckets.go +++ b/pkg/meta/boltdb/buckets.go @@ -1,4 +1,4 @@ -package bolt +package boltdb // MetadataDB. const ( diff --git a/pkg/meta/bolt/parameters.go b/pkg/meta/boltdb/parameters.go similarity index 95% rename from pkg/meta/bolt/parameters.go rename to pkg/meta/boltdb/parameters.go index 33d77568..31db7a49 100644 --- a/pkg/meta/bolt/parameters.go +++ b/pkg/meta/boltdb/parameters.go @@ -1,4 +1,4 @@ -package bolt +package boltdb import ( "path" diff --git a/pkg/meta/common/common.go b/pkg/meta/common/common.go index e26db3f2..763cdbfc 100644 --- a/pkg/meta/common/common.go +++ b/pkg/meta/common/common.go @@ -10,12 +10,12 @@ import ( ispec "github.com/opencontainers/image-spec/specs-go/v1" zerr "zotregistry.io/zot/errors" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" ) -func UpdateManifestMeta(repoMeta repodb.RepoMetadata, manifestDigest godigest.Digest, - manifestMeta repodb.ManifestMetadata, -) repodb.RepoMetadata { +func UpdateManifestMeta(repoMeta mTypes.RepoMetadata, manifestDigest godigest.Digest, + manifestMeta mTypes.ManifestMetadata, +) mTypes.RepoMetadata { updatedRepoMeta := repoMeta updatedStatistics := repoMeta.Statistics[manifestDigest.String()] @@ -23,7 +23,7 @@ func UpdateManifestMeta(repoMeta repodb.RepoMetadata, manifestDigest godigest.Di updatedRepoMeta.Statistics[manifestDigest.String()] = updatedStatistics if manifestMeta.Signatures == nil { - manifestMeta.Signatures = repodb.ManifestSignatures{} + manifestMeta.Signatures = mTypes.ManifestSignatures{} } updatedRepoMeta.Signatures[manifestDigest.String()] = manifestMeta.Signatures @@ -31,7 +31,7 @@ func UpdateManifestMeta(repoMeta repodb.RepoMetadata, manifestDigest godigest.Di return updatedRepoMeta } -func SignatureAlreadyExists(signatureSlice []repodb.SignatureInfo, sm repodb.SignatureMetadata) bool { +func SignatureAlreadyExists(signatureSlice []mTypes.SignatureInfo, sm mTypes.SignatureMetadata) bool { for _, sigInfo := range signatureSlice { if sm.SignatureDigest == sigInfo.SignatureManifestDigest { return true @@ -160,7 +160,7 @@ func GetImageLastUpdatedTimestamp(configContent ispec.Image) time.Time { return *timeStamp } -func CheckIsSigned(signatures repodb.ManifestSignatures) bool { +func CheckIsSigned(signatures mTypes.ManifestSignatures) bool { for _, signatures := range signatures { if len(signatures) > 0 { return true @@ -197,7 +197,7 @@ func GetMapKeys[K comparable, V any](genericMap map[K]V) []K { // acceptedByFilter checks that data contains at least 1 element of each filter // criteria(os, arch) present in filter. -func AcceptedByFilter(filter repodb.Filter, data repodb.FilterData) bool { +func AcceptedByFilter(filter mTypes.Filter, data mTypes.FilterData) bool { if filter.Arch != nil { foundArch := false for _, arch := range filter.Arch { @@ -284,7 +284,7 @@ func MatchesArtifactTypes(descriptorMediaType string, artifactTypes []string) bo // // It returns updated values for: repoLastUpdated, noImageChecked, isSigned. func CheckImageLastUpdated(repoLastUpdated time.Time, isSigned bool, noImageChecked bool, - manifestFilterData repodb.FilterData, + manifestFilterData mTypes.FilterData, ) (time.Time, bool, bool) { if noImageChecked || repoLastUpdated.Before(manifestFilterData.LastUpdated) { repoLastUpdated = manifestFilterData.LastUpdated @@ -296,12 +296,12 @@ func CheckImageLastUpdated(repoLastUpdated time.Time, isSigned bool, noImageChec return repoLastUpdated, noImageChecked, isSigned } -func FilterDataByRepo(foundRepos []repodb.RepoMetadata, manifestMetadataMap map[string]repodb.ManifestMetadata, - indexDataMap map[string]repodb.IndexData, -) (map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, error) { +func FilterDataByRepo(foundRepos []mTypes.RepoMetadata, manifestMetadataMap map[string]mTypes.ManifestMetadata, + indexDataMap map[string]mTypes.IndexData, +) (map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, error) { var ( - foundManifestMetadataMap = make(map[string]repodb.ManifestMetadata) - foundindexDataMap = make(map[string]repodb.IndexData) + foundManifestMetadataMap = make(map[string]mTypes.ManifestMetadata) + foundindexDataMap = make(map[string]mTypes.IndexData) ) // keep just the manifestMeta we need @@ -317,8 +317,8 @@ func FilterDataByRepo(foundRepos []repodb.RepoMetadata, manifestMetadataMap map[ err := json.Unmarshal(indexData.IndexBlob, &indexContent) if err != nil { - return map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, - fmt.Errorf("repodb: error while getting manifest data for digest %s %w", descriptor.Digest, err) + return map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, + fmt.Errorf("metadb: error while getting manifest data for digest %s %w", descriptor.Digest, err) } for _, manifestDescriptor := range indexContent.Manifests { @@ -337,48 +337,48 @@ func FilterDataByRepo(foundRepos []repodb.RepoMetadata, manifestMetadataMap map[ return foundManifestMetadataMap, foundindexDataMap, nil } -func FetchDataForRepos(repoDB repodb.RepoDB, foundRepos []repodb.RepoMetadata, -) (map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, error) { - foundManifestMetadataMap := map[string]repodb.ManifestMetadata{} - foundIndexDataMap := map[string]repodb.IndexData{} +func FetchDataForRepos(metaDB mTypes.MetaDB, foundRepos []mTypes.RepoMetadata, +) (map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, error) { + foundManifestMetadataMap := map[string]mTypes.ManifestMetadata{} + foundIndexDataMap := map[string]mTypes.IndexData{} for idx := range foundRepos { for _, descriptor := range foundRepos[idx].Tags { switch descriptor.MediaType { case ispec.MediaTypeImageManifest: - manifestData, err := repoDB.GetManifestData(godigest.Digest(descriptor.Digest)) + manifestData, err := metaDB.GetManifestData(godigest.Digest(descriptor.Digest)) if err != nil { - return map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, err + return map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, err } - foundManifestMetadataMap[descriptor.Digest] = repodb.ManifestMetadata{ + foundManifestMetadataMap[descriptor.Digest] = mTypes.ManifestMetadata{ ManifestBlob: manifestData.ManifestBlob, ConfigBlob: manifestData.ConfigBlob, } case ispec.MediaTypeImageIndex: - indexData, err := repoDB.GetIndexData(godigest.Digest(descriptor.Digest)) + indexData, err := metaDB.GetIndexData(godigest.Digest(descriptor.Digest)) if err != nil { - return map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, err + return map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, err } var indexContent ispec.Index err = json.Unmarshal(indexData.IndexBlob, &indexContent) if err != nil { - return map[string]repodb.ManifestMetadata{}, - map[string]repodb.IndexData{}, - fmt.Errorf("repodb: error while getting index data for digest %s %w", descriptor.Digest, err) + return map[string]mTypes.ManifestMetadata{}, + map[string]mTypes.IndexData{}, + fmt.Errorf("metadb: error while getting index data for digest %s %w", descriptor.Digest, err) } for _, manifestDescriptor := range indexContent.Manifests { manifestDigest := manifestDescriptor.Digest.String() - manifestData, err := repoDB.GetManifestData(manifestDescriptor.Digest) + manifestData, err := metaDB.GetManifestData(manifestDescriptor.Digest) if err != nil { - return map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, err + return map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, err } - foundManifestMetadataMap[manifestDigest] = repodb.ManifestMetadata{ + foundManifestMetadataMap[manifestDigest] = mTypes.ManifestMetadata{ ManifestBlob: manifestData.ManifestBlob, ConfigBlob: manifestData.ConfigBlob, } @@ -391,3 +391,33 @@ func FetchDataForRepos(repoDB repodb.RepoDB, foundRepos []repodb.RepoMetadata, return foundManifestMetadataMap, foundIndexDataMap, nil } + +// FindMediaTypeForDigest will look into the buckets for a certain digest. Depending on which bucket that +// digest is found the corresponding mediatype is returned. +func FindMediaTypeForDigest(metaDB mTypes.MetaDB, digest godigest.Digest) (bool, string) { + _, err := metaDB.GetManifestData(digest) + if err == nil { + return true, ispec.MediaTypeImageManifest + } + + _, err = metaDB.GetIndexData(digest) + if err == nil { + return true, ispec.MediaTypeImageIndex + } + + return false, "" +} + +func GetImageDescriptor(metaDB mTypes.MetaDB, repo, tag string) (mTypes.Descriptor, error) { + repoMeta, err := metaDB.GetRepoMeta(repo) + if err != nil { + return mTypes.Descriptor{}, err + } + + imageDescriptor, ok := repoMeta.Tags[tag] + if !ok { + return mTypes.Descriptor{}, zerr.ErrTagMetaNotFound + } + + return imageDescriptor, nil +} diff --git a/pkg/meta/common/common_test.go b/pkg/meta/common/common_test.go index 29dad10b..26a7524a 100644 --- a/pkg/meta/common/common_test.go +++ b/pkg/meta/common/common_test.go @@ -10,7 +10,7 @@ import ( . "github.com/smartystreets/goconvey/convey" "zotregistry.io/zot/pkg/meta/common" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/test/mocks" ) @@ -35,7 +35,7 @@ func TestUtils(t *testing.T) { repoLastUpdated := time.Time{} isSigned := false noImageChecked := true - manifestFilterData := repodb.FilterData{ + manifestFilterData := mTypes.FilterData{ DownloadCount: 10, LastUpdated: time.Time{}, IsSigned: true, @@ -52,7 +52,7 @@ func TestUtils(t *testing.T) { repoLastUpdated := time.Time{} isSigned := false noImageChecked := true - manifestFilterData := repodb.FilterData{ + manifestFilterData := mTypes.FilterData{ DownloadCount: 10, LastUpdated: time.Date(2000, 1, 1, 1, 1, 1, 1, time.UTC), IsSigned: true, @@ -69,7 +69,7 @@ func TestUtils(t *testing.T) { repoLastUpdated := time.Date(2000, 1, 1, 1, 1, 1, 1, time.UTC) isSigned := true noImageChecked := false - manifestFilterData := repodb.FilterData{ + manifestFilterData := mTypes.FilterData{ DownloadCount: 10, LastUpdated: time.Date(2023, 1, 1, 1, 1, 1, 1, time.UTC), IsSigned: false, @@ -86,7 +86,7 @@ func TestUtils(t *testing.T) { repoLastUpdated := time.Date(2024, 1, 1, 1, 1, 1, 1, time.UTC) isSigned := false noImageChecked := false - manifestFilterData := repodb.FilterData{ + manifestFilterData := mTypes.FilterData{ DownloadCount: 10, LastUpdated: time.Date(2022, 1, 1, 1, 1, 1, 1, time.UTC), IsSigned: true, @@ -103,15 +103,15 @@ func TestUtils(t *testing.T) { Convey("SignatureAlreadyExists", t, func() { res := common.SignatureAlreadyExists( - []repodb.SignatureInfo{{SignatureManifestDigest: "digest"}}, - repodb.SignatureMetadata{SignatureDigest: "digest"}, + []mTypes.SignatureInfo{{SignatureManifestDigest: "digest"}}, + mTypes.SignatureMetadata{SignatureDigest: "digest"}, ) So(res, ShouldEqual, true) res = common.SignatureAlreadyExists( - []repodb.SignatureInfo{{SignatureManifestDigest: "digest"}}, - repodb.SignatureMetadata{SignatureDigest: "digest2"}, + []mTypes.SignatureInfo{{SignatureManifestDigest: "digest"}}, + mTypes.SignatureMetadata{SignatureDigest: "digest2"}, ) So(res, ShouldEqual, false) @@ -121,16 +121,16 @@ func TestUtils(t *testing.T) { Convey("Errors", func() { // Unmarshal index data error _, _, err := common.FilterDataByRepo( - []repodb.RepoMetadata{{ - Tags: map[string]repodb.Descriptor{ + []mTypes.RepoMetadata{{ + Tags: map[string]mTypes.Descriptor{ "tag": { Digest: "indexDigest", MediaType: ispec.MediaTypeImageIndex, }, }, }}, - map[string]repodb.ManifestMetadata{}, - map[string]repodb.IndexData{ + map[string]mTypes.ManifestMetadata{}, + map[string]mTypes.IndexData{ "indexDigest": { IndexBlob: []byte("bad blob"), }, @@ -145,15 +145,15 @@ func TestUtils(t *testing.T) { Convey("Errors", func() { // Unmarshal index data error _, _, err := common.FetchDataForRepos( - mocks.RepoDBMock{ - GetIndexDataFn: func(indexDigest digest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{ + mocks.MetaDBMock{ + GetIndexDataFn: func(indexDigest digest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{ IndexBlob: []byte("bad blob"), }, nil }, }, - []repodb.RepoMetadata{{ - Tags: map[string]repodb.Descriptor{ + []mTypes.RepoMetadata{{ + Tags: map[string]mTypes.Descriptor{ "tag": { Digest: "indexDigest", MediaType: ispec.MediaTypeImageIndex, @@ -168,16 +168,16 @@ func TestUtils(t *testing.T) { func TestFetchDataForRepos(t *testing.T) { Convey("GetReferredSubject", t, func() { - mockRepoDB := mocks.RepoDBMock{} + mockMetaDB := mocks.MetaDBMock{} Convey("GetManifestData errors", func() { - mockRepoDB.GetManifestDataFn = func(manifestDigest digest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{}, ErrTestError + mockMetaDB.GetManifestDataFn = func(manifestDigest digest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{}, ErrTestError } - _, _, err := common.FetchDataForRepos(mockRepoDB, []repodb.RepoMetadata{ + _, _, err := common.FetchDataForRepos(mockMetaDB, []mTypes.RepoMetadata{ { - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag1": {Digest: "dig1", MediaType: ispec.MediaTypeImageManifest}, }, }, @@ -186,13 +186,13 @@ func TestFetchDataForRepos(t *testing.T) { }) Convey("GetIndexData errors", func() { - mockRepoDB.GetIndexDataFn = func(indexDigest digest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{}, ErrTestError + mockMetaDB.GetIndexDataFn = func(indexDigest digest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{}, ErrTestError } - _, _, err := common.FetchDataForRepos(mockRepoDB, []repodb.RepoMetadata{ + _, _, err := common.FetchDataForRepos(mockMetaDB, []mTypes.RepoMetadata{ { - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag1": {Digest: "dig1", MediaType: ispec.MediaTypeImageIndex}, }, }, @@ -201,8 +201,8 @@ func TestFetchDataForRepos(t *testing.T) { }) Convey("GetIndexData ok, GetManifestData errors", func() { - mockRepoDB.GetIndexDataFn = func(indexDigest digest.Digest) (repodb.IndexData, error) { - return repodb.IndexData{ + mockMetaDB.GetIndexDataFn = func(indexDigest digest.Digest) (mTypes.IndexData, error) { + return mTypes.IndexData{ IndexBlob: []byte(`{ "manifests": [ {"digest": "dig1"} @@ -210,13 +210,13 @@ func TestFetchDataForRepos(t *testing.T) { }`), }, nil } - mockRepoDB.GetManifestDataFn = func(manifestDigest digest.Digest) (repodb.ManifestData, error) { - return repodb.ManifestData{}, ErrTestError + mockMetaDB.GetManifestDataFn = func(manifestDigest digest.Digest) (mTypes.ManifestData, error) { + return mTypes.ManifestData{}, ErrTestError } - _, _, err := common.FetchDataForRepos(mockRepoDB, []repodb.RepoMetadata{ + _, _, err := common.FetchDataForRepos(mockMetaDB, []mTypes.RepoMetadata{ { - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag1": {Digest: "dig1", MediaType: ispec.MediaTypeImageIndex}, }, }, diff --git a/pkg/meta/repodb/dynamodb-wrapper/dynamo_wrapper.go b/pkg/meta/dynamodb/dynamo.go similarity index 72% rename from pkg/meta/repodb/dynamodb-wrapper/dynamo_wrapper.go rename to pkg/meta/dynamodb/dynamo.go index 4055b1f1..67c78f48 100644 --- a/pkg/meta/repodb/dynamodb-wrapper/dynamo_wrapper.go +++ b/pkg/meta/dynamodb/dynamo.go @@ -1,4 +1,4 @@ -package dynamo +package dynamodb import ( "context" @@ -19,16 +19,16 @@ import ( zcommon "zotregistry.io/zot/pkg/common" "zotregistry.io/zot/pkg/log" "zotregistry.io/zot/pkg/meta/common" - "zotregistry.io/zot/pkg/meta/dynamo" - "zotregistry.io/zot/pkg/meta/repodb" //nolint:go-staticcheck + "zotregistry.io/zot/pkg/meta/pagination" "zotregistry.io/zot/pkg/meta/signatures" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/meta/version" localCtx "zotregistry.io/zot/pkg/requestcontext" ) -var errRepodb = errors.New("repodb: error while constructing manifest meta") +var errMetaDB = errors.New("metadb: error while constructing manifest meta") -type DBWrapper struct { +type DynamoDB struct { Client *dynamodb.Client APIKeyTablename string RepoMetaTablename string @@ -40,8 +40,8 @@ type DBWrapper struct { Log log.Logger } -func NewDynamoDBWrapper(client *dynamodb.Client, params dynamo.DBDriverParameters, log log.Logger) (*DBWrapper, error) { - dynamoWrapper := DBWrapper{ +func New(client *dynamodb.Client, params DBDriverParameters, log log.Logger) (*DynamoDB, error) { + dynamoWrapper := DynamoDB{ Client: client, RepoMetaTablename: params.RepoMetaTablename, ManifestDataTablename: params.ManifestDataTablename, @@ -87,7 +87,7 @@ func NewDynamoDBWrapper(client *dynamodb.Client, params dynamo.DBDriverParameter return &dynamoWrapper, nil } -func (dwr *DBWrapper) SetManifestData(manifestDigest godigest.Digest, manifestData repodb.ManifestData) error { +func (dwr *DynamoDB) SetManifestData(manifestDigest godigest.Digest, manifestData mTypes.ManifestData) error { mdAttributeValue, err := attributevalue.Marshal(manifestData) if err != nil { return err @@ -112,7 +112,7 @@ func (dwr *DBWrapper) SetManifestData(manifestDigest godigest.Digest, manifestDa return err } -func (dwr *DBWrapper) GetManifestData(manifestDigest godigest.Digest) (repodb.ManifestData, error) { +func (dwr *DynamoDB) GetManifestData(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { resp, err := dwr.Client.GetItem(context.Background(), &dynamodb.GetItemInput{ TableName: aws.String(dwr.ManifestDataTablename), Key: map[string]types.AttributeValue{ @@ -120,27 +120,27 @@ func (dwr *DBWrapper) GetManifestData(manifestDigest godigest.Digest) (repodb.Ma }, }) if err != nil { - return repodb.ManifestData{}, err + return mTypes.ManifestData{}, err } if resp.Item == nil { - return repodb.ManifestData{}, zerr.ErrManifestDataNotFound + return mTypes.ManifestData{}, zerr.ErrManifestDataNotFound } - var manifestData repodb.ManifestData + var manifestData mTypes.ManifestData err = attributevalue.Unmarshal(resp.Item["ManifestData"], &manifestData) if err != nil { - return repodb.ManifestData{}, err + return mTypes.ManifestData{}, err } return manifestData, nil } -func (dwr *DBWrapper) SetManifestMeta(repo string, manifestDigest godigest.Digest, manifestMeta repodb.ManifestMetadata, +func (dwr *DynamoDB) SetManifestMeta(repo string, manifestDigest godigest.Digest, manifestMeta mTypes.ManifestMetadata, ) error { if manifestMeta.Signatures == nil { - manifestMeta.Signatures = repodb.ManifestSignatures{} + manifestMeta.Signatures = mTypes.ManifestSignatures{} } repoMeta, err := dwr.GetRepoMeta(repo) @@ -149,16 +149,16 @@ func (dwr *DBWrapper) SetManifestMeta(repo string, manifestDigest godigest.Diges return err } - repoMeta = repodb.RepoMetadata{ + repoMeta = mTypes.RepoMetadata{ Name: repo, - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{}, - Referrers: map[string][]repodb.ReferrerInfo{}, + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, } } - err = dwr.SetManifestData(manifestDigest, repodb.ManifestData{ + err = dwr.SetManifestData(manifestDigest, mTypes.ManifestData{ ManifestBlob: manifestMeta.ManifestBlob, ConfigBlob: manifestMeta.ConfigBlob, }) @@ -176,35 +176,35 @@ func (dwr *DBWrapper) SetManifestMeta(repo string, manifestDigest godigest.Diges return err } -func (dwr *DBWrapper) GetManifestMeta(repo string, manifestDigest godigest.Digest, -) (repodb.ManifestMetadata, error) { //nolint:contextcheck +func (dwr *DynamoDB) GetManifestMeta(repo string, manifestDigest godigest.Digest, +) (mTypes.ManifestMetadata, error) { //nolint:contextcheck manifestData, err := dwr.GetManifestData(manifestDigest) if err != nil { if errors.Is(err, zerr.ErrManifestDataNotFound) { - return repodb.ManifestMetadata{}, zerr.ErrManifestMetaNotFound + return mTypes.ManifestMetadata{}, zerr.ErrManifestMetaNotFound } - return repodb.ManifestMetadata{}, - fmt.Errorf("%w for manifest '%s' from repo '%s'", errRepodb, manifestDigest, repo) + return mTypes.ManifestMetadata{}, + fmt.Errorf("%w for manifest '%s' from repo '%s'", errMetaDB, manifestDigest, repo) } repoMeta, err := dwr.GetRepoMeta(repo) if err != nil { if errors.Is(err, zerr.ErrRepoMetaNotFound) { - return repodb.ManifestMetadata{}, zerr.ErrManifestMetaNotFound + return mTypes.ManifestMetadata{}, zerr.ErrManifestMetaNotFound } - return repodb.ManifestMetadata{}, - fmt.Errorf("%w for manifest '%s' from repo '%s'", errRepodb, manifestDigest, repo) + return mTypes.ManifestMetadata{}, + fmt.Errorf("%w for manifest '%s' from repo '%s'", errMetaDB, manifestDigest, repo) } - manifestMetadata := repodb.ManifestMetadata{} + manifestMetadata := mTypes.ManifestMetadata{} manifestMetadata.ManifestBlob = manifestData.ManifestBlob manifestMetadata.ConfigBlob = manifestData.ConfigBlob manifestMetadata.DownloadCount = repoMeta.Statistics[manifestDigest.String()].DownloadCount - manifestMetadata.Signatures = repodb.ManifestSignatures{} + manifestMetadata.Signatures = mTypes.ManifestSignatures{} if repoMeta.Signatures[manifestDigest.String()] != nil { manifestMetadata.Signatures = repoMeta.Signatures[manifestDigest.String()] @@ -213,7 +213,7 @@ func (dwr *DBWrapper) GetManifestMeta(repo string, manifestDigest godigest.Diges return manifestMetadata, nil } -func (dwr *DBWrapper) IncrementRepoStars(repo string) error { +func (dwr *DynamoDB) IncrementRepoStars(repo string) error { repoMeta, err := dwr.GetRepoMeta(repo) if err != nil { return err @@ -226,7 +226,7 @@ func (dwr *DBWrapper) IncrementRepoStars(repo string) error { return err } -func (dwr *DBWrapper) DecrementRepoStars(repo string) error { +func (dwr *DynamoDB) DecrementRepoStars(repo string) error { repoMeta, err := dwr.GetRepoMeta(repo) if err != nil { return err @@ -241,7 +241,7 @@ func (dwr *DBWrapper) DecrementRepoStars(repo string) error { return err } -func (dwr *DBWrapper) GetRepoStars(repo string) (int, error) { +func (dwr *DynamoDB) GetRepoStars(repo string) (int, error) { repoMeta, err := dwr.GetRepoMeta(repo) if err != nil { return 0, err @@ -250,7 +250,7 @@ func (dwr *DBWrapper) GetRepoStars(repo string) (int, error) { return repoMeta.Stars, nil } -func (dwr *DBWrapper) SetIndexData(indexDigest godigest.Digest, indexData repodb.IndexData) error { +func (dwr *DynamoDB) SetIndexData(indexDigest godigest.Digest, indexData mTypes.IndexData) error { indexAttributeValue, err := attributevalue.Marshal(indexData) if err != nil { return err @@ -275,7 +275,7 @@ func (dwr *DBWrapper) SetIndexData(indexDigest godigest.Digest, indexData repodb return err } -func (dwr *DBWrapper) GetIndexData(indexDigest godigest.Digest) (repodb.IndexData, error) { +func (dwr *DynamoDB) GetIndexData(indexDigest godigest.Digest) (mTypes.IndexData, error) { resp, err := dwr.Client.GetItem(context.TODO(), &dynamodb.GetItemInput{ TableName: aws.String(dwr.IndexDataTablename), Key: map[string]types.AttributeValue{ @@ -285,24 +285,24 @@ func (dwr *DBWrapper) GetIndexData(indexDigest godigest.Digest) (repodb.IndexDat }, }) if err != nil { - return repodb.IndexData{}, err + return mTypes.IndexData{}, err } if resp.Item == nil { - return repodb.IndexData{}, zerr.ErrRepoMetaNotFound + return mTypes.IndexData{}, zerr.ErrRepoMetaNotFound } - var indexData repodb.IndexData + var indexData mTypes.IndexData err = attributevalue.Unmarshal(resp.Item["IndexData"], &indexData) if err != nil { - return repodb.IndexData{}, err + return mTypes.IndexData{}, err } return indexData, nil } -func (dwr DBWrapper) SetReferrer(repo string, referredDigest godigest.Digest, referrer repodb.ReferrerInfo) error { +func (dwr DynamoDB) SetReferrer(repo string, referredDigest godigest.Digest, referrer mTypes.ReferrerInfo) error { resp, err := dwr.Client.GetItem(context.TODO(), &dynamodb.GetItemInput{ TableName: aws.String(dwr.RepoMetaTablename), Key: map[string]types.AttributeValue{ @@ -313,12 +313,12 @@ func (dwr DBWrapper) SetReferrer(repo string, referredDigest godigest.Digest, re return err } - repoMeta := repodb.RepoMetadata{ + repoMeta := mTypes.RepoMetadata{ Name: repo, - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{}, - Referrers: map[string][]repodb.ReferrerInfo{}, + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, } if resp.Item != nil { @@ -343,7 +343,7 @@ func (dwr DBWrapper) SetReferrer(repo string, referredDigest godigest.Digest, re return dwr.SetRepoMeta(repo, repoMeta) } -func (dwr DBWrapper) GetReferrers(repo string, referredDigest godigest.Digest) ([]repodb.ReferrerInfo, error) { +func (dwr DynamoDB) GetReferrers(repo string, referredDigest godigest.Digest) ([]mTypes.ReferrerInfo, error) { resp, err := dwr.Client.GetItem(context.TODO(), &dynamodb.GetItemInput{ TableName: aws.String(dwr.RepoMetaTablename), Key: map[string]types.AttributeValue{ @@ -351,28 +351,28 @@ func (dwr DBWrapper) GetReferrers(repo string, referredDigest godigest.Digest) ( }, }) if err != nil { - return []repodb.ReferrerInfo{}, err + return []mTypes.ReferrerInfo{}, err } - repoMeta := repodb.RepoMetadata{ + repoMeta := mTypes.RepoMetadata{ Name: repo, - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{}, - Referrers: map[string][]repodb.ReferrerInfo{}, + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, } if resp.Item != nil { err := attributevalue.Unmarshal(resp.Item["RepoMetadata"], &repoMeta) if err != nil { - return []repodb.ReferrerInfo{}, err + return []mTypes.ReferrerInfo{}, err } } return repoMeta.Referrers[referredDigest.String()], nil } -func (dwr DBWrapper) DeleteReferrer(repo string, referredDigest godigest.Digest, +func (dwr DynamoDB) DeleteReferrer(repo string, referredDigest godigest.Digest, referrerDigest godigest.Digest, ) error { resp, err := dwr.Client.GetItem(context.TODO(), &dynamodb.GetItemInput{ @@ -385,12 +385,12 @@ func (dwr DBWrapper) DeleteReferrer(repo string, referredDigest godigest.Digest, return err } - repoMeta := repodb.RepoMetadata{ + repoMeta := mTypes.RepoMetadata{ Name: repo, - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{}, - Referrers: map[string][]repodb.ReferrerInfo{}, + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, } if resp.Item != nil { @@ -415,15 +415,15 @@ func (dwr DBWrapper) DeleteReferrer(repo string, referredDigest godigest.Digest, return dwr.SetRepoMeta(repo, repoMeta) } -func (dwr DBWrapper) GetReferrersInfo(repo string, referredDigest godigest.Digest, +func (dwr DynamoDB) GetReferrersInfo(repo string, referredDigest godigest.Digest, artifactTypes []string, -) ([]repodb.ReferrerInfo, error) { +) ([]mTypes.ReferrerInfo, error) { referrersInfo, err := dwr.GetReferrers(repo, referredDigest) if err != nil { return nil, err } - filteredResults := make([]repodb.ReferrerInfo, 0, len(referrersInfo)) + filteredResults := make([]mTypes.ReferrerInfo, 0, len(referrersInfo)) for _, referrerInfo := range referrersInfo { if !common.MatchesArtifactTypes(referrerInfo.ArtifactType, artifactTypes) { @@ -436,7 +436,7 @@ func (dwr DBWrapper) GetReferrersInfo(repo string, referredDigest godigest.Diges return filteredResults, nil } -func (dwr *DBWrapper) SetRepoReference(repo string, reference string, manifestDigest godigest.Digest, +func (dwr *DynamoDB) SetRepoReference(repo string, reference string, manifestDigest godigest.Digest, mediaType string, ) error { if err := common.ValidateRepoReferenceInput(repo, reference, manifestDigest); err != nil { @@ -453,12 +453,12 @@ func (dwr *DBWrapper) SetRepoReference(repo string, reference string, manifestDi return err } - repoMeta := repodb.RepoMetadata{ + repoMeta := mTypes.RepoMetadata{ Name: repo, - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{}, - Referrers: map[string][]repodb.ReferrerInfo{}, + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, } if resp.Item != nil { @@ -469,22 +469,22 @@ func (dwr *DBWrapper) SetRepoReference(repo string, reference string, manifestDi } if !common.ReferenceIsDigest(reference) { - repoMeta.Tags[reference] = repodb.Descriptor{ + repoMeta.Tags[reference] = mTypes.Descriptor{ Digest: manifestDigest.String(), MediaType: mediaType, } } if _, ok := repoMeta.Statistics[manifestDigest.String()]; !ok { - repoMeta.Statistics[manifestDigest.String()] = repodb.DescriptorStatistics{DownloadCount: 0} + repoMeta.Statistics[manifestDigest.String()] = mTypes.DescriptorStatistics{DownloadCount: 0} } if _, ok := repoMeta.Signatures[manifestDigest.String()]; !ok { - repoMeta.Signatures[manifestDigest.String()] = repodb.ManifestSignatures{} + repoMeta.Signatures[manifestDigest.String()] = mTypes.ManifestSignatures{} } if _, ok := repoMeta.Referrers[manifestDigest.String()]; !ok { - repoMeta.Referrers[manifestDigest.String()] = []repodb.ReferrerInfo{} + repoMeta.Referrers[manifestDigest.String()] = []mTypes.ReferrerInfo{} } err = dwr.SetRepoMeta(repo, repoMeta) @@ -492,7 +492,7 @@ func (dwr *DBWrapper) SetRepoReference(repo string, reference string, manifestDi return err } -func (dwr *DBWrapper) DeleteRepoTag(repo string, tag string) error { +func (dwr *DynamoDB) DeleteRepoTag(repo string, tag string) error { resp, err := dwr.Client.GetItem(context.TODO(), &dynamodb.GetItemInput{ TableName: aws.String(dwr.RepoMetaTablename), Key: map[string]types.AttributeValue{ @@ -507,7 +507,7 @@ func (dwr *DBWrapper) DeleteRepoTag(repo string, tag string) error { return nil } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err = attributevalue.Unmarshal(resp.Item["RepoMetadata"], &repoMeta) if err != nil { @@ -540,7 +540,7 @@ func (dwr *DBWrapper) DeleteRepoTag(repo string, tag string) error { return err } -func (dwr *DBWrapper) GetRepoMeta(repo string) (repodb.RepoMetadata, error) { +func (dwr *DynamoDB) GetRepoMeta(repo string) (mTypes.RepoMetadata, error) { resp, err := dwr.Client.GetItem(context.TODO(), &dynamodb.GetItemInput{ TableName: aws.String(dwr.RepoMetaTablename), Key: map[string]types.AttributeValue{ @@ -548,24 +548,24 @@ func (dwr *DBWrapper) GetRepoMeta(repo string) (repodb.RepoMetadata, error) { }, }) if err != nil { - return repodb.RepoMetadata{}, err + return mTypes.RepoMetadata{}, err } if resp.Item == nil { - return repodb.RepoMetadata{}, zerr.ErrRepoMetaNotFound + return mTypes.RepoMetadata{}, zerr.ErrRepoMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err = attributevalue.Unmarshal(resp.Item["RepoMetadata"], &repoMeta) if err != nil { - return repodb.RepoMetadata{}, err + return mTypes.RepoMetadata{}, err } return repoMeta, nil } -func (dwr *DBWrapper) GetUserRepoMeta(ctx context.Context, repo string) (repodb.RepoMetadata, error) { +func (dwr *DynamoDB) GetUserRepoMeta(ctx context.Context, repo string) (mTypes.RepoMetadata, error) { resp, err := dwr.Client.GetItem(ctx, &dynamodb.GetItemInput{ TableName: aws.String(dwr.RepoMetaTablename), Key: map[string]types.AttributeValue{ @@ -573,23 +573,23 @@ func (dwr *DBWrapper) GetUserRepoMeta(ctx context.Context, repo string) (repodb. }, }) if err != nil { - return repodb.RepoMetadata{}, err + return mTypes.RepoMetadata{}, err } if resp.Item == nil { - return repodb.RepoMetadata{}, zerr.ErrRepoMetaNotFound + return mTypes.RepoMetadata{}, zerr.ErrRepoMetaNotFound } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err = attributevalue.Unmarshal(resp.Item["RepoMetadata"], &repoMeta) if err != nil { - return repodb.RepoMetadata{}, err + return mTypes.RepoMetadata{}, err } userData, err := dwr.GetUserData(ctx) if err != nil { - return repodb.RepoMetadata{}, err + return mTypes.RepoMetadata{}, err } repoMeta.IsBookmarked = zcommon.Contains(userData.BookmarkedRepos, repo) @@ -598,7 +598,7 @@ func (dwr *DBWrapper) GetUserRepoMeta(ctx context.Context, repo string) (repodb. return repoMeta, nil } -func (dwr *DBWrapper) IncrementImageDownloads(repo string, reference string) error { +func (dwr *DynamoDB) IncrementImageDownloads(repo string, reference string) error { repoMeta, err := dwr.GetRepoMeta(repo) if err != nil { return err @@ -624,7 +624,7 @@ func (dwr *DBWrapper) IncrementImageDownloads(repo string, reference string) err return dwr.SetRepoMeta(repo, repoMeta) } -func (dwr *DBWrapper) UpdateSignaturesValidity(repo string, manifestDigest godigest.Digest) error { +func (dwr *DynamoDB) UpdateSignaturesValidity(repo string, manifestDigest godigest.Digest) error { // get ManifestData of signed manifest var blob []byte @@ -638,7 +638,7 @@ func (dwr *DBWrapper) UpdateSignaturesValidity(repo string, manifestDigest godig blob = indexData.IndexBlob } else { - return fmt.Errorf("%w for manifest '%s' from repo '%s'", errRepodb, manifestDigest, repo) + return fmt.Errorf("%w for manifest '%s' from repo '%s'", errMetaDB, manifestDigest, repo) } } else { blob = manifestData.ManifestBlob @@ -650,13 +650,13 @@ func (dwr *DBWrapper) UpdateSignaturesValidity(repo string, manifestDigest godig return err } - manifestSignatures := repodb.ManifestSignatures{} + manifestSignatures := mTypes.ManifestSignatures{} for sigType, sigs := range repoMeta.Signatures[manifestDigest.String()] { - signaturesInfo := []repodb.SignatureInfo{} + signaturesInfo := []mTypes.SignatureInfo{} for _, sigInfo := range sigs { - layersInfo := []repodb.LayerInfo{} + layersInfo := []mTypes.LayerInfo{} for _, layerInfo := range sigInfo.LayersInfo { author, date, isTrusted, _ := signatures.VerifySignature(sigType, layerInfo.LayerContent, layerInfo.SignatureKey, @@ -674,7 +674,7 @@ func (dwr *DBWrapper) UpdateSignaturesValidity(repo string, manifestDigest godig layersInfo = append(layersInfo, layerInfo) } - signaturesInfo = append(signaturesInfo, repodb.SignatureInfo{ + signaturesInfo = append(signaturesInfo, mTypes.SignatureInfo{ SignatureManifestDigest: sigInfo.SignatureManifestDigest, LayersInfo: layersInfo, }) @@ -688,19 +688,19 @@ func (dwr *DBWrapper) UpdateSignaturesValidity(repo string, manifestDigest godig return dwr.SetRepoMeta(repoMeta.Name, repoMeta) } -func (dwr *DBWrapper) AddManifestSignature(repo string, signedManifestDigest godigest.Digest, - sygMeta repodb.SignatureMetadata, +func (dwr *DynamoDB) AddManifestSignature(repo string, signedManifestDigest godigest.Digest, + sygMeta mTypes.SignatureMetadata, ) error { repoMeta, err := dwr.GetRepoMeta(repo) if err != nil { if errors.Is(err, zerr.ErrRepoMetaNotFound) { - repoMeta = repodb.RepoMetadata{ + repoMeta = mTypes.RepoMetadata{ Name: repo, - Tags: map[string]repodb.Descriptor{}, - Statistics: map[string]repodb.DescriptorStatistics{}, - Signatures: map[string]repodb.ManifestSignatures{ + Tags: map[string]mTypes.Descriptor{}, + Statistics: map[string]mTypes.DescriptorStatistics{}, + Signatures: map[string]mTypes.ManifestSignatures{ signedManifestDigest.String(): { - sygMeta.SignatureType: []repodb.SignatureInfo{ + sygMeta.SignatureType: []mTypes.SignatureInfo{ { SignatureManifestDigest: sygMeta.SignatureDigest, LayersInfo: sygMeta.LayersInfo, @@ -708,7 +708,7 @@ func (dwr *DBWrapper) AddManifestSignature(repo string, signedManifestDigest god }, }, }, - Referrers: map[string][]repodb.ReferrerInfo{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, } return dwr.SetRepoMeta(repo, repoMeta) @@ -718,23 +718,23 @@ func (dwr *DBWrapper) AddManifestSignature(repo string, signedManifestDigest god } var ( - manifestSignatures repodb.ManifestSignatures + manifestSignatures mTypes.ManifestSignatures found bool ) if manifestSignatures, found = repoMeta.Signatures[signedManifestDigest.String()]; !found { - manifestSignatures = repodb.ManifestSignatures{} + manifestSignatures = mTypes.ManifestSignatures{} } signatureSlice := manifestSignatures[sygMeta.SignatureType] if !common.SignatureAlreadyExists(signatureSlice, sygMeta) { if sygMeta.SignatureType == signatures.NotationSignature { - signatureSlice = append(signatureSlice, repodb.SignatureInfo{ + signatureSlice = append(signatureSlice, mTypes.SignatureInfo{ SignatureManifestDigest: sygMeta.SignatureDigest, LayersInfo: sygMeta.LayersInfo, }) } else if sygMeta.SignatureType == signatures.CosignSignature { - signatureSlice = []repodb.SignatureInfo{{ + signatureSlice = []mTypes.SignatureInfo{{ SignatureManifestDigest: sygMeta.SignatureDigest, LayersInfo: sygMeta.LayersInfo, }} @@ -748,8 +748,8 @@ func (dwr *DBWrapper) AddManifestSignature(repo string, signedManifestDigest god return dwr.SetRepoMeta(repoMeta.Name, repoMeta) } -func (dwr *DBWrapper) DeleteSignature(repo string, signedManifestDigest godigest.Digest, - sigMeta repodb.SignatureMetadata, +func (dwr *DynamoDB) DeleteSignature(repo string, signedManifestDigest godigest.Digest, + sigMeta mTypes.SignatureMetadata, ) error { repoMeta, err := dwr.GetRepoMeta(repo) if err != nil { @@ -759,7 +759,7 @@ func (dwr *DBWrapper) DeleteSignature(repo string, signedManifestDigest godigest sigType := sigMeta.SignatureType var ( - manifestSignatures repodb.ManifestSignatures + manifestSignatures mTypes.ManifestSignatures found bool ) @@ -769,7 +769,7 @@ func (dwr *DBWrapper) DeleteSignature(repo string, signedManifestDigest godigest signatureSlice := manifestSignatures[sigType] - newSignatureSlice := make([]repodb.SignatureInfo, 0, len(signatureSlice)-1) + newSignatureSlice := make([]mTypes.SignatureInfo, 0, len(signatureSlice)-1) for _, sigDigest := range signatureSlice { if sigDigest.SignatureManifestDigest != sigMeta.SignatureDigest { @@ -786,19 +786,19 @@ func (dwr *DBWrapper) DeleteSignature(repo string, signedManifestDigest godigest return err } -func (dwr *DBWrapper) GetMultipleRepoMeta(ctx context.Context, - filter func(repoMeta repodb.RepoMetadata) bool, requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, error) { +func (dwr *DynamoDB) GetMultipleRepoMeta(ctx context.Context, + filter func(repoMeta mTypes.RepoMetadata) bool, requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, error) { var ( - repoMetaAttributeIterator dynamo.AttributesIterator - pageFinder repodb.PageFinder + repoMetaAttributeIterator AttributesIterator + pageFinder pagination.PageFinder ) - repoMetaAttributeIterator = dynamo.NewBaseDynamoAttributesIterator( + repoMetaAttributeIterator = NewBaseDynamoAttributesIterator( dwr.Client, dwr.RepoMetaTablename, "RepoMetadata", 0, dwr.Log, ) - pageFinder, err := repodb.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) if err != nil { return nil, err } @@ -808,14 +808,14 @@ func (dwr *DBWrapper) GetMultipleRepoMeta(ctx context.Context, for ; repoMetaAttribute != nil; repoMetaAttribute, err = repoMetaAttributeIterator.Next(ctx) { if err != nil { // log - return []repodb.RepoMetadata{}, err + return []mTypes.RepoMetadata{}, err } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := attributevalue.Unmarshal(repoMetaAttribute, &repoMeta) if err != nil { - return []repodb.RepoMetadata{}, err + return []mTypes.RepoMetadata{}, err } if ok, err := localCtx.RepoIsUserAvailable(ctx, repoMeta.Name); !ok || err != nil { @@ -823,7 +823,7 @@ func (dwr *DBWrapper) GetMultipleRepoMeta(ctx context.Context, } if filter(repoMeta) { - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, }) } @@ -834,27 +834,27 @@ func (dwr *DBWrapper) GetMultipleRepoMeta(ctx context.Context, return foundRepos, err } -func (dwr *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter repodb.Filter, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, zcommon.PageInfo, error) { +func (dwr *DynamoDB) SearchRepos(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, zcommon.PageInfo, error) { var ( - manifestMetadataMap = make(map[string]repodb.ManifestMetadata) - indexDataMap = make(map[string]repodb.IndexData) - repoMetaAttributeIterator dynamo.AttributesIterator - pageFinder repodb.PageFinder + manifestMetadataMap = make(map[string]mTypes.ManifestMetadata) + indexDataMap = make(map[string]mTypes.IndexData) + repoMetaAttributeIterator AttributesIterator + pageFinder pagination.PageFinder pageInfo zcommon.PageInfo userBookmarks = getUserBookmarks(ctx, dwr) userStars = getUserStars(ctx, dwr) ) - repoMetaAttributeIterator = dynamo.NewBaseDynamoAttributesIterator( + repoMetaAttributeIterator = NewBaseDynamoAttributesIterator( dwr.Client, dwr.RepoMetaTablename, "RepoMetadata", 0, dwr.Log, ) - pageFinder, err := repodb.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } @@ -862,15 +862,15 @@ func (dwr *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter for ; repoMetaAttribute != nil; repoMetaAttribute, err = repoMetaAttributeIterator.Next(ctx) { if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := attributevalue.Unmarshal(repoMetaAttribute, &repoMeta) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } @@ -903,14 +903,14 @@ func (dwr *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter manifestMeta, err := dwr.fetchManifestMetaWithCheck(repoMeta.Name, manifestDigest, //nolint:contextcheck manifestMetadataMap) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, fmt.Errorf("%w", err) } manifestFilterData, err := collectImageManifestFilterData(manifestDigest, repoMeta, manifestMeta) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, fmt.Errorf("%w", err) } @@ -934,7 +934,7 @@ func (dwr *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter indexData, err := dwr.fetchIndexDataWithCheck(indexDigest, indexDataMap) //nolint:contextcheck if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, fmt.Errorf("%w", err) } @@ -943,7 +943,7 @@ func (dwr *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter indexFilterData, err := dwr.collectImageIndexFilterInfo(indexDigest, repoMeta, indexData, //nolint:contextcheck manifestMetadataMap) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, fmt.Errorf("%w", err) } @@ -969,7 +969,7 @@ func (dwr *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter } } - repoFilterData := repodb.FilterData{ + repoFilterData := mTypes.FilterData{ OsList: common.GetMapKeys(osSet), ArchList: common.GetMapKeys(archSet), LastUpdated: repoLastUpdated, @@ -981,7 +981,7 @@ func (dwr *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter continue } - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, Rank: rank, Downloads: repoDownloads, @@ -997,7 +997,7 @@ func (dwr *DBWrapper) SearchRepos(ctx context.Context, searchText string, filter return foundRepos, foundManifestMetadataMap, foundindexDataMap, pageInfo, err } -func getUserStars(ctx context.Context, dwr *DBWrapper) []string { +func getUserStars(ctx context.Context, dwr *DynamoDB) []string { starredRepos, err := dwr.GetStarredRepos(ctx) if err != nil { return []string{} @@ -1006,7 +1006,7 @@ func getUserStars(ctx context.Context, dwr *DBWrapper) []string { return starredRepos } -func getUserBookmarks(ctx context.Context, dwr *DBWrapper) []string { +func getUserBookmarks(ctx context.Context, dwr *DynamoDB) []string { bookmarkedRepos, err := dwr.GetBookmarkedRepos(ctx) if err != nil { return []string{} @@ -1015,11 +1015,11 @@ func getUserBookmarks(ctx context.Context, dwr *DBWrapper) []string { return bookmarkedRepos } -func (dwr *DBWrapper) fetchManifestMetaWithCheck(repoName string, manifestDigest string, - manifestMetadataMap map[string]repodb.ManifestMetadata, -) (repodb.ManifestMetadata, error) { +func (dwr *DynamoDB) fetchManifestMetaWithCheck(repoName string, manifestDigest string, + manifestMetadataMap map[string]mTypes.ManifestMetadata, +) (mTypes.ManifestMetadata, error) { var ( - manifestMeta repodb.ManifestMetadata + manifestMeta mTypes.ManifestMetadata err error ) @@ -1028,16 +1028,16 @@ func (dwr *DBWrapper) fetchManifestMetaWithCheck(repoName string, manifestDigest if !manifestDownloaded { manifestMeta, err = dwr.GetManifestMeta(repoName, godigest.Digest(manifestDigest)) //nolint:contextcheck if err != nil { - return repodb.ManifestMetadata{}, err + return mTypes.ManifestMetadata{}, err } } return manifestMeta, nil } -func collectImageManifestFilterData(digest string, repoMeta repodb.RepoMetadata, - manifestMeta repodb.ManifestMetadata, -) (repodb.FilterData, error) { +func collectImageManifestFilterData(digest string, repoMeta mTypes.RepoMetadata, + manifestMeta mTypes.ManifestMetadata, +) (mTypes.FilterData, error) { // get fields related to filtering var ( configContent ispec.Image @@ -1047,7 +1047,7 @@ func collectImageManifestFilterData(digest string, repoMeta repodb.RepoMetadata, err := json.Unmarshal(manifestMeta.ConfigBlob, &configContent) if err != nil { - return repodb.FilterData{}, fmt.Errorf("repodb: error while unmarshaling config content %w", err) + return mTypes.FilterData{}, fmt.Errorf("metadb: error while unmarshaling config content %w", err) } if configContent.OS != "" { @@ -1058,7 +1058,7 @@ func collectImageManifestFilterData(digest string, repoMeta repodb.RepoMetadata, archList = append(archList, configContent.Architecture) } - return repodb.FilterData{ + return mTypes.FilterData{ DownloadCount: repoMeta.Statistics[digest].DownloadCount, OsList: osList, ArchList: archList, @@ -1067,10 +1067,10 @@ func collectImageManifestFilterData(digest string, repoMeta repodb.RepoMetadata, }, nil } -func (dwr *DBWrapper) fetchIndexDataWithCheck(indexDigest string, indexDataMap map[string]repodb.IndexData, -) (repodb.IndexData, error) { +func (dwr *DynamoDB) fetchIndexDataWithCheck(indexDigest string, indexDataMap map[string]mTypes.IndexData, +) (mTypes.IndexData, error) { var ( - indexData repodb.IndexData + indexData mTypes.IndexData err error ) @@ -1079,23 +1079,23 @@ func (dwr *DBWrapper) fetchIndexDataWithCheck(indexDigest string, indexDataMap m if !indexExists { indexData, err = dwr.GetIndexData(godigest.Digest(indexDigest)) //nolint:contextcheck if err != nil { - return repodb.IndexData{}, - fmt.Errorf("repodb: error while unmarshaling index data for digest %s \n%w", indexDigest, err) + return mTypes.IndexData{}, + fmt.Errorf("metadb: error while unmarshaling index data for digest %s \n%w", indexDigest, err) } } return indexData, err } -func (dwr *DBWrapper) collectImageIndexFilterInfo(indexDigest string, repoMeta repodb.RepoMetadata, - indexData repodb.IndexData, manifestMetadataMap map[string]repodb.ManifestMetadata, -) (repodb.FilterData, error) { +func (dwr *DynamoDB) collectImageIndexFilterInfo(indexDigest string, repoMeta mTypes.RepoMetadata, + indexData mTypes.IndexData, manifestMetadataMap map[string]mTypes.ManifestMetadata, +) (mTypes.FilterData, error) { var indexContent ispec.Index err := json.Unmarshal(indexData.IndexBlob, &indexContent) if err != nil { - return repodb.FilterData{}, - fmt.Errorf("repodb: error while unmarshaling index content for digest %s %w", indexDigest, err) + return mTypes.FilterData{}, + fmt.Errorf("metadb: error while unmarshaling index content for digest %s %w", indexDigest, err) } var ( @@ -1111,14 +1111,14 @@ func (dwr *DBWrapper) collectImageIndexFilterInfo(indexDigest string, repoMeta r manifestMeta, err := dwr.fetchManifestMetaWithCheck(repoMeta.Name, manifestDigest.String(), manifestMetadataMap) if err != nil { - return repodb.FilterData{}, + return mTypes.FilterData{}, fmt.Errorf("%w", err) } manifestFilterData, err := collectImageManifestFilterData(manifestDigest.String(), repoMeta, manifestMeta) if err != nil { - return repodb.FilterData{}, + return mTypes.FilterData{}, fmt.Errorf("%w", err) } @@ -1133,7 +1133,7 @@ func (dwr *DBWrapper) collectImageIndexFilterInfo(indexDigest string, repoMeta r manifestMetadataMap[manifest.Digest.String()] = manifestMeta } - return repodb.FilterData{ + return mTypes.FilterData{ DownloadCount: repoMeta.Statistics[indexDigest].DownloadCount, LastUpdated: indexLastUpdated, OsList: indexOsList, @@ -1142,26 +1142,28 @@ func (dwr *DBWrapper) collectImageIndexFilterInfo(indexDigest string, repoMeta r }, nil } -func (dwr *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, zcommon.PageInfo, error) { +func (dwr *DynamoDB) FilterTags(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + zcommon.PageInfo, error, +) { var ( - manifestMetadataMap = make(map[string]repodb.ManifestMetadata) - indexDataMap = make(map[string]repodb.IndexData) - repoMetaAttributeIterator dynamo.AttributesIterator - pageFinder repodb.PageFinder + manifestMetadataMap = make(map[string]mTypes.ManifestMetadata) + indexDataMap = make(map[string]mTypes.IndexData) + repoMetaAttributeIterator AttributesIterator + pageFinder pagination.PageFinder pageInfo zcommon.PageInfo userBookmarks = getUserBookmarks(ctx, dwr) userStars = getUserStars(ctx, dwr) ) - repoMetaAttributeIterator = dynamo.NewBaseDynamoAttributesIterator( + repoMetaAttributeIterator = NewBaseDynamoAttributesIterator( dwr.Client, dwr.RepoMetaTablename, "RepoMetadata", 0, dwr.Log, ) - pageFinder, err := repodb.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } @@ -1169,15 +1171,15 @@ func (dwr *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu for ; repoMetaAttribute != nil; repoMetaAttribute, err = repoMetaAttributeIterator.Next(ctx) { if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := attributevalue.Unmarshal(repoMetaAttribute, &repoMeta) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } @@ -1188,7 +1190,7 @@ func (dwr *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu repoMeta.IsBookmarked = zcommon.Contains(userBookmarks, repoMeta.Name) repoMeta.IsStarred = zcommon.Contains(userStars, repoMeta.Name) - matchedTags := make(map[string]repodb.Descriptor) + matchedTags := make(map[string]mTypes.Descriptor) for tag, descriptor := range repoMeta.Tags { switch descriptor.MediaType { @@ -1198,16 +1200,16 @@ func (dwr *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu manifestMeta, err := dwr.fetchManifestMetaWithCheck(repoMeta.Name, manifestDigest, //nolint:contextcheck manifestMetadataMap) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, - fmt.Errorf("repodb: error while unmashaling manifest metadata for digest %s \n%w", manifestDigest, err) + fmt.Errorf("metadb: error while unmashaling manifest metadata for digest %s \n%w", manifestDigest, err) } imageFilterData, err := collectImageManifestFilterData(manifestDigest, repoMeta, manifestMeta) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, - fmt.Errorf("repodb: error collecting filter data for manifest with digest %s %w", manifestDigest, err) + fmt.Errorf("metadb: error collecting filter data for manifest with digest %s %w", manifestDigest, err) } if !common.AcceptedByFilter(filter, imageFilterData) { @@ -1225,18 +1227,18 @@ func (dwr *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu indexData, err := dwr.fetchIndexDataWithCheck(indexDigest, indexDataMap) //nolint:contextcheck if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, - fmt.Errorf("repodb: error while getting index data for digest %s %w", indexDigest, err) + fmt.Errorf("metadb: error while getting index data for digest %s %w", indexDigest, err) } var indexContent ispec.Index err = json.Unmarshal(indexData.IndexBlob, &indexContent) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, - fmt.Errorf("repodb: error while unmashaling index content for digest %s %w", indexDigest, err) + fmt.Errorf("metadb: error while unmashaling index content for digest %s %w", indexDigest, err) } matchedManifests := []ispec.Descriptor{} @@ -1247,16 +1249,16 @@ func (dwr *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu manifestMeta, err := dwr.fetchManifestMetaWithCheck(repoMeta.Name, manifestDigest, //nolint:contextcheck manifestMetadataMap) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, - fmt.Errorf("%w repodb: error while getting manifest data for digest %s", err, manifestDigest) + fmt.Errorf("%w metadb: error while getting manifest data for digest %s", err, manifestDigest) } manifestFilterData, err := collectImageManifestFilterData(manifestDigest, repoMeta, manifestMeta) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, - fmt.Errorf("repodb: error collecting filter data for manifest with digest %s %w", manifestDigest, err) + fmt.Errorf("metadb: error collecting filter data for manifest with digest %s %w", manifestDigest, err) } if !common.AcceptedByFilter(filter, manifestFilterData) { @@ -1274,7 +1276,7 @@ func (dwr *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu indexBlob, err := json.Marshal(indexContent) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } @@ -1296,7 +1298,7 @@ func (dwr *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu repoMeta.Tags = matchedTags - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, }) } @@ -1309,43 +1311,48 @@ func (dwr *DBWrapper) FilterTags(ctx context.Context, filterFunc repodb.FilterFu return foundRepos, foundManifestMetadataMap, foundindexDataMap, pageInfo, err } -func (dwr *DBWrapper) FilterRepos(ctx context.Context, - filter repodb.FilterRepoFunc, - requestedPage repodb.PageInput, +func (dwr *DynamoDB) FilterRepos(ctx context.Context, + filter mTypes.FilterRepoFunc, + requestedPage mTypes.PageInput, ) ( - []repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, zcommon.PageInfo, error, + []mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + zcommon.PageInfo, error, ) { var ( - repoMetaAttributeIterator dynamo.AttributesIterator + repoMetaAttributeIterator AttributesIterator pageInfo zcommon.PageInfo userBookmarks = getUserBookmarks(ctx, dwr) userStars = getUserStars(ctx, dwr) ) - repoMetaAttributeIterator = dynamo.NewBaseDynamoAttributesIterator( + repoMetaAttributeIterator = NewBaseDynamoAttributesIterator( dwr.Client, dwr.RepoMetaTablename, "RepoMetadata", 0, dwr.Log, ) - pageFinder, err := repodb.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseRepoPageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, pageInfo, err + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, + pageInfo, err } repoMetaAttribute, err := repoMetaAttributeIterator.First(ctx) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, pageInfo, err + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, + pageInfo, err } for ; repoMetaAttribute != nil; repoMetaAttribute, err = repoMetaAttributeIterator.Next(ctx) { if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, pageInfo, err + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, + pageInfo, err } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := attributevalue.Unmarshal(repoMetaAttribute, &repoMeta) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, pageInfo, err + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, + pageInfo, err } if ok, err := localCtx.RepoIsUserAvailable(ctx, repoMeta.Name); !ok || err != nil { @@ -1356,7 +1363,7 @@ func (dwr *DBWrapper) FilterRepos(ctx context.Context, repoMeta.IsStarred = zcommon.Contains(userStars, repoMeta.Name) if filter(repoMeta) { - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, }) } @@ -1369,34 +1376,36 @@ func (dwr *DBWrapper) FilterRepos(ctx context.Context, return foundRepos, foundManifestMetadataMap, foundIndexDataMap, pageInfo, err } -func (dwr *DBWrapper) SearchTags(ctx context.Context, searchText string, filter repodb.Filter, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, zcommon.PageInfo, error) { +func (dwr *DynamoDB) SearchTags(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, + zcommon.PageInfo, error, +) { var ( - manifestMetadataMap = make(map[string]repodb.ManifestMetadata) - indexDataMap = make(map[string]repodb.IndexData) - repoMetaAttributeIterator dynamo.AttributesIterator - pageFinder repodb.PageFinder + manifestMetadataMap = make(map[string]mTypes.ManifestMetadata) + indexDataMap = make(map[string]mTypes.IndexData) + repoMetaAttributeIterator AttributesIterator + pageFinder pagination.PageFinder pageInfo zcommon.PageInfo userBookmarks = getUserBookmarks(ctx, dwr) userStars = getUserStars(ctx, dwr) ) - pageFinder, err := repodb.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) + pageFinder, err := pagination.NewBaseImagePageFinder(requestedPage.Limit, requestedPage.Offset, requestedPage.SortBy) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } - repoMetaAttributeIterator = dynamo.NewBaseDynamoAttributesIterator( + repoMetaAttributeIterator = NewBaseDynamoAttributesIterator( dwr.Client, dwr.RepoMetaTablename, "RepoMetadata", 0, dwr.Log, ) searchedRepo, searchedTag, err := common.GetRepoTag(searchText) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, - fmt.Errorf("repodb: error while parsing search text, invalid format %w", err) + fmt.Errorf("metadb: error while parsing search text, invalid format %w", err) } repoMetaAttribute, err := repoMetaAttributeIterator.First(ctx) @@ -1404,15 +1413,15 @@ func (dwr *DBWrapper) SearchTags(ctx context.Context, searchText string, filter for ; repoMetaAttribute != nil; repoMetaAttribute, err = repoMetaAttributeIterator.Next(ctx) { if err != nil { // log - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } - var repoMeta repodb.RepoMetadata + var repoMeta mTypes.RepoMetadata err := attributevalue.Unmarshal(repoMetaAttribute, &repoMeta) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, err } @@ -1427,7 +1436,7 @@ func (dwr *DBWrapper) SearchTags(ctx context.Context, searchText string, filter repoMeta.IsBookmarked = zcommon.Contains(userBookmarks, repoMeta.Name) repoMeta.IsStarred = zcommon.Contains(userStars, repoMeta.Name) - matchedTags := make(map[string]repodb.Descriptor) + matchedTags := make(map[string]mTypes.Descriptor) for tag, descriptor := range repoMeta.Tags { if !strings.HasPrefix(tag, searchedTag) { @@ -1443,14 +1452,14 @@ func (dwr *DBWrapper) SearchTags(ctx context.Context, searchText string, filter manifestMeta, err := dwr.fetchManifestMetaWithCheck(repoMeta.Name, manifestDigest, //nolint:contextcheck manifestMetadataMap) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, - fmt.Errorf("repodb: error while unmashaling manifest metadata for digest %s %w", descriptor.Digest, err) + fmt.Errorf("metadb: error while unmashaling manifest metadata for digest %s %w", descriptor.Digest, err) } imageFilterData, err := collectImageManifestFilterData(manifestDigest, repoMeta, manifestMeta) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, fmt.Errorf("%w", err) } @@ -1467,7 +1476,7 @@ func (dwr *DBWrapper) SearchTags(ctx context.Context, searchText string, filter indexData, err := dwr.fetchIndexDataWithCheck(indexDigest, indexDataMap) //nolint:contextcheck if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, fmt.Errorf("%w", err) } @@ -1476,9 +1485,9 @@ func (dwr *DBWrapper) SearchTags(ctx context.Context, searchText string, filter err = json.Unmarshal(indexData.IndexBlob, &indexContent) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, - fmt.Errorf("repodb: error while unmashaling index content for digest %s %w", indexDigest, err) + fmt.Errorf("metadb: error while unmashaling index content for digest %s %w", indexDigest, err) } manifestHasBeenMatched := false @@ -1489,14 +1498,14 @@ func (dwr *DBWrapper) SearchTags(ctx context.Context, searchText string, filter manifestMeta, err := dwr.fetchManifestMetaWithCheck(repoMeta.Name, manifestDigest, //nolint:contextcheck manifestMetadataMap) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, fmt.Errorf("%w", err) } manifestFilterData, err := collectImageManifestFilterData(manifestDigest, repoMeta, manifestMeta) if err != nil { - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, map[string]repodb.IndexData{}, + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, map[string]mTypes.IndexData{}, pageInfo, fmt.Errorf("%w", err) } @@ -1532,7 +1541,7 @@ func (dwr *DBWrapper) SearchTags(ctx context.Context, searchText string, filter repoMeta.Tags = matchedTags - pageFinder.Add(repodb.DetailedRepoMeta{ + pageFinder.Add(mTypes.DetailedRepoMeta{ RepoMetadata: repoMeta, }) } @@ -1545,7 +1554,7 @@ func (dwr *DBWrapper) SearchTags(ctx context.Context, searchText string, filter return foundRepos, foundManifestMetadataMap, foundindexDataMap, pageInfo, err } -func (dwr *DBWrapper) PatchDB() error { +func (dwr *DynamoDB) PatchDB() error { DBVersion, err := dwr.getDBVersion() if err != nil { return fmt.Errorf("patching dynamo failed, error retrieving database version %w", err) @@ -1575,7 +1584,7 @@ func (dwr *DBWrapper) PatchDB() error { return nil } -func (dwr *DBWrapper) SetRepoMeta(repo string, repoMeta repodb.RepoMetadata) error { +func (dwr *DynamoDB) SetRepoMeta(repo string, repoMeta mTypes.RepoMetadata) error { repoMeta.Name = repo repoAttributeValue, err := attributevalue.Marshal(repoMeta) @@ -1602,7 +1611,7 @@ func (dwr *DBWrapper) SetRepoMeta(repo string, repoMeta repodb.RepoMetadata) err return err } -func (dwr *DBWrapper) createRepoMetaTable() error { +func (dwr *DynamoDB) createRepoMetaTable() error { _, err := dwr.Client.CreateTable(context.Background(), &dynamodb.CreateTableInput{ TableName: aws.String(dwr.RepoMetaTablename), AttributeDefinitions: []types.AttributeDefinition{ @@ -1627,7 +1636,7 @@ func (dwr *DBWrapper) createRepoMetaTable() error { return dwr.waitTableToBeCreated(dwr.RepoMetaTablename) } -func (dwr *DBWrapper) deleteRepoMetaTable() error { +func (dwr *DynamoDB) deleteRepoMetaTable() error { _, err := dwr.Client.DeleteTable(context.Background(), &dynamodb.DeleteTableInput{ TableName: aws.String(dwr.RepoMetaTablename), }) @@ -1639,7 +1648,7 @@ func (dwr *DBWrapper) deleteRepoMetaTable() error { return dwr.waitTableToBeDeleted(dwr.RepoMetaTablename) } -func (dwr *DBWrapper) ResetRepoMetaTable() error { +func (dwr *DynamoDB) ResetRepoMetaTable() error { err := dwr.deleteRepoMetaTable() if err != nil { return err @@ -1648,7 +1657,7 @@ func (dwr *DBWrapper) ResetRepoMetaTable() error { return dwr.createRepoMetaTable() } -func (dwr *DBWrapper) waitTableToBeCreated(tableName string) error { +func (dwr *DynamoDB) waitTableToBeCreated(tableName string) error { const maxWaitTime = 20 * time.Second waiter := dynamodb.NewTableExistsWaiter(dwr.Client) @@ -1658,7 +1667,7 @@ func (dwr *DBWrapper) waitTableToBeCreated(tableName string) error { }, maxWaitTime) } -func (dwr *DBWrapper) waitTableToBeDeleted(tableName string) error { +func (dwr *DynamoDB) waitTableToBeDeleted(tableName string) error { const maxWaitTime = 20 * time.Second waiter := dynamodb.NewTableNotExistsWaiter(dwr.Client) @@ -1668,7 +1677,7 @@ func (dwr *DBWrapper) waitTableToBeDeleted(tableName string) error { }, maxWaitTime) } -func (dwr *DBWrapper) createManifestDataTable() error { +func (dwr *DynamoDB) createManifestDataTable() error { _, err := dwr.Client.CreateTable(context.Background(), &dynamodb.CreateTableInput{ TableName: aws.String(dwr.ManifestDataTablename), AttributeDefinitions: []types.AttributeDefinition{ @@ -1693,7 +1702,7 @@ func (dwr *DBWrapper) createManifestDataTable() error { return dwr.waitTableToBeCreated(dwr.ManifestDataTablename) } -func (dwr *DBWrapper) createIndexDataTable() error { +func (dwr *DynamoDB) createIndexDataTable() error { _, err := dwr.Client.CreateTable(context.Background(), &dynamodb.CreateTableInput{ TableName: aws.String(dwr.IndexDataTablename), AttributeDefinitions: []types.AttributeDefinition{ @@ -1718,7 +1727,7 @@ func (dwr *DBWrapper) createIndexDataTable() error { return dwr.waitTableToBeCreated(dwr.IndexDataTablename) } -func (dwr *DBWrapper) createVersionTable() error { +func (dwr *DynamoDB) createVersionTable() error { _, err := dwr.Client.CreateTable(context.Background(), &dynamodb.CreateTableInput{ TableName: aws.String(dwr.VersionTablename), AttributeDefinitions: []types.AttributeDefinition{ @@ -1778,7 +1787,7 @@ func (dwr *DBWrapper) createVersionTable() error { return nil } -func (dwr *DBWrapper) getDBVersion() (string, error) { +func (dwr *DynamoDB) getDBVersion() (string, error) { resp, err := dwr.Client.GetItem(context.TODO(), &dynamodb.GetItemInput{ TableName: aws.String(dwr.VersionTablename), Key: map[string]types.AttributeValue{ @@ -1803,7 +1812,7 @@ func (dwr *DBWrapper) getDBVersion() (string, error) { return version, nil } -func (dwr *DBWrapper) deleteManifestDataTable() error { +func (dwr *DynamoDB) deleteManifestDataTable() error { _, err := dwr.Client.DeleteTable(context.Background(), &dynamodb.DeleteTableInput{ TableName: aws.String(dwr.ManifestDataTablename), }) @@ -1815,7 +1824,7 @@ func (dwr *DBWrapper) deleteManifestDataTable() error { return dwr.waitTableToBeDeleted(dwr.ManifestDataTablename) } -func (dwr *DBWrapper) ResetManifestDataTable() error { +func (dwr *DynamoDB) ResetManifestDataTable() error { err := dwr.deleteManifestDataTable() if err != nil { return err @@ -1824,10 +1833,10 @@ func (dwr *DBWrapper) ResetManifestDataTable() error { return dwr.createManifestDataTable() } -func (dwr *DBWrapper) ToggleBookmarkRepo(ctx context.Context, repo string) ( - repodb.ToggleState, error, +func (dwr *DynamoDB) ToggleBookmarkRepo(ctx context.Context, repo string) ( + mTypes.ToggleState, error, ) { - res := repodb.NotChanged + res := mTypes.NotChanged if ok, err := localCtx.RepoIsUserAvailable(ctx, repo); !ok || err != nil { return res, zerr.ErrUserDataNotAllowed @@ -1836,7 +1845,7 @@ func (dwr *DBWrapper) ToggleBookmarkRepo(ctx context.Context, repo string) ( userData, err := dwr.GetUserData(ctx) if err != nil { if errors.Is(err, zerr.ErrUserDataNotFound) { - return repodb.NotChanged, nil + return mTypes.NotChanged, nil } return res, err @@ -1844,18 +1853,18 @@ func (dwr *DBWrapper) ToggleBookmarkRepo(ctx context.Context, repo string) ( if !zcommon.Contains(userData.BookmarkedRepos, repo) { userData.BookmarkedRepos = append(userData.BookmarkedRepos, repo) - res = repodb.Added + res = mTypes.Added } else { userData.BookmarkedRepos = zcommon.RemoveFrom(userData.BookmarkedRepos, repo) - res = repodb.Removed + res = mTypes.Removed } - if res != repodb.NotChanged { + if res != mTypes.NotChanged { err = dwr.SetUserData(ctx, userData) } if err != nil { - res = repodb.NotChanged + res = mTypes.NotChanged return res, err } @@ -1863,7 +1872,7 @@ func (dwr *DBWrapper) ToggleBookmarkRepo(ctx context.Context, repo string) ( return res, nil } -func (dwr *DBWrapper) GetBookmarkedRepos(ctx context.Context) ([]string, error) { +func (dwr *DynamoDB) GetBookmarkedRepos(ctx context.Context) ([]string, error) { userMeta, err := dwr.GetUserData(ctx) if errors.Is(err, zerr.ErrUserDataNotFound) || errors.Is(err, zerr.ErrUserDataNotAllowed) { @@ -1873,10 +1882,10 @@ func (dwr *DBWrapper) GetBookmarkedRepos(ctx context.Context) ([]string, error) return userMeta.BookmarkedRepos, err } -func (dwr *DBWrapper) ToggleStarRepo(ctx context.Context, repo string) ( - repodb.ToggleState, error, +func (dwr *DynamoDB) ToggleStarRepo(ctx context.Context, repo string) ( + mTypes.ToggleState, error, ) { - res := repodb.NotChanged + res := mTypes.NotChanged acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { @@ -1901,33 +1910,33 @@ func (dwr *DBWrapper) ToggleStarRepo(ctx context.Context, repo string) ( if !zcommon.Contains(userData.StarredRepos, repo) { userData.StarredRepos = append(userData.StarredRepos, repo) - res = repodb.Added + res = mTypes.Added } else { userData.StarredRepos = zcommon.RemoveFrom(userData.StarredRepos, repo) - res = repodb.Removed + res = mTypes.Removed } - if res != repodb.NotChanged { + if res != mTypes.NotChanged { repoMeta, err := dwr.GetRepoMeta(repo) //nolint:contextcheck if err != nil { - return repodb.NotChanged, err + return mTypes.NotChanged, err } switch res { - case repodb.Added: + case mTypes.Added: repoMeta.Stars++ - case repodb.Removed: + case mTypes.Removed: repoMeta.Stars-- } repoAttributeValue, err := attributevalue.Marshal(repoMeta) if err != nil { - return repodb.NotChanged, err + return mTypes.NotChanged, err } userAttributeValue, err := attributevalue.Marshal(userData) if err != nil { - return repodb.NotChanged, err + return mTypes.NotChanged, err } _, err = dwr.Client.TransactWriteItems(ctx, &dynamodb.TransactWriteItemsInput{ @@ -1971,14 +1980,14 @@ func (dwr *DBWrapper) ToggleStarRepo(ctx context.Context, repo string) ( }, }) if err != nil { - return repodb.NotChanged, err + return mTypes.NotChanged, err } } return res, nil } -func (dwr *DBWrapper) GetStarredRepos(ctx context.Context) ([]string, error) { +func (dwr *DynamoDB) GetStarredRepos(ctx context.Context) ([]string, error) { userMeta, err := dwr.GetUserData(ctx) if errors.Is(err, zerr.ErrUserDataNotFound) || errors.Is(err, zerr.ErrUserDataNotAllowed) { @@ -1988,7 +1997,7 @@ func (dwr *DBWrapper) GetStarredRepos(ctx context.Context) ([]string, error) { return userMeta.StarredRepos, err } -func (dwr *DBWrapper) createUserDataTable() error { +func (dwr *DynamoDB) createUserDataTable() error { _, err := dwr.Client.CreateTable(context.Background(), &dynamodb.CreateTableInput{ TableName: aws.String(dwr.UserDataTablename), AttributeDefinitions: []types.AttributeDefinition{ @@ -2013,7 +2022,7 @@ func (dwr *DBWrapper) createUserDataTable() error { return dwr.waitTableToBeCreated(dwr.UserDataTablename) } -func (dwr DBWrapper) createAPIKeyTable() error { +func (dwr DynamoDB) createAPIKeyTable() error { _, err := dwr.Client.CreateTable(context.Background(), &dynamodb.CreateTableInput{ TableName: aws.String(dwr.APIKeyTablename), AttributeDefinitions: []types.AttributeDefinition{ @@ -2038,7 +2047,7 @@ func (dwr DBWrapper) createAPIKeyTable() error { return dwr.waitTableToBeCreated(dwr.APIKeyTablename) } -func (dwr DBWrapper) SetUserGroups(ctx context.Context, groups []string) error { +func (dwr DynamoDB) SetUserGroups(ctx context.Context, groups []string) error { userData, err := dwr.GetUserData(ctx) if err != nil && !errors.Is(err, zerr.ErrUserDataNotFound) { return err @@ -2049,13 +2058,13 @@ func (dwr DBWrapper) SetUserGroups(ctx context.Context, groups []string) error { return dwr.SetUserData(ctx, userData) } -func (dwr DBWrapper) GetUserGroups(ctx context.Context) ([]string, error) { +func (dwr DynamoDB) GetUserGroups(ctx context.Context) ([]string, error) { userData, err := dwr.GetUserData(ctx) return userData.Groups, err } -func (dwr DBWrapper) UpdateUserAPIKeyLastUsed(ctx context.Context, hashedKey string) error { +func (dwr DynamoDB) UpdateUserAPIKeyLastUsed(ctx context.Context, hashedKey string) error { userData, err := dwr.GetUserData(ctx) if err != nil { return err @@ -2071,7 +2080,7 @@ func (dwr DBWrapper) UpdateUserAPIKeyLastUsed(ctx context.Context, hashedKey str return err } -func (dwr DBWrapper) AddUserAPIKey(ctx context.Context, hashedKey string, apiKeyDetails *repodb.APIKeyDetails) error { +func (dwr DynamoDB) AddUserAPIKey(ctx context.Context, hashedKey string, apiKeyDetails *mTypes.APIKeyDetails) error { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { return err @@ -2085,11 +2094,11 @@ func (dwr DBWrapper) AddUserAPIKey(ctx context.Context, hashedKey string, apiKey userData, err := dwr.GetUserData(ctx) if err != nil && !errors.Is(err, zerr.ErrUserDataNotFound) { - return fmt.Errorf("repoDB: error while getting userData for identity %s %w", userid, err) + return fmt.Errorf("metaDB: error while getting userData for identity %s %w", userid, err) } if userData.APIKeys == nil { - userData.APIKeys = make(map[string]repodb.APIKeyDetails) + userData.APIKeys = make(map[string]mTypes.APIKeyDetails) } userData.APIKeys[hashedKey] = *apiKeyDetails @@ -2143,10 +2152,10 @@ func (dwr DBWrapper) AddUserAPIKey(ctx context.Context, hashedKey string, apiKey return err } -func (dwr DBWrapper) DeleteUserAPIKey(ctx context.Context, keyID string) error { +func (dwr DynamoDB) DeleteUserAPIKey(ctx context.Context, keyID string) error { userData, err := dwr.GetUserData(ctx) if err != nil { - return fmt.Errorf("repoDB: error while getting userData %w", err) + return fmt.Errorf("metaDB: error while getting userData %w", err) } for hash, apiKeyDetails := range userData.APIKeys { @@ -2160,7 +2169,7 @@ func (dwr DBWrapper) DeleteUserAPIKey(ctx context.Context, keyID string) error { }, }) if err != nil { - return fmt.Errorf("repoDB: error while deleting userAPIKey entry for hash %s %w", hash, err) + return fmt.Errorf("metaDB: error while deleting userAPIKey entry for hash %s %w", hash, err) } err := dwr.SetUserData(ctx, userData) @@ -2172,7 +2181,7 @@ func (dwr DBWrapper) DeleteUserAPIKey(ctx context.Context, keyID string) error { return nil } -func (dwr DBWrapper) GetUserAPIKeyInfo(hashedKey string) (string, error) { +func (dwr DynamoDB) GetUserAPIKeyInfo(hashedKey string) (string, error) { var userid string resp, err := dwr.Client.GetItem(context.Background(), &dynamodb.GetItemInput{ @@ -2197,8 +2206,8 @@ func (dwr DBWrapper) GetUserAPIKeyInfo(hashedKey string) (string, error) { return userid, nil } -func (dwr DBWrapper) GetUserData(ctx context.Context) (repodb.UserData, error) { - var userData repodb.UserData +func (dwr DynamoDB) GetUserData(ctx context.Context) (mTypes.UserData, error) { + var userData mTypes.UserData acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { @@ -2218,22 +2227,22 @@ func (dwr DBWrapper) GetUserData(ctx context.Context) (repodb.UserData, error) { }, }) if err != nil { - return repodb.UserData{}, err + return mTypes.UserData{}, err } if resp.Item == nil { - return repodb.UserData{}, zerr.ErrUserDataNotFound + return mTypes.UserData{}, zerr.ErrUserDataNotFound } err = attributevalue.Unmarshal(resp.Item["UserData"], &userData) if err != nil { - return repodb.UserData{}, err + return mTypes.UserData{}, err } return userData, nil } -func (dwr DBWrapper) SetUserData(ctx context.Context, userData repodb.UserData) error { +func (dwr DynamoDB) SetUserData(ctx context.Context, userData mTypes.UserData) error { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { return err @@ -2269,7 +2278,7 @@ func (dwr DBWrapper) SetUserData(ctx context.Context, userData repodb.UserData) return err } -func (dwr DBWrapper) DeleteUserData(ctx context.Context) error { +func (dwr DynamoDB) DeleteUserData(ctx context.Context) error { acCtx, err := localCtx.GetAccessControlContext(ctx) if err != nil { return err diff --git a/pkg/meta/repodb/dynamodb-wrapper/dynamo_internal_test.go b/pkg/meta/dynamodb/dynamo_internal_test.go similarity index 97% rename from pkg/meta/repodb/dynamodb-wrapper/dynamo_internal_test.go rename to pkg/meta/dynamodb/dynamo_internal_test.go index a859b3aa..560c5775 100644 --- a/pkg/meta/repodb/dynamodb-wrapper/dynamo_internal_test.go +++ b/pkg/meta/dynamodb/dynamo_internal_test.go @@ -1,4 +1,4 @@ -package dynamo +package dynamodb import ( "context" @@ -52,7 +52,7 @@ func TestWrapperErrors(t *testing.T) { config.WithEndpointResolverWithOptions(customResolver)) So(err, ShouldBeNil) - dynamoWrapper := DBWrapper{ + dynamoWrapper := DynamoDB{ Client: dynamodb.NewFromConfig(cfg), RepoMetaTablename: repoMetaTablename, ManifestDataTablename: manifestDataTablename, @@ -96,7 +96,7 @@ func TestWrapperErrors(t *testing.T) { config.WithEndpointResolverWithOptions(customResolver)) So(err, ShouldBeNil) - dynamoWrapper := DBWrapper{ + dynamoWrapper := DynamoDB{ Client: dynamodb.NewFromConfig(cfg), RepoMetaTablename: repoMetaTablename, ManifestDataTablename: manifestDataTablename, diff --git a/pkg/meta/repodb/dynamodb-wrapper/dynamo_test.go b/pkg/meta/dynamodb/dynamo_test.go similarity index 84% rename from pkg/meta/repodb/dynamodb-wrapper/dynamo_test.go rename to pkg/meta/dynamodb/dynamo_test.go index 176e6d4d..847c5472 100644 --- a/pkg/meta/repodb/dynamodb-wrapper/dynamo_test.go +++ b/pkg/meta/dynamodb/dynamo_test.go @@ -1,4 +1,4 @@ -package dynamo_test +package dynamodb_test import ( "context" @@ -18,9 +18,8 @@ import ( . "github.com/smartystreets/goconvey/convey" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/dynamo" - "zotregistry.io/zot/pkg/meta/repodb" - dynamoWrapper "zotregistry.io/zot/pkg/meta/repodb/dynamodb-wrapper" + mdynamodb "zotregistry.io/zot/pkg/meta/dynamodb" + mTypes "zotregistry.io/zot/pkg/meta/types" localCtx "zotregistry.io/zot/pkg/requestcontext" "zotregistry.io/zot/pkg/test" ) @@ -48,7 +47,7 @@ func TestIterator(t *testing.T) { log := log.NewLogger("debug", "") Convey("TestIterator", t, func() { - params := dynamo.DBDriverParameters{ + params := mdynamodb.DBDriverParameters{ Endpoint: endpoint, Region: region, RepoMetaTablename: repoMetaTablename, @@ -58,10 +57,10 @@ func TestIterator(t *testing.T) { APIKeyTablename: apiKeyTablename, UserDataTablename: userDataTablename, } - client, err := dynamo.GetDynamoClient(params) + client, err := mdynamodb.GetDynamoClient(params) So(err, ShouldBeNil) - dynamoWrapper, err := dynamoWrapper.NewDynamoDBWrapper(client, params, log) + dynamoWrapper, err := mdynamodb.New(client, params, log) So(err, ShouldBeNil) So(dynamoWrapper.ResetManifestDataTable(), ShouldBeNil) @@ -76,7 +75,7 @@ func TestIterator(t *testing.T) { err = dynamoWrapper.SetRepoReference("repo3", "tag3", "manifestType", "manifestDigest3") So(err, ShouldBeNil) - repoMetaAttributeIterator := dynamo.NewBaseDynamoAttributesIterator( + repoMetaAttributeIterator := mdynamodb.NewBaseDynamoAttributesIterator( dynamoWrapper.Client, repoMetaTablename, "RepoMetadata", @@ -117,7 +116,7 @@ func TestIteratorErrors(t *testing.T) { config.WithEndpointResolverWithOptions(customResolver)) So(err, ShouldBeNil) - repoMetaAttributeIterator := dynamo.NewBaseDynamoAttributesIterator( + repoMetaAttributeIterator := mdynamodb.NewBaseDynamoAttributesIterator( dynamodb.NewFromConfig(cfg), "RepoMetadataTable", "RepoMetadata", @@ -152,7 +151,7 @@ func TestWrapperErrors(t *testing.T) { log := log.NewLogger("debug", "") Convey("Errors", t, func() { - params := dynamo.DBDriverParameters{ //nolint:contextcheck + params := mdynamodb.DBDriverParameters{ //nolint:contextcheck Endpoint: endpoint, Region: region, RepoMetaTablename: repoMetaTablename, @@ -162,10 +161,10 @@ func TestWrapperErrors(t *testing.T) { APIKeyTablename: apiKeyTablename, VersionTablename: versionTablename, } - client, err := dynamo.GetDynamoClient(params) //nolint:contextcheck + client, err := mdynamodb.GetDynamoClient(params) //nolint:contextcheck So(err, ShouldBeNil) - dynamoWrapper, err := dynamoWrapper.NewDynamoDBWrapper(client, params, log) //nolint:contextcheck + dynamoWrapper, err := mdynamodb.New(client, params, log) //nolint:contextcheck So(err, ShouldBeNil) So(dynamoWrapper.ResetManifestDataTable(), ShouldBeNil) //nolint:contextcheck @@ -181,8 +180,8 @@ func TestWrapperErrors(t *testing.T) { Convey("SetUserData", func() { hashKey := "id" - apiKeys := make(map[string]repodb.APIKeyDetails) - apiKeyDetails := repodb.APIKeyDetails{ + apiKeys := make(map[string]mTypes.APIKeyDetails) + apiKeyDetails := mTypes.APIKeyDetails{ Label: "apiKey", Scopes: []string{"repo"}, UUID: hashKey, @@ -190,7 +189,7 @@ func TestWrapperErrors(t *testing.T) { apiKeys[hashKey] = apiKeyDetails - userProfileSrc := repodb.UserData{ + userProfileSrc := mTypes.UserData{ Groups: []string{"group1", "group2"}, APIKeys: apiKeys, } @@ -206,7 +205,7 @@ func TestWrapperErrors(t *testing.T) { ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - err = dynamoWrapper.SetUserData(ctx, repodb.UserData{}) //nolint: contextcheck + err = dynamoWrapper.SetUserData(ctx, mTypes.UserData{}) //nolint: contextcheck So(err, ShouldNotBeNil) }) @@ -254,7 +253,7 @@ func TestWrapperErrors(t *testing.T) { status, err := dynamoWrapper.ToggleBookmarkRepo(ctx, "repo") So(err, ShouldBeNil) - So(status, ShouldEqual, repodb.NotChanged) + So(status, ShouldEqual, mTypes.NotChanged) }) Convey("ToggleBookmarkRepo GetUserMeta client error", func() { @@ -272,7 +271,7 @@ func TestWrapperErrors(t *testing.T) { status, err := dynamoWrapper.ToggleBookmarkRepo(ctx, "repo") So(err, ShouldNotBeNil) - So(status, ShouldEqual, repodb.NotChanged) + So(status, ShouldEqual, mTypes.NotChanged) }) Convey("GetBookmarkedRepos", func() { @@ -395,7 +394,7 @@ func TestWrapperErrors(t *testing.T) { authzCtxKey := localCtx.GetContextKey() ctx := context.WithValue(context.Background(), authzCtxKey, "bad context") - err := dynamoWrapper.SetUserData(ctx, repodb.UserData{}) + err := dynamoWrapper.SetUserData(ctx, mTypes.UserData{}) So(err, ShouldNotBeNil) }) @@ -411,7 +410,7 @@ func TestWrapperErrors(t *testing.T) { authzCtxKey := localCtx.GetContextKey() ctx := context.WithValue(context.Background(), authzCtxKey, "bad context") - err := dynamoWrapper.SetUserData(ctx, repodb.UserData{}) + err := dynamoWrapper.SetUserData(ctx, mTypes.UserData{}) So(err, ShouldNotBeNil) }) @@ -419,7 +418,7 @@ func TestWrapperErrors(t *testing.T) { authzCtxKey := localCtx.GetContextKey() ctx := context.WithValue(context.Background(), authzCtxKey, "bad context") - err := dynamoWrapper.AddUserAPIKey(ctx, "", &repodb.APIKeyDetails{}) + err := dynamoWrapper.AddUserAPIKey(ctx, "", &mTypes.APIKeyDetails{}) So(err, ShouldNotBeNil) }) @@ -456,11 +455,11 @@ func TestWrapperErrors(t *testing.T) { ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - apiKeyDetails := make(map[string]repodb.APIKeyDetails) - apiKeyDetails["id"] = repodb.APIKeyDetails{ + apiKeyDetails := make(map[string]mTypes.APIKeyDetails) + apiKeyDetails["id"] = mTypes.APIKeyDetails{ UUID: "id", } - err := dynamoWrapper.SetUserData(ctx, repodb.UserData{ + err := dynamoWrapper.SetUserData(ctx, mTypes.UserData{ APIKeys: apiKeyDetails, }) So(err, ShouldBeNil) @@ -480,7 +479,7 @@ func TestWrapperErrors(t *testing.T) { ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - err = dynamoWrapper.AddUserAPIKey(ctx, "key", &repodb.APIKeyDetails{}) + err = dynamoWrapper.AddUserAPIKey(ctx, "key", &mTypes.APIKeyDetails{}) So(err, ShouldNotBeNil) }) authzCtxKey := localCtx.GetContextKey() @@ -491,11 +490,11 @@ func TestWrapperErrors(t *testing.T) { ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - err := dynamoWrapper.AddUserAPIKey(ctx, "key", &repodb.APIKeyDetails{}) + err := dynamoWrapper.AddUserAPIKey(ctx, "key", &mTypes.APIKeyDetails{}) So(err, ShouldBeNil) dynamoWrapper.APIKeyTablename = wrongTableName - err = dynamoWrapper.AddUserAPIKey(ctx, "key", &repodb.APIKeyDetails{}) + err = dynamoWrapper.AddUserAPIKey(ctx, "key", &mTypes.APIKeyDetails{}) So(err, ShouldNotBeNil) }) @@ -530,7 +529,7 @@ func TestWrapperErrors(t *testing.T) { Convey("SetManifestData", func() { dynamoWrapper.ManifestDataTablename = wrongTableName - err := dynamoWrapper.SetManifestData("dig", repodb.ManifestData{}) + err := dynamoWrapper.SetManifestData("dig", mTypes.ManifestData{}) So(err, ShouldNotBeNil) }) @@ -568,7 +567,7 @@ func TestWrapperErrors(t *testing.T) { err := setBadRepoMeta(dynamoWrapper.Client, repoMetaTablename, "repo1") So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestMeta("repo1", "dig", repodb.ManifestMetadata{}) + err = dynamoWrapper.SetManifestMeta("repo1", "dig", mTypes.ManifestMetadata{}) So(err, ShouldNotBeNil) }) @@ -581,7 +580,7 @@ func TestWrapperErrors(t *testing.T) { }) Convey("GetManifestMeta GetRepoMeta Not Found error", func() { - err := dynamoWrapper.SetManifestData("dig", repodb.ManifestData{}) + err := dynamoWrapper.SetManifestData("dig", mTypes.ManifestData{}) So(err, ShouldBeNil) _, err = dynamoWrapper.GetManifestMeta("repoNotFound", "dig") @@ -589,7 +588,7 @@ func TestWrapperErrors(t *testing.T) { }) Convey("GetManifestMeta GetRepoMeta error", func() { - err := dynamoWrapper.SetManifestData("dig", repodb.ManifestData{}) + err := dynamoWrapper.SetManifestData("dig", mTypes.ManifestData{}) So(err, ShouldBeNil) err = setBadRepoMeta(dynamoWrapper.Client, repoMetaTablename, "repo") @@ -608,7 +607,7 @@ func TestWrapperErrors(t *testing.T) { Convey("SetReferrer client error", func() { dynamoWrapper.RepoMetaTablename = badTablename - err := dynamoWrapper.SetReferrer("repo", "", repodb.ReferrerInfo{}) + err := dynamoWrapper.SetReferrer("repo", "", mTypes.ReferrerInfo{}) So(err, ShouldNotBeNil) }) @@ -616,7 +615,7 @@ func TestWrapperErrors(t *testing.T) { err := setBadRepoMeta(dynamoWrapper.Client, repoMetaTablename, "repo") So(err, ShouldBeNil) - err = dynamoWrapper.SetReferrer("repo", "", repodb.ReferrerInfo{}) + err = dynamoWrapper.SetReferrer("repo", "", mTypes.ReferrerInfo{}) So(err, ShouldNotBeNil) }) @@ -656,13 +655,13 @@ func TestWrapperErrors(t *testing.T) { Convey("GetReferrersInfo getData fails", func() { dynamoWrapper.ManifestDataTablename = badTablename - err = dynamoWrapper.SetReferrer("repo", "rf", repodb.ReferrerInfo{ + err = dynamoWrapper.SetReferrer("repo", "rf", mTypes.ReferrerInfo{ Digest: "dig1", MediaType: ispec.MediaTypeImageManifest, }) So(err, ShouldBeNil) - err = dynamoWrapper.SetReferrer("repo", "rf", repodb.ReferrerInfo{ + err = dynamoWrapper.SetReferrer("repo", "rf", mTypes.ReferrerInfo{ Digest: "dig2", MediaType: ispec.MediaTypeImageManifest, }) @@ -673,18 +672,18 @@ func TestWrapperErrors(t *testing.T) { }) Convey("GetReferrersInfo bad descriptor blob", func() { - err = dynamoWrapper.SetManifestData("dig3", repodb.ManifestData{ + err = dynamoWrapper.SetManifestData("dig3", mTypes.ManifestData{ ManifestBlob: []byte("bad json"), }) So(err, ShouldBeNil) - err = dynamoWrapper.SetReferrer("repo", "rf", repodb.ReferrerInfo{ + err = dynamoWrapper.SetReferrer("repo", "rf", mTypes.ReferrerInfo{ Digest: "dig2", MediaType: ispec.MediaTypeImageManifest, }) So(err, ShouldBeNil) - err = dynamoWrapper.SetReferrer("repo", "rf", repodb.ReferrerInfo{ + err = dynamoWrapper.SetReferrer("repo", "rf", mTypes.ReferrerInfo{ Digest: "dig3", MediaType: ispec.MediaTypeImageManifest, }) @@ -758,7 +757,7 @@ func TestWrapperErrors(t *testing.T) { }) Convey("UpdateSignaturesValidity GetRepoMeta error", func() { - err := dynamoWrapper.SetManifestData("dig", repodb.ManifestData{}) + err := dynamoWrapper.SetManifestData("dig", mTypes.ManifestData{}) So(err, ShouldBeNil) err = setBadRepoMeta(dynamoWrapper.Client, repoMetaTablename, "repo") @@ -772,7 +771,7 @@ func TestWrapperErrors(t *testing.T) { err := dynamoWrapper.SetRepoReference("repo", "tag", "dig", "") So(err, ShouldBeNil) - err = dynamoWrapper.AddManifestSignature("repoNotFound", "tag", repodb.SignatureMetadata{}) + err = dynamoWrapper.AddManifestSignature("repoNotFound", "tag", mTypes.SignatureMetadata{}) So(err, ShouldNotBeNil) }) @@ -780,31 +779,31 @@ func TestWrapperErrors(t *testing.T) { err := dynamoWrapper.SetRepoReference("repo", "tag", "dig", "") So(err, ShouldBeNil) - err = dynamoWrapper.AddManifestSignature("repo", "tagNotFound", repodb.SignatureMetadata{}) + err = dynamoWrapper.AddManifestSignature("repo", "tagNotFound", mTypes.SignatureMetadata{}) So(err, ShouldNotBeNil) }) - Convey("AddManifestSignature SignatureType repodb.NotationType", func() { + Convey("AddManifestSignature SignatureType metadb.NotationType", func() { err := dynamoWrapper.SetRepoReference("repo", "tag", "dig", "") So(err, ShouldBeNil) - err = dynamoWrapper.AddManifestSignature("repo", "tagNotFound", repodb.SignatureMetadata{ + err = dynamoWrapper.AddManifestSignature("repo", "tagNotFound", mTypes.SignatureMetadata{ SignatureType: "notation", }) So(err, ShouldBeNil) }) Convey("DeleteSignature GetRepoMeta error", func() { - err = dynamoWrapper.DeleteSignature("repoNotFound", "tagNotFound", repodb.SignatureMetadata{}) + err = dynamoWrapper.DeleteSignature("repoNotFound", "tagNotFound", mTypes.SignatureMetadata{}) So(err, ShouldNotBeNil) }) Convey("DeleteSignature sigDigest.SignatureManifestDigest != sigMeta.SignatureDigest true", func() { - err := setRepoMeta(dynamoWrapper.Client, repoMetaTablename, repodb.RepoMetadata{ + err := setRepoMeta(dynamoWrapper.Client, repoMetaTablename, mTypes.RepoMetadata{ Name: "repo", - Signatures: map[string]repodb.ManifestSignatures{ + Signatures: map[string]mTypes.ManifestSignatures{ "tag1": { - "cosign": []repodb.SignatureInfo{ + "cosign": []mTypes.SignatureInfo{ {SignatureManifestDigest: "dig1"}, {SignatureManifestDigest: "dig2"}, }, @@ -813,7 +812,7 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - err = dynamoWrapper.DeleteSignature("repo", "tag1", repodb.SignatureMetadata{ + err = dynamoWrapper.DeleteSignature("repo", "tag1", mTypes.SignatureMetadata{ SignatureDigest: "dig2", SignatureType: "cosign", }) @@ -824,8 +823,8 @@ func TestWrapperErrors(t *testing.T) { err = setBadRepoMeta(dynamoWrapper.Client, repoMetaTablename, "repo") //nolint:contextcheck So(err, ShouldBeNil) - _, err = dynamoWrapper.GetMultipleRepoMeta(ctx, func(repoMeta repodb.RepoMetadata) bool { return true }, - repodb.PageInput{}) + _, err = dynamoWrapper.GetMultipleRepoMeta(ctx, func(repoMeta mTypes.RepoMetadata) bool { return true }, + mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -834,7 +833,7 @@ func TestWrapperErrors(t *testing.T) { err = setBadRepoMeta(dynamoWrapper.Client, repoMetaTablename, "repo") //nolint:contextcheck So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -844,7 +843,7 @@ func TestWrapperErrors(t *testing.T) { ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -853,13 +852,13 @@ func TestWrapperErrors(t *testing.T) { err := dynamoWrapper.SetRepoReference("repo", "tag1", "dig1", ispec.MediaTypeImageManifest) //nolint:contextcheck So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestData("dig1", repodb.ManifestData{ //nolint:contextcheck + err = dynamoWrapper.SetManifestData("dig1", mTypes.ManifestData{ //nolint:contextcheck ManifestBlob: []byte("{}"), ConfigBlob: []byte("bad json"), }) So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -870,17 +869,17 @@ func TestWrapperErrors(t *testing.T) { err := dynamoWrapper.SetRepoReference("repo", "tag1", digest, "invalid type") //nolint:contextcheck So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) _, _, _, _, err = dynamoWrapper.FilterTags( ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldBeNil) }) @@ -894,7 +893,7 @@ func TestWrapperErrors(t *testing.T) { err = setBadIndexData(dynamoWrapper.Client, indexDataTablename, indexDigest.String()) //nolint:contextcheck So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -904,12 +903,12 @@ func TestWrapperErrors(t *testing.T) { err := dynamoWrapper.SetRepoReference("repo", "tag1", indexDigest, ispec.MediaTypeImageIndex) //nolint:contextcheck So(err, ShouldBeNil) - err = dynamoWrapper.SetIndexData(indexDigest, repodb.IndexData{ //nolint:contextcheck + err = dynamoWrapper.SetIndexData(indexDigest, mTypes.IndexData{ //nolint:contextcheck IndexBlob: []byte("bad json"), }) So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -928,24 +927,24 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - err = dynamoWrapper.SetIndexData(indexDigest, repodb.IndexData{ //nolint:contextcheck + err = dynamoWrapper.SetIndexData(indexDigest, mTypes.IndexData{ //nolint:contextcheck IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestData(manifestDigestFromIndex1, repodb.ManifestData{ //nolint:contextcheck + err = dynamoWrapper.SetManifestData(manifestDigestFromIndex1, mTypes.ManifestData{ //nolint:contextcheck ManifestBlob: []byte("Bad Manifest"), ConfigBlob: []byte("Bad Manifest"), }) So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestData(manifestDigestFromIndex2, repodb.ManifestData{ //nolint:contextcheck + err = dynamoWrapper.SetManifestData(manifestDigestFromIndex2, mTypes.ManifestData{ //nolint:contextcheck ManifestBlob: []byte("Bad Manifest"), ConfigBlob: []byte("Bad Manifest"), }) So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -953,7 +952,7 @@ func TestWrapperErrors(t *testing.T) { err = setBadRepoMeta(dynamoWrapper.Client, repoMetaTablename, "repo") //nolint:contextcheck So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -963,7 +962,7 @@ func TestWrapperErrors(t *testing.T) { ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -974,14 +973,14 @@ func TestWrapperErrors(t *testing.T) { err = dynamoWrapper.SetManifestData( //nolint:contextcheck "dig1", - repodb.ManifestData{ + mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("bad json"), }, ) So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -995,7 +994,7 @@ func TestWrapperErrors(t *testing.T) { err = setBadIndexData(dynamoWrapper.Client, indexDataTablename, indexDigest.String()) //nolint:contextcheck So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -1005,12 +1004,12 @@ func TestWrapperErrors(t *testing.T) { err := dynamoWrapper.SetRepoReference("repo", "tag1", indexDigest, ispec.MediaTypeImageIndex) //nolint:contextcheck So(err, ShouldBeNil) - err = dynamoWrapper.SetIndexData(indexDigest, repodb.IndexData{ //nolint:contextcheck + err = dynamoWrapper.SetIndexData(indexDigest, mTypes.IndexData{ //nolint:contextcheck IndexBlob: []byte("bad json"), }) So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -1029,29 +1028,30 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - err = dynamoWrapper.SetIndexData(indexDigest, repodb.IndexData{ //nolint:contextcheck + err = dynamoWrapper.SetIndexData(indexDigest, mTypes.IndexData{ //nolint:contextcheck IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestData(manifestDigestFromIndex1, repodb.ManifestData{ //nolint:contextcheck + err = dynamoWrapper.SetManifestData(manifestDigestFromIndex1, mTypes.ManifestData{ //nolint:contextcheck ManifestBlob: []byte("Bad Manifest"), ConfigBlob: []byte("Bad Manifest"), }) So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestData(manifestDigestFromIndex2, repodb.ManifestData{ //nolint:contextcheck + err = dynamoWrapper.SetManifestData(manifestDigestFromIndex2, mTypes.ManifestData{ //nolint:contextcheck ManifestBlob: []byte("Bad Manifest"), ConfigBlob: []byte("Bad Manifest"), }) So(err, ShouldBeNil) - _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err = dynamoWrapper.SearchTags(ctx, "repo:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) Convey("FilterRepos NewBaseRepoPageFinder errors", func() { - _, _, _, _, err := dynamoWrapper.SearchRepos(ctx, "text", repodb.Filter{}, repodb.PageInput{Offset: -2, Limit: -2}) + _, _, _, _, err := dynamoWrapper.SearchRepos(ctx, "text", mTypes.Filter{}, + mTypes.PageInput{Offset: -2, Limit: -2}) So(err, ShouldNotBeNil) }) @@ -1059,7 +1059,7 @@ func TestWrapperErrors(t *testing.T) { err = setBadRepoMeta(dynamoWrapper.Client, repoMetaTablename, "repo") //nolint:contextcheck So(err, ShouldBeNil) - _, _, _, _, err := dynamoWrapper.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{}) + _, _, _, _, err := dynamoWrapper.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) }) @@ -1069,11 +1069,11 @@ func TestWrapperErrors(t *testing.T) { _, _, _, _, err = dynamoWrapper.FilterTags( ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) @@ -1086,11 +1086,11 @@ func TestWrapperErrors(t *testing.T) { _, _, _, _, err = dynamoWrapper.FilterTags( ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) @@ -1105,11 +1105,11 @@ func TestWrapperErrors(t *testing.T) { _, _, _, _, err = dynamoWrapper.FilterTags( ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) @@ -1125,9 +1125,9 @@ func TestWrapperErrors(t *testing.T) { So(err, ShouldBeNil) _, _, _, _, err = dynamoWrapper.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) }) @@ -1138,15 +1138,15 @@ func TestWrapperErrors(t *testing.T) { err := dynamoWrapper.SetRepoReference("repo", "tag1", indexDigest, ispec.MediaTypeImageIndex) //nolint:contextcheck So(err, ShouldBeNil) - err = dynamoWrapper.SetIndexData(indexDigest, repodb.IndexData{ //nolint:contextcheck + err = dynamoWrapper.SetIndexData(indexDigest, mTypes.IndexData{ //nolint:contextcheck IndexBlob: []byte("bad json"), }) So(err, ShouldBeNil) _, _, _, _, err = dynamoWrapper.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) }) @@ -1166,27 +1166,27 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - err = dynamoWrapper.SetIndexData(indexDigest, repodb.IndexData{ //nolint:contextcheck + err = dynamoWrapper.SetIndexData(indexDigest, mTypes.IndexData{ //nolint:contextcheck IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestData(manifestDigestFromIndex1, repodb.ManifestData{ //nolint:contextcheck + err = dynamoWrapper.SetManifestData(manifestDigestFromIndex1, mTypes.ManifestData{ //nolint:contextcheck ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestData(manifestDigestFromIndex2, repodb.ManifestData{ //nolint:contextcheck + err = dynamoWrapper.SetManifestData(manifestDigestFromIndex2, mTypes.ManifestData{ //nolint:contextcheck ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) So(err, ShouldBeNil) _, _, _, _, err = dynamoWrapper.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return false }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return false }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldBeNil) }) @@ -1199,16 +1199,16 @@ func TestWrapperErrors(t *testing.T) { ) So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestData(manifestDigest, repodb.ManifestData{ //nolint:contextcheck + err = dynamoWrapper.SetManifestData(manifestDigest, mTypes.ManifestData{ //nolint:contextcheck ManifestBlob: []byte("{}"), ConfigBlob: []byte("bad blob"), }) So(err, ShouldBeNil) _, _, _, _, err = dynamoWrapper.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) }) @@ -1230,27 +1230,27 @@ func TestWrapperErrors(t *testing.T) { }) So(err, ShouldBeNil) - err = dynamoWrapper.SetIndexData(indexDigest, repodb.IndexData{ //nolint:contextcheck + err = dynamoWrapper.SetIndexData(indexDigest, mTypes.IndexData{ //nolint:contextcheck IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestData(manifestDigestFromIndex1, repodb.ManifestData{ //nolint:contextcheck + err = dynamoWrapper.SetManifestData(manifestDigestFromIndex1, mTypes.ManifestData{ //nolint:contextcheck ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) So(err, ShouldBeNil) - err = dynamoWrapper.SetManifestData(manifestDigestFromIndex2, repodb.ManifestData{ //nolint:contextcheck + err = dynamoWrapper.SetManifestData(manifestDigestFromIndex2, mTypes.ManifestData{ //nolint:contextcheck ManifestBlob: []byte("{}"), ConfigBlob: []byte("bad blob"), }) So(err, ShouldBeNil) _, _, _, _, err = dynamoWrapper.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldNotBeNil) }) @@ -1341,7 +1341,7 @@ func TestWrapperErrors(t *testing.T) { }) Convey("NewDynamoDBWrapper errors", t, func() { - params := dynamo.DBDriverParameters{ //nolint:contextcheck + params := mdynamodb.DBDriverParameters{ //nolint:contextcheck Endpoint: endpoint, Region: region, RepoMetaTablename: "", @@ -1351,13 +1351,13 @@ func TestWrapperErrors(t *testing.T) { APIKeyTablename: apiKeyTablename, VersionTablename: versionTablename, } - client, err := dynamo.GetDynamoClient(params) + client, err := mdynamodb.GetDynamoClient(params) So(err, ShouldBeNil) - _, err = dynamoWrapper.NewDynamoDBWrapper(client, params, log) + _, err = mdynamodb.New(client, params, log) So(err, ShouldNotBeNil) - params = dynamo.DBDriverParameters{ //nolint:contextcheck + params = mdynamodb.DBDriverParameters{ //nolint:contextcheck Endpoint: endpoint, Region: region, RepoMetaTablename: repoMetaTablename, @@ -1367,13 +1367,13 @@ func TestWrapperErrors(t *testing.T) { APIKeyTablename: apiKeyTablename, VersionTablename: versionTablename, } - client, err = dynamo.GetDynamoClient(params) + client, err = mdynamodb.GetDynamoClient(params) So(err, ShouldBeNil) - _, err = dynamoWrapper.NewDynamoDBWrapper(client, params, log) + _, err = mdynamodb.New(client, params, log) So(err, ShouldNotBeNil) - params = dynamo.DBDriverParameters{ //nolint:contextcheck + params = mdynamodb.DBDriverParameters{ //nolint:contextcheck Endpoint: endpoint, Region: region, RepoMetaTablename: repoMetaTablename, @@ -1383,13 +1383,13 @@ func TestWrapperErrors(t *testing.T) { APIKeyTablename: apiKeyTablename, VersionTablename: versionTablename, } - client, err = dynamo.GetDynamoClient(params) + client, err = mdynamodb.GetDynamoClient(params) So(err, ShouldBeNil) - _, err = dynamoWrapper.NewDynamoDBWrapper(client, params, log) + _, err = mdynamodb.New(client, params, log) So(err, ShouldNotBeNil) - params = dynamo.DBDriverParameters{ //nolint:contextcheck + params = mdynamodb.DBDriverParameters{ //nolint:contextcheck Endpoint: endpoint, Region: region, RepoMetaTablename: repoMetaTablename, @@ -1399,13 +1399,13 @@ func TestWrapperErrors(t *testing.T) { APIKeyTablename: apiKeyTablename, VersionTablename: "", } - client, err = dynamo.GetDynamoClient(params) + client, err = mdynamodb.GetDynamoClient(params) So(err, ShouldBeNil) - _, err = dynamoWrapper.NewDynamoDBWrapper(client, params, log) + _, err = mdynamodb.New(client, params, log) So(err, ShouldNotBeNil) - params = dynamo.DBDriverParameters{ //nolint:contextcheck + params = mdynamodb.DBDriverParameters{ //nolint:contextcheck Endpoint: endpoint, Region: region, RepoMetaTablename: repoMetaTablename, @@ -1415,13 +1415,13 @@ func TestWrapperErrors(t *testing.T) { UserDataTablename: userDataTablename, APIKeyTablename: apiKeyTablename, } - client, err = dynamo.GetDynamoClient(params) + client, err = mdynamodb.GetDynamoClient(params) So(err, ShouldBeNil) - _, err = dynamoWrapper.NewDynamoDBWrapper(client, params, log) + _, err = mdynamodb.New(client, params, log) So(err, ShouldBeNil) - params = dynamo.DBDriverParameters{ //nolint:contextcheck + params = mdynamodb.DBDriverParameters{ //nolint:contextcheck Endpoint: endpoint, Region: region, RepoMetaTablename: repoMetaTablename, @@ -1431,13 +1431,13 @@ func TestWrapperErrors(t *testing.T) { UserDataTablename: "", APIKeyTablename: apiKeyTablename, } - client, err = dynamo.GetDynamoClient(params) + client, err = mdynamodb.GetDynamoClient(params) So(err, ShouldBeNil) - _, err = dynamoWrapper.NewDynamoDBWrapper(client, params, log) + _, err = mdynamodb.New(client, params, log) So(err, ShouldNotBeNil) - params = dynamo.DBDriverParameters{ //nolint:contextcheck + params = mdynamodb.DBDriverParameters{ //nolint:contextcheck Endpoint: endpoint, Region: region, RepoMetaTablename: repoMetaTablename, @@ -1447,10 +1447,10 @@ func TestWrapperErrors(t *testing.T) { UserDataTablename: userDataTablename, APIKeyTablename: "", } - client, err = dynamo.GetDynamoClient(params) + client, err = mdynamodb.GetDynamoClient(params) So(err, ShouldBeNil) - _, err = dynamoWrapper.NewDynamoDBWrapper(client, params, log) + _, err = mdynamodb.New(client, params, log) So(err, ShouldNotBeNil) }) } @@ -1580,7 +1580,7 @@ func setVersion(client *dynamodb.Client, versionTablename string, version string return err } -func setRepoMeta(client *dynamodb.Client, repoMetadataTableName string, repoMeta repodb.RepoMetadata) error { +func setRepoMeta(client *dynamodb.Client, repoMetadataTableName string, repoMeta mTypes.RepoMetadata) error { repoAttributeValue, err := attributevalue.Marshal(repoMeta) if err != nil { return err diff --git a/pkg/meta/dynamo/iterator.go b/pkg/meta/dynamodb/iterator.go similarity index 99% rename from pkg/meta/dynamo/iterator.go rename to pkg/meta/dynamodb/iterator.go index 695c2edf..cb257052 100644 --- a/pkg/meta/dynamo/iterator.go +++ b/pkg/meta/dynamodb/iterator.go @@ -1,4 +1,4 @@ -package dynamo +package dynamodb import ( "context" diff --git a/pkg/meta/dynamo/parameters.go b/pkg/meta/dynamodb/parameters.go similarity index 98% rename from pkg/meta/dynamo/parameters.go rename to pkg/meta/dynamodb/parameters.go index a5355799..cd73f2be 100644 --- a/pkg/meta/dynamo/parameters.go +++ b/pkg/meta/dynamodb/parameters.go @@ -1,4 +1,4 @@ -package dynamo +package dynamodb import ( "context" diff --git a/pkg/meta/repodb/repodbfactory/repodb_factory.go b/pkg/meta/meta.go similarity index 80% rename from pkg/meta/repodb/repodbfactory/repodb_factory.go rename to pkg/meta/meta.go index cd270702..2ded9f4d 100644 --- a/pkg/meta/repodb/repodbfactory/repodb_factory.go +++ b/pkg/meta/meta.go @@ -1,4 +1,4 @@ -package repodbfactory +package meta import ( "github.com/aws/aws-sdk-go-v2/service/dynamodb" @@ -7,19 +7,17 @@ import ( "zotregistry.io/zot/errors" "zotregistry.io/zot/pkg/api/config" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/dynamo" - "zotregistry.io/zot/pkg/meta/repodb" - boltdb_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" - dynamodb_wrapper "zotregistry.io/zot/pkg/meta/repodb/dynamodb-wrapper" + "zotregistry.io/zot/pkg/meta/boltdb" + mdynamodb "zotregistry.io/zot/pkg/meta/dynamodb" "zotregistry.io/zot/pkg/meta/signatures" + mTypes "zotregistry.io/zot/pkg/meta/types" ) -func New(storageConfig config.StorageConfig, log log.Logger) (repodb.RepoDB, error) { +func New(storageConfig config.StorageConfig, log log.Logger) (mTypes.MetaDB, error) { if storageConfig.RemoteCache { dynamoParams := getDynamoParams(storageConfig.CacheDriver, log) - client, err := dynamo.GetDynamoClient(dynamoParams) + client, err := mdynamodb.GetDynamoClient(dynamoParams) if err != nil { return nil, err } @@ -27,10 +25,10 @@ func New(storageConfig config.StorageConfig, log log.Logger) (repodb.RepoDB, err return Create("dynamodb", client, dynamoParams, log) //nolint:contextcheck } - params := bolt.DBParameters{} + params := boltdb.DBParameters{} params.RootDir = storageConfig.RootDirectory - driver, err := bolt.GetBoltDriver(params) + driver, err := boltdb.GetBoltDriver(params) if err != nil { return nil, err } @@ -44,7 +42,7 @@ func New(storageConfig config.StorageConfig, log log.Logger) (repodb.RepoDB, err } func Create(dbtype string, dbDriver, parameters interface{}, log log.Logger, //nolint:contextcheck -) (repodb.RepoDB, error, +) (mTypes.MetaDB, error, ) { switch dbtype { case "boltdb": @@ -54,7 +52,7 @@ func Create(dbtype string, dbDriver, parameters interface{}, log log.Logger, //n panic("failed type assertion") } - return boltdb_wrapper.NewBoltDBWrapper(properDriver, log) + return boltdb.New(properDriver, log) } case "dynamodb": { @@ -63,12 +61,12 @@ func Create(dbtype string, dbDriver, parameters interface{}, log log.Logger, //n panic("failed type assertion") } - properParameters, ok := parameters.(dynamo.DBDriverParameters) + properParameters, ok := parameters.(mdynamodb.DBDriverParameters) if !ok { panic("failed type assertion") } - return dynamodb_wrapper.NewDynamoDBWrapper(properDriver, properParameters, log) + return mdynamodb.New(properDriver, properParameters, log) } default: { @@ -77,7 +75,7 @@ func Create(dbtype string, dbDriver, parameters interface{}, log log.Logger, //n } } -func getDynamoParams(cacheDriverConfig map[string]interface{}, log log.Logger) dynamo.DBDriverParameters { +func getDynamoParams(cacheDriverConfig map[string]interface{}, log log.Logger) mdynamodb.DBDriverParameters { allParametersOk := true endpoint, ok := toStringIfOk(cacheDriverConfig, "endpoint", log) @@ -108,7 +106,7 @@ func getDynamoParams(cacheDriverConfig map[string]interface{}, log log.Logger) d panic("dynamo parameters are not specified correctly, can't proceede") } - return dynamo.DBDriverParameters{ + return mdynamodb.DBDriverParameters{ Endpoint: endpoint, Region: region, RepoMetaTablename: repoMetaTablename, diff --git a/pkg/meta/repodb/repodb_test.go b/pkg/meta/meta_test.go similarity index 66% rename from pkg/meta/repodb/repodb_test.go rename to pkg/meta/meta_test.go index 34a22af2..19dbcdff 100644 --- a/pkg/meta/repodb/repodb_test.go +++ b/pkg/meta/meta_test.go @@ -1,4 +1,4 @@ -package repodb_test +package meta_test import ( "context" @@ -12,6 +12,7 @@ import ( "testing" "time" + "github.com/aws/aws-sdk-go-v2/service/dynamodb" guuid "github.com/gofrs/uuid" "github.com/notaryproject/notation-core-go/signature/jws" "github.com/notaryproject/notation-go" @@ -21,14 +22,14 @@ import ( ispec "github.com/opencontainers/image-spec/specs-go/v1" . "github.com/smartystreets/goconvey/convey" + "zotregistry.io/zot/pkg/api/config" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" + "zotregistry.io/zot/pkg/meta" + "zotregistry.io/zot/pkg/meta/boltdb" "zotregistry.io/zot/pkg/meta/common" - "zotregistry.io/zot/pkg/meta/dynamo" - "zotregistry.io/zot/pkg/meta/repodb" - boltdb_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" - dynamodb_wrapper "zotregistry.io/zot/pkg/meta/repodb/dynamodb-wrapper" + mdynamodb "zotregistry.io/zot/pkg/meta/dynamodb" "zotregistry.io/zot/pkg/meta/signatures" + mTypes "zotregistry.io/zot/pkg/meta/types" localCtx "zotregistry.io/zot/pkg/requestcontext" "zotregistry.io/zot/pkg/test" ) @@ -40,22 +41,22 @@ const ( ARM = "arm64" ) -func TestBoltDBWrapper(t *testing.T) { - Convey("BoltDB Wrapper creation", t, func() { - boltDBParams := bolt.DBParameters{} - boltDriver, err := bolt.GetBoltDriver(boltDBParams) +func TestBoltDB(t *testing.T) { + Convey("BoltDB creation", t, func() { + boltDBParams := boltdb.DBParameters{} + boltDriver, err := boltdb.GetBoltDriver(boltDBParams) So(err, ShouldBeNil) log := log.NewLogger("debug", "") - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) - So(repoDB, ShouldNotBeNil) + metaDB, err := boltdb.New(boltDriver, log) + So(metaDB, ShouldNotBeNil) So(err, ShouldBeNil) err = os.Chmod("repo.db", 0o200) So(err, ShouldBeNil) - _, err = bolt.GetBoltDriver(boltDBParams) + _, err = boltdb.GetBoltDriver(boltDBParams) So(err, ShouldNotBeNil) err = os.Chmod("repo.db", 0o600) @@ -65,18 +66,18 @@ func TestBoltDBWrapper(t *testing.T) { }) Convey("BoltDB Wrapper", t, func() { - boltDBParams := bolt.DBParameters{} - boltDriver, err := bolt.GetBoltDriver(boltDBParams) + boltDBParams := boltdb.DBParameters{} + boltDriver, err := boltdb.GetBoltDriver(boltDBParams) So(err, ShouldBeNil) log := log.NewLogger("debug", "") - boltdbWrapper, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) + boltdbWrapper, err := boltdb.New(boltDriver, log) defer os.Remove("repo.db") So(boltdbWrapper, ShouldNotBeNil) So(err, ShouldBeNil) - RunRepoDBTests(t, boltdbWrapper) + RunMetaDBTests(t, boltdbWrapper) }) } @@ -96,7 +97,7 @@ func TestDynamoDBWrapper(t *testing.T) { apiKeyTablename := "ApiKeyTable" + uuid.String() Convey("DynamoDB Wrapper", t, func() { - dynamoDBDriverParams := dynamo.DBDriverParameters{ + dynamoDBDriverParams := mdynamodb.DBDriverParameters{ Endpoint: os.Getenv("DYNAMODBMOCK_ENDPOINT"), RepoMetaTablename: repoMetaTablename, ManifestDataTablename: manifestDataTablename, @@ -107,12 +108,12 @@ func TestDynamoDBWrapper(t *testing.T) { Region: "us-east-2", } - dynamoClient, err := dynamo.GetDynamoClient(dynamoDBDriverParams) + dynamoClient, err := mdynamodb.GetDynamoClient(dynamoDBDriverParams) So(err, ShouldBeNil) log := log.NewLogger("debug", "") - dynamoDriver, err := dynamodb_wrapper.NewDynamoDBWrapper(dynamoClient, dynamoDBDriverParams, log) + dynamoDriver, err := mdynamodb.New(dynamoClient, dynamoDBDriverParams, log) So(dynamoDriver, ShouldNotBeNil) So(err, ShouldBeNil) @@ -129,12 +130,12 @@ func TestDynamoDBWrapper(t *testing.T) { return err } - RunRepoDBTests(t, dynamoDriver, resetDynamoDBTables) + RunMetaDBTests(t, dynamoDriver, resetDynamoDBTables) }) } -func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func() error) { //nolint: thelper - Convey("Test RepoDB Interface implementation", func() { +func RunMetaDBTests(t *testing.T, metaDB mTypes.MetaDB, preparationFuncs ...func() error) { //nolint: thelper + Convey("Test MetaDB Interface implementation", func() { for _, prepFunc := range preparationFuncs { err := prepFunc() So(err, ShouldBeNil) @@ -143,8 +144,8 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func Convey("Test CRUD operations on UserData and API keys", func() { hashKey1 := "id" hashKey2 := "key" - apiKeys := make(map[string]repodb.APIKeyDetails) - apiKeyDetails := repodb.APIKeyDetails{ + apiKeys := make(map[string]mTypes.APIKeyDetails) + apiKeyDetails := mTypes.APIKeyDetails{ Label: "apiKey", Scopes: []string{"repo"}, UUID: hashKey1, @@ -152,7 +153,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func apiKeys[hashKey1] = apiKeyDetails - userProfileSrc := repodb.UserData{ + userProfileSrc := mTypes.UserData{ Groups: []string{"group1", "group2"}, APIKeys: apiKeys, } @@ -165,13 +166,13 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - err := repoDB.AddUserAPIKey(ctx, hashKey1, &apiKeyDetails) + err := metaDB.AddUserAPIKey(ctx, hashKey1, &apiKeyDetails) So(err, ShouldBeNil) - err = repoDB.SetUserData(ctx, userProfileSrc) + err = metaDB.SetUserData(ctx, userProfileSrc) So(err, ShouldBeNil) - userProfile, err := repoDB.GetUserData(ctx) + userProfile, err := metaDB.GetUserData(ctx) So(err, ShouldBeNil) So(userProfile.Groups, ShouldResemble, userProfileSrc.Groups) So(userProfile.APIKeys, ShouldContainKey, hashKey1) @@ -180,74 +181,74 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func lastUsed := userProfile.APIKeys[hashKey1].LastUsed - err = repoDB.UpdateUserAPIKeyLastUsed(ctx, hashKey1) + err = metaDB.UpdateUserAPIKeyLastUsed(ctx, hashKey1) So(err, ShouldBeNil) - userProfile, err = repoDB.GetUserData(ctx) + userProfile, err = metaDB.GetUserData(ctx) So(err, ShouldBeNil) So(userProfile.APIKeys[hashKey1].LastUsed, ShouldHappenAfter, lastUsed) - userGroups, err := repoDB.GetUserGroups(ctx) + userGroups, err := metaDB.GetUserGroups(ctx) So(err, ShouldBeNil) So(userGroups, ShouldResemble, userProfileSrc.Groups) apiKeyDetails.UUID = hashKey2 - err = repoDB.AddUserAPIKey(ctx, hashKey2, &apiKeyDetails) + err = metaDB.AddUserAPIKey(ctx, hashKey2, &apiKeyDetails) So(err, ShouldBeNil) - userProfile, err = repoDB.GetUserData(ctx) + userProfile, err = metaDB.GetUserData(ctx) So(err, ShouldBeNil) So(userProfile.Groups, ShouldResemble, userProfileSrc.Groups) So(userProfile.APIKeys, ShouldContainKey, hashKey2) So(userProfile.APIKeys[hashKey2].Label, ShouldEqual, apiKeyDetails.Label) So(userProfile.APIKeys[hashKey2].Scopes, ShouldResemble, apiKeyDetails.Scopes) - email, err := repoDB.GetUserAPIKeyInfo(hashKey2) + email, err := metaDB.GetUserAPIKeyInfo(hashKey2) So(err, ShouldBeNil) So(email, ShouldEqual, "test") - err = repoDB.DeleteUserAPIKey(ctx, hashKey1) + err = metaDB.DeleteUserAPIKey(ctx, hashKey1) So(err, ShouldBeNil) - userProfile, err = repoDB.GetUserData(ctx) + userProfile, err = metaDB.GetUserData(ctx) So(err, ShouldBeNil) So(len(userProfile.APIKeys), ShouldEqual, 1) So(userProfile.APIKeys, ShouldNotContainKey, hashKey1) - err = repoDB.DeleteUserAPIKey(ctx, hashKey2) + err = metaDB.DeleteUserAPIKey(ctx, hashKey2) So(err, ShouldBeNil) - userProfile, err = repoDB.GetUserData(ctx) + userProfile, err = metaDB.GetUserData(ctx) So(err, ShouldBeNil) So(len(userProfile.APIKeys), ShouldEqual, 0) So(userProfile.APIKeys, ShouldNotContainKey, hashKey2) // delete non existent api key - err = repoDB.DeleteUserAPIKey(ctx, hashKey2) + err = metaDB.DeleteUserAPIKey(ctx, hashKey2) So(err, ShouldBeNil) - err = repoDB.DeleteUserData(ctx) + err = metaDB.DeleteUserData(ctx) So(err, ShouldBeNil) - email, err = repoDB.GetUserAPIKeyInfo(hashKey2) + email, err = metaDB.GetUserAPIKeyInfo(hashKey2) So(err, ShouldNotBeNil) So(email, ShouldBeEmpty) - email, err = repoDB.GetUserAPIKeyInfo(hashKey1) + email, err = metaDB.GetUserAPIKeyInfo(hashKey1) So(err, ShouldNotBeNil) So(email, ShouldBeEmpty) - _, err = repoDB.GetUserData(ctx) + _, err = metaDB.GetUserData(ctx) So(err, ShouldNotBeNil) - userGroups, err = repoDB.GetUserGroups(ctx) + userGroups, err = metaDB.GetUserGroups(ctx) So(err, ShouldNotBeNil) So(userGroups, ShouldBeEmpty) - err = repoDB.SetUserGroups(ctx, userProfileSrc.Groups) + err = metaDB.SetUserGroups(ctx, userProfileSrc.Groups) So(err, ShouldBeNil) - userGroups, err = repoDB.GetUserGroups(ctx) + userGroups, err = metaDB.GetUserGroups(ctx) So(err, ShouldBeNil) So(userGroups, ShouldResemble, userProfileSrc.Groups) }) @@ -258,20 +259,20 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest := godigest.FromBytes(manifestBlob) - err = repoDB.SetManifestData(manifestDigest, repodb.ManifestData{ + err = metaDB.SetManifestData(manifestDigest, mTypes.ManifestData{ ManifestBlob: manifestBlob, ConfigBlob: configBlob, }) So(err, ShouldBeNil) - mm, err := repoDB.GetManifestData(manifestDigest) + mm, err := metaDB.GetManifestData(manifestDigest) So(err, ShouldBeNil) So(mm.ManifestBlob, ShouldResemble, manifestBlob) So(mm.ConfigBlob, ShouldResemble, configBlob) }) Convey("Test GetManifestMeta fails", func() { - _, err := repoDB.GetManifestMeta("repo", "bad digest") + _, err := metaDB.GetManifestMeta("repo", "bad digest") So(err, ShouldNotBeNil) }) @@ -282,11 +283,11 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestBlob = []byte("manifestBlob") configBlob = []byte("configBlob") - signatures = repodb.ManifestSignatures{ - "digest1": []repodb.SignatureInfo{ + signatures = mTypes.ManifestSignatures{ + "digest1": []mTypes.SignatureInfo{ { SignatureManifestDigest: "signatureDigest", - LayersInfo: []repodb.LayerInfo{ + LayersInfo: []mTypes.LayerInfo{ { LayerDigest: "layerDigest", LayerContent: []byte("layerContent"), @@ -297,7 +298,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func } ) - err := repoDB.SetManifestMeta("repo", manifestDigest, repodb.ManifestMetadata{ + err := metaDB.SetManifestMeta("repo", manifestDigest, mTypes.ManifestMetadata{ ManifestBlob: manifestBlob, ConfigBlob: configBlob, DownloadCount: 10, @@ -305,7 +306,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) So(err, ShouldBeNil) - manifestMeta, err := repoDB.GetManifestMeta("repo", manifestDigest) + manifestMeta, err := metaDB.GetManifestMeta("repo", manifestDigest) So(err, ShouldBeNil) So(manifestMeta.ManifestBlob, ShouldResemble, manifestBlob) @@ -328,62 +329,62 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func ) Convey("Setting a good repo", func() { - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo1) + repoMeta, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Name, ShouldResemble, repo1) So(repoMeta.Tags[tag1].Digest, ShouldEqual, manifestDigest1.String()) - err = repoDB.SetRepoMeta(repo2, repodb.RepoMetadata{Tags: map[string]repodb.Descriptor{ + err = metaDB.SetRepoMeta(repo2, mTypes.RepoMetadata{Tags: map[string]mTypes.Descriptor{ tag2: { Digest: manifestDigest2.String(), }, }}) So(err, ShouldBeNil) - repoMeta, err = repoDB.GetRepoMeta(repo2) + repoMeta, err = metaDB.GetRepoMeta(repo2) So(err, ShouldBeNil) So(repoMeta.Name, ShouldResemble, repo2) So(repoMeta.Tags[tag2].Digest, ShouldEqual, manifestDigest2.String()) }) Convey("Setting a good repo using a digest", func() { - _, err := repoDB.GetRepoMeta(repo1) + _, err := metaDB.GetRepoMeta(repo1) So(err, ShouldNotBeNil) digest := godigest.FromString("digest") - err = repoDB.SetRepoReference(repo1, digest.String(), digest, + err = metaDB.SetRepoReference(repo1, digest.String(), digest, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo1) + repoMeta, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Name, ShouldResemble, repo1) }) Convey("Set multiple tags for repo", func() { - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo1) + repoMeta, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Tags[tag1].Digest, ShouldEqual, manifestDigest1.String()) So(repoMeta.Tags[tag2].Digest, ShouldEqual, manifestDigest2.String()) }) Convey("Set multiple repos", func() { - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - repoMeta1, err := repoDB.GetRepoMeta(repo1) + repoMeta1, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) - repoMeta2, err := repoDB.GetRepoMeta(repo2) + repoMeta2, err := metaDB.GetRepoMeta(repo2) So(err, ShouldBeNil) So(repoMeta1.Tags[tag1].Digest, ShouldResemble, manifestDigest1.String()) @@ -392,17 +393,17 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func Convey("Setting a repo with invalid fields", func() { Convey("Repo name is not valid", func() { - err := repoDB.SetRepoReference("", tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference("", tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldNotBeNil) }) Convey("Tag is not valid", func() { - err := repoDB.SetRepoReference(repo1, "", manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, "", manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldNotBeNil) }) Convey("Manifest Digest is not valid", func() { - err := repoDB.SetRepoReference(repo1, tag1, "", ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, "", ispec.MediaTypeImageManifest) So(err, ShouldNotBeNil) }) }) @@ -421,24 +422,24 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func InexistentRepo = "InexistentRepo" ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) Convey("Get a existent repo", func() { - repoMeta1, err := repoDB.GetRepoMeta(repo1) + repoMeta1, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta1.Tags[tag1].Digest, ShouldResemble, manifestDigest1.String()) - repoMeta2, err := repoDB.GetRepoMeta(repo2) + repoMeta2, err := metaDB.GetRepoMeta(repo2) So(err, ShouldBeNil) So(repoMeta2.Tags[tag2].Digest, ShouldResemble, manifestDigest2.String()) }) Convey("Get a repo that doesn't exist", func() { - repoMeta, err := repoDB.GetRepoMeta(InexistentRepo) + repoMeta, err := metaDB.GetRepoMeta(InexistentRepo) So(err, ShouldNotBeNil) So(repoMeta, ShouldBeZeroValue) }) @@ -453,20 +454,20 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest2 = godigest.FromString("fake-manifest2") ) - err := repoDB.SetRepoReference(repo, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) Convey("Delete from repo a tag", func() { - _, err := repoDB.GetRepoMeta(repo) + _, err := metaDB.GetRepoMeta(repo) So(err, ShouldBeNil) - err = repoDB.DeleteRepoTag(repo, tag1) + err = metaDB.DeleteRepoTag(repo, tag1) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo) + repoMeta, err := metaDB.GetRepoMeta(repo) So(err, ShouldBeNil) _, ok := repoMeta.Tags[tag1] @@ -475,10 +476,10 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("Delete inexistent tag from repo", func() { - err := repoDB.DeleteRepoTag(repo, "InexistentTag") + err := metaDB.DeleteRepoTag(repo, "InexistentTag") So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo) + repoMeta, err := metaDB.GetRepoMeta(repo) So(err, ShouldBeNil) So(repoMeta.Tags[tag1].Digest, ShouldResemble, manifestDigest1.String()) @@ -486,10 +487,10 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("Delete from inexistent repo", func() { - err := repoDB.DeleteRepoTag("InexistentRepo", "InexistentTag") + err := metaDB.DeleteRepoTag("InexistentRepo", "InexistentTag") So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo) + repoMeta, err := metaDB.GetRepoMeta(repo) So(err, ShouldBeNil) So(repoMeta.Tags[tag1].Digest, ShouldResemble, manifestDigest1.String()) @@ -507,25 +508,25 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest2 = godigest.FromString("fake-manifest2") ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) Convey("Get all Repometa", func() { - repoMetaSlice, err := repoDB.GetMultipleRepoMeta(context.TODO(), func(repoMeta repodb.RepoMetadata) bool { + repoMetaSlice, err := metaDB.GetMultipleRepoMeta(context.TODO(), func(repoMeta mTypes.RepoMetadata) bool { return true - }, repodb.PageInput{}) + }, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repoMetaSlice), ShouldEqual, 2) }) Convey("Get repo with a tag", func() { - repoMetaSlice, err := repoDB.GetMultipleRepoMeta(context.TODO(), func(repoMeta repodb.RepoMetadata) bool { + repoMetaSlice, err := metaDB.GetMultipleRepoMeta(context.TODO(), func(repoMeta mTypes.RepoMetadata) bool { for tag := range repoMeta.Tags { if tag == tag1 { return true @@ -533,14 +534,14 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func } return false - }, repodb.PageInput{}) + }, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repoMetaSlice), ShouldEqual, 1) So(repoMetaSlice[0].Tags[tag1].Digest == manifestDigest1.String(), ShouldBeTrue) }) Convey("Wrong page input", func() { - repoMetaSlice, err := repoDB.GetMultipleRepoMeta(context.TODO(), func(repoMeta repodb.RepoMetadata) bool { + repoMetaSlice, err := metaDB.GetMultipleRepoMeta(context.TODO(), func(repoMeta mTypes.RepoMetadata) bool { for tag := range repoMeta.Tags { if tag == tag1 { return true @@ -548,7 +549,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func } return false - }, repodb.PageInput{Limit: -1, Offset: -1}) + }, mTypes.PageInput{Limit: -1, Offset: -1}) So(err, ShouldNotBeNil) So(len(repoMetaSlice), ShouldEqual, 0) @@ -562,27 +563,27 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest1 = godigest.FromString("fake-manifest1") ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.IncrementRepoStars(repo1) + err = metaDB.IncrementRepoStars(repo1) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo1) + repoMeta, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 1) - err = repoDB.IncrementRepoStars(repo1) + err = metaDB.IncrementRepoStars(repo1) So(err, ShouldBeNil) - repoMeta, err = repoDB.GetRepoMeta(repo1) + repoMeta, err = metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 2) - err = repoDB.IncrementRepoStars(repo1) + err = metaDB.IncrementRepoStars(repo1) So(err, ShouldBeNil) - repoMeta, err = repoDB.GetRepoMeta(repo1) + repoMeta, err = metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 3) }) @@ -594,31 +595,31 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest1 = godigest.FromString("fake-manifest1") ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.IncrementRepoStars(repo1) + err = metaDB.IncrementRepoStars(repo1) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo1) + repoMeta, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 1) - err = repoDB.DecrementRepoStars(repo1) + err = metaDB.DecrementRepoStars(repo1) So(err, ShouldBeNil) - repoMeta, err = repoDB.GetRepoMeta(repo1) + repoMeta, err = metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 0) - err = repoDB.DecrementRepoStars(repo1) + err = metaDB.DecrementRepoStars(repo1) So(err, ShouldBeNil) - repoMeta, err = repoDB.GetRepoMeta(repo1) + repoMeta, err = metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 0) - _, err = repoDB.GetRepoMeta("badRepo") + _, err = metaDB.GetRepoMeta("badRepo") So(err, ShouldNotBeNil) }) @@ -629,26 +630,26 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest1 = godigest.FromString("fake-manifest1") ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.IncrementRepoStars(repo1) + err = metaDB.IncrementRepoStars(repo1) So(err, ShouldBeNil) - stars, err := repoDB.GetRepoStars(repo1) + stars, err := metaDB.GetRepoStars(repo1) So(err, ShouldBeNil) So(stars, ShouldEqual, 1) - err = repoDB.IncrementRepoStars(repo1) + err = metaDB.IncrementRepoStars(repo1) So(err, ShouldBeNil) - err = repoDB.IncrementRepoStars(repo1) + err = metaDB.IncrementRepoStars(repo1) So(err, ShouldBeNil) - stars, err = repoDB.GetRepoStars(repo1) + stars, err = metaDB.GetRepoStars(repo1) So(err, ShouldBeNil) So(stars, ShouldEqual, 3) - _, err = repoDB.GetRepoStars("badRepo") + _, err = metaDB.GetRepoStars("badRepo") So(err, ShouldNotBeNil) }) @@ -695,202 +696,202 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func // anonymous ctx3 := context.WithValue(context.Background(), authzCtxKey, acCtx3) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - starCount, err := repoDB.GetRepoStars(repo1) + starCount, err := metaDB.GetRepoStars(repo1) So(err, ShouldBeNil) So(starCount, ShouldEqual, 0) - starCount, err = repoDB.GetRepoStars(repo2) + starCount, err = metaDB.GetRepoStars(repo2) So(err, ShouldBeNil) So(starCount, ShouldEqual, 0) - repos, err := repoDB.GetStarredRepos(ctx1) + repos, err := metaDB.GetStarredRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) - repos, err = repoDB.GetStarredRepos(ctx2) + repos, err = metaDB.GetStarredRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) - repos, err = repoDB.GetStarredRepos(ctx3) + repos, err = metaDB.GetStarredRepos(ctx3) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) // User 1 bookmarks repo 1, User 2 has no stars - toggleState, err := repoDB.ToggleStarRepo(ctx1, repo1) + toggleState, err := metaDB.ToggleStarRepo(ctx1, repo1) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Added) + So(toggleState, ShouldEqual, mTypes.Added) - repoMeta, err := repoDB.GetRepoMeta(repo1) + repoMeta, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 1) - starCount, err = repoDB.GetRepoStars(repo1) + starCount, err = metaDB.GetRepoStars(repo1) So(err, ShouldBeNil) So(starCount, ShouldEqual, 1) - repos, err = repoDB.GetStarredRepos(ctx1) + repos, err = metaDB.GetStarredRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo1) - repos, err = repoDB.GetStarredRepos(ctx2) + repos, err = metaDB.GetStarredRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) - repos, err = repoDB.GetStarredRepos(ctx3) + repos, err = metaDB.GetStarredRepos(ctx3) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) // User 1 and User 2 star only repo 1 - toggleState, err = repoDB.ToggleStarRepo(ctx2, repo1) + toggleState, err = metaDB.ToggleStarRepo(ctx2, repo1) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Added) + So(toggleState, ShouldEqual, mTypes.Added) - repoMeta, err = repoDB.GetRepoMeta(repo1) + repoMeta, err = metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 2) - starCount, err = repoDB.GetRepoStars(repo1) + starCount, err = metaDB.GetRepoStars(repo1) So(err, ShouldBeNil) So(starCount, ShouldEqual, 2) - repos, err = repoDB.GetStarredRepos(ctx1) + repos, err = metaDB.GetStarredRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo1) - repos, err = repoDB.GetStarredRepos(ctx2) + repos, err = metaDB.GetStarredRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo1) - repos, err = repoDB.GetStarredRepos(ctx3) + repos, err = metaDB.GetStarredRepos(ctx3) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) // User 1 stars repos 1 and 2, and User 2 stars only repo 1 - toggleState, err = repoDB.ToggleStarRepo(ctx1, repo2) + toggleState, err = metaDB.ToggleStarRepo(ctx1, repo2) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Added) + So(toggleState, ShouldEqual, mTypes.Added) - repoMeta, err = repoDB.GetRepoMeta(repo2) + repoMeta, err = metaDB.GetRepoMeta(repo2) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 1) - starCount, err = repoDB.GetRepoStars(repo2) + starCount, err = metaDB.GetRepoStars(repo2) So(err, ShouldBeNil) So(starCount, ShouldEqual, 1) - repos, err = repoDB.GetStarredRepos(ctx1) + repos, err = metaDB.GetStarredRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(repos, ShouldContain, repo1) So(repos, ShouldContain, repo2) - repos, err = repoDB.GetStarredRepos(ctx2) + repos, err = metaDB.GetStarredRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo1) - repos, err = repoDB.GetStarredRepos(ctx3) + repos, err = metaDB.GetStarredRepos(ctx3) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) // User 1 stars only repo 2, and User 2 stars only repo 1 - toggleState, err = repoDB.ToggleStarRepo(ctx1, repo1) + toggleState, err = metaDB.ToggleStarRepo(ctx1, repo1) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Removed) + So(toggleState, ShouldEqual, mTypes.Removed) - repoMeta, err = repoDB.GetRepoMeta(repo1) + repoMeta, err = metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 1) - starCount, err = repoDB.GetRepoStars(repo1) + starCount, err = metaDB.GetRepoStars(repo1) So(err, ShouldBeNil) So(starCount, ShouldEqual, 1) - repos, err = repoDB.GetStarredRepos(ctx1) + repos, err = metaDB.GetStarredRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo2) - repos, err = repoDB.GetStarredRepos(ctx2) + repos, err = metaDB.GetStarredRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo1) - repos, err = repoDB.GetStarredRepos(ctx3) + repos, err = metaDB.GetStarredRepos(ctx3) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) // User 1 stars both repos 1 and 2, and User 2 removes all stars - toggleState, err = repoDB.ToggleStarRepo(ctx1, repo1) + toggleState, err = metaDB.ToggleStarRepo(ctx1, repo1) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Added) + So(toggleState, ShouldEqual, mTypes.Added) - toggleState, err = repoDB.ToggleStarRepo(ctx2, repo1) + toggleState, err = metaDB.ToggleStarRepo(ctx2, repo1) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Removed) + So(toggleState, ShouldEqual, mTypes.Removed) - repoMeta, err = repoDB.GetRepoMeta(repo1) + repoMeta, err = metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 1) - repoMeta, err = repoDB.GetRepoMeta(repo2) + repoMeta, err = metaDB.GetRepoMeta(repo2) So(err, ShouldBeNil) So(repoMeta.Stars, ShouldEqual, 1) - starCount, err = repoDB.GetRepoStars(repo1) + starCount, err = metaDB.GetRepoStars(repo1) So(err, ShouldBeNil) So(starCount, ShouldEqual, 1) - starCount, err = repoDB.GetRepoStars(repo2) + starCount, err = metaDB.GetRepoStars(repo2) So(err, ShouldBeNil) So(starCount, ShouldEqual, 1) - repos, err = repoDB.GetStarredRepos(ctx1) + repos, err = metaDB.GetStarredRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(repos, ShouldContain, repo1) So(repos, ShouldContain, repo2) - repos, err = repoDB.GetStarredRepos(ctx2) + repos, err = metaDB.GetStarredRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) - repos, err = repoDB.GetStarredRepos(ctx3) + repos, err = metaDB.GetStarredRepos(ctx3) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) // Anonyous user attempts to toggle a star - toggleState, err = repoDB.ToggleStarRepo(ctx3, repo1) + toggleState, err = metaDB.ToggleStarRepo(ctx3, repo1) So(err, ShouldNotBeNil) - So(toggleState, ShouldEqual, repodb.NotChanged) + So(toggleState, ShouldEqual, mTypes.NotChanged) - starCount, err = repoDB.GetRepoStars(repo1) + starCount, err = metaDB.GetRepoStars(repo1) So(err, ShouldBeNil) So(starCount, ShouldEqual, 1) - repos, err = repoDB.GetStarredRepos(ctx3) + repos, err = metaDB.GetStarredRepos(ctx3) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) // User 1 stars just repo 1 - toggleState, err = repoDB.ToggleStarRepo(ctx1, repo2) + toggleState, err = metaDB.ToggleStarRepo(ctx1, repo2) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Removed) + So(toggleState, ShouldEqual, mTypes.Removed) - starCount, err = repoDB.GetRepoStars(repo2) + starCount, err = metaDB.GetRepoStars(repo2) So(err, ShouldBeNil) So(starCount, ShouldEqual, 0) - repos, err = repoDB.GetStarredRepos(ctx3) + repos, err = metaDB.GetStarredRepos(ctx3) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) }) @@ -938,109 +939,109 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func // anonymous ctx3 := context.WithValue(context.Background(), authzCtxKey, acCtx3) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - repos, err := repoDB.GetBookmarkedRepos(ctx1) + repos, err := metaDB.GetBookmarkedRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) - repos, err = repoDB.GetBookmarkedRepos(ctx2) + repos, err = metaDB.GetBookmarkedRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) // anonymous cannot use bookmarks - repos, err = repoDB.GetBookmarkedRepos(ctx3) + repos, err = metaDB.GetBookmarkedRepos(ctx3) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) - toggleState, err := repoDB.ToggleBookmarkRepo(ctx3, repo1) + toggleState, err := metaDB.ToggleBookmarkRepo(ctx3, repo1) So(err, ShouldNotBeNil) - So(toggleState, ShouldEqual, repodb.NotChanged) + So(toggleState, ShouldEqual, mTypes.NotChanged) - repos, err = repoDB.GetBookmarkedRepos(ctx3) + repos, err = metaDB.GetBookmarkedRepos(ctx3) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) // User 1 bookmarks repo 1, User 2 has no bookmarks - toggleState, err = repoDB.ToggleBookmarkRepo(ctx1, repo1) + toggleState, err = metaDB.ToggleBookmarkRepo(ctx1, repo1) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Added) + So(toggleState, ShouldEqual, mTypes.Added) - repos, err = repoDB.GetBookmarkedRepos(ctx1) + repos, err = metaDB.GetBookmarkedRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo1) - repos, err = repoDB.GetBookmarkedRepos(ctx2) + repos, err = metaDB.GetBookmarkedRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) // User 1 and User 2 bookmark only repo 1 - toggleState, err = repoDB.ToggleBookmarkRepo(ctx2, repo1) + toggleState, err = metaDB.ToggleBookmarkRepo(ctx2, repo1) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Added) + So(toggleState, ShouldEqual, mTypes.Added) - repos, err = repoDB.GetBookmarkedRepos(ctx1) + repos, err = metaDB.GetBookmarkedRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo1) - repos, err = repoDB.GetBookmarkedRepos(ctx2) + repos, err = metaDB.GetBookmarkedRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo1) // User 1 bookmarks repos 1 and 2, and User 2 bookmarks only repo 1 - toggleState, err = repoDB.ToggleBookmarkRepo(ctx1, repo2) + toggleState, err = metaDB.ToggleBookmarkRepo(ctx1, repo2) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Added) + So(toggleState, ShouldEqual, mTypes.Added) - repos, err = repoDB.GetBookmarkedRepos(ctx1) + repos, err = metaDB.GetBookmarkedRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(repos, ShouldContain, repo1) So(repos, ShouldContain, repo2) - repos, err = repoDB.GetBookmarkedRepos(ctx2) + repos, err = metaDB.GetBookmarkedRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo1) // User 1 bookmarks only repo 2, and User 2 bookmarks only repo 1 - toggleState, err = repoDB.ToggleBookmarkRepo(ctx1, repo1) + toggleState, err = metaDB.ToggleBookmarkRepo(ctx1, repo1) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Removed) + So(toggleState, ShouldEqual, mTypes.Removed) - repos, err = repoDB.GetBookmarkedRepos(ctx1) + repos, err = metaDB.GetBookmarkedRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo2) - repos, err = repoDB.GetBookmarkedRepos(ctx2) + repos, err = metaDB.GetBookmarkedRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos, ShouldContain, repo1) // User 1 bookmarks both repos 1 and 2, and User 2 removes all bookmarks - toggleState, err = repoDB.ToggleBookmarkRepo(ctx1, repo1) + toggleState, err = metaDB.ToggleBookmarkRepo(ctx1, repo1) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Added) + So(toggleState, ShouldEqual, mTypes.Added) - toggleState, err = repoDB.ToggleBookmarkRepo(ctx2, repo1) + toggleState, err = metaDB.ToggleBookmarkRepo(ctx2, repo1) So(err, ShouldBeNil) - So(toggleState, ShouldEqual, repodb.Removed) + So(toggleState, ShouldEqual, mTypes.Removed) - repos, err = repoDB.GetBookmarkedRepos(ctx1) + repos, err = metaDB.GetBookmarkedRepos(ctx1) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(repos, ShouldContain, repo1) So(repos, ShouldContain, repo2) - repos, err = repoDB.GetBookmarkedRepos(ctx2) + repos, err = metaDB.GetBookmarkedRepos(ctx2) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) }) @@ -1056,32 +1057,32 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest := godigest.FromBytes(manifestBlob) - err = repoDB.SetRepoReference(repo1, tag1, manifestDigest, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag1, manifestDigest, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest, repodb.ManifestMetadata{ + err = metaDB.SetManifestMeta(repo1, manifestDigest, mTypes.ManifestMetadata{ ManifestBlob: manifestBlob, ConfigBlob: configBlob, }) So(err, ShouldBeNil) - err = repoDB.IncrementImageDownloads(repo1, tag1) + err = metaDB.IncrementImageDownloads(repo1, tag1) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo1) + repoMeta, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Statistics[manifestDigest.String()].DownloadCount, ShouldEqual, 1) - err = repoDB.IncrementImageDownloads(repo1, tag1) + err = metaDB.IncrementImageDownloads(repo1, tag1) So(err, ShouldBeNil) - repoMeta, err = repoDB.GetRepoMeta(repo1) + repoMeta, err = metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Statistics[manifestDigest.String()].DownloadCount, ShouldEqual, 2) - _, err = repoDB.GetManifestMeta(repo1, "badManiestDigest") + _, err = metaDB.GetManifestMeta(repo1, "badManiestDigest") So(err, ShouldNotBeNil) }) @@ -1092,24 +1093,24 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest1 = godigest.FromString("fake-manifest1") ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, repodb.ManifestMetadata{}) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, mTypes.ManifestMetadata{}) So(err, ShouldBeNil) - err = repoDB.AddManifestSignature(repo1, manifestDigest1, repodb.SignatureMetadata{ + err = metaDB.AddManifestSignature(repo1, manifestDigest1, mTypes.SignatureMetadata{ SignatureType: "cosign", SignatureDigest: "digest", }) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo1) + repoMeta, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Signatures[manifestDigest1.String()]["cosign"][0].SignatureManifestDigest, ShouldResemble, "digest") - _, err = repoDB.GetManifestMeta(repo1, "badDigest") + _, err = metaDB.GetManifestMeta(repo1, "badDigest") So(err, ShouldNotBeNil) }) @@ -1121,28 +1122,28 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest1 = godigest.FromString("dig") ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, repodb.ManifestMetadata{ + err = metaDB.SetManifestMeta(repo1, manifestDigest1, mTypes.ManifestMetadata{ ManifestBlob: []byte("Bad Manifest"), ConfigBlob: []byte("Bad Manifest"), }) So(err, ShouldBeNil) - layerInfo := repodb.LayerInfo{LayerDigest: "", LayerContent: []byte{}, SignatureKey: ""} + layerInfo := mTypes.LayerInfo{LayerDigest: "", LayerContent: []byte{}, SignatureKey: ""} - err = repoDB.AddManifestSignature(repo1, manifestDigest1, repodb.SignatureMetadata{ + err = metaDB.AddManifestSignature(repo1, manifestDigest1, mTypes.SignatureMetadata{ SignatureType: "cosign", SignatureDigest: string(manifestDigest1), - LayersInfo: []repodb.LayerInfo{layerInfo}, + LayersInfo: []mTypes.LayerInfo{layerInfo}, }) So(err, ShouldBeNil) - err = repoDB.UpdateSignaturesValidity(repo1, manifestDigest1) + err = metaDB.UpdateSignaturesValidity(repo1, manifestDigest1) So(err, ShouldBeNil) - repoData, err := repoDB.GetRepoMeta(repo1) + repoData, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoData.Signatures[string(manifestDigest1)]["cosign"][0].LayersInfo[0].Signer, ShouldBeEmpty) @@ -1157,10 +1158,10 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func repo := "repo" tag := "0.0.1" - err := repoDB.SetRepoReference(repo, tag, manifestDigest, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo, tag, manifestDigest, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo, manifestDigest, repodb.ManifestMetadata{ + err = metaDB.SetManifestMeta(repo, manifestDigest, mTypes.ManifestMetadata{ ManifestBlob: manifestContent, ConfigBlob: []byte("configContent"), }) @@ -1213,15 +1214,15 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func sig, _, err := newSigner.Sign(ctx, descToSign, signOpts) So(err, ShouldBeNil) - layerInfo := repodb.LayerInfo{ + layerInfo := mTypes.LayerInfo{ LayerDigest: string(godigest.FromBytes(sig)), LayerContent: sig, SignatureKey: mediaType, } - err = repoDB.AddManifestSignature(repo, manifestDigest, repodb.SignatureMetadata{ + err = metaDB.AddManifestSignature(repo, manifestDigest, mTypes.SignatureMetadata{ SignatureType: "notation", SignatureDigest: string(godigest.FromString("signature digest")), - LayersInfo: []repodb.LayerInfo{layerInfo}, + LayersInfo: []mTypes.LayerInfo{layerInfo}, }) So(err, ShouldBeNil) @@ -1265,10 +1266,10 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func path.Join(tdir, truststore, "notation-sign-test.crt")) So(err, ShouldBeNil) - err = repoDB.UpdateSignaturesValidity(repo, manifestDigest) //nolint:contextcheck + err = metaDB.UpdateSignaturesValidity(repo, manifestDigest) //nolint:contextcheck So(err, ShouldBeNil) - repoData, err := repoDB.GetRepoMeta(repo) + repoData, err := metaDB.GetRepoMeta(repo) So(err, ShouldBeNil) So(repoData.Signatures[string(manifestDigest)]["notation"][0].LayersInfo[0].Signer, ShouldNotBeEmpty) @@ -1284,24 +1285,24 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest1 = godigest.FromString("fake-manifest1") ) - err := repoDB.AddManifestSignature(repo1, manifestDigest1, repodb.SignatureMetadata{ + err := metaDB.AddManifestSignature(repo1, manifestDigest1, mTypes.SignatureMetadata{ SignatureType: "cosign", SignatureDigest: "digest", }) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestData(manifestDigest1, repodb.ManifestData{}) + err = metaDB.SetManifestData(manifestDigest1, mTypes.ManifestData{}) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo1) + repoMeta, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Signatures[manifestDigest1.String()]["cosign"][0].SignatureManifestDigest, ShouldResemble, "digest") - _, err = repoDB.GetManifestMeta(repo1, "badDigest") + _, err = metaDB.GetManifestMeta(repo1, "badDigest") So(err, ShouldNotBeNil) }) @@ -1312,34 +1313,34 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest1 = godigest.FromString("fake-manifest1") ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestData(manifestDigest1, repodb.ManifestData{}) + err = metaDB.SetManifestData(manifestDigest1, mTypes.ManifestData{}) So(err, ShouldBeNil) - err = repoDB.AddManifestSignature(repo1, manifestDigest1, repodb.SignatureMetadata{ + err = metaDB.AddManifestSignature(repo1, manifestDigest1, mTypes.SignatureMetadata{ SignatureType: "cosign", SignatureDigest: "digest", }) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo1) + repoMeta, err := metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Signatures[manifestDigest1.String()]["cosign"][0].SignatureManifestDigest, ShouldResemble, "digest") - err = repoDB.DeleteSignature(repo1, manifestDigest1, repodb.SignatureMetadata{ + err = metaDB.DeleteSignature(repo1, manifestDigest1, mTypes.SignatureMetadata{ SignatureType: "cosign", SignatureDigest: "digest", }) So(err, ShouldBeNil) - repoMeta, err = repoDB.GetRepoMeta(repo1) + repoMeta, err = metaDB.GetRepoMeta(repo1) So(err, ShouldBeNil) So(repoMeta.Signatures[manifestDigest1.String()]["cosign"], ShouldBeEmpty) - err = repoDB.DeleteSignature(repo1, "badDigest", repodb.SignatureMetadata{ + err = metaDB.DeleteSignature(repo1, "badDigest", mTypes.SignatureMetadata{ SignatureType: "cosign", SignatureDigest: "digest", }) @@ -1367,27 +1368,27 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func emptyConfigBlob, err := json.Marshal(emptyConfig) So(err, ShouldBeNil) - emptyRepoMeta := repodb.ManifestMetadata{ + emptyRepoMeta := mTypes.ManifestMetadata{ ManifestBlob: emptyManifestBlob, ConfigBlob: emptyConfigBlob, } Convey("Search all repos", func() { - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag3, manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag3, manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest2, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest2, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest3, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest3, emptyRepoMeta) So(err, ShouldBeNil) - repos, manifestMetaMap, _, _, err := repoDB.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + repos, manifestMetaMap, _, _, err := metaDB.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(len(manifestMetaMap), ShouldEqual, 3) @@ -1397,13 +1398,13 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("Search a repo by name", func() { - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - repos, manifestMetaMap, _, _, err := repoDB.SearchRepos(ctx, repo1, repodb.Filter{}, repodb.PageInput{}) + repos, manifestMetaMap, _, _, err := metaDB.SearchRepos(ctx, repo1, mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(len(manifestMetaMap), ShouldEqual, 1) @@ -1411,35 +1412,35 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("Search non-existing repo by name", func() { - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - repos, manifestMetaMap, _, _, err := repoDB.SearchRepos(ctx, "RepoThatDoesntExist", repodb.Filter{}, - repodb.PageInput{}) + repos, manifestMetaMap, _, _, err := metaDB.SearchRepos(ctx, "RepoThatDoesntExist", mTypes.Filter{}, + mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) So(len(manifestMetaMap), ShouldEqual, 0) }) Convey("Search with partial match", func() { - err := repoDB.SetRepoReference("alpine", tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference("alpine", tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("pine", tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("pine", tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("golang", tag3, manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("golang", tag3, manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta("alpine", manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta("alpine", manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta("pine", manifestDigest2, emptyRepoMeta) + err = metaDB.SetManifestMeta("pine", manifestDigest2, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta("golang", manifestDigest3, emptyRepoMeta) + err = metaDB.SetManifestMeta("golang", manifestDigest3, emptyRepoMeta) So(err, ShouldBeNil) - repos, manifestMetaMap, _, _, err := repoDB.SearchRepos(ctx, "pine", repodb.Filter{}, repodb.PageInput{}) + repos, manifestMetaMap, _, _, err := metaDB.SearchRepos(ctx, "pine", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(manifestMetaMap, ShouldContainKey, manifestDigest1.String()) @@ -1448,39 +1449,39 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("Search multiple repos that share manifests", func() { - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag2, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag2, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo3, tag3, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo3, tag3, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo2, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo2, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo3, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo3, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - repos, manifestMetaMap, _, _, err := repoDB.SearchRepos(ctx, "", repodb.Filter{}, repodb.PageInput{}) + repos, manifestMetaMap, _, _, err := metaDB.SearchRepos(ctx, "", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 3) So(len(manifestMetaMap), ShouldEqual, 1) }) Convey("Search repos with access control", func() { - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag2, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag2, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo3, tag3, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo3, tag3, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo2, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo2, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo3, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo3, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) acCtx := localCtx.AccessControlContext{ @@ -1493,7 +1494,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func authzCtxKey := localCtx.GetContextKey() ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - repos, _, _, _, err := repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{}) + repos, _, _, _, err := metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) for _, k := range repos { @@ -1522,102 +1523,102 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func configBlob, err := json.Marshal(configContent) So(err, ShouldBeNil) - manifestMeta := repodb.ManifestMetadata{ + manifestMeta := mTypes.ManifestMetadata{ ManifestBlob: emptyManifestBlob, ConfigBlob: configBlob, DownloadCount: i, } repoName := "repo" + strconv.Itoa(i) - err = repoDB.SetRepoReference(repoName, tag1, manifestDigest, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repoName, tag1, manifestDigest, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repoName, manifestDigest, manifestMeta) + err = metaDB.SetManifestMeta(repoName, manifestDigest, manifestMeta) So(err, ShouldBeNil) repoNameBuilder.Reset() } - repos, _, _, _, err := repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{}) + repos, _, _, _, err := metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, reposCount) - repos, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 20, - SortBy: repodb.AlphabeticAsc, + SortBy: mTypes.AlphabeticAsc, }) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 20) - repos, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 0, - SortBy: repodb.AlphabeticAsc, + SortBy: mTypes.AlphabeticAsc, }) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos[0].Name, ShouldResemble, "repo0") - repos, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 1, - SortBy: repodb.AlphabeticAsc, + SortBy: mTypes.AlphabeticAsc, }) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos[0].Name, ShouldResemble, "repo1") - repos, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 49, - SortBy: repodb.AlphabeticAsc, + SortBy: mTypes.AlphabeticAsc, }) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos[0].Name, ShouldResemble, "repo9") - repos, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 49, - SortBy: repodb.AlphabeticDsc, + SortBy: mTypes.AlphabeticDsc, }) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos[0].Name, ShouldResemble, "repo0") - repos, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 0, - SortBy: repodb.AlphabeticDsc, + SortBy: mTypes.AlphabeticDsc, }) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos[0].Name, ShouldResemble, "repo9") // sort by downloads - repos, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 0, - SortBy: repodb.Downloads, + SortBy: mTypes.Downloads, }) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos[0].Name, ShouldResemble, "repo49") // sort by last update - repos, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 0, - SortBy: repodb.UpdateTime, + SortBy: mTypes.UpdateTime, }) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos[0].Name, ShouldResemble, "repo49") - repos, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 100, - SortBy: repodb.UpdateTime, + SortBy: mTypes.UpdateTime, }) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) @@ -1625,31 +1626,31 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("Search with wrong pagination input", func() { - _, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + _, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 100, - SortBy: repodb.UpdateTime, + SortBy: mTypes.UpdateTime, }) So(err, ShouldBeNil) - _, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + _, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: -1, Offset: 100, - SortBy: repodb.UpdateTime, + SortBy: mTypes.UpdateTime, }) So(err, ShouldNotBeNil) - _, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + _, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: -1, - SortBy: repodb.UpdateTime, + SortBy: mTypes.UpdateTime, }) So(err, ShouldNotBeNil) - _, _, _, _, err = repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{ + _, _, _, _, err = metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 1, - SortBy: repodb.SortCriteria("InvalidSortingCriteria"), + SortBy: mTypes.SortCriteria("InvalidSortingCriteria"), }) So(err, ShouldNotBeNil) }) @@ -1665,7 +1666,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest3 = godigest.FromString("manifestDigest3") ) - err := repoDB.SetManifestData(manifestDigest1, repodb.ManifestData{ + err := metaDB.SetManifestData(manifestDigest1, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) @@ -1681,12 +1682,12 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func confBlob, err := json.Marshal(config) So(err, ShouldBeNil) - err = repoDB.SetManifestData(manifestDigest2, repodb.ManifestData{ + err = metaDB.SetManifestData(manifestDigest2, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: confBlob, }) So(err, ShouldBeNil) - err = repoDB.SetManifestData(manifestDigest3, repodb.ManifestData{ + err = metaDB.SetManifestData(manifestDigest3, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) @@ -1707,18 +1708,18 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func indexBlob, err := json.Marshal(indexContent) So(err, ShouldBeNil) - err = repoDB.SetIndexData(indexDigest, repodb.IndexData{ + err = metaDB.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo", tag4, indexDigest, ispec.MediaTypeImageIndex) + err = metaDB.SetRepoReference("repo", tag4, indexDigest, ispec.MediaTypeImageIndex) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo", tag5, manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo", tag5, manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - repos, manifestMetaMap, indexDataMap, _, err := repoDB.SearchRepos(ctx, "repo", repodb.Filter{}, repodb.PageInput{}) + repos, manifestMetaMap, indexDataMap, _, err := metaDB.SearchRepos(ctx, "repo", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) @@ -1750,35 +1751,36 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func emptyConfigBlob, err := json.Marshal(emptyConfig) So(err, ShouldBeNil) - emptyRepoMeta := repodb.ManifestMetadata{ + emptyRepoMeta := mTypes.ManifestMetadata{ ManifestBlob: emptyManifestBlob, ConfigBlob: emptyConfigBlob, } - err = repoDB.SetRepoReference(repo1, "0.0.1", manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, "0.0.1", manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, "0.0.2", manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, "0.0.2", manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, "0.1.0", manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, "0.1.0", manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, "1.0.0", manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, "1.0.0", manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, "1.0.1", manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, "1.0.1", manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, "0.0.1", manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, "0.0.1", manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest2, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest2, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest3, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest3, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo2, manifestDigest3, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo2, manifestDigest3, emptyRepoMeta) So(err, ShouldBeNil) Convey("With exact match", func() { - repos, manifestMetaMap, _, _, err := repoDB.SearchTags(ctx, "repo1:0.0.1", repodb.Filter{}, repodb.PageInput{}) + repos, manifestMetaMap, _, _, err := metaDB.SearchTags(ctx, "repo1:0.0.1", mTypes.Filter{}, + mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(len(repos[0].Tags), ShouldEqual, 1) @@ -1787,14 +1789,15 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("With partial repo path", func() { - repos, manifestMetaMap, _, _, err := repoDB.SearchTags(ctx, "repo:0.0.1", repodb.Filter{}, repodb.PageInput{}) + repos, manifestMetaMap, _, _, err := metaDB.SearchTags(ctx, "repo:0.0.1", mTypes.Filter{}, + mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) So(len(manifestMetaMap), ShouldEqual, 0) }) Convey("With partial tag", func() { - repos, manifestMetaMap, _, _, err := repoDB.SearchTags(ctx, "repo1:0.0", repodb.Filter{}, repodb.PageInput{}) + repos, manifestMetaMap, _, _, err := metaDB.SearchTags(ctx, "repo1:0.0", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(len(repos[0].Tags), ShouldEqual, 2) @@ -1803,7 +1806,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func So(manifestMetaMap, ShouldContainKey, manifestDigest1.String()) So(manifestMetaMap, ShouldContainKey, manifestDigest3.String()) - repos, manifestMetaMap, _, _, err = repoDB.SearchTags(ctx, "repo1:0.", repodb.Filter{}, repodb.PageInput{}) + repos, manifestMetaMap, _, _, err = metaDB.SearchTags(ctx, "repo1:0.", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(len(repos[0].Tags), ShouldEqual, 3) @@ -1816,7 +1819,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("With bad query", func() { - repos, manifestMetaMap, _, _, err := repoDB.SearchTags(ctx, "repo:0.0.1:test", repodb.Filter{}, repodb.PageInput{}) + repos, manifestMetaMap, _, _, err := metaDB.SearchTags(ctx, "repo:0.0.1:test", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldNotBeNil) So(len(repos), ShouldEqual, 0) So(len(manifestMetaMap), ShouldEqual, 0) @@ -1833,22 +1836,22 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func tag3 = "0.0.3" ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag2, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag2, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo3, tag3, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo3, tag3, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) config := ispec.Image{} configBlob, err := json.Marshal(config) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, repodb.ManifestMetadata{ConfigBlob: configBlob}) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, mTypes.ManifestMetadata{ConfigBlob: configBlob}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo2, manifestDigest1, repodb.ManifestMetadata{ConfigBlob: configBlob}) + err = metaDB.SetManifestMeta(repo2, manifestDigest1, mTypes.ManifestMetadata{ConfigBlob: configBlob}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo3, manifestDigest1, repodb.ManifestMetadata{ConfigBlob: configBlob}) + err = metaDB.SetManifestMeta(repo3, manifestDigest1, mTypes.ManifestMetadata{ConfigBlob: configBlob}) So(err, ShouldBeNil) acCtx := localCtx.AccessControlContext{ @@ -1861,18 +1864,18 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func authzCtxKey := localCtx.GetContextKey() ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - repos, _, _, _, err := repoDB.SearchTags(ctx, "repo1:", repodb.Filter{}, repodb.PageInput{}) + repos, _, _, _, err := metaDB.SearchTags(ctx, "repo1:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos[0].Name, ShouldResemble, repo1) - repos, _, _, _, err = repoDB.SearchTags(ctx, "repo2:", repodb.Filter{}, repodb.PageInput{}) + repos, _, _, _, err = metaDB.SearchTags(ctx, "repo2:", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(repos, ShouldBeEmpty) }) Convey("With wrong pagination input", func() { - repos, _, _, _, err := repoDB.SearchTags(ctx, "repo2:", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err := metaDB.SearchTags(ctx, "repo2:", mTypes.Filter{}, mTypes.PageInput{ Limit: -1, }) So(err, ShouldNotBeNil) @@ -1893,7 +1896,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest4 = godigest.FromString("manifestDigest4") ) - err := repoDB.SetManifestData(manifestDigest1, repodb.ManifestData{ + err := metaDB.SetManifestData(manifestDigest1, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) @@ -1909,18 +1912,18 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func confBlob, err := json.Marshal(config) So(err, ShouldBeNil) - err = repoDB.SetManifestData(manifestDigest2, repodb.ManifestData{ + err = metaDB.SetManifestData(manifestDigest2, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: confBlob, }) So(err, ShouldBeNil) - err = repoDB.SetManifestData(manifestDigest3, repodb.ManifestData{ + err = metaDB.SetManifestData(manifestDigest3, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) So(err, ShouldBeNil) - err = repoDB.SetManifestData(manifestDigest4, repodb.ManifestData{ + err = metaDB.SetManifestData(manifestDigest4, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) @@ -1934,22 +1937,22 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func ) So(err, ShouldBeNil) - err = repoDB.SetIndexData(indexDigest, repodb.IndexData{ + err = metaDB.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo", tag4, indexDigest, ispec.MediaTypeImageIndex) + err = metaDB.SetRepoReference("repo", tag4, indexDigest, ispec.MediaTypeImageIndex) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo", tag5, manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo", tag5, manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo", tag6, manifestDigest4, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo", tag6, manifestDigest4, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - repos, manifestMetaMap, indexDataMap, _, err := repoDB.SearchTags(ctx, "repo:0.0", repodb.Filter{}, - repodb.PageInput{}) + repos, manifestMetaMap, indexDataMap, _, err := metaDB.SearchTags(ctx, "repo:0.0", mTypes.Filter{}, + mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) @@ -1976,28 +1979,28 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func tag5 = "0.0.5" ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag2, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag2, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag3, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag3, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag4, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag4, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag5, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag5, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) config := ispec.Image{} configBlob, err := json.Marshal(config) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, repodb.ManifestMetadata{ConfigBlob: configBlob}) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, mTypes.ManifestMetadata{ConfigBlob: configBlob}) So(err, ShouldBeNil) - repos, _, _, _, err := repoDB.SearchTags(context.TODO(), "repo1:", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err := metaDB.SearchTags(context.TODO(), "repo1:", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 0, - SortBy: repodb.AlphabeticAsc, + SortBy: mTypes.AlphabeticAsc, }) So(err, ShouldBeNil) @@ -2007,10 +2010,10 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func keys = append(keys, k) } - repos, _, _, _, err = repoDB.SearchTags(context.TODO(), "repo1:", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchTags(context.TODO(), "repo1:", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 1, - SortBy: repodb.AlphabeticAsc, + SortBy: mTypes.AlphabeticAsc, }) So(err, ShouldBeNil) @@ -2019,10 +2022,10 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func keys = append(keys, k) } - repos, _, _, _, err = repoDB.SearchTags(context.TODO(), "repo1:", repodb.Filter{}, repodb.PageInput{ + repos, _, _, _, err = metaDB.SearchTags(context.TODO(), "repo1:", mTypes.Filter{}, mTypes.PageInput{ Limit: 1, Offset: 2, - SortBy: repodb.AlphabeticAsc, + SortBy: mTypes.AlphabeticAsc, }) So(err, ShouldBeNil) @@ -2049,15 +2052,15 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestDigest3 = godigest.FromString("fake-manifest3") ) - err := repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo3, tag1, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo3, tag1, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo4, tag1, manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo4, tag1, manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) config1 := ispec.Image{ @@ -2082,62 +2085,62 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func configBlob3, err := json.Marshal(config3) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, repodb.ManifestMetadata{ConfigBlob: configBlob1}) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, mTypes.ManifestMetadata{ConfigBlob: configBlob1}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest2, repodb.ManifestMetadata{ConfigBlob: configBlob2}) + err = metaDB.SetManifestMeta(repo1, manifestDigest2, mTypes.ManifestMetadata{ConfigBlob: configBlob2}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo2, manifestDigest1, repodb.ManifestMetadata{ConfigBlob: configBlob1}) + err = metaDB.SetManifestMeta(repo2, manifestDigest1, mTypes.ManifestMetadata{ConfigBlob: configBlob1}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo3, manifestDigest2, repodb.ManifestMetadata{ConfigBlob: configBlob2}) + err = metaDB.SetManifestMeta(repo3, manifestDigest2, mTypes.ManifestMetadata{ConfigBlob: configBlob2}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo4, manifestDigest3, repodb.ManifestMetadata{ConfigBlob: configBlob3}) + err = metaDB.SetManifestMeta(repo4, manifestDigest3, mTypes.ManifestMetadata{ConfigBlob: configBlob3}) So(err, ShouldBeNil) opSys := LINUX arch := "" - filter := repodb.Filter{ + filter := mTypes.Filter{ Os: []*string{&opSys}, } - repos, _, _, _, err := repoDB.SearchRepos(context.TODO(), "", filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + repos, _, _, _, err := metaDB.SearchRepos(context.TODO(), "", filter, + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(repos[0].Name, ShouldResemble, "repo1") So(repos[1].Name, ShouldResemble, "repo2") opSys = WINDOWS - filter = repodb.Filter{ + filter = mTypes.Filter{ Os: []*string{&opSys}, } - repos, _, _, _, err = repoDB.SearchRepos(context.TODO(), "repo", filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + repos, _, _, _, err = metaDB.SearchRepos(context.TODO(), "repo", filter, + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(repos[0].Name, ShouldResemble, "repo1") So(repos[1].Name, ShouldResemble, "repo3") opSys = "wrong" - filter = repodb.Filter{ + filter = mTypes.Filter{ Os: []*string{&opSys}, } - repos, _, _, _, err = repoDB.SearchRepos(context.TODO(), "repo", filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + repos, _, _, _, err = metaDB.SearchRepos(context.TODO(), "repo", filter, + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) opSys = LINUX arch = AMD - filter = repodb.Filter{ + filter = mTypes.Filter{ Os: []*string{&opSys}, Arch: []*string{&arch}, } - repos, _, _, _, err = repoDB.SearchRepos(context.TODO(), "repo", filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + repos, _, _, _, err = metaDB.SearchRepos(context.TODO(), "repo", filter, + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(repos[0].Name, ShouldResemble, "repo1") @@ -2145,12 +2148,12 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func opSys = WINDOWS arch = AMD - filter = repodb.Filter{ + filter = mTypes.Filter{ Os: []*string{&opSys}, Arch: []*string{&arch}, } - repos, _, _, _, err = repoDB.SearchRepos(context.TODO(), "repo", filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + repos, _, _, _, err = metaDB.SearchRepos(context.TODO(), "repo", filter, + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) }) @@ -2173,7 +2176,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestFromIndexDigest2 = godigest.FromString("fake-manifestFromIndexDigest2") ) - err := repoDB.SetRepoReference(repo1, tag3, indexDigest, ispec.MediaTypeImageIndex) + err := metaDB.SetRepoReference(repo1, tag3, indexDigest, ispec.MediaTypeImageIndex) So(err, ShouldBeNil) indexBlob, err := test.GetIndexBlobWithManifests( @@ -2184,20 +2187,20 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func ) So(err, ShouldBeNil) - err = repoDB.SetIndexData(indexDigest, repodb.IndexData{ + err = metaDB.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo3, tag1, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo3, tag1, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo4, tag1, manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo4, tag1, manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) config1 := ispec.Image{ @@ -2222,49 +2225,49 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func configBlob3, err := json.Marshal(config3) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, repodb.ManifestMetadata{ConfigBlob: configBlob1}) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, mTypes.ManifestMetadata{ConfigBlob: configBlob1}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest2, repodb.ManifestMetadata{ConfigBlob: configBlob2}) + err = metaDB.SetManifestMeta(repo1, manifestDigest2, mTypes.ManifestMetadata{ConfigBlob: configBlob2}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo2, manifestDigest1, repodb.ManifestMetadata{ConfigBlob: configBlob1}) + err = metaDB.SetManifestMeta(repo2, manifestDigest1, mTypes.ManifestMetadata{ConfigBlob: configBlob1}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo3, manifestDigest2, repodb.ManifestMetadata{ConfigBlob: configBlob2}) + err = metaDB.SetManifestMeta(repo3, manifestDigest2, mTypes.ManifestMetadata{ConfigBlob: configBlob2}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo4, manifestDigest3, repodb.ManifestMetadata{ConfigBlob: configBlob3}) + err = metaDB.SetManifestMeta(repo4, manifestDigest3, mTypes.ManifestMetadata{ConfigBlob: configBlob3}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestFromIndexDigest1, - repodb.ManifestMetadata{ConfigBlob: []byte("{}")}) + err = metaDB.SetManifestMeta(repo1, manifestFromIndexDigest1, + mTypes.ManifestMetadata{ConfigBlob: []byte("{}")}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestFromIndexDigest2, - repodb.ManifestMetadata{ConfigBlob: []byte("{}")}) + err = metaDB.SetManifestMeta(repo1, manifestFromIndexDigest2, + mTypes.ManifestMetadata{ConfigBlob: []byte("{}")}) So(err, ShouldBeNil) opSys := LINUX arch := AMD - filter := repodb.Filter{ + filter := mTypes.Filter{ Os: []*string{&opSys}, Arch: []*string{&arch}, } - repos, _, _, _, err := repoDB.SearchTags(context.TODO(), "repo1:", filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + repos, _, _, _, err := metaDB.SearchTags(context.TODO(), "repo1:", filter, + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(repos[0].Tags, ShouldContainKey, tag1) opSys = LINUX arch = "badArch" - filter = repodb.Filter{ + filter = mTypes.Filter{ Os: []*string{&opSys}, Arch: []*string{&arch}, } - repos, _, _, _, err = repoDB.SearchTags(context.TODO(), "repo1:", filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + repos, _, _, _, err = metaDB.SearchTags(context.TODO(), "repo1:", filter, + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) }) @@ -2291,17 +2294,17 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func emptyConfigBlob, err := json.Marshal(emptyConfig) So(err, ShouldBeNil) - emptyManifestMeta := repodb.ManifestMetadata{ + emptyManifestMeta := mTypes.ManifestMetadata{ ManifestBlob: emptyManifestBlob, ConfigBlob: emptyConfigBlob, } - emptyManifestData := repodb.ManifestData{ + emptyManifestData := mTypes.ManifestData{ ManifestBlob: emptyManifestBlob, ConfigBlob: emptyConfigBlob, } - err = repoDB.SetRepoReference(repo1, "2.0.0", indexDigest, ispec.MediaTypeImageIndex) + err = metaDB.SetRepoReference(repo1, "2.0.0", indexDigest, ispec.MediaTypeImageIndex) So(err, ShouldBeNil) indexBlob, err := test.GetIndexBlobWithManifests([]godigest.Digest{ @@ -2310,46 +2313,46 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) So(err, ShouldBeNil) - err = repoDB.SetIndexData(indexDigest, repodb.IndexData{ + err = metaDB.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, "0.0.1", manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, "0.0.1", manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, "0.0.2", manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, "0.0.2", manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, "0.1.0", manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, "0.1.0", manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, "1.0.0", manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, "1.0.0", manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, "1.0.1", manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, "1.0.1", manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, "0.0.1", manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, "0.0.1", manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, emptyManifestMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, emptyManifestMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest2, emptyManifestMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest2, emptyManifestMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest3, emptyManifestMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest3, emptyManifestMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo2, manifestDigest3, emptyManifestMeta) + err = metaDB.SetManifestMeta(repo2, manifestDigest3, emptyManifestMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestData(manifestFromIndexDigest1, emptyManifestData) + err = metaDB.SetManifestData(manifestFromIndexDigest1, emptyManifestData) So(err, ShouldBeNil) - err = repoDB.SetManifestData(manifestFromIndexDigest2, emptyManifestData) + err = metaDB.SetManifestData(manifestFromIndexDigest2, emptyManifestData) So(err, ShouldBeNil) Convey("Return all tags", func() { - repos, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.FilterTags( + repos, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.FilterTags( ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{Limit: 10, Offset: 0, SortBy: repodb.AlphabeticAsc}, + mTypes.Filter{}, + mTypes.PageInput{Limit: 10, Offset: 0, SortBy: mTypes.AlphabeticAsc}, ) So(err, ShouldBeNil) @@ -2376,13 +2379,13 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("Return all tags in a specific repo", func() { - repos, manifestMetaMap, indexDataMap, pageInfo, err := repoDB.FilterTags( + repos, manifestMetaMap, indexDataMap, pageInfo, err := metaDB.FilterTags( ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return repoMeta.Name == repo1 }, - repodb.Filter{}, - repodb.PageInput{Limit: 10, Offset: 0, SortBy: repodb.AlphabeticAsc}, + mTypes.Filter{}, + mTypes.PageInput{Limit: 10, Offset: 0, SortBy: mTypes.AlphabeticAsc}, ) So(err, ShouldBeNil) @@ -2406,13 +2409,13 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("Filter everything out", func() { - repos, manifestMetaMap, _, pageInfo, err := repoDB.FilterTags( + repos, manifestMetaMap, _, pageInfo, err := metaDB.FilterTags( ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return false }, - repodb.Filter{}, - repodb.PageInput{Limit: 10, Offset: 0, SortBy: repodb.AlphabeticAsc}, + mTypes.Filter{}, + mTypes.PageInput{Limit: 10, Offset: 0, SortBy: mTypes.AlphabeticAsc}, ) So(err, ShouldBeNil) @@ -2434,13 +2437,13 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func authzCtxKey := localCtx.GetContextKey() ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) - repos, manifestMetaMap, _, pageInfo, err := repoDB.FilterTags( + repos, manifestMetaMap, _, pageInfo, err := metaDB.FilterTags( ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{Limit: 10, Offset: 0, SortBy: repodb.AlphabeticAsc}, + mTypes.Filter{}, + mTypes.PageInput{Limit: 10, Offset: 0, SortBy: mTypes.AlphabeticAsc}, ) So(err, ShouldBeNil) @@ -2454,13 +2457,13 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) Convey("With wrong pagination input", func() { - repos, _, _, _, err := repoDB.FilterTags( + repos, _, _, _, err := metaDB.FilterTags( ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{Limit: -1}, + mTypes.Filter{}, + mTypes.PageInput{Limit: -1}, ) So(err, ShouldNotBeNil) So(repos, ShouldBeEmpty) @@ -2486,7 +2489,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestFromIndexDigest3 = godigest.FromString("fake-manifestFromIndexDigest3") ) - err := repoDB.SetRepoReference(repo1, tag3, indexDigest, ispec.MediaTypeImageIndex) + err := metaDB.SetRepoReference(repo1, tag3, indexDigest, ispec.MediaTypeImageIndex) So(err, ShouldBeNil) indexBlob, err := test.GetIndexBlobWithManifests( @@ -2498,20 +2501,20 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func ) So(err, ShouldBeNil) - err = repoDB.SetIndexData(indexDigest, repodb.IndexData{ + err = metaDB.SetIndexData(indexDigest, mTypes.IndexData{ IndexBlob: indexBlob, }) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo3, tag1, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo3, tag1, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo4, tag1, manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo4, tag1, manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) config1 := ispec.Image{ @@ -2545,45 +2548,45 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func configBlob4, err := json.Marshal(config4) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, repodb.ManifestMetadata{ConfigBlob: configBlob1}) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, mTypes.ManifestMetadata{ConfigBlob: configBlob1}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest2, repodb.ManifestMetadata{ConfigBlob: configBlob2}) + err = metaDB.SetManifestMeta(repo1, manifestDigest2, mTypes.ManifestMetadata{ConfigBlob: configBlob2}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo2, manifestDigest1, repodb.ManifestMetadata{ConfigBlob: configBlob1}) + err = metaDB.SetManifestMeta(repo2, manifestDigest1, mTypes.ManifestMetadata{ConfigBlob: configBlob1}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo3, manifestDigest2, repodb.ManifestMetadata{ConfigBlob: configBlob2}) + err = metaDB.SetManifestMeta(repo3, manifestDigest2, mTypes.ManifestMetadata{ConfigBlob: configBlob2}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo4, manifestDigest3, repodb.ManifestMetadata{ConfigBlob: configBlob4}) + err = metaDB.SetManifestMeta(repo4, manifestDigest3, mTypes.ManifestMetadata{ConfigBlob: configBlob4}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestFromIndexDigest1, - repodb.ManifestMetadata{ConfigBlob: configBlob1}) + err = metaDB.SetManifestMeta(repo1, manifestFromIndexDigest1, + mTypes.ManifestMetadata{ConfigBlob: configBlob1}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestFromIndexDigest2, - repodb.ManifestMetadata{ConfigBlob: configBlob2}) + err = metaDB.SetManifestMeta(repo1, manifestFromIndexDigest2, + mTypes.ManifestMetadata{ConfigBlob: configBlob2}) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestFromIndexDigest3, - repodb.ManifestMetadata{ConfigBlob: configBlob3}) + err = metaDB.SetManifestMeta(repo1, manifestFromIndexDigest3, + mTypes.ManifestMetadata{ConfigBlob: configBlob3}) So(err, ShouldBeNil) opSys := LINUX arch := AMD - filter := repodb.Filter{ + filter := mTypes.Filter{ Os: []*string{&opSys}, Arch: []*string{&arch}, } - repos, _, _, _, err := repoDB.FilterTags(context.TODO(), - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + repos, _, _, _, err := metaDB.FilterTags(context.TODO(), + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(len(repos[0].Tags), ShouldEqual, 2) @@ -2593,15 +2596,15 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func So(repos[1].Tags, ShouldContainKey, tag1) opSys = LINUX - filter = repodb.Filter{ + filter = mTypes.Filter{ Os: []*string{&opSys}, } - repos, _, _, _, err = repoDB.FilterTags(context.TODO(), - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + repos, _, _, _, err = metaDB.FilterTags(context.TODO(), + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 3) So(len(repos[0].Tags), ShouldEqual, 3) @@ -2614,30 +2617,30 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func So(repos[1].Tags, ShouldContainKey, tag1) opSys = WINDOWS - filter = repodb.Filter{ + filter = mTypes.Filter{ Os: []*string{&opSys}, } - repos, _, _, _, err = repoDB.FilterTags(context.TODO(), - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + repos, _, _, _, err = metaDB.FilterTags(context.TODO(), + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 1) So(len(repos[0].Tags), ShouldEqual, 1) So(repos[0].Tags, ShouldContainKey, tag3) arch = AMD - filter = repodb.Filter{ + filter = mTypes.Filter{ Arch: []*string{&arch}, } - repos, _, _, _, err = repoDB.FilterTags(context.TODO(), - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + repos, _, _, _, err = metaDB.FilterTags(context.TODO(), + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 2) So(len(repos[0].Tags), ShouldEqual, 2) @@ -2646,12 +2649,12 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func So(len(repos[1].Tags), ShouldEqual, 1) So(repos[1].Tags, ShouldContainKey, tag1) - repos, _, _, _, err = repoDB.FilterTags(context.TODO(), - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + repos, _, _, _, err = metaDB.FilterTags(context.TODO(), + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + mTypes.Filter{}, + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 4) So(len(repos[0].Tags), ShouldEqual, 3) @@ -2667,16 +2670,16 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func opSys = LINUX arch = "badArch" - filter = repodb.Filter{ + filter = mTypes.Filter{ Os: []*string{&opSys}, Arch: []*string{&arch}, } - repos, _, _, _, err = repoDB.FilterTags(context.TODO(), - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { + repos, _, _, _, err = metaDB.FilterTags(context.TODO(), + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, filter, - repodb.PageInput{SortBy: repodb.AlphabeticAsc}) + mTypes.PageInput{SortBy: mTypes.AlphabeticAsc}) So(err, ShouldBeNil) So(len(repos), ShouldEqual, 0) }) @@ -2691,14 +2694,14 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func indexData, err := multiArch.IndexData() So(err, ShouldBeNil) - err = repoDB.SetIndexData(indexDigest, indexData) + err = metaDB.SetIndexData(indexDigest, indexData) So(err, ShouldBeNil) - result, err := repoDB.GetIndexData(indexDigest) + result, err := metaDB.GetIndexData(indexDigest) So(err, ShouldBeNil) So(result, ShouldResemble, indexData) - _, err = repoDB.GetIndexData(godigest.FromString("inexistent")) + _, err = metaDB.GetIndexData(godigest.FromString("inexistent")) So(err, ShouldNotBeNil) }) @@ -2715,15 +2718,15 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func configBlob, err := json.Marshal(image.Config) So(err, ShouldBeNil) - manifestData := repodb.ManifestData{ + manifestData := mTypes.ManifestData{ ManifestBlob: manifestBlob, ConfigBlob: configBlob, } - err = repoDB.SetManifestData(referredDigest, manifestData) + err = metaDB.SetManifestData(referredDigest, manifestData) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo", "tag", referredDigest, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference("repo", "tag", referredDigest, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) // ------- Add Artifact 1 @@ -2737,7 +2740,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func artifactDigest1, err := artifact1.Digest() So(err, ShouldBeNil) - err = repoDB.SetReferrer("repo", referredDigest, repodb.ReferrerInfo{ + err = metaDB.SetReferrer("repo", referredDigest, mTypes.ReferrerInfo{ Digest: artifactDigest1.String(), MediaType: ispec.MediaTypeImageManifest, }) @@ -2754,7 +2757,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func artifactDigest2, err := artifact2.Digest() So(err, ShouldBeNil) - err = repoDB.SetReferrer("repo", referredDigest, repodb.ReferrerInfo{ + err = metaDB.SetReferrer("repo", referredDigest, mTypes.ReferrerInfo{ Digest: artifactDigest2.String(), MediaType: ispec.MediaTypeImageManifest, }) @@ -2762,13 +2765,13 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func // ------ GetReferrers - referrers, err := repoDB.GetReferrersInfo("repo", referredDigest, nil) + referrers, err := metaDB.GetReferrersInfo("repo", referredDigest, nil) So(len(referrers), ShouldEqual, 2) - So(referrers, ShouldContain, repodb.ReferrerInfo{ + So(referrers, ShouldContain, mTypes.ReferrerInfo{ Digest: artifactDigest1.String(), MediaType: ispec.MediaTypeImageManifest, }) - So(referrers, ShouldContain, repodb.ReferrerInfo{ + So(referrers, ShouldContain, mTypes.ReferrerInfo{ Digest: artifactDigest2.String(), MediaType: ispec.MediaTypeImageManifest, }) @@ -2776,57 +2779,57 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func // ------ DeleteReferrers - err = repoDB.DeleteReferrer("repo", referredDigest, artifactDigest1) + err = metaDB.DeleteReferrer("repo", referredDigest, artifactDigest1) So(err, ShouldBeNil) - err = repoDB.DeleteReferrer("repo", referredDigest, artifactDigest2) + err = metaDB.DeleteReferrer("repo", referredDigest, artifactDigest2) So(err, ShouldBeNil) - referrers, err = repoDB.GetReferrersInfo("repo", referredDigest, nil) + referrers, err = metaDB.GetReferrersInfo("repo", referredDigest, nil) So(err, ShouldBeNil) So(len(referrers), ShouldEqual, 0) }) Convey("Test Referrers on empty Repo", func() { - repoMeta, err := repoDB.GetRepoMeta("repo") + repoMeta, err := metaDB.GetRepoMeta("repo") So(err, ShouldNotBeNil) - So(repoMeta, ShouldResemble, repodb.RepoMetadata{}) + So(repoMeta, ShouldResemble, mTypes.RepoMetadata{}) referredDigest := godigest.FromString("referredDigest") referrerDigest := godigest.FromString("referrerDigest") - err = repoDB.SetReferrer("repo", referredDigest, repodb.ReferrerInfo{ + err = metaDB.SetReferrer("repo", referredDigest, mTypes.ReferrerInfo{ Digest: referrerDigest.String(), MediaType: ispec.MediaTypeImageManifest, }) So(err, ShouldBeNil) - repoMeta, err = repoDB.GetRepoMeta("repo") + repoMeta, err = metaDB.GetRepoMeta("repo") So(err, ShouldBeNil) So(repoMeta.Referrers[referredDigest.String()][0].Digest, ShouldResemble, referrerDigest.String()) }) Convey("Test Referrers add same one twice", func() { - repoMeta, err := repoDB.GetRepoMeta("repo") + repoMeta, err := metaDB.GetRepoMeta("repo") So(err, ShouldNotBeNil) - So(repoMeta, ShouldResemble, repodb.RepoMetadata{}) + So(repoMeta, ShouldResemble, mTypes.RepoMetadata{}) referredDigest := godigest.FromString("referredDigest") referrerDigest := godigest.FromString("referrerDigest") - err = repoDB.SetReferrer("repo", referredDigest, repodb.ReferrerInfo{ + err = metaDB.SetReferrer("repo", referredDigest, mTypes.ReferrerInfo{ Digest: referrerDigest.String(), MediaType: ispec.MediaTypeImageManifest, }) So(err, ShouldBeNil) - err = repoDB.SetReferrer("repo", referredDigest, repodb.ReferrerInfo{ + err = metaDB.SetReferrer("repo", referredDigest, mTypes.ReferrerInfo{ Digest: referrerDigest.String(), MediaType: ispec.MediaTypeImageManifest, }) So(err, ShouldBeNil) - repoMeta, err = repoDB.GetRepoMeta("repo") + repoMeta, err = metaDB.GetRepoMeta("repo") So(err, ShouldBeNil) So(len(repoMeta.Referrers[referredDigest.String()]), ShouldEqual, 1) }) @@ -2834,34 +2837,34 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func Convey("GetReferrersInfo", func() { referredDigest := godigest.FromString("referredDigest") - err := repoDB.SetReferrer("repo", referredDigest, repodb.ReferrerInfo{ + err := metaDB.SetReferrer("repo", referredDigest, mTypes.ReferrerInfo{ Digest: "inexistendManifestDigest", MediaType: ispec.MediaTypeImageManifest, }) So(err, ShouldBeNil) // ------- Set existent manifest and artifact manifest - err = repoDB.SetManifestData("goodManifest", repodb.ManifestData{ + err = metaDB.SetManifestData("goodManifest", mTypes.ManifestData{ ManifestBlob: []byte(`{"artifactType": "unwantedType"}`), ConfigBlob: []byte("{}"), }) So(err, ShouldBeNil) - err = repoDB.SetReferrer("repo", referredDigest, repodb.ReferrerInfo{ + err = metaDB.SetReferrer("repo", referredDigest, mTypes.ReferrerInfo{ Digest: "goodManifestUnwanted", MediaType: ispec.MediaTypeImageManifest, ArtifactType: "unwantedType", }) So(err, ShouldBeNil) - err = repoDB.SetReferrer("repo", referredDigest, repodb.ReferrerInfo{ + err = metaDB.SetReferrer("repo", referredDigest, mTypes.ReferrerInfo{ Digest: "goodManifest", MediaType: ispec.MediaTypeImageManifest, ArtifactType: "wantedType", }) So(err, ShouldBeNil) - referrerInfo, err := repoDB.GetReferrersInfo("repo", referredDigest, []string{"wantedType"}) + referrerInfo, err := metaDB.GetReferrersInfo("repo", referredDigest, []string{"wantedType"}) So(err, ShouldBeNil) So(len(referrerInfo), ShouldEqual, 1) So(referrerInfo[0].ArtifactType, ShouldResemble, "wantedType") @@ -2877,7 +2880,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func manifestData, err := NewManifestData(img.Manifest, img.Config) So(err, ShouldBeNil) - err = repoDB.SetManifestData(imgDigest, manifestData) + err = metaDB.SetManifestData(imgDigest, manifestData) So(err, ShouldBeNil) multiarch, err := test.GetRandomMultiarchImage("multi") @@ -2888,7 +2891,7 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func indexData, err := NewIndexData(multiarch.Index) So(err, ShouldBeNil) - err = repoDB.SetIndexData(multiarchDigest, indexData) + err = metaDB.SetIndexData(multiarchDigest, indexData) So(err, ShouldBeNil) for _, img := range multiarch.Images { @@ -2898,23 +2901,23 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func indManData1, err := NewManifestData(multiarch.Images[0].Manifest, multiarch.Images[0].Config) So(err, ShouldBeNil) - err = repoDB.SetManifestData(digest, indManData1) + err = metaDB.SetManifestData(digest, indManData1) So(err, ShouldBeNil) } - err = repoDB.SetRepoReference("repo", img.Reference, imgDigest, img.Manifest.MediaType) + err = metaDB.SetRepoReference("repo", img.Reference, imgDigest, img.Manifest.MediaType) So(err, ShouldBeNil) - err = repoDB.SetRepoReference("repo", multiarch.Reference, multiarchDigest, ispec.MediaTypeImageIndex) + err = metaDB.SetRepoReference("repo", multiarch.Reference, multiarchDigest, ispec.MediaTypeImageIndex) So(err, ShouldBeNil) - repoMetas, _, _, _, err := repoDB.FilterRepos(context.Background(), - func(repoMeta repodb.RepoMetadata) bool { return true }, repodb.PageInput{}) + repoMetas, _, _, _, err := metaDB.FilterRepos(context.Background(), + func(repoMeta mTypes.RepoMetadata) bool { return true }, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repoMetas), ShouldEqual, 1) - _, _, _, _, err = repoDB.FilterRepos(context.Background(), - func(repoMeta repodb.RepoMetadata) bool { return true }, repodb.PageInput{ + _, _, _, _, err = metaDB.FilterRepos(context.Background(), + func(repoMeta mTypes.RepoMetadata) bool { return true }, mTypes.PageInput{ Limit: -1, Offset: -1, }) @@ -2934,75 +2937,75 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func ctx := context.WithValue(context.Background(), authzCtxKey, acCtx) manifestDigest := godigest.FromString("dig") - err := repoDB.SetManifestData(manifestDigest, repodb.ManifestData{ + err := metaDB.SetManifestData(manifestDigest, mTypes.ManifestData{ ManifestBlob: []byte("{}"), ConfigBlob: []byte("{}"), }) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo99, "tag", manifestDigest, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo99, "tag", manifestDigest, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - repoMetas, _, _, _, err := repoDB.SearchRepos(ctx, repo99, repodb.Filter{}, repodb.PageInput{}) + repoMetas, _, _, _, err := metaDB.SearchRepos(ctx, repo99, mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repoMetas), ShouldEqual, 1) So(repoMetas[0].IsBookmarked, ShouldBeFalse) So(repoMetas[0].IsStarred, ShouldBeFalse) - repoMetas, _, _, _, err = repoDB.SearchTags(ctx, repo99+":", repodb.Filter{}, repodb.PageInput{}) + repoMetas, _, _, _, err = metaDB.SearchTags(ctx, repo99+":", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repoMetas), ShouldEqual, 1) So(repoMetas[0].IsBookmarked, ShouldBeFalse) So(repoMetas[0].IsStarred, ShouldBeFalse) - repoMetas, _, _, _, err = repoDB.FilterRepos(ctx, func(repoMeta repodb.RepoMetadata) bool { + repoMetas, _, _, _, err = metaDB.FilterRepos(ctx, func(repoMeta mTypes.RepoMetadata) bool { return true - }, repodb.PageInput{}) + }, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repoMetas), ShouldEqual, 1) So(repoMetas[0].IsBookmarked, ShouldBeFalse) So(repoMetas[0].IsStarred, ShouldBeFalse) - repoMetas, _, _, _, err = repoDB.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + repoMetas, _, _, _, err = metaDB.FilterTags(ctx, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldBeNil) So(len(repoMetas), ShouldEqual, 1) So(repoMetas[0].IsBookmarked, ShouldBeFalse) So(repoMetas[0].IsStarred, ShouldBeFalse) - _, err = repoDB.ToggleBookmarkRepo(ctx, repo99) + _, err = metaDB.ToggleBookmarkRepo(ctx, repo99) So(err, ShouldBeNil) - _, err = repoDB.ToggleStarRepo(ctx, repo99) + _, err = metaDB.ToggleStarRepo(ctx, repo99) So(err, ShouldBeNil) - repoMetas, _, _, _, err = repoDB.SearchRepos(ctx, repo99, repodb.Filter{}, repodb.PageInput{}) + repoMetas, _, _, _, err = metaDB.SearchRepos(ctx, repo99, mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repoMetas), ShouldEqual, 1) So(repoMetas[0].IsBookmarked, ShouldBeTrue) So(repoMetas[0].IsStarred, ShouldBeTrue) - repoMetas, _, _, _, err = repoDB.SearchTags(ctx, repo99+":", repodb.Filter{}, repodb.PageInput{}) + repoMetas, _, _, _, err = metaDB.SearchTags(ctx, repo99+":", mTypes.Filter{}, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repoMetas), ShouldEqual, 1) So(repoMetas[0].IsBookmarked, ShouldBeTrue) So(repoMetas[0].IsStarred, ShouldBeTrue) - repoMetas, _, _, _, err = repoDB.FilterRepos(ctx, func(repoMeta repodb.RepoMetadata) bool { + repoMetas, _, _, _, err = metaDB.FilterRepos(ctx, func(repoMeta mTypes.RepoMetadata) bool { return true - }, repodb.PageInput{}) + }, mTypes.PageInput{}) So(err, ShouldBeNil) So(len(repoMetas), ShouldEqual, 1) So(repoMetas[0].IsBookmarked, ShouldBeTrue) So(repoMetas[0].IsStarred, ShouldBeTrue) - repoMetas, _, _, _, err = repoDB.FilterTags(ctx, - func(repoMeta repodb.RepoMetadata, manifestMeta repodb.ManifestMetadata) bool { return true }, - repodb.Filter{}, - repodb.PageInput{}, + repoMetas, _, _, _, err = metaDB.FilterTags(ctx, + func(repoMeta mTypes.RepoMetadata, manifestMeta mTypes.ManifestMetadata) bool { return true }, + mTypes.Filter{}, + mTypes.PageInput{}, ) So(err, ShouldBeNil) So(len(repoMetas), ShouldEqual, 1) @@ -3023,16 +3026,16 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func digest := godigest.FromString("1") - err := repoDB.SetRepoReference("repo", "tag", digest, ispec.MediaTypeImageManifest) + err := metaDB.SetRepoReference("repo", "tag", digest, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - _, err = repoDB.ToggleBookmarkRepo(ctx, "repo") + _, err = metaDB.ToggleBookmarkRepo(ctx, "repo") So(err, ShouldBeNil) - _, err = repoDB.ToggleStarRepo(ctx, "repo") + _, err = metaDB.ToggleStarRepo(ctx, "repo") So(err, ShouldBeNil) - repoMeta, err := repoDB.GetUserRepoMeta(ctx, "repo") + repoMeta, err := metaDB.GetUserRepoMeta(ctx, "repo") So(err, ShouldBeNil) So(repoMeta.IsBookmarked, ShouldBeTrue) So(repoMeta.IsStarred, ShouldBeTrue) @@ -3041,26 +3044,26 @@ func RunRepoDBTests(t *testing.T, repoDB repodb.RepoDB, preparationFuncs ...func }) } -func NewManifestData(manifest ispec.Manifest, config ispec.Image) (repodb.ManifestData, error) { +func NewManifestData(manifest ispec.Manifest, config ispec.Image) (mTypes.ManifestData, error) { configBlob, err := json.Marshal(config) if err != nil { - return repodb.ManifestData{}, err + return mTypes.ManifestData{}, err } manifest.Config.Digest = godigest.FromBytes(configBlob) manifestBlob, err := json.Marshal(manifest) if err != nil { - return repodb.ManifestData{}, err + return mTypes.ManifestData{}, err } - return repodb.ManifestData{ManifestBlob: manifestBlob, ConfigBlob: configBlob}, nil + return mTypes.ManifestData{ManifestBlob: manifestBlob, ConfigBlob: configBlob}, nil } -func NewIndexData(index ispec.Index) (repodb.IndexData, error) { +func NewIndexData(index ispec.Index) (mTypes.IndexData, error) { indexBlob, err := json.Marshal(index) - return repodb.IndexData{IndexBlob: indexBlob}, err + return mTypes.IndexData{IndexBlob: indexBlob}, err } func TestRelevanceSorting(t *testing.T) { @@ -3084,16 +3087,16 @@ func TestRelevanceSorting(t *testing.T) { Convey("Integration", func() { filePath := path.Join(t.TempDir(), "repo.db") - boltDBParams := bolt.DBParameters{ + boltDBParams := boltdb.DBParameters{ RootDir: t.TempDir(), } - boltDriver, err := bolt.GetBoltDriver(boltDBParams) + boltDriver, err := boltdb.GetBoltDriver(boltDBParams) So(err, ShouldBeNil) log := log.NewLogger("debug", "") - repoDB, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) - So(repoDB, ShouldNotBeNil) + metaDB, err := boltdb.New(boltDriver, log) + So(metaDB, ShouldNotBeNil) So(err, ShouldBeNil) defer os.Remove(filePath) @@ -3119,39 +3122,39 @@ func TestRelevanceSorting(t *testing.T) { emptyConfigBlob, err := json.Marshal(emptyConfig) So(err, ShouldBeNil) - emptyRepoMeta := repodb.ManifestMetadata{ + emptyRepoMeta := mTypes.ManifestMetadata{ ManifestBlob: emptyManifestBlob, ConfigBlob: emptyConfigBlob, } - err = repoDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag1, manifestDigest1, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo1, tag2, manifestDigest2, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo2, tag3, manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo2, tag3, manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo3, tag3, manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo3, tag3, manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo4, tag1, manifestDigest3, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo4, tag1, manifestDigest3, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo1, manifestDigest2, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo1, manifestDigest2, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo2, manifestDigest1, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo2, manifestDigest1, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo3, manifestDigest2, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo3, manifestDigest2, emptyRepoMeta) So(err, ShouldBeNil) - err = repoDB.SetManifestMeta(repo4, manifestDigest3, emptyRepoMeta) + err = metaDB.SetManifestMeta(repo4, manifestDigest3, emptyRepoMeta) So(err, ShouldBeNil) - repos, _, _, _, err := repoDB.SearchRepos(ctx, "pine", repodb.Filter{}, - repodb.PageInput{SortBy: repodb.Relevance}, + repos, _, _, _, err := metaDB.SearchRepos(ctx, "pine", mTypes.Filter{}, + mTypes.PageInput{SortBy: mTypes.Relevance}, ) So(err, ShouldBeNil) @@ -3221,3 +3224,97 @@ func generateTestImage() ([]byte, []byte, error) { return configBlob, manifestBlob, nil } + +func TestCreateDynamo(t *testing.T) { + skipDynamo(t) + + Convey("Create", t, func() { + dynamoDBDriverParams := mdynamodb.DBDriverParameters{ + Endpoint: os.Getenv("DYNAMODBMOCK_ENDPOINT"), + RepoMetaTablename: "RepoMetadataTable", + ManifestDataTablename: "ManifestDataTable", + IndexDataTablename: "IndexDataTable", + UserDataTablename: "UserDataTable", + APIKeyTablename: "ApiKeyTable", + VersionTablename: "Version", + Region: "us-east-2", + } + + client, err := mdynamodb.GetDynamoClient(dynamoDBDriverParams) + So(err, ShouldBeNil) + + log := log.NewLogger("debug", "") + + metaDB, err := meta.Create("dynamodb", client, dynamoDBDriverParams, log) + So(metaDB, ShouldNotBeNil) + So(err, ShouldBeNil) + }) + + Convey("Fails", t, func() { + log := log.NewLogger("debug", "") + + So(func() { _, _ = meta.Create("dynamodb", nil, boltdb.DBParameters{RootDir: "root"}, log) }, ShouldPanic) + + So(func() { _, _ = meta.Create("dynamodb", &dynamodb.Client{}, "bad", log) }, ShouldPanic) + + metaDB, err := meta.Create("random", nil, boltdb.DBParameters{RootDir: "root"}, log) + So(metaDB, ShouldBeNil) + So(err, ShouldNotBeNil) + }) +} + +func TestCreateBoltDB(t *testing.T) { + Convey("Create", t, func() { + rootDir := t.TempDir() + params := boltdb.DBParameters{ + RootDir: rootDir, + } + boltDriver, err := boltdb.GetBoltDriver(params) + So(err, ShouldBeNil) + + log := log.NewLogger("debug", "") + + metaDB, err := meta.Create("boltdb", boltDriver, params, log) + So(metaDB, ShouldNotBeNil) + So(err, ShouldBeNil) + }) + + Convey("fails", t, func() { + log := log.NewLogger("debug", "") + + So(func() { _, _ = meta.Create("boltdb", nil, mdynamodb.DBDriverParameters{}, log) }, ShouldPanic) + }) +} + +func TestNew(t *testing.T) { + Convey("InitCosignAndNotationDirs fails", t, func() { + rootDir := t.TempDir() + + var storageConfig config.StorageConfig + + storageConfig.RootDirectory = rootDir + storageConfig.RemoteCache = false + log := log.NewLogger("debug", "") + + _, err := os.Create(path.Join(rootDir, "repo.db")) + So(err, ShouldBeNil) + + err = os.Chmod(rootDir, 0o555) + So(err, ShouldBeNil) + + newMetaDB, err := meta.New(storageConfig, log) + So(newMetaDB, ShouldBeNil) + So(err, ShouldNotBeNil) + + err = os.Chmod(rootDir, 0o777) + So(err, ShouldBeNil) + }) +} + +func skipDynamo(t *testing.T) { + t.Helper() + + if os.Getenv("DYNAMODBMOCK_ENDPOINT") == "" { + t.Skip("Skipping testing without AWS DynamoDB mock server") + } +} diff --git a/pkg/meta/repodb/pagination.go b/pkg/meta/pagination/pagination.go similarity index 73% rename from pkg/meta/repodb/pagination.go rename to pkg/meta/pagination/pagination.go index c1fb37cd..7a8b0127 100644 --- a/pkg/meta/repodb/pagination.go +++ b/pkg/meta/pagination/pagination.go @@ -1,4 +1,4 @@ -package repodb +package pagination import ( "fmt" @@ -6,13 +6,14 @@ import ( zerr "zotregistry.io/zot/errors" "zotregistry.io/zot/pkg/common" + mTypes "zotregistry.io/zot/pkg/meta/types" ) // PageFinder permits keeping a pool of objects using Add // and returning a specific page. type PageFinder interface { - Add(detailedRepoMeta DetailedRepoMeta) - Page() ([]RepoMetadata, common.PageInfo) + Add(detailedRepoMeta mTypes.DetailedRepoMeta) + Page() ([]mTypes.RepoMetadata, common.PageInfo) Reset() } @@ -21,13 +22,13 @@ type PageFinder interface { type RepoPageFinder struct { limit int offset int - sortBy SortCriteria - pageBuffer []DetailedRepoMeta + sortBy mTypes.SortCriteria + pageBuffer []mTypes.DetailedRepoMeta } -func NewBaseRepoPageFinder(limit, offset int, sortBy SortCriteria) (*RepoPageFinder, error) { +func NewBaseRepoPageFinder(limit, offset int, sortBy mTypes.SortCriteria) (*RepoPageFinder, error) { if sortBy == "" { - sortBy = AlphabeticAsc + sortBy = mTypes.AlphabeticAsc } if limit < 0 { @@ -38,7 +39,7 @@ func NewBaseRepoPageFinder(limit, offset int, sortBy SortCriteria) (*RepoPageFin return nil, zerr.ErrOffsetIsNegative } - if _, found := SortFunctions()[sortBy]; !found { + if _, found := mTypes.SortFunctions()[sortBy]; !found { return nil, fmt.Errorf("sorting repos by '%s' is not supported %w", sortBy, zerr.ErrSortCriteriaNotSupported) } @@ -47,26 +48,26 @@ func NewBaseRepoPageFinder(limit, offset int, sortBy SortCriteria) (*RepoPageFin limit: limit, offset: offset, sortBy: sortBy, - pageBuffer: make([]DetailedRepoMeta, 0, limit), + pageBuffer: make([]mTypes.DetailedRepoMeta, 0, limit), }, nil } func (bpt *RepoPageFinder) Reset() { - bpt.pageBuffer = []DetailedRepoMeta{} + bpt.pageBuffer = []mTypes.DetailedRepoMeta{} } -func (bpt *RepoPageFinder) Add(namedRepoMeta DetailedRepoMeta) { +func (bpt *RepoPageFinder) Add(namedRepoMeta mTypes.DetailedRepoMeta) { bpt.pageBuffer = append(bpt.pageBuffer, namedRepoMeta) } -func (bpt *RepoPageFinder) Page() ([]RepoMetadata, common.PageInfo) { +func (bpt *RepoPageFinder) Page() ([]mTypes.RepoMetadata, common.PageInfo) { if len(bpt.pageBuffer) == 0 { - return []RepoMetadata{}, common.PageInfo{} + return []mTypes.RepoMetadata{}, common.PageInfo{} } pageInfo := &common.PageInfo{} - sort.Slice(bpt.pageBuffer, SortFunctions()[bpt.sortBy](bpt.pageBuffer)) + sort.Slice(bpt.pageBuffer, mTypes.SortFunctions()[bpt.sortBy](bpt.pageBuffer)) // the offset and limit are calculatd in terms of repos counted start := bpt.offset @@ -91,7 +92,7 @@ func (bpt *RepoPageFinder) Page() ([]RepoMetadata, common.PageInfo) { pageInfo.ItemCount = len(detailedReposPage) } - repos := make([]RepoMetadata, 0, len(detailedReposPage)) + repos := make([]mTypes.RepoMetadata, 0, len(detailedReposPage)) for _, drm := range detailedReposPage { repos = append(repos, drm.RepoMetadata) @@ -105,13 +106,13 @@ func (bpt *RepoPageFinder) Page() ([]RepoMetadata, common.PageInfo) { type ImagePageFinder struct { limit int offset int - sortBy SortCriteria - pageBuffer []DetailedRepoMeta + sortBy mTypes.SortCriteria + pageBuffer []mTypes.DetailedRepoMeta } -func NewBaseImagePageFinder(limit, offset int, sortBy SortCriteria) (*ImagePageFinder, error) { +func NewBaseImagePageFinder(limit, offset int, sortBy mTypes.SortCriteria) (*ImagePageFinder, error) { if sortBy == "" { - sortBy = AlphabeticAsc + sortBy = mTypes.AlphabeticAsc } if limit < 0 { @@ -122,7 +123,7 @@ func NewBaseImagePageFinder(limit, offset int, sortBy SortCriteria) (*ImagePageF return nil, zerr.ErrOffsetIsNegative } - if _, found := SortFunctions()[sortBy]; !found { + if _, found := mTypes.SortFunctions()[sortBy]; !found { return nil, fmt.Errorf("sorting repos by '%s' is not supported %w", sortBy, zerr.ErrSortCriteriaNotSupported) } @@ -131,21 +132,21 @@ func NewBaseImagePageFinder(limit, offset int, sortBy SortCriteria) (*ImagePageF limit: limit, offset: offset, sortBy: sortBy, - pageBuffer: make([]DetailedRepoMeta, 0, limit), + pageBuffer: make([]mTypes.DetailedRepoMeta, 0, limit), }, nil } func (bpt *ImagePageFinder) Reset() { - bpt.pageBuffer = []DetailedRepoMeta{} + bpt.pageBuffer = []mTypes.DetailedRepoMeta{} } -func (bpt *ImagePageFinder) Add(namedRepoMeta DetailedRepoMeta) { +func (bpt *ImagePageFinder) Add(namedRepoMeta mTypes.DetailedRepoMeta) { bpt.pageBuffer = append(bpt.pageBuffer, namedRepoMeta) } -func (bpt *ImagePageFinder) Page() ([]RepoMetadata, common.PageInfo) { +func (bpt *ImagePageFinder) Page() ([]mTypes.RepoMetadata, common.PageInfo) { if len(bpt.pageBuffer) == 0 { - return []RepoMetadata{}, common.PageInfo{} + return []mTypes.RepoMetadata{}, common.PageInfo{} } pageInfo := common.PageInfo{} @@ -155,7 +156,7 @@ func (bpt *ImagePageFinder) Page() ([]RepoMetadata, common.PageInfo) { pageInfo.TotalCount += len(repo.Tags) } - sort.Slice(bpt.pageBuffer, SortFunctions()[bpt.sortBy](bpt.pageBuffer)) + sort.Slice(bpt.pageBuffer, mTypes.SortFunctions()[bpt.sortBy](bpt.pageBuffer)) repoStartIndex := 0 tagStartIndex := 0 @@ -164,7 +165,7 @@ func (bpt *ImagePageFinder) Page() ([]RepoMetadata, common.PageInfo) { remainingOffset := bpt.offset remainingLimit := bpt.limit - repos := make([]RepoMetadata, 0) + repos := make([]mTypes.RepoMetadata, 0) if remainingOffset == 0 && remainingLimit == 0 { for _, drm := range bpt.pageBuffer { @@ -191,11 +192,11 @@ func (bpt *ImagePageFinder) Page() ([]RepoMetadata, common.PageInfo) { // offset is larger than the number of tags if repoStartIndex >= len(bpt.pageBuffer) { - return []RepoMetadata{}, common.PageInfo{} + return []mTypes.RepoMetadata{}, common.PageInfo{} } // finish counting remaining tags inside the first repo meta - partialTags := map[string]Descriptor{} + partialTags := map[string]mTypes.Descriptor{} firstRepoMeta := bpt.pageBuffer[repoStartIndex].RepoMetadata tags := make([]string, 0, len(firstRepoMeta.Tags)) @@ -230,7 +231,7 @@ func (bpt *ImagePageFinder) Page() ([]RepoMetadata, common.PageInfo) { repoMeta := bpt.pageBuffer[i].RepoMetadata if len(repoMeta.Tags) > remainingLimit { - partialTags := map[string]Descriptor{} + partialTags := map[string]mTypes.Descriptor{} tags := make([]string, 0, len(repoMeta.Tags)) for k := range repoMeta.Tags { diff --git a/pkg/meta/repodb/pagination_test.go b/pkg/meta/pagination/pagination_test.go similarity index 65% rename from pkg/meta/repodb/pagination_test.go rename to pkg/meta/pagination/pagination_test.go index 809bc3b5..5747a3f6 100644 --- a/pkg/meta/repodb/pagination_test.go +++ b/pkg/meta/pagination/pagination_test.go @@ -1,4 +1,4 @@ -package repodb_test +package pagination_test import ( "testing" @@ -6,19 +6,20 @@ import ( ispec "github.com/opencontainers/image-spec/specs-go/v1" . "github.com/smartystreets/goconvey/convey" - "zotregistry.io/zot/pkg/meta/repodb" + "zotregistry.io/zot/pkg/meta/pagination" + mTypes "zotregistry.io/zot/pkg/meta/types" ) func TestPagination(t *testing.T) { Convey("Repo Pagination", t, func() { Convey("reset", func() { - pageFinder, err := repodb.NewBaseRepoPageFinder(1, 0, repodb.AlphabeticAsc) + pageFinder, err := pagination.NewBaseRepoPageFinder(1, 0, mTypes.AlphabeticAsc) So(err, ShouldBeNil) So(pageFinder, ShouldNotBeNil) - pageFinder.Add(repodb.DetailedRepoMeta{}) - pageFinder.Add(repodb.DetailedRepoMeta{}) - pageFinder.Add(repodb.DetailedRepoMeta{}) + pageFinder.Add(mTypes.DetailedRepoMeta{}) + pageFinder.Add(mTypes.DetailedRepoMeta{}) + pageFinder.Add(mTypes.DetailedRepoMeta{}) pageFinder.Reset() @@ -29,27 +30,27 @@ func TestPagination(t *testing.T) { Convey("Image Pagination", t, func() { Convey("create new pageFinder errors", func() { - pageFinder, err := repodb.NewBaseImagePageFinder(-1, 10, repodb.AlphabeticAsc) + pageFinder, err := pagination.NewBaseImagePageFinder(-1, 10, mTypes.AlphabeticAsc) So(pageFinder, ShouldBeNil) So(err, ShouldNotBeNil) - pageFinder, err = repodb.NewBaseImagePageFinder(2, -1, repodb.AlphabeticAsc) + pageFinder, err = pagination.NewBaseImagePageFinder(2, -1, mTypes.AlphabeticAsc) So(pageFinder, ShouldBeNil) So(err, ShouldNotBeNil) - pageFinder, err = repodb.NewBaseImagePageFinder(2, 1, "wrong sorting criteria") + pageFinder, err = pagination.NewBaseImagePageFinder(2, 1, "wrong sorting criteria") So(pageFinder, ShouldBeNil) So(err, ShouldNotBeNil) }) Convey("Reset", func() { - pageFinder, err := repodb.NewBaseImagePageFinder(1, 0, repodb.AlphabeticAsc) + pageFinder, err := pagination.NewBaseImagePageFinder(1, 0, mTypes.AlphabeticAsc) So(err, ShouldBeNil) So(pageFinder, ShouldNotBeNil) - pageFinder.Add(repodb.DetailedRepoMeta{}) - pageFinder.Add(repodb.DetailedRepoMeta{}) - pageFinder.Add(repodb.DetailedRepoMeta{}) + pageFinder.Add(mTypes.DetailedRepoMeta{}) + pageFinder.Add(mTypes.DetailedRepoMeta{}) + pageFinder.Add(mTypes.DetailedRepoMeta{}) pageFinder.Reset() @@ -59,23 +60,23 @@ func TestPagination(t *testing.T) { Convey("Page", func() { Convey("no limit or offset", func() { - pageFinder, err := repodb.NewBaseImagePageFinder(0, 0, repodb.AlphabeticAsc) + pageFinder, err := pagination.NewBaseImagePageFinder(0, 0, mTypes.AlphabeticAsc) So(err, ShouldBeNil) So(pageFinder, ShouldNotBeNil) - pageFinder.Add(repodb.DetailedRepoMeta{ - RepoMetadata: repodb.RepoMetadata{ + pageFinder.Add(mTypes.DetailedRepoMeta{ + RepoMetadata: mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag1": {Digest: "dig1", MediaType: ispec.MediaTypeImageManifest}, }, }, }) - pageFinder.Add(repodb.DetailedRepoMeta{ - RepoMetadata: repodb.RepoMetadata{ + pageFinder.Add(mTypes.DetailedRepoMeta{ + RepoMetadata: mTypes.RepoMetadata{ Name: "repo2", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "Tag1": {Digest: "dig1", MediaType: ispec.MediaTypeImageManifest}, "Tag2": {Digest: "dig2", MediaType: ispec.MediaTypeImageManifest}, "Tag3": {Digest: "dig3", MediaType: ispec.MediaTypeImageManifest}, @@ -88,23 +89,23 @@ func TestPagination(t *testing.T) { So(pageInfo.TotalCount, ShouldEqual, 5) }) Convey("Test 1 limit < len(tags)", func() { - pageFinder, err := repodb.NewBaseImagePageFinder(5, 2, repodb.AlphabeticAsc) + pageFinder, err := pagination.NewBaseImagePageFinder(5, 2, mTypes.AlphabeticAsc) So(err, ShouldBeNil) So(pageFinder, ShouldNotBeNil) - pageFinder.Add(repodb.DetailedRepoMeta{ - RepoMetadata: repodb.RepoMetadata{ + pageFinder.Add(mTypes.DetailedRepoMeta{ + RepoMetadata: mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag1": {Digest: "dig1", MediaType: ispec.MediaTypeImageManifest}, }, }, }) - pageFinder.Add(repodb.DetailedRepoMeta{ - RepoMetadata: repodb.RepoMetadata{ + pageFinder.Add(mTypes.DetailedRepoMeta{ + RepoMetadata: mTypes.RepoMetadata{ Name: "repo2", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "Tag1": {Digest: "dig1", MediaType: ispec.MediaTypeImageManifest}, "Tag2": {Digest: "dig2", MediaType: ispec.MediaTypeImageManifest}, "Tag3": {Digest: "dig3", MediaType: ispec.MediaTypeImageManifest}, @@ -117,14 +118,14 @@ func TestPagination(t *testing.T) { So(pageInfo.TotalCount, ShouldEqual, 5) }) Convey("Test 2 limit < len(tags)", func() { - pageFinder, err := repodb.NewBaseImagePageFinder(5, 2, repodb.AlphabeticAsc) + pageFinder, err := pagination.NewBaseImagePageFinder(5, 2, mTypes.AlphabeticAsc) So(err, ShouldBeNil) So(pageFinder, ShouldNotBeNil) - pageFinder.Add(repodb.DetailedRepoMeta{ - RepoMetadata: repodb.RepoMetadata{ + pageFinder.Add(mTypes.DetailedRepoMeta{ + RepoMetadata: mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag1": { Digest: "dig1", MediaType: ispec.MediaTypeImageManifest, @@ -133,10 +134,10 @@ func TestPagination(t *testing.T) { }, }) - pageFinder.Add(repodb.DetailedRepoMeta{ - RepoMetadata: repodb.RepoMetadata{ + pageFinder.Add(mTypes.DetailedRepoMeta{ + RepoMetadata: mTypes.RepoMetadata{ Name: "repo2", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "Tag1": { Digest: "dig1", MediaType: ispec.MediaTypeImageManifest, @@ -156,10 +157,10 @@ func TestPagination(t *testing.T) { }, }, }) - pageFinder.Add(repodb.DetailedRepoMeta{ - RepoMetadata: repodb.RepoMetadata{ + pageFinder.Add(mTypes.DetailedRepoMeta{ + RepoMetadata: mTypes.RepoMetadata{ Name: "repo3", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "Tag11": { Digest: "dig11", MediaType: ispec.MediaTypeImageManifest, @@ -191,14 +192,14 @@ func TestPagination(t *testing.T) { }) Convey("Test 2 limit > len(tags)", func() { - pageFinder, err := repodb.NewBaseImagePageFinder(3, 0, repodb.AlphabeticAsc) + pageFinder, err := pagination.NewBaseImagePageFinder(3, 0, mTypes.AlphabeticAsc) So(err, ShouldBeNil) So(pageFinder, ShouldNotBeNil) - pageFinder.Add(repodb.DetailedRepoMeta{ - RepoMetadata: repodb.RepoMetadata{ + pageFinder.Add(mTypes.DetailedRepoMeta{ + RepoMetadata: mTypes.RepoMetadata{ Name: "repo1", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "tag1": { Digest: "dig1", MediaType: ispec.MediaTypeImageManifest, @@ -207,10 +208,10 @@ func TestPagination(t *testing.T) { }, }) - pageFinder.Add(repodb.DetailedRepoMeta{ - RepoMetadata: repodb.RepoMetadata{ + pageFinder.Add(mTypes.DetailedRepoMeta{ + RepoMetadata: mTypes.RepoMetadata{ Name: "repo2", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "Tag1": { Digest: "dig1", MediaType: ispec.MediaTypeImageManifest, @@ -218,10 +219,10 @@ func TestPagination(t *testing.T) { }, }, }) - pageFinder.Add(repodb.DetailedRepoMeta{ - RepoMetadata: repodb.RepoMetadata{ + pageFinder.Add(mTypes.DetailedRepoMeta{ + RepoMetadata: mTypes.RepoMetadata{ Name: "repo3", - Tags: map[string]repodb.Descriptor{ + Tags: map[string]mTypes.Descriptor{ "Tag11": { Digest: "dig11", MediaType: ispec.MediaTypeImageManifest, diff --git a/pkg/meta/repodb/repodbfactory/repodb_factory_test.go b/pkg/meta/repodb/repodbfactory/repodb_factory_test.go deleted file mode 100644 index ee8222bd..00000000 --- a/pkg/meta/repodb/repodbfactory/repodb_factory_test.go +++ /dev/null @@ -1,110 +0,0 @@ -package repodbfactory_test - -import ( - "os" - "path" - "testing" - - "github.com/aws/aws-sdk-go-v2/service/dynamodb" - . "github.com/smartystreets/goconvey/convey" - - "zotregistry.io/zot/pkg/api/config" - "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/dynamo" - "zotregistry.io/zot/pkg/meta/repodb/repodbfactory" -) - -func TestCreateDynamo(t *testing.T) { - skipDynamo(t) - - Convey("Create", t, func() { - dynamoDBDriverParams := dynamo.DBDriverParameters{ - Endpoint: os.Getenv("DYNAMODBMOCK_ENDPOINT"), - RepoMetaTablename: "RepoMetadataTable", - ManifestDataTablename: "ManifestDataTable", - IndexDataTablename: "IndexDataTable", - UserDataTablename: "UserDataTable", - APIKeyTablename: "ApiKeyTable", - VersionTablename: "Version", - Region: "us-east-2", - } - - client, err := dynamo.GetDynamoClient(dynamoDBDriverParams) - So(err, ShouldBeNil) - - log := log.NewLogger("debug", "") - - repoDB, err := repodbfactory.Create("dynamodb", client, dynamoDBDriverParams, log) - So(repoDB, ShouldNotBeNil) - So(err, ShouldBeNil) - }) - - Convey("Fails", t, func() { - log := log.NewLogger("debug", "") - - So(func() { _, _ = repodbfactory.Create("dynamodb", nil, bolt.DBParameters{RootDir: "root"}, log) }, ShouldPanic) - - So(func() { _, _ = repodbfactory.Create("dynamodb", &dynamodb.Client{}, "bad", log) }, ShouldPanic) - - repoDB, err := repodbfactory.Create("random", nil, bolt.DBParameters{RootDir: "root"}, log) - So(repoDB, ShouldBeNil) - So(err, ShouldNotBeNil) - }) -} - -func TestCreateBoltDB(t *testing.T) { - Convey("Create", t, func() { - rootDir := t.TempDir() - params := bolt.DBParameters{ - RootDir: rootDir, - } - boltDriver, err := bolt.GetBoltDriver(params) - So(err, ShouldBeNil) - - log := log.NewLogger("debug", "") - - repoDB, err := repodbfactory.Create("boltdb", boltDriver, params, log) - So(repoDB, ShouldNotBeNil) - So(err, ShouldBeNil) - }) - - Convey("fails", t, func() { - log := log.NewLogger("debug", "") - - So(func() { _, _ = repodbfactory.Create("boltdb", nil, dynamo.DBDriverParameters{}, log) }, ShouldPanic) - }) -} - -func TestNew(t *testing.T) { - Convey("InitCosignAndNotationDirs fails", t, func() { - rootDir := t.TempDir() - - var storageConfig config.StorageConfig - - storageConfig.RootDirectory = rootDir - storageConfig.RemoteCache = false - log := log.NewLogger("debug", "") - - _, err := os.Create(path.Join(rootDir, "repo.db")) - So(err, ShouldBeNil) - - err = os.Chmod(rootDir, 0o555) - So(err, ShouldBeNil) - - newRepodb, err := repodbfactory.New(storageConfig, log) - So(newRepodb, ShouldBeNil) - So(err, ShouldNotBeNil) - - err = os.Chmod(rootDir, 0o777) - So(err, ShouldBeNil) - }) -} - -func skipDynamo(t *testing.T) { - t.Helper() - - if os.Getenv("DYNAMODBMOCK_ENDPOINT") == "" { - t.Skip("Skipping testing without AWS DynamoDB mock server") - } -} diff --git a/pkg/meta/repodb/storage_parsing.go b/pkg/meta/storage_parsing.go similarity index 78% rename from pkg/meta/repodb/storage_parsing.go rename to pkg/meta/storage_parsing.go index e51dc48f..db85d98c 100644 --- a/pkg/meta/repodb/storage_parsing.go +++ b/pkg/meta/storage_parsing.go @@ -1,4 +1,4 @@ -package repodb +package meta import ( "encoding/json" @@ -12,13 +12,14 @@ import ( zcommon "zotregistry.io/zot/pkg/common" "zotregistry.io/zot/pkg/log" "zotregistry.io/zot/pkg/meta/signatures" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" storageTypes "zotregistry.io/zot/pkg/storage/types" ) // ParseStorage will sync all repos found in the rootdirectory of the oci layout that zot was deployed on with the // ParseStorage database. -func ParseStorage(repoDB RepoDB, storeController storage.StoreController, log log.Logger) error { +func ParseStorage(metaDB mTypes.MetaDB, storeController storage.StoreController, log log.Logger) error { allRepos, err := getAllRepos(storeController) if err != nil { rootDir := storeController.DefaultStore.RootDir() @@ -29,7 +30,7 @@ func ParseStorage(repoDB RepoDB, storeController storage.StoreController, log lo } for _, repo := range allRepos { - err := ParseRepo(repo, repoDB, storeController, log) + err := ParseRepo(repo, metaDB, storeController, log) if err != nil { log.Error().Err(err).Str("repository", repo).Msg("load-local-layout: failed to sync repo") @@ -41,7 +42,7 @@ func ParseStorage(repoDB RepoDB, storeController storage.StoreController, log lo } // ParseRepo reads the contents of a repo and syncs all images and signatures found. -func ParseRepo(repo string, repoDB RepoDB, storeController storage.StoreController, log log.Logger) error { +func ParseRepo(repo string, metaDB mTypes.MetaDB, storeController storage.StoreController, log log.Logger) error { imageStore := storeController.GetImageStore(repo) indexBlob, err := imageStore.GetIndexContent(repo) @@ -60,7 +61,7 @@ func ParseRepo(repo string, repoDB RepoDB, storeController storage.StoreControll return err } - err = resetRepoMeta(repo, repoDB, log) + err = resetRepoMeta(repo, metaDB, log) if err != nil && !errors.Is(err, zerr.ErrRepoMetaNotFound) { log.Error().Err(err).Str("repository", repo).Msg("load-repo: failed to reset tag field in RepoMetadata for repo") @@ -70,9 +71,9 @@ func ParseRepo(repo string, repoDB RepoDB, storeController storage.StoreControll for _, descriptor := range indexContent.Manifests { tag := descriptor.Annotations[ispec.AnnotationRefName] - descriptorBlob, err := getCachedBlob(repo, descriptor, repoDB, imageStore, log) + descriptorBlob, err := getCachedBlob(repo, descriptor, metaDB, imageStore, log) if err != nil { - log.Error().Err(err).Msg("load-repo: error checking manifestMeta in RepoDB") + log.Error().Err(err).Msg("load-repo: error checking manifestMeta in MetaDB") return err } @@ -93,8 +94,8 @@ func ParseRepo(repo string, repoDB RepoDB, storeController storage.StoreControll return err } - err = repoDB.AddManifestSignature(repo, signedManifestDigest, - SignatureMetadata{ + err = metaDB.AddManifestSignature(repo, signedManifestDigest, + mTypes.SignatureMetadata{ SignatureType: signatureType, SignatureDigest: descriptor.Digest.String(), LayersInfo: layers, @@ -107,7 +108,7 @@ func ParseRepo(repo string, repoDB RepoDB, storeController storage.StoreControll return err } - err = repoDB.UpdateSignaturesValidity(repo, signedManifestDigest) + err = metaDB.UpdateSignaturesValidity(repo, signedManifestDigest) if err != nil { log.Error().Err(err).Str("repository", repo).Str("reference", tag).Str("digest", signedManifestDigest.String()).Msg( "load-repo: failed verify signatures validity for signed image") @@ -125,7 +126,7 @@ func ParseRepo(repo string, repoDB RepoDB, storeController storage.StoreControll } err = SetImageMetaFromInput(repo, reference, descriptor.MediaType, descriptor.Digest, descriptorBlob, - imageStore, repoDB, log) + imageStore, metaDB, log) if err != nil { log.Error().Err(err).Str("repository", repo).Str("tag", tag). Msg("load-repo: failed to set metadata for image") @@ -138,9 +139,9 @@ func ParseRepo(repo string, repoDB RepoDB, storeController storage.StoreControll } // resetRepoMeta will delete all tags and non-user related information from a RepoMetadata. -// It is used to recalculate and keep RepoDB consistent with the layout in case of unexpected changes. -func resetRepoMeta(repo string, repoDB RepoDB, log log.Logger) error { - repoMeta, err := repoDB.GetRepoMeta(repo) +// It is used to recalculate and keep MetaDB consistent with the layout in case of unexpected changes. +func resetRepoMeta(repo string, metaDB mTypes.MetaDB, log log.Logger) error { + repoMeta, err := metaDB.GetRepoMeta(repo) if err != nil && !errors.Is(err, zerr.ErrRepoMetaNotFound) { log.Error().Err(err).Str("repository", repo).Msg("load-repo: failed to get RepoMeta for repo") @@ -153,12 +154,12 @@ func resetRepoMeta(repo string, repoDB RepoDB, log log.Logger) error { return nil } - return repoDB.SetRepoMeta(repo, RepoMetadata{ + return metaDB.SetRepoMeta(repo, mTypes.RepoMetadata{ Name: repoMeta.Name, - Tags: map[string]Descriptor{}, + Tags: map[string]mTypes.Descriptor{}, Statistics: repoMeta.Statistics, - Signatures: map[string]ManifestSignatures{}, - Referrers: map[string][]ReferrerInfo{}, + Signatures: map[string]mTypes.ManifestSignatures{}, + Referrers: map[string][]mTypes.ReferrerInfo{}, Stars: repoMeta.Stars, }) } @@ -183,12 +184,12 @@ func getAllRepos(storeController storage.StoreController) ([]string, error) { return allRepos, nil } -func getCachedBlob(repo string, descriptor ispec.Descriptor, repoDB RepoDB, +func getCachedBlob(repo string, descriptor ispec.Descriptor, metaDB mTypes.MetaDB, imageStore storageTypes.ImageStore, log log.Logger, ) ([]byte, error) { digest := descriptor.Digest - descriptorBlob, err := getCachedBlobFromRepoDB(descriptor, repoDB) + descriptorBlob, err := getCachedBlobFromMetaDB(descriptor, metaDB) if err != nil || len(descriptorBlob) == 0 { descriptorBlob, _, _, err = imageStore.GetImageManifest(repo, digest.String()) @@ -205,14 +206,14 @@ func getCachedBlob(repo string, descriptor ispec.Descriptor, repoDB RepoDB, return descriptorBlob, nil } -func getCachedBlobFromRepoDB(descriptor ispec.Descriptor, repoDB RepoDB) ([]byte, error) { +func getCachedBlobFromMetaDB(descriptor ispec.Descriptor, metaDB mTypes.MetaDB) ([]byte, error) { switch descriptor.MediaType { case ispec.MediaTypeImageManifest: - manifestData, err := repoDB.GetManifestData(descriptor.Digest) + manifestData, err := metaDB.GetManifestData(descriptor.Digest) return manifestData.ManifestBlob, err case ispec.MediaTypeImageIndex: - indexData, err := repoDB.GetIndexData(descriptor.Digest) + indexData, err := metaDB.GetIndexData(descriptor.Digest) return indexData.IndexBlob, err } @@ -222,21 +223,21 @@ func getCachedBlobFromRepoDB(descriptor ispec.Descriptor, repoDB RepoDB) ([]byte func GetSignatureLayersInfo(repo, tag, manifestDigest, signatureType string, manifestBlob []byte, imageStore storageTypes.ImageStore, log log.Logger, -) ([]LayerInfo, error) { +) ([]mTypes.LayerInfo, error) { switch signatureType { case signatures.CosignSignature: return getCosignSignatureLayersInfo(repo, tag, manifestDigest, manifestBlob, imageStore, log) case signatures.NotationSignature: return getNotationSignatureLayersInfo(repo, manifestDigest, manifestBlob, imageStore, log) default: - return []LayerInfo{}, nil + return []mTypes.LayerInfo{}, nil } } func getCosignSignatureLayersInfo( repo, tag, manifestDigest string, manifestBlob []byte, imageStore storageTypes.ImageStore, log log.Logger, -) ([]LayerInfo, error) { - layers := []LayerInfo{} +) ([]mTypes.LayerInfo, error) { + layers := []mTypes.LayerInfo{} var manifestContent ispec.Manifest if err := json.Unmarshal(manifestBlob, &manifestContent); err != nil { @@ -261,7 +262,7 @@ func getCosignSignatureLayersInfo( "load-repo: unable to get specific annotation of cosign signature") } - layers = append(layers, LayerInfo{ + layers = append(layers, mTypes.LayerInfo{ LayerDigest: layer.Digest.String(), LayerContent: layerContent, SignatureKey: layerSigKey, @@ -273,8 +274,8 @@ func getCosignSignatureLayersInfo( func getNotationSignatureLayersInfo( repo, manifestDigest string, manifestBlob []byte, imageStore storageTypes.ImageStore, log log.Logger, -) ([]LayerInfo, error) { - layers := []LayerInfo{} +) ([]mTypes.LayerInfo, error) { + layers := []mTypes.LayerInfo{} var manifestContent ispec.Manifest if err := json.Unmarshal(manifestBlob, &manifestContent); err != nil { @@ -303,7 +304,7 @@ func getNotationSignatureLayersInfo( layerSigKey := manifestContent.Layers[0].MediaType - layers = append(layers, LayerInfo{ + layers = append(layers, mTypes.LayerInfo{ LayerDigest: layer.String(), LayerContent: layerContent, SignatureKey: layerSigKey, @@ -314,26 +315,26 @@ func getNotationSignatureLayersInfo( // NewManifestMeta takes raw data about an image and createa a new ManifestMetadate object. func NewManifestData(repoName string, manifestBlob []byte, imageStore storageTypes.ImageStore, -) (ManifestData, error) { +) (mTypes.ManifestData, error) { var ( manifestContent ispec.Manifest configContent ispec.Image - manifestData ManifestData + manifestData mTypes.ManifestData ) err := json.Unmarshal(manifestBlob, &manifestContent) if err != nil { - return ManifestData{}, err + return mTypes.ManifestData{}, err } configBlob, err := imageStore.GetBlobContent(repoName, manifestContent.Config.Digest) if err != nil { - return ManifestData{}, err + return mTypes.ManifestData{}, err } err = json.Unmarshal(configBlob, &configContent) if err != nil { - return ManifestData{}, err + return mTypes.ManifestData{}, err } manifestData.ManifestBlob = manifestBlob @@ -343,8 +344,8 @@ func NewManifestData(repoName string, manifestBlob []byte, imageStore storageTyp } func NewIndexData(repoName string, indexBlob []byte, imageStore storageTypes.ImageStore, -) IndexData { - indexData := IndexData{} +) mTypes.IndexData { + indexData := mTypes.IndexData{} indexData.IndexBlob = indexBlob @@ -354,7 +355,7 @@ func NewIndexData(repoName string, indexBlob []byte, imageStore storageTypes.Ima // SetMetadataFromInput tries to set manifest metadata and update repo metadata by adding the current tag // (in case the reference is a tag). The function expects image manifests and indexes (multi arch images). func SetImageMetaFromInput(repo, reference, mediaType string, digest godigest.Digest, descriptorBlob []byte, - imageStore storageTypes.ImageStore, repoDB RepoDB, log log.Logger, + imageStore storageTypes.ImageStore, metaDB mTypes.MetaDB, log log.Logger, ) error { switch mediaType { case ispec.MediaTypeImageManifest: @@ -363,36 +364,36 @@ func SetImageMetaFromInput(repo, reference, mediaType string, digest godigest.Di return err } - err = repoDB.SetManifestData(digest, imageData) + err = metaDB.SetManifestData(digest, imageData) if err != nil { - log.Error().Err(err).Msg("repodb: error while putting manifest meta") + log.Error().Err(err).Msg("metadb: error while putting manifest meta") return err } case ispec.MediaTypeImageIndex: indexData := NewIndexData(repo, descriptorBlob, imageStore) - err := repoDB.SetIndexData(digest, indexData) + err := metaDB.SetIndexData(digest, indexData) if err != nil { - log.Error().Err(err).Msg("repodb: error while putting index data") + log.Error().Err(err).Msg("metadb: error while putting index data") return err } } - refferredDigest, referrerInfo, hasSubject, err := GetReferredSubject(descriptorBlob, digest.String(), mediaType) + refferredDigest, referrerInfo, hasSubject, err := GetReferredInfo(descriptorBlob, digest.String(), mediaType) if hasSubject && err == nil { - err := repoDB.SetReferrer(repo, refferredDigest, referrerInfo) + err := metaDB.SetReferrer(repo, refferredDigest, referrerInfo) if err != nil { - log.Error().Err(err).Msg("repodb: error while settingg referrer") + log.Error().Err(err).Msg("metadb: error while settingg referrer") return err } } - err = repoDB.SetRepoReference(repo, reference, digest, mediaType) + err = metaDB.SetRepoReference(repo, reference, digest, mediaType) if err != nil { - log.Error().Err(err).Msg("repodb: error while putting repo meta") + log.Error().Err(err).Msg("metadb: error while putting repo meta") return err } @@ -400,10 +401,10 @@ func SetImageMetaFromInput(repo, reference, mediaType string, digest godigest.Di return nil } -func GetReferredSubject(descriptorBlob []byte, referrerDigest, mediaType string, -) (godigest.Digest, ReferrerInfo, bool, error) { +func GetReferredInfo(descriptorBlob []byte, referrerDigest, mediaType string, +) (godigest.Digest, mTypes.ReferrerInfo, bool, error) { var ( - referrerInfo ReferrerInfo + referrerInfo mTypes.ReferrerInfo referrerSubject *ispec.Descriptor ) @@ -414,12 +415,12 @@ func GetReferredSubject(descriptorBlob []byte, referrerDigest, mediaType string, err := json.Unmarshal(descriptorBlob, &manifestContent) if err != nil { return "", referrerInfo, false, - fmt.Errorf("repodb: can't unmarshal manifest for digest %s: %w", referrerDigest, err) + fmt.Errorf("metadb: can't unmarshal manifest for digest %s: %w", referrerDigest, err) } referrerSubject = manifestContent.Subject - referrerInfo = ReferrerInfo{ + referrerInfo = mTypes.ReferrerInfo{ Digest: referrerDigest, MediaType: mediaType, ArtifactType: zcommon.GetManifestArtifactType(manifestContent), @@ -432,12 +433,12 @@ func GetReferredSubject(descriptorBlob []byte, referrerDigest, mediaType string, err := json.Unmarshal(descriptorBlob, &indexContent) if err != nil { return "", referrerInfo, false, - fmt.Errorf("repodb: can't unmarshal manifest for digest %s: %w", referrerDigest, err) + fmt.Errorf("metadb: can't unmarshal manifest for digest %s: %w", referrerDigest, err) } referrerSubject = indexContent.Subject - referrerInfo = ReferrerInfo{ + referrerInfo = mTypes.ReferrerInfo{ Digest: referrerDigest, MediaType: mediaType, ArtifactType: zcommon.GetIndexArtifactType(indexContent), @@ -447,7 +448,7 @@ func GetReferredSubject(descriptorBlob []byte, referrerDigest, mediaType string, } if referrerSubject == nil || referrerSubject.Digest.String() == "" { - return "", ReferrerInfo{}, false, nil + return "", mTypes.ReferrerInfo{}, false, nil } return referrerSubject.Digest, referrerInfo, true, nil diff --git a/pkg/meta/repodb/storage_parsing_test.go b/pkg/meta/storage_parsing_test.go similarity index 77% rename from pkg/meta/repodb/storage_parsing_test.go rename to pkg/meta/storage_parsing_test.go index f6516efc..34d76f88 100644 --- a/pkg/meta/repodb/storage_parsing_test.go +++ b/pkg/meta/storage_parsing_test.go @@ -1,9 +1,8 @@ -package repodb_test +package meta_test import ( "context" "encoding/json" - "errors" "fmt" "io" "os" @@ -17,12 +16,11 @@ import ( zerr "zotregistry.io/zot/errors" "zotregistry.io/zot/pkg/extensions/monitoring" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/dynamo" - "zotregistry.io/zot/pkg/meta/repodb" - bolt_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" - dynamo_wrapper "zotregistry.io/zot/pkg/meta/repodb/dynamodb-wrapper" + "zotregistry.io/zot/pkg/meta" + "zotregistry.io/zot/pkg/meta/boltdb" + "zotregistry.io/zot/pkg/meta/dynamodb" "zotregistry.io/zot/pkg/meta/signatures" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" "zotregistry.io/zot/pkg/storage/local" storageTypes "zotregistry.io/zot/pkg/storage/types" @@ -32,8 +30,6 @@ import ( const repo = "repo" -var ErrTestError = errors.New("test error") - func TestParseStorageErrors(t *testing.T) { Convey("ParseStorage", t, func() { imageStore := mocks.MockedImageStore{ @@ -45,10 +41,10 @@ func TestParseStorageErrors(t *testing.T) { }, } storeController := storage.StoreController{DefaultStore: imageStore} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} // sync repo fail - err := repodb.ParseStorage(repoDB, storeController, log.NewLogger("debug", "")) + err := meta.ParseStorage(metaDB, storeController, log.NewLogger("debug", "")) So(err, ShouldNotBeNil) Convey("getAllRepos errors", func() { @@ -69,7 +65,7 @@ func TestParseStorageErrors(t *testing.T) { }, } - err := repodb.ParseStorage(repoDB, storeController, log.NewLogger("debug", "")) + err := meta.ParseStorage(metaDB, storeController, log.NewLogger("debug", "")) So(err, ShouldNotBeNil) }) }) @@ -77,7 +73,7 @@ func TestParseStorageErrors(t *testing.T) { Convey("Parse Repo", t, func() { imageStore := mocks.MockedImageStore{} storeController := storage.StoreController{DefaultStore: &imageStore} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} log := log.NewLogger("debug", "") Convey("imageStore.GetIndexContent errors", func() { @@ -85,7 +81,7 @@ func TestParseStorageErrors(t *testing.T) { return nil, ErrTestError } - err := repodb.ParseRepo("repo", repoDB, storeController, log) + err := meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) @@ -94,7 +90,7 @@ func TestParseStorageErrors(t *testing.T) { return []byte("Invalid JSON"), nil } - err := repodb.ParseRepo("repo", repoDB, storeController, log) + err := meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) @@ -103,12 +99,12 @@ func TestParseStorageErrors(t *testing.T) { return []byte("{}"), nil } - Convey("repoDB.GetRepoMeta errors", func() { - repoDB.GetRepoMetaFn = func(repo string) (repodb.RepoMetadata, error) { - return repodb.RepoMetadata{}, ErrTestError + Convey("metaDB.GetRepoMeta errors", func() { + metaDB.GetRepoMetaFn = func(repo string) (mTypes.RepoMetadata, error) { + return mTypes.RepoMetadata{}, ErrTestError } - err := repodb.ParseRepo("repo", repoDB, storeController, log) + err := meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) }) @@ -132,12 +128,12 @@ func TestParseStorageErrors(t *testing.T) { return indexBlob, nil } - Convey("repoDB.GetManifestMeta errors", func() { - repoDB.GetManifestMetaFn = func(repo string, manifestDigest godigest.Digest) (repodb.ManifestMetadata, error) { - return repodb.ManifestMetadata{}, ErrTestError + Convey("metaDB.GetManifestMeta errors", func() { + metaDB.GetManifestMetaFn = func(repo string, manifestDigest godigest.Digest) (mTypes.ManifestMetadata, error) { + return mTypes.ManifestMetadata{}, ErrTestError } - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) }) @@ -161,12 +157,12 @@ func TestParseStorageErrors(t *testing.T) { return indexBlob, nil } - Convey("repoDB.SetRepoReference", func() { - repoDB.SetRepoReferenceFn = func(repo, tag string, manifestDigest godigest.Digest, mediaType string) error { + Convey("metaDB.SetRepoReference", func() { + metaDB.SetRepoReferenceFn = func(repo, tag string, manifestDigest godigest.Digest, mediaType string) error { return ErrTestError } - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) }) @@ -190,15 +186,15 @@ func TestParseStorageErrors(t *testing.T) { return indexBlob, nil } - repoDB.GetManifestMetaFn = func(repo string, manifestDigest godigest.Digest) (repodb.ManifestMetadata, error) { - return repodb.ManifestMetadata{}, zerr.ErrManifestMetaNotFound + metaDB.GetManifestMetaFn = func(repo string, manifestDigest godigest.Digest) (mTypes.ManifestMetadata, error) { + return mTypes.ManifestMetadata{}, zerr.ErrManifestMetaNotFound } Convey("GetImageManifest errors", func() { imageStore.GetImageManifestFn = func(repo, reference string) ([]byte, godigest.Digest, string, error) { return nil, "", "", ErrTestError } - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) @@ -207,7 +203,7 @@ func TestParseStorageErrors(t *testing.T) { imageStore.GetImageManifestFn = func(repo, reference string) ([]byte, godigest.Digest, string, error) { return []byte("Invalid JSON"), "", "", nil } - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) Convey("CheckIsImageSignature -> not signature", func() { @@ -224,7 +220,7 @@ func TestParseStorageErrors(t *testing.T) { return nil, ErrTestError } - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) @@ -233,7 +229,7 @@ func TestParseStorageErrors(t *testing.T) { return []byte("invalid JSON"), nil } - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) }) @@ -254,27 +250,27 @@ func TestParseStorageErrors(t *testing.T) { return manifestBlob, "", "", nil } - repoDB.AddManifestSignatureFn = func(repo string, signedManifestDigest godigest.Digest, - sm repodb.SignatureMetadata, + metaDB.AddManifestSignatureFn = func(repo string, signedManifestDigest godigest.Digest, + sm mTypes.SignatureMetadata, ) error { return ErrTestError } - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) - repoDB.AddManifestSignatureFn = func(repo string, signedManifestDigest godigest.Digest, - sm repodb.SignatureMetadata, + metaDB.AddManifestSignatureFn = func(repo string, signedManifestDigest godigest.Digest, + sm mTypes.SignatureMetadata, ) error { return nil } - repoDB.UpdateSignaturesValidityFn = func(repo string, signedManifestDigest godigest.Digest, + metaDB.UpdateSignaturesValidityFn = func(repo string, signedManifestDigest godigest.Digest, ) error { return ErrTestError } - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) @@ -295,7 +291,7 @@ func TestParseStorageErrors(t *testing.T) { } // wrong number of layers of notation manifest - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) notationManifestContent := ispec.Manifest{ @@ -318,7 +314,7 @@ func TestParseStorageErrors(t *testing.T) { } // unable to get layer content - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) _, _, cosignManifestContent, _ := test.GetRandomImageComponents(10) @@ -354,7 +350,7 @@ func TestParseStorageErrors(t *testing.T) { } // unable to get layer content - err = repodb.ParseRepo("repo", repoDB, storeController, log) + err = meta.ParseRepo("repo", metaDB, storeController, log) So(err, ShouldNotBeNil) }) }) @@ -365,15 +361,15 @@ func TestParseStorageWithBoltDB(t *testing.T) { Convey("Boltdb", t, func() { rootDir := t.TempDir() - boltDB, err := bolt.GetBoltDriver(bolt.DBParameters{ + boltDB, err := boltdb.GetBoltDriver(boltdb.DBParameters{ RootDir: rootDir, }) So(err, ShouldBeNil) - repoDB, err := bolt_wrapper.NewBoltDBWrapper(boltDB, log.NewLogger("debug", "")) + metaDB, err := boltdb.New(boltDB, log.NewLogger("debug", "")) So(err, ShouldBeNil) - RunParseStorageTests(rootDir, repoDB) + RunParseStorageTests(rootDir, metaDB) }) } @@ -383,7 +379,7 @@ func TestParseStorageDynamoWrapper(t *testing.T) { Convey("Dynamodb", t, func() { rootDir := t.TempDir() - params := dynamo.DBDriverParameters{ + params := dynamodb.DBDriverParameters{ Endpoint: os.Getenv("DYNAMODBMOCK_ENDPOINT"), Region: "us-east-2", RepoMetaTablename: "RepoMetadataTable", @@ -394,10 +390,10 @@ func TestParseStorageDynamoWrapper(t *testing.T) { VersionTablename: "Version", } - dynamoClient, err := dynamo.GetDynamoClient(params) + dynamoClient, err := dynamodb.GetDynamoClient(params) So(err, ShouldBeNil) - dynamoWrapper, err := dynamo_wrapper.NewDynamoDBWrapper(dynamoClient, params, log.NewLogger("debug", "")) + dynamoWrapper, err := dynamodb.New(dynamoClient, params, log.NewLogger("debug", "")) So(err, ShouldBeNil) err = dynamoWrapper.ResetManifestDataTable() @@ -410,7 +406,7 @@ func TestParseStorageDynamoWrapper(t *testing.T) { }) } -func RunParseStorageTests(rootDir string, repoDB repodb.RepoDB) { +func RunParseStorageTests(rootDir string, metaDB mTypes.MetaDB) { Convey("Test with simple case", func() { imageStore := local.NewImageStore(rootDir, false, 0, false, false, log.NewLogger("debug", ""), monitoring.NewMetricsServer(false, log.NewLogger("debug", "")), nil, nil) @@ -481,13 +477,13 @@ func RunParseStorageTests(rootDir string, repoDB repodb.RepoDB) { err = os.WriteFile(indexPath, buf, 0o600) So(err, ShouldBeNil) - err = repodb.ParseStorage(repoDB, storeController, log.NewLogger("debug", "")) + err = meta.ParseStorage(metaDB, storeController, log.NewLogger("debug", "")) So(err, ShouldBeNil) - repos, err := repoDB.GetMultipleRepoMeta( + repos, err := metaDB.GetMultipleRepoMeta( context.Background(), - func(repoMeta repodb.RepoMetadata) bool { return true }, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata) bool { return true }, + mTypes.PageInput{}, ) So(err, ShouldBeNil) @@ -495,7 +491,7 @@ func RunParseStorageTests(rootDir string, repoDB repodb.RepoDB) { So(len(repos[0].Tags), ShouldEqual, 2) for _, descriptor := range repos[0].Tags { - manifestMeta, err := repoDB.GetManifestMeta(repo, godigest.Digest(descriptor.Digest)) + manifestMeta, err := metaDB.GetManifestMeta(repo, godigest.Digest(descriptor.Digest)) So(err, ShouldBeNil) So(manifestMeta.ManifestBlob, ShouldNotBeNil) So(manifestMeta.ConfigBlob, ShouldNotBeNil) @@ -551,13 +547,13 @@ func RunParseStorageTests(rootDir string, repoDB repodb.RepoDB) { storeController) So(err, ShouldBeNil) - err = repodb.ParseStorage(repoDB, storeController, log.NewLogger("debug", "")) + err = meta.ParseStorage(metaDB, storeController, log.NewLogger("debug", "")) So(err, ShouldBeNil) - repos, err := repoDB.GetMultipleRepoMeta( + repos, err := metaDB.GetMultipleRepoMeta( context.Background(), - func(repoMeta repodb.RepoMetadata) bool { return true }, - repodb.PageInput{}, + func(repoMeta mTypes.RepoMetadata) bool { return true }, + mTypes.PageInput{}, ) So(err, ShouldBeNil) @@ -589,28 +585,28 @@ func RunParseStorageTests(rootDir string, repoDB repodb.RepoDB) { storeController) So(err, ShouldBeNil) - err = repoDB.SetRepoReference(repo, "tag", manifestDigest, ispec.MediaTypeImageManifest) + err = metaDB.SetRepoReference(repo, "tag", manifestDigest, ispec.MediaTypeImageManifest) So(err, ShouldBeNil) - err = repoDB.IncrementRepoStars(repo) + err = metaDB.IncrementRepoStars(repo) So(err, ShouldBeNil) - err = repoDB.IncrementImageDownloads(repo, "tag") + err = metaDB.IncrementImageDownloads(repo, "tag") So(err, ShouldBeNil) - err = repoDB.IncrementImageDownloads(repo, "tag") + err = metaDB.IncrementImageDownloads(repo, "tag") So(err, ShouldBeNil) - err = repoDB.IncrementImageDownloads(repo, "tag") + err = metaDB.IncrementImageDownloads(repo, "tag") So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta(repo) + repoMeta, err := metaDB.GetRepoMeta(repo) So(err, ShouldBeNil) So(repoMeta.Statistics[manifestDigest.String()].DownloadCount, ShouldEqual, 3) So(repoMeta.Stars, ShouldEqual, 1) - err = repodb.ParseStorage(repoDB, storeController, log.NewLogger("debug", "")) + err = meta.ParseStorage(metaDB, storeController, log.NewLogger("debug", "")) So(err, ShouldBeNil) - repoMeta, err = repoDB.GetRepoMeta(repo) + repoMeta, err = metaDB.GetRepoMeta(repo) So(err, ShouldBeNil) So(repoMeta.Statistics[manifestDigest.String()].DownloadCount, ShouldEqual, 3) @@ -618,12 +614,12 @@ func RunParseStorageTests(rootDir string, repoDB repodb.RepoDB) { }) } -func TestGetReferredSubject(t *testing.T) { - Convey("GetReferredSubject error", t, func() { - _, _, _, err := repodb.GetReferredSubject([]byte("bad json"), "digest", ispec.MediaTypeImageManifest) +func TestGetReferredInfo(t *testing.T) { + Convey("GetReferredInfo error", t, func() { + _, _, _, err := meta.GetReferredInfo([]byte("bad json"), "digest", ispec.MediaTypeImageManifest) So(err, ShouldNotBeNil) - _, _, _, err = repodb.GetReferredSubject([]byte("bad json"), "digest", ispec.MediaTypeImageIndex) + _, _, _, err = meta.GetReferredInfo([]byte("bad json"), "digest", ispec.MediaTypeImageIndex) So(err, ShouldNotBeNil) }) } @@ -638,18 +634,18 @@ func skipIt(t *testing.T) { func TestGetSignatureLayersInfo(t *testing.T) { Convey("wrong signature type", t, func() { - layers, err := repodb.GetSignatureLayersInfo("repo", "tag", "123", "wrong signature type", []byte{}, + layers, err := meta.GetSignatureLayersInfo("repo", "tag", "123", "wrong signature type", []byte{}, nil, log.NewLogger("debug", "")) So(err, ShouldBeNil) So(layers, ShouldBeEmpty) }) Convey("error while unmarshaling manifest content", t, func() { - _, err := repodb.GetSignatureLayersInfo("repo", "tag", "123", signatures.CosignSignature, []byte("bad manifest"), + _, err := meta.GetSignatureLayersInfo("repo", "tag", "123", signatures.CosignSignature, []byte("bad manifest"), nil, log.NewLogger("debug", "")) So(err, ShouldNotBeNil) - _, err = repodb.GetSignatureLayersInfo("repo", "tag", "123", signatures.NotationSignature, []byte("bad manifest"), + _, err = meta.GetSignatureLayersInfo("repo", "tag", "123", signatures.NotationSignature, []byte("bad manifest"), nil, log.NewLogger("debug", "")) So(err, ShouldNotBeNil) }) diff --git a/pkg/meta/repodb/common.go b/pkg/meta/types/sort_criteria.go similarity index 52% rename from pkg/meta/repodb/common.go rename to pkg/meta/types/sort_criteria.go index f9119978..9d62f737 100644 --- a/pkg/meta/repodb/common.go +++ b/pkg/meta/types/sort_criteria.go @@ -1,24 +1,16 @@ -package repodb +package types -import ( - "time" +type SortCriteria string - godigest "github.com/opencontainers/go-digest" - ispec "github.com/opencontainers/image-spec/specs-go/v1" - - zerr "zotregistry.io/zot/errors" +const ( + Relevance = SortCriteria("RELEVANCE") + UpdateTime = SortCriteria("UPDATE_TIME") + AlphabeticAsc = SortCriteria("ALPHABETIC_ASC") + AlphabeticDsc = SortCriteria("ALPHABETIC_DSC") + Stars = SortCriteria("STARS") + Downloads = SortCriteria("DOWNLOADS") ) -// DetailedRepoMeta is a auxiliary structure used for sorting RepoMeta arrays by information -// that's not directly available in the RepoMetadata structure (ex. that needs to be calculated -// by iterating the manifests, etc.) -type DetailedRepoMeta struct { - RepoMetadata - Rank int - Downloads int - UpdateTime time.Time -} - func SortFunctions() map[SortCriteria]func(pageBuffer []DetailedRepoMeta) func(i, j int) bool { return map[SortCriteria]func(pageBuffer []DetailedRepoMeta) func(i, j int) bool{ AlphabeticAsc: SortByAlphabeticAsc, @@ -60,33 +52,3 @@ func SortByDownloads(pageBuffer []DetailedRepoMeta) func(i, j int) bool { return pageBuffer[i].Downloads > pageBuffer[j].Downloads } } - -// FindMediaTypeForDigest will look into the buckets for a certain digest. Depending on which bucket that -// digest is found the corresponding mediatype is returned. -func FindMediaTypeForDigest(repoDB RepoDB, digest godigest.Digest) (bool, string) { - _, err := repoDB.GetManifestData(digest) - if err == nil { - return true, ispec.MediaTypeImageManifest - } - - _, err = repoDB.GetIndexData(digest) - if err == nil { - return true, ispec.MediaTypeImageIndex - } - - return false, "" -} - -func GetImageDescriptor(repoDB RepoDB, repo, tag string) (Descriptor, error) { - repoMeta, err := repoDB.GetRepoMeta(repo) - if err != nil { - return Descriptor{}, err - } - - imageDescriptor, ok := repoMeta.Tags[tag] - if !ok { - return Descriptor{}, zerr.ErrTagMetaNotFound - } - - return imageDescriptor, nil -} diff --git a/pkg/meta/repodb/repodb.go b/pkg/meta/types/types.go similarity index 95% rename from pkg/meta/repodb/repodb.go rename to pkg/meta/types/types.go index f88139ea..68097eb3 100644 --- a/pkg/meta/repodb/repodb.go +++ b/pkg/meta/types/types.go @@ -1,4 +1,4 @@ -package repodb +package types import ( "context" @@ -9,6 +9,16 @@ import ( "zotregistry.io/zot/pkg/common" ) +// DetailedRepoMeta is a auxiliary structure used for sorting RepoMeta arrays by information +// that's not directly available in the RepoMetadata structure (ex. that needs to be calculated +// by iterating the manifests, etc.) +type DetailedRepoMeta struct { + RepoMetadata + Rank int + Downloads int + UpdateTime time.Time +} + // Used to model changes to an object after a call to the DB. type ToggleState int @@ -23,7 +33,7 @@ type ( FilterRepoFunc func(repoMeta RepoMetadata) bool ) -type RepoDB interface { //nolint:interfacebloat +type MetaDB interface { //nolint:interfacebloat UserDB // IncrementRepoStars adds 1 to the star count of an image IncrementRepoStars(repo string) error @@ -217,16 +227,12 @@ type SignatureMetadata struct { LayersInfo []LayerInfo } -type SortCriteria string - -const ( - Relevance = SortCriteria("RELEVANCE") - UpdateTime = SortCriteria("UPDATE_TIME") - AlphabeticAsc = SortCriteria("ALPHABETIC_ASC") - AlphabeticDsc = SortCriteria("ALPHABETIC_DSC") - Stars = SortCriteria("STARS") - Downloads = SortCriteria("DOWNLOADS") -) +type UserData struct { + StarredRepos []string + BookmarkedRepos []string + Groups []string + APIKeys map[string]APIKeyDetails +} type PageInput struct { Limit int @@ -252,13 +258,6 @@ type FilterData struct { IsBookmarked bool } -type UserData struct { - StarredRepos []string - BookmarkedRepos []string - Groups []string - APIKeys map[string]APIKeyDetails -} - type APIKeyDetails struct { CreatedAt time.Time `json:"createdAt"` CreatorUA string `json:"creatorUa"` diff --git a/pkg/meta/update.go b/pkg/meta/update.go index be537940..e3218745 100644 --- a/pkg/meta/update.go +++ b/pkg/meta/update.go @@ -5,15 +5,15 @@ import ( "zotregistry.io/zot/pkg/log" "zotregistry.io/zot/pkg/meta/common" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" ) -// OnUpdateManifest is called when a new manifest is added. It updates repodb according to the type +// OnUpdateManifest is called when a new manifest is added. It updates metadb according to the type // of image pushed(normal images, signatues, etc.). In care of any errors, it makes sure to keep -// consistency between repodb and the image store. +// consistency between metadb and the image store. func OnUpdateManifest(repo, reference, mediaType string, digest godigest.Digest, body []byte, - storeController storage.StoreController, repoDB repodb.RepoDB, log log.Logger, + storeController storage.StoreController, metaDB mTypes.MetaDB, log log.Logger, ) error { imgStore := storeController.GetImageStore(repo) @@ -34,32 +34,32 @@ func OnUpdateManifest(repo, reference, mediaType string, digest godigest.Digest, metadataSuccessfullySet := true if isSignature { - layersInfo, errGetLayers := repodb.GetSignatureLayersInfo(repo, reference, digest.String(), signatureType, body, + layersInfo, errGetLayers := GetSignatureLayersInfo(repo, reference, digest.String(), signatureType, body, imgStore, log) if errGetLayers != nil { metadataSuccessfullySet = false err = errGetLayers } else { - err = repoDB.AddManifestSignature(repo, signedManifestDigest, repodb.SignatureMetadata{ + err = metaDB.AddManifestSignature(repo, signedManifestDigest, mTypes.SignatureMetadata{ SignatureType: signatureType, SignatureDigest: digest.String(), LayersInfo: layersInfo, }) if err != nil { - log.Error().Err(err).Msg("repodb: error while putting repo meta") + log.Error().Err(err).Msg("metadb: error while putting repo meta") metadataSuccessfullySet = false } else { - err = repoDB.UpdateSignaturesValidity(repo, signedManifestDigest) + err = metaDB.UpdateSignaturesValidity(repo, signedManifestDigest) if err != nil { log.Error().Err(err).Str("repository", repo).Str("reference", reference).Str("digest", - signedManifestDigest.String()).Msg("repodb: failed verify signatures validity for signed image") + signedManifestDigest.String()).Msg("metadb: failed verify signatures validity for signed image") metadataSuccessfullySet = false } } } } else { - err := repodb.SetImageMetaFromInput(repo, reference, mediaType, digest, body, - imgStore, repoDB, log) + err := SetImageMetaFromInput(repo, reference, mediaType, digest, body, + imgStore, metaDB, log) if err != nil { metadataSuccessfullySet = false } @@ -81,11 +81,11 @@ func OnUpdateManifest(repo, reference, mediaType string, digest godigest.Digest, return nil } -// OnDeleteManifest is called when a manifest is deleted. It updates repodb according to the type +// OnDeleteManifest is called when a manifest is deleted. It updates metadb according to the type // of image pushed(normal images, signatues, etc.). In care of any errors, it makes sure to keep -// consistency between repodb and the image store. +// consistency between metadb and the image store. func OnDeleteManifest(repo, reference, mediaType string, digest godigest.Digest, manifestBlob []byte, - storeController storage.StoreController, repoDB repodb.RepoDB, log log.Logger, + storeController storage.StoreController, metaDB mTypes.MetaDB, log log.Logger, ) error { imgStore := storeController.GetImageStore(repo) @@ -100,32 +100,32 @@ func OnDeleteManifest(repo, reference, mediaType string, digest godigest.Digest, manageRepoMetaSuccessfully := true if isSignature { - err = repoDB.DeleteSignature(repo, signedManifestDigest, repodb.SignatureMetadata{ + err = metaDB.DeleteSignature(repo, signedManifestDigest, mTypes.SignatureMetadata{ SignatureDigest: digest.String(), SignatureType: signatureType, }) if err != nil { - log.Error().Err(err).Msg("repodb: can't check if image is a signature or not") + log.Error().Err(err).Msg("metadb: can't check if image is a signature or not") manageRepoMetaSuccessfully = false } } else { - err = repoDB.DeleteRepoTag(repo, reference) + err = metaDB.DeleteRepoTag(repo, reference) if err != nil { - log.Info().Msg("repodb: restoring image store") + log.Info().Msg("metadb: restoring image store") // restore image store _, _, err := imgStore.PutImageManifest(repo, reference, mediaType, manifestBlob) if err != nil { - log.Error().Err(err).Msg("repodb: error while restoring image store, database is not consistent") + log.Error().Err(err).Msg("metadb: error while restoring image store, database is not consistent") } manageRepoMetaSuccessfully = false } if refferredDigest, hasSubject := common.GetReferredSubject(manifestBlob); hasSubject { - err := repoDB.DeleteReferrer(repo, refferredDigest, digest) + err := metaDB.DeleteReferrer(repo, refferredDigest, digest) if err != nil { - log.Error().Err(err).Msg("repodb: error while deleting referrer") + log.Error().Err(err).Msg("metadb: error while deleting referrer") return err } @@ -134,7 +134,7 @@ func OnDeleteManifest(repo, reference, mediaType string, digest godigest.Digest, if !manageRepoMetaSuccessfully { log.Info().Str("tag", reference).Str("repository", repo). - Msg("repodb: deleting image meta was unsuccessful for tag in repo") + Msg("metadb: deleting image meta was unsuccessful for tag in repo") return err } @@ -144,7 +144,7 @@ func OnDeleteManifest(repo, reference, mediaType string, digest godigest.Digest, // OnDeleteManifest is called when a manifest is downloaded. It increments the download couter on that manifest. func OnGetManifest(name, reference string, body []byte, - storeController storage.StoreController, repoDB repodb.RepoDB, log log.Logger, + storeController storage.StoreController, metaDB mTypes.MetaDB, log log.Logger, ) error { // check if image is a signature isSignature, _, _, err := storage.CheckIsImageSignature(name, body, reference) @@ -155,7 +155,7 @@ func OnGetManifest(name, reference string, body []byte, } if !isSignature { - err := repoDB.IncrementImageDownloads(name, reference) + err := metaDB.IncrementImageDownloads(name, reference) if err != nil { log.Error().Err(err).Str("repository", name).Str("reference", reference). Msg("unexpected error for image") diff --git a/pkg/meta/update_test.go b/pkg/meta/update_test.go index 688065b8..253aed0a 100644 --- a/pkg/meta/update_test.go +++ b/pkg/meta/update_test.go @@ -15,9 +15,8 @@ import ( "zotregistry.io/zot/pkg/extensions/monitoring" "zotregistry.io/zot/pkg/log" "zotregistry.io/zot/pkg/meta" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/repodb" - bolt_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" + "zotregistry.io/zot/pkg/meta/boltdb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" "zotregistry.io/zot/pkg/storage/local" "zotregistry.io/zot/pkg/test" @@ -36,13 +35,13 @@ func TestOnUpdateManifest(t *testing.T) { true, true, log, metrics, nil, nil, ) - params := bolt.DBParameters{ + params := boltdb.DBParameters{ RootDir: rootDir, } - boltDriver, err := bolt.GetBoltDriver(params) + boltDriver, err := boltdb.GetBoltDriver(params) So(err, ShouldBeNil) - repoDB, err := bolt_wrapper.NewBoltDBWrapper(boltDriver, log) + metaDB, err := boltdb.New(boltDriver, log) So(err, ShouldBeNil) config, layers, manifest, err := test.GetRandomImageComponents(100) @@ -61,10 +60,10 @@ func TestOnUpdateManifest(t *testing.T) { digest := godigest.FromBytes(manifestBlob) - err = meta.OnUpdateManifest("repo", "tag1", "", digest, manifestBlob, storeController, repoDB, log) + err = meta.OnUpdateManifest("repo", "tag1", "", digest, manifestBlob, storeController, metaDB, log) So(err, ShouldBeNil) - repoMeta, err := repoDB.GetRepoMeta("repo") + repoMeta, err := metaDB.GetRepoMeta("repo") So(err, ShouldBeNil) So(repoMeta.Tags, ShouldContainKey, "tag1") @@ -79,14 +78,14 @@ func TestOnUpdateManifest(t *testing.T) { true, true, log, metrics, nil, nil, ) - repoDB := mocks.RepoDBMock{ - SetManifestDataFn: func(manifestDigest godigest.Digest, mm repodb.ManifestData) error { + metaDB := mocks.MetaDBMock{ + SetManifestDataFn: func(manifestDigest godigest.Digest, mm mTypes.ManifestData) error { return ErrTestError }, } err := meta.OnUpdateManifest("repo", "tag1", ispec.MediaTypeImageManifest, "digest", - []byte("{}"), storeController, repoDB, log) + []byte("{}"), storeController, metaDB, log) So(err, ShouldNotBeNil) }) } @@ -96,7 +95,7 @@ func TestUpdateErrors(t *testing.T) { Convey("On UpdateManifest", func() { imageStore := mocks.MockedImageStore{} storeController := storage.StoreController{DefaultStore: &imageStore} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} log := log.NewLogger("debug", "") Convey("CheckIsImageSignature errors", func() { @@ -111,7 +110,7 @@ func TestUpdateErrors(t *testing.T) { } err := meta.OnUpdateManifest("repo", "tag1", "digest", "media", badManifestBlob, - storeController, repoDB, log) + storeController, metaDB, log) So(err, ShouldNotBeNil) }) @@ -132,7 +131,7 @@ func TestUpdateErrors(t *testing.T) { } err = meta.OnUpdateManifest("repo", "tag1", "", "digest", badNotationManifestBlob, - storeController, repoDB, log) + storeController, metaDB, log) So(err, ShouldNotBeNil) }) @@ -159,12 +158,12 @@ func TestUpdateErrors(t *testing.T) { return []byte{}, nil } - repoDB.UpdateSignaturesValidityFn = func(repo string, manifestDigest godigest.Digest) error { + metaDB.UpdateSignaturesValidityFn = func(repo string, manifestDigest godigest.Digest) error { return ErrTestError } err = meta.OnUpdateManifest("repo", "tag1", "", "digest", notationManifestBlob, - storeController, repoDB, log) + storeController, metaDB, log) So(err, ShouldNotBeNil) }) }) @@ -172,7 +171,7 @@ func TestUpdateErrors(t *testing.T) { Convey("On DeleteManifest", func() { imageStore := mocks.MockedImageStore{} storeController := storage.StoreController{DefaultStore: &imageStore} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} log := log.NewLogger("debug", "") Convey("CheckIsImageSignature errors", func() { @@ -183,18 +182,18 @@ func TestUpdateErrors(t *testing.T) { } err := meta.OnDeleteManifest("repo", "tag1", "digest", "media", badManifestBlob, - storeController, repoDB, log) + storeController, metaDB, log) So(err, ShouldNotBeNil) }) Convey("DeleteReferrers errors", func() { - repoDB.DeleteReferrerFn = func(repo string, referredDigest, referrerDigest godigest.Digest) error { + metaDB.DeleteReferrerFn = func(repo string, referredDigest, referrerDigest godigest.Digest) error { return ErrTestError } err := meta.OnDeleteManifest("repo", "tag1", "digest", "media", []byte(`{"subject": {"digest": "dig"}}`), - storeController, repoDB, log) + storeController, metaDB, log) So(err, ShouldNotBeNil) }) }) @@ -202,7 +201,7 @@ func TestUpdateErrors(t *testing.T) { Convey("On GetManifest", func() { imageStore := mocks.MockedImageStore{} storeController := storage.StoreController{DefaultStore: &imageStore} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} log := log.NewLogger("debug", "") Convey("CheckIsImageSignature errors", func() { @@ -213,18 +212,18 @@ func TestUpdateErrors(t *testing.T) { } err := meta.OnGetManifest("repo", "tag1", badManifestBlob, - storeController, repoDB, log) + storeController, metaDB, log) So(err, ShouldNotBeNil) }) }) Convey("SetImageMetaFromInput", func() { imageStore := mocks.MockedImageStore{} - repoDB := mocks.RepoDBMock{} + metaDB := mocks.MetaDBMock{} log := log.NewLogger("debug", "") - err := repodb.SetImageMetaFromInput("repo", "ref", ispec.MediaTypeImageManifest, "digest", - []byte("BadManifestBlob"), imageStore, repoDB, log) + err := meta.SetImageMetaFromInput("repo", "ref", ispec.MediaTypeImageManifest, "digest", + []byte("BadManifestBlob"), imageStore, metaDB, log) So(err, ShouldNotBeNil) // reference is digest @@ -240,8 +239,8 @@ func TestUpdateErrors(t *testing.T) { return []byte("{}"), nil } - err = repodb.SetImageMetaFromInput("repo", string(godigest.FromString("reference")), "", "digest", - manifestBlob, imageStore, repoDB, log) + err = meta.SetImageMetaFromInput("repo", string(godigest.FromString("reference")), "", "digest", + manifestBlob, imageStore, metaDB, log) So(err, ShouldBeNil) }) @@ -249,13 +248,13 @@ func TestUpdateErrors(t *testing.T) { imageStore := mocks.MockedImageStore{} log := log.NewLogger("debug", "") - repoDB := mocks.RepoDBMock{ - SetManifestDataFn: func(manifestDigest godigest.Digest, mm repodb.ManifestData) error { + metaDB := mocks.MetaDBMock{ + SetManifestDataFn: func(manifestDigest godigest.Digest, mm mTypes.ManifestData) error { return ErrTestError }, } - err := repodb.SetImageMetaFromInput("repo", "ref", ispec.MediaTypeImageManifest, "digest", - []byte("{}"), imageStore, repoDB, log) + err := meta.SetImageMetaFromInput("repo", "ref", ispec.MediaTypeImageManifest, "digest", + []byte("{}"), imageStore, metaDB, log) So(err, ShouldNotBeNil) }) @@ -263,13 +262,13 @@ func TestUpdateErrors(t *testing.T) { imageStore := mocks.MockedImageStore{} log := log.NewLogger("debug", "") - repoDB := mocks.RepoDBMock{ - SetIndexDataFn: func(digest godigest.Digest, indexData repodb.IndexData) error { + metaDB := mocks.MetaDBMock{ + SetIndexDataFn: func(digest godigest.Digest, indexData mTypes.IndexData) error { return ErrTestError }, } - err := repodb.SetImageMetaFromInput("repo", "ref", ispec.MediaTypeImageIndex, "digest", - []byte("{}"), imageStore, repoDB, log) + err := meta.SetImageMetaFromInput("repo", "ref", ispec.MediaTypeImageIndex, "digest", + []byte("{}"), imageStore, metaDB, log) So(err, ShouldNotBeNil) }) @@ -281,14 +280,14 @@ func TestUpdateErrors(t *testing.T) { } log := log.NewLogger("debug", "") - repoDB := mocks.RepoDBMock{ - SetReferrerFn: func(repo string, referredDigest godigest.Digest, referrer repodb.ReferrerInfo) error { + metaDB := mocks.MetaDBMock{ + SetReferrerFn: func(repo string, referredDigest godigest.Digest, referrer mTypes.ReferrerInfo) error { return ErrTestError }, } - err := repodb.SetImageMetaFromInput("repo", "ref", ispec.MediaTypeImageManifest, "digest", - []byte(`{"subject": {"digest": "subjDigest"}}`), imageStore, repoDB, log) + err := meta.SetImageMetaFromInput("repo", "ref", ispec.MediaTypeImageManifest, "digest", + []byte(`{"subject": {"digest": "subjDigest"}}`), imageStore, metaDB, log) So(err, ShouldNotBeNil) }) }) diff --git a/pkg/meta/version/version_test.go b/pkg/meta/version/version_test.go index 12ee2ba0..1021296a 100644 --- a/pkg/meta/version/version_test.go +++ b/pkg/meta/version/version_test.go @@ -14,10 +14,8 @@ import ( "go.etcd.io/bbolt" "zotregistry.io/zot/pkg/log" - "zotregistry.io/zot/pkg/meta/bolt" - "zotregistry.io/zot/pkg/meta/dynamo" - boltdb_wrapper "zotregistry.io/zot/pkg/meta/repodb/boltdb-wrapper" - dynamodb_wrapper "zotregistry.io/zot/pkg/meta/repodb/dynamodb-wrapper" + "zotregistry.io/zot/pkg/meta/boltdb" + mdynamodb "zotregistry.io/zot/pkg/meta/dynamodb" "zotregistry.io/zot/pkg/meta/version" ) @@ -26,13 +24,13 @@ var ErrTestError = errors.New("test error") func TestVersioningBoltDB(t *testing.T) { Convey("Tests", t, func() { tmpDir := t.TempDir() - boltDBParams := bolt.DBParameters{RootDir: tmpDir} - boltDriver, err := bolt.GetBoltDriver(boltDBParams) + boltDBParams := boltdb.DBParameters{RootDir: tmpDir} + boltDriver, err := boltdb.GetBoltDriver(boltDBParams) So(err, ShouldBeNil) log := log.NewLogger("debug", "") - boltdbWrapper, err := boltdb_wrapper.NewBoltDBWrapper(boltDriver, log) + boltdbWrapper, err := boltdb.New(boltDriver, log) defer os.Remove("repo.db") So(boltdbWrapper, ShouldNotBeNil) So(err, ShouldBeNil) @@ -59,7 +57,7 @@ func TestVersioningBoltDB(t *testing.T) { Convey("DBVersion is empty", func() { err := boltdbWrapper.DB.Update(func(tx *bbolt.Tx) error { - versionBuck := tx.Bucket([]byte(bolt.VersionBucket)) + versionBuck := tx.Bucket([]byte(boltdb.VersionBucket)) return versionBuck.Put([]byte(version.DBVersionKey), []byte("")) }) @@ -105,7 +103,7 @@ func TestVersioningBoltDB(t *testing.T) { func setBoltDBVersion(db *bbolt.DB, vers string) error { err := db.Update(func(tx *bbolt.Tx) error { - versionBuck := tx.Bucket([]byte(bolt.VersionBucket)) + versionBuck := tx.Bucket([]byte(boltdb.VersionBucket)) return versionBuck.Put([]byte(version.DBVersionKey), []byte(vers)) }) @@ -120,7 +118,7 @@ func TestVersioningDynamoDB(t *testing.T) { ) Convey("Tests", t, func() { - params := dynamo.DBDriverParameters{ + params := mdynamodb.DBDriverParameters{ Endpoint: endpoint, Region: region, RepoMetaTablename: "RepoMetadataTable", @@ -131,12 +129,12 @@ func TestVersioningDynamoDB(t *testing.T) { VersionTablename: "Version", } - dynamoClient, err := dynamo.GetDynamoClient(params) + dynamoClient, err := mdynamodb.GetDynamoClient(params) So(err, ShouldBeNil) log := log.NewLogger("debug", "") - dynamoWrapper, err := dynamodb_wrapper.NewDynamoDBWrapper(dynamoClient, params, log) + dynamoWrapper, err := mdynamodb.New(dynamoClient, params, log) So(err, ShouldBeNil) So(dynamoWrapper.ResetManifestDataTable(), ShouldBeNil) diff --git a/pkg/test/common.go b/pkg/test/common.go index d343b96f..e7a03630 100644 --- a/pkg/test/common.go +++ b/pkg/test/common.go @@ -49,7 +49,7 @@ import ( "oras.land/oras-go/v2/registry/remote/auth" zerr "zotregistry.io/zot/errors" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" "zotregistry.io/zot/pkg/storage" storageCommon "zotregistry.io/zot/pkg/storage/common" "zotregistry.io/zot/pkg/test/inject" @@ -133,13 +133,13 @@ func (mi *MultiarchImage) Digest() (godigest.Digest, error) { return godigest.FromBytes(indexBlob), nil } -func (mi *MultiarchImage) IndexData() (repodb.IndexData, error) { +func (mi *MultiarchImage) IndexData() (mTypes.IndexData, error) { indexBlob, err := json.Marshal(mi.Index) if err != nil { - return repodb.IndexData{}, err + return mTypes.IndexData{}, err } - return repodb.IndexData{IndexBlob: indexBlob}, nil + return mTypes.IndexData{IndexBlob: indexBlob}, nil } func GetFreePort() string { diff --git a/pkg/test/mocks/repo_db_mock.go b/pkg/test/mocks/repo_db_mock.go index 1b38cf97..85e7daaf 100644 --- a/pkg/test/mocks/repo_db_mock.go +++ b/pkg/test/mocks/repo_db_mock.go @@ -6,10 +6,10 @@ import ( godigest "github.com/opencontainers/go-digest" "zotregistry.io/zot/pkg/common" - "zotregistry.io/zot/pkg/meta/repodb" + mTypes "zotregistry.io/zot/pkg/meta/types" ) -type RepoDBMock struct { +type MetaDBMock struct { SetRepoDescriptionFn func(repo, description string) error IncrementRepoStarsFn func(repo string) error @@ -24,80 +24,84 @@ type RepoDBMock struct { DeleteRepoTagFn func(repo string, tag string) error - GetRepoMetaFn func(repo string) (repodb.RepoMetadata, error) + GetRepoMetaFn func(repo string) (mTypes.RepoMetadata, error) - GetUserRepoMetaFn func(ctx context.Context, repo string) (repodb.RepoMetadata, error) + GetUserRepoMetaFn func(ctx context.Context, repo string) (mTypes.RepoMetadata, error) - SetRepoMetaFn func(repo string, repoMeta repodb.RepoMetadata) error + SetRepoMetaFn func(repo string, repoMeta mTypes.RepoMetadata) error - GetMultipleRepoMetaFn func(ctx context.Context, filter func(repoMeta repodb.RepoMetadata) bool, - requestedPage repodb.PageInput) ([]repodb.RepoMetadata, error) + GetMultipleRepoMetaFn func(ctx context.Context, filter func(repoMeta mTypes.RepoMetadata) bool, + requestedPage mTypes.PageInput) ([]mTypes.RepoMetadata, error) - GetManifestDataFn func(manifestDigest godigest.Digest) (repodb.ManifestData, error) + GetManifestDataFn func(manifestDigest godigest.Digest) (mTypes.ManifestData, error) - SetManifestDataFn func(manifestDigest godigest.Digest, mm repodb.ManifestData) error + SetManifestDataFn func(manifestDigest godigest.Digest, mm mTypes.ManifestData) error - GetManifestMetaFn func(repo string, manifestDigest godigest.Digest) (repodb.ManifestMetadata, error) + GetManifestMetaFn func(repo string, manifestDigest godigest.Digest) (mTypes.ManifestMetadata, error) - SetManifestMetaFn func(repo string, manifestDigest godigest.Digest, mm repodb.ManifestMetadata) error + SetManifestMetaFn func(repo string, manifestDigest godigest.Digest, mm mTypes.ManifestMetadata) error - SetIndexDataFn func(digest godigest.Digest, indexData repodb.IndexData) error + SetIndexDataFn func(digest godigest.Digest, indexData mTypes.IndexData) error - GetIndexDataFn func(indexDigest godigest.Digest) (repodb.IndexData, error) + GetIndexDataFn func(indexDigest godigest.Digest) (mTypes.IndexData, error) - SetReferrerFn func(repo string, referredDigest godigest.Digest, referrer repodb.ReferrerInfo) error + SetReferrerFn func(repo string, referredDigest godigest.Digest, referrer mTypes.ReferrerInfo) error DeleteReferrerFn func(repo string, referredDigest godigest.Digest, referrerDigest godigest.Digest) error - GetReferrersFn func(repo string, referredDigest godigest.Digest) ([]repodb.Descriptor, error) + GetReferrersFn func(repo string, referredDigest godigest.Digest) ([]mTypes.Descriptor, error) GetReferrersInfoFn func(repo string, referredDigest godigest.Digest, artifactTypes []string) ( - []repodb.ReferrerInfo, error) + []mTypes.ReferrerInfo, error) IncrementImageDownloadsFn func(repo string, reference string) error UpdateSignaturesValidityFn func(repo string, manifestDigest godigest.Digest) error - AddManifestSignatureFn func(repo string, signedManifestDigest godigest.Digest, sm repodb.SignatureMetadata) error + AddManifestSignatureFn func(repo string, signedManifestDigest godigest.Digest, sm mTypes.SignatureMetadata) error - DeleteSignatureFn func(repo string, signedManifestDigest godigest.Digest, sm repodb.SignatureMetadata) error + DeleteSignatureFn func(repo string, signedManifestDigest godigest.Digest, sm mTypes.SignatureMetadata) error - SearchReposFn func(ctx context.Context, searchText string, filter repodb.Filter, requestedPage repodb.PageInput) ( - []repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) + SearchReposFn func(ctx context.Context, txt string, filter mTypes.Filter, requestedPage mTypes.PageInput) ( + []mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, + error) - SearchTagsFn func(ctx context.Context, searchText string, filter repodb.Filter, requestedPage repodb.PageInput) ( - []repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) + SearchTagsFn func(ctx context.Context, txt string, filter mTypes.Filter, requestedPage mTypes.PageInput) ( + []mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, + error) - FilterReposFn func(ctx context.Context, filter repodb.FilterRepoFunc, requestedPage repodb.PageInput) ( - []repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) + FilterReposFn func(ctx context.Context, filter mTypes.FilterRepoFunc, requestedPage mTypes.PageInput) ( + []mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, + error) - FilterTagsFn func(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, - ) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) + FilterTagsFn func(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, + ) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, + error) - SearchDigestsFn func(ctx context.Context, searchText string, requestedPage repodb.PageInput) ( - []repodb.RepoMetadata, map[string]repodb.ManifestMetadata, error) + SearchDigestsFn func(ctx context.Context, searchText string, requestedPage mTypes.PageInput) ( + []mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, error) - SearchLayersFn func(ctx context.Context, searchText string, requestedPage repodb.PageInput) ( - []repodb.RepoMetadata, map[string]repodb.ManifestMetadata, error) + SearchLayersFn func(ctx context.Context, searchText string, requestedPage mTypes.PageInput) ( + []mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, error) - SearchForAscendantImagesFn func(ctx context.Context, searchText string, requestedPage repodb.PageInput) ( - []repodb.RepoMetadata, map[string]repodb.ManifestMetadata, error) + SearchForAscendantImagesFn func(ctx context.Context, searchText string, requestedPage mTypes.PageInput) ( + []mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, error) - SearchForDescendantImagesFn func(ctx context.Context, searchText string, requestedPage repodb.PageInput) ( - []repodb.RepoMetadata, map[string]repodb.ManifestMetadata, error) + SearchForDescendantImagesFn func(ctx context.Context, searchText string, requestedPage mTypes.PageInput) ( + []mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, error) GetStarredReposFn func(ctx context.Context) ([]string, error) GetBookmarkedReposFn func(ctx context.Context) ([]string, error) - ToggleStarRepoFn func(ctx context.Context, repo string) (repodb.ToggleState, error) + ToggleStarRepoFn func(ctx context.Context, repo string) (mTypes.ToggleState, error) - ToggleBookmarkRepoFn func(ctx context.Context, repo string) (repodb.ToggleState, error) + ToggleBookmarkRepoFn func(ctx context.Context, repo string) (mTypes.ToggleState, error) - GetUserDataFn func(ctx context.Context) (repodb.UserData, error) + GetUserDataFn func(ctx context.Context) (mTypes.UserData, error) - SetUserDataFn func(ctx context.Context, userProfile repodb.UserData) error + SetUserDataFn func(ctx context.Context, userProfile mTypes.UserData) error SetUserGroupsFn func(ctx context.Context, groups []string) error @@ -107,7 +111,7 @@ type RepoDBMock struct { GetUserAPIKeyInfoFn func(hashedKey string) (string, error) - AddUserAPIKeyFn func(ctx context.Context, hashedKey string, apiKeyDetails *repodb.APIKeyDetails) error + AddUserAPIKeyFn func(ctx context.Context, hashedKey string, apiKeyDetails *mTypes.APIKeyDetails) error UpdateUserAPIKeyLastUsedFn func(ctx context.Context, hashedKey string) error @@ -116,7 +120,7 @@ type RepoDBMock struct { PatchDBFn func() error } -func (sdm RepoDBMock) SetRepoDescription(repo, description string) error { +func (sdm MetaDBMock) SetRepoDescription(repo, description string) error { if sdm.SetRepoDescriptionFn != nil { return sdm.SetRepoDescriptionFn(repo, description) } @@ -124,7 +128,7 @@ func (sdm RepoDBMock) SetRepoDescription(repo, description string) error { return nil } -func (sdm RepoDBMock) IncrementRepoStars(repo string) error { +func (sdm MetaDBMock) IncrementRepoStars(repo string) error { if sdm.IncrementRepoStarsFn != nil { return sdm.IncrementRepoStarsFn(repo) } @@ -132,7 +136,7 @@ func (sdm RepoDBMock) IncrementRepoStars(repo string) error { return nil } -func (sdm RepoDBMock) DecrementRepoStars(repo string) error { +func (sdm MetaDBMock) DecrementRepoStars(repo string) error { if sdm.DecrementRepoStarsFn != nil { return sdm.DecrementRepoStarsFn(repo) } @@ -140,7 +144,7 @@ func (sdm RepoDBMock) DecrementRepoStars(repo string) error { return nil } -func (sdm RepoDBMock) GetRepoStars(repo string) (int, error) { +func (sdm MetaDBMock) GetRepoStars(repo string) (int, error) { if sdm.GetRepoStarsFn != nil { return sdm.GetRepoStarsFn(repo) } @@ -148,7 +152,7 @@ func (sdm RepoDBMock) GetRepoStars(repo string) (int, error) { return 0, nil } -func (sdm RepoDBMock) SetRepoReference(repo string, reference string, manifestDigest godigest.Digest, +func (sdm MetaDBMock) SetRepoReference(repo string, reference string, manifestDigest godigest.Digest, mediaType string, ) error { if sdm.SetRepoReferenceFn != nil { @@ -158,7 +162,7 @@ func (sdm RepoDBMock) SetRepoReference(repo string, reference string, manifestDi return nil } -func (sdm RepoDBMock) DeleteRepoTag(repo string, tag string) error { +func (sdm MetaDBMock) DeleteRepoTag(repo string, tag string) error { if sdm.DeleteRepoTagFn != nil { return sdm.DeleteRepoTagFn(repo, tag) } @@ -166,23 +170,23 @@ func (sdm RepoDBMock) DeleteRepoTag(repo string, tag string) error { return nil } -func (sdm RepoDBMock) GetRepoMeta(repo string) (repodb.RepoMetadata, error) { +func (sdm MetaDBMock) GetRepoMeta(repo string) (mTypes.RepoMetadata, error) { if sdm.GetRepoMetaFn != nil { return sdm.GetRepoMetaFn(repo) } - return repodb.RepoMetadata{}, nil + return mTypes.RepoMetadata{}, nil } -func (sdm RepoDBMock) GetUserRepoMeta(ctx context.Context, repo string) (repodb.RepoMetadata, error) { +func (sdm MetaDBMock) GetUserRepoMeta(ctx context.Context, repo string) (mTypes.RepoMetadata, error) { if sdm.GetUserRepoMetaFn != nil { return sdm.GetUserRepoMetaFn(ctx, repo) } - return repodb.RepoMetadata{}, nil + return mTypes.RepoMetadata{}, nil } -func (sdm RepoDBMock) SetRepoMeta(repo string, repoMeta repodb.RepoMetadata) error { +func (sdm MetaDBMock) SetRepoMeta(repo string, repoMeta mTypes.RepoMetadata) error { if sdm.SetRepoMetaFn != nil { return sdm.SetRepoMetaFn(repo, repoMeta) } @@ -190,25 +194,25 @@ func (sdm RepoDBMock) SetRepoMeta(repo string, repoMeta repodb.RepoMetadata) err return nil } -func (sdm RepoDBMock) GetMultipleRepoMeta(ctx context.Context, filter func(repoMeta repodb.RepoMetadata) bool, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, error) { +func (sdm MetaDBMock) GetMultipleRepoMeta(ctx context.Context, filter func(repoMeta mTypes.RepoMetadata) bool, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, error) { if sdm.GetMultipleRepoMetaFn != nil { return sdm.GetMultipleRepoMetaFn(ctx, filter, requestedPage) } - return []repodb.RepoMetadata{}, nil + return []mTypes.RepoMetadata{}, nil } -func (sdm RepoDBMock) GetManifestData(manifestDigest godigest.Digest) (repodb.ManifestData, error) { +func (sdm MetaDBMock) GetManifestData(manifestDigest godigest.Digest) (mTypes.ManifestData, error) { if sdm.GetManifestDataFn != nil { return sdm.GetManifestDataFn(manifestDigest) } - return repodb.ManifestData{}, nil + return mTypes.ManifestData{}, nil } -func (sdm RepoDBMock) SetManifestData(manifestDigest godigest.Digest, md repodb.ManifestData) error { +func (sdm MetaDBMock) SetManifestData(manifestDigest godigest.Digest, md mTypes.ManifestData) error { if sdm.SetManifestDataFn != nil { return sdm.SetManifestDataFn(manifestDigest, md) } @@ -216,15 +220,15 @@ func (sdm RepoDBMock) SetManifestData(manifestDigest godigest.Digest, md repodb. return nil } -func (sdm RepoDBMock) GetManifestMeta(repo string, manifestDigest godigest.Digest) (repodb.ManifestMetadata, error) { +func (sdm MetaDBMock) GetManifestMeta(repo string, manifestDigest godigest.Digest) (mTypes.ManifestMetadata, error) { if sdm.GetManifestMetaFn != nil { return sdm.GetManifestMetaFn(repo, manifestDigest) } - return repodb.ManifestMetadata{}, nil + return mTypes.ManifestMetadata{}, nil } -func (sdm RepoDBMock) SetManifestMeta(repo string, manifestDigest godigest.Digest, mm repodb.ManifestMetadata) error { +func (sdm MetaDBMock) SetManifestMeta(repo string, manifestDigest godigest.Digest, mm mTypes.ManifestMetadata) error { if sdm.SetManifestMetaFn != nil { return sdm.SetManifestMetaFn(repo, manifestDigest, mm) } @@ -232,7 +236,7 @@ func (sdm RepoDBMock) SetManifestMeta(repo string, manifestDigest godigest.Diges return nil } -func (sdm RepoDBMock) IncrementImageDownloads(repo string, reference string) error { +func (sdm MetaDBMock) IncrementImageDownloads(repo string, reference string) error { if sdm.IncrementImageDownloadsFn != nil { return sdm.IncrementImageDownloadsFn(repo, reference) } @@ -240,7 +244,7 @@ func (sdm RepoDBMock) IncrementImageDownloads(repo string, reference string) err return nil } -func (sdm RepoDBMock) UpdateSignaturesValidity(repo string, manifestDigest godigest.Digest) error { +func (sdm MetaDBMock) UpdateSignaturesValidity(repo string, manifestDigest godigest.Digest) error { if sdm.UpdateSignaturesValidityFn != nil { return sdm.UpdateSignaturesValidityFn(repo, manifestDigest) } @@ -248,8 +252,8 @@ func (sdm RepoDBMock) UpdateSignaturesValidity(repo string, manifestDigest godig return nil } -func (sdm RepoDBMock) AddManifestSignature(repo string, signedManifestDigest godigest.Digest, - sm repodb.SignatureMetadata, +func (sdm MetaDBMock) AddManifestSignature(repo string, signedManifestDigest godigest.Digest, + sm mTypes.SignatureMetadata, ) error { if sdm.AddManifestSignatureFn != nil { return sdm.AddManifestSignatureFn(repo, signedManifestDigest, sm) @@ -258,8 +262,8 @@ func (sdm RepoDBMock) AddManifestSignature(repo string, signedManifestDigest god return nil } -func (sdm RepoDBMock) DeleteSignature(repo string, signedManifestDigest godigest.Digest, - sm repodb.SignatureMetadata, +func (sdm MetaDBMock) DeleteSignature(repo string, signedManifestDigest godigest.Digest, + sm mTypes.SignatureMetadata, ) error { if sdm.DeleteSignatureFn != nil { return sdm.DeleteSignatureFn(repo, signedManifestDigest, sm) @@ -268,88 +272,89 @@ func (sdm RepoDBMock) DeleteSignature(repo string, signedManifestDigest godigest return nil } -func (sdm RepoDBMock) SearchRepos(ctx context.Context, searchText string, filter repodb.Filter, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { +func (sdm MetaDBMock) SearchRepos(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error) { if sdm.SearchReposFn != nil { return sdm.SearchReposFn(ctx, searchText, filter, requestedPage) } - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, - map[string]repodb.IndexData{}, common.PageInfo{}, nil + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, + map[string]mTypes.IndexData{}, common.PageInfo{}, nil } -func (sdm RepoDBMock) SearchTags(ctx context.Context, searchText string, filter repodb.Filter, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { +func (sdm MetaDBMock) SearchTags(ctx context.Context, searchText string, filter mTypes.Filter, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error) { if sdm.SearchTagsFn != nil { return sdm.SearchTagsFn(ctx, searchText, filter, requestedPage) } - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, - map[string]repodb.IndexData{}, common.PageInfo{}, nil + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, + map[string]mTypes.IndexData{}, common.PageInfo{}, nil } -func (sdm RepoDBMock) FilterRepos(ctx context.Context, filter repodb.FilterRepoFunc, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { +func (sdm MetaDBMock) FilterRepos(ctx context.Context, filter mTypes.FilterRepoFunc, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error) { if sdm.FilterReposFn != nil { return sdm.FilterReposFn(ctx, filter, requestedPage) } - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, - map[string]repodb.IndexData{}, common.PageInfo{}, nil + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, + map[string]mTypes.IndexData{}, common.PageInfo{}, nil } -func (sdm RepoDBMock) FilterTags(ctx context.Context, filterFunc repodb.FilterFunc, filter repodb.Filter, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, map[string]repodb.IndexData, common.PageInfo, error) { +func (sdm MetaDBMock) FilterTags(ctx context.Context, filterFunc mTypes.FilterFunc, filter mTypes.Filter, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, map[string]mTypes.IndexData, common.PageInfo, error) { if sdm.FilterTagsFn != nil { return sdm.FilterTagsFn(ctx, filterFunc, filter, requestedPage) } - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, - map[string]repodb.IndexData{}, common.PageInfo{}, nil + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, + map[string]mTypes.IndexData{}, common.PageInfo{}, nil } -func (sdm RepoDBMock) SearchDigests(ctx context.Context, searchText string, requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, error) { +func (sdm MetaDBMock) SearchDigests(ctx context.Context, searchText string, requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, error) { if sdm.SearchDigestsFn != nil { return sdm.SearchDigestsFn(ctx, searchText, requestedPage) } - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, nil + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, nil } -func (sdm RepoDBMock) SearchLayers(ctx context.Context, searchText string, requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, error) { +func (sdm MetaDBMock) SearchLayers(ctx context.Context, searchText string, requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, error) { if sdm.SearchLayersFn != nil { return sdm.SearchLayersFn(ctx, searchText, requestedPage) } - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, nil + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, nil } -func (sdm RepoDBMock) SearchForAscendantImages(ctx context.Context, searchText string, requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, error) { +func (sdm MetaDBMock) SearchForAscendantImages(ctx context.Context, searchText string, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, error) { if sdm.SearchForAscendantImagesFn != nil { return sdm.SearchForAscendantImagesFn(ctx, searchText, requestedPage) } - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, nil + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, nil } -func (sdm RepoDBMock) SearchForDescendantImages(ctx context.Context, searchText string, - requestedPage repodb.PageInput, -) ([]repodb.RepoMetadata, map[string]repodb.ManifestMetadata, error) { +func (sdm MetaDBMock) SearchForDescendantImages(ctx context.Context, searchText string, + requestedPage mTypes.PageInput, +) ([]mTypes.RepoMetadata, map[string]mTypes.ManifestMetadata, error) { if sdm.SearchForDescendantImagesFn != nil { return sdm.SearchForDescendantImagesFn(ctx, searchText, requestedPage) } - return []repodb.RepoMetadata{}, map[string]repodb.ManifestMetadata{}, nil + return []mTypes.RepoMetadata{}, map[string]mTypes.ManifestMetadata{}, nil } -func (sdm RepoDBMock) SetIndexData(digest godigest.Digest, indexData repodb.IndexData) error { +func (sdm MetaDBMock) SetIndexData(digest godigest.Digest, indexData mTypes.IndexData) error { if sdm.SetIndexDataFn != nil { return sdm.SetIndexDataFn(digest, indexData) } @@ -357,15 +362,15 @@ func (sdm RepoDBMock) SetIndexData(digest godigest.Digest, indexData repodb.Inde return nil } -func (sdm RepoDBMock) GetIndexData(indexDigest godigest.Digest) (repodb.IndexData, error) { +func (sdm MetaDBMock) GetIndexData(indexDigest godigest.Digest) (mTypes.IndexData, error) { if sdm.GetIndexDataFn != nil { return sdm.GetIndexDataFn(indexDigest) } - return repodb.IndexData{}, nil + return mTypes.IndexData{}, nil } -func (sdm RepoDBMock) PatchDB() error { +func (sdm MetaDBMock) PatchDB() error { if sdm.PatchDBFn != nil { return sdm.PatchDBFn() } @@ -373,7 +378,7 @@ func (sdm RepoDBMock) PatchDB() error { return nil } -func (sdm RepoDBMock) SetReferrer(repo string, referredDigest godigest.Digest, referrer repodb.ReferrerInfo) error { +func (sdm MetaDBMock) SetReferrer(repo string, referredDigest godigest.Digest, referrer mTypes.ReferrerInfo) error { if sdm.SetReferrerFn != nil { return sdm.SetReferrerFn(repo, referredDigest, referrer) } @@ -381,7 +386,7 @@ func (sdm RepoDBMock) SetReferrer(repo string, referredDigest godigest.Digest, r return nil } -func (sdm RepoDBMock) DeleteReferrer(repo string, referredDigest godigest.Digest, +func (sdm MetaDBMock) DeleteReferrer(repo string, referredDigest godigest.Digest, referrerDigest godigest.Digest, ) error { if sdm.DeleteReferrerFn != nil { @@ -391,17 +396,17 @@ func (sdm RepoDBMock) DeleteReferrer(repo string, referredDigest godigest.Digest return nil } -func (sdm RepoDBMock) GetReferrersInfo(repo string, referredDigest godigest.Digest, +func (sdm MetaDBMock) GetReferrersInfo(repo string, referredDigest godigest.Digest, artifactTypes []string, -) ([]repodb.ReferrerInfo, error) { +) ([]mTypes.ReferrerInfo, error) { if sdm.GetReferrersInfoFn != nil { return sdm.GetReferrersInfoFn(repo, referredDigest, artifactTypes) } - return []repodb.ReferrerInfo{}, nil + return []mTypes.ReferrerInfo{}, nil } -func (sdm RepoDBMock) GetStarredRepos(ctx context.Context) ([]string, error) { +func (sdm MetaDBMock) GetStarredRepos(ctx context.Context) ([]string, error) { if sdm.GetStarredReposFn != nil { return sdm.GetStarredReposFn(ctx) } @@ -409,7 +414,7 @@ func (sdm RepoDBMock) GetStarredRepos(ctx context.Context) ([]string, error) { return []string{}, nil } -func (sdm RepoDBMock) GetBookmarkedRepos(ctx context.Context) ([]string, error) { +func (sdm MetaDBMock) GetBookmarkedRepos(ctx context.Context) ([]string, error) { if sdm.GetBookmarkedReposFn != nil { return sdm.GetBookmarkedReposFn(ctx) } @@ -417,31 +422,31 @@ func (sdm RepoDBMock) GetBookmarkedRepos(ctx context.Context) ([]string, error) return []string{}, nil } -func (sdm RepoDBMock) ToggleStarRepo(ctx context.Context, repo string) (repodb.ToggleState, error) { +func (sdm MetaDBMock) ToggleStarRepo(ctx context.Context, repo string) (mTypes.ToggleState, error) { if sdm.ToggleStarRepoFn != nil { return sdm.ToggleStarRepoFn(ctx, repo) } - return repodb.NotChanged, nil + return mTypes.NotChanged, nil } -func (sdm RepoDBMock) ToggleBookmarkRepo(ctx context.Context, repo string) (repodb.ToggleState, error) { +func (sdm MetaDBMock) ToggleBookmarkRepo(ctx context.Context, repo string) (mTypes.ToggleState, error) { if sdm.ToggleBookmarkRepoFn != nil { return sdm.ToggleBookmarkRepoFn(ctx, repo) } - return repodb.NotChanged, nil + return mTypes.NotChanged, nil } -func (sdm RepoDBMock) GetUserData(ctx context.Context) (repodb.UserData, error) { +func (sdm MetaDBMock) GetUserData(ctx context.Context) (mTypes.UserData, error) { if sdm.GetUserDataFn != nil { return sdm.GetUserDataFn(ctx) } - return repodb.UserData{}, nil + return mTypes.UserData{}, nil } -func (sdm RepoDBMock) SetUserData(ctx context.Context, userProfile repodb.UserData) error { +func (sdm MetaDBMock) SetUserData(ctx context.Context, userProfile mTypes.UserData) error { if sdm.SetUserDataFn != nil { return sdm.SetUserDataFn(ctx, userProfile) } @@ -449,7 +454,7 @@ func (sdm RepoDBMock) SetUserData(ctx context.Context, userProfile repodb.UserDa return nil } -func (sdm RepoDBMock) SetUserGroups(ctx context.Context, groups []string) error { +func (sdm MetaDBMock) SetUserGroups(ctx context.Context, groups []string) error { if sdm.SetUserGroupsFn != nil { return sdm.SetUserGroupsFn(ctx, groups) } @@ -457,7 +462,7 @@ func (sdm RepoDBMock) SetUserGroups(ctx context.Context, groups []string) error return nil } -func (sdm RepoDBMock) GetUserGroups(ctx context.Context) ([]string, error) { +func (sdm MetaDBMock) GetUserGroups(ctx context.Context) ([]string, error) { if sdm.GetUserGroupsFn != nil { return sdm.GetUserGroupsFn(ctx) } @@ -465,7 +470,7 @@ func (sdm RepoDBMock) GetUserGroups(ctx context.Context) ([]string, error) { return []string{}, nil } -func (sdm RepoDBMock) DeleteUserData(ctx context.Context) error { +func (sdm MetaDBMock) DeleteUserData(ctx context.Context) error { if sdm.DeleteUserDataFn != nil { return sdm.DeleteUserDataFn(ctx) } @@ -473,7 +478,7 @@ func (sdm RepoDBMock) DeleteUserData(ctx context.Context) error { return nil } -func (sdm RepoDBMock) GetUserAPIKeyInfo(hashedKey string) (string, error) { +func (sdm MetaDBMock) GetUserAPIKeyInfo(hashedKey string) (string, error) { if sdm.GetUserAPIKeyInfoFn != nil { return sdm.GetUserAPIKeyInfoFn(hashedKey) } @@ -481,7 +486,7 @@ func (sdm RepoDBMock) GetUserAPIKeyInfo(hashedKey string) (string, error) { return "", nil } -func (sdm RepoDBMock) AddUserAPIKey(ctx context.Context, hashedKey string, apiKeyDetails *repodb.APIKeyDetails) error { +func (sdm MetaDBMock) AddUserAPIKey(ctx context.Context, hashedKey string, apiKeyDetails *mTypes.APIKeyDetails) error { if sdm.AddUserAPIKeyFn != nil { return sdm.AddUserAPIKeyFn(ctx, hashedKey, apiKeyDetails) } @@ -489,7 +494,7 @@ func (sdm RepoDBMock) AddUserAPIKey(ctx context.Context, hashedKey string, apiKe return nil } -func (sdm RepoDBMock) UpdateUserAPIKeyLastUsed(ctx context.Context, hashedKey string) error { +func (sdm MetaDBMock) UpdateUserAPIKeyLastUsed(ctx context.Context, hashedKey string) error { if sdm.UpdateUserAPIKeyLastUsedFn != nil { return sdm.UpdateUserAPIKeyLastUsedFn(ctx, hashedKey) } @@ -497,7 +502,7 @@ func (sdm RepoDBMock) UpdateUserAPIKeyLastUsed(ctx context.Context, hashedKey st return nil } -func (sdm RepoDBMock) DeleteUserAPIKey(ctx context.Context, id string) error { +func (sdm MetaDBMock) DeleteUserAPIKey(ctx context.Context, id string) error { if sdm.DeleteUserAPIKeyFn != nil { return sdm.DeleteUserAPIKeyFn(ctx, id) }