mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 13:05:46 +00:00
tstest/integration: use t.Cleanup
Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:
parent
43983a4a3b
commit
768baafcb5
@ -67,12 +67,9 @@ func TestOneNodeUp_NoAuth(t *testing.T) {
|
|||||||
bins := BuildTestBinaries(t)
|
bins := BuildTestBinaries(t)
|
||||||
|
|
||||||
env := newTestEnv(t, bins)
|
env := newTestEnv(t, bins)
|
||||||
defer env.Close()
|
|
||||||
|
|
||||||
n1 := newTestNode(t, env)
|
n1 := newTestNode(t, env)
|
||||||
|
|
||||||
d1 := n1.StartDaemon(t)
|
d1 := n1.StartDaemon(t)
|
||||||
defer d1.Kill()
|
|
||||||
n1.AwaitResponding(t)
|
n1.AwaitResponding(t)
|
||||||
n1.MustUp()
|
n1.MustUp()
|
||||||
|
|
||||||
@ -89,12 +86,9 @@ func TestOneNodeExpiredKey(t *testing.T) {
|
|||||||
bins := BuildTestBinaries(t)
|
bins := BuildTestBinaries(t)
|
||||||
|
|
||||||
env := newTestEnv(t, bins)
|
env := newTestEnv(t, bins)
|
||||||
defer env.Close()
|
|
||||||
|
|
||||||
n1 := newTestNode(t, env)
|
n1 := newTestNode(t, env)
|
||||||
|
|
||||||
d1 := n1.StartDaemon(t)
|
d1 := n1.StartDaemon(t)
|
||||||
defer d1.Kill()
|
|
||||||
n1.AwaitResponding(t)
|
n1.AwaitResponding(t)
|
||||||
n1.MustUp()
|
n1.MustUp()
|
||||||
n1.AwaitRunning(t)
|
n1.AwaitRunning(t)
|
||||||
@ -130,8 +124,6 @@ func TestCollectPanic(t *testing.T) {
|
|||||||
bins := BuildTestBinaries(t)
|
bins := BuildTestBinaries(t)
|
||||||
|
|
||||||
env := newTestEnv(t, bins)
|
env := newTestEnv(t, bins)
|
||||||
defer env.Close()
|
|
||||||
|
|
||||||
n := newTestNode(t, env)
|
n := newTestNode(t, env)
|
||||||
|
|
||||||
cmd := exec.Command(n.env.Binaries.Daemon, "--cleanup")
|
cmd := exec.Command(n.env.Binaries.Daemon, "--cleanup")
|
||||||
@ -165,12 +157,9 @@ func TestStateSavedOnStart(t *testing.T) {
|
|||||||
bins := BuildTestBinaries(t)
|
bins := BuildTestBinaries(t)
|
||||||
|
|
||||||
env := newTestEnv(t, bins)
|
env := newTestEnv(t, bins)
|
||||||
defer env.Close()
|
|
||||||
|
|
||||||
n1 := newTestNode(t, env)
|
n1 := newTestNode(t, env)
|
||||||
|
|
||||||
d1 := n1.StartDaemon(t)
|
d1 := n1.StartDaemon(t)
|
||||||
defer d1.Kill()
|
|
||||||
n1.AwaitResponding(t)
|
n1.AwaitResponding(t)
|
||||||
n1.MustUp()
|
n1.MustUp()
|
||||||
|
|
||||||
@ -208,11 +197,9 @@ func TestOneNodeUp_Auth(t *testing.T) {
|
|||||||
env := newTestEnv(t, bins, configureControl(func(control *testcontrol.Server) {
|
env := newTestEnv(t, bins, configureControl(func(control *testcontrol.Server) {
|
||||||
control.RequireAuth = true
|
control.RequireAuth = true
|
||||||
}))
|
}))
|
||||||
defer env.Close()
|
|
||||||
|
|
||||||
n1 := newTestNode(t, env)
|
n1 := newTestNode(t, env)
|
||||||
d1 := n1.StartDaemon(t)
|
d1 := n1.StartDaemon(t)
|
||||||
defer d1.Kill()
|
|
||||||
|
|
||||||
n1.AwaitListening(t)
|
n1.AwaitListening(t)
|
||||||
|
|
||||||
@ -253,18 +240,15 @@ func TestTwoNodes(t *testing.T) {
|
|||||||
bins := BuildTestBinaries(t)
|
bins := BuildTestBinaries(t)
|
||||||
|
|
||||||
env := newTestEnv(t, bins)
|
env := newTestEnv(t, bins)
|
||||||
defer env.Close()
|
|
||||||
|
|
||||||
// Create two nodes:
|
// Create two nodes:
|
||||||
n1 := newTestNode(t, env)
|
n1 := newTestNode(t, env)
|
||||||
n1SocksAddrCh := n1.socks5AddrChan()
|
n1SocksAddrCh := n1.socks5AddrChan()
|
||||||
d1 := n1.StartDaemon(t)
|
d1 := n1.StartDaemon(t)
|
||||||
defer d1.Kill()
|
|
||||||
|
|
||||||
n2 := newTestNode(t, env)
|
n2 := newTestNode(t, env)
|
||||||
n2SocksAddrCh := n2.socks5AddrChan()
|
n2SocksAddrCh := n2.socks5AddrChan()
|
||||||
d2 := n2.StartDaemon(t)
|
d2 := n2.StartDaemon(t)
|
||||||
defer d2.Kill()
|
|
||||||
|
|
||||||
n1Socks := n1.AwaitSocksAddr(t, n1SocksAddrCh)
|
n1Socks := n1.AwaitSocksAddr(t, n1SocksAddrCh)
|
||||||
n2Socks := n1.AwaitSocksAddr(t, n2SocksAddrCh)
|
n2Socks := n1.AwaitSocksAddr(t, n2SocksAddrCh)
|
||||||
@ -304,11 +288,8 @@ func TestNodeAddressIPFields(t *testing.T) {
|
|||||||
bins := BuildTestBinaries(t)
|
bins := BuildTestBinaries(t)
|
||||||
|
|
||||||
env := newTestEnv(t, bins)
|
env := newTestEnv(t, bins)
|
||||||
defer env.Close()
|
|
||||||
|
|
||||||
n1 := newTestNode(t, env)
|
n1 := newTestNode(t, env)
|
||||||
d1 := n1.StartDaemon(t)
|
d1 := n1.StartDaemon(t)
|
||||||
defer d1.Kill()
|
|
||||||
|
|
||||||
n1.AwaitListening(t)
|
n1.AwaitListening(t)
|
||||||
n1.MustUp()
|
n1.MustUp()
|
||||||
@ -335,11 +316,8 @@ func TestAddPingRequest(t *testing.T) {
|
|||||||
bins := BuildTestBinaries(t)
|
bins := BuildTestBinaries(t)
|
||||||
|
|
||||||
env := newTestEnv(t, bins)
|
env := newTestEnv(t, bins)
|
||||||
defer env.Close()
|
|
||||||
|
|
||||||
n1 := newTestNode(t, env)
|
n1 := newTestNode(t, env)
|
||||||
d1 := n1.StartDaemon(t)
|
n1.StartDaemon(t)
|
||||||
defer d1.Kill()
|
|
||||||
|
|
||||||
n1.AwaitListening(t)
|
n1.AwaitListening(t)
|
||||||
n1.MustUp()
|
n1.MustUp()
|
||||||
@ -394,12 +372,9 @@ func TestNoControlConnWhenDown(t *testing.T) {
|
|||||||
bins := BuildTestBinaries(t)
|
bins := BuildTestBinaries(t)
|
||||||
|
|
||||||
env := newTestEnv(t, bins)
|
env := newTestEnv(t, bins)
|
||||||
defer env.Close()
|
|
||||||
|
|
||||||
n1 := newTestNode(t, env)
|
n1 := newTestNode(t, env)
|
||||||
|
|
||||||
d1 := n1.StartDaemon(t)
|
d1 := n1.StartDaemon(t)
|
||||||
defer d1.Kill()
|
|
||||||
n1.AwaitResponding(t)
|
n1.AwaitResponding(t)
|
||||||
|
|
||||||
// Come up the first time.
|
// Come up the first time.
|
||||||
@ -413,7 +388,6 @@ func TestNoControlConnWhenDown(t *testing.T) {
|
|||||||
|
|
||||||
env.LogCatcher.Reset()
|
env.LogCatcher.Reset()
|
||||||
d2 := n1.StartDaemon(t)
|
d2 := n1.StartDaemon(t)
|
||||||
defer d2.Kill()
|
|
||||||
n1.AwaitResponding(t)
|
n1.AwaitResponding(t)
|
||||||
|
|
||||||
st := n1.MustStatus(t)
|
st := n1.MustStatus(t)
|
||||||
@ -441,13 +415,10 @@ func TestOneNodeUpWindowsStyle(t *testing.T) {
|
|||||||
bins := BuildTestBinaries(t)
|
bins := BuildTestBinaries(t)
|
||||||
|
|
||||||
env := newTestEnv(t, bins)
|
env := newTestEnv(t, bins)
|
||||||
defer env.Close()
|
|
||||||
|
|
||||||
n1 := newTestNode(t, env)
|
n1 := newTestNode(t, env)
|
||||||
n1.upFlagGOOS = "windows"
|
n1.upFlagGOOS = "windows"
|
||||||
|
|
||||||
d1 := n1.StartDaemonAsIPNGOOS(t, "windows")
|
d1 := n1.StartDaemonAsIPNGOOS(t, "windows")
|
||||||
defer d1.Kill()
|
|
||||||
n1.AwaitResponding(t)
|
n1.AwaitResponding(t)
|
||||||
n1.MustUp("--unattended")
|
n1.MustUp("--unattended")
|
||||||
|
|
||||||
@ -483,10 +454,8 @@ func (f configureControl) modifyTestEnv(te *testEnv) {
|
|||||||
f(te.Control)
|
f(te.Control)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newTestEnv starts a bunch of services and returns a new test
|
// newTestEnv starts a bunch of services and returns a new test environment.
|
||||||
// environment.
|
// newTestEnv arranges for the environment's resources to be cleaned up on exit.
|
||||||
//
|
|
||||||
// Call Close to shut everything down.
|
|
||||||
func newTestEnv(t testing.TB, bins *Binaries, opts ...testEnvOpt) *testEnv {
|
func newTestEnv(t testing.TB, bins *Binaries, opts ...testEnvOpt) *testEnv {
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
t.Skip("not tested/working on Windows yet")
|
t.Skip("not tested/working on Windows yet")
|
||||||
@ -512,21 +481,19 @@ func newTestEnv(t testing.TB, bins *Binaries, opts ...testEnvOpt) *testEnv {
|
|||||||
o.modifyTestEnv(e)
|
o.modifyTestEnv(e)
|
||||||
}
|
}
|
||||||
control.HTTPTestServer.Start()
|
control.HTTPTestServer.Start()
|
||||||
|
t.Cleanup(func() {
|
||||||
|
// Shut down e.
|
||||||
|
if err := e.TrafficTrap.Err(); err != nil {
|
||||||
|
e.t.Errorf("traffic trap: %v", err)
|
||||||
|
e.t.Logf("logs: %s", e.LogCatcher.logsString())
|
||||||
|
}
|
||||||
|
e.LogCatcherServer.Close()
|
||||||
|
e.TrafficTrapServer.Close()
|
||||||
|
e.ControlServer.Close()
|
||||||
|
})
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *testEnv) Close() error {
|
|
||||||
if err := e.TrafficTrap.Err(); err != nil {
|
|
||||||
e.t.Errorf("traffic trap: %v", err)
|
|
||||||
e.t.Logf("logs: %s", e.LogCatcher.logsString())
|
|
||||||
}
|
|
||||||
|
|
||||||
e.LogCatcherServer.Close()
|
|
||||||
e.TrafficTrapServer.Close()
|
|
||||||
e.ControlServer.Close()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// testNode is a machine with a tailscale & tailscaled.
|
// testNode is a machine with a tailscale & tailscaled.
|
||||||
// Currently, the test is simplistic and user==node==machine.
|
// Currently, the test is simplistic and user==node==machine.
|
||||||
// That may grow complexity later to test more.
|
// That may grow complexity later to test more.
|
||||||
@ -681,10 +648,6 @@ type Daemon struct {
|
|||||||
Process *os.Process
|
Process *os.Process
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Daemon) Kill() {
|
|
||||||
d.Process.Kill()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *Daemon) MustCleanShutdown(t testing.TB) {
|
func (d *Daemon) MustCleanShutdown(t testing.TB) {
|
||||||
d.Process.Signal(os.Interrupt)
|
d.Process.Signal(os.Interrupt)
|
||||||
ps, err := d.Process.Wait()
|
ps, err := d.Process.Wait()
|
||||||
@ -696,8 +659,8 @@ func (d *Daemon) MustCleanShutdown(t testing.TB) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartDaemon starts the node's tailscaled, failing if it fails to
|
// StartDaemon starts the node's tailscaled, failing if it fails to start.
|
||||||
// start.
|
// StartDaemon ensures that the process will exit when the test completes.
|
||||||
func (n *testNode) StartDaemon(t testing.TB) *Daemon {
|
func (n *testNode) StartDaemon(t testing.TB) *Daemon {
|
||||||
return n.StartDaemonAsIPNGOOS(t, runtime.GOOS)
|
return n.StartDaemonAsIPNGOOS(t, runtime.GOOS)
|
||||||
}
|
}
|
||||||
@ -724,6 +687,7 @@ func (n *testNode) StartDaemonAsIPNGOOS(t testing.TB, ipnGOOS string) *Daemon {
|
|||||||
if err := cmd.Start(); err != nil {
|
if err := cmd.Start(); err != nil {
|
||||||
t.Fatalf("starting tailscaled: %v", err)
|
t.Fatalf("starting tailscaled: %v", err)
|
||||||
}
|
}
|
||||||
|
t.Cleanup(func() { cmd.Process.Kill() })
|
||||||
return &Daemon{
|
return &Daemon{
|
||||||
Process: cmd.Process,
|
Process: cmd.Process,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user