Home | History | Annotate | Download | only in Scripts
      1 #!/usr/bin/perl
      2 
      3 # Copyright (C) 2005, 2006, 2007 Apple Inc.  All rights reserved.
      4 # Copyright (C) 2006 Alexey Proskuryakov (ap (at] nypop.com)
      5 # Copyright (C) 2011 Research In Motion Limited. All rights reserved.
      6 #
      7 # Redistribution and use in source and binary forms, with or without
      8 # modification, are permitted provided that the following conditions
      9 # are met:
     10 #
     11 # 1.  Redistributions of source code must retain the above copyright
     12 #     notice, this list of conditions and the following disclaimer. 
     13 # 2.  Redistributions in binary form must reproduce the above copyright
     14 #     notice, this list of conditions and the following disclaimer in the
     15 #     documentation and/or other materials provided with the distribution. 
     16 # 3.  Neither the name of Apple Inc. ("Apple") nor the names of
     17 #     its contributors may be used to endorse or promote products derived
     18 #     from this software without specific prior written permission. 
     19 #
     20 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     21 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     22 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     23 # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     24 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     25 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     26 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     27 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     29 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30 
     31 # Script to run Apache with the same configuration as used in http layout tests.
     32 
     33 use strict;
     34 use warnings;
     35 
     36 use Cwd;
     37 use File::Path;
     38 use File::Basename;
     39 use Getopt::Long;
     40 use FindBin;
     41 
     42 use lib $FindBin::Bin;
     43 use webkitperl::httpd;
     44 use webkitdirs;
     45 
     46 # FIXME: Dynamic HTTP-port configuration in this file is wrong.  The various
     47 # apache config files in LayoutTests/http/config govern the port numbers.
     48 # Dynamic configuration as-written will also cause random failures in
     49 # an IPv6 environment.  See https://bugs.webkit.org/show_bug.cgi?id=37104.
     50 # Argument handling
     51 my $httpdPort = 8000;
     52 my $allInterfaces = 0;
     53 my $showHelp;
     54 
     55 my $result = GetOptions(
     56     'all-interfaces|a' => \$allInterfaces,
     57     'help|h' => \$showHelp,
     58     'port=i' => \$httpdPort,
     59 );
     60 
     61 if (!$result || @ARGV || $showHelp) {
     62     print "Usage: " . basename($0) . " [options]\n";
     63     print "  -a|--all-interfaces  Bind to all interfaces\n";
     64     print "  -h|--help            Show this help message\n";
     65     print "  -p|--port NNNN       Bind to port NNNN\n";
     66     exit 1;
     67 }
     68 
     69 setConfiguration();
     70 my $productDir = productDir();
     71 chdirWebKit();
     72 my $testDirectory = File::Spec->catfile(getcwd(), "LayoutTests");
     73 $testDirectory = convertMsysPath($testDirectory) if isMsys();
     74 my $listen = "127.0.0.1:$httpdPort";
     75 $listen = "$httpdPort" if ($allInterfaces);
     76 
     77 if ($allInterfaces) {
     78     print "Starting httpd on port $httpdPort (all interfaces)...\n";
     79 } else {
     80     print "Starting httpd on <http://$listen/>...\n";
     81 }
     82 setShouldWaitForUserInterrupt();
     83 print "Press Ctrl+C to stop it.\n\n";
     84 
     85 my @args = (
     86     "-C", "Listen $listen",
     87     # Disable Keep-Alive support. Makes testing in multiple browsers easier (no need to wait
     88     # for another browser's connection to expire).
     89     "-c", "KeepAlive 0"
     90 );
     91 push @args, (
     92     "-c", "CustomLog |/usr/bin/tee common",
     93     "-c", "ErrorLog |/usr/bin/tee",
     94     # Run in single-process mode, do not detach from the controlling terminal.
     95     "-X",
     96 ) unless isMsys();
     97 
     98 my @defaultArgs = getDefaultConfigForTestDirectory($testDirectory);
     99 @args = (@defaultArgs, @args);
    100 openHTTPD(@args);
    101