@@ -461,264 +461,7 @@ mod tests {
461
461
use io;
462
462
use net:: * ;
463
463
use net:: Ipv6MulticastScope :: * ;
464
-
465
- #[ test]
466
- fn test_from_str_ipv4 ( ) {
467
- assert_eq ! ( Ok ( Ipv4Addr :: new( 127 , 0 , 0 , 1 ) ) , "127.0.0.1" . parse( ) ) ;
468
- assert_eq ! ( Ok ( Ipv4Addr :: new( 255 , 255 , 255 , 255 ) ) , "255.255.255.255" . parse( ) ) ;
469
- assert_eq ! ( Ok ( Ipv4Addr :: new( 0 , 0 , 0 , 0 ) ) , "0.0.0.0" . parse( ) ) ;
470
-
471
- // out of range
472
- let none: Option < Ipv4Addr > = "256.0.0.1" . parse ( ) . ok ( ) ;
473
- assert_eq ! ( None , none) ;
474
- // too short
475
- let none: Option < Ipv4Addr > = "255.0.0" . parse ( ) . ok ( ) ;
476
- assert_eq ! ( None , none) ;
477
- // too long
478
- let none: Option < Ipv4Addr > = "255.0.0.1.2" . parse ( ) . ok ( ) ;
479
- assert_eq ! ( None , none) ;
480
- // no number between dots
481
- let none: Option < Ipv4Addr > = "255.0..1" . parse ( ) . ok ( ) ;
482
- assert_eq ! ( None , none) ;
483
- }
484
-
485
- #[ test]
486
- fn test_from_str_ipv6 ( ) {
487
- assert_eq ! ( Ok ( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ) , "0:0:0:0:0:0:0:0" . parse( ) ) ;
488
- assert_eq ! ( Ok ( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ) ) , "0:0:0:0:0:0:0:1" . parse( ) ) ;
489
-
490
- assert_eq ! ( Ok ( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ) ) , "::1" . parse( ) ) ;
491
- assert_eq ! ( Ok ( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ) , "::" . parse( ) ) ;
492
-
493
- assert_eq ! ( Ok ( Ipv6Addr :: new( 0x2a02 , 0x6b8 , 0 , 0 , 0 , 0 , 0x11 , 0x11 ) ) ,
494
- "2a02:6b8::11:11" . parse( ) ) ;
495
-
496
- // too long group
497
- let none: Option < Ipv6Addr > = "::00000" . parse ( ) . ok ( ) ;
498
- assert_eq ! ( None , none) ;
499
- // too short
500
- let none: Option < Ipv6Addr > = "1:2:3:4:5:6:7" . parse ( ) . ok ( ) ;
501
- assert_eq ! ( None , none) ;
502
- // too long
503
- let none: Option < Ipv6Addr > = "1:2:3:4:5:6:7:8:9" . parse ( ) . ok ( ) ;
504
- assert_eq ! ( None , none) ;
505
- // triple colon
506
- let none: Option < Ipv6Addr > = "1:2:::6:7:8" . parse ( ) . ok ( ) ;
507
- assert_eq ! ( None , none) ;
508
- // two double colons
509
- let none: Option < Ipv6Addr > = "1:2::6::8" . parse ( ) . ok ( ) ;
510
- assert_eq ! ( None , none) ;
511
- }
512
-
513
- #[ test]
514
- fn test_from_str_ipv4_in_ipv6 ( ) {
515
- assert_eq ! ( Ok ( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0 , 49152 , 545 ) ) ,
516
- "::192.0.2.33" . parse( ) ) ;
517
- assert_eq ! ( Ok ( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0xFFFF , 49152 , 545 ) ) ,
518
- "::FFFF:192.0.2.33" . parse( ) ) ;
519
- assert_eq ! ( Ok ( Ipv6Addr :: new( 0x64 , 0xff9b , 0 , 0 , 0 , 0 , 49152 , 545 ) ) ,
520
- "64:ff9b::192.0.2.33" . parse( ) ) ;
521
- assert_eq ! ( Ok ( Ipv6Addr :: new( 0x2001 , 0xdb8 , 0x122 , 0xc000 , 0x2 , 0x2100 , 49152 , 545 ) ) ,
522
- "2001:db8:122:c000:2:2100:192.0.2.33" . parse( ) ) ;
523
-
524
- // colon after v4
525
- let none: Option < Ipv4Addr > = "::127.0.0.1:" . parse ( ) . ok ( ) ;
526
- assert_eq ! ( None , none) ;
527
- // not enough groups
528
- let none: Option < Ipv6Addr > = "1.2.3.4.5:127.0.0.1" . parse ( ) . ok ( ) ;
529
- assert_eq ! ( None , none) ;
530
- // too many groups
531
- let none: Option < Ipv6Addr > = "1.2.3.4.5:6:7:127.0.0.1" . parse ( ) . ok ( ) ;
532
- assert_eq ! ( None , none) ;
533
- }
534
-
535
- #[ test]
536
- fn test_from_str_socket_addr ( ) {
537
- assert_eq ! ( Ok ( sa4( Ipv4Addr :: new( 77 , 88 , 21 , 11 ) , 80 ) ) ,
538
- "77.88.21.11:80" . parse( ) ) ;
539
- assert_eq ! ( Ok ( sa6( Ipv6Addr :: new( 0x2a02 , 0x6b8 , 0 , 1 , 0 , 0 , 0 , 1 ) , 53 ) ) ,
540
- "[2a02:6b8:0:1::1]:53" . parse( ) ) ;
541
- assert_eq ! ( Ok ( sa6( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0 , 0x7F00 , 1 ) , 22 ) ) ,
542
- "[::127.0.0.1]:22" . parse( ) ) ;
543
-
544
- // without port
545
- let none: Option < SocketAddr > = "127.0.0.1" . parse ( ) . ok ( ) ;
546
- assert_eq ! ( None , none) ;
547
- // without port
548
- let none: Option < SocketAddr > = "127.0.0.1:" . parse ( ) . ok ( ) ;
549
- assert_eq ! ( None , none) ;
550
- // wrong brackets around v4
551
- let none: Option < SocketAddr > = "[127.0.0.1]:22" . parse ( ) . ok ( ) ;
552
- assert_eq ! ( None , none) ;
553
- // port out of range
554
- let none: Option < SocketAddr > = "127.0.0.1:123456" . parse ( ) . ok ( ) ;
555
- assert_eq ! ( None , none) ;
556
- }
557
-
558
- #[ test]
559
- fn ipv6_addr_to_string ( ) {
560
- // ipv4-mapped address
561
- let a1 = Ipv6Addr :: new ( 0 , 0 , 0 , 0 , 0 , 0xffff , 0xc000 , 0x280 ) ;
562
- assert_eq ! ( a1. to_string( ) , "::ffff:192.0.2.128" ) ;
563
-
564
- // ipv4-compatible address
565
- let a1 = Ipv6Addr :: new ( 0 , 0 , 0 , 0 , 0 , 0 , 0xc000 , 0x280 ) ;
566
- assert_eq ! ( a1. to_string( ) , "::192.0.2.128" ) ;
567
-
568
- // v6 address with no zero segments
569
- assert_eq ! ( Ipv6Addr :: new( 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ) . to_string( ) ,
570
- "8:9:a:b:c:d:e:f" ) ;
571
-
572
- // reduce a single run of zeros
573
- assert_eq ! ( "ae::ffff:102:304" ,
574
- Ipv6Addr :: new( 0xae , 0 , 0 , 0 , 0 , 0xffff , 0x0102 , 0x0304 ) . to_string( ) ) ;
575
-
576
- // don't reduce just a single zero segment
577
- assert_eq ! ( "1:2:3:4:5:6:0:8" ,
578
- Ipv6Addr :: new( 1 , 2 , 3 , 4 , 5 , 6 , 0 , 8 ) . to_string( ) ) ;
579
-
580
- // 'any' address
581
- assert_eq ! ( "::" , Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) . to_string( ) ) ;
582
-
583
- // loopback address
584
- assert_eq ! ( "::1" , Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ) . to_string( ) ) ;
585
-
586
- // ends in zeros
587
- assert_eq ! ( "1::" , Ipv6Addr :: new( 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) . to_string( ) ) ;
588
-
589
- // two runs of zeros, second one is longer
590
- assert_eq ! ( "1:0:0:4::8" , Ipv6Addr :: new( 1 , 0 , 0 , 4 , 0 , 0 , 0 , 8 ) . to_string( ) ) ;
591
-
592
- // two runs of zeros, equal length
593
- assert_eq ! ( "1::4:5:0:0:8" , Ipv6Addr :: new( 1 , 0 , 0 , 4 , 5 , 0 , 0 , 8 ) . to_string( ) ) ;
594
- }
595
-
596
- #[ test]
597
- fn ipv4_to_ipv6 ( ) {
598
- assert_eq ! ( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0xffff , 0x1234 , 0x5678 ) ,
599
- Ipv4Addr :: new( 0x12 , 0x34 , 0x56 , 0x78 ) . to_ipv6_mapped( ) ) ;
600
- assert_eq ! ( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0 , 0x1234 , 0x5678 ) ,
601
- Ipv4Addr :: new( 0x12 , 0x34 , 0x56 , 0x78 ) . to_ipv6_compatible( ) ) ;
602
- }
603
-
604
- #[ test]
605
- fn ipv6_to_ipv4 ( ) {
606
- assert_eq ! ( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0xffff , 0x1234 , 0x5678 ) . to_ipv4( ) ,
607
- Some ( Ipv4Addr :: new( 0x12 , 0x34 , 0x56 , 0x78 ) ) ) ;
608
- assert_eq ! ( Ipv6Addr :: new( 0 , 0 , 0 , 0 , 0 , 0 , 0x1234 , 0x5678 ) . to_ipv4( ) ,
609
- Some ( Ipv4Addr :: new( 0x12 , 0x34 , 0x56 , 0x78 ) ) ) ;
610
- assert_eq ! ( Ipv6Addr :: new( 0 , 0 , 1 , 0 , 0 , 0 , 0x1234 , 0x5678 ) . to_ipv4( ) ,
611
- None ) ;
612
- }
613
-
614
- #[ test]
615
- fn ipv4_properties ( ) {
616
- fn check ( octets : & [ u8 ; 4 ] , unspec : bool , loopback : bool ,
617
- private : bool , link_local : bool , global : bool ,
618
- multicast : bool , broadcast : bool , documentation : bool ) {
619
- let ip = Ipv4Addr :: new ( octets[ 0 ] , octets[ 1 ] , octets[ 2 ] , octets[ 3 ] ) ;
620
- assert_eq ! ( octets, & ip. octets( ) ) ;
621
-
622
- assert_eq ! ( ip. is_unspecified( ) , unspec) ;
623
- assert_eq ! ( ip. is_loopback( ) , loopback) ;
624
- assert_eq ! ( ip. is_private( ) , private) ;
625
- assert_eq ! ( ip. is_link_local( ) , link_local) ;
626
- assert_eq ! ( ip. is_global( ) , global) ;
627
- assert_eq ! ( ip. is_multicast( ) , multicast) ;
628
- assert_eq ! ( ip. is_broadcast( ) , broadcast) ;
629
- assert_eq ! ( ip. is_documentation( ) , documentation) ;
630
- }
631
-
632
- // address unspec loopbk privt linloc global multicast brdcast doc
633
- check ( & [ 0 , 0 , 0 , 0 ] , true , false , false , false , true , false , false , false ) ;
634
- check ( & [ 0 , 0 , 0 , 1 ] , false , false , false , false , true , false , false , false ) ;
635
- check ( & [ 1 , 0 , 0 , 0 ] , false , false , false , false , true , false , false , false ) ;
636
- check ( & [ 10 , 9 , 8 , 7 ] , false , false , true , false , false , false , false , false ) ;
637
- check ( & [ 127 , 1 , 2 , 3 ] , false , true , false , false , false , false , false , false ) ;
638
- check ( & [ 172 , 31 , 254 , 253 ] , false , false , true , false , false , false , false , false ) ;
639
- check ( & [ 169 , 254 , 253 , 242 ] , false , false , false , true , false , false , false , false ) ;
640
- check ( & [ 192 , 168 , 254 , 253 ] , false , false , true , false , false , false , false , false ) ;
641
- check ( & [ 224 , 0 , 0 , 0 ] , false , false , false , false , true , true , false , false ) ;
642
- check ( & [ 239 , 255 , 255 , 255 ] , false , false , false , false , true , true , false , false ) ;
643
- check ( & [ 255 , 255 , 255 , 255 ] , false , false , false , false , false , false , true , false ) ;
644
- check ( & [ 198 , 51 , 100 , 0 ] , false , false , false , false , false , false , false , true ) ;
645
- }
646
-
647
- #[ test]
648
- fn ipv6_properties ( ) {
649
- fn check ( str_addr : & str , unspec : bool , loopback : bool ,
650
- unique_local : bool , global : bool ,
651
- u_link_local : bool , u_site_local : bool , u_global : bool ,
652
- m_scope : Option < Ipv6MulticastScope > ) {
653
- let ip: Ipv6Addr = str_addr. parse ( ) . unwrap ( ) ;
654
- assert_eq ! ( str_addr, ip. to_string( ) ) ;
655
-
656
- assert_eq ! ( ip. is_unspecified( ) , unspec) ;
657
- assert_eq ! ( ip. is_loopback( ) , loopback) ;
658
- assert_eq ! ( ip. is_unique_local( ) , unique_local) ;
659
- assert_eq ! ( ip. is_global( ) , global) ;
660
- assert_eq ! ( ip. is_unicast_link_local( ) , u_link_local) ;
661
- assert_eq ! ( ip. is_unicast_site_local( ) , u_site_local) ;
662
- assert_eq ! ( ip. is_unicast_global( ) , u_global) ;
663
- assert_eq ! ( ip. multicast_scope( ) , m_scope) ;
664
- assert_eq ! ( ip. is_multicast( ) , m_scope. is_some( ) ) ;
665
- }
666
-
667
- // unspec loopbk uniqlo global unill unisl uniglo mscope
668
- check ( "::" ,
669
- true , false , false , true , false , false , true , None ) ;
670
- check ( "::1" ,
671
- false , true , false , false , false , false , false , None ) ;
672
- check ( "::0.0.0.2" ,
673
- false , false , false , true , false , false , true , None ) ;
674
- check ( "1::" ,
675
- false , false , false , true , false , false , true , None ) ;
676
- check ( "fc00::" ,
677
- false , false , true , false , false , false , false , None ) ;
678
- check ( "fdff:ffff::" ,
679
- false , false , true , false , false , false , false , None ) ;
680
- check ( "fe80:ffff::" ,
681
- false , false , false , false , true , false , false , None ) ;
682
- check ( "febf:ffff::" ,
683
- false , false , false , false , true , false , false , None ) ;
684
- check ( "fec0::" ,
685
- false , false , false , false , false , true , false , None ) ;
686
- check ( "ff01::" ,
687
- false , false , false , false , false , false , false , Some ( InterfaceLocal ) ) ;
688
- check ( "ff02::" ,
689
- false , false , false , false , false , false , false , Some ( LinkLocal ) ) ;
690
- check ( "ff03::" ,
691
- false , false , false , false , false , false , false , Some ( RealmLocal ) ) ;
692
- check ( "ff04::" ,
693
- false , false , false , false , false , false , false , Some ( AdminLocal ) ) ;
694
- check ( "ff05::" ,
695
- false , false , false , false , false , false , false , Some ( SiteLocal ) ) ;
696
- check ( "ff08::" ,
697
- false , false , false , false , false , false , false , Some ( OrganizationLocal ) ) ;
698
- check ( "ff0e::" ,
699
- false , false , false , true , false , false , false , Some ( Global ) ) ;
700
- }
701
-
702
- fn tsa < A : ToSocketAddrs > ( a : A ) -> Result < Vec < SocketAddr > , String > {
703
- match a. to_socket_addrs ( ) {
704
- Ok ( a) => Ok ( a. collect ( ) ) ,
705
- Err ( e) => Err ( e. to_string ( ) ) ,
706
- }
707
- }
708
-
709
- #[ test]
710
- fn to_socket_addr_socketaddr ( ) {
711
- let a = sa4 ( Ipv4Addr :: new ( 77 , 88 , 21 , 11 ) , 12345 ) ;
712
- assert_eq ! ( Ok ( vec![ a] ) , tsa( a) ) ;
713
- }
714
-
715
- fn sa4 ( a : Ipv4Addr , p : u16 ) -> SocketAddr {
716
- SocketAddr :: V4 ( SocketAddrV4 :: new ( a, p) )
717
- }
718
-
719
- fn sa6 ( a : Ipv6Addr , p : u16 ) -> SocketAddr {
720
- SocketAddr :: V6 ( SocketAddrV6 :: new ( a, p, 0 , 0 ) )
721
- }
464
+ use net:: test:: { tsa, sa6, sa4} ;
722
465
723
466
#[ test]
724
467
fn to_socket_addr_ipaddr_u16 ( ) {
0 commit comments