1022247ce5
prd-number-check / require-numbered-prds (pull_request) Successful in 7s
tracker-policy-pr / check-pr (pull_request) Successful in 8s
lint / lint (push) Successful in 58s
test / unit (pull_request) Successful in 48s
test / integration-docker (pull_request) Failing after 19m28s
test / coverage (pull_request) Has been skipped
92 lines
3.0 KiB
Python
92 lines
3.0 KiB
Python
"""Unit tests for CI's unittest execution-count gate."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from contextlib import redirect_stderr
|
|
from io import StringIO
|
|
from unittest.mock import Mock, patch
|
|
|
|
from scripts.unittest_gate import assurance_errors, main
|
|
|
|
|
|
class TestAssuranceErrors(unittest.TestCase):
|
|
def test_accepts_suite_that_meets_minimum_without_skips(self) -> None:
|
|
self.assertEqual(
|
|
[],
|
|
assurance_errors(
|
|
tests_run=22, skipped=0, minimum_executed=22, fail_on_skip=True
|
|
),
|
|
)
|
|
|
|
def test_rejects_green_suite_below_execution_minimum(self) -> None:
|
|
errors = assurance_errors(
|
|
tests_run=22, skipped=18, minimum_executed=22, fail_on_skip=False
|
|
)
|
|
self.assertEqual(1, len(errors))
|
|
self.assertIn("executed 4", errors[0])
|
|
|
|
def test_rejects_any_skip_when_required(self) -> None:
|
|
errors = assurance_errors(
|
|
tests_run=23, skipped=1, minimum_executed=22, fail_on_skip=True
|
|
)
|
|
self.assertEqual(["1 test(s) skipped in a no-skip suite"], errors)
|
|
|
|
def test_main_accepts_successful_assured_suite(self) -> None:
|
|
result = Mock(
|
|
testsRun=22,
|
|
skipped=[],
|
|
wasSuccessful=Mock(return_value=True),
|
|
)
|
|
runner = Mock()
|
|
runner.run.return_value = result
|
|
with patch(
|
|
"scripts.unittest_gate.unittest.defaultTestLoader.discover",
|
|
return_value=Mock(),
|
|
) as discover, patch(
|
|
"scripts.unittest_gate.unittest.TextTestRunner",
|
|
return_value=runner,
|
|
) as runner_type:
|
|
self.assertEqual(
|
|
0,
|
|
main([
|
|
"-s", "tests/integration",
|
|
"-t", ".",
|
|
"-p", "test_*.py",
|
|
"--minimum-executed", "22",
|
|
"--fail-on-skip",
|
|
"-v",
|
|
]),
|
|
)
|
|
discover.assert_called_once_with(
|
|
"tests/integration", pattern="test_*.py", top_level_dir="."
|
|
)
|
|
runner_type.assert_called_once_with(verbosity=2)
|
|
|
|
def test_main_rejects_unsuccessful_underfilled_suite(self) -> None:
|
|
result = Mock(
|
|
testsRun=1,
|
|
skipped=[(Mock(), "not available")],
|
|
wasSuccessful=Mock(return_value=False),
|
|
)
|
|
runner = Mock()
|
|
runner.run.return_value = result
|
|
error = StringIO()
|
|
with patch(
|
|
"scripts.unittest_gate.unittest.defaultTestLoader.discover",
|
|
return_value=Mock(),
|
|
), patch(
|
|
"scripts.unittest_gate.unittest.TextTestRunner",
|
|
return_value=runner,
|
|
), redirect_stderr(error):
|
|
self.assertEqual(
|
|
1,
|
|
main(["--minimum-executed", "2", "--fail-on-skip"]),
|
|
)
|
|
self.assertIn("below required minimum", error.getvalue())
|
|
self.assertIn("skipped in a no-skip suite", error.getvalue())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|