Skip to content

Commit f98c808

Browse files
committed
tests: Add more magnet parsing/roundtripping tests
1 parent 6862bba commit f98c808

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

src/magnet.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,16 @@ mod tests {
493493
assert_eq!(&magnet_url.to_string(), &magnet_str);
494494
}
495495

496+
#[test]
497+
fn survives_roundtrip_tracker_urlencoding() {
498+
// Test that tracker URLs are properly url-decoded and re-encoded.
499+
let magnet_str =
500+
std::fs::read_to_string("tests/bittorrent-v1-emma-goldman.magnet").unwrap();
501+
let magnet = MagnetLink::new(&magnet_str).unwrap();
502+
503+
assert_eq!(&magnet.to_string(), &magnet_str);
504+
}
505+
496506
#[test]
497507
fn can_parse_magnet_trackers() {
498508
let expected = &[

src/tracker.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,3 +192,39 @@ impl PeerSource {
192192
pub trait TryIntoTracker {
193193
fn try_into_tracker(&self) -> Result<Tracker, TrackerError>;
194194
}
195+
196+
#[cfg(test)]
197+
mod tests {
198+
use super::*;
199+
200+
#[test]
201+
#[cfg(not(feature = "unknown_tracker_scheme"))]
202+
fn fail_unknown_tracker_scheme() {
203+
let tracker = Tracker::new("wtf://example.com:8000/announce");
204+
assert!(tracker.is_err());
205+
assert_eq!(
206+
tracker.unwrap_err(),
207+
TrackerError::InvalidScheme {
208+
scheme: "wtf".to_string()
209+
},
210+
);
211+
}
212+
213+
#[test]
214+
fn fail_urlencoded_tracker() {
215+
let tracker = Tracker::new("http%3F%2A%2A127.0.0.1:8000%2Aannounce");
216+
assert!(tracker.is_err());
217+
}
218+
219+
#[test]
220+
fn parse_ipv4_literal() {
221+
let tracker = Tracker::new("http://127.0.0.1:8000/announce");
222+
assert!(tracker.is_ok());
223+
}
224+
225+
#[test]
226+
fn parse_ipv6_literal() {
227+
let tracker = Tracker::new("http://[::1]:8000/announce");
228+
assert!(tracker.is_ok());
229+
}
230+
}

0 commit comments

Comments
 (0)