Replace restore phase globals

This commit is contained in:
2026-09-05 18:05:18 +00:00
parent f51b9bb046
commit 85663f5bc9
7 changed files with 93 additions and 185 deletions

View File

@@ -21,26 +21,17 @@ func TestRestoreHoldsTransitionLockBeforePlanning(t *testing.T) {
fake := &storage.FakeBackend{}
cfg, _, _, _ := seedRestoreCommittedState(t, fake, pipelinePath, campaignPath, sessionPath)
origStoreFn := newObjectStoreFromConfigFn
origDiscoverFn := discoverRemoteCurrentStateFn
origPlanFn := buildRestorePlanFn
t.Cleanup(func() {
newObjectStoreFromConfigFn = origStoreFn
discoverRemoteCurrentStateFn = origDiscoverFn
buildRestorePlanFn = origPlanFn
})
current, err := discoverRemoteCurrentState(context.Background(), cfg, fake)
if err != nil {
t.Fatalf("discoverRemoteCurrentState() error = %v", err)
}
planning := make(chan struct{})
releasePlanning := make(chan struct{})
newObjectStoreFromConfigFn = func(context.Context, *config.Config) (storage.ObjectStore, error) { return fake, nil }
discoverRemoteCurrentStateFn = func(context.Context, *config.Config, storage.ObjectStore) (*RemoteCurrentState, error) {
deps := restoreCommandDependencies(fake)
deps.discoverRemoteCurrentState = func(context.Context, *config.Config, storage.ObjectStore) (*RemoteCurrentState, error) {
return current, nil
}
buildRestorePlanFn = func(context.Context, *config.Config, *RemoteCurrentState, storage.ObjectStore, RestorePlanOptions) (*RestorePlan, error) {
deps.buildRestorePlan = func(context.Context, *config.Config, *RemoteCurrentState, storage.ObjectStore, RestorePlanOptions) (*RestorePlan, error) {
close(planning)
<-releasePlanning
return &RestorePlan{}, nil
@@ -48,12 +39,12 @@ func TestRestoreHoldsTransitionLockBeforePlanning(t *testing.T) {
restoreDone := make(chan error, 1)
go func() {
restoreDone <- Restore(context.Background(), []string{
restoreDone <- restoreWithDependencies(context.Background(), []string{
cfg.Session.SessionID,
"--config", pipelinePath,
"--campaign-file", campaignPath,
"--session", sessionPath,
}, &bytes.Buffer{})
}, &bytes.Buffer{}, deps)
}()
<-planning
@@ -102,12 +93,12 @@ func TestForcedRestoreRetryClearsIncompleteMarker(t *testing.T) {
}
return nil
}
restoreWithStoreAndRealPhases(t, fake)
executeRestore := restoreCommandExecutor(fake)
var stdout bytes.Buffer
var stderr bytes.Buffer
args := []string{"session", "restore", cfg.Session.SessionID, "--config", pipelinePath, "--campaign-file", campaignPath, "--session", sessionPath, "--force"}
if code := Execute(args, &stdout, &stderr); code == 0 {
if code := executeRestore(args, &stdout, &stderr); code == 0 {
t.Fatal("forced restore exit code = 0, want partial-install failure")
}
markerPath := artifacts.SessionRestoreMarkerPathForCampaign(workspaceRoot, cfg.Session.Campaign, cfg.Session.SessionID)
@@ -119,7 +110,7 @@ func TestForcedRestoreRetryClearsIncompleteMarker(t *testing.T) {
fake.DownloadHook = nil
stdout.Reset()
stderr.Reset()
if code := Execute(args, &stdout, &stderr); code != 0 {
if code := executeRestore(args, &stdout, &stderr); code != 0 {
t.Fatalf("restore retry exit code = %d, want 0; stderr=%q", code, stderr.String())
}
if _, err := os.Stat(markerPath); !os.IsNotExist(err) {