Home | History | Annotate | Download | only in Scripts
      1 #!/usr/bin/perl
      2 # Copyright (C) 2009 Google Inc. All rights reserved.
      3 #
      4 # Redistribution and use in source and binary forms, with or without
      5 # modification, are permitted provided that the following conditions are
      6 # met:
      7 #
      8 #     * Redistributions of source code must retain the above copyright
      9 # notice, this list of conditions and the following disclaimer.
     10 #     * Redistributions in binary form must reproduce the above
     11 # copyright notice, this list of conditions and the following disclaimer
     12 # in the documentation and/or other materials provided with the
     13 # distribution.
     14 #     * Neither the name of Google Inc. nor the names of its
     15 # contributors may be used to endorse or promote products derived from
     16 # this software without specific prior written permission.
     17 #
     18 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 
     30 # Script to run Web Socket server.
     31 
     32 use strict;
     33 use warnings;
     34 
     35 use File::Spec;
     36 use FindBin;
     37 use IPC::Open2;
     38 
     39 use lib $FindBin::Bin;
     40 use webkitdirs;
     41 
     42 sub closeWebSocketServer();
     43 sub openWebSocketServer();
     44 
     45 my $webSocketPort = 8880;
     46 
     47 my $srcDir = sourceDir();
     48 my $layoutTestsName = "$srcDir/LayoutTests";
     49 my $testDirectory = File::Spec->rel2abs($layoutTestsName);
     50 my $webSocketServerPID = 0;
     51 
     52 
     53 print "Starting Web Socket server...\n";
     54 openWebSocketServer();
     55 print "Started.\n";
     56 print "Hit [ENTER] to stop it.";
     57 <STDIN>;
     58 print "Stopping Web Socket server...\n";
     59 closeWebSocketServer();
     60 print "Stopped.\n";
     61 exit 0;
     62 
     63 
     64 sub openWebSocketServer()
     65 {
     66     my $webSocketServerPath = "/usr/bin/python";
     67     my $webSocketPythonPath = "$srcDir/WebKitTools/pywebsocket";
     68     my $webSocketHandlerDir = "$testDirectory";
     69     my $webSocketHandlerScanDir = "$testDirectory/websocket/tests";
     70     my $webSocketHandlerMapFile = "$webSocketHandlerScanDir/handler_map.txt";
     71 
     72     my @args = (
     73         "$srcDir/WebKitTools/pywebsocket/mod_pywebsocket/standalone.py",
     74         "-p", "$webSocketPort",
     75         "-d", "$webSocketHandlerDir",
     76         "-s", "$webSocketHandlerScanDir",
     77         "-m", "$webSocketHandlerMapFile",
     78         "-x", "/websocket/tests/cookies",
     79     );
     80 
     81     $ENV{"PYTHONPATH"} = $webSocketPythonPath;
     82     $webSocketServerPID = open2(\*WEBSOCKETSERVER_IN, \*WEBSOCKETSERVER_OUT, $webSocketServerPath, @args);
     83 
     84     my $listen = "http://127.0.0.1:$webSocketPort";
     85     my $retryCount = 10;
     86     while (system("/usr/bin/curl -k -q --silent --stderr - --output /dev/null $listen") && $retryCount) {
     87         sleep 1;
     88         --$retryCount;
     89     }
     90     die "Timed out waiting for WebSocketServer to start" unless $retryCount;
     91 }
     92 
     93 sub closeWebSocketServer()
     94 {
     95     close WEBSOCKETSERVER_IN;
     96     close WEBSOCKETSERVER_OUT;
     97     kill 15, $webSocketServerPID;
     98 }
     99 
    100