forked from OSchip/llvm-project
Add test event marking a test as explicitly eligible for rerun if it is marked flakey.
This will be used in a future change to support rerunning flakey tests that hit a test result isue in a low-load, single worker test runner phase. This is implemented as an additive-style event rather than being evaluated and added to the start_test event because the decorator code only runs after the start_test event is created and sent. i.e. LLDBTestResult.startTest() runs before the test method decorators run. llvm-svn: 255351
This commit is contained in:
parent
841b1732df
commit
9187f27e32
|
@ -63,6 +63,8 @@ from . import lldbtest_config
|
|||
from . import lldbutil
|
||||
from . import test_categories
|
||||
|
||||
from .result_formatter import EventBuilder
|
||||
|
||||
# dosep.py starts lots and lots of dotest instances
|
||||
# This option helps you find if two (or more) dotest instances are using the same
|
||||
# directory at the same time
|
||||
|
@ -784,6 +786,12 @@ def expectedFlakey(expected_fn, bugnumber=None):
|
|||
def wrapper(*args, **kwargs):
|
||||
from unittest2 import case
|
||||
self = args[0]
|
||||
if expected_fn(self):
|
||||
# Send event marking test as explicitly eligible for rerunning.
|
||||
if configuration.results_formatter_object is not None:
|
||||
# Mark this test as rerunnable.
|
||||
configuration.results_formatter_object.handle_event(
|
||||
EventBuilder.event_for_mark_test_rerun_eligible(self))
|
||||
try:
|
||||
func(*args, **kwargs)
|
||||
# don't retry if the test case is already decorated with xfail or skip
|
||||
|
|
|
@ -161,6 +161,7 @@ class EventBuilder(object):
|
|||
TYPE_JOB_RESULT = "job_result"
|
||||
TYPE_TEST_RESULT = "test_result"
|
||||
TYPE_TEST_START = "test_start"
|
||||
TYPE_MARK_TEST_RERUN_ELIGIBLE = "test_eligible_for_rerun"
|
||||
|
||||
# Test/Job Status Tags
|
||||
STATUS_EXCEPTIONAL_EXIT = "exceptional_exit"
|
||||
|
@ -226,6 +227,7 @@ class EventBuilder(object):
|
|||
"test_name": test_name,
|
||||
"test_filename": inspect.getfile(test.__class__)
|
||||
})
|
||||
|
||||
return event
|
||||
|
||||
@staticmethod
|
||||
|
@ -485,6 +487,26 @@ class EventBuilder(object):
|
|||
event["command_line"] = command_line
|
||||
return event
|
||||
|
||||
@staticmethod
|
||||
def event_for_mark_test_rerun_eligible(test):
|
||||
"""Creates an event that indicates the specified test is explicitly
|
||||
eligible for rerun.
|
||||
|
||||
Note there is a mode that will enable test rerun eligibility at the
|
||||
global level. These markings for explicit rerun eligibility are
|
||||
intended for the mode of running where only explicitly rerunnable
|
||||
tests are rerun upon hitting an issue.
|
||||
|
||||
@param test the TestCase instance to which this pertains.
|
||||
|
||||
@return an event that specifies the given test as being eligible to
|
||||
be rerun.
|
||||
"""
|
||||
event = EventBuilder._event_dictionary_common(
|
||||
test,
|
||||
EventBuilder.TYPE_MARK_TEST_RERUN_ELIGIBLE)
|
||||
return event
|
||||
|
||||
@staticmethod
|
||||
def add_entries_to_all_events(entries_dict):
|
||||
"""Specifies a dictionary of entries to add to all test events.
|
||||
|
|
|
@ -13,10 +13,6 @@ from __future__ import print_function
|
|||
|
||||
# System modules
|
||||
import inspect
|
||||
import os
|
||||
import platform
|
||||
import subprocess
|
||||
|
||||
|
||||
# Third-party modules
|
||||
import unittest2
|
||||
|
|
Loading…
Reference in New Issue