Documentation
¶
Overview ¶
Package integration contains Tailscale integration tests.
This package is considered internal and the public API is subject to change without notice.
Index ¶
- Variables
- func RunDERPAndSTUN(t testing.TB, logf logger.Logf, ipAddress string) (derpMap *tailcfg.DERPMap)
- type Binaries
- type BinaryInfo
- type ConfigureControl
- type Daemon
- type LogCatcher
- type TestEnv
- type TestEnvOpt
- type TestNode
- func (n *TestNode) AwaitBackendState(state string)
- func (n *TestNode) AwaitIP4() netip.Addr
- func (n *TestNode) AwaitIP6() netip.Addr
- func (n *TestNode) AwaitIPs() []netip.Addr
- func (n *TestNode) AwaitListening()
- func (n *TestNode) AwaitNeedsLogin()
- func (n *TestNode) AwaitResponding()
- func (n *TestNode) AwaitRunning()
- func (n *TestNode) AwaitSocksAddr(ch <-chan string) string
- func (n *TestNode) LocalClient() *local.Client
- func (n *TestNode) MustDown()
- func (n *TestNode) MustLogOut()
- func (n *TestNode) MustStatus() *ipnstate.Status
- func (n *TestNode) MustUp(extraArgs ...string)
- func (n *TestNode) NLPublicKey() string
- func (n *TestNode) Ping(otherNode *TestNode) error
- func (n *TestNode) PublicKey() string
- func (n *TestNode) StartDaemon() *Daemon
- func (n *TestNode) StartDaemonAsIPNGOOS(ipnGOOS string) *Daemon
- func (n *TestNode) Status() (*ipnstate.Status, error)
- func (n *TestNode) Tailscale(arg ...string) *exec.Cmd
- func (n *TestNode) TailscaleForOutput(arg ...string) *exec.Cmd
Constants ¶
This section is empty.
Variables ¶
var MainError syncs.AtomicValue[error]
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
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
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 is the absolute path to the tailscale or tailscaled binary.
// This path may become invalid after the owning test's TempDir is
// cleaned up; use FD (or Contents on Windows) to access the binary
// contents.
Path string
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)
CopyTo copies or hardlinks the binary into dir, returning a new BinaryInfo with an updated Path. The source bytes come from FD (or Contents on Windows), not from b.Path, which may have been deleted when its owning test's TempDir was cleaned up.
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
func (*Daemon) MustCleanShutdown ¶ added in v1.84.0
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
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
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 (*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 (*TestNode) LocalClient ¶ added in v1.84.0
func (*TestNode) MustLogOut ¶ added in v1.84.0
func (n *TestNode) MustLogOut()
func (*TestNode) MustStatus ¶ added in v1.84.0
func (*TestNode) NLPublicKey ¶ added in v1.92.0
NLPublicKey returns the hex-encoded network lock public key of this node, e.g. `tlpub:123456abc`
func (*TestNode) PublicKey ¶ added in v1.92.0
PublicKey returns the hex-encoded public key of this node, e.g. `nodekey:123456abc`
func (*TestNode) StartDaemon ¶ added in v1.84.0
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
Source Files
¶
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. |