Skip to content

Commit 2911f3d

Browse files
da2ce7josecelano
andcommitted
tests: improve connection cookie tests
Co-authored-by: Jose Celano <[email protected]>
1 parent 4949424 commit 2911f3d

File tree

1 file changed

+114
-47
lines changed

1 file changed

+114
-47
lines changed

src/udp/connection_cookie.rs

Lines changed: 114 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -80,99 +80,166 @@ mod cookie_builder {
8080
mod 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

Comments
 (0)