Tier-2 engine rework: class-driven legs, v2 layout, NAS-target exclusion (Task 3b, v0.135.0)
tier2_capture.go: classified apps get TierSecondary per-bind legs (paperless copy shrinks — export
drops); legacy apps keep the byte-identical resolver set. v2 relpath-mirroring layout
(backups/secondary/<stack>/{marker LAST, recovery-unit/, hdd/<rel>/, userdata/<rel>/}); N>1 native
(errTier2MultiDir/tier2AppDataName deleted). Migration=delete-and-rebuild + reconcile; all RemoveAll
via tier2SafeRemove (refuses outside backups/secondary/). SSD=state-only tier. selectTier2Target
never picks network storage (pinned+auto, F-6C-1). Restore reads v2 behind a marker gate.
Part 0: offbox_enlarge_blocked is a persisted one-time Load seed (opt-out sticks), not a getter
append. Part 0.5: offsite restore scratch prefers a local (non-network) path.
Full v2 test suite + all 10 §10 red-proofs verified. Destructive writes bounded to backups/secondary/.
This commit is contained in:
@@ -70,7 +70,10 @@ func newT2RManager(t *testing.T) (m *Manager, fake *t2rFakeProvider, liveDrive,
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
mustWrite(t, filepath.Join(destDrive, "backups", "secondary", "app", "appdata", "photos", "a.jpg"), "JPEGDATA")
|
||||
// v2 layout: marker + an hdd/ leg with content.
|
||||
destBase := filepath.Join(destDrive, "backups", "secondary", "app")
|
||||
mustWrite(t, filepath.Join(destBase, "hdd", "appdata", "photos", "a.jpg"), "JPEGDATA")
|
||||
mustWrite(t, filepath.Join(destBase, tier2LayoutMarker), tier2LayoutVersion)
|
||||
|
||||
fake = &t2rFakeProvider{hdd: liveDrive}
|
||||
m = &Manager{
|
||||
@@ -100,11 +103,12 @@ func TestRestoreTier2Files_Orchestration(t *testing.T) {
|
||||
if n != 3 {
|
||||
t.Errorf("filesRestored = %d, want 3", n)
|
||||
}
|
||||
if want := filepath.Join(destDrive, "backups", "secondary", "app", "appdata"); gotSrc != want {
|
||||
t.Errorf("copier src = %q, want the RECORDED Tier-2 copy %q", gotSrc, want)
|
||||
// v2: the hdd/ subtree merges whole into the live namespace root (relpath-mirroring).
|
||||
if want := filepath.Join(destDrive, "backups", "secondary", "app", "hdd"); gotSrc != want {
|
||||
t.Errorf("copier src = %q, want the v2 hdd/ subtree %q", gotSrc, want)
|
||||
}
|
||||
if want := AppDataDir(liveDrive, "app"); gotDst != want {
|
||||
t.Errorf("copier dst = %q, want live appdata %q", gotDst, want)
|
||||
if gotDst != liveDrive {
|
||||
t.Errorf("copier dst = %q, want the live namespace root %q", gotDst, liveDrive)
|
||||
}
|
||||
if len(fake.order) != 3 || fake.order[0] != "stop" || fake.order[1] != "copy" || fake.order[2] != "start" {
|
||||
t.Errorf("order = %v, want [stop copy start]", fake.order)
|
||||
|
||||
Reference in New Issue
Block a user