22// SPDX-License-Identifier: Apache-2.0
33
44use super :: testing:: dcquic:: tcp:: * ;
5+ use crate :: {
6+ path:: secret:: { stateless_reset:: Signer , Map } ,
7+ psk:: { client, server} ,
8+ stream:: { socket:: Protocol , testing:: bind_pair} ,
9+ testing:: { init_tracing, server_name, NoopSubscriber , TestTlsProvider } ,
10+ } ;
11+ use s2n_quic_core:: time:: StdClock ;
12+ use std:: sync:: Arc ;
513
614#[ tokio:: test]
715async fn context_accessible ( ) {
@@ -14,3 +22,94 @@ async fn context_accessible() {
1422 read. query_event_context ( |_: & ( ) | ( ) ) . unwrap ( ) ;
1523 write. query_event_context ( |_: & ( ) | ( ) ) . unwrap ( ) ;
1624}
25+
26+ #[ tokio:: test]
27+ async fn path_application_data_none_by_default ( ) {
28+ let context = Context :: new ( ) . await ;
29+ let ( _client, server) = context. pair ( ) . await ;
30+
31+ // Without a registered make_application_data callback, the server stream
32+ // should have no application_data.
33+ assert ! ( server. path_application_data( ) . is_none( ) ) ;
34+ }
35+
36+ #[ tokio:: test]
37+ async fn path_application_data_available_on_server_stream ( ) {
38+ init_tracing ( ) ;
39+
40+ let tls = TestTlsProvider { } ;
41+ let sub = NoopSubscriber { } ;
42+
43+ // Build server Map with application_data callback
44+ let server_map = Map :: new (
45+ Signer :: new ( b"default" ) ,
46+ 50_000 ,
47+ false ,
48+ StdClock :: default ( ) ,
49+ sub. clone ( ) ,
50+ ) ;
51+ server_map. register_make_application_data ( Box :: new ( |_session| {
52+ let data: Arc < dyn std:: any:: Any + Send + Sync > = Arc :: new ( 42u64 ) ;
53+ Ok ( Some ( data) )
54+ } ) ) ;
55+
56+ let server_prov = server:: Provider :: builder ( )
57+ . start (
58+ "[::1]:0" . parse ( ) . unwrap ( ) ,
59+ tls. clone ( ) ,
60+ sub. clone ( ) ,
61+ server_map,
62+ )
63+ . await
64+ . unwrap ( ) ;
65+
66+ let client_map = Map :: new (
67+ Signer :: new ( b"default" ) ,
68+ 50_000 ,
69+ false ,
70+ StdClock :: default ( ) ,
71+ sub. clone ( ) ,
72+ ) ;
73+ let client_prov = client:: Provider :: builder ( )
74+ . with_success_jitter ( std:: time:: Duration :: ZERO )
75+ . start (
76+ "[::]:0" . parse ( ) . unwrap ( ) ,
77+ client_map,
78+ tls,
79+ sub. clone ( ) ,
80+ server_name ( ) ,
81+ )
82+ . unwrap ( ) ;
83+
84+ let ( client, server) = bind_pair (
85+ Protocol :: Tcp ,
86+ "127.0.0.1:0" . parse ( ) . unwrap ( ) ,
87+ client_prov,
88+ server_prov,
89+ ) ;
90+
91+ let acceptor_addr = server. acceptor_addr ( ) . expect ( "acceptor_addr" ) ;
92+ let handshake_addr = server. handshake_addr ( ) . expect ( "handshake_addr" ) ;
93+
94+ let ( client_stream, server_stream) = tokio:: join!(
95+ async {
96+ client
97+ . connect( handshake_addr, acceptor_addr, server_name( ) )
98+ . await
99+ . unwrap( )
100+ } ,
101+ async { server. accept( ) . await . unwrap( ) . 0 }
102+ ) ;
103+
104+ // Client doesn't have application_data
105+ assert ! ( client_stream. path_application_data( ) . is_none( ) ) ;
106+
107+ // Server stream should have the application_data we registered
108+ let app_data = server_stream
109+ . path_application_data ( )
110+ . expect ( "should have application_data" ) ;
111+ let value = app_data
112+ . downcast_ref :: < u64 > ( )
113+ . expect ( "should downcast to u64" ) ;
114+ assert_eq ! ( * value, 42u64 ) ;
115+ }
0 commit comments