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:
Todd Fiala 2015-12-11 18:06:47 +00:00
parent 841b1732df
commit 9187f27e32
3 changed files with 30 additions and 4 deletions

View File

@ -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

View File

@ -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.

View File

@ -13,10 +13,6 @@ from __future__ import print_function
# System modules
import inspect
import os
import platform
import subprocess
# Third-party modules
import unittest2