返回 DeepSeek-Reasonix
endpoint_windows_test.go
根目录 / desktop / internal / instanceidentity / endpoint_windows_test.go
1 //go:build windows
2
3 package instanceidentity
4
5 import (
6 "os"
7 "path/filepath"
8 "testing"
9 "time"
10
11 "golang.org/x/sys/windows"
12 )
13
14 func TestElectronEndpointUsesKernelProcessIdentityAndClosesGeneration(t *testing.T) {
15 id := ForHome(t.TempDir())
16 if got, err := EndpointImage(id); err != nil || got != "" {
17 t.Fatalf("unstarted endpoint=%q %v", got, err)
18 }
19 stop, err := ListenEndpoint(id)
20 if err != nil {
21 t.Fatal(err)
22 }
23 t.Cleanup(stop)
24 if second, err := ListenEndpoint(id); err == nil {
25 second()
26 t.Fatal("allowed duplicate service endpoint")
27 }
28 got, err := EndpointImage(id)
29 if err != nil {
30 t.Fatal(err)
31 }
32 want, err := os.Executable()
33 if err != nil {
34 t.Fatal(err)
35 }
36 a, err := os.Stat(got)
37 if err != nil {
38 t.Fatal(err)
39 }
40 b, err := os.Stat(want)
41 if err != nil {
42 t.Fatal(err)
43 }
44 if !os.SameFile(a, b) {
45 t.Fatalf("endpoint owner=%s want=%s", got, want)
46 }
47 stop()
48 if got, err := EndpointImage(id); err != nil || got != "" {
49 t.Fatalf("closed generation=%q %v", got, err)
50 }
51 stopNext, err := ListenEndpoint(id)
52 if err != nil {
53 t.Fatal(err)
54 }
55 defer stopNext()
56 stop() // old cleanup cannot close the new generation.
57 if got, err := EndpointImage(id); err != nil || got == "" {
58 t.Fatalf("replacement endpoint=%q %v", got, err)
59 }
60 other := ForHome(filepath.Join(t.TempDir(), "other"))
61 if got, err := EndpointImage(other); err != nil || got != "" {
62 t.Fatalf("cross-home endpoint=%q %v", got, err)
63 }
64 }
65
66 func TestElectronEndpointShutdownCancelsUnacknowledgedClient(t *testing.T) {
67 id := ForHome(t.TempDir())
68 stop, err := ListenEndpoint(id)
69 if err != nil {
70 t.Fatal(err)
71 }
72 defer stop()
73 name, err := endpointName(id)
74 if err != nil {
75 t.Fatal(err)
76 }
77 client, err := windows.CreateFile(name, windows.GENERIC_READ|windows.GENERIC_WRITE, 0, nil, windows.OPEN_EXISTING, 0, 0)
78 if err != nil {
79 t.Fatal(err)
80 }
81 defer windows.CloseHandle(client)
82 done := make(chan struct{})
83 go func() { stop(); close(done) }()
84 select {
85 case <-done:
86 case <-time.After(3 * time.Second):
87 t.Fatal("shutdown blocked on a silent endpoint client")
88 }
89 }
90
90 lines GO