diff options
author | Richard Samuels <richard.l.samuels@gmail.com> | 2022-05-20 13:19:24 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-05-20 13:50:13 +0000 |
commit | 09173712c719030f4c1ee499578e25d10fbc536f (patch) | |
tree | 9d39872fbe0c5625844642535e50d02c118f2704 /buildscripts/tests/test_simple_report.py | |
parent | 7117730842303f518a50e394b05b2b935bdd24b7 (diff) | |
download | mongo-09173712c719030f4c1ee499578e25d10fbc536f.tar.gz |
SERVER-65581 generate report files for linters
Diffstat (limited to 'buildscripts/tests/test_simple_report.py')
-rw-r--r-- | buildscripts/tests/test_simple_report.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/buildscripts/tests/test_simple_report.py b/buildscripts/tests/test_simple_report.py new file mode 100644 index 00000000000..456a9d9dc47 --- /dev/null +++ b/buildscripts/tests/test_simple_report.py @@ -0,0 +1,109 @@ +# pylint: disable=missing-function-docstring,missing-class-docstring +"""Simple_report test.""" +import unittest +import random +import textwrap +import sys +import os +from unittest.mock import patch, mock_open + +from click.testing import CliRunner + +import buildscripts.simple_report + + +def ns(name): # pylint: disable=invalid-name + return f"buildscripts.simple_report.{name}" + + +def fix_newlines(string: str) -> str: + # These need to be CRLF newlines on Windows, so we split and rejoin + # on os.linesep to fix that + return os.linesep.join(string.splitlines()) + + +class TestSimpleReport(unittest.TestCase): + def __init__(self, *args, **kwargs): + super(TestSimpleReport, self).__init__(*args, **kwargs) + self.seed = random.randrange(sys.maxsize) + self.rng = random.Random(self.seed) + + def test_trivial_report(self): + """Run test 100x with randomly generated error codes.""" + print(f"TestSimpleReport.test_trivial_report seed: {self.seed}") + for _ in range(0, 100): + self._test_trivial_report() # pylint: disable=no-value-for-parameter + + @patch(ns("_try_combine_reports")) + @patch(ns("_clean_log_file")) + @patch(ns("_put_report")) + def _test_trivial_report(self, mock_put_report, mock_clean_log_file, _mock_try_combine_reports): + exit_code = self.rng.randint(0, 254) + print(f"Trying exit code: {exit_code}") + mock_clean_log_file.return_value = "I'm a little test log, short and stdout." + runner = CliRunner() + result = runner.invoke( + buildscripts.simple_report.main, + ["--test-name", "potato", "--log-file", "test.log", "--exit-code", + str(exit_code)]) + report = mock_put_report.call_args[0][0] + results = mock_put_report.call_args[0][0]["results"] + if exit_code == 0: + self.assertEqual(results[0]["status"], "pass") + self.assertEqual(report["failures"], 0) + else: + self.assertEqual(results[0]["status"], "fail") + self.assertEqual(report["failures"], 1) + self.assertEqual(result.exit_code, 0) + + @patch(ns("_try_combine_reports")) + @patch(ns("_put_report")) + def test_truncate_scons(self, mock_put_report, _mock_try_combine_reports): + exit_code = 0 + data = fix_newlines( + textwrap.dedent("""\ +TO BE TRUNCATED +TO BE TRUNCATED +TO BE TRUNCATED +TO BE TRUNCATED +scons: done reading SConscript files. +scons: Building targets ... +interesting part""")) + + with patch("builtins.open", mock_open(read_data=data)) as _mock_file: + runner = CliRunner() + result = runner.invoke( + buildscripts.simple_report.main, + ["--test-name", "potato", "--log-file", "test.log", "--exit-code", + str(exit_code)]) + report = mock_put_report.call_args[0][0] + results = mock_put_report.call_args[0][0]["results"] + self.assertEqual(results[0]["status"], "pass") + self.assertEqual(results[0]["log_raw"], "interesting part") + self.assertEqual(report["failures"], 0) + self.assertEqual(result.exit_code, 0) + + @patch(ns("_try_combine_reports")) + @patch(ns("_put_report")) + def test_non_scons_log(self, mock_put_report, _mock_try_combine_reports): + exit_code = 0 + data = fix_newlines( + textwrap.dedent("""\ +*NOT* TO BE TRUNCATED +*NOT* TO BE TRUNCATED +*NOT* TO BE TRUNCATED +*NOT* TO BE TRUNCATED +interesting part""")) + + with patch("builtins.open", mock_open(read_data=data)) as _mock_file: + runner = CliRunner() + result = runner.invoke( + buildscripts.simple_report.main, + ["--test-name", "potato", "--log-file", "test.log", "--exit-code", + str(exit_code)]) + report = mock_put_report.call_args[0][0] + results = mock_put_report.call_args[0][0]["results"] + self.assertEqual(results[0]["status"], "pass") + self.assertEqual(results[0]["log_raw"], data) + self.assertEqual(report["failures"], 0) + self.assertEqual(result.exit_code, 0) |