|
Packit |
b893dc |
use strict;
|
|
Packit |
b893dc |
use warnings;
|
|
Packit |
b893dc |
use Config;
|
|
Packit |
b893dc |
use Test::More;
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
BEGIN {
|
|
Packit |
b893dc |
plan skip_all => "your perl is not compiled with ithreads" unless $Config{useithreads};
|
|
Packit |
b893dc |
require threads;
|
|
Packit |
b893dc |
};
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
#XXX-TODO perhaps perl+ithreads related issue (needs more investigation)
|
|
Packit |
b893dc |
plan skip_all => "this test sometimes crashes on cygwin" if $^O eq 'cygwin';
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
# NOTE: expect warnings about threads still running under perl 5.8 and threads 1.71
|
|
Packit |
b893dc |
plan tests => 1;
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
use FindBin;
|
|
Packit |
b893dc |
use File::Spec;
|
|
Packit |
b893dc |
use Net::SSLeay;
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
my $start_time = time;
|
|
Packit |
b893dc |
my $file = File::Spec->catfile('t', 'data', 'testcert_key_2048.pem');
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
Net::SSLeay::randomize();
|
|
Packit |
b893dc |
Net::SSLeay::load_error_strings();
|
|
Packit |
b893dc |
Net::SSLeay::SSLeay_add_ssl_algorithms();
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
#exit the whole program if it runs too long
|
|
Packit |
b893dc |
threads->new( sub { sleep 20; warn "FATAL: TIMEOUT!"; exit } )->detach;
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
#print STDERR "Gonna start main thread part\n";
|
|
Packit |
b893dc |
my $ctx = Net::SSLeay::CTX_new() or warn "CTX_new failed" and exit;
|
|
Packit |
b893dc |
Net::SSLeay::CTX_set_default_passwd_cb($ctx, \&callback);
|
|
Packit |
b893dc |
Net::SSLeay::CTX_use_PrivateKey_file($ctx, $file, &Net::SSLeay::FILETYPE_PEM) or warn "CTX_use_PrivateKey_file (file=$file) failed" and exit;
|
|
Packit |
b893dc |
Net::SSLeay::CTX_set_default_passwd_cb($ctx, undef);
|
|
Packit |
b893dc |
Net::SSLeay::CTX_free($ctx);
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
#print STDERR "Gonna start multi-threading part\n";
|
|
Packit |
b893dc |
threads->new(\&do_check) for (1..10);
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
#print STDERR "Waiting for all threads to finish\n";
|
|
Packit |
b893dc |
do_sleep(50) while(threads->list());
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
pass("successfully finished, duration=".(time-$start_time));
|
|
Packit |
b893dc |
exit(0);
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
sub callback {
|
|
Packit |
b893dc |
#printf STDERR ("[thread:%04d] Inside callback\n", threads->tid);
|
|
Packit |
b893dc |
return "secret"; # password
|
|
Packit |
b893dc |
}
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
sub do_sleep {
|
|
Packit |
b893dc |
my $miliseconds = shift;
|
|
Packit |
b893dc |
select(undef, undef, undef, $miliseconds/1000);
|
|
Packit |
b893dc |
}
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
sub do_check {
|
|
Packit |
b893dc |
#printf STDERR ("[thread:%04d] do_check started\n", threads->tid);
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
my $c = Net::SSLeay::CTX_new() or warn "CTX_new failed" and exit;
|
|
Packit |
b893dc |
Net::SSLeay::CTX_set_default_passwd_cb($c, \&callback);
|
|
Packit |
b893dc |
Net::SSLeay::CTX_use_PrivateKey_file($c, $file, &Net::SSLeay::FILETYPE_PEM) or warn "CTX_use_PrivateKey_file (file=$file) failed" and exit;
|
|
Packit |
b893dc |
Net::SSLeay::CTX_set_default_passwd_cb($c, undef);
|
|
Packit |
b893dc |
Net::SSLeay::CTX_free($c);
|
|
Packit |
b893dc |
#do_sleep(rand(500));
|
|
Packit |
b893dc |
|
|
Packit |
b893dc |
#printf STDERR ("[thread:%04d] do_check finished\n", threads->tid);
|
|
Packit |
b893dc |
threads->detach();
|
|
Packit |
b893dc |
}
|