#!perl
use
5.008001;
BEGIN {
if
(!
eval
{
require
Socket }) {
plan
skip_all
=>
"no Socket"
;
}
plan
skip_all
=>
"EBCDIC but no Convert::EBCDIC"
;
}
else
{
plan
tests
=> 10;
}
undef
*{Socket::inet_aton};
undef
*{Socket::inet_ntoa};
$INC
{
'Socket.pm'
} = 1;
}
sub
import
{
my
$pkg
=
caller
();
no
strict
'refs'
;
*{
$pkg
.
'::inet_aton'
} = \
&inet_aton
;
*{
$pkg
.
'::inet_ntoa'
} = \
&inet_ntoa
;
}
my
$fail
= 0;
my
%names
;
sub
set_fail {
$fail
=
shift
;
}
sub
inet_aton {
return
if
$fail
;
my
$num
=
unpack
(
'N'
,
pack
(
'C*'
,
split
(/\./,
$_
[0])));
$names
{
$num
} =
$_
[0];
return
$num
;
}
sub
inet_ntoa {
return
if
$fail
;
return
$names
{
$_
[0]};
}
ok(
exists
$INC
{
'Net/Config.pm'
},
'Net::Config should have been used'
);
ok(
keys
%NetConfig
,
'%NetConfig should be imported'
);
Socket::set_fail(1);
undef
$NetConfig
{
'ftp_firewall'
};
is( Net::Config->requires_firewall(), 0,
'requires_firewall() should return 0 without ftp_firewall defined'
);
$NetConfig
{
'ftp_firewall'
} = 1;
is( Net::Config->requires_firewall(
'a.host.not.there'
), -1,
'... should return -1 without a valid hostname'
);
Socket::set_fail(0);
delete
$NetConfig
{
'local_netmask'
};
is( Net::Config->requires_firewall(
'127.0.0.1'
), 0,
'... should return 0 without local_netmask defined'
);
$NetConfig
{
'local_netmask'
} =
'127.0.0.1/24'
;
is( Net::Config->requires_firewall(
'127.0.0.1'
), 0,
'... should return false if host is within netmask'
);
is( Net::Config->requires_firewall(
'192.168.10.0'
), 1,
'... should return true if host is outside netmask'
);
$NetConfig
{
'local_netmask'
} = [
'127.0.0.1/24'
,
'10.0.0.0/8'
];
is( Net::Config->requires_firewall(
'10.10.255.254'
), 0,
'... should find success with mutiple local netmasks'
);
is( Net::Config->requires_firewall(
'192.168.10.0'
), 1,
'... should handle failure with multiple local netmasks'
);
is( \
&Net::Config::is_external
, \
&Net::Config::requires_firewall
,
'is_external() should be an alias for requires_firewall()'
);