-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexitcode_test.go
More file actions
83 lines (78 loc) · 2.44 KB
/
Copy pathexitcode_test.go
File metadata and controls
83 lines (78 loc) · 2.44 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
package main
import (
"errors"
"testing"
)
func TestClassifyError(t *testing.T) {
tests := []struct {
name string
err error
want int
}{
{"nil error", nil, ExitSuccess},
{"connect to relay", errors.New("connect to relay: dial tcp ... connection refused"), ExitRelayError},
{"connection timeout", errors.New("connection timed out"), ExitRelayError},
{"timed out waiting", errors.New("timed out waiting for response"), ExitRelayError},
{"unknown target", errors.New(`unknown target "web99"`), ExitConfigError},
{"target not found", errors.New("target not found"), ExitConfigError},
{"required flag", errors.New("--target and --cmd are required"), ExitConfigError},
{"already exists", errors.New(`group "web" already exists`), ExitConfigError},
{"not configured", errors.New("relay not configured"), ExitConfigError},
{"unknown command", errors.New("unknown command: foo"), ExitConfigError},
{"execution error", errors.New("command failed with exit code 1"), ExitExecError},
{"generic error", errors.New("something went wrong"), ExitExecError},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := classifyError(tt.err)
if got != tt.want {
t.Errorf("classifyError(%v) = %d, want %d", tt.err, got, tt.want)
}
})
}
}
func TestMultiExecExit(t *testing.T) {
tests := []struct {
name string
result *Message
want int
}{
{"nil result", nil, ExitRelayError},
{"nil results map", &Message{}, ExitRelayError},
{"all ok", &Message{
Results: map[string]*Message{
"web1": {OK: boolPtr(true), ExitCode: 0},
},
}, ExitSuccess},
{"with error string", &Message{
Results: map[string]*Message{
"web1": {OK: boolPtr(false), Error: "target not connected"},
},
}, ExitExecError},
{"with non-zero exit", &Message{
Results: map[string]*Message{
"web1": {OK: boolPtr(true), ExitCode: 1},
},
}, ExitExecError},
{"mixed results", &Message{
Results: map[string]*Message{
"web1": {OK: boolPtr(true), ExitCode: 0},
"web2": {OK: boolPtr(false), Error: "failed"},
},
}, ExitExecError},
{"all success", &Message{
Results: map[string]*Message{
"web1": {OK: boolPtr(true), ExitCode: 0},
"web2": {OK: boolPtr(true), ExitCode: 0},
},
}, ExitSuccess},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := multiExecExit(tt.result)
if got != tt.want {
t.Errorf("multiExecExit(%v) = %d, want %d", tt.name, got, tt.want)
}
})
}
}