@@ -2425,6 +2425,7 @@ mod test {
2425
2425
{
2426
2426
socket. cx . set_now ( timestamp) ;
2427
2427
2428
+ let mut sent = 0 ;
2428
2429
let result = socket
2429
2430
. socket
2430
2431
. dispatch ( & mut socket. cx , |_, ( ip_repr, tcp_repr) | {
@@ -2434,14 +2435,27 @@ mod test {
2434
2435
assert_eq ! ( ip_repr. payload_len( ) , tcp_repr. buffer_len( ) ) ;
2435
2436
2436
2437
net_trace ! ( "recv: {}" , tcp_repr) ;
2438
+ sent += 1 ;
2437
2439
Ok ( f ( Ok ( tcp_repr) ) )
2438
2440
} ) ;
2439
2441
match result {
2440
- Ok ( ( ) ) => ( ) ,
2442
+ Ok ( ( ) ) => assert_eq ! ( sent , 1 , "Exactly one packet should be sent" ) ,
2441
2443
Err ( e) => f ( Err ( e) ) ,
2442
2444
}
2443
2445
}
2444
2446
2447
+ fn recv_nothing ( socket : & mut TestSocket , timestamp : Instant ) {
2448
+ socket. cx . set_now ( timestamp) ;
2449
+
2450
+ let result: Result < ( ) , ( ) > = socket
2451
+ . socket
2452
+ . dispatch ( & mut socket. cx , |_, ( _ip_repr, _tcp_repr) | {
2453
+ panic ! ( "Should not send a packet" )
2454
+ } ) ;
2455
+
2456
+ assert_eq ! ( result, Ok ( ( ) ) )
2457
+ }
2458
+
2445
2459
macro_rules! send {
2446
2460
( $socket: ident, $repr: expr) =>
2447
2461
( send!( $socket, time 0 , $repr) ) ;
@@ -2456,7 +2470,7 @@ mod test {
2456
2470
macro_rules! recv {
2457
2471
( $socket: ident, [ $( $repr: expr ) ,* ] ) => ( {
2458
2472
$( recv!( $socket, Ok ( $repr) ) ; ) *
2459
- recv !( $socket, Err ( Error :: Exhausted ) )
2473
+ recv_nothing !( $socket)
2460
2474
} ) ;
2461
2475
( $socket: ident, $result: expr) =>
2462
2476
( recv!( $socket, time 0 , $result) ) ;
@@ -2473,6 +2487,11 @@ mod test {
2473
2487
( recv( & mut $socket, Instant :: from_millis( $time) , |repr| assert_eq!( repr, $result) ) ) ;
2474
2488
}
2475
2489
2490
+ macro_rules! recv_nothing {
2491
+ ( $socket: ident) => ( recv_nothing!( $socket, time 0 ) ) ;
2492
+ ( $socket: ident, time $time: expr) => ( recv_nothing( & mut $socket, Instant :: from_millis( $time) ) ) ;
2493
+ }
2494
+
2476
2495
macro_rules! sanity {
2477
2496
( $socket1: expr, $socket2: expr) => { {
2478
2497
let ( s1, s2) = ( $socket1, $socket2) ;
@@ -3201,7 +3220,7 @@ mod test {
3201
3220
..RECV_TEMPL
3202
3221
} ]
3203
3222
) ;
3204
- recv ! ( s, time 1000 , Err ( Error :: Exhausted ) ) ;
3223
+ recv_nothing ! ( s, time 1000 ) ;
3205
3224
assert_eq ! ( s. state, State :: Established ) ;
3206
3225
sanity ! ( s, socket_established( ) ) ;
3207
3226
}
@@ -4376,7 +4395,7 @@ mod test {
4376
4395
} ]
4377
4396
) ;
4378
4397
assert_eq ! ( s. state, State :: TimeWait ) ;
4379
- recv ! ( s, time 60_000 , Err ( Error :: Exhausted ) ) ;
4398
+ recv_nothing ! ( s, time 60_000 ) ;
4380
4399
assert_eq ! ( s. state, State :: Closed ) ;
4381
4400
}
4382
4401
@@ -4910,7 +4929,7 @@ mod test {
4910
4929
payload: & b"abcdef" [ ..] ,
4911
4930
..RECV_TEMPL
4912
4931
} ) ) ;
4913
- recv ! ( s, time 1050 , Err ( Error :: Exhausted ) ) ;
4932
+ recv_nothing ! ( s, time 1050 ) ;
4914
4933
recv ! ( s, time 2000 , Ok ( TcpRepr {
4915
4934
seq_number: LOCAL_SEQ + 1 ,
4916
4935
ack_number: Some ( REMOTE_SEQ + 1 ) ,
@@ -4939,9 +4958,9 @@ mod test {
4939
4958
payload: & b"012345" [ ..] ,
4940
4959
..RECV_TEMPL
4941
4960
} ) , exact) ;
4942
- recv ! ( s, time 0 , Err ( Error :: Exhausted ) ) ;
4961
+ recv_nothing ! ( s, time 0 ) ;
4943
4962
4944
- recv ! ( s, time 50 , Err ( Error :: Exhausted ) ) ;
4963
+ recv_nothing ! ( s, time 50 ) ;
4945
4964
4946
4965
recv ! ( s, time 1000 , Ok ( TcpRepr {
4947
4966
control: TcpControl :: None ,
@@ -4957,7 +4976,7 @@ mod test {
4957
4976
payload: & b"012345" [ ..] ,
4958
4977
..RECV_TEMPL
4959
4978
} ) , exact) ;
4960
- recv ! ( s, time 1550 , Err ( Error :: Exhausted ) ) ;
4979
+ recv_nothing ! ( s, time 1550 ) ;
4961
4980
}
4962
4981
4963
4982
#[ test]
@@ -5534,7 +5553,7 @@ mod test {
5534
5553
5535
5554
// even though we're in "fast retransmit", we shouldn't
5536
5555
// force-send anything because the remote's window is full.
5537
- recv ! ( s, Err ( Error :: Exhausted ) ) ;
5556
+ recv_nothing ! ( s) ;
5538
5557
}
5539
5558
5540
5559
// =========================================================================================//
@@ -5616,7 +5635,7 @@ mod test {
5616
5635
assert_eq ! ( s. recv_slice( rx_buf) , Ok ( 4 ) ) ;
5617
5636
5618
5637
// check that we do NOT send a window update even if it has changed.
5619
- recv ! ( s, Err ( Error :: Exhausted ) ) ;
5638
+ recv_nothing ! ( s) ;
5620
5639
}
5621
5640
5622
5641
#[ test]
@@ -5649,7 +5668,7 @@ mod test {
5649
5668
assert_eq ! ( s. recv_slice( rx_buf) , Ok ( 4 ) ) ;
5650
5669
5651
5670
// check that we do NOT send a window update even if it has changed.
5652
- recv ! ( s, Err ( Error :: Exhausted ) ) ;
5671
+ recv_nothing ! ( s) ;
5653
5672
}
5654
5673
5655
5674
// =========================================================================================//
@@ -5765,7 +5784,7 @@ mod test {
5765
5784
..RECV_TEMPL
5766
5785
} ]
5767
5786
) ;
5768
- recv ! ( s, time 0 , Err ( Error :: Exhausted ) ) ;
5787
+ recv_nothing ! ( s, time 0 ) ;
5769
5788
s. recv ( |buffer| {
5770
5789
assert_eq ! ( & buffer[ ..3 ] , b"abc" ) ;
5771
5790
( 3 , ( ) )
@@ -5777,7 +5796,7 @@ mod test {
5777
5796
window_len: 3 ,
5778
5797
..RECV_TEMPL
5779
5798
} ) ) ;
5780
- recv ! ( s, time 0 , Err ( Error :: Exhausted ) ) ;
5799
+ recv_nothing ! ( s, time 0 ) ;
5781
5800
s. recv ( |buffer| {
5782
5801
assert_eq ! ( buffer, b"def" ) ;
5783
5802
( buffer. len ( ) , ( ) )
@@ -5941,7 +5960,7 @@ mod test {
5941
5960
fn test_established_timeout ( ) {
5942
5961
let mut s = socket_established ( ) ;
5943
5962
s. set_timeout ( Some ( Duration :: from_millis ( 1000 ) ) ) ;
5944
- recv ! ( s, time 250 , Err ( Error :: Exhausted ) ) ;
5963
+ recv_nothing ! ( s, time 250 ) ;
5945
5964
assert_eq ! (
5946
5965
s. socket. poll_at( & mut s. cx) ,
5947
5966
PollAt :: Time ( Instant :: from_millis( 1250 ) )
@@ -5988,7 +6007,7 @@ mod test {
5988
6007
payload: & [ 0 ] ,
5989
6008
..RECV_TEMPL
5990
6009
} ) ) ;
5991
- recv ! ( s, time 100 , Err ( Error :: Exhausted ) ) ;
6010
+ recv_nothing ! ( s, time 100 ) ;
5992
6011
assert_eq ! (
5993
6012
s. socket. poll_at( & mut s. cx) ,
5994
6013
PollAt :: Time ( Instant :: from_millis( 150 ) )
@@ -6008,19 +6027,19 @@ mod test {
6008
6027
payload: & [ 0 ] ,
6009
6028
..RECV_TEMPL
6010
6029
} ) ) ;
6011
- recv ! ( s, time 155 , Err ( Error :: Exhausted ) ) ;
6030
+ recv_nothing ! ( s, time 155 ) ;
6012
6031
assert_eq ! (
6013
6032
s. socket. poll_at( & mut s. cx) ,
6014
6033
PollAt :: Time ( Instant :: from_millis( 205 ) )
6015
6034
) ;
6016
- recv ! ( s, time 200 , Err ( Error :: Exhausted ) ) ;
6035
+ recv_nothing ! ( s, time 200 ) ;
6017
6036
recv ! ( s, time 205 , Ok ( TcpRepr {
6018
6037
control: TcpControl :: Rst ,
6019
6038
seq_number: LOCAL_SEQ + 1 ,
6020
6039
ack_number: Some ( REMOTE_SEQ + 1 ) ,
6021
6040
..RECV_TEMPL
6022
6041
} ) ) ;
6023
- recv ! ( s, time 205 , Err ( Error :: Exhausted ) ) ;
6042
+ recv_nothing ! ( s, time 205 ) ;
6024
6043
assert_eq ! ( s. state, State :: Closed ) ;
6025
6044
}
6026
6045
@@ -6118,7 +6137,7 @@ mod test {
6118
6137
s. socket. poll_at( & mut s. cx) ,
6119
6138
PollAt :: Time ( Instant :: from_millis( 100 ) )
6120
6139
) ;
6121
- recv ! ( s, time 95 , Err ( Error :: Exhausted ) ) ;
6140
+ recv_nothing ! ( s, time 95 ) ;
6122
6141
recv ! ( s, time 100 , Ok ( TcpRepr {
6123
6142
seq_number: LOCAL_SEQ ,
6124
6143
ack_number: Some ( REMOTE_SEQ + 1 ) ,
@@ -6130,7 +6149,7 @@ mod test {
6130
6149
s. socket. poll_at( & mut s. cx) ,
6131
6150
PollAt :: Time ( Instant :: from_millis( 200 ) )
6132
6151
) ;
6133
- recv ! ( s, time 195 , Err ( Error :: Exhausted ) ) ;
6152
+ recv_nothing ! ( s, time 195 ) ;
6134
6153
recv ! ( s, time 200 , Ok ( TcpRepr {
6135
6154
seq_number: LOCAL_SEQ ,
6136
6155
ack_number: Some ( REMOTE_SEQ + 1 ) ,
@@ -6147,7 +6166,7 @@ mod test {
6147
6166
s. socket. poll_at( & mut s. cx) ,
6148
6167
PollAt :: Time ( Instant :: from_millis( 350 ) )
6149
6168
) ;
6150
- recv ! ( s, time 345 , Err ( Error :: Exhausted ) ) ;
6169
+ recv_nothing ! ( s, time 345 ) ;
6151
6170
recv ! ( s, time 350 , Ok ( TcpRepr {
6152
6171
seq_number: LOCAL_SEQ ,
6153
6172
ack_number: Some ( REMOTE_SEQ + 1 ) ,
@@ -6512,7 +6531,7 @@ mod test {
6512
6531
) ;
6513
6532
6514
6533
// No ACK is immediately sent.
6515
- recv ! ( s, Err ( Error :: Exhausted ) ) ;
6534
+ recv_nothing ! ( s) ;
6516
6535
6517
6536
// After 10ms, it is sent.
6518
6537
recv ! ( s, time 11 , Ok ( TcpRepr {
@@ -6545,7 +6564,7 @@ mod test {
6545
6564
. unwrap ( ) ;
6546
6565
6547
6566
// However, no ACK or window update is immediately sent.
6548
- recv ! ( s, Err ( Error :: Exhausted ) ) ;
6567
+ recv_nothing ! ( s) ;
6549
6568
6550
6569
// After 10ms, it is sent.
6551
6570
recv ! ( s, time 11 , Ok ( TcpRepr {
@@ -6605,7 +6624,7 @@ mod test {
6605
6624
) ;
6606
6625
6607
6626
// No ACK is immediately sent.
6608
- recv ! ( s, Err ( Error :: Exhausted ) ) ;
6627
+ recv_nothing ! ( s) ;
6609
6628
6610
6629
send ! (
6611
6630
s,
@@ -6644,7 +6663,7 @@ mod test {
6644
6663
) ;
6645
6664
6646
6665
// No ACK is immediately sent.
6647
- recv ! ( s, Err ( Error :: Exhausted ) ) ;
6666
+ recv_nothing ! ( s) ;
6648
6667
6649
6668
send ! (
6650
6669
s,
0 commit comments