@@ -954,6 +954,59 @@ let test_string_raw_rt () =
954954 assert_equal ~msg (ts, ! c) (result, cursor))
955955 addrs
956956
957+ let test_with_port_of_string () =
958+ let default = 8080 in
959+ let addrs =
960+ [
961+ (" 127.0.0.1" , (Ipaddr. (V4 V4. localhost), default));
962+ (" 127.0.0.1:8080" , (Ipaddr. (V4 V4. localhost), 8080 ));
963+ (" 127.0.0.1:4343" , (Ipaddr. (V4 V4. localhost), 4343 ));
964+ (" ::1" , (Ipaddr. (V6 V6. localhost), default));
965+ (" 0:0:0:0:0:0:0:1:8080" , (Ipaddr. (V6 V6. localhost), 8080 ));
966+ (" 0:0:0:0:0:0:0:1:4343" , (Ipaddr. (V6 V6. localhost), 4343 ));
967+ ]
968+ in
969+ List. iter
970+ (fun (inet_addr , result ) ->
971+ match Ipaddr. with_port_of_string ~default inet_addr with
972+ | Ok ((V4 ipv4 , port ) as result' ) ->
973+ let result'' = V4. with_port_of_string ~default inet_addr in
974+ let msg =
975+ Format. asprintf " %s <> %a:%d" inet_addr Ipaddr.V4. pp ipv4 port
976+ in
977+ assert_equal ~msg result result';
978+ assert_equal ~msg (Ok (ipv4, port)) result''
979+ | Ok ((V6 ipv6 , port ) as result' ) ->
980+ let result'' = V6. with_port_of_string ~default inet_addr in
981+ let msg =
982+ Format. asprintf " %s <> %a:%d" inet_addr Ipaddr.V6. pp ipv6 port
983+ in
984+ assert_equal ~msg result result';
985+ assert_equal ~msg (Ok (ipv6, port)) result''
986+ | Error (`Msg err ) ->
987+ assert_failure (Format. asprintf " %s: %s" inet_addr err))
988+ addrs
989+
990+ let test_invalid_with_port_of_string () =
991+ let default = 8080 in
992+ let addrs =
993+ [
994+ " 127.0.0.1:" ; " 127.0.0.1!8080" ; " 0:0:0:0:0:0:0:1!8080" ; " 0:0:0:0:0:0:0:1:" ;
995+ ]
996+ in
997+ List. iter
998+ (fun inet_addr ->
999+ match
1000+ ( Ipaddr. with_port_of_string ~default inet_addr,
1001+ Ipaddr.V4. with_port_of_string ~default inet_addr,
1002+ Ipaddr.V4. with_port_of_string ~default inet_addr )
1003+ with
1004+ | Error _ , Error _ , Error _ -> ()
1005+ | _ ->
1006+ assert_failure
1007+ (Format. asprintf " Unexpected valid inet_addr: %S" inet_addr))
1008+ addrs
1009+
9571010let test_string_raw_rt_bad () =
9581011 let error (s , c ) msg c' = ((s, c), (Parse_error (msg, s), c')) in
9591012 let addrs =
@@ -1052,6 +1105,8 @@ let suite =
10521105 " map" > :: test_map;
10531106 " prefix_mem" > :: test_prefix_mem;
10541107 " prefix_subset" > :: test_prefix_subset;
1108+ " with_port" > :: test_with_port_of_string;
1109+ " invalid_with_port" > :: test_invalid_with_port_of_string;
10551110 ]
10561111;;
10571112
0 commit comments