mirror of
https://github.com/coder/coder.git
synced 2025-07-09 11:45:56 +00:00
fix: Avoid logging to stdout in devtunnel test (#3194)
The device keeps logging to the logger even after `dev.Close()` but doing that with `t.Log` is unsafe (test has ended). This is why `slogtest` was used. `dev.Close()` has a wait on encryption and decryption routines, however, these are left running even after the wait. The implementation uses the WaitGroups in a weird way.
This commit is contained in:
committed by
GitHub
parent
9bf5537b0f
commit
f34b5000cb
@ -73,8 +73,8 @@ func TestTunnel(t *testing.T) {
|
|||||||
err := server.Serve(tun.Listener)
|
err := server.Serve(tun.Listener)
|
||||||
assert.Equal(t, http.ErrServerClosed, err)
|
assert.Equal(t, http.ErrServerClosed, err)
|
||||||
}()
|
}()
|
||||||
t.Cleanup(func() { _ = server.Close() })
|
defer func() { _ = server.Close() }()
|
||||||
t.Cleanup(func() { tun.Listener.Close() })
|
defer func() { tun.Listener.Close() }()
|
||||||
|
|
||||||
require.Eventually(t, func() bool {
|
require.Eventually(t, func() bool {
|
||||||
res, err := fTunServer.requestHTTP()
|
res, err := fTunServer.requestHTTP()
|
||||||
@ -116,9 +116,11 @@ type fakeTunnelServer struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newFakeTunnelServer(t *testing.T) *fakeTunnelServer {
|
func newFakeTunnelServer(t *testing.T) *fakeTunnelServer {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
priv, err := wgtypes.GeneratePrivateKey()
|
priv, err := wgtypes.GeneratePrivateKey()
|
||||||
privBytes := [32]byte(priv)
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
privBytes := [32]byte(priv)
|
||||||
pub := priv.PublicKey()
|
pub := priv.PublicKey()
|
||||||
pubBytes := [32]byte(pub)
|
pubBytes := [32]byte(pub)
|
||||||
tun, tnet, err := netstack.CreateNetTUN(
|
tun, tnet, err := netstack.CreateNetTUN(
|
||||||
@ -127,17 +129,25 @@ func newFakeTunnelServer(t *testing.T) *fakeTunnelServer {
|
|||||||
1280,
|
1280,
|
||||||
)
|
)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, "server "))
|
|
||||||
|
ctx := context.Background()
|
||||||
|
slogger := slogtest.Make(t, nil).Leveled(slog.LevelDebug).Named("server")
|
||||||
|
logger := &device.Logger{
|
||||||
|
Verbosef: slog.Stdlib(ctx, slogger, slog.LevelDebug).Printf,
|
||||||
|
Errorf: slog.Stdlib(ctx, slogger, slog.LevelError).Printf,
|
||||||
|
}
|
||||||
|
dev := device.NewDevice(tun, conn.NewDefaultBind(), logger)
|
||||||
|
t.Cleanup(func() {
|
||||||
|
dev.RemoveAllPeers()
|
||||||
|
dev.Close()
|
||||||
|
slogger.Debug(ctx, "dev.Close()")
|
||||||
|
})
|
||||||
err = dev.IpcSet(fmt.Sprintf(`private_key=%s
|
err = dev.IpcSet(fmt.Sprintf(`private_key=%s
|
||||||
listen_port=%d`,
|
listen_port=%d`,
|
||||||
hex.EncodeToString(privBytes[:]),
|
hex.EncodeToString(privBytes[:]),
|
||||||
wgPort,
|
wgPort,
|
||||||
))
|
))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
t.Cleanup(func() {
|
|
||||||
dev.RemoveAllPeers()
|
|
||||||
dev.Close()
|
|
||||||
})
|
|
||||||
|
|
||||||
err = dev.Up()
|
err = dev.Up()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
Reference in New Issue
Block a user