stas 2004/05/21 16:12:55
Modified: t/response/TestAPR ipsubnet.pm todo api_status xs/APR/IpSubnet APR__IpSubnet.h . Changes Log: - APR::IpSubnet::new() now throws APR::Error exception (not returning rc) - more tests Revision Changes Path 1.2 +34 -11 modperl-2.0/t/response/TestAPR/ipsubnet.pm Index: ipsubnet.pm =================================================================== RCS file: /home/cvs/modperl-2.0/t/response/TestAPR/ipsubnet.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -u -u -r1.1 -r1.2 --- ipsubnet.pm 21 May 2004 19:25:46 -0000 1.1 +++ ipsubnet.pm 21 May 2004 23:12:55 -0000 1.2 @@ -19,7 +19,7 @@ my $c = $r->connection; my $p = $r->pool; - plan $r, tests => 5; + plan $r, tests => 7; my $ip = $c->remote_ip; @@ -28,22 +28,45 @@ ok t_cmp($ip, $c->remote_addr->ip_get, "remote_ip eq remote_addr->ip_get"); - my $ipsub = APR::IpSubnet->new($p, $ip); + { + my $ipsub = APR::IpSubnet->new($p, $ip); - ok $ipsub->test($c->remote_addr); + ok $ipsub->test($c->remote_addr); + } - my $reverse_remote_ip = scalar reverse $ip; + # use IP mask + { + my $ipsub = APR::IpSubnet->new($p, $ip, "255.0.0.0"); - ok t_cmp($reverse_remote_ip, scalar reverse($c->remote_addr->ip_get), - "reversed remote_ip eq reversed remote_addr->ip_get"); + ok $ipsub->test($c->remote_addr); + } - $ipsub = APR::IpSubnet->new($p, $reverse_remote_ip); + # fail match + { + if ($ip =~ /^\d+\.\d+\.\d+\.\d+$/) { + # arrange for the subnet to match only one IP, which is + # one digit off the client IP, ensuring a mismatch + (my $mismatch = $ip) =~ s/(?<=\.)(\d+)$/$1 == 255 ? $1-1 : $1+1/e; + t_debug($mismatch); + my $ipsub = APR::IpSubnet->new($p, $mismatch, $mismatch); + ok ! $ipsub->test($c->remote_addr); + } + else { + # XXX: similar ipv6 trick? + ok 1; + } + } - if (!$ipsub) { - ok 1; #this happens on win32 + # bogus IP + { + my $ipsub = eval { APR::IpSubnet->new($p, "345.234.678.987") }; + ok t_cmp(qr/The specified IP address is invalid/, $@, "bogus IP"); } - else { - ok ! $ipsub->test($c->remote_addr); + + # bogus mask + { + my $ipsub = eval { APR::IpSubnet->new($p, $ip, "255.0") }; + ok t_cmp(qr/The specified network mask is invalid/, $@, "bogus mask"); } Apache::OK; 1.8 +1 -2 modperl-2.0/todo/api_status Index: api_status =================================================================== RCS file: /home/cvs/modperl-2.0/todo/api_status,v retrieving revision 1.7 retrieving revision 1.8 diff -u -u -r1.7 -r1.8 --- api_status 21 May 2004 19:25:46 -0000 1.7 +++ api_status 21 May 2004 23:12:55 -0000 1.8 @@ -80,8 +80,7 @@ VV src/docs/2.0/api/APR/Error.pod -- src/docs/2.0/api/APR/Finfo.pod --- src/docs/2.0/api/APR/IpSubnet.pod - +VV src/docs/2.0/api/APR/IpSubnet.pod +V src/docs/2.0/api/APR/PerlIO.pod 1.2 +2 -5 modperl-2.0/xs/APR/IpSubnet/APR__IpSubnet.h Index: APR__IpSubnet.h =================================================================== RCS file: /home/cvs/modperl-2.0/xs/APR/IpSubnet/APR__IpSubnet.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -u -r1.1 -r1.2 --- APR__IpSubnet.h 21 May 2004 19:25:44 -0000 1.1 +++ APR__IpSubnet.h 21 May 2004 23:12:55 -0000 1.2 @@ -18,11 +18,8 @@ const char *ipstr, const char *mask_or_numbits) { - apr_status_t status; apr_ipsubnet_t *ipsub = NULL; - status = apr_ipsubnet_create(&ipsub, ipstr, mask_or_numbits, p); - if (status != APR_SUCCESS) { - return NULL; - } + MP_RUN_CROAK(apr_ipsubnet_create(&ipsub, ipstr, mask_or_numbits, p), + "APR::IpSubnet::new"); return ipsub; } 1.377 +3 -0 modperl-2.0/Changes Index: Changes =================================================================== RCS file: /home/cvs/modperl-2.0/Changes,v retrieving revision 1.376 retrieving revision 1.377 diff -u -u -r1.376 -r1.377 --- Changes 21 May 2004 22:01:16 -0000 1.376 +++ Changes 21 May 2004 23:12:55 -0000 1.377 @@ -12,6 +12,9 @@ =item 1.99_15-dev +APR::IpSubnet::new() now throws APR::Error exception (not returning +rc) [Stas] + rename package APR::NetLib -> APR::IpSubnet to match the class name [Stas]