@@ -80,99 +80,166 @@ mod cookie_builder {
8080mod tests {
8181 use std:: net:: { IpAddr , Ipv4Addr , Ipv6Addr , SocketAddr } ;
8282
83- use super :: cookie_builder:: get_last_time_extent ;
84- use crate :: protocol:: clock:: time_extent:: Extent ;
83+ use super :: cookie_builder:: { self } ;
84+ use crate :: protocol:: clock:: time_extent:: { self , Extent } ;
8585 use crate :: protocol:: clock:: { StoppedClock , StoppedTime } ;
8686 use crate :: udp:: connection_cookie:: { check_connection_cookie, make_connection_cookie, Cookie , COOKIE_LIFETIME } ;
8787
88- fn make_test_socket_addr ( ) -> SocketAddr {
89- SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: new ( 127 , 0 , 0 , 1 ) ) , 8080 )
88+ // #![feature(const_socketaddr)]
89+ // const REMOTE_ADDRESS_IPV4_ZERO: SocketAddr = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), 0);
90+
91+ #[ test]
92+ fn it_should_make_a_connection_cookie ( ) {
93+ let cookie = make_connection_cookie ( & SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ) ;
94+
95+ // Note: This constant may need to be updated in the future as the hash is not guaranteed to to be stable between versions.
96+ const ID_COOKIE : Cookie = [ 23 , 204 , 198 , 29 , 48 , 180 , 62 , 19 ] ;
97+
98+ assert_eq ! ( cookie, ID_COOKIE )
9099 }
91100
92- fn make_test_cookie ( remote_address : Option < & SocketAddr > ) -> Cookie {
93- make_connection_cookie ( remote_address. unwrap_or ( & make_test_socket_addr ( ) ) )
101+ #[ test]
102+ fn it_should_make_the_same_connection_cookie_for_the_same_input_data ( ) {
103+ let remote_address = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ;
104+ let time_extent_zero = time_extent:: ZERO ;
105+
106+ let cookie = cookie_builder:: build ( & remote_address, & time_extent_zero) ;
107+ let cookie_2 = cookie_builder:: build ( & remote_address, & time_extent_zero) ;
108+
109+ println ! ( "remote_address: {remote_address:?}, time_extent: {time_extent_zero:?}, cookie: {cookie:?}" ) ;
110+ println ! ( "remote_address: {remote_address:?}, time_extent: {time_extent_zero:?}, cookie: {cookie_2:?}" ) ;
111+
112+ //remote_address: 127.0.0.1:8080, time_extent: TimeExtent { increment: 0ns, amount: 0 }, cookie: [212, 9, 204, 223, 176, 190, 150, 153]
113+ //remote_address: 127.0.0.1:8080, time_extent: TimeExtent { increment: 0ns, amount: 0 }, cookie: [212, 9, 204, 223, 176, 190, 150, 153]
114+
115+ assert_eq ! ( cookie, cookie_2)
94116 }
95117
96118 #[ test]
97- fn it_should_make_a_connection_cookie ( ) {
98- // remote_address: 127.0.0.1:8080, time_extent: 60,
99- // seed: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
119+ fn it_should_make_the_different_connection_cookie_for_different_ip ( ) {
120+ let remote_address = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ;
121+ let remote_address_2 = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: BROADCAST ) , 0 ) ;
122+ let time_extent_zero = time_extent:: ZERO ;
123+
124+ let cookie = cookie_builder:: build ( & remote_address, & time_extent_zero) ;
125+ let cookie_2 = cookie_builder:: build ( & remote_address_2, & time_extent_zero) ;
126+
127+ println ! ( "remote_address: {remote_address:?}, time_extent: {time_extent_zero:?}, cookie: {cookie:?}" ) ;
128+ println ! ( "remote_address: {remote_address_2:?}, time_extent: {time_extent_zero:?}, cookie: {cookie_2:?}" ) ;
129+
130+ //remote_address: 0.0.0.0:0, time_extent: TimeExtent { increment: 0ns, amount: 0 }, cookie: [151, 130, 30, 157, 190, 41, 179, 135]
131+ //remote_address: 255.255.255.255:0, time_extent: TimeExtent { increment: 0ns, amount: 0 }, cookie: [217, 87, 239, 178, 182, 126, 66, 166]
132+
133+ assert_ne ! ( cookie, cookie_2)
134+ }
135+
136+ #[ test]
137+ fn it_should_make_the_different_connection_cookie_for_different_ip_version ( ) {
138+ let remote_address = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ;
139+ let remote_address_2 = SocketAddr :: new ( IpAddr :: V6 ( Ipv6Addr :: UNSPECIFIED ) , 0 ) ;
140+ let time_extent_zero = time_extent:: ZERO ;
141+
142+ let cookie = cookie_builder:: build ( & remote_address, & time_extent_zero) ;
143+ let cookie_2 = cookie_builder:: build ( & remote_address_2, & time_extent_zero) ;
100144
101- const ID_COOKIE : Cookie = [ 45 , 59 , 50 , 101 , 97 , 203 , 48 , 19 ] ;
145+ println ! ( "remote_address: {remote_address:?}, time_extent: {time_extent_zero:?}, cookie: {cookie:?}" ) ;
146+ println ! ( "remote_address: {remote_address_2:?}, time_extent: {time_extent_zero:?}, cookie: {cookie_2:?}" ) ;
102147
103- let test_cookie = make_test_cookie ( None ) ;
104- //println!("{test_cookie:?}");
148+ //remote_address: 0.0.0.0:0, time_extent: TimeExtent { increment: 0ns, amount: 0 }, cookie: [151, 130, 30, 157, 190, 41, 179, 135]
149+ //remote_address: [::]:0, time_extent: TimeExtent { increment: 0ns, amount: 0 }, cookie: [99, 119, 230, 177, 20, 220, 163, 187]
105150
106- assert_eq ! ( test_cookie , ID_COOKIE )
151+ assert_ne ! ( cookie , cookie_2 )
107152 }
108153
109154 #[ test]
110- fn it_should_make_different_connection_cookie_with_different_remote_addresses ( ) {
111- let test_remote_address_1 = SocketAddr :: new ( IpAddr :: V6 ( Ipv6Addr :: UNSPECIFIED ) , 1 ) ;
112- let test_remote_address_2 = SocketAddr :: new ( IpAddr :: V6 ( Ipv6Addr :: UNSPECIFIED ) , 2 ) ;
113- let test_remote_address_3 = SocketAddr :: new ( IpAddr :: V6 ( Ipv6Addr :: LOCALHOST ) , 1 ) ;
114-
115- assert_ne ! (
116- make_test_cookie( Some ( & test_remote_address_1) ) ,
117- make_test_cookie( Some ( & test_remote_address_2) )
118- ) ;
119-
120- assert_ne ! (
121- make_test_cookie( Some ( & test_remote_address_1) ) ,
122- make_test_cookie( Some ( & test_remote_address_3) )
123- ) ;
124-
125- assert_ne ! (
126- make_test_cookie( Some ( & test_remote_address_2) ) ,
127- make_test_cookie( Some ( & test_remote_address_3) )
128- )
155+ fn it_should_make_the_different_connection_cookie_for_different_socket ( ) {
156+ let remote_address = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ;
157+ let remote_address_2 = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 1 ) ;
158+ let time_extent_zero = time_extent:: ZERO ;
159+
160+ let cookie = cookie_builder:: build ( & remote_address, & time_extent_zero) ;
161+ let cookie_2 = cookie_builder:: build ( & remote_address_2, & time_extent_zero) ;
162+
163+ println ! ( "remote_address: {remote_address:?}, time_extent: {time_extent_zero:?}, cookie: {cookie:?}" ) ;
164+ println ! ( "remote_address: {remote_address_2:?}, time_extent: {time_extent_zero:?}, cookie: {cookie_2:?}" ) ;
165+
166+ //remote_address: 0.0.0.0:0, time_extent: TimeExtent { increment: 0ns, amount: 0 }, cookie: [151, 130, 30, 157, 190, 41, 179, 135]
167+ //remote_address: 0.0.0.0:1, time_extent: TimeExtent { increment: 0ns, amount: 0 }, cookie: [38, 8, 0, 102, 92, 170, 220, 11]
168+
169+ assert_ne ! ( cookie, cookie_2)
170+ }
171+
172+ #[ test]
173+ fn it_should_make_the_different_connection_cookie_for_different_time_extents ( ) {
174+ let remote_address = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ;
175+ let time_extent_zero = time_extent:: ZERO ;
176+ let time_extent_max = time_extent:: MAX ;
177+
178+ let cookie = cookie_builder:: build ( & remote_address, & time_extent_zero) ;
179+ let cookie_2 = cookie_builder:: build ( & remote_address, & time_extent_max) ;
180+
181+ println ! ( "remote_address: {remote_address:?}, time_extent: {time_extent_zero:?}, cookie: {cookie:?}" ) ;
182+ println ! ( "remote_address: {remote_address:?}, time_extent: {time_extent_max:?}, cookie: {cookie_2:?}" ) ;
183+
184+ //remote_address: 0.0.0.0:0, time_extent: TimeExtent { increment: 0ns, amount: 0 }, cookie: [151, 130, 30, 157, 190, 41, 179, 135]
185+ //remote_address: 0.0.0.0:0, time_extent: TimeExtent { increment: 18446744073709551615.999999999s, amount: 18446744073709551615 }, cookie: [87, 111, 109, 125, 182, 206, 3, 201]
186+
187+ assert_ne ! ( cookie, cookie_2)
129188 }
130189
131190 #[ test]
132191 fn it_should_make_different_cookies_for_the_next_time_extent ( ) {
133- let cookie_now = make_test_cookie ( None ) ;
192+ let remote_address = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ;
193+
194+ let cookie = make_connection_cookie ( & remote_address) ;
134195
135196 StoppedClock :: local_add ( & COOKIE_LIFETIME . increment ) . unwrap ( ) ;
136197
137- let cookie_next = make_test_cookie ( None ) ;
198+ let cookie_next = make_connection_cookie ( & remote_address ) ;
138199
139- assert_ne ! ( cookie_now , cookie_next)
200+ assert_ne ! ( cookie , cookie_next)
140201 }
141202
142203 #[ test]
143204 fn it_should_be_valid_for_this_time_extent ( ) {
144- let cookie_now = make_test_cookie ( None ) ;
205+ let remote_address = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ;
206+
207+ let cookie = make_connection_cookie ( & remote_address) ;
145208
146- check_connection_cookie ( & make_test_socket_addr ( ) , & cookie_now ) . unwrap ( ) ;
209+ check_connection_cookie ( & remote_address , & cookie ) . unwrap ( ) ;
147210 }
148211
149212 #[ test]
150213 fn it_should_be_valid_for_the_next_time_extent ( ) {
151- let cookie_now = make_test_cookie ( None ) ;
214+ let remote_address = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ;
215+
216+ let cookie = make_connection_cookie ( & remote_address) ;
152217
153218 StoppedClock :: local_add ( & COOKIE_LIFETIME . increment ) . unwrap ( ) ;
154219
155- check_connection_cookie ( & make_test_socket_addr ( ) , & cookie_now ) . unwrap ( ) ;
220+ check_connection_cookie ( & remote_address , & cookie ) . unwrap ( ) ;
156221 }
157222
158223 #[ test]
159- fn it_cookies_should_be_valid_for_the_last_time_extent ( ) {
160- let cookie_now = make_test_cookie ( None ) ;
224+ fn it_should_be_valid_for_the_last_time_extent ( ) {
225+ let remote_address = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ;
226+
227+ let cookie = make_connection_cookie ( & remote_address) ;
161228
162229 StoppedClock :: local_set ( & COOKIE_LIFETIME . total ( ) . unwrap ( ) . unwrap ( ) ) ;
163230
164- check_connection_cookie ( & make_test_socket_addr ( ) , & cookie_now ) . unwrap ( ) ;
231+ check_connection_cookie ( & remote_address , & cookie ) . unwrap ( ) ;
165232 }
166233
167234 #[ test]
168235 #[ should_panic]
169- fn it_cookies_should_be_not_valid_after_their_last_time_extent ( ) {
170- let cookie_now = make_test_cookie ( None ) ;
236+ fn it_should_be_not_valid_after_their_last_time_extent ( ) {
237+ let remote_address = SocketAddr :: new ( IpAddr :: V4 ( Ipv4Addr :: UNSPECIFIED ) , 0 ) ;
171238
172- let last_time_extent = get_last_time_extent ( ) . increase ( COOKIE_LIFETIME . amount ) . unwrap ( ) ;
239+ let cookie = make_connection_cookie ( & remote_address ) ;
173240
174- StoppedClock :: local_set ( & last_time_extent . total_next ( ) . unwrap ( ) . unwrap ( ) ) ;
241+ StoppedClock :: local_set ( & COOKIE_LIFETIME . total_next ( ) . unwrap ( ) . unwrap ( ) ) ;
175242
176- check_connection_cookie ( & make_test_socket_addr ( ) , & cookie_now ) . unwrap ( ) ;
243+ check_connection_cookie ( & remote_address , & cookie ) . unwrap ( ) ;
177244 }
178245}
0 commit comments