forked from u-root/u-root
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnohup_test.go
71 lines (62 loc) · 1.34 KB
/
nohup_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Copyright 2024 the u-root Authors. All rights reserved
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"errors"
"os"
"path/filepath"
"testing"
"golang.org/x/term"
)
func TestRun(t *testing.T) {
tests := []struct {
err error
name string
output string
args []string
}{
{
name: "no arguments",
args: []string{"nohup"},
err: errUsage,
},
{
name: "invalid command",
args: []string{"nohup", "invalidcommand"},
err: errStart,
},
{
name: "false command",
args: []string{"nohup", "false"},
err: errFinish,
},
{
name: "valid command",
args: []string{"nohup", "echo", "hello"},
output: "hello\n",
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
dir := t.TempDir()
err := os.Chdir(dir)
if err != nil {
t.Fatalf("can't chdir into %q", dir)
}
err = run(test.args)
if !errors.Is(err, test.err) {
t.Errorf("expected %v, got %v", test.err, err)
}
if test.output != "" && term.IsTerminal(int(os.Stdout.Fd())) {
b, err := os.ReadFile(filepath.Join(dir, "nohup.out"))
if err != nil {
t.Fatalf("can't open nohup.out: %v", err)
}
if string(b) != test.output {
t.Errorf("expected %q, got %q", test.output, string(b))
}
}
})
}
}