Blame t/local/10_rand.t

Packit b893dc
#!/usr/bin/perl
Packit b893dc
Packit b893dc
# RAND related tests
Packit b893dc
Packit b893dc
use strict;
Packit b893dc
use warnings;
Packit b893dc
use Test::More;
Packit b893dc
use File::Spec;
Packit b893dc
use Net::SSLeay;
Packit b893dc
Packit b893dc
plan tests => 52;
Packit b893dc
Packit b893dc
is(Net::SSLeay::RAND_status(), 1, 'RAND_status');
Packit b893dc
is(Net::SSLeay::RAND_poll(), 1, 'RAND_poll');
Packit b893dc
Packit b893dc
# RAND_file_name
Packit b893dc
my $file_name = Net::SSLeay::RAND_file_name(300);
Packit b893dc
isnt($file_name, undef, 'RAND_file_name returns defined value');
Packit b893dc
isnt($file_name, "", "RAND_file_name returns non-empty string: $file_name");
Packit b893dc
Packit b893dc
# RAND_load_file
Packit b893dc
my $binary_file = File::Spec->catfile('t', 'data', 'binary-test.file');
Packit b893dc
my $binary_file_size = -s $binary_file;
Packit b893dc
cmp_ok($binary_file_size, '>=', 1000, "Have binary file with good size: $binary_file $binary_file_size");
Packit b893dc
is(Net::SSLeay::RAND_load_file($binary_file, $binary_file_size), $binary_file_size, 'RAND_load with specific size');
Packit b893dc
if (Net::SSLeay::constant("LIBRESSL_VERSION_NUMBER"))
Packit b893dc
{
Packit b893dc
    # RAND_load_file does nothing on LibreSSL but should return something sane
Packit b893dc
    cmp_ok(Net::SSLeay::RAND_load_file($binary_file, -1), '>', 0, 'RAND_load with -1 is positive with LibreSSL');
Packit b893dc
} else {
Packit b893dc
    is(Net::SSLeay::RAND_load_file($binary_file, -1), $binary_file_size, 'RAND_load with -1 returns file size');
Packit b893dc
}
Packit b893dc
Packit b893dc
test_rand_bytes();
Packit b893dc
Packit b893dc
exit(0);
Packit b893dc
Packit b893dc
sub test_rand_bytes
Packit b893dc
{
Packit b893dc
    my ($ret, $rand_bytes, $rand_length, $rand_expected_length);
Packit b893dc
Packit b893dc
    my @rand_lengths = (0, 1, 1024, 65536, 1024**2);
Packit b893dc
Packit b893dc
    foreach $rand_expected_length (@rand_lengths)
Packit b893dc
    {
Packit b893dc
	$rand_length = $rand_expected_length;
Packit b893dc
	$ret = Net::SSLeay::RAND_bytes($rand_bytes, $rand_length);
Packit b893dc
	test_rand_bytes_results('RAND_bytes', $ret, $rand_bytes, $rand_length, $rand_expected_length);
Packit b893dc
    }
Packit b893dc
Packit b893dc
    foreach $rand_expected_length (@rand_lengths)
Packit b893dc
    {
Packit b893dc
	$rand_length = $rand_expected_length;
Packit b893dc
	$ret = Net::SSLeay::RAND_pseudo_bytes($rand_bytes, $rand_length);
Packit b893dc
	test_rand_bytes_results('RAND_pseudo_bytes', $ret, $rand_bytes, $rand_length, $rand_expected_length);
Packit b893dc
    }
Packit b893dc
Packit b893dc
    if (defined &Net::SSLeay::RAND_priv_bytes)
Packit b893dc
    {
Packit b893dc
	foreach $rand_expected_length (@rand_lengths)
Packit b893dc
	{
Packit b893dc
	    $rand_length = $rand_expected_length;
Packit b893dc
	    $ret = Net::SSLeay::RAND_priv_bytes($rand_bytes, $rand_length);
Packit b893dc
	    test_rand_bytes_results('RAND_priv_bytes', $ret, $rand_bytes, $rand_length, $rand_expected_length);
Packit b893dc
	}
Packit b893dc
    } else {
Packit b893dc
	SKIP : {
Packit b893dc
	    # Multiplier is the test count in test_rand_bytes_results
Packit b893dc
	    skip("Do not have Net::SSLeay::RAND_priv_bytes", ((scalar @rand_lengths) * 3));
Packit b893dc
	};
Packit b893dc
    }
Packit b893dc
}
Packit b893dc
Packit b893dc
sub test_rand_bytes_results
Packit b893dc
{
Packit b893dc
    my ($func, $ret, $rand_bytes, $rand_length, $rand_expected_length) = @_;
Packit b893dc
Packit b893dc
    # RAND_bytes functions do not update their rand_length argument, but check for this
Packit b893dc
    is($ret, 1, "$func: $rand_expected_length return value ok");
Packit b893dc
    is(length($rand_bytes), $rand_length, "$func: length of rand_bytes and rand_length match");
Packit b893dc
    is(length($rand_bytes), $rand_expected_length, "$func: length of rand_bytes is expected length $rand_length");
Packit b893dc
}