4c0943424c
This adds a new command abstraction for running commands on Android using dockered devices on swarming. The new abstraction handles pushing all required files to the device. The logic used for pushing and running is reused from the perf runner. This adds only the mjsunit test suite. Others will be handled in follow up CLs. The suite logic is enhanced with auto-detection of files to be pushed to devices, for e.g. load or import statements. Some test cases need an extra resource section for specifying required files. Remaining failing tests are marked in the status files for later triage. Bug: chromium:866862 Change-Id: I2b957559f07fdcd8c1bd2f7034f5ba7754a31fb7 Reviewed-on: https://chromium-review.googlesource.com/1150153 Reviewed-by: Sergiy Byelozyorov <sergiyb@chromium.org> Commit-Queue: Michael Achenbach <machenbach@chromium.org> Cr-Commit-Position: refs/heads/master@{#55041}
72 lines
2.1 KiB
Python
72 lines
2.1 KiB
Python
#!/usr/bin/env python
|
|
# Copyright 2017 the V8 project authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""
|
|
Wrapper script for verify-predictable mode. D8 is expected to be compiled with
|
|
v8_enable_verify_predictable.
|
|
|
|
The actual test command is expected to be passed to this wraper as is. E.g.:
|
|
predictable_wrapper.py path/to/d8 --test --predictable --flag1 --flag2
|
|
|
|
The command is run up to three times and the printed allocation hash is
|
|
compared. Differences are reported as errors.
|
|
"""
|
|
|
|
import sys
|
|
|
|
from testrunner.local import command
|
|
from testrunner.local import utils
|
|
|
|
MAX_TRIES = 3
|
|
TIMEOUT = 120
|
|
|
|
# Predictable mode works only when run on the host os.
|
|
command.setup(utils.GuessOS())
|
|
|
|
def main(args):
|
|
def allocation_str(stdout):
|
|
for line in reversed((stdout or '').splitlines()):
|
|
if line.startswith('### Allocations = '):
|
|
return line
|
|
return None
|
|
|
|
cmd = command.Command(args[0], args[1:], timeout=TIMEOUT)
|
|
|
|
previous_allocations = None
|
|
for run in range(1, MAX_TRIES + 1):
|
|
print '### Predictable run #%d' % run
|
|
output = cmd.execute()
|
|
if output.stdout:
|
|
print '### Stdout:'
|
|
print output.stdout
|
|
if output.stderr:
|
|
print '### Stderr:'
|
|
print output.stderr
|
|
print '### Return code: %s' % output.exit_code
|
|
if output.HasTimedOut():
|
|
# If we get a timeout in any run, we are in an unpredictable state. Just
|
|
# report it as a failure and don't rerun.
|
|
print '### Test timed out'
|
|
return 1
|
|
allocations = allocation_str(output.stdout)
|
|
if not allocations:
|
|
print ('### Test had no allocation output. Ensure this is built '
|
|
'with v8_enable_verify_predictable and that '
|
|
'--verify-predictable is passed at the cmd line.')
|
|
return 2
|
|
if previous_allocations and previous_allocations != allocations:
|
|
print '### Allocations differ'
|
|
return 3
|
|
if run >= MAX_TRIES:
|
|
# No difference on the last run -> report a success.
|
|
return 0
|
|
previous_allocations = allocations
|
|
# Unreachable.
|
|
assert False
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main(sys.argv[1:]))
|