mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-06-25 18:40:51 +00:00
fix: ignore expired artifacts for quota calculation (#7976)
- Expired artifacts are kept in the database but the artifact has been deleted from the storage. Ignore them for the quota calculation. - Added unit test. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7976 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Reviewed-by: Otto <otto@codeberg.org> Co-authored-by: Gusted <postmaster@gusted.xyz> Co-committed-by: Gusted <postmaster@gusted.xyz>
This commit is contained in:
parent
e78d1c8210
commit
022eeee657
4 changed files with 61 additions and 1 deletions
17
models/fixtures/TestGetUsedForUser/action_artifact.yaml
Normal file
17
models/fixtures/TestGetUsedForUser/action_artifact.yaml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
-
|
||||||
|
id: 1001
|
||||||
|
run_id: 792
|
||||||
|
runner_id: 1
|
||||||
|
repo_id: 4
|
||||||
|
owner_id: 1
|
||||||
|
commit_sha: c2d72f548424103f01ee1dc02889c1e2bff816b0
|
||||||
|
storage_path: "27/5/1730330775594233150.chunk"
|
||||||
|
file_size: 693147180559
|
||||||
|
file_compressed_size: 693147180559
|
||||||
|
content_encoding: "application/zip"
|
||||||
|
artifact_path: "big-file.zip"
|
||||||
|
artifact_name: "big-file"
|
||||||
|
status: 4
|
||||||
|
created_unix: 1730330775
|
||||||
|
updated_unix: 1730330775
|
||||||
|
expired_unix: 1738106775
|
19
models/quota/main_test.go
Normal file
19
models/quota/main_test.go
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
package quota
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"forgejo.org/models/unittest"
|
||||||
|
|
||||||
|
_ "forgejo.org/models"
|
||||||
|
_ "forgejo.org/models/actions"
|
||||||
|
_ "forgejo.org/models/activities"
|
||||||
|
_ "forgejo.org/models/forgefed"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
unittest.MainTest(m)
|
||||||
|
}
|
|
@ -131,7 +131,8 @@ func createQueryFor(ctx context.Context, userID int64, q string) db.Engine {
|
||||||
case "artifacts":
|
case "artifacts":
|
||||||
session = session.
|
session = session.
|
||||||
Table("action_artifact").
|
Table("action_artifact").
|
||||||
Join("INNER", "`repository`", "`action_artifact`.repo_id = `repository`.id")
|
Join("INNER", "`repository`", "`action_artifact`.repo_id = `repository`.id").
|
||||||
|
Where("`action_artifact`.status != ?", action_model.ArtifactStatusExpired)
|
||||||
case "packages":
|
case "packages":
|
||||||
session = session.
|
session = session.
|
||||||
Table("package_version").
|
Table("package_version").
|
||||||
|
|
23
models/quota/used_test.go
Normal file
23
models/quota/used_test.go
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
package quota
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"forgejo.org/models/unittest"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGetUsedForUser(t *testing.T) {
|
||||||
|
defer unittest.OverrideFixtures("models/fixtures/TestGetUsedForUser/")()
|
||||||
|
require.NoError(t, unittest.PrepareTestDatabase())
|
||||||
|
|
||||||
|
used, err := GetUsedForUser(t.Context(), 5)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
assert.EqualValues(t, 4096, used.Size.Assets.Artifacts)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue