commit:     419f5ae0d9f0ca55279f1ad60a7dc83d8da777d6
Author:     David Palao <david.palao <AT> gmail <DOT> com>
AuthorDate: Fri Sep  9 17:12:17 2022 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Sun Sep 25 19:07:52 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=419f5ae0

test(bintree): added UTs for binarytree.populate

Signed-off-by: David Palao <david.palao <AT> gmail.com>
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 lib/portage/tests/dbapi/test_bintree.py | 68 ++++++++++++++++++++++++++++++++-
 1 file changed, 66 insertions(+), 2 deletions(-)

diff --git a/lib/portage/tests/dbapi/test_bintree.py 
b/lib/portage/tests/dbapi/test_bintree.py
index 14b89dfc0..d0bfa306e 100644
--- a/lib/portage/tests/dbapi/test_bintree.py
+++ b/lib/portage/tests/dbapi/test_bintree.py
@@ -1,11 +1,14 @@
-# Copyright 2020-2022 Gentoo Authors
+# Copyright 2022 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
-from unittest.mock import MagicMock
+from unittest.mock import MagicMock, patch, call
+import os
 
 from portage.tests import TestCase
 
 from portage.dbapi.bintree import binarytree
+from portage.localization import _
+from portage.const import BINREPOS_CONF_FILE
 
 
 class BinarytreeTestCase(TestCase):
@@ -52,3 +55,64 @@ class BinarytreeTestCase(TestCase):
         # The next attribute is the difference between multi instance
         # and no multi instance:
         getattr(multi_instance_bt, "_allocate_filename")
+
+    @patch("portage.dbapi.bintree.binarytree._populate_local")
+    def test_populate_without_updates_repos_nor_getbinspkgs(
+            self, ppopulate_local):
+        bt = binarytree(pkgdir="/tmp", settings=MagicMock())
+        ppopulate_local.return_value = {}
+        bt.populate()
+        ppopulate_local.assert_called_once_with(reindex=True)
+        self.assertFalse(bt._populating)
+        self.assertTrue(bt.populated)
+
+    @patch("portage.dbapi.bintree.binarytree._populate_local")
+    def test_populate_calls_twice_populate_local_if_updates(
+            self, ppopulate_local):
+        bt = binarytree(pkgdir="/tmp", settings=MagicMock())
+        bt.populate()
+        self.assertIn(call(reindex=True), ppopulate_local.mock_calls)
+        self.assertIn(call(), ppopulate_local.mock_calls)
+        self.assertEqual(ppopulate_local.call_count, 2)
+
+    @patch("portage.dbapi.bintree.binarytree._populate_additional")
+    @patch("portage.dbapi.bintree.binarytree._populate_local")
+    def test_populate_with_repos(
+            self, ppopulate_local, ppopulate_additional):
+        repos = ("one", "two")
+        bt = binarytree(pkgdir="/tmp", settings=MagicMock())
+        bt.populate(add_repos=repos)
+        ppopulate_additional.assert_called_once_with(repos)
+
+    @patch("portage.dbapi.bintree.BinRepoConfigLoader")
+    @patch("portage.dbapi.bintree.binarytree._populate_remote")
+    @patch("portage.dbapi.bintree.binarytree._populate_local")
+    def test_populate_with_getbinpkgs(
+            self, ppopulate_local, ppopulate_remote, pBinRepoConfigLoader):
+        refresh = "something"
+        settings = MagicMock()
+        settings.__getitem__.return_value = "/some/path"
+        bt = binarytree(pkgdir="/tmp", settings=settings)
+        bt.populate(getbinpkgs=True, getbinpkg_refresh=refresh)
+        ppopulate_remote.assert_called_once_with(getbinpkg_refresh=refresh)
+
+    @patch("portage.dbapi.bintree.writemsg")
+    @patch("portage.dbapi.bintree.BinRepoConfigLoader")
+    @patch("portage.dbapi.bintree.binarytree._populate_remote")
+    @patch("portage.dbapi.bintree.binarytree._populate_local")
+    def test_populate_with_getbinpkgs_and_not_BinRepoConfigLoader(
+            self, ppopulate_local, ppopulate_remote, pBinRepoConfigLoader,
+            pwritemsg):
+        refresh = "something"
+        settings = MagicMock()
+        portage_root = "/some/path"
+        settings.__getitem__.return_value = portage_root
+        pBinRepoConfigLoader.return_value = None
+        conf_file = os.path.join(portage_root, BINREPOS_CONF_FILE)
+        bt = binarytree(pkgdir="/tmp", settings=settings)
+        bt.populate(getbinpkgs=True, getbinpkg_refresh=refresh)
+        ppopulate_remote.assert_not_called()
+        pwritemsg.assert_called_once_with(
+            _(f"!!! {conf_file} is missing (or PORTAGE_BINHOST is unset)"
+              ", but use is requested.\n"), noiselevel=-1
+        )

Reply via email to