Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f34b500

Browse files
authored
fix: Avoid logging to stdout in devtunnel test (coder#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.
1 parent 9bf5537 commit f34b500

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

coderd/devtunnel/tunnel_test.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ func TestTunnel(t *testing.T) {
7373
err := server.Serve(tun.Listener)
7474
assert.Equal(t, http.ErrServerClosed, err)
7575
}()
76-
t.Cleanup(func() { _ = server.Close() })
77-
t.Cleanup(func() { tun.Listener.Close() })
76+
defer func() { _ = server.Close() }()
77+
defer func() { tun.Listener.Close() }()
7878

7979
require.Eventually(t, func() bool {
8080
res, err := fTunServer.requestHTTP()
@@ -116,9 +116,11 @@ type fakeTunnelServer struct {
116116
}
117117

118118
func newFakeTunnelServer(t *testing.T) *fakeTunnelServer {
119+
t.Helper()
120+
119121
priv, err := wgtypes.GeneratePrivateKey()
120-
privBytes := [32]byte(priv)
121122
require.NoError(t, err)
123+
privBytes := [32]byte(priv)
122124
pub := priv.PublicKey()
123125
pubBytes := [32]byte(pub)
124126
tun, tnet, err := netstack.CreateNetTUN(
@@ -127,17 +129,25 @@ func newFakeTunnelServer(t *testing.T) *fakeTunnelServer {
127129
1280,
128130
)
129131
require.NoError(t, err)
130-
dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, "server "))
132+
133+
ctx := context.Background()
134+
slogger := slogtest.Make(t, nil).Leveled(slog.LevelDebug).Named("server")
135+
logger := &device.Logger{
136+
Verbosef: slog.Stdlib(ctx, slogger, slog.LevelDebug).Printf,
137+
Errorf: slog.Stdlib(ctx, slogger, slog.LevelError).Printf,
138+
}
139+
dev := device.NewDevice(tun, conn.NewDefaultBind(), logger)
140+
t.Cleanup(func() {
141+
dev.RemoveAllPeers()
142+
dev.Close()
143+
slogger.Debug(ctx, "dev.Close()")
144+
})
131145
err = dev.IpcSet(fmt.Sprintf(`private_key=%s
132146
listen_port=%d`,
133147
hex.EncodeToString(privBytes[:]),
134148
wgPort,
135149
))
136150
require.NoError(t, err)
137-
t.Cleanup(func() {
138-
dev.RemoveAllPeers()
139-
dev.Close()
140-
})
141151

142152
err = dev.Up()
143153
require.NoError(t, err)

0 commit comments

Comments
 (0)