summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2024-11-21 14:27:02 +0800
committerGitHub <noreply@github.com>2024-11-21 06:27:02 +0000
commita290aab0e84e76ecc13b3992b2db246198858f59 (patch)
treea051cf5d8df883f70d17f765cfab748cf05f9e1e /tests
parent8f6cc9573444fc956e875fb09351f38be08c769a (diff)
downloadgitea-a290aab0e84e76ecc13b3992b2db246198858f59.tar.gz
gitea-a290aab0e84e76ecc13b3992b2db246198858f59.zip
Fix debian package clean up (#32351) (#32590)
Partially backport #32351
Diffstat (limited to 'tests')
-rw-r--r--tests/integration/api_packages_debian_test.go35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/integration/api_packages_debian_test.go b/tests/integration/api_packages_debian_test.go
index 05979fccb5..98027d774c 100644
--- a/tests/integration/api_packages_debian_test.go
+++ b/tests/integration/api_packages_debian_test.go
@@ -10,6 +10,7 @@ import (
"fmt"
"io"
"net/http"
+ "strconv"
"strings"
"testing"
@@ -19,6 +20,7 @@ import (
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/base"
debian_module "code.gitea.io/gitea/modules/packages/debian"
+ packages_cleanup_service "code.gitea.io/gitea/services/packages/cleanup"
"code.gitea.io/gitea/tests"
"github.com/blakesmith/ar"
@@ -263,4 +265,37 @@ func TestPackageDebian(t *testing.T) {
assert.Contains(t, body, "Components: "+strings.Join(components, " ")+"\n")
assert.Contains(t, body, "Architectures: "+architectures[1]+"\n")
})
+
+ t.Run("Cleanup", func(t *testing.T) {
+ defer tests.PrintCurrentTest(t)()
+
+ rule := &packages.PackageCleanupRule{
+ Enabled: true,
+ RemovePattern: `.*`,
+ MatchFullName: true,
+ OwnerID: user.ID,
+ Type: packages.TypeDebian,
+ }
+
+ _, err := packages.InsertCleanupRule(db.DefaultContext, rule)
+ assert.NoError(t, err)
+
+ // When there were a lot of packages (> 50 or 100) and the code used "Iterate" to get all packages, it ever caused bugs,
+ // because "Iterate" keeps a dangling SQL session but the callback function still uses the same session to execute statements.
+ // The "Iterate" problem has been checked by TestContextSafety now, so here we only need to check the cleanup logic with a small number
+ packagesCount := 2
+ for i := 0; i < packagesCount; i++ {
+ uploadURL := fmt.Sprintf("%s/pool/%s/%s/upload", rootURL, "test", "main")
+ req := NewRequestWithBody(t, "PUT", uploadURL, createArchive(packageName, "1.0."+strconv.Itoa(i), "all")).AddBasicAuth(user.Name)
+ MakeRequest(t, req, http.StatusCreated)
+ }
+ req := NewRequest(t, "GET", fmt.Sprintf("%s/dists/%s/Release", rootURL, "test"))
+ MakeRequest(t, req, http.StatusOK)
+
+ err = packages_cleanup_service.CleanupTask(db.DefaultContext, 0)
+ assert.NoError(t, err)
+
+ req = NewRequest(t, "GET", fmt.Sprintf("%s/dists/%s/Release", rootURL, "test"))
+ MakeRequest(t, req, http.StatusNotFound)
+ })
}