aboutsummaryrefslogtreecommitdiff
path: root/src/syscall
diff options
context:
space:
mode:
authorDmitri Shuralyov <dmitshur@golang.org>2023-07-28 12:34:30 -0400
committerGopher Robot <gobot@golang.org>2023-07-28 17:55:45 +0000
commit9c62ef1243196a8a3a7dee5eef9b3b2f27e8d388 (patch)
treed7d34ee299fb327d0df4b6bf43cc9c955e6649b8 /src/syscall
parentb656fa33123709b381f688c92b7421b43d877715 (diff)
downloadgo-9c62ef1243196a8a3a7dee5eef9b3b2f27e8d388.tar.xz
syscall: skip TestUnshare if there's nothing more to unshare
Tests that need to use the internet are expected not to run when -short test flag is set, and the Go build system automatically catches when a test forgets that. It does this by unsharing all real network interfaces and leaving only a loopback interface in a new network namespace. TestUnshare tests that a process started with CLONE_NEWNET unshare flag has fewer network interfaces than before. Of course, if /proc/net/dev starts out with a single loopback interface, the test would fail with a false positive: === RUN TestUnshare exec_linux_test.go:139: Got 3 lines of output, want <3 --- FAIL: TestUnshare (0.00s) Give the test what it wants: a skip when the environment doesn't meet the minimum requirements for the test, and more useful log output if it fails. Change-Id: I6b9c29d88ce725e640a7ee86c7e1be9761f21b02 Reviewed-on: https://go-review.googlesource.com/c/go/+/513762 Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
Diffstat (limited to 'src/syscall')
-rw-r--r--src/syscall/exec_linux_test.go17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/syscall/exec_linux_test.go b/src/syscall/exec_linux_test.go
index f4ff7bf81b..e9919b6801 100644
--- a/src/syscall/exec_linux_test.go
+++ b/src/syscall/exec_linux_test.go
@@ -109,11 +109,17 @@ func TestUnshare(t *testing.T) {
t.Fatal(err)
}
- orig, err := os.ReadFile(path)
+ b, err := os.ReadFile(path)
if err != nil {
t.Fatal(err)
}
- origLines := strings.Split(strings.TrimSpace(string(orig)), "\n")
+ orig := strings.TrimSpace(string(b))
+ if strings.Contains(orig, "lo:") && strings.Count(orig, ":") == 1 {
+ // This test expects there to be at least 1 more network interface
+ // in addition to the local network interface, so that it can tell
+ // that unshare worked.
+ t.Skip("not enough network interfaces to test unshare with")
+ }
cmd := testenv.Command(t, "cat", path)
cmd.SysProcAttr = &syscall.SysProcAttr{
@@ -128,15 +134,18 @@ func TestUnshare(t *testing.T) {
t.Fatalf("Cmd failed with err %v, output: %s", err, out)
}
- // Check there is only the local network interface
+ // Check there is only the local network interface.
sout := strings.TrimSpace(string(out))
if !strings.Contains(sout, "lo:") {
t.Fatalf("Expected lo network interface to exist, got %s", sout)
}
+ origLines := strings.Split(orig, "\n")
lines := strings.Split(sout, "\n")
if len(lines) >= len(origLines) {
- t.Fatalf("Got %d lines of output, want <%d", len(lines), len(origLines))
+ t.Logf("%s before unshare:\n%s", path, orig)
+ t.Logf("%s after unshare:\n%s", path, sout)
+ t.Fatalf("Got %d lines of output, want < %d", len(lines), len(origLines))
}
}