mirror of
https://github.com/tailscale/tailscale.git
synced 2026-05-05 04:06:35 +02:00
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. 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. 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>