Blame t/local/06_tcpecho.t

Packit b893dc
#!/usr/bin/perl
Packit b893dc
Packit b893dc
use strict;
Packit b893dc
use warnings;
Packit b893dc
use Test::More;
Packit b893dc
use Socket;
Packit b893dc
use Symbol qw(gensym);
Packit b893dc
use Net::SSLeay;
Packit b893dc
use Config;
Packit b893dc
Packit b893dc
BEGIN {
Packit b893dc
  plan skip_all => "fork() not supported on $^O" unless $Config{d_fork};
Packit b893dc
}
Packit b893dc
Packit b893dc
plan tests => 4;
Packit b893dc
Packit b893dc
my $sock;
Packit b893dc
my $pid;
Packit b893dc
Packit b893dc
my $port = 1211;
Packit b893dc
my $msg = 'ssleay-tcp-test';
Packit b893dc
my $port_trials = 1000;
Packit b893dc
{
Packit b893dc
    my $ip = "\x7F\0\0\x01";
Packit b893dc
    my $serv_params = sockaddr_in($port, $ip);
Packit b893dc
    $sock = gensym();
Packit b893dc
    socket($sock, AF_INET, SOCK_STREAM, 0) or die "socket failed: $!";
Packit b893dc
    # Try to find an available port to bind to
Packit b893dc
    my $i;
Packit b893dc
    for ($i = 0; $i < $port_trials; $i++)
Packit b893dc
    {
Packit b893dc
	my $serv_params = sockaddr_in($port, $ip);
Packit b893dc
Packit b893dc
	last if bind($sock, $serv_params);
Packit b893dc
	$port++;
Packit b893dc
    }
Packit b893dc
    die "Could not find a port to bind to" if $i >= 1000;
Packit b893dc
    listen($sock, 2) or die "listen failed $!";
Packit b893dc
}
Packit b893dc
Packit b893dc
{
Packit b893dc
    $pid = fork();
Packit b893dc
    die  "fork failed: $!" unless defined $pid;
Packit b893dc
    if ($pid == 0) {
Packit b893dc
        my $addr = accept(Net::SSLeay::SSLCAT_S, $sock) or die "accept failed $!";
Packit b893dc
Packit b893dc
        my $old_out = select(Net::SSLeay::SSLCAT_S);
Packit b893dc
        $| = 1;
Packit b893dc
        select($old_out);
Packit b893dc
Packit b893dc
        my $got = Net::SSLeay::tcp_read_all();
Packit b893dc
        is($got, $msg, 'tcp_read_all');
Packit b893dc
Packit b893dc
        ok(Net::SSLeay::tcp_write_all(uc($got)), 'tcp_write_all');
Packit b893dc
Packit b893dc
        close Net::SSLeay::SSLCAT_S;
Packit b893dc
        close $sock;
Packit b893dc
Packit b893dc
        exit;
Packit b893dc
    }
Packit b893dc
}
Packit b893dc
Packit b893dc
my @results;
Packit b893dc
{
Packit b893dc
    my ($got) = Net::SSLeay::tcpcat('127.0.0.1', $port, $msg);
Packit b893dc
    push @results, [ $got eq uc($msg), 'sent and received correctly' ];
Packit b893dc
}
Packit b893dc
Packit b893dc
waitpid $pid, 0;
Packit b893dc
push @results, [ $? == 0, 'server exited with 0' ];
Packit b893dc
Packit b893dc
END {
Packit b893dc
    Test::More->builder->current_test(2);
Packit b893dc
    for my $t (@results) {
Packit b893dc
        ok( $t->[0], $t->[1] );
Packit b893dc
    }
Packit b893dc
}