#!perl -w
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl t/testmodule.t'
use HTTP::Daemon::SSL;
use HTTP::Status;
eval {require "t/ssl_settings.req";} ||
eval {require "ssl_settings.req";};
$numtests = 9;
$|=1;
$SIG{PIPE}='IGNORE';
foreach ($^O) {
if (/MacOS/ or /VOS/ or /vmesa/ or /riscos/ or /amigaos/) {
print "1..0 # Skipped: fork not implemented on this platform\n";
exit;
}
}
print "1..$numtests\n";
$test = 0;
my $server = new HTTP::Daemon::SSL(
LocalAddr => $SSL_SERVER_ADDR,
Listen => 5,
Timeout => 30,
ReuseAddr => 1,
SSL_verify_mode => 0x00,
SSL_ca_file => "certs/test-ca.pem",
SSL_cert_file => "certs/server-cert.pem");
if (!$server) {
print "not ok $test\n";
exit;
}
$SSL_SERVER_PORT = $server->sockport;
&ok("server init port=$SSL_SERVER_PORT");
print "not " if (!defined fileno($server));
&ok("server fileno");
print "not " unless ($server->url =~ m!^https:!);
&ok("server url test");
unless (fork) {
close($server);
my $client = new IO::Socket::INET(PeerAddr => $SSL_SERVER_ADDR,
PeerPort => $SSL_SERVER_PORT);
print $client "GET / HTTP/1.0\r\n\r\n";
(<$client> eq "HTTP/1.1 400 Bad Request\r\n") || print "not ";
&ok("client bad connection test");
my @ary = <$client>;
close $client;
$client = new IO::Socket::SSL(PeerAddr => $SSL_SERVER_ADDR,
PeerPort => $SSL_SERVER_PORT,
SSL_verify_mode => 0x01,
SSL_ca_file => "certs/test-ca.pem");
$client || (print("not ok #client failure\n") && exit);
&ok("client good connection test");
print $client "GET /foo HTTP/1.0\r\n\r\n";
(<$client> eq "HTTP/1.1 403 Forbidden\r\n") || print "not ";
&ok("client permission test");
@ary = <$client>;
exit(0);
}
my $conn;
if (!($conn = $server->accept)) {
# first client request is a bad request
&ok("bad request handled");
} else {
print "not ok $test # bad request returned a socket\n";
}
if ($conn = $server->accept) {
&ok("valid request handled");
} else {
print "not ok $test # valid request did not return a socket\n";
}
my $r = $conn->get_request();
unless ($r->method eq 'GET' and $r->url->path eq '/foo') {
print "not ";
}
&ok("server method processing");
$conn->send_error(RC_FORBIDDEN);
close $conn;
wait;
sub ok {
print "ok #$_[0] ", ++$test, "\n";
}