|
4 | 4 | "archive/tar" |
5 | 5 | "compress/gzip" |
6 | 6 | "os" |
| 7 | + "os/exec" |
7 | 8 | "path/filepath" |
| 9 | + "reflect" |
8 | 10 | "runtime" |
9 | 11 | "testing" |
10 | 12 | ) |
@@ -192,3 +194,46 @@ func TestArchIncompatibleFilenameStillParsed(t *testing.T) { |
192 | 194 | t.Fatal("incompatible package should carry a reason") |
193 | 195 | } |
194 | 196 | } |
| 197 | + |
| 198 | +func TestRunPkgManagerWrapsWithSystemdRun(t *testing.T) { |
| 199 | + var calls [][]string |
| 200 | + m := NewManager("", "", nil) |
| 201 | + m.execFn = func(name string, arg ...string) *exec.Cmd { |
| 202 | + calls = append(calls, append([]string{name}, arg...)) |
| 203 | + // 探测 systemd-run --version 与包装后的命令均返回成功 |
| 204 | + return exec.Command("echo", "ok") |
| 205 | + } |
| 206 | + if _, err := m.runPkgManager("dpkg", "--force-confnew", "--force-confmiss", "-i", "/tmp/x.deb"); err != nil { |
| 207 | + t.Fatal(err) |
| 208 | + } |
| 209 | + if len(calls) != 2 { |
| 210 | + t.Fatalf("expected 2 calls, got %v", calls) |
| 211 | + } |
| 212 | + want := []string{"systemd-run", "--wait", "--quiet", "--slice=system.slice", "--", "dpkg", "--force-confnew", "--force-confmiss", "-i", "/tmp/x.deb"} |
| 213 | + if !reflect.DeepEqual(calls[1], want) { |
| 214 | + t.Fatalf("unexpected wrapped call: %v", calls[1]) |
| 215 | + } |
| 216 | +} |
| 217 | + |
| 218 | +func TestRunPkgManagerFallback(t *testing.T) { |
| 219 | + var calls [][]string |
| 220 | + m := NewManager("", "", nil) |
| 221 | + m.execFn = func(name string, arg ...string) *exec.Cmd { |
| 222 | + calls = append(calls, append([]string{name}, arg...)) |
| 223 | + // systemd-run 不可用(探测失败),后续直接执行 |
| 224 | + if name == "systemd-run" { |
| 225 | + return exec.Command("sh", "-c", "exit 127") |
| 226 | + } |
| 227 | + return exec.Command("echo", "ok") |
| 228 | + } |
| 229 | + if _, err := m.runPkgManager("rpm", "-Uvh", "/tmp/x.rpm"); err != nil { |
| 230 | + t.Fatal(err) |
| 231 | + } |
| 232 | + if len(calls) != 2 { |
| 233 | + t.Fatalf("expected 2 calls, got %v", calls) |
| 234 | + } |
| 235 | + want := []string{"rpm", "-Uvh", "/tmp/x.rpm"} |
| 236 | + if !reflect.DeepEqual(calls[1], want) { |
| 237 | + t.Fatalf("unexpected fallback call: %v", calls[1]) |
| 238 | + } |
| 239 | +} |
0 commit comments