aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/portage/tests/emerge/test_actions.py')
-rw-r--r--lib/portage/tests/emerge/test_actions.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/portage/tests/emerge/test_actions.py b/lib/portage/tests/emerge/test_actions.py
new file mode 100644
index 000000000..cdc087a8e
--- /dev/null
+++ b/lib/portage/tests/emerge/test_actions.py
@@ -0,0 +1,68 @@
+# Copyright 2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+from unittest.mock import MagicMock, patch
+
+from _emerge.actions import get_libc_version, run_action
+
+from portage.const import LIBC_PACKAGE_ATOM
+from portage.dbapi.virtual import fakedbapi
+from portage.dep import Atom
+from portage.tests import TestCase
+
+
+class RunActionTestCase(TestCase):
+ """This class' purpose is to encompass UTs for ``actions.run_action``.
+ Since that function is extremely long (at least on Sep. 2022;
+ hopefully the situation gets better with the time), the tests in this
+ ``TestCase`` contain plenty of mocks/patches.
+ Hopefully, with time and effort, the ``run_action`` function (and others
+ in the module) are refactored to make testing easier and more robust.
+
+ A side effect of the mocking approach is a strong dependency on the
+ details of the implementation. That can be improved if functions
+ are smaller and do a well defined small set of tasks. Another call to
+ refactoring...
+ If the implementation changes, the mocks can be adjusted to play its
+ role.
+ """
+
+ @patch("_emerge.actions.profile_check")
+ @patch("_emerge.actions.adjust_configs")
+ @patch("_emerge.actions.apply_priorities")
+ def test_binary_trees_populate_called(self, papply, padjust, profile_ckeck):
+ """Ensure that ``binarytree.populate`` API is correctly used.
+ The point of this test is to ensure that the ``populate`` method
+ is called as expected: since it is the first time that ``populate``
+ is called, it must use ``getbinpkg_refresh=True``.
+ """
+ config = MagicMock()
+ config.action = None
+ config.opts = {"--quiet": True, "--usepkg": True, "--package-moves": "n"}
+ bt = MagicMock()
+ tree = {"bintree": bt}
+ trees = {"first": tree}
+ config.trees = trees
+
+ run_action(config)
+
+ bt.populate.assert_called_once_with(
+ getbinpkgs=False, getbinpkg_refresh=True, pretend=False
+ )
+
+ def testGetSystemLibc(self):
+ """
+ Check that get_libc_version extracts the right version string
+ from the provider LIBC_PACKAGE_ATOM for emerge --info and friends.
+ """
+ settings = MagicMock()
+
+ settings.getvirtuals.return_value = {
+ LIBC_PACKAGE_ATOM: [Atom("=sys-libs/musl-1.2.3")]
+ }
+ settings.__getitem__.return_value = {}
+
+ vardb = fakedbapi(settings)
+ vardb.cpv_inject("sys-libs/musl-1.2.3", {"SLOT": "0"})
+
+ self.assertEqual(get_libc_version(vardb), ["musl-1.2.3"])