]> sjero.net Git - wget/commitdiff
[svn] Added support for HTTP testing.
authormtortonesi <devnull@localhost>
Wed, 2 Nov 2005 14:27:23 +0000 (06:27 -0800)
committermtortonesi <devnull@localhost>
Wed, 2 Nov 2005 14:27:23 +0000 (06:27 -0800)
tests/ChangeLog [new file with mode: 0644]
tests/HTTPServer.pm [new file with mode: 0755]
tests/Makefile.in [new file with mode: 0644]
tests/Testing.pm [new file with mode: 0755]
tests/test1 [new file with mode: 0755]

diff --git a/tests/ChangeLog b/tests/ChangeLog
new file mode 100644 (file)
index 0000000..5132cfc
--- /dev/null
@@ -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.
+
diff --git a/tests/HTTPServer.pm b/tests/HTTPServer.pm
new file mode 100755 (executable)
index 0000000..c7de835
--- /dev/null
@@ -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 (file)
index 0000000..d22838d
--- /dev/null
@@ -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 (executable)
index 0000000..1aeef8f
--- /dev/null
@@ -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
+
diff --git a/tests/test1 b/tests/test1
new file mode 100755 (executable)
index 0000000..0f57856
--- /dev/null
@@ -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
+