Add tests.
This commit is contained in:
parent
5a944f75a2
commit
9912c73e24
2 changed files with 172 additions and 23 deletions
|
@ -12,17 +12,17 @@ import (
|
||||||
|
|
||||||
func createPackageCleanupRuleTable(x *xorm.Engine) error {
|
func createPackageCleanupRuleTable(x *xorm.Engine) error {
|
||||||
type PackageCleanupRule struct {
|
type PackageCleanupRule struct {
|
||||||
ID int64 `xorm:"pk autoincr"`
|
ID int64 `xorm:"pk autoincr"`
|
||||||
Enabled bool `xorm:"INDEX NOT NULL DEFAULT false"`
|
Enabled bool `xorm:"INDEX NOT NULL DEFAULT false"`
|
||||||
OwnerID int64 `xorm:"UNIQUE(s) INDEX NOT NULL DEFAULT 0"`
|
OwnerID int64 `xorm:"UNIQUE(s) INDEX NOT NULL DEFAULT 0"`
|
||||||
Type string `xorm:"UNIQUE(s) INDEX NOT NULL"`
|
Type string `xorm:"UNIQUE(s) INDEX NOT NULL"`
|
||||||
KeepCount int `xorm:"NOT NULL DEFAULT 0"`
|
KeepCount int `xorm:"NOT NULL DEFAULT 0"`
|
||||||
KeepPattern string `xorm:"NOT NULL DEFAULT ''"`
|
KeepPattern string `xorm:"NOT NULL DEFAULT ''"`
|
||||||
RemoveDays int `xorm:"NOT NULL DEFAULT 0"`
|
RemoveDays int `xorm:"NOT NULL DEFAULT 0"`
|
||||||
RemovePattern string `xorm:"NOT NULL DEFAULT ''"`
|
RemovePattern string `xorm:"NOT NULL DEFAULT ''"`
|
||||||
MatchFullName bool `xorm:"NOT NULL DEFAULT false"`
|
MatchFullName bool `xorm:"NOT NULL DEFAULT false"`
|
||||||
CreatedUnix timeutil.TimeStamp `xorm:"created NOT NULL DEFAULT 0"`
|
CreatedUnix timeutil.TimeStamp `xorm:"created NOT NULL DEFAULT 0"`
|
||||||
UpdatedUnix timeutil.TimeStamp `xorm:"updated NOT NULL DEFAULT 0"`
|
UpdatedUnix timeutil.TimeStamp `xorm:"updated NOT NULL DEFAULT 0"`
|
||||||
}
|
}
|
||||||
|
|
||||||
return x.Sync2(new(PackageCleanupRule))
|
return x.Sync2(new(PackageCleanupRule))
|
||||||
|
|
|
@ -171,20 +171,169 @@ func TestPackageCleanup(t *testing.T) {
|
||||||
|
|
||||||
duration, _ := time.ParseDuration("-1h")
|
duration, _ := time.ParseDuration("-1h")
|
||||||
|
|
||||||
pbs, err := packages_model.FindExpiredUnreferencedBlobs(db.DefaultContext, duration)
|
t.Run("Common", func(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
defer tests.PrintCurrentTest(t)()
|
||||||
assert.NotEmpty(t, pbs)
|
|
||||||
|
|
||||||
_, err = packages_model.GetInternalVersionByNameAndVersion(db.DefaultContext, 2, packages_model.TypeContainer, "test", container_model.UploadVersion)
|
pbs, err := packages_model.FindExpiredUnreferencedBlobs(db.DefaultContext, duration)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
assert.NotEmpty(t, pbs)
|
||||||
|
|
||||||
err = packages_service.Cleanup(nil, duration)
|
_, err = packages_model.GetInternalVersionByNameAndVersion(db.DefaultContext, 2, packages_model.TypeContainer, "test", container_model.UploadVersion)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
pbs, err = packages_model.FindExpiredUnreferencedBlobs(db.DefaultContext, duration)
|
err = packages_service.Cleanup(nil, duration)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Empty(t, pbs)
|
|
||||||
|
|
||||||
_, err = packages_model.GetInternalVersionByNameAndVersion(db.DefaultContext, 2, packages_model.TypeContainer, "test", container_model.UploadVersion)
|
pbs, err = packages_model.FindExpiredUnreferencedBlobs(db.DefaultContext, duration)
|
||||||
assert.ErrorIs(t, err, packages_model.ErrPackageNotExist)
|
assert.NoError(t, err)
|
||||||
|
assert.Empty(t, pbs)
|
||||||
|
|
||||||
|
_, err = packages_model.GetInternalVersionByNameAndVersion(db.DefaultContext, 2, packages_model.TypeContainer, "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
|
||||||
|
Created int64
|
||||||
|
}
|
||||||
|
|
||||||
|
cases := []struct {
|
||||||
|
Name string
|
||||||
|
Versions []version
|
||||||
|
Rule *packages_model.PackageCleanupRule
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
Name: "Disabled",
|
||||||
|
Versions: []version{
|
||||||
|
{Version: "keep", ShouldExist: true},
|
||||||
|
},
|
||||||
|
Rule: &packages_model.PackageCleanupRule{
|
||||||
|
Enabled: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "KeepCount",
|
||||||
|
Versions: []version{
|
||||||
|
{Version: "keep", ShouldExist: true},
|
||||||
|
{Version: "v1.0", ShouldExist: true},
|
||||||
|
{Version: "test-3", ShouldExist: false, Created: 1},
|
||||||
|
{Version: "test-4", ShouldExist: false, Created: 1},
|
||||||
|
},
|
||||||
|
Rule: &packages_model.PackageCleanupRule{
|
||||||
|
Enabled: true,
|
||||||
|
KeepCount: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "KeepPattern",
|
||||||
|
Versions: []version{
|
||||||
|
{Version: "keep", ShouldExist: true},
|
||||||
|
{Version: "v1.0", ShouldExist: false},
|
||||||
|
},
|
||||||
|
Rule: &packages_model.PackageCleanupRule{
|
||||||
|
Enabled: true,
|
||||||
|
KeepPattern: "k.+p",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "RemoveDays",
|
||||||
|
Versions: []version{
|
||||||
|
{Version: "keep", ShouldExist: true},
|
||||||
|
{Version: "v1.0", ShouldExist: false, Created: 1},
|
||||||
|
},
|
||||||
|
Rule: &packages_model.PackageCleanupRule{
|
||||||
|
Enabled: true,
|
||||||
|
RemoveDays: 60,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "RemovePattern",
|
||||||
|
Versions: []version{
|
||||||
|
{Version: "test", ShouldExist: true},
|
||||||
|
{Version: "test-3", ShouldExist: false},
|
||||||
|
{Version: "test-4", ShouldExist: false},
|
||||||
|
},
|
||||||
|
Rule: &packages_model.PackageCleanupRule{
|
||||||
|
Enabled: true,
|
||||||
|
RemovePattern: `t[e]+st-\d+`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "MatchFullName",
|
||||||
|
Versions: []version{
|
||||||
|
{Version: "keep", ShouldExist: true},
|
||||||
|
{Version: "test", ShouldExist: false},
|
||||||
|
},
|
||||||
|
Rule: &packages_model.PackageCleanupRule{
|
||||||
|
Enabled: true,
|
||||||
|
RemovePattern: `package/test|different/keep`,
|
||||||
|
MatchFullName: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "Mixed",
|
||||||
|
Versions: []version{
|
||||||
|
{Version: "keep", ShouldExist: true, Created: time.Now().Add(time.Duration(10000)).Unix()},
|
||||||
|
{Version: "dummy", ShouldExist: true, Created: 1},
|
||||||
|
{Version: "test-3", ShouldExist: true},
|
||||||
|
{Version: "test-4", ShouldExist: false, Created: 1},
|
||||||
|
},
|
||||||
|
Rule: &packages_model.PackageCleanupRule{
|
||||||
|
Enabled: true,
|
||||||
|
KeepCount: 1,
|
||||||
|
KeepPattern: `dummy`,
|
||||||
|
RemoveDays: 7,
|
||||||
|
RemovePattern: `t[e]+st-\d+`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
t.Run(c.Name, func(t *testing.T) {
|
||||||
|
defer tests.PrintCurrentTest(t)()
|
||||||
|
|
||||||
|
for _, v := range c.Versions {
|
||||||
|
url := fmt.Sprintf("/api/packages/%s/generic/package/%s/file.bin", user.Name, v.Version)
|
||||||
|
req := NewRequestWithBody(t, "PUT", url, bytes.NewReader([]byte{1}))
|
||||||
|
AddBasicAuthHeader(req, user.Name)
|
||||||
|
MakeRequest(t, req, http.StatusCreated)
|
||||||
|
|
||||||
|
if v.Created != 0 {
|
||||||
|
pv, err := packages_model.GetVersionByNameAndVersion(db.DefaultContext, user.ID, packages_model.TypeGeneric, "package", v.Version)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
_, err = db.GetEngine(db.DefaultContext).Exec("UPDATE package_version SET created_unix = ? WHERE id = ?", v.Created, pv.ID)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Rule.OwnerID = user.ID
|
||||||
|
c.Rule.Type = packages_model.TypeGeneric
|
||||||
|
|
||||||
|
pcr, err := packages_model.InsertCleanupRule(db.DefaultContext, c.Rule)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
err = packages_service.Cleanup(nil, duration)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
for _, v := range c.Versions {
|
||||||
|
pv, err := packages_model.GetVersionByNameAndVersion(db.DefaultContext, user.ID, packages_model.TypeGeneric, "package", v.Version)
|
||||||
|
if v.ShouldExist {
|
||||||
|
assert.NoError(t, err)
|
||||||
|
err = packages_service.DeletePackageVersionAndReferences(db.DefaultContext, pv)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
} else {
|
||||||
|
assert.ErrorIs(t, err, packages_model.ErrPackageNotExist)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NoError(t, packages_model.DeleteCleanupRuleByID(db.DefaultContext, pcr.ID))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue