summaryrefslogtreecommitdiff
path: root/buildscripts/tests/test_simple_report.py
diff options
context:
space:
mode:
authorRichard Samuels <richard.l.samuels@gmail.com>2022-05-20 13:19:24 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-05-20 13:50:13 +0000
commit09173712c719030f4c1ee499578e25d10fbc536f (patch)
tree9d39872fbe0c5625844642535e50d02c118f2704 /buildscripts/tests/test_simple_report.py
parent7117730842303f518a50e394b05b2b935bdd24b7 (diff)
downloadmongo-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.py109
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)