phraser: the startup wait is a config field, and it is tested (V-323)
The last untested arm of startLlamaProc was `case <-time.After(60 * time.Second)`, and it could not be tested as written — a test would have had to wait a real minute. It is Config.StartupTimeout now, defaulted to 60s in DefaultConfig and surfaced as phraser.startup_timeout, so the box can raise it: a cold 1.7B loading off a spinning disk can outrun 60s and that failed the boot with nothing to turn. The test asserts the child is dead, not just that the error came back. That arm is the one most likely to leak, because the child is alive and busy loading a model rather than already gone — so the fake records its pid before it hangs. startLlamaProc 90.9% → 95.7%, package 76.9% → 77.3%.
This commit is contained in:
@@ -105,6 +105,35 @@ exit 1`)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("startup timeout", func(t *testing.T) {
|
||||
// The 60s wait was a literal in the select, so this arm could only be
|
||||
// tested by waiting a real minute (Vikunja #323). It is Config now.
|
||||
//
|
||||
// The child records its pid, because startLlamaProc returns nil on
|
||||
// every failure arm and this is the arm where the child is alive and
|
||||
// busy loading a model rather than already dead.
|
||||
pidFile := filepath.Join(t.TempDir(), "pid")
|
||||
bin := fakeLlama(t, `echo $$ > `+pidFile+`
|
||||
while : ; do sleep 1 ; done`)
|
||||
cfg := testCfg(bin)
|
||||
cfg.StartupTimeout = 50 * time.Millisecond
|
||||
_, err := startLlamaProc(context.Background(), cfg)
|
||||
if err == nil || !strings.Contains(err.Error(), "did not start within") {
|
||||
t.Fatalf("err = %v, want the startup-timeout arm", err)
|
||||
}
|
||||
raw, readErr := os.ReadFile(pidFile)
|
||||
if readErr != nil {
|
||||
t.Fatalf("the child never ran: %v", readErr)
|
||||
}
|
||||
pid, convErr := strconv.Atoi(strings.TrimSpace(string(raw)))
|
||||
if convErr != nil {
|
||||
t.Fatalf("pid file %q: %v", raw, convErr)
|
||||
}
|
||||
if err := syscall.Kill(pid, 0); err == nil {
|
||||
t.Errorf("child %d survived the startup timeout", pid)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("context cancelled during startup", func(t *testing.T) {
|
||||
// Never prints the listen line and never exits: only ctx can end this.
|
||||
bin := fakeLlama(t, `while : ; do sleep 1 ; done`)
|
||||
|
||||
Reference in New Issue
Block a user