#! /usr/bin/perl -w
BEGIN {
if
($^O eq
'MSWin32'
) {
}
}
SKIP: {
if
($^O eq
'MSWin32'
) {
no
warnings;
sub
Win32::API::new {
return
}
my
$required_error_message
=
quotemeta
"Could not import"
;
my
$generated
= 0;
eval
{
Crypt::URandom::urandom(1);
$generated
= 1;
};
chomp
$@;
ok(!
$generated
&& $@ =~ /
$required_error_message
/smx,
"Correct exception thrown when Win32::API->new() is overridden:$@"
);
}
else
{
no
warnings;
*CORE::GLOBAL::read
=
sub
{ $! = POSIX::EACCES();
return
};
*CORE::GLOBAL::sysread
=
sub
{ $! = POSIX::EACCES();
return
};
my
$required_error_message
=
q[(?:]
. (
quotemeta
POSIX::strerror(POSIX::EACCES())) .
q[|Permission[ ]
denied)];
my
%optional
;
eval
`cat ./check_random.pl`;
if
(
$optional
{DEFINE}) {
skip(
"Found getrandom in $^O"
, 1);
}
else
{
my
$generated
= 0;
eval
{
Crypt::URandom::urandom(1);
$generated
= 1;
};
chomp
$@;
ok(!
$generated
&& $@ =~ /
$required_error_message
/smx,
"Correct exception thrown when read is overridden:$@"
);
$generated
= 0;
eval
{
Crypt::URandom::urandom(1);
$generated
= 1;
};
chomp
$@;
ok(!
$generated
&& $@ =~ /
$required_error_message
/smx,
"Correct exception thrown when read is overridden twice:$@"
);
$generated
= 0;
eval
{
Crypt::URandom::urandom_ub(1);
$generated
= 1;
};
chomp
$@;
ok(!
$generated
&& $@ =~ /
$required_error_message
/smx,
"Correct exception thrown when sysread is overridden:$@"
);
$generated
= 0;
eval
{
Crypt::URandom::urandom_ub(1);
$generated
= 1;
};
chomp
$@;
ok(!
$generated
&& $@ =~ /
$required_error_message
/smx,
"Correct exception thrown when sysread is overridden twice:$@"
);
}
}
}
done_testing();