Skip to content

Commit 0a87583

Browse files
committed
Added test for maven cleanup
1 parent 32fddbd commit 0a87583

File tree

5 files changed

+272
-0
lines changed

5 files changed

+272
-0
lines changed

models/fixtures/package.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-
2+
id: 1
3+
owner_id: 2
4+
type: maven
5+
name: com.gitea:test-project
6+
lower_name: com.gitea:test-project

models/fixtures/package_blob.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
-
2+
id: 1
3+
size: 14
4+
hash_md5: 27224a672372115e5a1d125ed7b2a0b1
5+
hash_sha1: 9854582a2958b2d31541ce4a6a1a36201b80c01
6+
hash_sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a01
7+
hash_sha512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a801
8+
created_unix: 1672531200
9+
-
10+
id: 2
11+
size: 14
12+
hash_md5: 27224a672372115e5a1d125ed7b2a0b2
13+
hash_sha1: 9854582a2958b2d31541ce4a6a1a36201b80c02
14+
hash_sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a02
15+
hash_sha512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a802
16+
created_unix: 1672531200
17+
-
18+
id: 3
19+
size: 14
20+
hash_md5: 27224a672372115e5a1d125ed7b2a0b3
21+
hash_sha1: 9854582a2958b2d31541ce4a6a1a36201b80c03
22+
hash_sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a03
23+
hash_sha512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a803
24+
created_unix: 1672531200
25+
-
26+
id: 4
27+
size: 14
28+
hash_md5: 27224a672372115e5a1d125ed7b2a0b4
29+
hash_sha1: 9854582a2958b2d31541ce4a6a1a36201b80c04
30+
hash_sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a04
31+
hash_sha512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a804
32+
created_unix: 1672531200
33+
-
34+
id: 5
35+
size: 14
36+
hash_md5: 27224a672372115e5a1d125ed7b2a0b5
37+
hash_sha1: 9854582a2958b2d31541ce4a6a1a36201b80c05
38+
hash_sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a05
39+
hash_sha512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a805
40+
created_unix: 1672531200
41+

models/fixtures/package_file.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
-
2+
id: 1
3+
version_id: 1
4+
blob_id: 1
5+
name: gitea-test-1.0-20230101.000000-1.jar
6+
lower_name: gitea-test-1.0-20230101.000000-1.jar
7+
composite_key: ""
8+
is_lead: false
9+
created_unix: 1672531200
10+
-
11+
id: 2
12+
version_id: 1
13+
blob_id: 2
14+
name: gitea-test-1.0-20230101.000000-2.jar
15+
lower_name: gitea-test-1.0-20230101.000000-2.jar
16+
composite_key: ""
17+
is_lead: false
18+
created_unix: 1672531200
19+
-
20+
id: 3
21+
version_id: 1
22+
blob_id: 3
23+
name: gitea-test-1.0-20230101.000000-3.jar
24+
lower_name: gitea-test-1.0-20230101.000000-3.jar
25+
composite_key: ""
26+
is_lead: false
27+
created_unix: 1672531200
28+
-
29+
id: 4
30+
version_id: 1
31+
blob_id: 4
32+
name: gitea-test-1.0-20230101.000000-4.jar
33+
lower_name: gitea-test-1.0-20230101.000000-4.jar
34+
composite_key: ""
35+
is_lead: false
36+
created_unix: 1672531200
37+
-
38+
id: 5
39+
version_id: 1
40+
blob_id: 5
41+
name: gitea-test-1.0-20230101.000000-5.jar
42+
lower_name: gitea-test-1.0-20230101.000000-5.jar
43+
composite_key: ""
44+
is_lead: false
45+
created_unix: 1672531200
46+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
-
2+
id: 1
3+
package_id: 1
4+
creator_id: 2
5+
version: 1.0-SNAPSHOT
6+
lower_version: 1.0-snapshot
7+
metadata_json: '{"artifact_id":"test-project","group_id":"com.gitea"}'
8+
created_unix: 1672531200
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
// Copyright 2023 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package maven
5+
6+
import (
7+
"bytes"
8+
"testing"
9+
10+
"code.gitea.io/gitea/models/db"
11+
"code.gitea.io/gitea/models/packages"
12+
"code.gitea.io/gitea/models/unittest"
13+
packages_module "code.gitea.io/gitea/modules/packages"
14+
"code.gitea.io/gitea/modules/setting"
15+
packages_service "code.gitea.io/gitea/services/packages"
16+
17+
"github.com/stretchr/testify/assert"
18+
)
19+
20+
func TestMain(m *testing.M) {
21+
unittest.MainTest(m)
22+
}
23+
24+
func addMavenMetadataToPackageVersion(t *testing.T, pv *packages.PackageVersion) {
25+
// Create maven-metadata.xml content with build number 5 (matching the fixtures)
26+
metadataXML := `<?xml version="1.0" encoding="UTF-8"?>
27+
<metadata>
28+
<groupId>com.gitea</groupId>
29+
<artifactId>test-project</artifactId>
30+
<version>1.0-SNAPSHOT</version>
31+
<versioning>
32+
<snapshot>
33+
<timestamp>20230101.000000</timestamp>
34+
<buildNumber>5</buildNumber>
35+
</snapshot>
36+
<lastUpdated>20230101000000</lastUpdated>
37+
</versioning>
38+
</metadata>`
39+
40+
// Add metadata file to the existing package version using service method
41+
metadataReader := bytes.NewReader([]byte(metadataXML))
42+
hsr, err := packages_module.CreateHashedBufferFromReader(metadataReader)
43+
assert.NoError(t, err)
44+
45+
pfci := &packages_service.PackageFileCreationInfo{
46+
PackageFileInfo: packages_service.PackageFileInfo{
47+
Filename: "maven-metadata.xml",
48+
},
49+
Data: hsr,
50+
}
51+
52+
_, err = packages_service.AddFileToPackageVersionInternal(db.DefaultContext, pv, pfci)
53+
assert.NoError(t, err)
54+
}
55+
56+
func TestCleanupSnapshotVersions(t *testing.T) {
57+
assert.NoError(t, unittest.PrepareTestDatabase())
58+
59+
t.Run("Should skip when retainBuilds is negative", func(t *testing.T) {
60+
setting.Packages.RetainMavenSnapshotBuilds = -1
61+
setting.Packages.DebugMavenCleanup = false
62+
t.Logf("Test settings: retainBuilds=%d, debug=%t", setting.Packages.RetainMavenSnapshotBuilds, setting.Packages.DebugMavenCleanup)
63+
err := CleanupSnapshotVersions(db.DefaultContext)
64+
assert.NoError(t, err)
65+
})
66+
67+
t.Run("Should skip when retainBuilds is zero", func(t *testing.T) {
68+
setting.Packages.RetainMavenSnapshotBuilds = 0
69+
setting.Packages.DebugMavenCleanup = false
70+
t.Logf("Test settings: retainBuilds=%d, debug=%t", setting.Packages.RetainMavenSnapshotBuilds, setting.Packages.DebugMavenCleanup)
71+
err := CleanupSnapshotVersions(db.DefaultContext)
72+
assert.NoError(t, err)
73+
})
74+
75+
t.Run("Should handle missing metadata file gracefully", func(t *testing.T) {
76+
assert.NoError(t, unittest.PrepareTestDatabase())
77+
78+
setting.Packages.RetainMavenSnapshotBuilds = 2
79+
setting.Packages.DebugMavenCleanup = false
80+
81+
// Get the existing package version from fixtures (ID 1)
82+
pv, err := packages.GetVersionByID(db.DefaultContext, 1)
83+
assert.NoError(t, err)
84+
85+
// Verify all 5 files exist before cleanup
86+
filesBefore, err := packages.GetFilesByVersionID(db.DefaultContext, pv.ID)
87+
assert.NoError(t, err)
88+
assert.Len(t, filesBefore, 5) // 5 jar files, no metadata
89+
90+
// No metadata file exists in fixtures - should handle gracefully
91+
err = CleanupSnapshotVersions(db.DefaultContext)
92+
assert.NoError(t, err)
93+
94+
// Verify all 5 files still exist after cleanup (no cleanup should occur without metadata)
95+
filesAfter, err := packages.GetFilesByVersionID(db.DefaultContext, pv.ID)
96+
assert.NoError(t, err)
97+
assert.Len(t, filesAfter, 5, "All files should remain when metadata is missing")
98+
})
99+
100+
t.Run("Should work with debug mode", func(t *testing.T) {
101+
assert.NoError(t, unittest.PrepareTestDatabase())
102+
103+
setting.Packages.RetainMavenSnapshotBuilds = 2
104+
setting.Packages.DebugMavenCleanup = true
105+
106+
pv, err := packages.GetVersionByID(db.DefaultContext, 1)
107+
assert.NoError(t, err)
108+
109+
addMavenMetadataToPackageVersion(t, pv)
110+
111+
filesBefore, err := packages.GetFilesByVersionID(db.DefaultContext, pv.ID)
112+
assert.NoError(t, err)
113+
assert.Len(t, filesBefore, 6) // 5 jar files + 1 metadata file
114+
115+
err = CleanupSnapshotVersions(db.DefaultContext)
116+
assert.NoError(t, err)
117+
118+
// Verify all files still exist after cleanup (debug mode should not delete anything)
119+
filesAfter, err := packages.GetFilesByVersionID(db.DefaultContext, pv.ID)
120+
assert.NoError(t, err)
121+
assert.Len(t, filesAfter, 6, "All files should remain in debug mode")
122+
})
123+
124+
t.Run("Should test actual cleanup with metadata", func(t *testing.T) {
125+
assert.NoError(t, unittest.PrepareTestDatabase())
126+
127+
setting.Packages.DebugMavenCleanup = false
128+
setting.Packages.RetainMavenSnapshotBuilds = 2
129+
t.Logf("Test settings: retainBuilds=%d, debug=%t", setting.Packages.RetainMavenSnapshotBuilds, setting.Packages.DebugMavenCleanup)
130+
131+
// Get the existing package version from fixtures (ID 1)
132+
pv, err := packages.GetVersionByID(db.DefaultContext, 1)
133+
assert.NoError(t, err)
134+
assert.Equal(t, "1.0-SNAPSHOT", pv.Version)
135+
136+
addMavenMetadataToPackageVersion(t, pv)
137+
138+
filesBefore, err := packages.GetFilesByVersionID(db.DefaultContext, pv.ID)
139+
assert.NoError(t, err)
140+
assert.Len(t, filesBefore, 6) // 5 jar files + 1 metadata file
141+
142+
// Test cleanup with retainBuilds = 2 (should keep builds 4 and 5, remove 1, 2, 3)
143+
err = CleanupSnapshotVersions(db.DefaultContext)
144+
assert.NoError(t, err)
145+
146+
filesAfter, err := packages.GetFilesByVersionID(db.DefaultContext, pv.ID)
147+
assert.NoError(t, err)
148+
149+
// Should have metadata file + 2 retained builds
150+
assert.Len(t, filesAfter, 3)
151+
152+
// Check that metadata file is still there
153+
var hasMetadata bool
154+
var retainedBuilds []string
155+
for _, file := range filesAfter {
156+
if file.Name == "maven-metadata.xml" {
157+
hasMetadata = true
158+
} else {
159+
retainedBuilds = append(retainedBuilds, file.Name)
160+
}
161+
}
162+
163+
assert.True(t, hasMetadata, "maven-metadata.xml should be retained")
164+
assert.Len(t, retainedBuilds, 2, "Should retain exactly 2 builds")
165+
166+
t.Logf("Retained builds: %v", retainedBuilds)
167+
168+
assert.Contains(t, retainedBuilds, "gitea-test-1.0-20230101.000000-4.jar")
169+
assert.Contains(t, retainedBuilds, "gitea-test-1.0-20230101.000000-5.jar")
170+
})
171+
}

0 commit comments

Comments
 (0)