From: mtortonesi Date: Wed, 2 Nov 2005 14:27:23 +0000 (-0800) Subject: [svn] Added support for HTTP testing. X-Git-Tag: v1.13~706 X-Git-Url: http://sjero.net/git/?p=wget;a=commitdiff_plain;h=d12bf532d553235c21b5a8472335032a3ff82bf2 [svn] Added support for HTTP testing. --- diff --git a/tests/ChangeLog b/tests/ChangeLog new file mode 100644 index 00000000..5132cfc2 --- /dev/null +++ b/tests/ChangeLog @@ -0,0 +1,9 @@ +2005-11-02 Mauro Tortonesi + + * 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. + diff --git a/tests/HTTPServer.pm b/tests/HTTPServer.pm new file mode 100755 index 00000000..c7de835f --- /dev/null +++ b/tests/HTTPServer.pm @@ -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 + diff --git a/tests/Makefile.in b/tests/Makefile.in new file mode 100644 index 00000000..d22838da --- /dev/null +++ b/tests/Makefile.in @@ -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 + diff --git a/tests/Testing.pm b/tests/Testing.pm new file mode 100755 index 00000000..1aeef8f8 --- /dev/null +++ b/tests/Testing.pm @@ -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 = ; + $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 + diff --git a/tests/test1 b/tests/test1 new file mode 100755 index 00000000..0f578563 --- /dev/null +++ b/tests/test1 @@ -0,0 +1,38 @@ +#!/usr/bin/perl -w + +use Testing; + +use strict; + +############################################################################### + +my $dummyfile = < { + 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 +