Skip to content

Commit f943594

Browse files
shailend-ggvisor-bot
authored andcommitted
Deflake the TestTcpdump image_test
Using `-i any` catches ARP and DNS traffic on the external interface and occasionally fails the test because the test insists on catching packets it itself transmits on the local interface. PiperOrigin-RevId: 813527471
1 parent 48fd850 commit f943594

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

test/image/image_test.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,10 @@ func TestTcpdump(t *testing.T) {
354354
t.Fatalf("docker run failed: %v", err)
355355
}
356356

357-
cmd := "tcpdump -c 2 -i any port 9999"
357+
// Stick to `lo` to avoid catching packets from the host. The "port 9999"
358+
// does not actually do anything because we do not yet support installing
359+
// a filter bpf program.
360+
cmd := "tcpdump -c 2 -i lo port 9999"
358361
tcpdumpProc, err := d.ExecProcess(ctx, dockerutil.ExecOpts{}, "/bin/sh", "-c", cmd)
359362
if err != nil {
360363
t.Fatalf("docker run failed: %v", err)
@@ -364,13 +367,13 @@ func TestTcpdump(t *testing.T) {
364367
if err != nil {
365368
t.Fatalf("docker exec failed: %v", err)
366369
}
370+
367371
if status, err := senderProc.WaitExitStatus(ctx); err != nil || status != 0 {
368372
t.Fatalf("docker exec failed: %v, status: %d", err, status)
369373
}
370374
if status, err := tcpdumpProc.WaitExitStatus(ctx); err != nil || status != 0 {
371375
t.Fatalf("docker exec failed: %v, status: %d", err, status)
372376
}
373-
374377
expectedOutputStr1 := "IP localhost.9999 > localhost.9999: UDP, length 4"
375378
logs, err := tcpdumpProc.Logs()
376379
if err != nil {
@@ -383,6 +386,27 @@ func TestTcpdump(t *testing.T) {
383386
if !strings.Contains(logs, expectedOutputStr2) {
384387
t.Fatalf("docker didn't get output: %q, got: %q", expectedOutputStr2, logs)
385388
}
389+
390+
// Check that `any` also works to guard against b/411198401.
391+
cmd = "tcpdump -c 2 -i any port 9999"
392+
tcpdumpProc, err = d.ExecProcess(ctx, dockerutil.ExecOpts{}, "/bin/sh", "-c", cmd)
393+
if err != nil {
394+
t.Fatalf("docker run failed: %v", err)
395+
}
396+
cmd = "python3 sender.py"
397+
senderProc, err = d.ExecProcess(ctx, dockerutil.ExecOpts{}, "/bin/sh", "-c", cmd)
398+
if err != nil {
399+
t.Fatalf("docker exec failed: %v", err)
400+
}
401+
402+
// We make no assertions about the output because we might catch host packets
403+
// too: we only rely on tcpdump's exit status.
404+
if status, err := tcpdumpProc.WaitExitStatus(ctx); err != nil || status != 0 {
405+
t.Fatalf("docker exec failed: %v, status: %d", err, status)
406+
}
407+
if status, err := senderProc.WaitExitStatus(ctx); err != nil || status != 0 {
408+
t.Fatalf("docker exec failed: %v, status: %d", err, status)
409+
}
386410
}
387411

388412
func dockerInGvisorCapabilities() []string {

0 commit comments

Comments
 (0)