OLD | NEW |
1 # Copyright 2012 the V8 project authors. All rights reserved. | 1 # Copyright 2012 the V8 project authors. All rights reserved. |
2 # Redistribution and use in source and binary forms, with or without | 2 # Redistribution and use in source and binary forms, with or without |
3 # modification, are permitted provided that the following conditions are | 3 # modification, are permitted provided that the following conditions are |
4 # met: | 4 # met: |
5 # | 5 # |
6 # * Redistributions of source code must retain the above copyright | 6 # * Redistributions of source code must retain the above copyright |
7 # notice, this list of conditions and the following disclaimer. | 7 # notice, this list of conditions and the following disclaimer. |
8 # * Redistributions in binary form must reproduce the above | 8 # * Redistributions in binary form must reproduce the above |
9 # copyright notice, this list of conditions and the following | 9 # copyright notice, this list of conditions and the following |
10 # disclaimer in the documentation and/or other materials provided | 10 # disclaimer in the documentation and/or other materials provided |
(...skipping 10 matching lines...) Expand all Loading... |
21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | 27 |
28 | 28 |
29 import collections | 29 import collections |
30 import os | 30 import os |
| 31 import re |
31 import shutil | 32 import shutil |
32 import sys | 33 import sys |
33 import time | 34 import time |
34 | 35 |
35 from pool import Pool | 36 from pool import Pool |
36 from . import commands | 37 from . import commands |
37 from . import perfdata | 38 from . import perfdata |
38 from . import statusfile | 39 from . import statusfile |
39 from . import testsuite | 40 from . import testsuite |
40 from . import utils | 41 from . import utils |
| 42 from ..objects import output |
41 | 43 |
42 | 44 |
43 # Base dir of the v8 checkout. | 45 # Base dir of the v8 checkout. |
44 BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname( | 46 BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname( |
45 os.path.abspath(__file__))))) | 47 os.path.abspath(__file__))))) |
46 TEST_DIR = os.path.join(BASE_DIR, "test") | 48 TEST_DIR = os.path.join(BASE_DIR, "test") |
47 | 49 |
48 | 50 |
49 class Instructions(object): | 51 class Instructions(object): |
50 def __init__(self, command, dep_command, test_id, timeout, verbose): | 52 def __init__(self, command, dep_command, test_id, timeout, verbose): |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 def Run(self, process_context): | 129 def Run(self, process_context): |
128 """Executes the job. | 130 """Executes the job. |
129 | 131 |
130 Args: | 132 Args: |
131 process_context: Process-local information that is initialized by the | 133 process_context: Process-local information that is initialized by the |
132 executing worker. | 134 executing worker. |
133 """ | 135 """ |
134 raise NotImplementedError() | 136 raise NotImplementedError() |
135 | 137 |
136 | 138 |
| 139 def SetupProblem(exception, test): |
| 140 stderr = ">>> EXCEPTION: %s\n" % exception |
| 141 match = re.match(r"^.*No such file or directory: '(.*)'$", str(exception)) |
| 142 if match: |
| 143 # Extra debuging information when files are claimed missing. |
| 144 f = match.group(1) |
| 145 stderr += ">>> File %s exists? -> %s\n" % (f, os.path.exists(f)) |
| 146 return test.id, output.Output(1, False, "", stderr), 0 |
| 147 |
| 148 |
137 class TestJob(Job): | 149 class TestJob(Job): |
138 def __init__(self, test): | 150 def __init__(self, test): |
139 self.test = test | 151 self.test = test |
140 | 152 |
141 def Run(self, process_context): | 153 def Run(self, process_context): |
142 # Retrieve a new suite object on the worker-process side. The original | 154 try: |
143 # suite object isn't pickled. | 155 # Retrieve a new suite object on the worker-process side. The original |
144 self.test.SetSuiteObject(process_context.suites) | 156 # suite object isn't pickled. |
145 instr = _GetInstructions(self.test, process_context.context) | 157 self.test.SetSuiteObject(process_context.suites) |
| 158 instr = _GetInstructions(self.test, process_context.context) |
| 159 except Exception, e: |
| 160 return SetupProblem(e, self.test) |
146 | 161 |
147 start_time = time.time() | 162 start_time = time.time() |
148 if instr.dep_command is not None: | 163 if instr.dep_command is not None: |
149 dep_output = commands.Execute( | 164 dep_output = commands.Execute( |
150 instr.dep_command, instr.verbose, instr.timeout) | 165 instr.dep_command, instr.verbose, instr.timeout) |
151 # TODO(jkummerow): We approximate the test suite specific function | 166 # TODO(jkummerow): We approximate the test suite specific function |
152 # IsFailureOutput() by just checking the exit code here. Currently | 167 # IsFailureOutput() by just checking the exit code here. Currently |
153 # only cctests define dependencies, for which this simplification is | 168 # only cctests define dependencies, for which this simplification is |
154 # correct. | 169 # correct. |
155 if dep_output.exit_code != 0: | 170 if dep_output.exit_code != 0: |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 if self.context.verbose: | 379 if self.context.verbose: |
365 print text | 380 print text |
366 sys.stdout.flush() | 381 sys.stdout.flush() |
367 | 382 |
368 | 383 |
369 class BreakNowException(Exception): | 384 class BreakNowException(Exception): |
370 def __init__(self, value): | 385 def __init__(self, value): |
371 self.value = value | 386 self.value = value |
372 def __str__(self): | 387 def __str__(self): |
373 return repr(self.value) | 388 return repr(self.value) |
OLD | NEW |