Skip to content

Commit edfd878

Browse files
committed
fixup: tests use new connection cookie
1 parent 36f8dba commit edfd878

File tree

3 files changed

+49
-33
lines changed

3 files changed

+49
-33
lines changed

src/tracker/peer.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,7 @@ mod test {
130130
};
131131

132132
use crate::peer::TorrentPeer;
133-
use crate::protocol::utils::get_connection_id;
134-
133+
use crate::udp::connection_cookie::{into_connection_id, make_connection_cookie};
135134
// todo: duplicate functions is PR 82. Remove duplication once both PR are merged.
136135

137136
fn sample_ipv4_remote_addr() -> SocketAddr {
@@ -153,7 +152,7 @@ mod test {
153152
let info_hash_aquatic = aquatic_udp_protocol::InfoHash([0u8; 20]);
154153

155154
let default_request = AnnounceRequest {
156-
connection_id: get_connection_id(&sample_ipv4_remote_addr()),
155+
connection_id: into_connection_id(&make_connection_cookie(&sample_ipv4_remote_addr())),
157156
transaction_id: TransactionId(0i32),
158157
info_hash: info_hash_aquatic,
159158
peer_id: AquaticPeerId(*b"-qB00000000000000000"),

src/udp/connection_cookie.rs

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use std::net::SocketAddr;
22

3+
use aquatic_udp_protocol::ConnectionId;
4+
35
use crate::protocol::clock::time_extent::{Extent, TimeExtent};
46
use crate::udp::ServerError;
57

@@ -9,23 +11,37 @@ pub type SinceUnixEpochTimeExtent = TimeExtent;
911

1012
pub const COOKIE_LIFETIME: TimeExtent = TimeExtent::from_sec(2, &60);
1113

14+
pub fn from_connection_id(connection_id: &ConnectionId) -> Cookie {
15+
connection_id.0.to_le_bytes()
16+
}
17+
18+
pub fn into_connection_id(connection_cookie: &Cookie) -> ConnectionId {
19+
ConnectionId(i64::from_le_bytes(*connection_cookie))
20+
}
21+
1222
pub fn make_connection_cookie(remote_address: &SocketAddr) -> Cookie {
13-
let time_extent = cookie_builder::get_current_time_extent();
23+
let time_extent = cookie_builder::get_last_time_extent();
1424

15-
cookie_builder::build(remote_address, &time_extent)
25+
let cookie = cookie_builder::build(remote_address, &time_extent);
26+
println!("remote_address: {remote_address:?}, time_extent: {time_extent:?}, cookie: {cookie:?}");
27+
cookie
1628
}
1729

1830
pub fn check_connection_cookie(
1931
remote_address: &SocketAddr,
2032
connection_cookie: &Cookie,
2133
) -> Result<SinceUnixEpochTimeExtent, ServerError> {
34+
let last_time_extent = cookie_builder::get_last_time_extent();
35+
let cookie = cookie_builder::build(remote_address, &last_time_extent);
36+
println!("remote_address: {remote_address:?}, time_extent: {last_time_extent:?}, cookie: {cookie:?}");
37+
2238
// we loop backwards testing each time_extent until we find one that matches.
2339
// (or the lifetime of time_extents is exhausted)
24-
2540
for offset in 0..=COOKIE_LIFETIME.amount {
26-
let checking_time_extent = cookie_builder::get_current_time_extent().decrease(offset).unwrap();
41+
let checking_time_extent = cookie_builder::get_last_time_extent().decrease(offset).unwrap();
2742

2843
let checking_cookie = cookie_builder::build(remote_address, &checking_time_extent);
44+
//println!("remote_address: {remote_address:?}, time_extent: {checking_time_extent:?}, cookie: {checking_cookie:?}");
2945

3046
if *connection_cookie == checking_cookie {
3147
return Ok(checking_time_extent);
@@ -40,11 +56,15 @@ mod cookie_builder {
4056
use std::net::SocketAddr;
4157

4258
use super::{Cookie, SinceUnixEpochTimeExtent, COOKIE_LIFETIME};
43-
use crate::protocol::clock::time_extent::{DefaultTimeExtentMaker, MakeTimeExtent, TimeExtent};
59+
use crate::protocol::clock::time_extent::{DefaultTimeExtentMaker, Extent, MakeTimeExtent, TimeExtent};
4460
use crate::protocol::crypto::keys::seeds::{DefaultSeed, SeedKeeper};
4561

46-
pub(super) fn get_current_time_extent() -> SinceUnixEpochTimeExtent {
47-
DefaultTimeExtentMaker::now(&COOKIE_LIFETIME.increment).unwrap().unwrap()
62+
pub(super) fn get_last_time_extent() -> SinceUnixEpochTimeExtent {
63+
DefaultTimeExtentMaker::now(&COOKIE_LIFETIME.increment)
64+
.unwrap()
65+
.unwrap()
66+
.increase(COOKIE_LIFETIME.amount)
67+
.unwrap()
4868
}
4969

5070
pub(super) fn build(remote_address: &SocketAddr, time_extent: &TimeExtent) -> Cookie {
@@ -66,7 +86,7 @@ mod cookie_builder {
6686
mod tests {
6787
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
6888

69-
use super::cookie_builder::get_current_time_extent;
89+
use super::cookie_builder::get_last_time_extent;
7090
use crate::protocol::clock::time_extent::Extent;
7191
use crate::protocol::clock::{StoppedClock, StoppedTime};
7292
use crate::udp::connection_cookie::{check_connection_cookie, make_connection_cookie, Cookie, COOKIE_LIFETIME};
@@ -82,14 +102,14 @@ mod tests {
82102
/// this test is strange, the default hasher seems to make different values depending if we are running stable ot nightly
83103
#[test]
84104
fn it_should_make_a_connection_cookie() {
85-
// remote_address: 127.0.0.1:8080, time_extent: 0,
105+
// remote_address: 127.0.0.1:8080, time_extent: 60,
86106
// 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]
87107

88108
const ID_STABLE: Cookie = [223, 239, 248, 49, 67, 103, 97, 83];
89-
const ID_NIGHTLY: Cookie = [88, 63, 47, 175, 63, 184, 51, 80];
109+
const ID_NIGHTLY: Cookie = [45, 59, 50, 101, 97, 203, 48, 19];
90110

91111
let test_cookie = make_test_cookie(None);
92-
//println!("{test_cookie:?}");
112+
println!("{test_cookie:?}");
93113

94114
assert!((test_cookie == ID_STABLE || (test_cookie == ID_NIGHTLY)))
95115
}
@@ -147,9 +167,7 @@ mod tests {
147167
fn it_cookies_should_be_valid_for_the_last_time_extent() {
148168
let cookie_now = make_test_cookie(None);
149169

150-
let last_time_extent = get_current_time_extent().increase(COOKIE_LIFETIME.amount).unwrap();
151-
152-
StoppedClock::local_set(&last_time_extent.total().unwrap().unwrap());
170+
StoppedClock::local_set(&COOKIE_LIFETIME.total().unwrap().unwrap());
153171

154172
check_connection_cookie(&make_test_socket_addr(), &cookie_now).unwrap();
155173
}
@@ -159,7 +177,7 @@ mod tests {
159177
fn it_cookies_should_be_not_valid_after_their_last_time_extent() {
160178
let cookie_now = make_test_cookie(None);
161179

162-
let last_time_extent = get_current_time_extent().increase(COOKIE_LIFETIME.amount).unwrap();
180+
let last_time_extent = get_last_time_extent().increase(COOKIE_LIFETIME.amount).unwrap();
163181

164182
StoppedClock::local_set(&last_time_extent.total_next().unwrap().unwrap());
165183

src/udp/handlers.rs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
22
use std::sync::Arc;
33

44
use aquatic_udp_protocol::{
5-
AnnounceInterval, AnnounceRequest, AnnounceResponse, ConnectRequest, ConnectResponse, ConnectionId, ErrorResponse,
6-
NumberOfDownloads, NumberOfPeers, Port, Request, Response, ResponsePeer, ScrapeRequest, ScrapeResponse,
7-
TorrentScrapeStatistics, TransactionId,
5+
AnnounceInterval, AnnounceRequest, AnnounceResponse, ConnectRequest, ConnectResponse, ErrorResponse, NumberOfDownloads,
6+
NumberOfPeers, Port, Request, Response, ResponsePeer, ScrapeRequest, ScrapeResponse, TorrentScrapeStatistics, TransactionId,
87
};
98

10-
use super::connection_cookie::{check_connection_cookie, make_connection_cookie};
9+
use super::connection_cookie::{check_connection_cookie, from_connection_id, into_connection_id, make_connection_cookie};
1110
use crate::peer::TorrentPeer;
1211
use crate::tracker::statistics::TrackerStatisticsEvent;
1312
use crate::tracker::torrent::TorrentError;
@@ -71,7 +70,7 @@ pub async fn handle_connect(
7170
tracker: Arc<TorrentTracker>,
7271
) -> Result<Response, ServerError> {
7372
let connection_cookie = make_connection_cookie(&remote_addr);
74-
let connection_id = ConnectionId(i64::from_le_bytes(connection_cookie));
73+
let connection_id = into_connection_id(&connection_cookie);
7574

7675
let response = Response::from(ConnectResponse {
7776
transaction_id: request.transaction_id,
@@ -96,7 +95,7 @@ pub async fn handle_announce(
9695
announce_request: &AnnounceRequest,
9796
tracker: Arc<TorrentTracker>,
9897
) -> Result<Response, ServerError> {
99-
match check_connection_cookie(&remote_addr, &announce_request.connection_id.0.to_be_bytes()) {
98+
match check_connection_cookie(&remote_addr, &from_connection_id(&announce_request.connection_id)) {
10099
Ok(_) => {}
101100
Err(e) => {
102101
return Err(e);
@@ -410,9 +409,9 @@ mod tests {
410409
use aquatic_udp_protocol::{ConnectRequest, ConnectResponse, Response, TransactionId};
411410

412411
use super::{default_tracker_config, sample_ipv4_socket_address, sample_ipv6_remote_addr, TrackerStatsServiceMock};
413-
use crate::protocol::utils::get_connection_id;
414412
use crate::statistics::TrackerStatisticsEvent;
415413
use crate::tracker::tracker::TorrentTracker;
414+
use crate::udp::connection_cookie::{into_connection_id, make_connection_cookie};
416415
use crate::udp::handle_connect;
417416
use crate::udp::handlers::tests::{initialized_public_tracker, sample_ipv4_remote_addr};
418417

@@ -435,7 +434,7 @@ mod tests {
435434
assert_eq!(
436435
response,
437436
Response::Connect(ConnectResponse {
438-
connection_id: get_connection_id(&sample_ipv4_remote_addr()),
437+
connection_id: into_connection_id(&make_connection_cookie(&sample_ipv4_remote_addr())),
439438
transaction_id: request.transaction_id
440439
})
441440
);
@@ -454,7 +453,7 @@ mod tests {
454453
assert_eq!(
455454
response,
456455
Response::Connect(ConnectResponse {
457-
connection_id: get_connection_id(&sample_ipv4_remote_addr()),
456+
connection_id: into_connection_id(&make_connection_cookie(&sample_ipv4_remote_addr())),
458457
transaction_id: request.transaction_id
459458
})
460459
);
@@ -494,7 +493,7 @@ mod tests {
494493
AnnounceEvent, AnnounceRequest, NumberOfBytes, NumberOfPeers, PeerId as AquaticPeerId, PeerKey, Port, TransactionId,
495494
};
496495

497-
use crate::protocol::utils::get_connection_id;
496+
use crate::udp::connection_cookie::{into_connection_id, make_connection_cookie};
498497
use crate::udp::handlers::tests::sample_ipv4_remote_addr;
499498

500499
struct AnnounceRequestBuilder {
@@ -508,7 +507,7 @@ mod tests {
508507
let info_hash_aquatic = aquatic_udp_protocol::InfoHash([0u8; 20]);
509508

510509
let default_request = AnnounceRequest {
511-
connection_id: get_connection_id(&sample_ipv4_remote_addr()),
510+
connection_id: into_connection_id(&make_connection_cookie(&sample_ipv4_remote_addr())),
512511
transaction_id: TransactionId(0i32),
513512
info_hash: info_hash_aquatic,
514513
peer_id: AquaticPeerId([255u8; 20]),
@@ -985,8 +984,8 @@ mod tests {
985984
};
986985

987986
use super::TorrentPeerBuilder;
988-
use crate::protocol::utils::get_connection_id;
989987
use crate::tracker::tracker::TorrentTracker;
988+
use crate::udp::connection_cookie::{into_connection_id, make_connection_cookie};
990989
use crate::udp::handle_scrape;
991990
use crate::udp::handlers::tests::{initialized_public_tracker, sample_ipv4_remote_addr};
992991
use crate::PeerId;
@@ -1007,7 +1006,7 @@ mod tests {
10071006
let info_hashes = vec![info_hash];
10081007

10091008
let request = ScrapeRequest {
1010-
connection_id: get_connection_id(&remote_addr),
1009+
connection_id: into_connection_id(&make_connection_cookie(&remote_addr)),
10111010
transaction_id: TransactionId(0i32),
10121011
info_hashes,
10131012
};
@@ -1045,7 +1044,7 @@ mod tests {
10451044
let info_hashes = vec![*info_hash];
10461045

10471046
ScrapeRequest {
1048-
connection_id: get_connection_id(remote_addr),
1047+
connection_id: into_connection_id(&make_connection_cookie(&remote_addr)),
10491048
transaction_id: TransactionId(0i32),
10501049
info_hashes,
10511050
}
@@ -1190,7 +1189,7 @@ mod tests {
11901189
let info_hashes = vec![info_hash];
11911190

11921191
ScrapeRequest {
1193-
connection_id: get_connection_id(remote_addr),
1192+
connection_id: into_connection_id(&make_connection_cookie(&remote_addr)),
11941193
transaction_id: TransactionId(0i32),
11951194
info_hashes,
11961195
}

0 commit comments

Comments
 (0)