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

Side by Side Diff: testing/test_env.py

Issue 880053003: Remove obsolete sandbox disabling logic from testing/test_env.py. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix nacl callsite Created 5 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
« no previous file with comments | « ppapi/native_client/tools/browser_tester/browser_tester.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Sets environment variables needed to run a chromium unit test.""" 6 """Sets environment variables needed to run a chromium unit test."""
7 7
8 import os 8 import os
9 import stat 9 import stat
10 import subprocess 10 import subprocess
11 import sys 11 import sys
12 12
13 # This is hardcoded to be src/ relative to this script. 13 # This is hardcoded to be src/ relative to this script.
14 ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 14 ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
15 15
16 CHROME_SANDBOX_ENV = 'CHROME_DEVEL_SANDBOX' 16 CHROME_SANDBOX_ENV = 'CHROME_DEVEL_SANDBOX'
17 CHROME_SANDBOX_PATH = '/opt/chromium/chrome_sandbox' 17 CHROME_SANDBOX_PATH = '/opt/chromium/chrome_sandbox'
18 18
19 19
20 def should_enable_sandbox(cmd, sandbox_path): 20 def get_sandbox_env(env):
21 """Return a boolean indicating that the current slave is capable of using the 21 """Returns the environment flags needed for the SUID sandbox to work."""
22 sandbox and should enable it. This should return True iff the slave is a
23 Linux host with the sandbox file present and configured correctly."""
24 if not (sys.platform.startswith('linux') and
25 os.path.exists(sandbox_path)):
26 return False
27
28 # Copy the check in tools/build/scripts/slave/runtest.py.
29 if '--lsan=1' in cmd:
30 return False
31
32 sandbox_stat = os.stat(sandbox_path)
33 if ((sandbox_stat.st_mode & stat.S_ISUID) and
34 (sandbox_stat.st_mode & stat.S_IRUSR) and
35 (sandbox_stat.st_mode & stat.S_IXUSR) and
36 (sandbox_stat.st_uid == 0)):
37 return True
38 return False
39
40
41 def get_sandbox_env(cmd, env, verbose=False):
42 """Checks enables the sandbox if it is required, otherwise it disables it.
43 Returns the environment flags to set."""
44 extra_env = {} 22 extra_env = {}
45 chrome_sandbox_path = env.get(CHROME_SANDBOX_ENV, CHROME_SANDBOX_PATH) 23 chrome_sandbox_path = env.get(CHROME_SANDBOX_ENV, CHROME_SANDBOX_PATH)
46 24 # The above would silently disable the SUID sandbox if the env value were
47 if should_enable_sandbox(cmd, chrome_sandbox_path): 25 # an empty string. We don't want to allow that. http://crbug.com/245376
48 if verbose: 26 # TODO(jln): Remove this check once it's no longer possible to disable the
49 print 'Enabling sandbox. Setting environment variable:' 27 # sandbox that way.
50 print ' %s="%s"' % (CHROME_SANDBOX_ENV, chrome_sandbox_path) 28 if not chrome_sandbox_path:
51 extra_env[CHROME_SANDBOX_ENV] = chrome_sandbox_path 29 chrome_sandbox_path = CHROME_SANDBOX_PATH
52 else: 30 extra_env[CHROME_SANDBOX_ENV] = chrome_sandbox_path
53 if verbose:
54 print 'Disabling sandbox. Setting environment variable:'
55 print ' CHROME_DEVEL_SANDBOX=""'
56 extra_env['CHROME_DEVEL_SANDBOX'] = ''
57 31
58 return extra_env 32 return extra_env
59 33
60 34
61 def trim_cmd(cmd): 35 def trim_cmd(cmd):
62 """Removes internal flags from cmd since they're just used to communicate from 36 """Removes internal flags from cmd since they're just used to communicate from
63 the host machine to this script running on the swarm slaves.""" 37 the host machine to this script running on the swarm slaves."""
64 internal_flags = frozenset(['--asan=0', '--asan=1', '--lsan=0', '--lsan=1']) 38 internal_flags = frozenset(['--asan=0', '--asan=1', '--lsan=0', '--lsan=1'])
65 return [i for i in cmd if i not in internal_flags] 39 return [i for i in cmd if i not in internal_flags]
66 40
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 # directory. 102 # directory.
129 extra_env['DYLD_LIBRARY_PATH'] = str(isolate_output_dir) 103 extra_env['DYLD_LIBRARY_PATH'] = str(isolate_output_dir)
130 104
131 return extra_env 105 return extra_env
132 106
133 107
134 def run_executable(cmd, env): 108 def run_executable(cmd, env):
135 """Runs an executable with: 109 """Runs an executable with:
136 - environment variable CR_SOURCE_ROOT set to the root directory. 110 - environment variable CR_SOURCE_ROOT set to the root directory.
137 - environment variable LANGUAGE to en_US.UTF-8. 111 - environment variable LANGUAGE to en_US.UTF-8.
138 - environment variable CHROME_DEVEL_SANDBOX set if need 112 - environment variable CHROME_DEVEL_SANDBOX set
139 - Reuses sys.executable automatically. 113 - Reuses sys.executable automatically.
140 """ 114 """
141 extra_env = {} 115 extra_env = {}
142 # Many tests assume a English interface... 116 # Many tests assume a English interface...
143 extra_env['LANG'] = 'en_US.UTF-8' 117 extra_env['LANG'] = 'en_US.UTF-8'
144 # Used by base/base_paths_linux.cc as an override. Just make sure the default 118 # Used by base/base_paths_linux.cc as an override. Just make sure the default
145 # logic is used. 119 # logic is used.
146 env.pop('CR_SOURCE_ROOT', None) 120 env.pop('CR_SOURCE_ROOT', None)
147 extra_env.update(get_sandbox_env(cmd, env)) 121 extra_env.update(get_sandbox_env(env))
148 122
149 # Copy logic from tools/build/scripts/slave/runtest.py. 123 # Copy logic from tools/build/scripts/slave/runtest.py.
150 asan = '--asan=1' in cmd 124 asan = '--asan=1' in cmd
151 lsan = '--lsan=1' in cmd 125 lsan = '--lsan=1' in cmd
152 126
153 if asan: 127 if asan:
154 extra_env.update(get_asan_env(cmd, lsan)) 128 extra_env.update(get_asan_env(cmd, lsan))
155 if lsan: 129 if lsan:
156 cmd.append('--no-sandbox') 130 cmd.append('--no-sandbox')
157 131
(...skipping 27 matching lines...) Expand all
185 print >> sys.stderr, 'Failed to start %s' % cmd 159 print >> sys.stderr, 'Failed to start %s' % cmd
186 raise 160 raise
187 161
188 162
189 def main(): 163 def main():
190 return run_executable(sys.argv[1:], os.environ.copy()) 164 return run_executable(sys.argv[1:], os.environ.copy())
191 165
192 166
193 if __name__ == '__main__': 167 if __name__ == '__main__':
194 sys.exit(main()) 168 sys.exit(main())
OLDNEW
« no previous file with comments | « ppapi/native_client/tools/browser_tester/browser_tester.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698