tailscale/ipn
Adrian Dewhurst 3bf2bddbb5 ipn/ipnlocal: improve testability of random node selection
In order to test the sticky last suggestion code, a test was written for
LocalBackend.SuggestExitNode but it contains a random number generator
which makes writing comprehensive tests very difficult. This doesn't
change how the last suggestion works, but it adds some infrastructure to
make that easier in a later PR.

This adds func parameters for the two randomized parts: breaking ties
between DERP regions and breaking ties between nodes. This way tests can
validate the entire list of tied options, rather than expecting a
particular outcome given a particular random seed.

As a result of this, the global random number generator can be used
rather than seeding a local one each time.

In order to see the tied nodes for the location based (i.e. Mullvad)
case, pickWeighted needed to return a slice instead of a single
arbitrary option, so there is a small change in how that works.

Updates tailscale/corp#19681

Change-Id: I83c48a752abdec0f59c58ccfd8bfb3f3f17d0ea8
Signed-off-by: Adrian Dewhurst <adrian@tailscale.com>
2024-06-03 16:58:25 -04:00
..
conffile cmd/tailscaled, ipn/conffile: support ec2 user-data config file 2024-05-30 09:49:18 -07:00
ipnauth go.mod, all: move away from inet.af domain seized by Taliban 2024-02-13 19:21:09 -08:00
ipnlocal ipn/ipnlocal: improve testability of random node selection 2024-06-03 16:58:25 -04:00
ipnserver ipn/ipnserver: close a small race in ipnserver, ~simplify code 2024-05-07 21:27:06 -07:00
ipnstate cmd/tailscale/cli: print node signature in tailscale lock status 2024-05-31 10:11:25 +01:00
localapi tsnet,wgengine/netstack: add ListenPacket and tests 2024-06-02 14:14:24 -07:00
policy ipn,tailconfig: clean up unreleased and removed app connector service 2023-11-09 22:36:52 -08:00
store ipn/store/kubestore, cmd/containerboot: allow overriding client api server URL via ENV (#12115) 2024-05-31 19:39:38 +01:00
backend.go ipn: remove unused Options.LegacyMigrationPrefs 2024-04-15 22:13:53 -07:00
conf.go cmd/k8s-operator,cmd/containerboot,ipn,k8s-operator: turn off stateful filter for egress proxies. (#12075) 2024-05-10 16:32:37 +01:00
doc.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
ipn_clone.go ipn,wgengine: remove vestigial Prefs.AllowSingleHosts 2024-05-17 20:50:19 -07:00
ipn_test.go all: do not depend on the testing package 2024-05-24 05:23:36 -07:00
ipn_view.go ipn,wgengine: remove vestigial Prefs.AllowSingleHosts 2024-05-17 20:50:19 -07:00
prefs_test.go ipn,wgengine: remove vestigial Prefs.AllowSingleHosts 2024-05-17 20:50:19 -07:00
prefs.go various: disable stateful filtering by default (#12197) 2024-05-20 11:44:29 -07:00
serve_test.go {ipn/serve,cmd/tailscale/cli}: move some shared funcs to ipn 2024-03-05 14:30:38 -05:00
serve.go serve.go, tsnet.go: Fix "in in" typo (#12279) 2024-05-29 14:11:00 -07:00
store_test.go ipn: avoid useless no-op WriteState calls 2023-08-07 08:44:24 -07:00
store.go ipn: add comment about thread-safety to StateStore 2024-03-06 12:42:18 -06:00