@@ -23,6 +23,43 @@ fn stateless_retry() {
23
23
assert_eq ! ( pair. server. known_cids( ) , 0 ) ;
24
24
}
25
25
26
+ #[ test]
27
+ fn retry_token_expired ( ) {
28
+ let _guard = subscribe ( ) ;
29
+
30
+ let fake_time = Arc :: new ( FakeTimeSource :: new ( ) ) ;
31
+ let retry_token_lifetime = Duration :: from_secs ( 1 ) ;
32
+
33
+ let mut pair = Pair :: default ( ) ;
34
+ pair. server . handle_incoming = Box :: new ( validate_incoming) ;
35
+
36
+ let mut config = server_config ( ) ;
37
+ config
38
+ . time_source ( Arc :: clone ( & fake_time) as _ )
39
+ . retry_token_lifetime ( retry_token_lifetime) ;
40
+ pair. server . set_server_config ( Some ( Arc :: new ( config) ) ) ;
41
+
42
+ let client_ch = pair. begin_connect ( client_config ( ) ) ;
43
+ pair. drive_client ( ) ;
44
+ pair. drive_server ( ) ;
45
+ pair. drive_client ( ) ;
46
+
47
+ // to expire retry token
48
+ fake_time. advance ( retry_token_lifetime + Duration :: from_millis ( 1 ) ) ;
49
+
50
+ pair. drive ( ) ;
51
+ assert_matches ! (
52
+ pair. client_conn_mut( client_ch) . poll( ) ,
53
+ Some ( Event :: ConnectionLost { reason: ConnectionError :: ConnectionClosed ( err) } )
54
+ if err. error_code == TransportErrorCode :: INVALID_TOKEN
55
+ ) ;
56
+
57
+ assert_eq ! ( pair. client. known_connections( ) , 0 ) ;
58
+ assert_eq ! ( pair. client. known_cids( ) , 0 ) ;
59
+ assert_eq ! ( pair. server. known_connections( ) , 0 ) ;
60
+ assert_eq ! ( pair. server. known_cids( ) , 0 ) ;
61
+ }
62
+
26
63
#[ test]
27
64
fn use_token ( ) {
28
65
let _guard = subscribe ( ) ;
0 commit comments