media/webrtc/trunk/build/android/pylib/python_test_caller.py

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 # Copyright (c) 2012 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.
     5 """Helper module for calling python-based tests."""
     8 import logging
     9 import sys
    10 import time
    12 from test_result import TestResults
    15 def CallPythonTest(test, options):
    16   """Invokes a test function and translates Python exceptions into test results.
    18   This method invokes SetUp()/TearDown() on the test. It is intended to be
    19   resilient to exceptions in SetUp(), the test itself, and TearDown(). Any
    20   Python exception means the test is marked as failed, and the test result will
    21   contain information about the exception.
    23   If SetUp() raises an exception, the test is not run.
    25   If TearDown() raises an exception, the test is treated as a failure. However,
    26   if the test itself raised an exception beforehand, that stack trace will take
    27   precedence whether or not TearDown() also raised an exception.
    29   shard_index is not applicable in single-device scenarios, when test execution
    30   is serial rather than parallel. Tests can use this to bring up servers with
    31   unique port numbers, for example. See also python_test_sharder.
    33   Args:
    34     test: an object which is ostensibly a subclass of PythonTestBase.
    35     options: Options to use for setting up tests.
    37   Returns:
    38     A TestResults object which contains any results produced by the test or, in
    39     the case of a Python exception, the Python exception info.
    40   """
    42   start_date_ms = int(time.time()) * 1000
    43   failed = False
    45   try:
    46     test.SetUp(options)
    47   except Exception:
    48     failed = True
    49     logging.exception(
    50         'Caught exception while trying to run SetUp() for test: ' +
    51         test.qualified_name)
    52     # Tests whose SetUp() method has failed are likely to fail, or at least
    53     # yield invalid results.
    54     exc_info = sys.exc_info()
    55     return TestResults.FromPythonException(test.qualified_name, start_date_ms,
    56                                            exc_info)
    58   try:
    59     result = test.Run()
    60   except Exception:
    61     # Setting this lets TearDown() avoid stomping on our stack trace from Run()
    62     # should TearDown() also raise an exception.
    63     failed = True
    64     logging.exception('Caught exception while trying to run test: ' +
    65                       test.qualified_name)
    66     exc_info = sys.exc_info()
    67     result = TestResults.FromPythonException(test.qualified_name, start_date_ms,
    68                                              exc_info)
    70   try:
    71     test.TearDown()
    72   except Exception:
    73     logging.exception(
    74         'Caught exception while trying run TearDown() for test: ' +
    75         test.qualified_name)
    76     if not failed:
    77       # Don't stomp the error during the test if TearDown blows up. This is a
    78       # trade-off: if the test fails, this will mask any problem with TearDown
    79       # until the test is fixed.
    80       exc_info = sys.exc_info()
    81       result = TestResults.FromPythonException(test.qualified_name,
    82                                                start_date_ms, exc_info)
    84   return result

mercurial