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 )