tstest: add RequireRoot helper
Start using a common helper for tests to declare that they require root. This is step 1. A later step will then make this helper track which tests were skipped so a subsequent pass will run these test as root. Updates tailscale/corp#40007 Change-Id: I4979e1def0fa3691d38c83f48c89aaa443e7f62e Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
399f048332
commit
5e81840b57
@@ -20,6 +20,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"tailscale.com/tstest"
|
||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -71,9 +72,7 @@ func TestDoDropPrivileges(t *testing.T) {
|
|||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
if os.Getuid() != 0 {
|
tstest.RequireRoot(t)
|
||||||
t.Skip("test only works when run as root")
|
|
||||||
}
|
|
||||||
|
|
||||||
rerunSelf := func(t *testing.T, input SubprocInput) []byte {
|
rerunSelf := func(t *testing.T, input SubprocInput) []byte {
|
||||||
fpath := filepath.Join(t.TempDir(), "out.json")
|
fpath := filepath.Join(t.TempDir(), "out.json")
|
||||||
|
|||||||
@@ -73,9 +73,7 @@ func TestMain(m *testing.M) {
|
|||||||
// https://github.com/tailscale/tailscale/issues/7894
|
// https://github.com/tailscale/tailscale/issues/7894
|
||||||
func TestTUNMode(t *testing.T) {
|
func TestTUNMode(t *testing.T) {
|
||||||
tstest.Shard(t)
|
tstest.Shard(t)
|
||||||
if os.Getuid() != 0 {
|
tstest.RequireRoot(t)
|
||||||
t.Skip("skipping when not root")
|
|
||||||
}
|
|
||||||
tstest.Parallel(t)
|
tstest.Parallel(t)
|
||||||
env := NewTestEnv(t)
|
env := NewTestEnv(t)
|
||||||
env.tunMode = true
|
env.tunMode = true
|
||||||
@@ -1565,9 +1563,7 @@ func testAutoUpdateDefaults(t *testing.T, useCap bool) {
|
|||||||
// https://github.com/tailscale/corp/issues/22511
|
// https://github.com/tailscale/corp/issues/22511
|
||||||
func TestDNSOverTCPIntervalResolver(t *testing.T) {
|
func TestDNSOverTCPIntervalResolver(t *testing.T) {
|
||||||
tstest.Shard(t)
|
tstest.Shard(t)
|
||||||
if os.Getuid() != 0 {
|
tstest.RequireRoot(t)
|
||||||
t.Skip("skipping when not root")
|
|
||||||
}
|
|
||||||
env := NewTestEnv(t)
|
env := NewTestEnv(t)
|
||||||
env.tunMode = true
|
env.tunMode = true
|
||||||
n1 := NewTestNode(t, env)
|
n1 := NewTestNode(t, env)
|
||||||
@@ -1637,9 +1633,7 @@ func TestDNSOverTCPIntervalResolver(t *testing.T) {
|
|||||||
// directions.
|
// directions.
|
||||||
func TestNetstackTCPLoopback(t *testing.T) {
|
func TestNetstackTCPLoopback(t *testing.T) {
|
||||||
tstest.Shard(t)
|
tstest.Shard(t)
|
||||||
if os.Getuid() != 0 {
|
tstest.RequireRoot(t)
|
||||||
t.Skip("skipping when not root")
|
|
||||||
}
|
|
||||||
|
|
||||||
env := NewTestEnv(t)
|
env := NewTestEnv(t)
|
||||||
env.tunMode = true
|
env.tunMode = true
|
||||||
@@ -1779,9 +1773,7 @@ func TestNetstackTCPLoopback(t *testing.T) {
|
|||||||
// directions.
|
// directions.
|
||||||
func TestNetstackUDPLoopback(t *testing.T) {
|
func TestNetstackUDPLoopback(t *testing.T) {
|
||||||
tstest.Shard(t)
|
tstest.Shard(t)
|
||||||
if os.Getuid() != 0 {
|
tstest.RequireRoot(t)
|
||||||
t.Skip("skipping when not root")
|
|
||||||
}
|
|
||||||
|
|
||||||
env := NewTestEnv(t)
|
env := NewTestEnv(t)
|
||||||
env.tunMode = true
|
env.tunMode = true
|
||||||
|
|||||||
@@ -95,6 +95,14 @@ func Parallel(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RequireRoot skips the test if the current user is not root.
|
||||||
|
func RequireRoot(tb testing.TB) {
|
||||||
|
tb.Helper()
|
||||||
|
if os.Getuid() != 0 {
|
||||||
|
tb.Skip("skipping test; requires root")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SkipOnKernelVersions skips the test if the current
|
// SkipOnKernelVersions skips the test if the current
|
||||||
// kernel version is in the specified list.
|
// kernel version is in the specified list.
|
||||||
func SkipOnKernelVersions(t testing.TB, issue string, versions ...string) {
|
func SkipOnKernelVersions(t testing.TB, issue string, versions ...string) {
|
||||||
|
|||||||
@@ -1157,9 +1157,7 @@ func (lt *linuxTest) Close() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newLinuxRootTest(t *testing.T) (*linuxTest, *eventbus.Bus) {
|
func newLinuxRootTest(t *testing.T) (*linuxTest, *eventbus.Bus) {
|
||||||
if os.Getuid() != 0 {
|
tstest.RequireRoot(t)
|
||||||
t.Skip("test requires root")
|
|
||||||
}
|
|
||||||
|
|
||||||
lt := new(linuxTest)
|
lt := new(linuxTest)
|
||||||
lt.tun = createTestTUN(t)
|
lt.tun = createTestTUN(t)
|
||||||
|
|||||||
Reference in New Issue
Block a user