R-488: backup tests read ONE health-wait clock; package 444 s -> ~2 s
waitForHealthy's 3 s settle / 5 s poll / 90 s timeout become package vars (production values unchanged, pinned by TestR488_HealthWaitDefaultsAreProduction); TestMain shortens them once. Measured before: 51 of 599 tests held 442 of 444 s, two not-running fixtures 279 s alone. newOffboxManager now installs a failing SSH fake: TestOffbox_ConfirmedReset was spawning a real 'ssh felhom@nas.local' and waiting out its 10 s ConnectTimeout. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -87,7 +87,7 @@ func (m *Manager) RestoreApp(stackName, snapshotID string) error {
|
||||
}
|
||||
|
||||
// Verify app started successfully
|
||||
if err := m.waitForHealthy(stackName, 90*time.Second); err != nil {
|
||||
if err := m.waitForHealthy(stackName, healthTimeout); err != nil {
|
||||
m.logger.Printf("[WARN] [backup] Restore completed but app health check failed: %v", err)
|
||||
}
|
||||
|
||||
@@ -203,13 +203,23 @@ func (m *Manager) restoreDockerVolumesFrom(stackName, dumpDir string) (int, erro
|
||||
return restored, nil
|
||||
}
|
||||
|
||||
// waitForHealthy's clock (R-488). These are the PRODUCTION values; they are variables only so the
|
||||
// package's tests can shorten them in ONE place (main_test.go TestMain) instead of every restore
|
||||
// test sleeping 3 s of settle and every not-running fixture waiting out the full 90 s — that was
|
||||
// ~280 s of the package's ~440 s. TestR488_HealthWaitDefaultsAreProduction pins the values.
|
||||
var (
|
||||
healthSettle = 3 * time.Second // initial settling time before the first poll
|
||||
healthInterval = 5 * time.Second // between polls
|
||||
healthTimeout = 90 * time.Second // how long a restored stack gets to reach running
|
||||
)
|
||||
|
||||
// waitForHealthy waits for a stack to reach running state after restore.
|
||||
// Forces a docker ps refresh on each poll to avoid stale state.
|
||||
func (m *Manager) waitForHealthy(stackName string, timeout time.Duration) error {
|
||||
deadline := time.Now().Add(timeout)
|
||||
interval := 5 * time.Second
|
||||
interval := healthInterval
|
||||
|
||||
time.Sleep(3 * time.Second) // initial settling time
|
||||
time.Sleep(healthSettle) // initial settling time
|
||||
|
||||
for time.Now().Before(deadline) {
|
||||
if m.stackProvider == nil {
|
||||
|
||||
Reference in New Issue
Block a user