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/wgengine
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
..
bench all: update the tsd.System constructor name (#15372) 8 months ago
filter wgengine/filter: add check for unknown proto 10 months ago
magicsock tstest/integration: get TestOneNodeUpAuth to pass when offline 3 months ago
netlog wgengine: add exit destination logging enable for wgengine logger (#11952) 2 years ago
netstack wgengine/netstack: correctly proxy half-closed TCP connections 5 months ago
router wgengine/router: rely on events for deleted IP rules (#16744) 4 months ago
wgcfg go.mod,wgengine/magicsock: update wireguard-go (#16148) 6 months ago
wgint wgengine{,/wgint}: add wgint.Peer wrapper type, add to wgengine.Engine 2 years ago
wglog all: use Go 1.22 range-over-int 2 years ago
winnet all: add test for package comments, fix, add comments as needed 1 year ago
mem_ios.go all: update copyright and license headers 3 years ago
pendopen.go all: add Node.HomeDERP int, phase out "127.3.3.40:$region" hack [capver 111] 11 months ago
userspace.go ipn/ipnlocal,wgengine{/magicsock}: replace SetNetworkMap with eventbus (#16299) 6 months ago
userspace_ext_test.go net/netmon: publish events to event bus 8 months ago
userspace_test.go net/netmon: publish events to event bus 8 months ago
watchdog.go feature/capture: move packet capture to feature/*, out of iOS + CLI 10 months ago
watchdog_js.go all: update copyright and license headers 3 years ago
watchdog_test.go net/netmon: publish events to event bus 8 months ago
wgengine.go feature/capture: move packet capture to feature/*, out of iOS + CLI 10 months ago