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