nettest, *: add option to run HTTP tests with in-memory network

To avoid ephemeral port / TIME_WAIT exhaustion with high --count
values, and to eventually detect leaked connections in tests. (Later
the memory network will register a Cleanup on the TB to verify that
everything's been shut down)

Updates tailscale/corp#27636

Change-Id: Id06f1ae750d8719c5a75d871654574a8226d2733
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2025-04-06 08:10:55 -07:00
committed by Brad Fitzpatrick
parent 6d117d64a2
commit c76d075472
6 changed files with 237 additions and 11 deletions

View File

@@ -10,7 +10,6 @@ import (
"io"
"math"
"net/http"
"net/http/httptest"
"testing"
"time"
@@ -20,6 +19,7 @@ import (
"tailscale.com/net/netmon"
"tailscale.com/net/tsdial"
"tailscale.com/tailcfg"
"tailscale.com/tstest/nettest"
"tailscale.com/types/key"
"tailscale.com/types/logger"
)
@@ -178,7 +178,8 @@ func (tt noiseClientTest) run(t *testing.T) {
const msg = "Hello, client"
h2 := &http2.Server{}
hs := httptest.NewServer(&Upgrader{
nw := nettest.GetNetwork(t)
hs := nettest.NewHTTPServer(nw, &Upgrader{
h2srv: h2,
noiseKeyPriv: serverPrivate,
sendEarlyPayload: tt.sendEarlyPayload,
@@ -193,6 +194,10 @@ func (tt noiseClientTest) run(t *testing.T) {
defer hs.Close()
dialer := tsdial.NewDialer(netmon.NewStatic())
if nettest.PreferMemNetwork() {
dialer.SetSystemDialerForTest(nw.Dial)
}
nc, err := NewNoiseClient(NoiseOpts{
PrivKey: clientPrivate,
ServerPubKey: serverPrivate.Public(),