返回 DeepSeek-Reasonix
relauncher_test.go
根目录 / desktop / relauncher_test.go
1 package main
2
3 import (
4 "os"
5 "path/filepath"
6 "testing"
7
8 "reasonix/internal/installlayout"
9 )
10
11 func seedDesktopVersionedLayout(t *testing.T, root, version, payload string) string {
12 t.Helper()
13 src := t.TempDir()
14 members := make([]installlayout.Member, 0, len(installlayout.AllowedVersionMembers()))
15 for _, name := range installlayout.AllowedVersionMembers() {
16 path := filepath.Join(src, version+"-"+name)
17 if err := os.WriteFile(path, []byte(payload+"-"+name), 0o755); err != nil {
18 t.Fatal(err)
19 }
20 members = append(members, installlayout.Member{Name: name, Path: path})
21 }
22 launcherSrc := filepath.Join(src, version+"-launcher")
23 if err := os.WriteFile(launcherSrc, []byte(payload+"-launcher"), 0o755); err != nil {
24 t.Fatal(err)
25 }
26 if err := installlayout.ActivateVersion(installlayout.ActivationRequest{
27 InstallRoot: root,
28 Version: version,
29 RequestID: "desktop-relaunch-" + version,
30 Members: members,
31 RootMembers: []installlayout.Member{
32 {Name: installlayout.LauncherBinaryName(), Path: launcherSrc},
33 },
34 RequiredRootNames: []string{installlayout.LauncherBinaryName()},
35 }); err != nil {
36 t.Fatal(err)
37 }
38 desktop, err := installlayout.ActiveDesktopPath(root)
39 if err != nil {
40 t.Fatal(err)
41 }
42 return desktop
43 }
44
45 func TestRelaunchTargetUsesLauncherInsteadOfRetainedDesktop(t *testing.T) {
46 root := t.TempDir()
47 oldDesktop := seedDesktopVersionedLayout(t, root, "v1.24.0", "old")
48 _ = seedDesktopVersionedLayout(t, root, "v1.24.1", "new")
49 got, err := relaunchTarget(oldDesktop)
50 if err != nil {
51 t.Fatal(err)
52 }
53 want := filepath.Join(root, installlayout.LauncherBinaryName())
54 if got != want {
55 t.Fatalf("relaunchTarget = %s, want %s", got, want)
56 }
57 }
58
59 func TestRelaunchTargetAllowsCurrentDesktopFallback(t *testing.T) {
60 for _, versioned := range []bool{false, true} {
61 name := "flat"
62 if versioned {
63 name = "versioned"
64 }
65 t.Run(name, func(t *testing.T) {
66 root := t.TempDir()
67 exe := filepath.Join(root, installlayout.DesktopBinaryName())
68 if versioned {
69 exe = seedDesktopVersionedLayout(t, root, "v1.24.1", "active")
70 if err := os.Remove(filepath.Join(root, installlayout.LauncherBinaryName())); err != nil {
71 t.Fatal(err)
72 }
73 } else if err := os.WriteFile(exe, []byte("desktop"), 0o755); err != nil {
74 t.Fatal(err)
75 }
76 got, err := relaunchTarget(exe)
77 if err != nil {
78 t.Fatal(err)
79 }
80 if got != exe {
81 t.Fatalf("relaunchTarget = %s, want current desktop %s", got, exe)
82 }
83 })
84 }
85 }
86
87 func TestSupersededDesktopNeedsRelaunch(t *testing.T) {
88 root := t.TempDir()
89 oldDesktop := seedDesktopVersionedLayout(t, root, "v1.24.0", "old")
90 newDesktop := seedDesktopVersionedLayout(t, root, "v1.24.1", "new")
91 if supersededDesktopNeedsRelaunch(newDesktop) {
92 t.Fatal("active desktop should not relaunch")
93 }
94 if !supersededDesktopNeedsRelaunch(oldDesktop) {
95 t.Fatal("retained previous desktop must relaunch through the launcher")
96 }
97 t.Setenv("REASONIX_DEV", "1")
98 if supersededDesktopNeedsRelaunch(oldDesktop) {
99 t.Fatal("REASONIX_DEV must skip superseded relaunch")
100 }
101 }
102
103 func TestLauncherPathForExecutableDoesNotReturnRetainedDesktop(t *testing.T) {
104 root := t.TempDir()
105 oldDesktop := seedDesktopVersionedLayout(t, root, "v1.24.0", "old")
106 _ = seedDesktopVersionedLayout(t, root, "v1.24.1", "new")
107 got := launcherPathForExecutable(oldDesktop)
108 want := filepath.Join(root, installlayout.LauncherBinaryName())
109 if got != want {
110 t.Fatalf("launcherPathForExecutable = %s, want %s", got, want)
111 }
112 }
113
113 lines GO