summaryrefslogtreecommitdiff
path: root/buildscripts/tests/resmokelib
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-14 14:26:38 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-14 14:26:38 -0300
commit294bc6ecabf14c09c9bc8644704921dcf97cb44e (patch)
tree279b1e0bab53901a1647ac63c1c724f0f789a663 /buildscripts/tests/resmokelib
parent70be7c27a251621187a1de533462ae2bb1e3bd39 (diff)
parent1e917fd798aa25b7066d4b414b51184f13d5a092 (diff)
Update upstream source from tag 'upstream/6.0.10'debian/6.0.10-1
Update to upstream version '6.0.10' with Debian dir 2d176fa254eee97b139f712fec5709641335a8c3
Diffstat (limited to 'buildscripts/tests/resmokelib')
-rw-r--r--buildscripts/tests/resmokelib/multiversion/test_multiversion_service.py32
-rw-r--r--buildscripts/tests/resmokelib/test_parser.py1
-rw-r--r--buildscripts/tests/resmokelib/testing/test_symbolizer_service.py250
3 files changed, 268 insertions, 15 deletions
diff --git a/buildscripts/tests/resmokelib/multiversion/test_multiversion_service.py b/buildscripts/tests/resmokelib/multiversion/test_multiversion_service.py
index 2f685f36c97..274b7e5ffbe 100644
--- a/buildscripts/tests/resmokelib/multiversion/test_multiversion_service.py
+++ b/buildscripts/tests/resmokelib/multiversion/test_multiversion_service.py
@@ -38,6 +38,8 @@ class TestCalculateFcvConstants(TestCase):
"100.0"
],
"longTermSupportReleases": ["4.0", "4.2", "4.4", "5.0"],
+ "eolVersions":
+ ["2.0", "2.2", "2.4", "2.6", "3.0", "3.2", "3.4", "3.6", "4.0", "5.1", "5.2"],
})
multiversion_service = under_test.MultiversionService(
@@ -45,15 +47,15 @@ class TestCalculateFcvConstants(TestCase):
mongo_releases=mongo_releases,
)
- fcv_constants = multiversion_service.calculate_fcv_constants()
+ version_constants = multiversion_service.calculate_version_constants()
- self.assertEqual(fcv_constants.latest, Version("6.0"))
- self.assertEqual(fcv_constants.last_continuous, Version("5.3"))
- self.assertEqual(fcv_constants.last_lts, Version("5.0"))
- self.assertEqual(fcv_constants.requires_fcv_tag_list,
+ self.assertEqual(version_constants.latest, Version("6.0"))
+ self.assertEqual(version_constants.last_continuous, Version("5.3"))
+ self.assertEqual(version_constants.last_lts, Version("5.0"))
+ self.assertEqual(version_constants.requires_fcv_tag_list,
[Version(v) for v in ["5.1", "5.2", "5.3", "6.0"]])
- self.assertEqual(fcv_constants.requires_fcv_tag_list_continuous, [Version("6.0")])
- self.assertEqual(fcv_constants.fcvs_less_than_latest, [
+ self.assertEqual(version_constants.requires_fcv_tag_list_continuous, [Version("6.0")])
+ self.assertEqual(version_constants.fcvs_less_than_latest, [
Version(v)
for v in ["4.0", "4.2", "4.4", "4.7", "4.8", "4.9", "5.0", "5.1", "5.2", "5.3"]
])
@@ -67,6 +69,8 @@ class TestCalculateFcvConstants(TestCase):
"6.1", "100.0"
],
"longTermSupportReleases": ["4.0", "4.2", "4.4", "5.0", "6.0"],
+ "eolVersions":
+ ["2.0", "2.2", "2.4", "2.6", "3.0", "3.2", "3.4", "3.6", "4.0", "5.1", "5.2"],
})
multiversion_service = under_test.MultiversionService(
@@ -74,15 +78,15 @@ class TestCalculateFcvConstants(TestCase):
mongo_releases=mongo_releases,
)
- fcv_constants = multiversion_service.calculate_fcv_constants()
+ version_constants = multiversion_service.calculate_version_constants()
- self.assertEqual(fcv_constants.latest, Version("100.0"))
- self.assertEqual(fcv_constants.last_continuous, Version("6.1"))
- self.assertEqual(fcv_constants.last_lts, Version("6.0"))
- self.assertEqual(fcv_constants.requires_fcv_tag_list,
+ self.assertEqual(version_constants.latest, Version("100.0"))
+ self.assertEqual(version_constants.last_continuous, Version("6.1"))
+ self.assertEqual(version_constants.last_lts, Version("6.0"))
+ self.assertEqual(version_constants.requires_fcv_tag_list,
[Version(v) for v in ["6.1", "100.0"]])
- self.assertEqual(fcv_constants.requires_fcv_tag_list_continuous, [Version("100.0")])
- self.assertEqual(fcv_constants.fcvs_less_than_latest, [
+ self.assertEqual(version_constants.requires_fcv_tag_list_continuous, [Version("100.0")])
+ self.assertEqual(version_constants.fcvs_less_than_latest, [
Version(v) for v in
["4.0", "4.2", "4.4", "4.7", "4.8", "4.9", "5.0", "5.1", "5.2", "5.3", "6.0", "6.1"]
])
diff --git a/buildscripts/tests/resmokelib/test_parser.py b/buildscripts/tests/resmokelib/test_parser.py
index b9fc74f088b..c1ba97c6056 100644
--- a/buildscripts/tests/resmokelib/test_parser.py
+++ b/buildscripts/tests/resmokelib/test_parser.py
@@ -248,7 +248,6 @@ class TestLocalCommandLine(unittest.TestCase):
cmdline = to_local_args([
"run",
"--suites=my_suite",
- "--reportFailureStatus=fail",
"--reportFile=report.json",
"--perfReportFile=perf.json",
"--storageEngine=my_storage_engine",
diff --git a/buildscripts/tests/resmokelib/testing/test_symbolizer_service.py b/buildscripts/tests/resmokelib/testing/test_symbolizer_service.py
new file mode 100644
index 00000000000..caeb81e1e4b
--- /dev/null
+++ b/buildscripts/tests/resmokelib/testing/test_symbolizer_service.py
@@ -0,0 +1,250 @@
+"""Unit tests for buildscripts/resmokelib/testing/symbolizer_service.py."""
+# pylint: disable=missing-docstring
+import os
+import unittest
+from pathlib import Path
+from tempfile import TemporaryDirectory
+from unittest.mock import MagicMock
+
+from buildscripts.resmokelib.testing import symbolizer_service as under_test
+
+
+def mock_resmoke_symbolizer_config():
+ config_mock: under_test.ResmokeSymbolizerConfig = MagicMock(
+ spec_set=under_test.ResmokeSymbolizerConfig)
+ config_mock.evg_task_id = "evg_task_id"
+ config_mock.client_id = "client_id"
+ config_mock.client_secret = "client_secret"
+ config_mock.is_windows.return_value = False
+ config_mock.is_macos.return_value = False
+ return config_mock
+
+
+class TestResmokeSymbolizer(unittest.TestCase):
+ def setUp(self) -> None:
+ self.config_mock = mock_resmoke_symbolizer_config()
+ self.symbolizer_service_mock: under_test.SymbolizerService = MagicMock(
+ spec_set=under_test.SymbolizerService)
+ self.file_service_mock: under_test.FileService = MagicMock(spec_set=under_test.FileService)
+ self.resmoke_symbolizer = under_test.ResmokeSymbolizer(
+ self.config_mock, self.symbolizer_service_mock, self.file_service_mock)
+
+ def test_symbolize_test_logs_process_all_files(self):
+ stacktrace_files = [f"file{i}.stacktrace" for i in range(5)]
+ self.file_service_mock.filter_out_non_files.return_value = stacktrace_files
+
+ self.resmoke_symbolizer.symbolize_test_logs(MagicMock())
+
+ self.assertEqual(self.symbolizer_service_mock.run_symbolizer_script.call_count, 5)
+ for i, call in enumerate(self.symbolizer_service_mock.run_symbolizer_script.call_arg_list):
+ self.assertEqual(call.args[0], f"file{i}.stacktrace")
+ self.file_service_mock.remove_all.assert_called_once_with(stacktrace_files)
+
+ def test_symbolize_test_logs_hit_timeout(self):
+ stacktrace_files = [f"file{i}.stacktrace" for i in range(5)]
+ self.file_service_mock.filter_out_non_files.return_value = stacktrace_files
+
+ self.resmoke_symbolizer.symbolize_test_logs(MagicMock(), 0)
+
+ self.assertEqual(self.symbolizer_service_mock.run_symbolizer_script.call_count, 1)
+ for i, call in enumerate(self.symbolizer_service_mock.run_symbolizer_script.call_arg_list):
+ self.assertEqual(call.args[0], f"file{i}.stacktrace")
+ self.file_service_mock.remove_all.assert_called_once_with(stacktrace_files)
+
+ def test_symbolize_test_logs_should_not_symbolize(self):
+ self.config_mock.is_windows.return_value = True
+
+ self.resmoke_symbolizer.symbolize_test_logs(MagicMock())
+ self.symbolizer_service_mock.run_symbolizer_script.assert_not_called()
+
+ def test_symbolize_test_logs_could_not_get_dbpath(self):
+ self.file_service_mock.check_path_exists.return_value = False
+
+ self.resmoke_symbolizer.symbolize_test_logs(MagicMock())
+ self.symbolizer_service_mock.run_symbolizer_script.assert_not_called()
+
+ def test_symbolize_test_logs_did_not_find_files(self):
+ self.file_service_mock.find_all_children_recursively.return_value = []
+
+ self.resmoke_symbolizer.symbolize_test_logs(MagicMock())
+ self.symbolizer_service_mock.run_symbolizer_script.assert_not_called()
+
+ def test_should_not_symbolize_if_not_in_evergreen(self):
+ self.config_mock.evg_task_id = None
+ ret = self.resmoke_symbolizer.should_symbolize(MagicMock())
+ self.assertFalse(ret)
+
+ def test_should_not_symbolize_if_secrets_are_absent(self):
+ self.config_mock.client_id = None
+ self.config_mock.client_secret = None
+ ret = self.resmoke_symbolizer.should_symbolize(MagicMock())
+ self.assertFalse(ret)
+
+ def test_should_not_symbolize_if_on_windows(self):
+ self.config_mock.is_windows.return_value = True
+ ret = self.resmoke_symbolizer.should_symbolize(MagicMock())
+ self.assertFalse(ret)
+
+ def test_should_not_symbolize_if_on_macos(self):
+ self.config_mock.is_macos.return_value = True
+ ret = self.resmoke_symbolizer.should_symbolize(MagicMock())
+ self.assertFalse(ret)
+
+ def test_should_symbolize_return_true(self):
+ ret = self.resmoke_symbolizer.should_symbolize(MagicMock())
+ self.assertTrue(ret)
+
+ def test_get_stacktrace_dir_returns_dir(self):
+ dbpath = "dbpath"
+ test = MagicMock(fixture=MagicMock(get_dbpath_prefix=MagicMock(return_value=dbpath)))
+ self.file_service_mock.check_path_exists.return_value = True
+
+ ret = self.resmoke_symbolizer.get_stacktrace_dir(test)
+ self.assertEqual(ret, dbpath)
+
+ def test_get_stacktrace_dir_if_dir_does_not_exist(self):
+ test = MagicMock()
+ self.file_service_mock.check_path_exists.return_value = False
+
+ ret = self.resmoke_symbolizer.get_stacktrace_dir(test)
+ self.assertEqual(ret, None)
+
+ def test_get_stacktrace_dir_if_fixture_is_not_available(self):
+ test = MagicMock(fixture=None)
+
+ ret = self.resmoke_symbolizer.get_stacktrace_dir(test)
+ self.assertEqual(ret, None)
+
+
+class TestFileService(unittest.TestCase):
+ def setUp(self) -> None:
+ self.file_service = under_test.FileService()
+ self.relative_dir_paths = [
+ os.path.join("dir_1"),
+ os.path.join("dir_2", "dir_2_1"),
+ os.path.join("dir_2", "dir_2_2"),
+ os.path.join("dir_3"),
+ ]
+ self.relative_file_paths = [
+ os.path.join("dir_1", "file_1.stacktrace"),
+ os.path.join("dir_2", "file_2.stacktrace"),
+ os.path.join("dir_2", "dir_2_1", "file_3.stacktrace"),
+ os.path.join("dir_2", "dir_2_2", "file_4.stacktrace"),
+ ]
+
+ def test_find_all_children_recursively_returns_files(self):
+ with TemporaryDirectory() as tmpdir:
+ abs_dir_paths = [os.path.join(tmpdir, d) for d in self.relative_dir_paths]
+ abs_file_paths = [os.path.join(tmpdir, f) for f in self.relative_file_paths]
+ for dir_ in abs_dir_paths:
+ Path(dir_).mkdir(parents=True)
+ for file in abs_file_paths:
+ Path(file).touch()
+
+ ret = self.file_service.find_all_children_recursively(tmpdir)
+ self.assertListEqual(sorted(ret), sorted(abs_file_paths))
+
+ def test_find_all_children_recursively_no_files(self):
+ with TemporaryDirectory() as tmpdir:
+ abs_dir_paths = [os.path.join(tmpdir, d) for d in self.relative_dir_paths]
+ for dir_ in abs_dir_paths:
+ Path(dir_).mkdir(parents=True)
+
+ ret = self.file_service.find_all_children_recursively(tmpdir)
+ self.assertListEqual(ret, [])
+
+ def test_find_all_children_recursively_no_dirs(self):
+ with TemporaryDirectory() as tmpdir:
+ ret = self.file_service.find_all_children_recursively(tmpdir)
+ self.assertListEqual(ret, [])
+
+ def test_filter_out_non_files_if_all_files_absent(self):
+ with TemporaryDirectory() as tmpdir:
+ abs_file_paths = [os.path.join(tmpdir, f) for f in self.relative_file_paths]
+ ret = self.file_service.filter_out_non_files(abs_file_paths)
+ self.assertListEqual(ret, [])
+
+ def test_filter_out_non_files_if_some_files_present(self):
+ with TemporaryDirectory() as tmpdir:
+ abs_dir_paths = [os.path.join(tmpdir, d) for d in self.relative_dir_paths]
+ abs_file_paths = [os.path.join(tmpdir, f) for f in self.relative_file_paths]
+ for dir_ in abs_dir_paths:
+ Path(dir_).mkdir(parents=True)
+ Path(abs_file_paths[1]).touch()
+ Path(abs_file_paths[3]).touch()
+
+ ret = self.file_service.filter_out_non_files(abs_file_paths)
+ self.assertListEqual(ret, [abs_file_paths[1], abs_file_paths[3]])
+
+ def test_filter_out_non_files_if_all_files_present(self):
+ with TemporaryDirectory() as tmpdir:
+ abs_dir_paths = [os.path.join(tmpdir, d) for d in self.relative_dir_paths]
+ abs_file_paths = [os.path.join(tmpdir, f) for f in self.relative_file_paths]
+ for dir_ in abs_dir_paths:
+ Path(dir_).mkdir(parents=True)
+ for file in abs_file_paths:
+ Path(file).touch()
+
+ ret = self.file_service.filter_out_non_files(abs_file_paths)
+ self.assertListEqual(ret, abs_file_paths)
+
+ def test_remove_empty_files_if_no_empty(self):
+ with TemporaryDirectory() as tmpdir:
+ abs_dir_paths = [os.path.join(tmpdir, d) for d in self.relative_dir_paths]
+ abs_file_paths = [os.path.join(tmpdir, f) for f in self.relative_file_paths]
+ for dir_ in abs_dir_paths:
+ Path(dir_).mkdir(parents=True)
+ for file in abs_file_paths:
+ with open(file, "w") as fstream:
+ fstream.write("stacktrace")
+
+ self.file_service.remove_empty(abs_file_paths)
+ for file in abs_file_paths:
+ self.assertTrue(os.path.exists(file))
+
+ def test_remove_empty_files_if_partly_empty(self):
+ with TemporaryDirectory() as tmpdir:
+ abs_dir_paths = [os.path.join(tmpdir, d) for d in self.relative_dir_paths]
+ abs_file_paths = [os.path.join(tmpdir, f) for f in self.relative_file_paths]
+ for dir_ in abs_dir_paths:
+ Path(dir_).mkdir(parents=True)
+ with open(abs_file_paths[0], "w") as fstream:
+ fstream.write("stacktrace")
+ Path(abs_file_paths[1]).touch()
+ with open(abs_file_paths[2], "w") as fstream:
+ fstream.write("stacktrace")
+ Path(abs_file_paths[3]).touch()
+
+ self.file_service.remove_empty(abs_file_paths)
+
+ self.assertTrue(os.path.exists(abs_file_paths[0]))
+ self.assertFalse(os.path.exists(abs_file_paths[1]))
+ self.assertTrue(os.path.exists(abs_file_paths[2]))
+ self.assertFalse(os.path.exists(abs_file_paths[3]))
+
+ def test_remove_empty_files_if_all_empty(self):
+ with TemporaryDirectory() as tmpdir:
+ abs_dir_paths = [os.path.join(tmpdir, d) for d in self.relative_dir_paths]
+ abs_file_paths = [os.path.join(tmpdir, f) for f in self.relative_file_paths]
+ for dir_ in abs_dir_paths:
+ Path(dir_).mkdir(parents=True)
+ for file in abs_file_paths:
+ Path(file).touch()
+
+ self.file_service.remove_empty(abs_file_paths)
+ for file in abs_file_paths:
+ self.assertFalse(os.path.exists(file))
+
+ def test_remove_all_files(self):
+ with TemporaryDirectory() as tmpdir:
+ abs_dir_paths = [os.path.join(tmpdir, d) for d in self.relative_dir_paths]
+ abs_file_paths = [os.path.join(tmpdir, f) for f in self.relative_file_paths]
+ for dir_ in abs_dir_paths:
+ Path(dir_).mkdir(parents=True)
+ for file in abs_file_paths:
+ with open(file, "w") as fstream:
+ fstream.write("stacktrace")
+
+ self.file_service.remove_all(abs_file_paths)
+ for file in abs_file_paths:
+ self.assertFalse(os.path.exists(file))