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

Side by Side Diff: webkit/tools/layout_tests/layout_package/platform_utils_mac.py

Issue 545145: Move the layout test scripts into a 'webkitpy' subdirectory in preparation... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: try to de-confuse svn and the try bots Created 10 years, 11 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
(Empty)
1 # Copyright (c) 2008-2009 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """This is the Mac implementation of the layout_package.platform_utils
6 package. This file should only be imported by that package."""
7
8 import os
9 import platform
10 import signal
11 import subprocess
12
13 import path_utils
14
15
16 def PlatformName():
17 """Returns the name of the platform we're currently running on."""
18 # At the moment all chromium mac results are version-independent. At some
19 # point we may need to return 'chromium-mac' + PlatformVersion()
20 return 'chromium-mac'
21
22
23 def PlatformVersion():
24 """Returns the version string for the platform, e.g. '-vista' or
25 '-snowleopard'. If the platform does not distinguish between
26 minor versions, it returns ''."""
27 os_version_string = platform.mac_ver()[0] # e.g. "10.5.6"
28 if not os_version_string:
29 return '-leopard'
30
31 release_version = int(os_version_string.split('.')[1])
32
33 # we don't support 'tiger' or earlier releases
34 if release_version == 5:
35 return '-leopard'
36 elif release_version == 6:
37 return '-snowleopard'
38
39 return ''
40
41
42 def GetNumCores():
43 """Returns the number of cores on the machine. For hyperthreaded machines,
44 this will be double the number of actual processors."""
45 return int(os.popen2("sysctl -n hw.ncpu")[1].read())
46
47
48 def BaselinePath(platform=None):
49 """Returns the path relative to the top of the source tree for the
50 baselines for the specified platform version. If |platform| is None,
51 then the version currently in use is used."""
52 if platform is None:
53 platform = PlatformName()
54 return path_utils.PathFromBase('webkit', 'data', 'layout_tests',
55 'platform', platform, 'LayoutTests')
56
57 # TODO: We should add leopard and snowleopard to the list of paths to check
58 # once we start running the tests from snowleopard.
59
60
61 def BaselineSearchPath(platform=None):
62 """Returns the list of directories to search for baselines/results, in
63 order of preference. Paths are relative to the top of the source tree."""
64 return [BaselinePath(platform),
65 path_utils.WebKitBaselinePath('mac' + PlatformVersion()),
66 path_utils.WebKitBaselinePath('mac')]
67
68
69 def WDiffPath():
70 """Path to the WDiff executable, which we assume is already installed and
71 in the user's $PATH."""
72 return 'wdiff'
73
74
75 def ImageDiffPath(target):
76 """Path to the image_diff executable
77
78 Args:
79 target: build type - 'Debug','Release',etc."""
80 return path_utils.PathFromBase('xcodebuild', target, 'image_diff')
81
82
83 def LayoutTestHelperPath(target):
84 """Path to the layout_test_helper executable, if needed, empty otherwise
85
86 Args:
87 target: build type - 'Debug','Release',etc."""
88 return path_utils.PathFromBase('xcodebuild', target, 'layout_test_helper')
89
90
91 def TestShellPath(target):
92 """Path to the test_shell executable.
93
94 Args:
95 target: build type - 'Debug','Release',etc."""
96 # TODO(pinkerton): make |target| happy with case-sensitive file systems.
97 return path_utils.PathFromBase('xcodebuild', target, 'TestShell.app',
98 'Contents', 'MacOS', 'TestShell')
99
100
101 def ApacheExecutablePath():
102 """Returns the executable path to start Apache"""
103 return os.path.join("/usr", "sbin", "httpd")
104
105
106 def ApacheConfigFilePath():
107 """Returns the path to Apache config file"""
108 return path_utils.PathFromBase("third_party", "WebKit", "LayoutTests",
109 "http", "conf", "apache2-httpd.conf")
110
111
112 def LigHTTPdExecutablePath():
113 """Returns the executable path to start LigHTTPd"""
114 return path_utils.PathFromBase('third_party', 'lighttpd', 'mac',
115 'bin', 'lighttpd')
116
117
118 def LigHTTPdModulePath():
119 """Returns the library module path for LigHTTPd"""
120 return path_utils.PathFromBase('third_party', 'lighttpd', 'mac', 'lib')
121
122
123 def LigHTTPdPHPPath():
124 """Returns the PHP executable path for LigHTTPd"""
125 return path_utils.PathFromBase('third_party', 'lighttpd', 'mac', 'bin',
126 'php-cgi')
127
128
129 def ShutDownHTTPServer(server_pid):
130 """Shut down the lighttpd web server. Blocks until it's fully shut down.
131
132 Args:
133 server_pid: The process ID of the running server.
134 """
135 # server_pid is not set when "http_server.py stop" is run manually.
136 if server_pid is None:
137 # TODO(mmoss) This isn't ideal, since it could conflict with lighttpd
138 # processes not started by http_server.py, but good enough for now.
139 KillAllProcess('lighttpd')
140 KillAllProcess('httpd')
141 else:
142 try:
143 os.kill(server_pid, signal.SIGTERM)
144 # TODO(mmoss) Maybe throw in a SIGKILL just to be sure?
145 except OSError:
146 # Sometimes we get a bad PID (e.g. from a stale httpd.pid file),
147 # so if kill fails on the given PID, just try to 'killall' web
148 # servers.
149 ShutDownHTTPServer(None)
150
151
152 def KillProcess(pid):
153 """Forcefully kill the process.
154
155 Args:
156 pid: The id of the process to be killed.
157 """
158 os.kill(pid, signal.SIGKILL)
159
160
161 def KillAllProcess(process_name):
162 # On Mac OS X 10.6, killall has a new constraint: -SIGNALNAME or
163 # -SIGNALNUMBER must come first. Example problem:
164 # $ killall -u $USER -TERM lighttpd
165 # killall: illegal option -- T
166 # Use of the earlier -TERM placement is just fine on 10.5.
167 null = open(os.devnull)
168 subprocess.call(['killall', '-TERM', '-u', os.getenv('USER'),
169 process_name], stderr=null)
170 null.close()
171
172
173 def KillAllTestShells():
174 """Kills all instances of the test_shell binary currently running."""
175 KillAllProcess('TestShell')
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698