@@ -264,6 +264,116 @@ func TestNewConnSetReadHeaderTimeoutIgnoresNegative(t *testing.T) {
264264 }
265265}
266266
267+ func TestWithBufferSizePositive (t * testing.T ) {
268+ conn , peer := net .Pipe ()
269+ t .Cleanup (func () {
270+ _ = conn .Close ()
271+ _ = peer .Close ()
272+ })
273+
274+ proxyConn := NewConn (conn , WithBufferSize (4096 ))
275+ if proxyConn .bufferSize == nil {
276+ t .Fatalf ("expected bufferSize to be set" )
277+ }
278+ if * proxyConn .bufferSize != 4096 {
279+ t .Fatalf ("expected bufferSize 4096, got %d" , * proxyConn .bufferSize )
280+ }
281+
282+ go func () { _ , _ = peer .Write ([]byte ("x" )) }()
283+ buf := make ([]byte , 1 )
284+ if _ , err := proxyConn .Read (buf ); err != nil {
285+ t .Fatalf ("read failed: %v" , err )
286+ }
287+ if string (buf ) != "x" {
288+ t .Fatalf ("unexpected read: %q" , buf )
289+ }
290+ }
291+
292+ func TestWithBufferSizeZeroOrNegative (t * testing.T ) {
293+ for _ , length := range []int {0 , - 1 } {
294+ t .Run (fmt .Sprint (length ), func (t * testing.T ) {
295+ conn , peer := net .Pipe ()
296+ t .Cleanup (func () {
297+ _ = conn .Close ()
298+ _ = peer .Close ()
299+ })
300+
301+ proxyConn := NewConn (conn , WithBufferSize (length ))
302+ if proxyConn .bufferSize != nil {
303+ t .Fatalf ("expected bufferSize to be nil for length %d" , length )
304+ }
305+
306+ go func () { _ , _ = peer .Write ([]byte ("y" )) }()
307+ buf := make ([]byte , 1 )
308+ if _ , err := proxyConn .Read (buf ); err != nil {
309+ t .Fatalf ("read failed: %v" , err )
310+ }
311+ if string (buf ) != "y" {
312+ t .Fatalf ("unexpected read: %q" , buf )
313+ }
314+ })
315+ }
316+ }
317+
318+ func TestListenerReadBufferSizeApplied (t * testing.T ) {
319+ l , err := net .Listen ("tcp" , testLocalhostRandomPort )
320+ if err != nil {
321+ t .Fatalf ("err: %v" , err )
322+ }
323+ t .Cleanup (func () { _ = l .Close () })
324+
325+ pl := & Listener {Listener : l , ReadBufferSize : 4096 }
326+
327+ go func () {
328+ c , _ := net .Dial ("tcp" , pl .Addr ().String ())
329+ if c != nil {
330+ _ = c .Close ()
331+ }
332+ }()
333+
334+ conn , err := pl .Accept ()
335+ if err != nil {
336+ t .Fatalf ("Accept: %v" , err )
337+ }
338+ t .Cleanup (func () { _ = conn .Close () })
339+
340+ proxyConn := conn .(* Conn )
341+ if proxyConn .bufferSize == nil {
342+ t .Fatalf ("expected bufferSize to be set when Listener.ReadBufferSize > 0" )
343+ }
344+ if * proxyConn .bufferSize != 4096 {
345+ t .Fatalf ("expected bufferSize 4096, got %d" , * proxyConn .bufferSize )
346+ }
347+ }
348+
349+ func TestListenerReadBufferSizeZeroUsesDefault (t * testing.T ) {
350+ l , err := net .Listen ("tcp" , testLocalhostRandomPort )
351+ if err != nil {
352+ t .Fatalf ("err: %v" , err )
353+ }
354+ t .Cleanup (func () { _ = l .Close () })
355+
356+ pl := & Listener {Listener : l , ReadBufferSize : 0 }
357+
358+ go func () {
359+ c , _ := net .Dial ("tcp" , pl .Addr ().String ())
360+ if c != nil {
361+ _ = c .Close ()
362+ }
363+ }()
364+
365+ conn , err := pl .Accept ()
366+ if err != nil {
367+ t .Fatalf ("Accept: %v" , err )
368+ }
369+ t .Cleanup (func () { _ = conn .Close () })
370+
371+ proxyConn := conn .(* Conn )
372+ if proxyConn .bufferSize != nil {
373+ t .Fatalf ("expected bufferSize to be nil when Listener.ReadBufferSize is 0" )
374+ }
375+ }
376+
267377func TestReadHeaderTimeoutRespectsEarlierDeadline (t * testing.T ) {
268378 const (
269379 headerTimeout = 200 * time .Millisecond
0 commit comments