summaryrefslogtreecommitdiff
path: root/buildscripts/tests/test_debugsymb_mapper.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildscripts/tests/test_debugsymb_mapper.py')
-rw-r--r--buildscripts/tests/test_debugsymb_mapper.py115
1 files changed, 115 insertions, 0 deletions
diff --git a/buildscripts/tests/test_debugsymb_mapper.py b/buildscripts/tests/test_debugsymb_mapper.py
new file mode 100644
index 00000000000..b1b063f5331
--- /dev/null
+++ b/buildscripts/tests/test_debugsymb_mapper.py
@@ -0,0 +1,115 @@
+"""Unit tests for debugsymb_mapper.py."""
+# pylint: disable=missing-docstring
+import unittest
+from unittest.mock import MagicMock
+
+import buildscripts.debugsymb_mapper as under_test
+
+
+def mock_cmd_client():
+ cmd_client = MagicMock(spec_set=under_test.CmdClient)
+ return cmd_client
+
+
+class TestCmdOutputExtractor(unittest.TestCase):
+ def setUp(self):
+ self.cmd_client_mock = mock_cmd_client()
+ self.cmd_output_extractor = under_test.CmdOutputExtractor(self.cmd_client_mock)
+
+
+class TestGetBuildId(TestCmdOutputExtractor):
+ def test_get_build_id_returns_build_id(self):
+ readelf_output = (
+ "Displaying notes found in: .note.gnu.build-id\n"
+ " Owner Data size\tDescription\n"
+ " GNU 0x00000014\tNT_GNU_BUILD_ID (unique build ID bitstring)\n"
+ " Build ID: 74c2322104428836f3d94af6cd7471ee7cb5c4ee\n"
+ "\n"
+ "Displaying notes found in: .gnu.build.attributes.hot\n"
+ " Owner Data size\tDescription\n"
+ " GA$<version>3h864 0x00000010\tOPEN\n"
+ " Applies to region from 0xb71 to 0xb71 (.annobin_init.c.hot)\n"
+ " GA$<version>3h864 0x00000010\tOPEN\n"
+ " Applies to region from 0xb71 to 0xb71 (.annobin_init.c.hot)")
+ self.cmd_client_mock.run.return_value = readelf_output
+
+ build_id_output = self.cmd_output_extractor.get_build_id("path/to/bin")
+ self.assertEqual(build_id_output.build_id, "74c2322104428836f3d94af6cd7471ee7cb5c4ee")
+ self.assertEqual(build_id_output.cmd_output, readelf_output)
+
+ def test_get_build_id_raises_error(self):
+ readelf_output = (
+ " Owner Data size\tDescription\n"
+ " GNU 0x00000014\tNT_GNU_BUILD_ID (unique build ID bitstring)\n"
+ " Build ID: 74c2322104428836f3d94af6cd7471ee7cb5c4ee\n"
+ "\n"
+ "Displaying notes found in: .gnu.build.attributes.hot\n"
+ " Owner Data size\tDescription\n"
+ " GNU 0x00000014\tNT_GNU_BUILD_ID (unique build ID bitstring)\n"
+ " Build ID: 74c2322104428836f3d94af6cd7471ee7cb5c4ee\n"
+ "\n"
+ "Displaying notes found in: .gnu.build.attributes.hot")
+ self.cmd_client_mock.run.return_value = readelf_output
+
+ self.assertRaises(ValueError, self.cmd_output_extractor.get_build_id, "path/to/bin")
+
+ def test_get_build_id_returns_none(self):
+ readelf_output = (
+ "Displaying notes found in: .note.gnu.build-id\n"
+ " Owner Data size\tDescription\n"
+ " GNU 0x00000014\tNT_GNU_BUILD_ID (unique build ID bitstring)")
+ self.cmd_client_mock.run.return_value = readelf_output
+
+ build_id_output = self.cmd_output_extractor.get_build_id("path/to/bin")
+ self.assertIsNone(build_id_output.build_id)
+ self.assertEqual(build_id_output.cmd_output, readelf_output)
+
+
+class TestGetBinVersion(TestCmdOutputExtractor):
+ def test_get_bin_version_returns_version(self):
+ # Newer versions command output
+ version_cmd_output = ('db version v4.4.14-25-gb0475e2\n'
+ 'Build Info: {\n'
+ ' "version": "4.4.14-25-gb0475e2",\n'
+ ' "gitVersion": "b0475e2657c3351b25499971d3340f054ea85b98",\n'
+ ' "openSSLVersion": "OpenSSL 1.1.1 11 Sep 2018",\n'
+ ' "modules": [\n'
+ ' "enterprise"\n'
+ ' ],\n'
+ ' "allocator": "tcmalloc",\n'
+ ' "environment": {\n'
+ ' "distmod": "ubuntu1804",\n'
+ ' "distarch": "x86_64",\n'
+ ' "target_arch": "x86_64"\n'
+ ' }\n'
+ '}')
+ self.cmd_client_mock.run.return_value = version_cmd_output
+
+ bin_version_output = self.cmd_output_extractor.get_bin_version("path/to/bin")
+ self.assertEqual(bin_version_output.mongodb_version, "4.4.14-25-gb0475e2")
+ self.assertEqual(bin_version_output.cmd_output, version_cmd_output)
+
+ def test_get_bin_version_unsupported_output(self):
+ # Versions prior to 5.0 are not supported
+ version_cmd_output = ('db version v4.2.20-7-g5a81409\n'
+ 'git version: 5a81409faf16f30f1189af6367eb3ceee50a02b5\n'
+ 'OpenSSL version: OpenSSL 1.1.1 11 Sep 2018\n'
+ 'allocator: tcmalloc\n'
+ 'modules: enterprise \n'
+ 'build environment:\n'
+ ' distmod: ubuntu1804\n'
+ ' distarch: x86_64\n'
+ ' target_arch: x86_64')
+ self.cmd_client_mock.run.return_value = version_cmd_output
+
+ bin_version_output = self.cmd_output_extractor.get_bin_version("path/to/bin")
+ self.assertIsNone(bin_version_output.mongodb_version)
+ self.assertEqual(bin_version_output.cmd_output, version_cmd_output)
+
+ def test_get_bin_version_returns_none(self):
+ version_cmd_output = "error: unrecognized arguments: --version"
+ self.cmd_client_mock.run.return_value = version_cmd_output
+
+ bin_version_output = self.cmd_output_extractor.get_bin_version("path/to/bin")
+ self.assertIsNone(bin_version_output.mongodb_version)
+ self.assertEqual(bin_version_output.cmd_output, version_cmd_output)