aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2024-10-28 06:48:07 +0800
committerGitHub <noreply@github.com>2024-10-27 18:48:07 -0400
commita920fcfd91b1d77cee8bf1143334cba1582b8c5c (patch)
tree3481c056f5bc5bbcde9bdec7b55abd0374855580 /tests
parentd70af38447a759d4a935e315e18efa4dd625f655 (diff)
downloadgitea-a920fcfd91b1d77cee8bf1143334cba1582b8c5c.tar.gz
gitea-a920fcfd91b1d77cee8bf1143334cba1582b8c5c.zip
Fix db engine (#32351)
Fix #32349
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)
+ })
}