65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
package purge
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/klarkxy/nekonest-cloud/relay/internal/controlplane"
|
|
"github.com/klarkxy/nekonest-cloud/relay/internal/tenantfs"
|
|
)
|
|
|
|
type fakeRegistry struct{ calls int }
|
|
|
|
func (registry *fakeRegistry) QuiesceForPurge(string, int64) error {
|
|
registry.calls++
|
|
return nil
|
|
}
|
|
|
|
type fakeControl struct{ updates []controlplane.PurgeAdvance }
|
|
|
|
func (control *fakeControl) AdvancePurge(_ context.Context, update controlplane.PurgeAdvance) error {
|
|
control.updates = append(control.updates, update)
|
|
return nil
|
|
}
|
|
|
|
func TestManagerQuiescesDeletesAndReportsEvidence(t *testing.T) {
|
|
const tenantID = "tenant_0123456789abcdef0123456789abcdef"
|
|
dataRoot := t.TempDir()
|
|
backupRoot := t.TempDir()
|
|
paths, err := tenantfs.Resolve(dataRoot, tenantID)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(paths.Database, []byte("data"), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
backupTenant := filepath.Join(backupRoot, filepath.Base(paths.Root), "backup")
|
|
if err := os.MkdirAll(backupTenant, 0o700); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
registry := &fakeRegistry{}
|
|
control := &fakeControl{}
|
|
manager, err := New(Config{
|
|
DataRoot: dataRoot, BackupRoot: backupRoot, Registry: registry, ControlPlane: control,
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assignment := controlplane.PurgeAssignment{
|
|
PurgeID: "purge_0123456789abcdef0123456789abcdef",
|
|
TenantID: tenantID, PlacementGeneration: 7,
|
|
}
|
|
if err := manager.process(context.Background(), assignment); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if registry.calls != 1 || len(control.updates) != 1 || control.updates[0].Action != "completed" ||
|
|
len(control.updates[0].EvidenceSHA256) != 64 {
|
|
t.Fatalf("registry=%d updates=%#v", registry.calls, control.updates)
|
|
}
|
|
if _, err := os.Lstat(paths.Root); !os.IsNotExist(err) {
|
|
t.Fatalf("tenant data survived: %v", err)
|
|
}
|
|
}
|