Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1108)

Side by Side Diff: Tools/Scripts/webkitpy/layout_tests/servers/crash_service.py

Issue 146173004: Fix run-blink-httpd to work w/ Apache and refactor webkitpy.layout_tests.servers. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: add cli_wrapper and update run-* scripts Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (C) 2013 Google Inc. All rights reserved. 1 # Copyright (C) 2013 Google Inc. All rights reserved.
2 # 2 #
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are 4 # modification, are permitted provided that the following conditions are
5 # met: 5 # met:
6 # 6 #
7 # * Redistributions of source code must retain the above copyright 7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above 9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer 10 # copyright notice, this list of conditions and the following disclaimer
11 # in the documentation and/or other materials provided with the 11 # in the documentation and/or other materials provided with the
12 # distribution. 12 # distribution.
13 # * Neither the name of Google Inc. nor the names of its 13 # * Neither the name of Google Inc. nor the names of its
14 # contributors may be used to endorse or promote products derived from 14 # contributors may be used to endorse or promote products derived from
15 # this software without specific prior written permission. 15 # this software without specific prior written permission.
16 # 16 #
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 28
29 """A class to help start/stop the crash service used by layout tests.""" 29 """Start and stop the crash service as it is used by the layout tests."""
30 30
31 import logging 31 from webkitpy.layout_tests.servers import server_base
32 import os
33 import time
34
35 from webkitpy.layout_tests.servers import http_server_base
36 32
37 33
38 _log = logging.getLogger(__name__) 34 class CrashService(server_base.ServerBase):
39
40
41 class CrashService(http_server_base.HttpServerBase):
42 35
43 def __init__(self, port_obj, crash_dumps_dir): 36 def __init__(self, port_obj, crash_dumps_dir):
44 """Args: 37 """Args:
45 crash_dumps_dir: the absolute path to the directory where to store cra sh dumps 38 crash_dumps_dir: the absolute path to the directory where to store cra sh dumps
46 """ 39 """
47 # Webkit tests 40 # Webkit tests
48 http_server_base.HttpServerBase.__init__(self, port_obj) 41 super(CrashService, self).__init__(port_obj, port_obj.default_results_di rectory())
49 self._name = 'CrashService' 42 self._name = 'CrashService'
50 self._crash_dumps_dir = crash_dumps_dir 43 self._crash_dumps_dir = crash_dumps_dir
44 self._env = None
51 45
52 self._pid_file = self._filesystem.join(self._runtime_path, '%s.pid' % se lf._name) 46 self._pid_file = self._filesystem.join(self._runtime_path, '%s.pid' % se lf._name)
53 47 self._start_cmd = [self._port_obj._path_to_crash_service(),
54 def _spawn_process(self): 48 '--dumps-dir=%s' % self._crash_dumps_dir,
55 start_cmd = [self._port_obj._path_to_crash_service(), 49 '--no-window']
56 '--dumps-dir=%s' % self._crash_dumps_dir,
57 '--no-window']
58 _log.debug('Starting crash service, cmd = "%s"' % " ".join(start_cmd))
59 process = self._executive.popen(start_cmd, shell=False, stderr=self._exe cutive.PIPE)
60 pid = process.pid
61 self._filesystem.write_text_file(self._pid_file, str(pid))
62 return pid
63
64 def _stop_running_server(self):
65 # FIXME: It would be nice if we had a cleaner way of killing this proces s.
66 # Currently we throw away the process object created in _spawn_process,
67 # since there doesn't appear to be any way to kill the server any more
68 # cleanly using it than just killing the pid, and we need to support
69 # killing a pid directly anyway for run-webkit-httpd and run-webkit-webs ocketserver.
70 self._wait_for_action(self._check_and_kill)
71 if self._filesystem.exists(self._pid_file):
72 self._filesystem.remove(self._pid_file)
73
74 def _check_and_kill(self):
75 if self._executive.check_running_pid(self._pid):
76 host = self._port_obj.host
77 if host.platform.is_win() and not host.platform.is_cygwin():
78 # FIXME: https://bugs.webkit.org/show_bug.cgi?id=106838
79 # We need to kill all of the child processes as well as the
80 # parent, so we can't use executive.kill_process().
81 #
82 # If this is actually working, we should figure out a clean API.
83 self._executive.run_command(["taskkill.exe", "/f", "/t", "/pid", self._pid], error_handler=self._executive.ignore_error)
84 else:
85 self._executive.kill_process(self._pid)
86 return False
87 return True
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698