Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
flaky_attribute = dict((
(attr, getattr(
test_something,
attr,
None
)) for attr in FlakyNames()
))
self.assertIsNotNone(flaky_attribute)
self.assertDictContainsSubset(
{
FlakyNames.MIN_PASSES: min_passes,
FlakyNames.MAX_RUNS: max_runs,
FlakyNames.CURRENT_PASSES: 0,
FlakyNames.CURRENT_RUNS: 0,
FlakyNames.CURRENT_ERRORS: None
},
flaky_attribute
)
too_few_passes = current_passes < min_passes
retries_remaining = current_runs + 1 < max_runs
expected_plugin_handles_failure = too_few_passes and retries_remaining
info.when = 'call'
actual_plugin_handles_failure = plugin.add_failure(
test,
mock_error,
)
assert expected_plugin_handles_failure == actual_plugin_handles_failure
self._assert_flaky_attributes_contains(
{
FlakyNames.CURRENT_RUNS: current_runs + 1,
FlakyNames.CURRENT_ERRORS: current_errors
},
test,
)
if expected_plugin_handles_failure:
stream.writelines([
self._test_method_name,
' failed ({} runs remaining out of {}).'.format(
max_runs - current_runs - 1, max_runs
),
'\n\t',
unicode_type(mock_error.type),
'\n\t',
unicode_type(mock_error.value),
'\n\t',
unicode_type(mock_error.traceback),
'\n',
mock_error,
current_errors=None,
current_passes=0,
current_runs=0,
max_runs=2,
min_passes=1,
rerun_filter=None,
):
flaky(max_runs, min_passes, rerun_filter)(test)
if current_errors is None:
current_errors = [None]
else:
current_errors.append(None)
setattr(
test,
FlakyNames.CURRENT_ERRORS,
current_errors,
)
setattr(
test,
FlakyNames.CURRENT_PASSES,
current_passes,
)
setattr(
test,
FlakyNames.CURRENT_RUNS,
current_runs,
)
too_few_passes = current_passes < min_passes
retries_remaining = current_runs + 1 < max_runs
expected_plugin_handles_failure = too_few_passes and retries_remaining
current_errors=None,
current_passes=0,
current_runs=0,
is_failure=False,
is_test_method=True,
max_runs=2,
min_passes=1,
):
self._assert_flaky_plugin_configured()
self._expect_test_flaky(is_test_method, max_runs, min_passes)
if current_errors is None:
current_errors = [self._mock_error]
else:
current_errors.append(self._mock_error)
self._set_flaky_attribute(
FlakyNames.CURRENT_ERRORS,
current_errors,
)
self._set_flaky_attribute(
FlakyNames.CURRENT_PASSES,
current_passes,
)
self._set_flaky_attribute(
FlakyNames.CURRENT_RUNS,
current_runs,
)
retries_remaining = current_runs + 1 < max_runs
too_few_passes = current_passes < min_passes
expected_plugin_handles_failure = too_few_passes and retries_remaining
did_plugin_retry_test = max_runs > 1
self._mock_test_case,
self._mock_error,
)
self.assertEqual(
expected_plugin_handles_failure or None,
actual_plugin_handles_failure,
'Expected plugin{} to handle the test run, but it did{}.'.format(
' to' if expected_plugin_handles_failure else '',
'' if actual_plugin_handles_failure else ' not'
),
)
self._assert_flaky_attributes_contains(
{
FlakyNames.CURRENT_RUNS: current_runs + 1,
FlakyNames.CURRENT_ERRORS: tuple(current_errors),
},
)
expected_test_case_calls = [mock.call.address(), mock.call.address()]
expected_result_calls = []
if expected_plugin_handles_failure:
expected_test_case_calls.append(('__hash__',))
expected_stream_calls = [mock.call.writelines([
self._mock_test_method_name,
' failed ({} runs remaining out of {}).'.format(
max_runs - current_runs - 1, max_runs
),
'Exception: Error in test_method',
'\n',
])]
else:
if did_plugin_retry_test:
def _add_flaky_test_failure(cls, test, err):
"""
Store test error information on the test callable.
:param test:
The flaky test on which to update the flaky attributes.
:type test:
:class:`nose.case.Test` or :class:`Function`
:param err:
Information about the test failure (from sys.exc_info())
:type err:
`tuple` of `class`, :class:`Exception`, `traceback`
"""
errs = getattr(test, FlakyNames.CURRENT_ERRORS, None) or []
cls._set_flaky_attribute(test, FlakyNames.CURRENT_ERRORS, errs)
errs.append(err)
def _add_flaky_test_failure(cls, test, err):
"""
Store test error information on the test callable.
:param test:
The flaky test on which to update the flaky attributes.
:type test:
:class:`nose.case.Test` or :class:`Function`
:param err:
Information about the test failure (from sys.exc_info())
:type err:
`tuple` of `class`, :class:`Exception`, `traceback`
"""
errs = getattr(test, FlakyNames.CURRENT_ERRORS, None) or []
cls._set_flaky_attribute(test, FlakyNames.CURRENT_ERRORS, errs)
errs.append(err)