diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-05-13 17:58:18 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-05-13 17:58:18 +0900 |
| commit | f2f17261905e6ea6c686bb490188f86710fd9720 (patch) | |
| tree | 427aaa81253e469f3fceb0289a35aa97b0e86776 /internal/pkg/exec_test.go | |
| parent | f63203cb0a1ed9c1aa74d3608836e3899d8a12d5 (diff) | |
internal/pkg: record cure faults
These are useful for troubleshooting. This change records them in a separate directory.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/exec_test.go')
| -rw-r--r-- | internal/pkg/exec_test.go | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/internal/pkg/exec_test.go b/internal/pkg/exec_test.go index cab7a9ca..e6751f0f 100644 --- a/internal/pkg/exec_test.go +++ b/internal/pkg/exec_test.go @@ -1,6 +1,7 @@ package pkg_test import ( + "bytes" _ "embed" "encoding/gob" "errors" @@ -112,18 +113,40 @@ func TestExec(t *testing.T) { }) // check init failure passthrough - var exitError *exec.ExitError - if _, _, err := c.Cure(pkg.NewExec( + initFailureArtifact := pkg.NewExec( "", "", nil, 0, false, false, pkg.AbsWork, nil, check.MustAbs("/opt/bin/testtool"), []string{"testtool"}, - )); !errors.As(err, &exitError) || + ) + var exitError *exec.ExitError + if _, _, err := c.Cure(initFailureArtifact); !errors.As(err, &exitError) || exitError.ExitCode() != hst.ExitFailure { t.Fatalf("Cure: error = %v, want init exit status 1", err) } + var faultStatus []byte + if faults, err := c.ReadFaults(initFailureArtifact); err != nil { + t.Fatal(err) + } else if len(faults) != 1 { + t.Fatalf("ReadFaults: %v", faults) + } else if faultStatus, err = os.ReadFile(faults[0].String()); err != nil { + t.Fatal(err) + } else if err = faults[0].Destroy(); err != nil { + t.Fatal(err) + } else { + t.Logf("destroyed expected fault at %s", faults[0].Time().UTC()) + } + + if !bytes.HasPrefix(faultStatus, []byte( + "internal/pkg ", + )) || !bytes.Contains(faultStatus, []byte( + "\ninit: fork/exec /opt/bin/testtool: no such file or directory\n", + )) { + t.Errorf("unexpected status:\n%s", string(faultStatus)) + } + testtoolDestroy(t, base, c) }, expectsFS{ ".": {Mode: fs.ModeDir | 0700}, |
