返回 DeepSeek-Reasonix
session_purge_cache_test.go
根目录 / desktop / session_purge_cache_test.go
1 package main
2
3 import (
4 "testing"
5
6 "reasonix/desktop/internal/workspacestate"
7 )
8
9 func TestArchiveRetiresCachedCanonicalRuntime(t *testing.T) {
10 a, ref := lifecycleFixture(t)
11 service := a.desktopSessionService("")
12 binding, err := service.Open(t.Context(), ref)
13 if err != nil {
14 t.Fatal(err)
15 }
16 if err := binding.Release(t.Context()); err != nil {
17 t.Fatal(err)
18 }
19 if _, cached := service.Runtime(ref); !cached {
20 t.Fatal("fixture must retain an unbound cached runtime")
21 }
22 if err := a.ArchiveCanonicalSession(ref); err != nil {
23 t.Fatal(err)
24 }
25 if _, cached := service.Runtime(ref); cached {
26 t.Fatal("archived runtime retained its writer lease in the idle cache")
27 }
28 if err := a.PurgeCanonicalSession(ref); err != nil {
29 t.Fatal(err)
30 }
31 }
32
33 func TestPurgeRetiresOnlyUnboundArchivedRuntime(t *testing.T) {
34 a, ref := lifecycleFixture(t)
35 if err := a.ArchiveCanonicalSession(ref); err != nil {
36 t.Fatal(err)
37 }
38 service := a.desktopSessionService("")
39 binding, err := service.Open(t.Context(), ref)
40 if err != nil {
41 t.Fatal(err)
42 }
43 t.Cleanup(func() { _ = binding.Release(t.Context()) })
44 if err := a.PurgeCanonicalSession(ref); err == nil {
45 t.Fatal("purge closed a runtime still bound to a client")
46 }
47 state, err := a.workspaceRegistry().Load(t.Context())
48 if err != nil || state.SessionStates[ref.SessionID].Lifecycle != workspacestate.Archived {
49 t.Fatalf("bound purge changed lifecycle: %+v %v", state, err)
50 }
51 if err := binding.Release(t.Context()); err != nil {
52 t.Fatal(err)
53 }
54 if err := a.PurgeCanonicalSession(ref); err != nil {
55 t.Fatalf("unbound cache blocked purge: %v", err)
56 }
57 }
58
58 lines GO