integration

package
v1.84.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 9, 2025 License: BSD-3-Clause Imports: 78 Imported by: 4

Documentation

Overview

Package integration contains Tailscale integration tests.

This package is considered internal and the public API is subject to change without notice.

Index

Constants

This section is empty.

Variables

MainError is an error that's set if an error conditions happens outside of a context where a testing.TB is available. The caller can check it in its TestMain as a last ditch place to report errors.

Functions

func RunDERPAndSTUN added in v1.12.0

func RunDERPAndSTUN(t testing.TB, logf logger.Logf, ipAddress string) (derpMap *tailcfg.DERPMap)

RunDERPAndSTUN runs a local DERP and STUN server for tests, returning the derpMap that clients should use. This creates resources that must be cleaned up with the returned cleanup function.

Types

type Binaries

type Binaries struct {
	Dir        string
	Tailscale  BinaryInfo
	Tailscaled BinaryInfo
}

Binaries contains the paths to the tailscale and tailscaled binaries.

func GetBinaries added in v1.84.0

func GetBinaries(tb testing.TB) *Binaries

GetBinaries create a temp directory using tb and builds (or copies previously built) cmd/tailscale and cmd/tailscaled binaries into that directory.

It fails tb if the build or binary copies fail.

type BinaryInfo added in v1.84.0

type BinaryInfo struct {
	Path string // abs path to tailscale or tailscaled binary
	Size int64

	// FD and FDmu are set on Unix to efficiently copy the binary to a new
	// test's automatically-cleaned-up temp directory.
	FD   *os.File // for Unix (macOS, Linux, ...)
	FDMu sync.Locker

	// Contents is used on Windows instead of FD to copy the binary between
	// test directories. (On Windows you can't keep an FD open while an earlier
	// test's temp directories are deleted.)
	// This burns some memory and costs more in I/O, but oh well.
	Contents []byte
}

BinaryInfo describes a tailscale or tailscaled binary.

func (BinaryInfo) CopyTo added in v1.84.0

func (b BinaryInfo) CopyTo(dir string) (BinaryInfo, error)

type ConfigureControl added in v1.84.0

type ConfigureControl func(*testcontrol.Server)

ConfigureControl is a test option that configures the test control server.

func (ConfigureControl) ModifyTestEnv added in v1.84.0

func (f ConfigureControl) ModifyTestEnv(te *TestEnv)

type Daemon added in v1.84.0

type Daemon struct {
	Process *os.Process
}

func (*Daemon) MustCleanShutdown added in v1.84.0

func (d *Daemon) MustCleanShutdown(t testing.TB)

type LogCatcher added in v1.12.0

type LogCatcher struct {
	// contains filtered or unexported fields
}

LogCatcher is a minimal logcatcher for the logtail upload client.

func (*LogCatcher) Reset added in v1.12.0

func (lc *LogCatcher) Reset()

Reset clears the buffered logs from memory.

func (*LogCatcher) ServeHTTP added in v1.12.0

func (lc *LogCatcher) ServeHTTP(w http.ResponseWriter, r *http.Request)

func (*LogCatcher) StoreRawJSON added in v1.22.0

func (lc *LogCatcher) StoreRawJSON()

StoreRawJSON instructs lc to save the raw JSON uploads, rather than just the text.

func (*LogCatcher) UseLogf added in v1.12.0

func (lc *LogCatcher) UseLogf(fn logger.Logf)

UseLogf makes the logcatcher implementation use a given logf function to dump all logs to.

type TestEnv added in v1.84.0

type TestEnv struct {
	LogCatcher       *LogCatcher
	LogCatcherServer *httptest.Server

	Control       *testcontrol.Server
	ControlServer *httptest.Server

	TrafficTrap       *trafficTrap
	TrafficTrapServer *httptest.Server
	// contains filtered or unexported fields
}

TestEnv contains the test environment (set of servers) used by one or more nodes.

func NewTestEnv added in v1.84.0

func NewTestEnv(t testing.TB, opts ...TestEnvOpt) *TestEnv

NewTestEnv starts a bunch of services and returns a new test environment. NewTestEnv arranges for the environment's resources to be cleaned up on exit.

func (*TestEnv) ControlURL added in v1.84.0

func (e *TestEnv) ControlURL() string

ControlURL returns e.ControlServer.URL, panicking if it's the empty string, which it should never be in tests.

type TestEnvOpt added in v1.84.0

type TestEnvOpt interface {
	ModifyTestEnv(*TestEnv)
}

TestEnvOpt represents an option that can be passed to NewTestEnv.

type TestNode added in v1.84.0

type TestNode struct {
	// contains filtered or unexported fields
}

TestNode is a machine with a tailscale & tailscaled. Currently, the test is simplistic and user==node==machine. That may grow complexity later to test more.

func NewTestNode added in v1.84.0

func NewTestNode(t *testing.T, env *TestEnv) *TestNode

NewTestNode allocates a temp directory for a new test node. The node is not started automatically.

func (*TestNode) AwaitBackendState added in v1.84.0

func (n *TestNode) AwaitBackendState(state string)

func (*TestNode) AwaitIP4 added in v1.84.0

func (n *TestNode) AwaitIP4() netip.Addr

AwaitIP4 returns the IPv4 address of n.

func (*TestNode) AwaitIP6 added in v1.84.0

func (n *TestNode) AwaitIP6() netip.Addr

AwaitIP6 returns the IPv6 address of n.

func (*TestNode) AwaitIPs added in v1.84.0

func (n *TestNode) AwaitIPs() []netip.Addr

func (*TestNode) AwaitListening added in v1.84.0

func (n *TestNode) AwaitListening()

AwaitListening waits for the tailscaled to be serving local clients over its localhost IPC mechanism. (Unix socket, etc)

func (*TestNode) AwaitNeedsLogin added in v1.84.0

func (n *TestNode) AwaitNeedsLogin()

AwaitNeedsLogin waits for n to reach the IPN state "NeedsLogin".

func (*TestNode) AwaitResponding added in v1.84.0

func (n *TestNode) AwaitResponding()

AwaitResponding waits for n's tailscaled to be up enough to be responding, but doesn't wait for any particular state.

func (*TestNode) AwaitRunning added in v1.84.0

func (n *TestNode) AwaitRunning()

AwaitRunning waits for n to reach the IPN state "Running".

func (*TestNode) AwaitSocksAddr added in v1.84.0

func (n *TestNode) AwaitSocksAddr(ch <-chan string) string

func (*TestNode) LocalClient added in v1.84.0

func (n *TestNode) LocalClient() *local.Client

func (*TestNode) MustDown added in v1.84.0

func (n *TestNode) MustDown()

func (*TestNode) MustLogOut added in v1.84.0

func (n *TestNode) MustLogOut()

func (*TestNode) MustStatus added in v1.84.0

func (n *TestNode) MustStatus() *ipnstate.Status

func (*TestNode) MustUp added in v1.84.0

func (n *TestNode) MustUp(extraArgs ...string)

func (*TestNode) Ping added in v1.84.0

func (n *TestNode) Ping(otherNode *TestNode) error

func (*TestNode) StartDaemon added in v1.84.0

func (n *TestNode) StartDaemon() *Daemon

StartDaemon starts the node's tailscaled, failing if it fails to start. StartDaemon ensures that the process will exit when the test completes.

func (*TestNode) StartDaemonAsIPNGOOS added in v1.84.0

func (n *TestNode) StartDaemonAsIPNGOOS(ipnGOOS string) *Daemon

func (*TestNode) Status added in v1.84.0

func (n *TestNode) Status() (*ipnstate.Status, error)

func (*TestNode) Tailscale added in v1.84.0

func (n *TestNode) Tailscale(arg ...string) *exec.Cmd

Tailscale returns a command that runs the tailscale CLI with the provided arguments. It does not start the process.

func (*TestNode) TailscaleForOutput added in v1.84.0

func (n *TestNode) TailscaleForOutput(arg ...string) *exec.Cmd

Directories

Path Synopsis
Package testcontrol contains a minimal control plane server for testing purposes.
Package testcontrol contains a minimal control plane server for testing purposes.
Package vms does VM-based integration/functional tests by using qemu and a bank of pre-made VM images.
Package vms does VM-based integration/functional tests by using qemu and a bank of pre-made VM images.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL