smb: test closing failed dial connections

Followup to:

74f9f182aa smb: fix TCP connection leak when connection setup fails - #9678
This commit is contained in:
Loi Nguyen
2026-08-02 11:53:25 +01:00
committed by GitHub
parent c97ab80ca1
commit 23f1dbfe50
+44 -1
View File
@@ -1,7 +1,50 @@
// Unit tests for internal SMB functions
package smb
import "testing"
import (
"context"
"io"
"net"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestDialClosesConnectionOnSetupError(t *testing.T) {
listener, err := net.Listen("tcp", "127.0.0.1:0")
require.NoError(t, err)
defer func() { require.NoError(t, listener.Close()) }()
type acceptResult struct {
conn net.Conn
err error
}
accepted := make(chan acceptResult, 1)
go func() {
conn, err := listener.Accept()
accepted <- acceptResult{conn: conn, err: err}
}()
f := &Fs{opt: Options{Pass: "invalid"}}
_, err = f.dial(context.Background(), "tcp", listener.Addr().String())
require.Error(t, err)
var result acceptResult
select {
case result = <-accepted:
case <-time.After(time.Second):
t.Fatal("timed out waiting for server to accept connection")
}
require.NoError(t, result.err)
defer func() { require.NoError(t, result.conn.Close()) }()
require.NoError(t, result.conn.SetReadDeadline(time.Now().Add(time.Second)))
buffer := make([]byte, 1)
n, err := result.conn.Read(buffer)
require.Zero(t, n)
require.ErrorIs(t, err, io.EOF)
}
// TestIsPathDir tests the isPathDir function logic
func TestIsPathDir(t *testing.T) {