Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove all package data after tests #22984

Merged
merged 7 commits into from
Feb 23, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions tests/integration/api_packages_cargo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ import (
)

func TestPackageCargo(t *testing.T) {
defer removeAllPackageData(t)

onGiteaRun(t, testPackageCargo)
}

Expand Down
1 change: 1 addition & 0 deletions tests/integration/api_packages_chef_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import (

func TestPackageChef(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

Expand Down
2 changes: 2 additions & 0 deletions tests/integration/api_packages_composer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import (

func TestPackageComposer(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

vendorName := "gitea"
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/api_packages_conan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,8 @@ func uploadConanPackageV2(t *testing.T, baseURL, token, name, version, user, cha

func TestPackageConan(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

name := "ConanPackage"
Expand Down
1 change: 1 addition & 0 deletions tests/integration/api_packages_conda_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (

func TestPackageConda(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

Expand Down
3 changes: 2 additions & 1 deletion tests/integration/api_packages_container_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (

func TestPackageContainer(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
session := loginUser(t, user.Name)
Expand Down Expand Up @@ -640,7 +641,7 @@ func TestPackageContainer(t *testing.T) {

checkCatalog := func(owner string) func(t *testing.T) {
return func(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer tests.PrintCurrentTest(t)()

req := NewRequest(t, "GET", fmt.Sprintf("%sv2/_catalog", setting.AppURL))
addTokenAuthHeader(req, userToken)
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/api_packages_generic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import (

func TestPackageGeneric(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

packageName := "te-st_pac.kage"
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/api_packages_helm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import (

func TestPackageHelm(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

packageName := "test-chart"
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/api_packages_maven_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import (

func TestPackageMaven(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

groupID := "com.gitea"
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/api_packages_npm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import (

func TestPackageNpm(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

token := fmt.Sprintf("Bearer %s", getTokenForLoggedInUser(t, loginUser(t, user.Name)))
Expand Down
1 change: 1 addition & 0 deletions tests/integration/api_packages_nuget_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ func decodeXML(t testing.TB, resp *httptest.ResponseRecorder, v interface{}) {

func TestPackageNuGet(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

type FeedEntryProperties struct {
Version string `xml:"Version"`
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/api_packages_pub_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import (

func TestPackagePub(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

token := "Bearer " + getUserToken(t, user.Name)
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/api_packages_pypi_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import (

func TestPackagePyPI(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

packageName := "test-package"
Expand Down
2 changes: 2 additions & 0 deletions tests/integration/api_packages_rubygems_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import (

func TestPackageRubyGems(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

packageName := "gitea"
Expand Down
53 changes: 49 additions & 4 deletions tests/integration/api_packages_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ import (
container_model "code.gitea.io/gitea/models/packages/container"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
packages_module "code.gitea.io/gitea/modules/packages"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/util"
packages_service "code.gitea.io/gitea/services/packages"
packages_cleanup_service "code.gitea.io/gitea/services/packages/cleanup"
"code.gitea.io/gitea/tests"
Expand All @@ -29,6 +31,7 @@ import (

func TestPackageAPI(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
session := loginUser(t, user.Name)
Expand Down Expand Up @@ -152,6 +155,7 @@ func TestPackageAPI(t *testing.T) {

func TestPackageAccess(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

admin := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5})
Expand All @@ -173,6 +177,7 @@ func TestPackageAccess(t *testing.T) {

func TestPackageQuota(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

limitTotalOwnerCount, limitTotalOwnerSize := setting.Packages.LimitTotalOwnerCount, setting.Packages.LimitTotalOwnerSize

Expand Down Expand Up @@ -234,17 +239,37 @@ func TestPackageQuota(t *testing.T) {

func TestPackageCleanup(t *testing.T) {
defer tests.PrepareTestEnv(t)()
defer removeAllPackageData(t)

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

duration, _ := time.ParseDuration("-1h")

t.Run("Common", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()

// Upload and delete a generic package and upload a container blob
data, _ := util.CryptoRandomBytes(5)
url := fmt.Sprintf("/api/packages/%s/generic/cleanup-test/1.1.1/file.bin", user.Name)
req := NewRequestWithBody(t, "PUT", url, bytes.NewReader(data))
AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusCreated)

req = NewRequest(t, "DELETE", url)
AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusNoContent)

data, _ = util.CryptoRandomBytes(5)
url = fmt.Sprintf("/v2/%s/cleanup-test/blobs/uploads?digest=sha256:%x", user.Name, sha256.Sum256(data))
req = NewRequestWithBody(t, "POST", url, bytes.NewReader(data))
AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusCreated)

pbs, err := packages_model.FindExpiredUnreferencedBlobs(db.DefaultContext, duration)
assert.NoError(t, err)
assert.NotEmpty(t, pbs)

_, err = packages_model.GetInternalVersionByNameAndVersion(db.DefaultContext, 2, packages_model.TypeContainer, "test", container_model.UploadVersion)
_, err = packages_model.GetInternalVersionByNameAndVersion(db.DefaultContext, user.ID, packages_model.TypeContainer, "cleanup-test", container_model.UploadVersion)
assert.NoError(t, err)

err = packages_cleanup_service.Cleanup(db.DefaultContext, duration)
Expand All @@ -254,15 +279,13 @@ func TestPackageCleanup(t *testing.T) {
assert.NoError(t, err)
assert.Empty(t, pbs)

_, err = packages_model.GetInternalVersionByNameAndVersion(db.DefaultContext, 2, packages_model.TypeContainer, "test", container_model.UploadVersion)
_, err = packages_model.GetInternalVersionByNameAndVersion(db.DefaultContext, user.ID, packages_model.TypeContainer, "cleanup-test", container_model.UploadVersion)
assert.ErrorIs(t, err, packages_model.ErrPackageNotExist)
})

t.Run("CleanupRules", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()

user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})

type version struct {
Version string
ShouldExist bool
Expand Down Expand Up @@ -403,3 +426,25 @@ func TestPackageCleanup(t *testing.T) {
}
})
}

// This method removes all package related data (database and files)
func removeAllPackageData(t *testing.T) {
assert.NoError(t, db.DeleteAllRecords("package"))
assert.NoError(t, db.DeleteAllRecords("package_version"))
assert.NoError(t, db.DeleteAllRecords("package_file"))
assert.NoError(t, db.DeleteAllRecords("package_property"))
assert.NoError(t, db.DeleteAllRecords("package_blob_upload"))
assert.NoError(t, db.DeleteAllRecords("package_cleanup_rule"))

duration, _ := time.ParseDuration("-10h")

pbs, err := packages_model.FindExpiredUnreferencedBlobs(db.DefaultContext, duration)
zeripath marked this conversation as resolved.
Show resolved Hide resolved
assert.NoError(t, err)

contentStore := packages_module.NewContentStore()
for _, pb := range pbs {
contentStore.Delete(packages_module.BlobHash256Key(pb.HashSHA256))
}
zeripath marked this conversation as resolved.
Show resolved Hide resolved

assert.NoError(t, db.DeleteAllRecords("package_blob"))
}