mirror of
https://github.com/tailscale/tailscale.git
synced 2025-10-25 18:20:07 +00:00
To keep memory usage as constant as possible, the previous cache purging at periodic time intervals has been replaced by an LRU that discards the oldest string when the capacity of the cache is reached. Also fixed some formatting and commenting issues, and added better testing for the rate limiter. Signed-off-by: Wendi Yu <wendi.yu@yahoo.ca>
82 lines
1.8 KiB
Go
82 lines
1.8 KiB
Go
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package ipnserver_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"tailscale.com/types/logger"
|
|
|
|
"tailscale.com/ipn"
|
|
"tailscale.com/ipn/ipnserver"
|
|
"tailscale.com/safesocket"
|
|
"tailscale.com/wgengine"
|
|
)
|
|
|
|
func TestRunMultipleAccepts(t *testing.T) {
|
|
t.Skipf("TODO(bradfitz): finish this test, once other fires are out")
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
td, err := ioutil.TempDir("", "TestRunMultipleAccepts")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.RemoveAll(td)
|
|
socketPath := filepath.Join(td, "tailscale.sock")
|
|
|
|
ulogf := func(format string, args ...interface{}) {
|
|
format = strings.TrimRight(format, "\n")
|
|
println(fmt.Sprintf(format, args...))
|
|
t.Logf(format, args...)
|
|
}
|
|
|
|
logf := logger.RateLimitedFn(ulogf, 1, 1, 100)
|
|
|
|
connect := func() {
|
|
for i := 1; i <= 2; i++ {
|
|
logf("connect %d ...", i)
|
|
c, err := safesocket.Connect(socketPath, 0)
|
|
if err != nil {
|
|
t.Fatalf("safesocket.Connect: %v\n", err)
|
|
}
|
|
clientToServer := func(b []byte) {
|
|
ipn.WriteMsg(c, b)
|
|
}
|
|
bc := ipn.NewBackendClient(logf, clientToServer)
|
|
prefs := ipn.NewPrefs()
|
|
bc.SetPrefs(prefs)
|
|
c.Close()
|
|
}
|
|
}
|
|
|
|
logTriggerTestf := func(format string, args ...interface{}) {
|
|
logf(format, args...)
|
|
if strings.HasPrefix(format, "Listening on ") {
|
|
connect()
|
|
}
|
|
}
|
|
|
|
eng, err := wgengine.NewFakeUserspaceEngine(logf, 0)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer eng.Close()
|
|
|
|
opts := ipnserver.Options{
|
|
SocketPath: socketPath,
|
|
}
|
|
t.Logf("pre-Run")
|
|
err = ipnserver.Run(ctx, logTriggerTestf, "dummy_logid", opts, eng)
|
|
t.Logf("ipnserver.Run = %v", err)
|
|
}
|