"ruderich.org/simon/safcm"
"ruderich.org/simon/safcm/cmd/safcm/config"
+ "ruderich.org/simon/safcm/frontend"
"ruderich.org/simon/safcm/rpc"
"ruderich.org/simon/safcm/testutil"
)
t.Fatal(err)
}
+ const errMsg = `
+
+Groups depending on "detected" groups cannot be used to select hosts as these
+are only available after the hosts were contacted.
+`
+
tests := []struct {
name string
names []string
{
"group: single name",
- []string{"group"},
+ []string{"group3"},
[]*config.Host{
allHosts.Map["host1.example.org"],
},
},
{
"group: multiple names",
- []string{"group", "group2"},
+ []string{"group3", "group2"},
[]*config.Host{
allHosts.Map["host1.example.org"],
allHosts.Map["host2"],
},
{
"group: multiple identical names",
- []string{"group", "group2", "group"},
+ []string{"group3", "group2", "group3"},
[]*config.Host{
allHosts.Map["host1.example.org"],
allHosts.Map["host2"],
},
{
"group: multiple names, including unknown",
- []string{"group", "group2", "unknown-group"},
+ []string{"group3", "group2", "unknown-group"},
nil,
fmt.Errorf("hosts/groups not found: \"unknown-group\""),
},
nil,
},
+ {
+ "group: single name (detected)",
+ []string{"group"},
+ nil,
+ fmt.Errorf(`group "group" depends on "detected" groups` + errMsg),
+ },
+ {
+ "group: multiple names (detected)",
+ []string{"group", "group2"},
+ nil,
+ fmt.Errorf(`group "group" depends on "detected" groups` + errMsg),
+ },
+
{
"\"all\" and name",
[]string{"all", "group2"},
tests := []struct {
name string
- event Event
+ event frontend.Event
level safcm.LogLevel
isTTY bool
exp string
{
"Error",
- Event{
+ frontend.Event{
Error: fmt.Errorf("fake error"),
},
safcm.LogDebug3,
},
{
"Error (tty)",
- Event{
+ frontend.Event{
Error: fmt.Errorf("fake error"),
},
safcm.LogDebug3,
},
{
"Error: escape",
- Event{
+ frontend.Event{
Error: fmt.Errorf("\x00"),
},
safcm.LogDebug3,
},
{
"Error: escape (tty)",
- Event{
+ frontend.Event{
Error: fmt.Errorf("\x00"),
},
safcm.LogDebug3,
{
"Log: info",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogInfo,
Text: "info log",
},
},
{
"Log: info (tty)",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogInfo,
Text: "info log",
},
},
{
"Log: verbose",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogVerbose,
Text: "verbose log",
},
},
{
"Log: debug",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogDebug,
Text: "debug log",
},
},
{
"Log: debug2",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogDebug2,
Text: "debug2 log",
},
},
{
"Log: debug3",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogDebug3,
Text: "debug3 log",
},
},
{
"Log: debug3 (tty)",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogDebug3,
Text: "debug3 log",
},
},
{
"Log: escape",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogInfo,
Text: "\x00",
},
},
{
"Log: escape (tty)",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogInfo,
Text: "\x00",
},
{
"ConnEvent: stderr",
- Event{
+ frontend.Event{
ConnEvent: rpc.ConnEvent{
Type: rpc.ConnEventStderr,
Data: "fake stderr",
},
{
"ConnEvent: stderr (tty)",
- Event{
+ frontend.Event{
ConnEvent: rpc.ConnEvent{
Type: rpc.ConnEventStderr,
Data: "fake stderr",
},
{
"ConnEvent: debug",
- Event{
+ frontend.Event{
ConnEvent: rpc.ConnEvent{
Type: rpc.ConnEventDebug,
Data: "conn debug",
},
{
"ConnEvent: upload",
- Event{
+ frontend.Event{
ConnEvent: rpc.ConnEvent{
Type: rpc.ConnEventUpload,
},
},
{
"ConnEvent: upload (ignored)",
- Event{
+ frontend.Event{
ConnEvent: rpc.ConnEvent{
Type: rpc.ConnEventUpload,
},
},
{
"ConnEvent: invalid",
- Event{
+ frontend.Event{
ConnEvent: rpc.ConnEvent{
Type: 42,
Data: "invalid",
},
{
"ConnEvent: invalid (tty)",
- Event{
+ frontend.Event{
ConnEvent: rpc.ConnEvent{
Type: 42,
Data: "invalid",
},
{
"ConnEvent: escape",
- Event{
+ frontend.Event{
ConnEvent: rpc.ConnEvent{
Type: rpc.ConnEventStderr,
Data: "\x00",
},
{
"ConnEvent: escape (tty)",
- Event{
+ frontend.Event{
ConnEvent: rpc.ConnEvent{
Type: rpc.ConnEventDebug,
Data: "\x01",
{
"Escaped",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogInfo,
Text: "\x00",
},
},
{
"Escaped (tty)",
- Event{
- Log: Log{
+ frontend.Event{
+ Log: frontend.Log{
Level: safcm.LogInfo,
Text: "\x00",
},
{
"empty (invalid)",
- Event{},
+ frontend.Event{},
safcm.LogDebug3,
false,
"[INVALID=0] [fake-host] \n",
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
- tc.event.Host = &config.Host{
- Name: "fake-host",
+ tc.event.Host = &Sync{
+ host: &config.Host{
+ Name: "fake-host",
+ },
}
var buf bytes.Buffer