mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
104 lines
2.2 KiB
Perl
Executable File
104 lines
2.2 KiB
Perl
Executable File
#!/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
|
|
|