summaryrefslogtreecommitdiffstats
path: root/src/software
diff options
context:
space:
mode:
authorMichal Minar <miminar@redhat.com>2013-12-05 11:09:21 +0100
committerMichal Minar <miminar@redhat.com>2013-12-12 15:04:10 +0100
commit0193c107ab1b8e0f9155231a8d224a5e26ba436d (patch)
treef2987c75078ecf2a13fad893373758bbb4c5ee07 /src/software
parent8996160b8a00219eb421bcf86d88f0f496647c1a (diff)
downloadopenlmi-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.py172
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(