返回 DeepSeek-Reasonix
session_service_shutdown_test.go
根目录 / desktop / session_service_shutdown_test.go
1 package main
2
3 import (
4 "context"
5 "path/filepath"
6 "testing"
7
8 "reasonix/internal/session"
9 )
10
11 func TestShutdownReleasesCachedSessionOwner(t *testing.T) {
12 dir := filepath.Join(t.TempDir(), "sessions")
13 app := NewApp()
14 service := app.desktopSessionService(dir)
15 if service == nil {
16 t.Fatal("missing session service")
17 }
18 runtime, err := service.Create(t.Context(), session.CreateOptions{SessionID: "shutdown-cache"})
19 if err != nil {
20 t.Fatal(err)
21 }
22 binding, err := service.Bind(runtime)
23 if err != nil {
24 t.Fatal(err)
25 }
26 if err := binding.Release(t.Context()); err != nil {
27 t.Fatal(err)
28 }
29 app.shutdown(context.Background())
30 if _, ok := service.Runtime(runtime.Ref()); ok {
31 t.Fatal("shutdown retained the idle runtime")
32 }
33 reopened, err := session.NewService("local", session.NewFilesystemPersistence(app.desktopSessions.root))
34 if err != nil {
35 t.Fatal(err)
36 }
37 t.Cleanup(func() { _ = reopened.CloseAll(context.Background()) })
38 reader, err := reopened.EnsureExecution(t.Context(), runtime.Ref())
39 if err != nil {
40 t.Fatalf("shutdown retained the writer lease: %v", err)
41 }
42 if err := reader.Release(t.Context()); err != nil {
43 t.Fatal(err)
44 }
45 if err := reopened.CloseAll(t.Context()); err != nil {
46 t.Fatal(err)
47 }
48 }
49
49 lines GO