You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailscale/tstest/integration
Alex Chan 7953592f40 tstest/integration: get TestOneNodeUpAuth to pass when offline
How TestOneNodeUpAuth works:

* it starts a test version of tailscaled
* it runs `tailscale up`
* it checks that tailscaled becomes "Running"

However, if the network is down, the test either fails or times out,
because tailscaled never becomes Running.

## Why does the test fail?

ipn only becomes Running when it sees at least one live peer or DERP
connection:
0cc1b2ff76/ipn/ipnlocal/local.go (L5861-L5866)

The test only uses a single node, so it's never going to see a peer --
it has to wait to see a DERP server.  The test environment does have
a DERP map of in-memory DERP nodes, but we aren't connecting to them.

magicsock sets the preferred DERP server in `updateNetInfo()`, but this
function returns early if the network is down.
0cc1b2ff76/wgengine/magicsock/magicsock.go (L1053-L1106)

Because we're checking the real network, this prevents ipn from entering
"Running" and causes the test to fail.

## What's the fix?

In tests, we can assume the network is up unless we're explicitly testing
the behaviour of tailscaled when the network is down.

We do something similar in magicsock/derp.go, where we assume we're
connected to control unless explicitly testing otherwise:
7d2101f352/wgengine/magicsock/derp.go (L166-L177)

This is the template for the changes to `networkDown()`.

Additionally, the `testenv.InTest()` function currently checks for the
`-test.v` flag, but this isn't visible to the version of tailscaled
running in the test environment.  Instead, we add a new `TEST` env var
so this process knows it's inside a test.

Fixes #17122

Signed-off-by: Alex Chan <alexc@tailscale.com>
3 months ago
..
nat wgengine/magicsock: use learned DERP route as send path of last resort 9 months ago
testcontrol tstest/integration/testcontrol: propagate CapVer (#17093) 3 months ago
vms tstest/integration: don't require TestMake, stop leaking binaries in /tmp 7 months ago
capmap_test.go tstest/integration/testcontrol: include peer CapMaps in MapResponses 5 months ago
gen_deps.go all: update tools that manage copyright headers 3 years ago
integration.go tstest/integration: get TestOneNodeUpAuth to pass when offline 3 months ago
integration_test.go utils/expvarx, tstest/integration: mark two tests as known flaky (#17052) 3 months ago
tailscaled_deps_test_darwin.go feature/drive: start factoring out Taildrive, add ts_omit_drive build tag 3 months ago
tailscaled_deps_test_freebsd.go feature/drive: start factoring out Taildrive, add ts_omit_drive build tag 3 months ago
tailscaled_deps_test_linux.go feature/drive: start factoring out Taildrive, add ts_omit_drive build tag 3 months ago
tailscaled_deps_test_openbsd.go feature/drive: start factoring out Taildrive, add ts_omit_drive build tag 3 months ago
tailscaled_deps_test_windows.go feature/drive: start factoring out Taildrive, add ts_omit_drive build tag 3 months ago