diff options
author | Jan Safranek <jsafrane@redhat.com> | 2014-04-18 14:59:08 +0200 |
---|---|---|
committer | Jan Safranek <jsafrane@redhat.com> | 2014-04-18 14:59:08 +0200 |
commit | 91a9c755e9c95fccc08bf915ba7f196700c82923 (patch) | |
tree | 0bffc7fbc8f560e841b1cb331b31afe06bdcef3e /src/software | |
parent | 45f4b021a9f13c1ec64b56ea16e2b3d2a121c41c (diff) | |
download | openlmi-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
Diffstat (limited to 'src/software')
-rw-r--r-- | src/software/test/package.py | 8 | ||||
-rw-r--r-- | src/software/test/reposetup.py | 7 | ||||
-rw-r--r-- | src/software/test/repository.py | 18 | ||||
-rwxr-xr-x | src/software/test/run.py | 33 | ||||
-rw-r--r-- | src/software/test/test_resource_for_software_identity.py | 2 | ||||
-rw-r--r-- | src/software/test/test_software_identity_file_check.py | 2 | ||||
-rw-r--r-- | src/software/test/test_software_identity_resource.py | 2 | ||||
-rw-r--r-- | src/software/test/util.py | 20 |
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): |