summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Safranek <jsafrane@redhat.com>2014-04-18 14:59:08 +0200
committerJan Safranek <jsafrane@redhat.com>2014-04-18 14:59:08 +0200
commit91a9c755e9c95fccc08bf915ba7f196700c82923 (patch)
tree0bffc7fbc8f560e841b1cb331b31afe06bdcef3e
parent45f4b021a9f13c1ec64b56ea16e2b3d2a121c41c (diff)
downloadopenlmi-providers-91a9c755e9c95fccc08bf915ba7f196700c82923.tar.gz
openlmi-providers-91a9c755e9c95fccc08bf915ba7f196700c82923.tar.xz
openlmi-providers-91a9c755e9c95fccc08bf915ba7f196700c82923.zip
Port tests to Python 2.6
- replace various dictionary/set comprehensions - re-implement subprocess.check_output() - use optparse
-rw-r--r--src/software/test/package.py8
-rw-r--r--src/software/test/reposetup.py7
-rw-r--r--src/software/test/repository.py18
-rwxr-xr-xsrc/software/test/run.py33
-rw-r--r--src/software/test/test_resource_for_software_identity.py2
-rw-r--r--src/software/test/test_software_identity_file_check.py2
-rw-r--r--src/software/test/test_software_identity_resource.py2
-rw-r--r--src/software/test/util.py20
8 files changed, 51 insertions, 41 deletions
diff --git a/src/software/test/package.py b/src/software/test/package.py
index 3a3f228..f47eec7 100644
--- a/src/software/test/package.py
+++ b/src/software/test/package.py
@@ -105,7 +105,7 @@ class Package(object):
"""
:returns: Package summary string.
"""
- return subprocess.check_output(
+ return util.check_output(
['/usr/bin/rpm', '-q', '--qf', '%{SUMMARY}', '-p',
self.rpm_path])
@@ -164,7 +164,7 @@ def from_json(json_object):
:rtype: :py:class:`Package`
"""
if isinstance(json_object, dict) and '_arch' in json_object:
- kwargs = {k[1:]: v for k, v in json_object.items()}
+ kwargs = dict((k[1:],v) for k,v in json_object.items())
return Package(**kwargs)
return json_object
@@ -177,7 +177,7 @@ def is_pkg_installed(pkg):
else:
cmd = ["/usr/bin/rpm", "-q", "--qf", "%{EPOCH}:%{NVRA}\n", pkg.nevra]
try:
- out = subprocess.check_output(cmd).splitlines()[0]
+ out = util.check_output(cmd).splitlines()[0]
epoch, _ = out.split(':')
if not epoch or epoch.lower() == "(none)":
epoch = "0"
@@ -233,7 +233,7 @@ def filter_installed_packages(pkgs, installed=True):
% (match.group(1), str(pkg_strings)))
pkg_strings.remove(match.group(1))
result.remove(result)
- result = {pkg_map.get(pstr, pstr) for pstr in result}
+ result = set(pkg_map.get(pstr, pstr) for pstr in result)
return result
def remove_pkgs(pkgs, *args, **kwargs):
diff --git a/src/software/test/reposetup.py b/src/software/test/reposetup.py
index 09d5605..c67514d 100644
--- a/src/software/test/reposetup.py
+++ b/src/software/test/reposetup.py
@@ -470,7 +470,7 @@ def _get_rpm_name_from_spec(spec_file_path):
:returns: Name of rpm file builded out of particular spec file.
:rtype: string
"""
- return subprocess.check_output(['/usr/bin/rpm', '-q', '--specfile',
+ return util.check_output(['/usr/bin/rpm', '-q', '--specfile',
spec_file_path]).splitlines()[0] + '.rpm'
def _build_pkg(rpmbuild_dir, pkg_nevra, pkg_dict):
@@ -568,9 +568,8 @@ def get_yum_config():
"""
if not hasattr(get_yum_config, '_yum_vars'):
yumvar_dict = yum.YumBase().conf.yumvar
- kwargs = { f: yumvar_dict[f]
- for f in YumVars._fields if f in yumvar_dict}
- kwargs['disttag'] = '.' + subprocess.check_output(
+ kwargs = dict((f, yumvar_dict[f]) for f in YumVars._fields if f in yumvar_dict)
+ kwargs['disttag'] = '.' + util.check_output(
['/usr/bin/rpm', '-q', '--qf', '%{RELEASE}\n'
, 'kernel']).splitlines()[0].split('.')[-1]
get_yum_config._yum_vars = YumVars(**kwargs)
diff --git a/src/software/test/repository.py b/src/software/test/repository.py
index 61aed17..bb9b84c 100644
--- a/src/software/test/repository.py
+++ b/src/software/test/repository.py
@@ -26,7 +26,7 @@ from datetime import datetime
import inspect
import os
import re
-from subprocess import call, check_output
+from subprocess import call
import util
@@ -179,7 +179,7 @@ class Repository(object):
self._timeout = float(timeout)
def __getitem__(self, pkg_name):
- pkg_dict = {p.name : p for p in self._packages}
+ pkg_dict = dict((p.name, p) for p in self._packages)
try:
return pkg_dict[pkg_name]
except KeyError:
@@ -221,7 +221,7 @@ def to_json(encoder, repo):
return type(val)((transform_value(v) for v in val))
return val
argspec = inspect.getargspec(repo.__init__)
- return { a: transform_value(getattr(repo, a)) for a in argspec.args[1:] }
+ return dict((a, transform_value(getattr(repo, a))) for a in argspec.args[1:] )
def from_json(package_deserializer, json_object):
"""
@@ -268,7 +268,7 @@ def _parse_repo_file(repo_name):
:rtype: dictionary
"""
cmd = ["yum-config-manager", repo_name]
- out = check_output(cmd).decode('utf-8')
+ out = util.check_output(cmd).decode('utf-8')
result = {}
for match in RE_REPO_CONFIG.finditer(out):
tag = match.group('tag')
@@ -289,7 +289,7 @@ def _parse_repo_file(repo_name):
result['status'] = value.lower() in ('true', 'yes', 1)
elif tag == 'mirrorlist':
result['mirror_list'] = value
- elif tag in {p for p in Repository.__dict__ if not p.startswith('_')}:
+ elif tag in set(p for p in Repository.__dict__ if not p.startswith('_')):
continue
return result
@@ -349,7 +349,7 @@ def get_repo_list(kind='all'):
return list(
RE_REPO_TAG.search(m.group(1)).group('value').split('/')[0]
for m in RE_REPO_INFOS.finditer(
- check_output(cmd, env=env).decode('utf-8')))
+ util.check_output(cmd, env=env).decode('utf-8')))
def get_repo_database():
"""
@@ -360,7 +360,7 @@ def get_repo_database():
cmd = ["yum", "-q", "repoinfo", "all"]
env = os.environ.copy()
env['LC_ALL'] = 'C'
- repo_infos = check_output(cmd, env=env).decode('utf-8')
+ repo_infos = util.check_output(cmd, env=env).decode('utf-8')
for match in RE_REPO_INFOS.finditer(repo_infos):
result.append(make_repo(match.group(1)))
return result
@@ -374,9 +374,9 @@ def is_repo_enabled(repo):
if isinstance(repo, Repository):
repo = repo.repoid
cmd = ["yum-config-manager", repo]
- out = check_output(cmd)
+ out = util.check_output(cmd)
match = RE_REPO_ENABLED.search(out)
- return bool(match) and match.group(1).lower() in {"true", "yes", "1"}
+ return bool(match) and match.group(1).lower() in ("true", "yes", "1")
def set_repos_enabled(repos, enable=True):
"""
diff --git a/src/software/test/run.py b/src/software/test/run.py
index b8f11a6..aff77f3 100755
--- a/src/software/test/run.py
+++ b/src/software/test/run.py
@@ -27,7 +27,7 @@ Preferably a ``suite()`` function should be defined there as well.
They must be named according to shell regexp: ``"test_*.py"``.
"""
-import argparse
+import optparse
import copy
import getpass
import inspect
@@ -52,51 +52,48 @@ def parse_cmd_line():
:returns: ``(parsed arguments object, arguments for unittest.main())``.
:rtype: tuple
"""
- parser = argparse.ArgumentParser(
- add_help=False, # handle help message ourselves
+ parser = optparse.OptionParser(
+ add_help_option=False, # handle help message ourselves
description="Test OpenLMI Software providers. Arguments"
" for unittest main function can be added after \"--\""
" switch.")
- parser.add_argument("--url",
+ parser.add_option("--url",
default=os.environ.get("LMI_CIMOM_URL", "http://localhost:5988"),
help="Network port to use for tests")
- parser.add_argument("-u", "--user",
+ parser.add_option("-u", "--user",
default=os.environ.get("LMI_CIMOM_USERNAME", ''),
help="User for broker authentication.")
- parser.add_argument("-p", "--password",
+ parser.add_option("-p", "--password",
default=os.environ.get("LMI_CIMOM_PASSWORD", ''),
help="User's password.")
- dangerous_group = parser.add_mutually_exclusive_group()
- dangerous_group.add_argument("--run-dangerous", action="store_true",
+ parser.add_option("--run-dangerous", action="store_true",
default=(os.environ.get('LMI_RUN_DANGEROUS', '0') == '1'),
help="Run also tests dangerous for this machine"
" (tests, that manipulate with software database)."
" Overrides environment variable LMI_RUN_DANGEROUS.")
- dangerous_group.add_argument('--no-dangerous', action="store_false",
+ parser.add_option('--no-dangerous', action="store_false",
dest="run_dangerous",
default=os.environ.get('LMI_RUN_DANGEROUS', '0') == '1',
help="Disable dangerous tests.")
- tedious_group = parser.add_mutually_exclusive_group()
- tedious_group.add_argument("--run-tedious", action="store_true",
+ parser.add_option("--run-tedious", action="store_true",
default=(os.environ.get('LMI_RUN_TEDIOUS', '0') == '1'),
help="Run also tedious (long running) for this machine."
" Overrides environment variable LMI_RUN_TEDIOUS.")
- tedious_group.add_argument('--no-tedious', action="store_false",
+ parser.add_option('--no-tedious', action="store_false",
dest="run_tedious",
default=os.environ.get('LMI_RUN_TEDIOUS', '0') == '1',
help="Disable tedious tests.")
- cleanup_group = parser.add_mutually_exclusive_group()
- cleanup_group.add_argument("--cleanup-cache", action="store_true",
+ parser.add_option("--cleanup-cache", action="store_true",
default=os.environ.get('LMI_SOFTWARE_CLEANUP_CACHE', '1') == '1',
help="Clean up all temporary files created for testing purposes."
" If LMI_SOFTWARE_DB_CACHE is set and this is set to False, next"
" run will be much faster because testing database won't need to"
" be generated again. Overrides environment variable"
" LMI_SOFTWARE_CLEANUP_CACHE.")
- cleanup_group.add_argument('--no-cleanup', action="store_false",
+ parser.add_option('--no-cleanup', action="store_false",
dest="cleanup_cache",
default=os.environ.get('LMI_SOFTWARE_CLEANUP_CACHE', '1') == '1',
help="Do not delete database cache file and created repositories."
@@ -104,9 +101,9 @@ def parse_cmd_line():
" to be recreated upon next run. This applies only when"
" LMI_SOFTWARE_DB_CACHE is set.")
- parser.add_argument('-l', '--list-tests', action="store_true",
+ parser.add_option('-l', '--list-tests', action="store_true",
help="List all possible test names.")
- parser.add_argument('-h', '--help', action="store_true",
+ parser.add_option('-h', '--help', action="store_true",
help="Show help message.")
argv = copy.copy(sys.argv)
@@ -115,7 +112,7 @@ def parse_cmd_line():
index = argv.index('--')
argv = argv[:index]
rest = sys.argv[index + 1:]
- args, unknown_args = parser.parse_known_args(argv)
+ args, unknown_args = parser.parse_args(argv)
if args.help:
parser.print_help()
print
diff --git a/src/software/test/test_resource_for_software_identity.py b/src/software/test/test_resource_for_software_identity.py
index c43cb1b..acdf86d 100644
--- a/src/software/test/test_resource_for_software_identity.py
+++ b/src/software/test/test_resource_for_software_identity.py
@@ -191,7 +191,7 @@ class TestResourceForSoftwareIdentity(swbase.SwTestCase):
self.assertEqual(ref.classname, "LMI_SoftwareIdentity")
self.assertEqual(ref.path.key_properties(), ["InstanceID"])
- nevra_dict = {i.ElementName: i for i in refs}
+ nevra_dict = dict((i.ElementName, i) for i in refs)
installed_count = 0
for pkg in repo.packages:
self.assertTrue(pkg.nevra in nevra_dict,
diff --git a/src/software/test/test_software_identity_file_check.py b/src/software/test/test_software_identity_file_check.py
index b059fb7..dd83b71 100644
--- a/src/software/test/test_software_identity_file_check.py
+++ b/src/software/test/test_software_identity_file_check.py
@@ -113,7 +113,7 @@ class TestSoftwareIdentityFileCheck(swbase.SwTestCase):
:returns: Checksum of installed file.
:rtype: string
"""
- return RE_CHECKSUM.match(subprocess.check_output([
+ return RE_CHECKSUM.match(util.check_output([
HASH_COMMAND[csumnum], filename])).group(1).lower()
def make_op(self, pkg, file_name):
diff --git a/src/software/test/test_software_identity_resource.py b/src/software/test/test_software_identity_resource.py
index 8a48d27..9901cd9 100644
--- a/src/software/test/test_software_identity_resource.py
+++ b/src/software/test/test_software_identity_resource.py
@@ -107,7 +107,7 @@ class TestSoftwareIdentityResource(swbase.SwTestCase):
"AccessInfo does not match metalink for repo %s" %
repo.repoid)
elif access_info is not None:
- self.assertIn(access_info, {u.rstrip('/') for u in repo.base_urls},
+ self.assertIn(access_info, (u.rstrip('/') for u in repo.base_urls),
"AccessInfo missing in base_urls for repo %s" % repo.repoid)
self.assertIsInstance(inst.AvailableRequestedStates, list)
diff --git a/src/software/test/util.py b/src/software/test/util.py
index 8a482c3..adac5ea 100644
--- a/src/software/test/util.py
+++ b/src/software/test/util.py
@@ -27,7 +27,7 @@ Common test utilities.
import platform
import pywbem
import re
-from subprocess import call, check_output
+import subprocess
RE_NEVRA = re.compile(
r'^(?P<name>[^\s]+)-(?P<evra>(?P<epoch>\d+):(?P<ver>[^-\s]+)'
@@ -43,6 +43,20 @@ RE_REPO = re.compile(
DEV_NULL = open('/dev/null', 'w')
+def check_output(*popenargs, **kwargs):
+ """ subprocess.check_output for Python 2.6. """
+ process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
+ output, unused_err = process.communicate()
+ retcode = process.poll()
+ if retcode:
+ cmd = kwargs.get("args")
+ if cmd is None:
+ cmd = popenargs[0]
+ error = subprocess.CalledProcessError(retcode, cmd)
+ error.output = output
+ raise error
+ return output
+
def make_nevra(name, epoch, ver, rel, arch, with_epoch='NOT_ZERO'):
"""
@param with_epoch may be one of:
@@ -54,7 +68,7 @@ def make_nevra(name, epoch, ver, rel, arch, with_epoch='NOT_ZERO'):
if with_epoch.lower() == "always":
estr = str(epoch)
elif with_epoch.lower() == "not_zero":
- if epoch and str(epoch).lower() not in {"0", "(none)"}:
+ if epoch and str(epoch).lower() not in ("0", "(none)"):
estr = str(epoch)
if len(estr):
estr += ":"
@@ -98,7 +112,7 @@ def verify_pkg(name):
"""
@return True, if package is installed and passes rpm verification check
"""
- return call(["rpm", "--quiet", "-Va", name]) == 0
+ return subprocess.call(["rpm", "--quiet", "-Va", name]) == 0
def is_config_file(pkg, file_path):