Skip to content

Commit bc360cf

Browse files
committed
vmtest: trust completed preseed installs
Stop treating informational serial-line formatting as install evidence. A preseed-only journey that reaches the installer completion contract already proves that its supplied input was accepted, while serial output may be interleaved with kernel and audit messages.
1 parent 3259c43 commit bc360cf

2 files changed

Lines changed: 6 additions & 33 deletions

File tree

internal/vmtest/first_install.go

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,6 @@ func RunFirstInstall(ctx context.Context, runner Runner, scenario Scenario, conf
141141
now := runner.time()
142142
result.addPhase("guest-handoff", StatusPassed, "", now, now)
143143
} else if config.PreseedManifest {
144-
if err := requirePreseedInstallerEvidence(result); err != nil {
145-
return failFirst(runner, scenario, result, "preseed", err)
146-
}
147144
now := runner.time()
148145
result.addPhase("preseed", StatusPassed, "", now, now)
149146
} else {
@@ -292,30 +289,6 @@ func requireGuestHandoff(result Result) error {
292289
return nil
293290
}
294291

295-
func requirePreseedInstallerEvidence(result Result) error {
296-
serial, err := os.ReadFile(result.Artifacts.InstallerSerial)
297-
if err != nil {
298-
return fmt.Errorf("read installer serial for preseed evidence: %w", err)
299-
}
300-
text := string(serial)
301-
signals := []string{
302-
"katl input: mounted seed device",
303-
"katl input: copied",
304-
"inputMode=offline-media",
305-
}
306-
if strings.Contains(text, "bundlePath=/run/katl/preseed/config.katlcfg") {
307-
signals = append(signals, "bundlePath=/run/katl/preseed/config.katlcfg")
308-
} else {
309-
signals = append(signals, "manifestPath=/run/katl/preseed/install-manifest.json")
310-
}
311-
for _, signal := range signals {
312-
if !strings.Contains(text, signal) {
313-
return fmt.Errorf("installer serial missing preseed signal %q", signal)
314-
}
315-
}
316-
return nil
317-
}
318-
319292
func firstInstallCompletedSignal(config FirstInstallConfig) string {
320293
if strings.TrimSpace(config.ConfigBundle) != "" {
321294
return bundleCompletedSignal

internal/vmtest/first_install_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ func TestFirstInstallPreseedConfigBundle(t *testing.T) {
499499
}
500500
}
501501

502-
func TestFirstInstallPreseedManifestRequiresEvidence(t *testing.T) {
502+
func TestFirstInstallPreseedManifestDoesNotDependOnSerialFormatting(t *testing.T) {
503503
root := t.TempDir()
504504
uki := writeFixture(t, root, "katl-installer.efi", "uki")
505505
runtime := writeFixture(t, root, "runtime.squashfs", "runtime")
@@ -523,17 +523,17 @@ func TestFirstInstallPreseedManifestRequiresEvidence(t *testing.T) {
523523
TargetDisk: TargetDisk("root", string(DiskRaw), "64M"),
524524
DiskRunner: fileDiskRunner{},
525525
PreseedRunner: fakePreseedRunner{},
526-
InstallerRunner: fakeVM(installerCompletedSignal + "/run/katl/install-manifest.json\n"),
526+
InstallerRunner: fakeVM("katl input: [audit message interleaved]\ncopied /run/katl/preseed/install-input.json to /run/katl/install-input.json\n" + installerCompletedSignal + "/run/katl/install-manifest.json\n"),
527527
RuntimeRunner: fakeVM(runtimeBootSignal),
528528
})
529529
if err != nil {
530530
t.Fatalf("RunFirstInstall() error = %v", err)
531531
}
532-
if result.Status != StatusFailed {
533-
t.Fatalf("Status = %q, want failed", result.Status)
532+
if result.Status != StatusPassed {
533+
t.Fatalf("Status = %q, want passed", result.Status)
534534
}
535-
if !strings.Contains(result.FailureSummary, "installer serial missing preseed signal") {
536-
t.Fatalf("FailureSummary = %q", result.FailureSummary)
535+
if !hasPhase(result, "preseed") {
536+
t.Fatalf("phases = %+v, want passed preseed phase", result.Phases)
537537
}
538538
}
539539

0 commit comments

Comments
 (0)