UniEvent
view release on metacpan or search on metacpan
t/tcp/ssl.t view on Meta::CPAN
use 5.012;
use lib 't/lib';
use MyTest;
use Net::SockAddr;
use Net::SSLeay;
test_catch '[tcp-ssl]';
my $SERV_CERT = "t/cert/ca.pem";
my $serv_ctx = Net::SSLeay::CTX_new();
Net::SSLeay::CTX_use_certificate_file($serv_ctx, $SERV_CERT, &Net::SSLeay::FILETYPE_PEM) or sslerr();
Net::SSLeay::CTX_use_PrivateKey_file($serv_ctx, "t/cert/ca.key", &Net::SSLeay::FILETYPE_PEM) or sslerr();
Net::SSLeay::CTX_check_private_key($serv_ctx) or sslerr();
my $client_ctx = Net::SSLeay::CTX_new();
Net::SSLeay::CTX_load_verify_locations($client_ctx, $SERV_CERT, '') or die "something went wrong";
subtest 'ssl doesnt emit empty messages' => sub {
my $srv = new UE::Tcp;
$srv->use_ssl($serv_ctx);
$srv->bind_addr(SOCKADDR_LOOPBACK);
$srv->listen;
my $cnt = 10;
my $check = "a" x ($cnt + 1);
my $sconn;
$srv->connection_callback(sub {
$sconn = $_[1];
$sconn->write("a");
});
my $client = new UE::Tcp;
$client->use_ssl($client_ctx);
$client->connect_addr($srv->sockaddr);
my $rcv;
$client->read_callback(sub {
my ($client, $buf, $err) = @_;
ok !$err;
ok $buf;
$rcv .= $buf;
if ($cnt--) {
$sconn->write("a");
} else {
$client->loop->stop;
}
});
$srv->loop->run;
is $rcv, $check;
};
subtest 'unknown shit' => sub {
my $srv = new UE::Tcp;
$srv->use_ssl($serv_ctx);
$srv->bind_addr(SOCKADDR_LOOPBACK);
$srv->listen;
my $sa = $srv->sockaddr;
my @save;
my $data = 'MAGIC SSL';
$srv->weak(0);
$srv->connection_callback(sub {
my (undef, $client, $err) = @_;
fail $err if $err;
push @save, $client;
pass("server: connection");
$client->write($data, sub {
pass("server: written");
( run in 0.547 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )