diff options
author | Michal Minar <miminar@redhat.com> | 2013-12-05 11:09:21 +0100 |
---|---|---|
committer | Michal Minar <miminar@redhat.com> | 2013-12-12 15:04:10 +0100 |
commit | 0193c107ab1b8e0f9155231a8d224a5e26ba436d (patch) | |
tree | f2987c75078ecf2a13fad893373758bbb4c5ee07 /src/software | |
parent | 8996160b8a00219eb421bcf86d88f0f496647c1a (diff) | |
download | openlmi-providers-0193c107ab1b8e0f9155231a8d224a5e26ba436d.tar.gz openlmi-providers-0193c107ab1b8e0f9155231a8d224a5e26ba436d.tar.xz openlmi-providers-0193c107ab1b8e0f9155231a8d224a5e26ba436d.zip |
software: added tests for software installation service
Test installation, removal and updating of rpm packages.
Diffstat (limited to 'src/software')
-rw-r--r-- | src/software/test/test_software_installation_service.py | 172 |
1 files changed, 171 insertions, 1 deletions
diff --git a/src/software/test/test_software_installation_service.py b/src/software/test/test_software_installation_service.py index 2704f46..c01d9dd 100644 --- a/src/software/test/test_software_installation_service.py +++ b/src/software/test/test_software_installation_service.py @@ -24,10 +24,13 @@ Unit tests for ``LMI_SoftwareInstallationService`` provider. """ import pywbem +import time import unittest -import swbase from lmi.test.lmibase import enable_lmi_exceptions +import package +import swbase +import util CHECK_SOFTWARE_IDENTITY_NOT_SUPPORTED = 1 COMMUNICATION_STATUS_NOT_AVAILABLE = 1 @@ -41,12 +44,21 @@ FIND_IDENTITY_FOUND = 0 FIND_IDENTITY_NO_MATCH = 1 HEALTH_STATE_OK = 5 INSTALL_FROM_BYTE_STREAM_NOT_SUPPORTED = 1 +INSTALL_OPTIONS_FORCE = 3 +INSTALL_OPTIONS_INSTALL = 4 +INSTALL_OPTIONS_UPDATE = 5 +INSTALL_OPTIONS_REPAIR = 6 +INSTALL_OPTIONS_UNINSTALL = 9 OPERATING_STATUS_SERVICING = 2 OPERATIONAL_STATUS_OK = 2 PRIMARY_STATUS_OK = 1 REQUESTED_STATE_NOT_APPLICABLE = 12 TRANSITIONING_TO_STATE_NOT_APPLICABLE = 12 +JOB_COMPLETED_WITH_NO_ERROR = 0 +UNSPECIFIED_ERROR = 2 +METHOD_PARAMETERS_CHECKED_JOB_STARTED = 4096 + class TestSoftwareInstallationService(swbase.SwTestCase): """ Basic cim operations test on ``LMI_SoftwareInstallationService``. @@ -315,6 +327,164 @@ class TestSoftwareInstallationService(swbase.SwTestCase): self.assertEqual(len(inames), 1) self.assertTrue(inames[0].InstanceID.endswith(pkg.nevra)) + @swbase.test_with_repos('stable') + @swbase.test_with_packages(**{ 'stable#pkg1' : False }) + def test_install_package_sync(self): + """ + Try to synchronously install package. + """ + pkg = self.get_repo('stable')['pkg1'] + self.assertFalse(package.is_pkg_installed(pkg)) + service = self.make_op().to_instance() + rval, oparms, _ = service.SyncInstallFromSoftwareIdentity( + Source=util.make_pkg_op(self.ns, pkg), + InstallOptions=[INSTALL_OPTIONS_INSTALL], + Target=self.system_iname) + self.assertEqual(rval, JOB_COMPLETED_WITH_NO_ERROR) + self.assertEqual(len(oparms), 0) + self.assertTrue(package.is_pkg_installed(pkg)) + + @swbase.test_with_repos('stable') + @swbase.test_with_packages('stable#pkg1') + def test_remove_package_sync(self): + """ + Try to synchronously remove package. + """ + pkg = self.get_repo('stable')['pkg1'] + self.assertTrue(package.is_pkg_installed(pkg)) + service = self.make_op().to_instance() + rval, oparms, _ = service.SyncInstallFromSoftwareIdentity( + Source=util.make_pkg_op(self.ns, pkg), + InstallOptions=[INSTALL_OPTIONS_UNINSTALL], + Target=self.system_iname) + self.assertEqual(rval, JOB_COMPLETED_WITH_NO_ERROR) + self.assertTrue( len(oparms) == 0 + or ('Job' in oparms and oparms['Job'] is None)) + self.assertFalse(package.is_pkg_installed(pkg)) + + @swbase.test_with_repos('stable', 'updates') + @swbase.test_with_packages('stable#pkg1') + def test_update_package_sync(self): + """ + Try to synchronously update package. + """ + pkg = self.get_repo('stable')['pkg1'] + self.assertTrue(package.is_pkg_installed(pkg)) + service = self.make_op().to_instance() + rval, oparms, _ = service.SyncInstallFromSoftwareIdentity( + Source=util.make_pkg_op(self.ns, pkg), + InstallOptions=[INSTALL_OPTIONS_UPDATE], + Target=self.system_iname) + self.assertEqual(rval, JOB_COMPLETED_WITH_NO_ERROR) + self.assertTrue( len(oparms) == 0 + or ('Job' in oparms and oparms['Job'] is None)) + self.assertFalse(package.is_pkg_installed(pkg)) + up_pkg = self.get_repo('updates')['pkg1'] + self.assertTrue(package.is_pkg_installed(up_pkg)) + + @enable_lmi_exceptions + @swbase.test_with_repos('stable') + @swbase.test_with_packages(**{ 'stable#pkg1' : False }) + def test_install_method_sync_without_target_and_collection(self): + """ + Try to synchronously install package without target and collection + parameters given. + + Software Update profile says that ``InstallFromSoftwareIdentity`` + shall return ``UNSPECIFIED_ERROR``. Which is really weird since the + error is known. + """ + pkg = self.get_repo('stable')['pkg1'] + self.assertFalse(package.is_pkg_installed(pkg)) + service = self.make_op().to_instance() + for opts in ( + [INSTALL_OPTIONS_INSTALL], + [INSTALL_OPTIONS_UNINSTALL], + [INSTALL_OPTIONS_UPDATE]): + rval, oparms, _ = service.SyncInstallFromSoftwareIdentity( + Source=util.make_pkg_op(self.ns, pkg), + InstallOptions=opts) + self.assertEqual(rval, UNSPECIFIED_ERROR) + self.assertTrue( len(oparms) == 0 + or ('Job' in oparms and oparms['Job'] is None)) + + @swbase.test_with_repos('stable') + @swbase.test_with_packages(**{ 'stable#pkg1' : False }) + def test_install_package_sync_with_target_and_collection(self): + """ + Try to synchronously install package with target and collection + parameters omitted. + + Software Update profile says that ``InstallFromSoftwareIdentity`` + shall return ``UNSPECIFIED_ERROR``. Which is really weird since the + error is known. + """ + pkg = self.get_repo('stable')['pkg1'] + self.assertFalse(package.is_pkg_installed(pkg)) + service = self.make_op().to_instance() + for opts in ( + [INSTALL_OPTIONS_INSTALL], + [INSTALL_OPTIONS_UNINSTALL], + [INSTALL_OPTIONS_UPDATE]): + rval, oparms, _ = service.SyncInstallFromSoftwareIdentity( + Source=util.make_pkg_op(self.ns, pkg), + InstallOptions=opts, + Target=self.system_iname, + Collection=self.ns.LMI_SystemSoftwareCollection \ + .new_instance_name({ + "InstanceID" : "LMI:LMI_SystemSoftwareCollection" + })) + self.assertEqual(rval, UNSPECIFIED_ERROR) + self.assertTrue( len(oparms) == 0 + or ('Job' in oparms and oparms['Job'] is None)) + + @swbase.test_with_repos('stable') + @swbase.test_with_packages(**{ 'stable#pkg1' : False }) + def test_install_package_sync_with_collection(self): + """ + Try to synchronously install package with just collection given. + """ + pkg = self.get_repo('stable')['pkg1'] + self.assertFalse(package.is_pkg_installed(pkg)) + service = self.make_op().to_instance() + rval, oparms, _ = service.SyncInstallFromSoftwareIdentity( + Source=util.make_pkg_op(self.ns, pkg), + InstallOptions=[INSTALL_OPTIONS_INSTALL], + Collection=self.ns.LMI_SystemSoftwareCollection \ + .new_instance_name({ + "InstanceID" : "LMI:LMI_SystemSoftwareCollection" + })) + self.assertEqual(rval, JOB_COMPLETED_WITH_NO_ERROR) + self.assertTrue( len(oparms) == 0 + or ('Job' in oparms and oparms['Job'] is None)) + self.assertTrue(package.is_pkg_installed(pkg)) + + @swbase.test_with_repos('stable') + @swbase.test_with_packages('stable#pkg1') + def test_reinstall_package(self): + """ + Try to reinstall package. + """ + pkg = self.get_repo('stable')['pkg1'] + pkg_op = util.make_pkg_op(self.ns, pkg) + inst = pkg_op.to_instance() + install_date = inst.InstallDate + self.assertTrue(package.is_pkg_installed(pkg)) + + service = self.make_op().to_instance() + time.sleep(1) + rval, oparms, _ = service.SyncInstallFromSoftwareIdentity( + Source=pkg_op, + InstallOptions=[INSTALL_OPTIONS_INSTALL, INSTALL_OPTIONS_FORCE], + Target=self.system_iname) + self.assertEqual(rval, JOB_COMPLETED_WITH_NO_ERROR) + self.assertTrue( len(oparms) == 0 + or ('Job' in oparms and oparms['Job'] is None)) + self.assertTrue(package.is_pkg_installed(pkg)) + inst.refresh() + install_date2 = inst.InstallDate + self.assertGreater(install_date2, install_date) + def suite(): """For unittest loaders.""" return unittest.TestLoader().loadTestsFromTestCase( |