Explorar el Código

osmorphing: Add unit tests for get_installed_packages

Cristian Matiut hace 1 año
padre
commit
87d3541029

+ 3 - 0
coriolis/tests/osmorphing/test_base.py

@@ -110,6 +110,9 @@ class TestLinuxOSMorphingTools(base.BaseLinuxOSMorphingTools):
     def check_os_supported(self):
         pass
 
+    def get_installed_packages(self):
+        pass
+
     def install_packages(self):
         pass
 

+ 27 - 0
coriolis/tests/osmorphing/test_debian.py

@@ -211,6 +211,33 @@ class BaseDebianMorphingToolsTestCase(test_base.CoriolisBaseTestCase):
         mock_write_file_sudo.assert_not_called()
         mock_exec_cmd_chroot.assert_not_called()
 
+    @mock.patch.object(base.BaseLinuxOSMorphingTools, '_exec_cmd_chroot')
+    def test_get_installed_packages(self, mock_exec_cmd_chroot):
+        mock_exec_cmd_chroot.return_value = \
+            "package1\npackage2".encode('utf-8')
+
+        self.morpher.get_installed_packages()
+
+        self.assertEqual(
+            self.morpher.installed_packages,
+            ['package1', 'package2']
+        )
+        mock_exec_cmd_chroot.assert_called_once_with(
+            "dpkg-query -f '${binary:Package}\\n' -W")
+
+    @mock.patch.object(base.BaseLinuxOSMorphingTools, '_exec_cmd_chroot')
+    def test_get_installed_packages_none(self, mock_exec_cmd_chroot):
+        mock_exec_cmd_chroot.side_effect = exception.CoriolisException()
+
+        self.morpher.get_installed_packages()
+
+        self.assertEqual(
+            self.morpher.installed_packages,
+            []
+        )
+        mock_exec_cmd_chroot.assert_called_once_with(
+            "dpkg-query -f '${binary:Package}\\n' -W")
+
     @mock.patch.object(base.BaseLinuxOSMorphingTools, 'pre_packages_install')
     @mock.patch.object(debian.BaseDebianMorphingTools, '_exec_cmd_chroot')
     def test_pre_packages_install(self, mock_exec_cmd_chroot,

+ 5 - 0
coriolis/tests/osmorphing/test_manager.py

@@ -153,6 +153,8 @@ class ManagerTestCase(test_base.CoriolisBaseTestCase):
         self.assertIsNone(result)
 
     class MockOSMorphingToolsClass:
+        installed_packages = []
+
         def __init__(self, *args, **kwargs):
             pass
 
@@ -174,6 +176,9 @@ class ManagerTestCase(test_base.CoriolisBaseTestCase):
         def pre_packages_install(self, packages_add):
             pass
 
+        def get_installed_packages(self):
+            pass
+
         def set_net_config(self, nics_info, dhcp):
             pass
 

+ 3 - 0
coriolis/tests/osmorphing/test_openwrt.py

@@ -9,6 +9,9 @@ class MockOpenWRTMorphingTools(openwrt.BaseOpenWRTMorphingTools):
     def __init__(self):
         pass
 
+    def get_installed_packages(self):
+        pass
+
     def install_packages(self, packages):
         pass
 

+ 20 - 20
coriolis/tests/osmorphing/test_redhat.py

@@ -364,27 +364,33 @@ class BaseRedHatMorphingToolsTestCase(test_base.CoriolisBaseTestCase):
             mock_get_net_ifaces_info.return_value)
 
     @mock.patch.object(base.BaseLinuxOSMorphingTools, '_exec_cmd_chroot')
-    def test_has_package_installed(self, mock_exec_cmd_chroot):
-        result = self.morphing_tools._has_package_installed("mock_package")
+    def test_get_installed_packages(self, mock_exec_cmd_chroot):
+        mock_exec_cmd_chroot.return_value = \
+            "package1\npackage2".encode('utf-8')
+
+        self.morphing_tools.get_installed_packages()
 
         self.assertEqual(
-            True,
-            result
+            self.morphing_tools.installed_packages,
+            ['package1', 'package2']
         )
-        mock_exec_cmd_chroot.assert_called_once_with("rpm -q mock_package")
+        mock_exec_cmd_chroot.assert_called_once_with(
+            'rpm -qa --qf "%{NAME}\\n"')
 
-        mock_exec_cmd_chroot.reset_mock()
+    @mock.patch.object(base.BaseLinuxOSMorphingTools, '_exec_cmd_chroot')
+    def test_get_installed_packages_none(self, mock_exec_cmd_chroot):
         mock_exec_cmd_chroot.side_effect = exception.CoriolisException()
 
         with self.assertLogs(
             'coriolis.osmorphing.redhat', level=logging.DEBUG):
-            result = self.morphing_tools._has_package_installed("mock_package")
+            self.morphing_tools.get_installed_packages()
 
         self.assertEqual(
-            False,
-            result
+            self.morphing_tools.installed_packages,
+            []
         )
-        mock_exec_cmd_chroot.assert_called_once_with("rpm -q mock_package")
+        mock_exec_cmd_chroot.assert_called_once_with(
+            'rpm -qa --qf "%{NAME}\\n"')
 
     @mock.patch.object(base.BaseLinuxOSMorphingTools, '_exec_cmd_chroot')
     def test__yum_install(self, mock_exec_cmd_chroot):
@@ -472,15 +478,12 @@ class BaseRedHatMorphingToolsTestCase(test_base.CoriolisBaseTestCase):
         with self.assertLogs('coriolis.osmorphing.redhat', level=logging.WARN):
             self.morphing_tools._find_yum_repos(repos_to_enable)
 
-    @mock.patch.object(redhat.BaseRedHatMorphingTools,
-                       '_has_package_installed')
     @mock.patch.object(redhat.BaseRedHatMorphingTools, '_yum_install')
     @mock.patch.object(redhat.BaseRedHatMorphingTools, '_yum_clean_all')
     @mock.patch.object(base.BaseLinuxOSMorphingTools, 'pre_packages_install')
     def test_pre_packages_install(self, mock_pre_packages_install,
-                                  mock_yum_clean_all, mock_yum_install,
-                                  mock_has_package_installed):
-        mock_has_package_installed.return_value = False
+                                  mock_yum_clean_all, mock_yum_install):
+        self.morphing_tools.installed_packages = []
 
         self.morphing_tools.pre_packages_install(self.package_names)
 
@@ -488,15 +491,12 @@ class BaseRedHatMorphingToolsTestCase(test_base.CoriolisBaseTestCase):
         mock_yum_clean_all.assert_called_once()
         mock_yum_install.assert_called_once_with(['grubby'])
 
-    @mock.patch.object(redhat.BaseRedHatMorphingTools,
-                       '_has_package_installed')
     @mock.patch.object(redhat.BaseRedHatMorphingTools, '_yum_install')
     @mock.patch.object(redhat.BaseRedHatMorphingTools, '_yum_clean_all')
     @mock.patch.object(base.BaseLinuxOSMorphingTools, 'pre_packages_install')
     def test_pre_packages_install_has_grubby(
-        self, mock_pre_packages_install, mock_yum_clean_all, mock_yum_install,
-        mock_has_package_installed):
-        mock_has_package_installed.return_value = True
+        self, mock_pre_packages_install, mock_yum_clean_all, mock_yum_install):
+        self.morphing_tools.installed_packages = ['grubby']
 
         self.morphing_tools.pre_packages_install(self.package_names)
 

+ 29 - 0
coriolis/tests/osmorphing/test_suse.py

@@ -76,6 +76,35 @@ class BaseSUSEMorphingToolsTestCase(test_base.CoriolisBaseTestCase):
 
         self.assertFalse(result)
 
+    @mock.patch.object(base.BaseLinuxOSMorphingTools, '_exec_cmd_chroot')
+    def test_get_installed_packages(self, mock_exec_cmd_chroot):
+        mock_exec_cmd_chroot.return_value = \
+            "package1\npackage2".encode('utf-8')
+
+        self.morphing_tools.get_installed_packages()
+
+        self.assertEqual(
+            self.morphing_tools.installed_packages,
+            ['package1', 'package2']
+        )
+        mock_exec_cmd_chroot.assert_called_once_with(
+            'rpm -qa --qf "%{NAME}\\n"')
+
+    @mock.patch.object(base.BaseLinuxOSMorphingTools, '_exec_cmd_chroot')
+    def test_get_installed_packages_none(self, mock_exec_cmd_chroot):
+        mock_exec_cmd_chroot.side_effect = exception.CoriolisException()
+
+        with self.assertLogs(
+            'coriolis.osmorphing.suse', level=logging.DEBUG):
+            self.morphing_tools.get_installed_packages()
+
+        self.assertEqual(
+            self.morphing_tools.installed_packages,
+            []
+        )
+        mock_exec_cmd_chroot.assert_called_once_with(
+            'rpm -qa --qf "%{NAME}\\n"')
+
     @mock.patch.object(
         suse.BaseSUSEMorphingTools, '_get_grub2_cfg_location'
     )