use strict;
use Test::More tests => 2;
sub test {
my $baseUrl = shift;
use LWP::UserAgent;
my $ua = new LWP::UserAgent;
my $response = $ua->get($baseUrl."sample");
ok($response->is_success, "get ok");
like ($response->content, qr/expected text/, "sample test");
}
require 'runWebTest.pl';
runWebTest(\&test, 'sampleHandler.pl');
####
sub handler {
my ($r, $c) = @_;
if ($r->method eq 'GET' and $r->url->path eq "/sample") {
$c->send_basic_header(200);
print $c "Content-Type: text/plain\015\012";
$c->send_crlf;
print $c "this is the expected text";
} else {
$c->send_error(404);
}
}
1;
####
use strict;
use Config;
sub runWebTest {
my ($testSub, $handlerScript) = @_;
my $perl = $Config{'perlpath'};
$perl = $^X if $^O eq 'VMS' or -x $^X and $^X =~ m,^([a-z]:)?/,i;
open(DAEMON, "$perl localHttpServer.pl $handlerScript |") or die "Can't exec daemon: $!";
my $serverUrl = ;
($serverUrl) = $serverUrl =~ /<([^>]+)>/;
sleep(2);
$testSub->($serverUrl);
quitWebServer($serverUrl);
}
sub quitWebServer {
my $baseUrl = shift;
use LWP::UserAgent;
my $ua = new LWP::UserAgent;
return $ua->get($baseUrl."quit");
}
1;
####
use strict;
$| = 1; # autoflush
require IO::Socket;
require HTTP::Daemon;
my $handlerScript = shift || die "no handler given";
my $d = HTTP::Daemon->new() || die;
print "HTTP Server started at: <", $d->url, ">\n";
open(STDOUT, $^O eq 'VMS'? ">nl: " : ">/dev/null");
print STDERR "HTTP Server started\n";
while (my $c = $d->accept) {
while (my $r = $c->get_request) {
if ($r) {
if ($r->method eq 'GET' and $r->url->path eq "/quit") {
$c->send_error(503, "Bye, bye");
print STDERR "HTTP Server terminated\n";
exit; # terminate HTTP server
} else {
require $handlerScript;
handler($r, $c);
}
}
}
$c->close;
$c = undef; # close connection
}