wget/tests/HTTPTest.pm

104 lines
2.2 KiB
Perl
Raw Normal View History

#!/usr/bin/perl -w
use Test;
package HTTPTest;
our @ISA = qw(Test);
$VERSION = 0.01;
use strict;
use HTTPServer;
{
my %_attr_data = ( # DEFAULT
_urls => {},
_cmdline => "",
_errcode => 0,
_downloads => {},
);
sub _default_for
{
my ($self, $attr) = @_;
return $_attr_data{$attr} if exists $_attr_data{$attr};
return $self->SUPER::_default_for($attr);
}
sub _standard_keys
{
my ($self) = @_;
($self->SUPER::_standard_keys(), keys %_attr_data);
}
}
sub run {
my $self = shift;
my $pid = fork();
if($pid == 0) {
my $server = HTTPServer->new (LocalAddr => 'localhost',
LocalPort => '8080',
ReuseAddr => 1) or die "Cannot create server!!!";
$server->run ($self->{_urls});
}
# print "Spawned HTTP server with pid: $pid\n";
# print "Calling $self->{_cmdline}\n";
my $errcode = system ($self->{_cmdline});
kill ('TERM', $pid);
# print "Killed HTTP server\n";
$errcode == $self->{_errcode}
or die "Test failed: wrong code returned (was: $errcode, expected: $self->{_errcode})";
if (my $error_str = $self->_verify_download()) {
die $error_str;
}
print "Test successful.\n"
}
sub _verify_download {
my $self = shift;
# use slurp mode to read file content
my $old_input_record_separator = $/;
undef $/;
while (my ($filename, $filedata) = each %{$self->{_downloads}}) {
open (FILE, $filename)
or return "Test failed: file $filename not downloaded";
my $content = <FILE>;
$content eq $filedata->{'content'}
or return "Test failed: wrong content for file $filename";
if (exists($filedata->{'timestamp'})) {
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks) = stat FILE;
$mtime == $filedata->{'timestamp'}
or return "Test failed: wrong timestamp for file $filename";
}
close (FILE);
}
$/ = $old_input_record_separator;
return "";
}
1;
# vim: et ts=4 sw=4