1231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#!/usr/bin/env python 25e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block# Copyright (C) 2010 Google Inc. All rights reserved. 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# 40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# Redistribution and use in source and binary forms, with or without 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# modification, are permitted provided that the following conditions are 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# met: 7d0825bca7fe65beaee391d30da42e937db621564Steve Block# 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# * Redistributions of source code must retain the above copyright 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# notice, this list of conditions and the following disclaimer. 100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# * Redistributions in binary form must reproduce the above 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# copyright notice, this list of conditions and the following disclaimer 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# in the documentation and/or other materials provided with the 130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# distribution. 145e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block# * Neither the name of Google Inc. nor the names of its 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# contributors may be used to endorse or promote products derived from 160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# this software without specific prior written permission. 17d0825bca7fe65beaee391d30da42e937db621564Steve Block# 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 30d0825bca7fe65beaee391d30da42e937db621564Steve Block"""Base class with common routines between the Apache and Lighttpd servers.""" 31d0825bca7fe65beaee391d30da42e937db621564Steve Block 32d0825bca7fe65beaee391d30da42e937db621564Steve Blockimport logging 338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockimport os 34d0825bca7fe65beaee391d30da42e937db621564Steve Blockimport time 35d0825bca7fe65beaee391d30da42e937db621564Steve Blockimport urllib 36d0825bca7fe65beaee391d30da42e937db621564Steve Block 37f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochfrom webkitpy.common.system import filesystem 38f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block_log = logging.getLogger("webkitpy.layout_tests.port.http_server_base") 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 41d0825bca7fe65beaee391d30da42e937db621564Steve Block 42d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass HttpServerBase(object): 43d0825bca7fe65beaee391d30da42e937db621564Steve Block 448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def __init__(self, port_obj): 458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block self._port_obj = port_obj 468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 47d0825bca7fe65beaee391d30da42e937db621564Steve Block def wait_for_action(self, action): 48d0825bca7fe65beaee391d30da42e937db621564Steve Block """Repeat the action for 20 seconds or until it succeeds. Returns 49d0825bca7fe65beaee391d30da42e937db621564Steve Block whether it succeeded.""" 50d0825bca7fe65beaee391d30da42e937db621564Steve Block start_time = time.time() 51d0825bca7fe65beaee391d30da42e937db621564Steve Block while time.time() - start_time < 20: 52d0825bca7fe65beaee391d30da42e937db621564Steve Block if action(): 53d0825bca7fe65beaee391d30da42e937db621564Steve Block return True 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _log.debug("Waiting for action: %s" % action) 55d0825bca7fe65beaee391d30da42e937db621564Steve Block time.sleep(1) 56d0825bca7fe65beaee391d30da42e937db621564Steve Block 57d0825bca7fe65beaee391d30da42e937db621564Steve Block return False 58d0825bca7fe65beaee391d30da42e937db621564Steve Block 59d0825bca7fe65beaee391d30da42e937db621564Steve Block def is_server_running_on_all_ports(self): 60d0825bca7fe65beaee391d30da42e937db621564Steve Block """Returns whether the server is running on all the desired ports.""" 61d0825bca7fe65beaee391d30da42e937db621564Steve Block for mapping in self.mappings: 62d0825bca7fe65beaee391d30da42e937db621564Steve Block if 'sslcert' in mapping: 63d0825bca7fe65beaee391d30da42e937db621564Steve Block http_suffix = 's' 64d0825bca7fe65beaee391d30da42e937db621564Steve Block else: 65d0825bca7fe65beaee391d30da42e937db621564Steve Block http_suffix = '' 66d0825bca7fe65beaee391d30da42e937db621564Steve Block 67d0825bca7fe65beaee391d30da42e937db621564Steve Block url = 'http%s://127.0.0.1:%d/' % (http_suffix, mapping['port']) 68d0825bca7fe65beaee391d30da42e937db621564Steve Block 69d0825bca7fe65beaee391d30da42e937db621564Steve Block try: 702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block response = urllib.urlopen(url, proxies={}) 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _log.debug("Server running at %s" % url) 72967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch except IOError, e: 73967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch _log.debug("Server NOT running at %s: %s" % (url, e)) 74d0825bca7fe65beaee391d30da42e937db621564Steve Block return False 75d0825bca7fe65beaee391d30da42e937db621564Steve Block 76d0825bca7fe65beaee391d30da42e937db621564Steve Block return True 778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def remove_log_files(self, folder, starts_with): 798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block files = os.listdir(folder) 808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for file in files: 818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if file.startswith(starts_with): 828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block full_path = os.path.join(folder, file) 83f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch filesystem.FileSystem().remove(full_path) 84