Skip to content
This repository was archived by the owner on Jan 30, 2020. It is now read-only.

Commit 86d0384

Browse files
author
Dongsu Park
committed
Merge pull request #1702 from endocode/dongsu/membercmd-stderr-fxtests
functional: allow MemberCommand to return stderr
2 parents 97a7adb + b9f335b commit 86d0384

File tree

7 files changed

+65
-87
lines changed

7 files changed

+65
-87
lines changed

functional/connectivity-loss_test.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,9 @@ func TestSingleNodeConnectivityLoss(t *testing.T) {
142142
// Cut connection to etcd.
143143
//
144144
// We use REJECT here, so fleet knows immediately that it's disconnected, rather than waiting for a timeout.
145-
if _, err = cluster.MemberCommand(m0, "sudo", "iptables", "-I", "OUTPUT", "-p", "tcp", "-m", "multiport", "--dports=2379,4001", "-j", "REJECT"); err != nil {
146-
t.Fatal(err)
145+
stdout, stderr, err := cluster.MemberCommand(m0, "sudo", "iptables", "-I", "OUTPUT", "-p", "tcp", "-m", "multiport", "--dports=2379,4001", "-j", "REJECT")
146+
if err != nil {
147+
t.Fatalf("Failed to cut connection to etcd.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
147148
}
148149

149150
// Wait long enough to be reasonably confident that no more state changes will happen.
@@ -159,9 +160,8 @@ func TestSingleNodeConnectivityLoss(t *testing.T) {
159160
// as fleet is not available to give us this information...
160161
// We have to go deeper, and try to obtain the information from systemd directly.
161162
actualSystemdFiles := map[string]string{}
162-
var stdout string
163163
for name, _ := range expectedSystemdFiles {
164-
stdout, _ := cluster.MemberCommand(m0, "systemctl", "is-enabled", name)
164+
stdout, _, _ := cluster.MemberCommand(m0, "systemctl", "is-enabled", name)
165165
// do not check for error, as systemctl is-enabled returns exit status 1 for linked-runtime.
166166
stdout = strings.TrimSpace(stdout)
167167
if stdout == "" {
@@ -174,9 +174,9 @@ func TestSingleNodeConnectivityLoss(t *testing.T) {
174174
t.Fatalf("Units files not in expected state after losing connectivity.\nExpected: %v\nActual: %v", expectedSystemdFiles, actualSystemdFiles)
175175
}
176176

177-
stdout, err = cluster.MemberCommand(m0, "systemctl", "list-units", "-t", "service", "--no-legend", "single@*.service", "global@*.service")
177+
stdout, stderr, err = cluster.MemberCommand(m0, "systemctl", "list-units", "-t", "service", "--no-legend", "single@*.service", "global@*.service")
178178
if err != nil {
179-
t.Fatalf("Failed to retrieve systemd unit states: %v", err)
179+
t.Fatalf("Failed to retrieve systemd unit states.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
180180
}
181181
stdout = strings.TrimSpace(stdout)
182182
actualSystemdStates := map[string][]string{}
@@ -191,8 +191,8 @@ func TestSingleNodeConnectivityLoss(t *testing.T) {
191191
}
192192

193193
// Restore etcd connection.
194-
if _, err = cluster.MemberCommand(m0, "sudo", "iptables", "-D", "OUTPUT", "-p", "tcp", "-m", "multiport", "--dports=2379,4001", "-j", "REJECT"); err != nil {
195-
t.Fatal(err)
194+
if stdout, stderr, err = cluster.MemberCommand(m0, "sudo", "iptables", "-D", "OUTPUT", "-p", "tcp", "-m", "multiport", "--dports=2379,4001", "-j", "REJECT"); err != nil {
195+
t.Fatalf("Failed to restore etcd connection.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
196196
}
197197

198198
// Again, wait long enough to be reasonably confident that no more state changes will happen.
@@ -219,9 +219,9 @@ func TestSingleNodeConnectivityLoss(t *testing.T) {
219219
}
220220

221221
// Additionally check the logs of all active units for possible temporary state flapping.
222-
stdout, err = cluster.MemberCommand(m0, "journalctl", "_PID=1")
222+
stdout, stderr, err = cluster.MemberCommand(m0, "journalctl", "_PID=1")
223223
if err != nil {
224-
t.Fatalf("Failed to retrieve journal: %v", err)
224+
t.Fatalf("Failed to retrieve journal.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
225225
}
226226
if strings.Contains(stdout, "Stopping single@") || strings.Contains(stdout, "Stopping global@") {
227227
t.Fatalf("Units were unexpectedly stopped at some point:\n%s", stdout)

functional/node_test.go

+18-19
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ func TestNodeShutdown(t *testing.T) {
6262
}
6363

6464
// Stop the fleet process on the first member
65-
if stdout, err = cluster.MemberCommand(m0, "sudo", "systemctl", "stop", "fleet"); err != nil {
66-
t.Fatalf("Failed stopping fleet service: %v\nstdout: %s\n", err, stdout)
65+
if stdout, stderr, err = cluster.MemberCommand(m0, "sudo", "systemctl", "stop", "fleet"); err != nil {
66+
t.Fatalf("Failed stopping fleet service:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
6767
}
6868

6969
// The first member should quickly remove itself from the published
@@ -81,11 +81,10 @@ func TestNodeShutdown(t *testing.T) {
8181
// NOTE: In case of no units, systemd v230 or older prints out
8282
// "Active: inactive" to stdout, while systemd v231 or newer prints out
8383
// "Unit NAME could not be found" to stderr. So we need to check for
84-
// both cases. Use MemberCommandStderr() to retrieve both stdout and stderr,
85-
// and check for each case.
86-
stdout, stderr, err = cluster.MemberCommandStderr(m0, "systemctl", "status", "hello.service")
84+
// both cases.
85+
stdout, stderr, err = cluster.MemberCommand(m0, "systemctl", "status", "hello.service")
8786
if !strings.Contains(stdout, "Active: inactive") && !strings.Contains(stderr, "could not be found") {
88-
t.Fatalf("Unit hello.service not reported as inactive:\n%s\n", stdout)
87+
t.Fatalf("Unit hello.service not reported as inactive:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
8988
}
9089
}
9190

@@ -118,35 +117,35 @@ func TestDetectMachineId(t *testing.T) {
118117

119118
// Restart fleet service, and check if its systemd status is still active.
120119
restartFleetService := func(m platform.Member) error {
121-
stdout, err := cluster.MemberCommand(m, "sudo", "systemctl", "restart", "fleet.service")
120+
stdout, stderr, err := cluster.MemberCommand(m, "sudo", "systemctl", "restart", "fleet.service")
122121
if err != nil {
123-
return fmt.Errorf("Failed to restart fleet service\nstdout: %s\nerr: %v", stdout, err)
122+
return fmt.Errorf("Failed to restart fleet service\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
124123
}
125124

126-
stdout, err = cluster.MemberCommand(m, "systemctl", "show", "--property=ActiveState", "fleet")
125+
stdout, stderr, err = cluster.MemberCommand(m, "systemctl", "show", "--property=ActiveState", "fleet")
127126
if strings.TrimSpace(stdout) != "ActiveState=active" {
128-
return fmt.Errorf("Fleet unit not reported as active:\nstdout:%s\nerr: %v", stdout, err)
127+
return fmt.Errorf("Fleet unit not reported as active:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
129128
}
130-
stdout, err = cluster.MemberCommand(m, "systemctl", "show", "--property=Result", "fleet")
129+
stdout, stderr, err = cluster.MemberCommand(m, "systemctl", "show", "--property=Result", "fleet")
131130
if strings.TrimSpace(stdout) != "Result=success" {
132-
return fmt.Errorf("Result for fleet unit not reported as success:\nstdout:%s\nerr: %v", stdout, err)
131+
return fmt.Errorf("Result for fleet unit not reported as success:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
133132
}
134133
return nil
135134
}
136135

137-
stdout, err := cluster.MemberCommand(m0, "cat", machineIdFile)
136+
stdout, stderr, err := cluster.MemberCommand(m0, "cat", machineIdFile)
138137
if err != nil {
139-
t.Fatalf("Failed to get machine-id\nstdout: %s\nerr: %v", stdout, err)
138+
t.Fatalf("Failed to get machine-id\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
140139
}
141140
m0_machine_id := strings.TrimSpace(stdout)
142141

143142
// If the two machine IDs are different with each other,
144143
// set the m1's ID to the same one as m0, to intentionally
145144
// trigger an error case of duplication of machine ID.
146-
stdout, err = cluster.MemberCommand(m1,
145+
stdout, stderr, err = cluster.MemberCommand(m1,
147146
"echo", m0_machine_id, "|", "sudo", "tee", machineIdFile)
148147
if err != nil {
149-
t.Fatalf("Failed to replace machine-id\nstdout: %s\nerr: %v", stdout, err)
148+
t.Fatalf("Failed to replace machine-id\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
150149
}
151150

152151
if err := restartFleetService(m1); err != nil {
@@ -156,7 +155,7 @@ func TestDetectMachineId(t *testing.T) {
156155
// fleetd should actually be running, but failing to list machines.
157156
// So we should expect a specific error after running fleetctl list-machines,
158157
// like "googlapi: Error 503: fleet server unable to communicate with etcd".
159-
stdout, stderr, err := cluster.Fleetctl(m1, "list-machines", "--no-legend")
158+
stdout, stderr, err = cluster.Fleetctl(m1, "list-machines", "--no-legend")
160159
if err != nil {
161160
if !strings.Contains(err.Error(), "exit status 1") ||
162161
!strings.Contains(stderr, "fleet server unable to communicate with etcd") {
@@ -171,10 +170,10 @@ func TestDetectMachineId(t *testing.T) {
171170
// Trigger another test case of m0's ID getting different from m1's.
172171
// Then it's expected that m0 and m1 would be working properly with distinct
173172
// machine IDs, after having restarted fleet.service both on m0 and m1.
174-
stdout, err = cluster.MemberCommand(m0,
173+
stdout, stderr, err = cluster.MemberCommand(m0,
175174
"echo", util.NewMachineID(), "|", "sudo", "tee", machineIdFile)
176175
if err != nil {
177-
t.Fatalf("m0: Failed to replace machine-id\nstdout: %s\nerr: %v", stdout, err)
176+
t.Fatalf("m0: Failed to replace machine-id\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
178177
}
179178

180179
// Restart fleet service on m0, and see that it's still working.

functional/platform/cluster.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ type Cluster interface {
3131
DestroyMember(Member) error
3232
ReplaceMember(Member) (Member, error)
3333
Members() []Member
34-
MemberCommand(Member, ...string) (string, error)
35-
MemberCommandStderr(Member, ...string) (string, string, error)
34+
MemberCommand(Member, ...string) (string, string, error)
3635
Destroy(t *testing.T) error
3736

3837
// client operations

functional/platform/nspawn.go

+1-22
Original file line numberDiff line numberDiff line change
@@ -379,28 +379,7 @@ func (nc *nspawnCluster) Members() []Member {
379379
return ms
380380
}
381381

382-
func (nc *nspawnCluster) MemberCommand(m Member, args ...string) (string, error) {
383-
baseArgs := []string{"-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", fmt.Sprintf("core@%s", m.IP())}
384-
args = append(baseArgs, args...)
385-
log.Printf("ssh %s", strings.Join(args, " "))
386-
var stdoutBytes bytes.Buffer
387-
cmd := exec.Command("ssh", args...)
388-
cmd.Stdout = &stdoutBytes
389-
err := cmd.Run()
390-
return stdoutBytes.String(), err
391-
}
392-
393-
// MemberCommandStderr() is like MemberCommand(), except that it returns
394-
// both stdout and stderr from the running command. This is definitely useful
395-
// for most cases, especially when the caller needs to check for both stdout
396-
// and stderr.
397-
//
398-
// NOTE: Ideally we should remove MemberCommand() above, and rename
399-
// MemberCommandStderr() to MemberCommand(). For doing that, however, we need
400-
// to change every call site to replace MemberCommand() with MemberCommandStderr().
401-
// Of course that would be a lot of work. I'll leave that to future work.
402-
// - dpark 20161102
403-
func (nc *nspawnCluster) MemberCommandStderr(m Member, args ...string) (string, string, error) {
382+
func (nc *nspawnCluster) MemberCommand(m Member, args ...string) (string, string, error) {
404383
baseArgs := []string{"-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", fmt.Sprintf("core@%s", m.IP())}
405384
args = append(baseArgs, args...)
406385
log.Printf("ssh %s", strings.Join(args, " "))

functional/server_test.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ func TestReconfigureServer(t *testing.T) {
6565

6666
// Send a SIGHUP to fleetd, and periodically checks if a message
6767
// "Reloading configuration" appears in fleet's journal, up to timeout (15) seconds.
68-
stdout, _ = cluster.MemberCommand(m0, "sudo", "systemctl", "kill", "-s", "SIGHUP", "fleet")
68+
stdout, stderr, err = cluster.MemberCommand(m0, "sudo", "systemctl", "kill", "-s", "SIGHUP", "fleet")
6969
if strings.TrimSpace(stdout) != "" {
70-
t.Fatalf("Sending SIGHUP to fleetd returned: %s", stdout)
70+
t.Fatalf("Sending SIGHUP to fleetd returned.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
7171
}
7272

7373
// Watch the logs if fleet was correctly reloaded
@@ -97,19 +97,19 @@ func TestReconfigureServer(t *testing.T) {
9797
}
9898

9999
// Check for HTTP listener error looking into the fleetd journal
100-
stdout, _ = cluster.MemberCommand(m0, "journalctl _PID=$(pidof fleetd)")
100+
stdout, stderr, err = cluster.MemberCommand(m0, "journalctl _PID=$(pidof fleetd)")
101101
if strings.Contains(strings.TrimSpace(stdout), "Failed serving HTTP on listener:") {
102-
t.Fatalf("Fleetd log returned error on HTTP listeners: %s", stdout)
102+
t.Fatalf("Fleetd log returned error on HTTP listeners.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
103103
}
104104

105105
// Check expected state after reconfiguring fleetd
106-
stdout, _ = cluster.MemberCommand(m0, "systemctl", "show", "--property=ActiveState", "fleet")
106+
stdout, stderr, err = cluster.MemberCommand(m0, "systemctl", "show", "--property=ActiveState", "fleet")
107107
if strings.TrimSpace(stdout) != "ActiveState=active" {
108-
t.Fatalf("Fleet unit not reported as active: %s", stdout)
108+
t.Fatalf("Fleet unit not reported as active.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
109109
}
110-
stdout, _ = cluster.MemberCommand(m0, "systemctl", "show", "--property=Result", "fleet")
110+
stdout, stderr, err = cluster.MemberCommand(m0, "systemctl", "show", "--property=Result", "fleet")
111111
if strings.TrimSpace(stdout) != "Result=success" {
112-
t.Fatalf("Result for fleet unit not reported as success: %s", stdout)
112+
t.Fatalf("Result for fleet unit not reported as success.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
113113
}
114114
}
115115

@@ -123,7 +123,7 @@ func waitForReloadConfig(cluster platform.Cluster, m0 platform.Member) (err erro
123123
// "journalctl -u fleet | grep \"Reloading configuration\"" is racy
124124
// in a subtle way, so that it sometimes fails only on semaphoreci.
125125
// - dpark 20160408
126-
stdout, _ := cluster.MemberCommand(m0, "sudo", "journalctl --priority=info _PID=$(pidof fleetd)")
126+
stdout, _, _ := cluster.MemberCommand(m0, "sudo", "journalctl --priority=info _PID=$(pidof fleetd)")
127127
journalfleet := strings.TrimSpace(stdout)
128128
if !strings.Contains(journalfleet, "Reloading configuration") {
129129
fmt.Errorf("Fleetd is not fully reconfigured, retrying... entire fleet journal:\n%v", journalfleet)
@@ -144,7 +144,7 @@ func waitForReloadConfig(cluster platform.Cluster, m0 platform.Member) (err erro
144144
func waitForFleetdSocket(cluster platform.Cluster, m0 platform.Member) (err error) {
145145
_, err = util.WaitForState(
146146
func() bool {
147-
stdout, _ := cluster.MemberCommand(m0, "test -S /var/run/fleet.sock && echo 1")
147+
stdout, _, _ := cluster.MemberCommand(m0, "test -S /var/run/fleet.sock && echo 1")
148148
if strings.TrimSpace(stdout) == "" {
149149
fmt.Errorf("Fleetd is not fully started, retrying...")
150150
return false

functional/shutdown_test.go

+17-16
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,19 @@ func TestShutdown(t *testing.T) {
3939
}
4040

4141
// Stop the fleet process.
42-
if _, err = cluster.MemberCommand(m0, "sudo", "systemctl", "stop", "fleet"); err != nil {
43-
t.Fatal(err)
42+
stdout, stderr, err := cluster.MemberCommand(m0, "sudo", "systemctl", "stop", "fleet")
43+
if err != nil {
44+
t.Fatalf("Failed to stop fleet process.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
4445
}
4546

4647
// Check expected state after stop.
47-
stdout, _ := cluster.MemberCommand(m0, "systemctl", "show", "--property=ActiveState", "fleet")
48+
stdout, stderr, err = cluster.MemberCommand(m0, "systemctl", "show", "--property=ActiveState", "fleet")
4849
if strings.TrimSpace(stdout) != "ActiveState=inactive" {
49-
t.Fatalf("Fleet unit not reported as inactive: %s", stdout)
50+
t.Fatalf("Fleet unit not reported as inactive.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
5051
}
51-
stdout, _ = cluster.MemberCommand(m0, "systemctl", "show", "--property=Result", "fleet")
52+
stdout, stderr, err = cluster.MemberCommand(m0, "systemctl", "show", "--property=Result", "fleet")
5253
if strings.TrimSpace(stdout) != "Result=success" {
53-
t.Fatalf("Result for fleet unit not reported as success: %s", stdout)
54+
t.Fatalf("Result for fleet unit not reported as success.\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
5455
}
5556
}
5657

@@ -74,32 +75,32 @@ func TestShutdownVsMonitor(t *testing.T) {
7475
// Cut connection to etcd.
7576
//
7677
// This will result in a failed health check, and consequently the monitor will attempt a restart.
77-
stdout, err := cluster.MemberCommand(m0, "sudo", "iptables", "-I", "OUTPUT", "-p", "tcp", "-m", "multiport", "--dports=2379,4001", "-j", "DROP")
78+
stdout, stderr, err := cluster.MemberCommand(m0, "sudo", "iptables", "-I", "OUTPUT", "-p", "tcp", "-m", "multiport", "--dports=2379,4001", "-j", "DROP")
7879
if err != nil {
79-
t.Fatalf("Failed inserting iptables rule:\nstdout: %s\nerr: %v", stdout, err)
80+
t.Fatalf("Failed inserting iptables rule:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
8081
}
8182

8283
// Wait for the monitor to trigger the restart.
8384
//
8485
// This will never complete, as long as there is no connectivity.
85-
stdout, err = cluster.MemberCommand(m0, "sudo", "sh", "-c", `'until journalctl -u fleet | grep -q "Server monitor triggered: Monitor timed out before successful heartbeat"; do sleep 1; done'`)
86+
stdout, stderr, err = cluster.MemberCommand(m0, "sudo", "sh", "-c", `'until journalctl -u fleet | grep -q "Server monitor triggered: Monitor timed out before successful heartbeat"; do sleep 1; done'`)
8687
if err != nil {
87-
t.Fatalf("Failed checking journal message:\nstdout: %s\nerr: %v", stdout, err)
88+
t.Fatalf("Failed checking journal message:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
8889
}
8990

9091
// Stop fleetd while the restart is still in progress.
91-
stdout, err = cluster.MemberCommand(m0, "sudo", "systemctl", "stop", "fleet")
92+
stdout, stderr, err = cluster.MemberCommand(m0, "sudo", "systemctl", "stop", "fleet")
9293
if err != nil {
93-
t.Fatalf("Failed stopping fleet service:\nstdout: %s\nerr: %v", stdout, err)
94+
t.Fatalf("Failed stopping fleet service:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
9495
}
9596

9697
// Verify that fleetd was shut down cleanly in spite of the concurrent restart.
97-
stdout, _ = cluster.MemberCommand(m0, "systemctl", "show", "--property=ActiveState", "fleet")
98+
stdout, stderr, err = cluster.MemberCommand(m0, "systemctl", "show", "--property=ActiveState", "fleet")
9899
if strings.TrimSpace(stdout) != "ActiveState=inactive" {
99-
t.Fatalf("Fleet unit not reported as inactive: %s", stdout)
100+
t.Fatalf("Fleet unit not reported as inactive:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
100101
}
101-
stdout, _ = cluster.MemberCommand(m0, "systemctl", "show", "--property=Result", "fleet")
102+
stdout, stderr, err = cluster.MemberCommand(m0, "systemctl", "show", "--property=Result", "fleet")
102103
if strings.TrimSpace(stdout) != "Result=success" {
103-
t.Fatalf("Result for fleet unit not reported as success: %s", stdout)
104+
t.Fatalf("Result for fleet unit not reported as success:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
104105
}
105106
}

functional/unit_action_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -307,8 +307,8 @@ func TestUnitStatus(t *testing.T) {
307307
stdout, stderr, err = cluster.Fleetctl(m,
308308
"--strict-host-key-checking=false", "status", path.Base(unitFile))
309309
if !strings.Contains(stdout, "Loaded: loaded") {
310-
t.Errorf("Could not find expected string in status output:\n%s\nstderr:\n%s",
311-
stdout, stderr)
310+
t.Errorf("Could not find expected string in status output:\nstdout: %s\nstderr:\nerr: %s",
311+
stdout, stderr, err)
312312
}
313313
}
314314

@@ -345,12 +345,12 @@ func TestListUnitFilesOrder(t *testing.T) {
345345
// make sure that all unit files will show up
346346
_, err = cluster.WaitForNUnitFiles(m, 20)
347347
if err != nil {
348-
t.Fatal("Failed to run list-unit-files: %v", err)
348+
t.Fatalf("Failed to run list-unit-files: %v", err)
349349
}
350350

351351
stdout, stderr, err := cluster.Fleetctl(m, "list-unit-files", "--no-legend", "--fields", "unit")
352352
if err != nil {
353-
t.Fatal("Failed to run list-unit-files:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
353+
t.Fatalf("Failed to run list-unit-files:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
354354
}
355355

356356
outUnits := strings.Split(strings.TrimSpace(stdout), "\n")
@@ -607,13 +607,13 @@ func checkListUnits(cl platform.Cluster, m platform.Member, cmd string, ufs []st
607607

608608
if cmd == "start" {
609609
// Check expected systemd state after starting units
610-
stdout, _ := cl.MemberCommand(m, "systemctl", "show", "--property=ActiveState", ufs[i])
610+
stdout, stderr, err := cl.MemberCommand(m, "systemctl", "show", "--property=ActiveState", ufs[i])
611611
if strings.TrimSpace(stdout) != "ActiveState=active" {
612-
return fmt.Errorf("Fleet unit not reported as active: %s", stdout)
612+
return fmt.Errorf("Fleet unit not reported as active:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
613613
}
614-
stdout, _ = cl.MemberCommand(m, "systemctl", "show", "--property=Result", ufs[i])
614+
stdout, stderr, err = cl.MemberCommand(m, "systemctl", "show", "--property=Result", ufs[i])
615615
if strings.TrimSpace(stdout) != "Result=success" {
616-
return fmt.Errorf("Result for fleet unit not reported as success: %s", stdout)
616+
return fmt.Errorf("Result for fleet unit not reported as success:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
617617
}
618618
}
619619
}

0 commit comments

Comments
 (0)