@@ -3,6 +3,7 @@ package libp2pwebrtc
3
3
import (
4
4
"crypto/rand"
5
5
"errors"
6
+ "fmt"
6
7
"io"
7
8
"os"
8
9
"sync/atomic"
@@ -148,8 +149,8 @@ func TestStreamSimpleReadWriteClose(t *testing.T) {
148
149
client , server := getDetachedDataChannels (t )
149
150
150
151
var clientDone , serverDone atomic.Bool
151
- clientStr := newStream (client .dc , client .rwc , func () { clientDone .Store (true ) })
152
- serverStr := newStream (server .dc , server .rwc , func () { serverDone .Store (true ) })
152
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () { clientDone .Store (true ) })
153
+ serverStr := newStream (server .dc , server .rwc , maxSendMessageSize , func () { serverDone .Store (true ) })
153
154
154
155
// send a foobar from the client
155
156
n , err := clientStr .Write ([]byte ("foobar" ))
@@ -194,8 +195,8 @@ func TestStreamSimpleReadWriteClose(t *testing.T) {
194
195
func TestStreamPartialReads (t * testing.T ) {
195
196
client , server := getDetachedDataChannels (t )
196
197
197
- clientStr := newStream (client .dc , client .rwc , func () {})
198
- serverStr := newStream (server .dc , server .rwc , func () {})
198
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () {})
199
+ serverStr := newStream (server .dc , server .rwc , maxSendMessageSize , func () {})
199
200
200
201
_ , err := serverStr .Write ([]byte ("foobar" ))
201
202
require .NoError (t , err )
@@ -217,8 +218,8 @@ func TestStreamPartialReads(t *testing.T) {
217
218
func TestStreamSkipEmptyFrames (t * testing.T ) {
218
219
client , server := getDetachedDataChannels (t )
219
220
220
- clientStr := newStream (client .dc , client .rwc , func () {})
221
- serverStr := newStream (server .dc , server .rwc , func () {})
221
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () {})
222
+ serverStr := newStream (server .dc , server .rwc , maxSendMessageSize , func () {})
222
223
223
224
for i := 0 ; i < 10 ; i ++ {
224
225
require .NoError (t , serverStr .writer .WriteMsg (& pb.Message {}))
@@ -252,7 +253,7 @@ func TestStreamSkipEmptyFrames(t *testing.T) {
252
253
func TestStreamReadReturnsOnClose (t * testing.T ) {
253
254
client , _ := getDetachedDataChannels (t )
254
255
255
- clientStr := newStream (client .dc , client .rwc , func () {})
256
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () {})
256
257
errChan := make (chan error , 1 )
257
258
go func () {
258
259
_ , err := clientStr .Read ([]byte {0 })
@@ -275,8 +276,8 @@ func TestStreamResets(t *testing.T) {
275
276
client , server := getDetachedDataChannels (t )
276
277
277
278
var clientDone , serverDone atomic.Bool
278
- clientStr := newStream (client .dc , client .rwc , func () { clientDone .Store (true ) })
279
- serverStr := newStream (server .dc , server .rwc , func () { serverDone .Store (true ) })
279
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () { clientDone .Store (true ) })
280
+ serverStr := newStream (server .dc , server .rwc , maxSendMessageSize , func () { serverDone .Store (true ) })
280
281
281
282
// send a foobar from the client
282
283
_ , err := clientStr .Write ([]byte ("foobar" ))
@@ -311,8 +312,8 @@ func TestStreamResets(t *testing.T) {
311
312
func TestStreamReadDeadlineAsync (t * testing.T ) {
312
313
client , server := getDetachedDataChannels (t )
313
314
314
- clientStr := newStream (client .dc , client .rwc , func () {})
315
- serverStr := newStream (server .dc , server .rwc , func () {})
315
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () {})
316
+ serverStr := newStream (server .dc , server .rwc , maxSendMessageSize , func () {})
316
317
317
318
timeout := 100 * time .Millisecond
318
319
if os .Getenv ("CI" ) != "" {
@@ -342,8 +343,8 @@ func TestStreamReadDeadlineAsync(t *testing.T) {
342
343
func TestStreamWriteDeadlineAsync (t * testing.T ) {
343
344
client , server := getDetachedDataChannels (t )
344
345
345
- clientStr := newStream (client .dc , client .rwc , func () {})
346
- serverStr := newStream (server .dc , server .rwc , func () {})
346
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () {})
347
+ serverStr := newStream (server .dc , server .rwc , maxSendMessageSize , func () {})
347
348
_ = serverStr
348
349
349
350
b := make ([]byte , 1024 )
@@ -372,8 +373,8 @@ func TestStreamWriteDeadlineAsync(t *testing.T) {
372
373
func TestStreamReadAfterClose (t * testing.T ) {
373
374
client , server := getDetachedDataChannels (t )
374
375
375
- clientStr := newStream (client .dc , client .rwc , func () {})
376
- serverStr := newStream (server .dc , server .rwc , func () {})
376
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () {})
377
+ serverStr := newStream (server .dc , server .rwc , maxSendMessageSize , func () {})
377
378
378
379
serverStr .Close ()
379
380
b := make ([]byte , 1 )
@@ -384,8 +385,8 @@ func TestStreamReadAfterClose(t *testing.T) {
384
385
385
386
client , server = getDetachedDataChannels (t )
386
387
387
- clientStr = newStream (client .dc , client .rwc , func () {})
388
- serverStr = newStream (server .dc , server .rwc , func () {})
388
+ clientStr = newStream (client .dc , client .rwc , maxSendMessageSize , func () {})
389
+ serverStr = newStream (server .dc , server .rwc , maxSendMessageSize , func () {})
389
390
390
391
serverStr .Reset ()
391
392
b = make ([]byte , 1 )
@@ -399,8 +400,8 @@ func TestStreamCloseAfterFINACK(t *testing.T) {
399
400
client , server := getDetachedDataChannels (t )
400
401
401
402
done := make (chan bool , 1 )
402
- clientStr := newStream (client .dc , client .rwc , func () { done <- true })
403
- serverStr := newStream (server .dc , server .rwc , func () {})
403
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () { done <- true })
404
+ serverStr := newStream (server .dc , server .rwc , maxSendMessageSize , func () {})
404
405
405
406
go func () {
406
407
err := clientStr .Close ()
@@ -427,8 +428,8 @@ func TestStreamFinAckAfterStopSending(t *testing.T) {
427
428
client , server := getDetachedDataChannels (t )
428
429
429
430
done := make (chan bool , 1 )
430
- clientStr := newStream (client .dc , client .rwc , func () { done <- true })
431
- serverStr := newStream (server .dc , server .rwc , func () {})
431
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () { done <- true })
432
+ serverStr := newStream (server .dc , server .rwc , maxSendMessageSize , func () {})
432
433
433
434
go func () {
434
435
clientStr .CloseRead ()
@@ -460,8 +461,8 @@ func TestStreamConcurrentClose(t *testing.T) {
460
461
461
462
start := make (chan bool , 2 )
462
463
done := make (chan bool , 2 )
463
- clientStr := newStream (client .dc , client .rwc , func () { done <- true })
464
- serverStr := newStream (server .dc , server .rwc , func () { done <- true })
464
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () { done <- true })
465
+ serverStr := newStream (server .dc , server .rwc , maxSendMessageSize , func () { done <- true })
465
466
466
467
go func () {
467
468
start <- true
@@ -495,7 +496,7 @@ func TestStreamResetAfterClose(t *testing.T) {
495
496
client , server := getDetachedDataChannels (t )
496
497
497
498
done := make (chan bool , 2 )
498
- clientStr := newStream (client .dc , client .rwc , func () { done <- true })
499
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () { done <- true })
499
500
clientStr .Close ()
500
501
501
502
select {
@@ -520,7 +521,7 @@ func TestStreamDataChannelCloseOnFINACK(t *testing.T) {
520
521
client , server := getDetachedDataChannels (t )
521
522
522
523
done := make (chan bool , 1 )
523
- clientStr := newStream (client .dc , client .rwc , func () { done <- true })
524
+ clientStr := newStream (client .dc , client .rwc , maxSendMessageSize , func () { done <- true })
524
525
525
526
clientStr .Close ()
526
527
@@ -540,24 +541,34 @@ func TestStreamDataChannelCloseOnFINACK(t *testing.T) {
540
541
}
541
542
542
543
func TestStreamChunking (t * testing.T ) {
543
- client , server := getDetachedDataChannels (t )
544
-
545
- clientStr := newStream (client .dc , client .rwc , func () {})
546
- serverStr := newStream (server .dc , server .rwc , func () {})
547
-
548
- const N = (16 << 10 ) + 1000
549
- go func () {
550
- data := make ([]byte , N )
551
- _ , err := clientStr .Write (data )
552
- require .NoError (t , err )
553
- }()
554
-
555
- data := make ([]byte , N )
556
- n , err := serverStr .Read (data )
557
- require .NoError (t , err )
558
- require .LessOrEqual (t , n , 16 << 10 )
544
+ for _ , msgSize := range []int {16 << 10 , 32 << 10 , 64 << 10 , 128 << 10 , 256 << 10 } {
545
+ t .Run (fmt .Sprintf ("msgSize=%d" , msgSize ), func (t * testing.T ) {
546
+ client , server := getDetachedDataChannels (t )
547
+ defer client .dc .Close ()
548
+ defer server .dc .Close ()
549
+
550
+ clientStr := newStream (client .dc , client .rwc , msgSize , func () {})
551
+ // server should read large messages even if it can only send 16 kB messages.
552
+ serverStr := newStream (server .dc , server .rwc , 16 << 10 , func () {})
553
+
554
+ N := msgSize + 1000
555
+ input := make ([]byte , N )
556
+ _ , err := rand .Read (input )
557
+ require .NoError (t , err )
558
+ go func () {
559
+ _ , err = clientStr .Write (input )
560
+ require .NoError (t , err )
561
+ }()
559
562
560
- nn , err := serverStr .Read (data )
561
- require .NoError (t , err )
562
- require .Equal (t , nn + n , N )
563
+ data := make ([]byte , N )
564
+ n , err := serverStr .Read (data )
565
+ require .NoError (t , err )
566
+ require .LessOrEqual (t , n , msgSize )
567
+ // shouldn't be much less than msgSize
568
+ require .GreaterOrEqual (t , n , msgSize - 100 )
569
+ _ , err = serverStr .Read (data [n :])
570
+ require .NoError (t , err )
571
+ require .Equal (t , input , data )
572
+ })
573
+ }
563
574
}
0 commit comments