File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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 = & [
Original file line number Diff line number Diff line change @@ -192,3 +192,39 @@ impl PeerSource {
192192pub 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+ }
You can’t perform that action at this time.
0 commit comments