mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
[svn] Added support for HTTP testing.
This commit is contained in:
parent
74415a7585
commit
d12bf532d5
9
tests/ChangeLog
Normal file
9
tests/ChangeLog
Normal file
@ -0,0 +1,9 @@
|
||||
2005-11-02 Mauro Tortonesi <mauro@ferrara.linux.it>
|
||||
|
||||
* HTTPServer.pm: Added basic support for HTTP testing.
|
||||
|
||||
* Testing.pm: Added basic support for feature testing (only HTTP
|
||||
testing is supported at the moment).
|
||||
|
||||
* test1: Added basic HTTP test.
|
||||
|
66
tests/HTTPServer.pm
Executable file
66
tests/HTTPServer.pm
Executable file
@ -0,0 +1,66 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use HTTP::Daemon;
|
||||
use HTTP::Status;
|
||||
use HTTP::Headers;
|
||||
use HTTP::Response;
|
||||
|
||||
use strict;
|
||||
|
||||
package HTTPServer;
|
||||
|
||||
sub run_daemon {
|
||||
my %urls = @_;
|
||||
my $server = HTTP::Daemon->new (LocalAddr => 'localhost',
|
||||
LocalPort => '8080',
|
||||
ReuseAddr => 1) or die "Cannot create server!!!";
|
||||
|
||||
while (my $con = $server->accept) {
|
||||
while (my $req = $con->get_request) {
|
||||
# print STDERR "method: ", $req->method, "\n";
|
||||
if ($req->method eq "GET" and $urls{$req->url->path}) {
|
||||
# print STDERR "requested URL: ", $req->url->path, "\n";
|
||||
|
||||
# create response
|
||||
my $tmp = $urls{$req->url->path};
|
||||
my $resp = HTTP::Response->new ($tmp->{'code'},
|
||||
$tmp->{'msg'});
|
||||
# print STDERR "HTTP::Response: \n", $resp->as_string;
|
||||
|
||||
# fill in headers
|
||||
while (my ($name, $value) = each %{$tmp->{headers}}) {
|
||||
# print STDERR "setting header: $name = $value\n";
|
||||
$resp->header($name => $value);
|
||||
}
|
||||
# print STDERR "HTTP::Response with headers: \n", $resp->as_string;
|
||||
|
||||
# fill in content
|
||||
$resp->content($tmp->{content});
|
||||
# print STDERR "HTTP::Response with content: \n", $resp->as_string;
|
||||
|
||||
$con->send_response($resp);
|
||||
# print STDERR "HTTP::Response sent: \n", $resp->as_string;
|
||||
} else {
|
||||
print STDERR "requested wrong URL: ", $req->url->path, "\n";
|
||||
$con->send_error($HTTP::Status::RC_FORBIDDEN);
|
||||
}
|
||||
}
|
||||
$con->close;
|
||||
undef($con);
|
||||
}
|
||||
}
|
||||
|
||||
sub run {
|
||||
my $pid = fork();
|
||||
|
||||
if($pid == 0) {
|
||||
run_daemon(@_);
|
||||
}
|
||||
|
||||
return $pid;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# vim: et ts=4 sw=4
|
||||
|
250
tests/Makefile.in
Normal file
250
tests/Makefile.in
Normal file
@ -0,0 +1,250 @@
|
||||
# Makefile for `wget' utility
|
||||
# Copyright (C) 1995-2005 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Wget; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# In addition, as a special exception, the Free Software Foundation
|
||||
# gives permission to link the code of its release of Wget with the
|
||||
# OpenSSL project's "OpenSSL" library (or with modified versions of it
|
||||
# that use the same license as the "OpenSSL" library), and distribute
|
||||
# the linked executables. You must obey the GNU General Public License
|
||||
# in all respects for all of the code used other than "OpenSSL". If you
|
||||
# modify this file, you may extend this exception to your version of the
|
||||
# file, but you are not obligated to do so. If you do not wish to do
|
||||
# so, delete this exception statement from your version.
|
||||
|
||||
#
|
||||
# Version: @VERSION@
|
||||
#
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
top_builddir = ..
|
||||
|
||||
top_srcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
bindir = @bindir@
|
||||
sysconfdir = @sysconfdir@
|
||||
datadir = @datadir@
|
||||
localedir = $(datadir)/locale
|
||||
|
||||
DESTDIR =
|
||||
|
||||
CC = @CC@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
# The following line is losing on some versions of make!
|
||||
DEFS = @DEFS@ -DSYSTEM_WGETRC=\"$(sysconfdir)/wgetrc\" -DLOCALEDIR=\"$(localedir)\"
|
||||
CFLAGS = @CFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBS = @LIBS@ @LIBSSL@ @LIBGNUTLS@
|
||||
exeext = @exeext@
|
||||
|
||||
INCLUDES = -I. -I$(srcdir) -I$(srcdir)/../src
|
||||
|
||||
COMPILE = $(CC) $(INCLUDES) $(CPPFLAGS) $(DEFS) $(CFLAGS)
|
||||
LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
RM = rm -f
|
||||
ETAGS = etags
|
||||
|
||||
# Conditional compiles
|
||||
ALLOCA = @ALLOCA@
|
||||
MD5_OBJ = @MD5_OBJ@
|
||||
OPIE_OBJ = @OPIE_OBJ@
|
||||
NTLM_OBJ = @NTLM_OBJ@
|
||||
SSL_OBJ = @SSL_OBJ@
|
||||
GETOPT_OBJ = @GETOPT_OBJ@
|
||||
|
||||
|
||||
all:
|
||||
|
||||
unittest: test$(exeext)
|
||||
|
||||
#
|
||||
# Dependencies for test binary
|
||||
#
|
||||
|
||||
TESTOBJ = $(ALLOCA) ccache.o cmpt.o connect.o convert.o cookies.o \
|
||||
ftp.o ftp-basic.o ftp-ls.o $(OPIE_OBJ) $(GETOPT_OBJ) hash.o \
|
||||
host.o html-parse.o html-url.o http.o $(NTLM_OBJ) init.o \
|
||||
log.o main.o $(MD5_OBJ) netrc.o progress.o protocol.o \
|
||||
ptimer.o recur.o res.o retr.o safe-ctype.o snprintf.o \
|
||||
$(SSL_OBJ) test.o url.o utils.o version.o xmalloc.o
|
||||
|
||||
# We make object files depend on every header. Rather than attempt to
|
||||
# track dependencies, everything gets recompiled when a header
|
||||
# changes. With a program of Wget's size this doesn't waste much
|
||||
# time, and it's a lot safer than attempting to get all the
|
||||
# dependencies right.
|
||||
|
||||
HEADERS = ../src/ccache.h ../src/config-post.h ../src/config.h \
|
||||
../src/connect.h ../src/convert.h ../src/cookies.h \
|
||||
../src/ftp.h ../src/gen-md5.h ../src/getopt.h \
|
||||
../src/gnu-md5.h ../src/hash.h ../src/host.h \
|
||||
../src/html-parse.h ../src/http-ntlm.h ../src/init.h \
|
||||
../src/log.h ../src/mswindows.h ../src/netrc.h \
|
||||
../src/options.h ../src/progress.h ../src/protocol.h \
|
||||
../src/ptimer.h ../src/recur.h ../src/res.h \
|
||||
../src/retr.h ../src/safe-ctype.h ../src/ssl.h \
|
||||
../src/sysdep.h ../src/test.h ../src/url.h \
|
||||
../src/utils.h ../src/wget.h ../src/xmalloc.h
|
||||
|
||||
alloca.o: ../src/alloca.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
ccache.o: ../src/ccache.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
cmpt.o: ../src/cmpt.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
connect.o: ../src/connect.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
convert.o: ../src/convert.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
cookies.o: ../src/cookies.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
ftp-basic.o: ../src/ftp-basic.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
ftp.o: ../src/ftp.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
ftp-ls.o: ../src/ftp-ls.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
ftp-opie.o: ../src/ftp-opie.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
gen-md5.o: ../src/gen-md5.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
getopt.o: ../src/getopt.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
gnu-md5.o: ../src/gnu-md5.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
gnutls.o: ../src/gnutls.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
hash.o: ../src/hash.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
host.o: ../src/host.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
html-parse.o: ../src/html-parse.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
html-url.o: ../src/html-url.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
http.o: ../src/http.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
http-ntlm.o: ../src/http-ntlm.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
init.o: ../src/init.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
log.o: ../src/log.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
main.o: ../src/main.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
mswindows.o: ../src/mswindows.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
netrc.o: ../src/netrc.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
openssl.o: ../src/openssl.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
progress.o: ../src/progress.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
protocol.o: ../src/protocol.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
ptimer.o: ../src/ptimer.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
recur.o: ../src/recur.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
res.o: ../src/res.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
retr.o: ../src/retr.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
safe-ctype.o: ../src/safe-ctype.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
snprintf.o: ../src/snprintf.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
test.o: ../src/test.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
url.o: ../src/url.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
utils.o: ../src/utils.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
version.o: ../src/version.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
xmalloc.o: ../src/xmalloc.c $(HEADERS)
|
||||
$(COMPILE) -DTESTING -c $<
|
||||
|
||||
|
||||
test$(exeext): $(TESTOBJ)
|
||||
$(LINK) $(TESTOBJ) $(LIBS)
|
||||
|
||||
#
|
||||
# Dependencies for cleanup
|
||||
#
|
||||
|
||||
clean:
|
||||
$(RM) *.o test$(exeext) *~ *.bak core core.[0-9]*
|
||||
|
||||
distclean: clean
|
||||
$(RM) Makefile
|
||||
|
||||
realclean: distclean
|
||||
|
||||
#
|
||||
# Dependencies for maintenance
|
||||
#
|
||||
|
||||
subdir = tests
|
||||
|
||||
Makefile: Makefile.in ../config.status
|
||||
cd .. && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status
|
||||
|
58
tests/Testing.pm
Executable file
58
tests/Testing.pm
Executable file
@ -0,0 +1,58 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use HTTPServer;
|
||||
|
||||
use strict;
|
||||
|
||||
package Testing;
|
||||
|
||||
sub Run_HTTP_Test {
|
||||
|
||||
my ($urls, $cmdline, $expected_error_code, $expected_downloaded_files) = @_;
|
||||
|
||||
my $pid = HTTPServer::run (%{$urls});
|
||||
|
||||
print "Spawned HTTP server with pid: $pid\n";
|
||||
|
||||
my $returned_error_code = system ($cmdline);
|
||||
|
||||
kill ('TERM', $pid);
|
||||
|
||||
print "Killed HTTP server\n";
|
||||
|
||||
$returned_error_code == $expected_error_code
|
||||
or die "Test failed: wrong code returned (was: $returned_error_code, expected: $expected_error_code)";
|
||||
|
||||
if (my $str = verify_download (%{$expected_downloaded_files})) {
|
||||
die $str;
|
||||
}
|
||||
|
||||
print "Test successful."
|
||||
}
|
||||
|
||||
|
||||
sub verify_download {
|
||||
my (%expected_downloaded_files) = @_;
|
||||
|
||||
# use slurp mode to read file content
|
||||
my $old_input_record_separator = $/;
|
||||
undef $/;
|
||||
|
||||
while (my ($filename, $expected_content) = each %expected_downloaded_files) {
|
||||
open (FILE, $filename) or return "Test failed: file $filename not downloaded";
|
||||
|
||||
my $content = <FILE>;
|
||||
$content eq $expected_content or return "Test failed: wrong content for file $filename";
|
||||
|
||||
close (FILE);
|
||||
}
|
||||
|
||||
$/ = $old_input_record_separator;
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# vim: et ts=4 sw=4
|
||||
|
38
tests/test1
Executable file
38
tests/test1
Executable file
@ -0,0 +1,38 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Testing;
|
||||
|
||||
use strict;
|
||||
|
||||
###############################################################################
|
||||
|
||||
my $dummyfile = <<EOF;
|
||||
Content
|
||||
EOF
|
||||
|
||||
# code, msg, headers, content
|
||||
my %urls = (
|
||||
'/dummy.html' => {
|
||||
code => "200",
|
||||
msg => "Dontcare",
|
||||
headers => {
|
||||
"Content-type" => "text/plain",
|
||||
},
|
||||
content => $dummyfile
|
||||
},
|
||||
);
|
||||
|
||||
my $cmdline = "wget -vd http://localhost:8080/dummy.html";
|
||||
|
||||
my $expected_error_code = 0;
|
||||
|
||||
my %expected_downloaded_files = (
|
||||
'dummy.html' => $dummyfile,
|
||||
);
|
||||
|
||||
###############################################################################
|
||||
|
||||
Testing::Run_HTTP_Test (\%urls, $cmdline, $expected_error_code, \%expected_downloaded_files);
|
||||
|
||||
# vim: et ts=4 sw=4
|
||||
|
Loading…
Reference in New Issue
Block a user