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/ipn
Nick Khyl 62fb857857 ipn/ipnserver: fix TestConcurrentOSUserSwitchingOnWindows
I made a last-minute change in #14626 to split a single loop that created 1_000 concurrent
connections into an inner and outer loop that create 100 concurrent connections 10 times.
This introduced a race because the last user's connection may still be active (from the server's
perspective) when a new outer iteration begins. Since every new client gets a unique ClientID,
but we reuse usernames and UIDs, the server may let a user in (as the UID matches, which is fine),
but the test might then fail due to a ClientID mismatch:
server_test.go:232: CurrentUser(Initial): got &{S-1-5-21-1-0-0-1001 User-4 <nil> Client-2 false false};
want &{S-1-5-21-1-0-0-1001 User-4 <nil> Client-114 false false}

In this PR, we update (*testIPNServer).blockWhileInUse to check whether the server is currently busy
and wait until it frees up. We then call blockWhileInUse at the end of each outer iteration so that the server
is always in a known idle state at the beginning of the inner loop. We also check that the current user
is not set when the server is idle.

Updates tailscale/corp#25804
Updates #14655 (found when working on it)

Signed-off-by: Nick Khyl <nickk@tailscale.com>
1 year ago
..
conffile ipn/conffile: don't depend on hujson on iOS/Android 1 year ago
ipnauth ipn/{ipnauth,ipnlocal,ipnserver}, client/tailscale: make ipnserver.Server testable 1 year ago
ipnlocal ipn/ipnlocal: re-advertise appc routes on startup (#14609) 1 year ago
ipnserver ipn/ipnserver: fix TestConcurrentOSUserSwitchingOnWindows 1 year ago
ipnstate all: illumos/solaris userspace only support 1 year ago
localapi util/uniq,types/lazy,*: delete code that's now in Go std 1 year ago
policy ipn,tailconfig: clean up unreleased and removed app connector service 2 years ago
store kube/{kubeapi,kubeclient},ipn/store/kubestore,cmd/{containerboot,k8s-operator}: emit kube store Events (#14112) 1 year ago
backend.go ipn: declare NotifyWatchOpt consts without using iota 1 year ago
conf.go ipn/conf.go: add VIPServices to tailscaled configfile (#14345) 1 year ago
doc.go IPN: Update ServeConfig to accept configuration for Services. 1 year ago
ipn_clone.go IPN: Update ServeConfig to accept configuration for Services. 1 year ago
ipn_test.go all: do not depend on the testing package 2 years ago
ipn_view.go cmd/viewer,all: consistently use "read-only" instead of "readonly" 1 year ago
prefs.go cmd/tailscale,ipn,tailcfg: add `tailscale advertise` subcommand behind envknob (#13734) 1 year ago
prefs_test.go cmd/tailscale,ipn,tailcfg: add `tailscale advertise` subcommand behind envknob (#13734) 1 year ago
serve.go ipn/ipnlocal: connect serve config to c2n endpoint 1 year ago
serve_test.go cmd/serve: don't convert localhost to 127.0.0.1 2 years ago
store.go ipn: add comment about thread-safety to StateStore 2 years ago
store_test.go ipn: avoid useless no-op WriteState calls 2 years ago