feat(config): add expired box cleanup functionality
Adds dedicated config setting and cleanup logic for managing expired content boxes via admin tools and CLI.
This commit is contained in:
58
lib/boxstore/cleanup_test.go
Normal file
58
lib/boxstore/cleanup_test.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package boxstore
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"warpbox/lib/models"
|
||||
)
|
||||
|
||||
func TestCleanupExpiredBoxesDeletesOnlyExpiredManifestBoxes(t *testing.T) {
|
||||
root := filepath.Join(t.TempDir(), "uploads")
|
||||
previousRoot := UploadRoot()
|
||||
t.Cleanup(func() { SetUploadRoot(previousRoot) })
|
||||
SetUploadRoot(root)
|
||||
|
||||
expiredID := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||||
activeID := "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||||
legacyID := "cccccccccccccccccccccccccccccccc"
|
||||
|
||||
if err := os.MkdirAll(BoxPath(expiredID), 0755); err != nil {
|
||||
t.Fatalf("mkdir expired: %v", err)
|
||||
}
|
||||
if err := os.MkdirAll(BoxPath(activeID), 0755); err != nil {
|
||||
t.Fatalf("mkdir active: %v", err)
|
||||
}
|
||||
if err := os.MkdirAll(BoxPath(legacyID), 0755); err != nil {
|
||||
t.Fatalf("mkdir legacy: %v", err)
|
||||
}
|
||||
|
||||
if err := WriteManifest(expiredID, models.BoxManifest{CreatedAt: time.Now().UTC().Add(-2 * time.Hour), ExpiresAt: time.Now().UTC().Add(-time.Minute)}); err != nil {
|
||||
t.Fatalf("write expired manifest: %v", err)
|
||||
}
|
||||
if err := WriteManifest(activeID, models.BoxManifest{CreatedAt: time.Now().UTC(), ExpiresAt: time.Now().UTC().Add(time.Hour)}); err != nil {
|
||||
t.Fatalf("write active manifest: %v", err)
|
||||
}
|
||||
|
||||
result, err := CleanupExpiredBoxes()
|
||||
if err != nil {
|
||||
t.Fatalf("cleanup failed: %v", err)
|
||||
}
|
||||
if result.Deleted != 1 {
|
||||
t.Fatalf("expected 1 deleted box, got %d", result.Deleted)
|
||||
}
|
||||
if len(result.DeletedIDs) != 1 || result.DeletedIDs[0] != expiredID {
|
||||
t.Fatalf("expected deleted id %s, got %#v", expiredID, result.DeletedIDs)
|
||||
}
|
||||
if _, err := os.Stat(BoxPath(expiredID)); !os.IsNotExist(err) {
|
||||
t.Fatalf("expected expired box dir removed, stat err=%v", err)
|
||||
}
|
||||
if _, err := os.Stat(BoxPath(activeID)); err != nil {
|
||||
t.Fatalf("expected active box to remain, stat err=%v", err)
|
||||
}
|
||||
if _, err := os.Stat(BoxPath(legacyID)); err != nil {
|
||||
t.Fatalf("expected legacy box to remain, stat err=%v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user