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

Commit 40a90d0

Browse files
author
Dongsu Park
authored
Merge pull request #1626 from endocode/dongsu/error-with-stderr-fxtests
functional: retrieve stdout/stderr after running command
2 parents 0953a0d + 8c7d302 commit 40a90d0

10 files changed

+98
-87
lines changed

functional/client_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ func TestKnownHostsVerification(t *testing.T) {
6666
}
6767

6868
// SSH'ing to the cluster member should now fail with a host key mismatch
69-
if _, _, err := cluster.Fleetctl(m0, "--strict-host-key-checking=true", fmt.Sprintf("--known-hosts-file=%s", khFile), "ssh", m1.ID(), "uptime"); err == nil {
70-
t.Errorf("Expected error while SSH'ing to fleet machine")
69+
if stdout, stderr, err := cluster.Fleetctl(m0, "--strict-host-key-checking=true", fmt.Sprintf("--known-hosts-file=%s", khFile), "ssh", m1.ID(), "uptime"); err == nil {
70+
t.Errorf("Expected error while SSH'ing to fleet machine\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
7171
}
7272

7373
// Overwrite the known-hosts file to simulate removing the old host key

functional/cluster_test.go

+10-8
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ func TestDynamicClusterNewMemberUnitMigration(t *testing.T) {
5353

5454
// All 3 services should be visible immediately, and all of them should
5555
// become ACTIVE shortly thereafter
56-
stdout, _, err = cluster.Fleetctl(m0, "list-units", "--no-legend")
56+
stdout, stderr, err = cluster.Fleetctl(m0, "list-units", "--no-legend")
5757
if err != nil {
58-
t.Fatalf("Failed to run list-units: %v", err)
58+
t.Fatalf("Failed to run list-units:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
5959
}
6060
units := strings.Split(strings.TrimSpace(stdout), "\n")
6161
if len(units) != 3 {
@@ -75,8 +75,10 @@ func TestDynamicClusterNewMemberUnitMigration(t *testing.T) {
7575
// Kill one of the machines and make sure the unit migrates somewhere else
7676
unit := "conflict.1.service"
7777
oldMach := states[unit].Machine
78-
if _, _, err = cluster.Fleetctl(m0, "--strict-host-key-checking=false", "ssh", oldMach, "sudo", "systemctl", "stop", "fleet"); err != nil {
79-
t.Fatal(err)
78+
stdout, stderr, err = cluster.Fleetctl(m0, "--strict-host-key-checking=false", "ssh", oldMach,
79+
"sudo", "systemctl", "stop", "fleet")
80+
if err != nil {
81+
t.Fatalf("Failed to stop fleet service:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
8082
}
8183
var mN platform.Member
8284
if m0.ID() == oldMach {
@@ -131,20 +133,20 @@ func TestDynamicClusterMemberReboot(t *testing.T) {
131133
t.Fatal(err)
132134
}
133135

134-
_, _, err = cluster.Fleetctl(m0, "start",
136+
stdout, stderr, err := cluster.Fleetctl(m0, "start",
135137
"fixtures/units/conflict.0.service",
136138
"fixtures/units/conflict.1.service",
137139
"fixtures/units/conflict.2.service",
138140
)
139141
if err != nil {
140-
t.Errorf("Failed starting units: %v", err)
142+
t.Errorf("Failed starting units:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
141143
}
142144

143145
// All 3 services should be visible immediately, and all of them should
144146
// become ACTIVE shortly thereafter
145-
stdout, _, err := cluster.Fleetctl(m0, "list-units", "--no-legend")
147+
stdout, stderr, err = cluster.Fleetctl(m0, "list-units", "--no-legend")
146148
if err != nil {
147-
t.Fatalf("Failed to run list-units: %v", err)
149+
t.Fatalf("Failed to run list-units:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
148150
}
149151
units := strings.Split(strings.TrimSpace(stdout), "\n")
150152
if len(units) != 3 {

functional/connectivity-loss_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ func TestSingleNodeConnectivityLoss(t *testing.T) {
9393
checkExpectedStates := func() (isExpected bool, expected, actual map[string]string) {
9494
// First check unit files.
9595
// These shouldn't change at all after intital submit -- but better safe than sorry...
96-
stdout, _, err := cluster.Fleetctl(m0, "list-unit-files", "--no-legend", "--full", "--fields", "unit,dstate")
96+
stdout, stderr, err := cluster.Fleetctl(m0, "list-unit-files", "--no-legend", "--full", "--fields", "unit,dstate")
9797
if err != nil {
98-
t.Errorf("Failed listing unit files: %v", err)
98+
t.Errorf("Failed listing unit files:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
9999
}
100100
stdout = strings.TrimSpace(stdout)
101101

@@ -113,9 +113,9 @@ func TestSingleNodeConnectivityLoss(t *testing.T) {
113113
}
114114

115115
// Now check the actual unit states.
116-
stdout, _, err = cluster.Fleetctl(m0, "list-units", "--no-legend", "--full", "--fields", "unit,active")
116+
stdout, stderr, err = cluster.Fleetctl(m0, "list-units", "--no-legend", "--full", "--fields", "unit,active")
117117
if err != nil {
118-
t.Errorf("Failed listing units: %v", err)
118+
t.Errorf("Failed listing units:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
119119
}
120120
stdout = strings.TrimSpace(stdout)
121121

functional/fleetctl_test.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ import (
2424
)
2525

2626
func TestClientVersionFlag(t *testing.T) {
27-
stdout, _, err := util.RunFleetctl("version")
27+
stdout, stderr, err := util.RunFleetctl("version")
2828
if err != nil {
29-
t.Fatalf("Unexpected error while executing fleetctl: %v", err)
29+
t.Fatalf("Unexpected error while executing fleetctl:\nstdout: %s\nstderr: %s\nerr: %v",
30+
stdout, stderr, err)
3031
}
3132

3233
if strings.TrimSpace(stdout) != fmt.Sprintf("fleetctl version %s", version.Version) {
@@ -35,9 +36,10 @@ func TestClientVersionFlag(t *testing.T) {
3536
}
3637

3738
func TestClientVersionHelpOutput(t *testing.T) {
38-
stdout, _, err := util.RunFleetctl("help")
39+
stdout, stderr, err := util.RunFleetctl("help")
3940
if err != nil {
40-
t.Fatalf("Unexpected error while executing fleetctl: %v", err)
41+
t.Fatalf("Unexpected error while executing fleetctl:\nstdout: %s\nstderr: %s\nerr: %v",
42+
stdout, stderr, err)
4143
}
4244

4345
if !strings.Contains(stdout, fmt.Sprintf("%s", version.Version)) {

functional/node_test.go

+8-8
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 _, err = cluster.MemberCommand(m0, "sudo", "systemctl", "stop", "fleet"); err != nil {
66-
t.Fatal(err)
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)
6767
}
6868

6969
// The first member should quickly remove itself from the published
@@ -118,13 +118,13 @@ func TestDetectMachineId(t *testing.T) {
118118
return fmt.Errorf("Failed to restart fleet service\nstdout: %s\nerr: %v", stdout, err)
119119
}
120120

121-
stdout, _ = cluster.MemberCommand(m, "systemctl", "show", "--property=ActiveState", "fleet")
121+
stdout, err = cluster.MemberCommand(m, "systemctl", "show", "--property=ActiveState", "fleet")
122122
if strings.TrimSpace(stdout) != "ActiveState=active" {
123-
return fmt.Errorf("Fleet unit not reported as active: %s", stdout)
123+
return fmt.Errorf("Fleet unit not reported as active:\nstdout:%s\nerr: %v", stdout, err)
124124
}
125-
stdout, _ = cluster.MemberCommand(m, "systemctl", "show", "--property=Result", "fleet")
125+
stdout, err = cluster.MemberCommand(m, "systemctl", "show", "--property=Result", "fleet")
126126
if strings.TrimSpace(stdout) != "Result=success" {
127-
return fmt.Errorf("Result for fleet unit not reported as success: %s", stdout)
127+
return fmt.Errorf("Result for fleet unit not reported as success:\nstdout:%s\nerr: %v", stdout, err)
128128
}
129129
return nil
130130
}
@@ -155,12 +155,12 @@ func TestDetectMachineId(t *testing.T) {
155155
if err != nil {
156156
if !strings.Contains(err.Error(), "exit status 1") ||
157157
!strings.Contains(stderr, "fleet server unable to communicate with etcd") {
158-
t.Fatalf("m1: Failed to get list of machines. err: %v\nstderr: %s", err, stderr)
158+
t.Fatalf("m1: Failed to get list of machines. err: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
159159
}
160160
// If both conditions are satisfied, "exit status 1" and
161161
// "...unable to communicate...", then it's an expected error. PASS.
162162
} else {
163-
t.Fatalf("m1: should get an error, but got success.\nstderr: %s", stderr)
163+
t.Fatalf("m1: should get an error, but got success.\nstdout: %s\nstderr: %s", stdout, stderr)
164164
}
165165

166166
// Trigger another test case of m0's ID getting different from m1's.

functional/platform/nspawn.go

+14-14
Original file line numberDiff line numberDiff line change
@@ -294,39 +294,39 @@ func (nc *nspawnCluster) prepCluster() (err error) {
294294
return
295295
}
296296

297-
stdout, _, err := run("brctl show")
297+
stdout, stderr, err := run("brctl show")
298298
if err != nil {
299-
log.Printf("Failed enumerating bridges: %v", err)
299+
log.Printf("Failed enumerating bridges: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
300300
return
301301
}
302302

303303
if !strings.Contains(stdout, "fleet0") {
304-
_, _, err = run("brctl addbr fleet0")
304+
stdout, stderr, err = run("brctl addbr fleet0")
305305
if err != nil {
306-
log.Printf("Failed adding fleet0 bridge: %v", err)
306+
log.Printf("Failed adding fleet0 bridge: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
307307
return
308308
}
309309
} else {
310310
log.Printf("Bridge fleet0 already exists")
311311
}
312312

313-
stdout, _, err = run("ip addr list fleet0")
313+
stdout, stderr, err = run("ip addr list fleet0")
314314
if err != nil {
315-
log.Printf("Failed listing fleet0 addresses: %v", err)
315+
log.Printf("Failed listing fleet0 addresses: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
316316
return
317317
}
318318

319319
if !strings.Contains(stdout, "172.18.0.1/16") {
320-
_, _, err = run("ip addr add 172.18.0.1/16 dev fleet0")
320+
stdout, stderr, err = run("ip addr add 172.18.0.1/16 dev fleet0")
321321
if err != nil {
322-
log.Printf("Failed adding 172.18.0.1/16 to fleet0: %v", err)
322+
log.Printf("Failed adding 172.18.0.1/16 to fleet0: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
323323
return
324324
}
325325
}
326326

327-
_, _, err = run("ip link set fleet0 up")
327+
stdout, stderr, err = run("ip link set fleet0 up")
328328
if err != nil {
329-
log.Printf("Failed bringing up fleet0 bridge: %v", err)
329+
log.Printf("Failed bringing up fleet0 bridge: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
330330
return
331331
}
332332

@@ -603,8 +603,8 @@ func (nc *nspawnCluster) ReplaceMember(m Member) (Member, error) {
603603
label := fmt.Sprintf("%s%s", nc.name, m.ID())
604604

605605
cmd := fmt.Sprintf("machinectl poweroff %s", label)
606-
if _, _, err := run(cmd); err != nil {
607-
return nil, fmt.Errorf("poweroff failed: %v", err)
606+
if stdout, stderr, err := run(cmd); err != nil {
607+
return nil, fmt.Errorf("poweroff failed: %v\nstdout: %s\nstderr: %s", err, stdout, stderr)
608608
}
609609

610610
var mN Member
@@ -708,13 +708,13 @@ func (nc *nspawnCluster) systemd(unitName, exec string) error {
708708
func (nc *nspawnCluster) machinePID(name string) (int, error) {
709709
for i := 0; i < 100; i++ {
710710
mach := fmt.Sprintf("%s%s", nc.name, name)
711-
stdout, _, err := run(fmt.Sprintf("machinectl show -p Leader %s", mach))
711+
stdout, stderr, err := run(fmt.Sprintf("machinectl show -p Leader %s", mach))
712712
if err != nil {
713713
if i != -1 {
714714
time.Sleep(100 * time.Millisecond)
715715
continue
716716
}
717-
return -1, fmt.Errorf("failed detecting machine %s status: %v", mach, err)
717+
return -1, fmt.Errorf("failed detecting machine %s status: %v\nstdout: %s\nstderr: %s", mach, err, stdout, stderr)
718718
}
719719

720720
out := strings.SplitN(strings.TrimSpace(stdout), "=", 2)

functional/scheduling_test.go

+21-19
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ func TestScheduleMachineOf(t *testing.T) {
6666

6767
// All 6 services should be visible immediately and become ACTIVE
6868
// shortly thereafter
69-
stdout, _, err := cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
69+
stdout, stderr, err := cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
7070
if err != nil {
71-
t.Fatalf("Failed to run list-unit-files: %v", err)
71+
t.Fatalf("Failed to run list-unit-files:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
7272
}
7373
units := strings.Split(strings.TrimSpace(stdout), "\n")
7474
if len(units) != 6 {
@@ -113,8 +113,8 @@ func TestScheduleMachineOf(t *testing.T) {
113113

114114
// Ensure a pair of units migrate together when their host goes down
115115
mach := states["ping.1.service"].Machine
116-
if _, _, err = cluster.Fleetctl(m0, "--strict-host-key-checking=false", "ssh", mach, "sudo", "systemctl", "stop", "fleet"); err != nil {
117-
t.Fatal(err)
116+
if stdout, stderr, err = cluster.Fleetctl(m0, "--strict-host-key-checking=false", "ssh", mach, "sudo", "systemctl", "stop", "fleet"); err != nil {
117+
t.Fatalf("Failed to stop fleet service:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
118118
}
119119

120120
var mN platform.Member
@@ -184,9 +184,9 @@ func TestScheduleConflicts(t *testing.T) {
184184

185185
// All 5 services should be visible immediately and 3 should become
186186
// ACTIVE shortly thereafter
187-
stdout, _, err := cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
187+
stdout, stderr, err := cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
188188
if err != nil {
189-
t.Fatalf("Failed to run list-unit-files: %v", err)
189+
t.Fatalf("Failed to run list-unit-files:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
190190
}
191191
units := strings.Split(strings.TrimSpace(stdout), "\n")
192192
if len(units) != 5 {
@@ -256,9 +256,9 @@ func TestScheduleOneWayConflict(t *testing.T) {
256256

257257
// Both units should show up, but only conflicts-with-hello.service
258258
// should report ACTIVE
259-
stdout, _, err := cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
259+
stdout, stderr, err := cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
260260
if err != nil {
261-
t.Fatalf("Failed to run list-unit-files: %v", err)
261+
t.Fatalf("Failed to run list-unit-files:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
262262
}
263263
units := strings.Split(strings.TrimSpace(stdout), "\n")
264264
if len(units) != 2 {
@@ -281,8 +281,8 @@ func TestScheduleOneWayConflict(t *testing.T) {
281281

282282
// Destroying the conflicting unit should allow the other to start
283283
name = "conflicts-with-hello.service"
284-
if _, _, err := cluster.Fleetctl(m0, "destroy", name); err != nil {
285-
t.Fatalf("Failed destroying %s", name)
284+
if stdout, stderr, err := cluster.Fleetctl(m0, "destroy", name); err != nil {
285+
t.Fatalf("Failed destroying %s:\nstdout: %s\nstderr: %s\nerr: %v", name, stdout, stderr, err)
286286
}
287287

288288
// NOTE: we need to sleep here shortly to avoid occasional errors of
@@ -295,13 +295,14 @@ func TestScheduleOneWayConflict(t *testing.T) {
295295
time.Sleep(1 * time.Second)
296296

297297
// Wait for the destroyed unit to actually disappear
298+
var stdoutBuf, stderrBuf string
298299
timeout, err := util.WaitForState(
299300
func() bool {
300-
stdout, _, err := cluster.Fleetctl(m0, "list-units", "--no-legend", "--full", "--fields", "unit,active,machine")
301+
stdoutBuf, stderrBuf, err = cluster.Fleetctl(m0, "list-units", "--no-legend", "--full", "--fields", "unit,active,machine")
301302
if err != nil {
302303
return false
303304
}
304-
lines := strings.Split(strings.TrimSpace(stdout), "\n")
305+
lines := strings.Split(strings.TrimSpace(stdoutBuf), "\n")
305306
states := util.ParseUnitStates(lines)
306307
for _, state := range states {
307308
if state.Name == name {
@@ -312,7 +313,8 @@ func TestScheduleOneWayConflict(t *testing.T) {
312313
},
313314
)
314315
if err != nil {
315-
t.Fatalf("Destroyed unit %s not gone within %v", name, timeout)
316+
t.Fatalf("Destroyed unit %s not gone within %v\nstdout: %s\nstderr: %s\nerr: %v",
317+
name, timeout, stdoutBuf, stderrBuf, err)
316318
}
317319

318320
active, err = cluster.WaitForNActiveUnits(m0, 1)
@@ -374,9 +376,9 @@ func TestScheduleReplace(t *testing.T) {
374376
}
375377

376378
// Check that both units should show up
377-
stdout, _, err := cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
379+
stdout, stderr, err := cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
378380
if err != nil {
379-
t.Fatalf("Failed to run list-unit-files: %v", err)
381+
t.Fatalf("Failed to run list-unit-files:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
380382
}
381383
units := strings.Split(strings.TrimSpace(stdout), "\n")
382384
if len(units) != 2 {
@@ -450,9 +452,9 @@ func TestScheduleCircularReplace(t *testing.T) {
450452
uName0tmp, stdout, stderr, err)
451453
}
452454

453-
stdout, _, err = cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
455+
stdout, stderr, err = cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
454456
if err != nil {
455-
t.Fatalf("Failed to run list-unit-files: %v", err)
457+
t.Fatalf("Failed to run list-unit-files:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
456458
}
457459
units := strings.Split(strings.TrimSpace(stdout), "\n")
458460
if len(units) != nActiveUnits {
@@ -472,9 +474,9 @@ func TestScheduleCircularReplace(t *testing.T) {
472474
if stdout, stderr, err := cluster.Fleetctl(m0, "start", "--no-block", uNames[1]); err != nil {
473475
t.Fatalf("Failed starting unit %s: \nstdout: %s\nstderr: %s\nerr: %v", uNames[1], stdout, stderr, err)
474476
}
475-
stdout, _, err = cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
477+
stdout, stderr, err = cluster.Fleetctl(m0, "list-unit-files", "--no-legend")
476478
if err != nil {
477-
t.Fatalf("Failed to run list-unit-files: %v", err)
479+
t.Fatalf("Failed to run list-unit-files:\nstdout: %s\nstderr: %s\nerr: %v", stdout, stderr, err)
478480
}
479481
units = strings.Split(strings.TrimSpace(stdout), "\n")
480482
if len(units) != nUnits {

functional/server_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,10 @@ func TestReconfigureServer(t *testing.T) {
7878

7979
// check if fleetd is still running correctly, by running fleetctl status
8080
// Even if the log message do not show up this test may catch the error.
81-
stdout, _, err = cluster.Fleetctl(m0, "list-units")
81+
stdout, stderr, err = cluster.Fleetctl(m0, "list-units")
8282
if err != nil {
83-
t.Fatalf("Unable to check list-units. Please check for fleetd socket. err:%v", err)
83+
t.Fatalf("Unable to check list-units. Please check for fleetd socket\nstdout: %s\nstderr: %s\nerr:%v",
84+
stdout, stderr, err)
8485
}
8586

8687
// Ensure that fleet received SIGHUP, if not then just skip this test

0 commit comments

Comments
 (0)