mirror of
https://github.com/tailscale/tailscale.git
synced 2025-01-08 09:07:44 +00:00
controlclient tests: fix more memory leaks and add resource checking.
I can now run these tests with -count=1000 without running out of RAM. Signed-off-by: Avery Pennarun <apenwarr@tailscale.com>
This commit is contained in:
parent
d03de31404
commit
c5fcc38bf1
@ -1148,7 +1148,11 @@ func (s *server) newClientWithKey(t *testing.T, name, authKey string) *client {
|
|||||||
},
|
},
|
||||||
Hostinfo: hi,
|
Hostinfo: hi,
|
||||||
NewDecompressor: func() (Decompressor, error) {
|
NewDecompressor: func() (Decompressor, error) {
|
||||||
return zstd.NewReader(nil)
|
return zstd.NewReader(nil,
|
||||||
|
zstd.WithDecoderLowmem(true),
|
||||||
|
zstd.WithDecoderConcurrency(1),
|
||||||
|
zstd.WithDecoderMaxMemory(65536),
|
||||||
|
)
|
||||||
},
|
},
|
||||||
KeepAlive: true,
|
KeepAlive: true,
|
||||||
AuthKey: authKey,
|
AuthKey: authKey,
|
||||||
|
@ -654,7 +654,6 @@ func (c *Direct) decodeMsg(msg []byte, v interface{}) error {
|
|||||||
if c.newDecompressor == nil {
|
if c.newDecompressor == nil {
|
||||||
b = decrypted
|
b = decrypted
|
||||||
} else {
|
} else {
|
||||||
//decoder, err := zstd.NewReader(nil)
|
|
||||||
decoder, err := c.newDecompressor()
|
decoder, err := c.newDecompressor()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -19,12 +19,18 @@
|
|||||||
"github.com/klauspost/compress/zstd"
|
"github.com/klauspost/compress/zstd"
|
||||||
"github.com/tailscale/wireguard-go/wgcfg"
|
"github.com/tailscale/wireguard-go/wgcfg"
|
||||||
"tailscale.com/tailcfg"
|
"tailscale.com/tailcfg"
|
||||||
|
"tailscale.com/tstest"
|
||||||
|
"tailscale.com/types/logger"
|
||||||
"tailscale.io/control" // not yet released
|
"tailscale.io/control" // not yet released
|
||||||
)
|
)
|
||||||
|
|
||||||
// Test that when there are two controlclient connections using the
|
// Test that when there are two controlclient connections using the
|
||||||
// same credentials, the later one disconnects the earlier one.
|
// same credentials, the later one disconnects the earlier one.
|
||||||
func TestClientsReusingKeys(t *testing.T) {
|
func TestDirectReusingKeys(t *testing.T) {
|
||||||
|
tstest.PanicOnLog()
|
||||||
|
rc := tstest.NewResourceCheck()
|
||||||
|
defer rc.Assert(t)
|
||||||
|
|
||||||
tmpdir, err := ioutil.TempDir("", "control-test-")
|
tmpdir, err := ioutil.TempDir("", "control-test-")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@ -33,6 +39,7 @@ func TestClientsReusingKeys(t *testing.T) {
|
|||||||
httpsrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
httpsrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
server.ServeHTTP(w, r)
|
server.ServeHTTP(w, r)
|
||||||
}))
|
}))
|
||||||
|
httpsrv.Config.ErrorLog = logger.StdLogger(t.Logf)
|
||||||
defer func() {
|
defer func() {
|
||||||
httpsrv.CloseClientConnections()
|
httpsrv.CloseClientConnections()
|
||||||
httpsrv.Close()
|
httpsrv.Close()
|
||||||
@ -50,6 +57,7 @@ func TestClientsReusingKeys(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
server.QuietLogging = true
|
server.QuietLogging = true
|
||||||
|
defer server.Shutdown()
|
||||||
|
|
||||||
hi := NewHostinfo()
|
hi := NewHostinfo()
|
||||||
hi.FrontendLogID = "go-test-only"
|
hi.FrontendLogID = "go-test-only"
|
||||||
@ -112,7 +120,7 @@ func TestClientsReusingKeys(t *testing.T) {
|
|||||||
// update function periodically, then exit once c2 starts its own
|
// update function periodically, then exit once c2 starts its own
|
||||||
// poll below.
|
// poll below.
|
||||||
gotNetmap := make(chan struct{}, 1)
|
gotNetmap := make(chan struct{}, 1)
|
||||||
pollErrCh := make(chan error)
|
pollErrCh := make(chan error, 1)
|
||||||
go func() {
|
go func() {
|
||||||
pollErrCh <- c1.PollNetMap(ctx, -1, func(netMap *NetworkMap) {
|
pollErrCh <- c1.PollNetMap(ctx, -1, func(netMap *NetworkMap) {
|
||||||
select {
|
select {
|
||||||
@ -143,7 +151,11 @@ func TestClientsReusingKeys(t *testing.T) {
|
|||||||
Persist: c1.GetPersist(),
|
Persist: c1.GetPersist(),
|
||||||
Hostinfo: hi,
|
Hostinfo: hi,
|
||||||
NewDecompressor: func() (Decompressor, error) {
|
NewDecompressor: func() (Decompressor, error) {
|
||||||
return zstd.NewReader(nil)
|
return zstd.NewReader(nil,
|
||||||
|
zstd.WithDecoderLowmem(true),
|
||||||
|
zstd.WithDecoderConcurrency(1),
|
||||||
|
zstd.WithDecoderMaxMemory(65536),
|
||||||
|
)
|
||||||
},
|
},
|
||||||
KeepAlive: true,
|
KeepAlive: true,
|
||||||
})
|
})
|
||||||
@ -177,7 +189,11 @@ func TestClientsReusingKeys(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestClientsReusingOldKey(t *testing.T) {
|
func TestDirectReusingOldKey(t *testing.T) {
|
||||||
|
tstest.PanicOnLog()
|
||||||
|
rc := tstest.NewResourceCheck()
|
||||||
|
defer rc.Assert(t)
|
||||||
|
|
||||||
tmpdir, err := ioutil.TempDir("", "control-test-")
|
tmpdir, err := ioutil.TempDir("", "control-test-")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@ -186,22 +202,26 @@ func TestClientsReusingOldKey(t *testing.T) {
|
|||||||
httpsrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
httpsrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
server.ServeHTTP(w, r)
|
server.ServeHTTP(w, r)
|
||||||
}))
|
}))
|
||||||
httpc := httpsrv.Client()
|
httpsrv.Config.ErrorLog = logger.StdLogger(t.Logf)
|
||||||
httpc.Jar, err = cookiejar.New(nil)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
server, err = control.New(tmpdir, tmpdir, tmpdir, httpsrv.URL, true, t.Logf)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
server.QuietLogging = true
|
|
||||||
defer func() {
|
defer func() {
|
||||||
httpsrv.CloseClientConnections()
|
httpsrv.CloseClientConnections()
|
||||||
httpsrv.Close()
|
httpsrv.Close()
|
||||||
os.RemoveAll(tmpdir)
|
os.RemoveAll(tmpdir)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
httpc := httpsrv.Client()
|
||||||
|
httpc.Jar, err = cookiejar.New(nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
server, err = control.New(tmpdir, tmpdir, tmpdir, httpsrv.URL, true, t.Logf)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
server.QuietLogging = true
|
||||||
|
defer server.Shutdown()
|
||||||
|
|
||||||
hi := NewHostinfo()
|
hi := NewHostinfo()
|
||||||
hi.FrontendLogID = "go-test-only"
|
hi.FrontendLogID = "go-test-only"
|
||||||
hi.BackendLogID = "go-test-only"
|
hi.BackendLogID = "go-test-only"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user