diff --git a/fuelweb_test/helpers/decorators.py b/fuelweb_test/helpers/decorators.py index ca4b9f508..3310b0839 100644 --- a/fuelweb_test/helpers/decorators.py +++ b/fuelweb_test/helpers/decorators.py @@ -40,6 +40,7 @@ from fuelweb_test.helpers.utils import pull_out_logs_via_ssh from fuelweb_test.helpers.utils import store_astute_yaml from fuelweb_test.helpers.utils import store_packages_json from fuelweb_test.helpers.utils import TimeStat +from gates_tests.helpers.exceptions import ConfigurationException def save_logs(url, path, auth_token=None, chunk_size=1024): @@ -246,7 +247,9 @@ def update_fuel(func): local_packages_dir=settings.UPDATE_FUEL_PATH, centos_repo_path=settings.LOCAL_MIRROR_CENTOS, ubuntu_repo_path=settings.LOCAL_MIRROR_UBUNTU) - + if not centos_files_count and not ubuntu_files_count: + raise ConfigurationException('Nothing to update,' + ' packages to update values is 0') cluster_id = environment.fuel_web.get_last_created_cluster() if centos_files_count > 0: diff --git a/fuelweb_test/helpers/utils.py b/fuelweb_test/helpers/utils.py index 3ba601476..34ad68459 100644 --- a/fuelweb_test/helpers/utils.py +++ b/fuelweb_test/helpers/utils.py @@ -13,6 +13,7 @@ # under the License. import ConfigParser +from distutils import version import inspect import json import time @@ -29,6 +30,7 @@ from fuelweb_test import logger from fuelweb_test import logwrap from fuelweb_test import settings from fuelweb_test.settings import MASTER_IS_CENTOS7 +from gates_tests.helpers import exceptions @logwrap @@ -334,6 +336,11 @@ def cond_upload(remote, source, target, condition=''): files_count += 1 logger.debug("File '{0}' uploaded to the remote folder '{1}'" .format(source, target)) + if 'deb' in entry: + continue + entry_name = entry[0:entry.rfind('-', 0, entry.rfind('-'))] + asserts.assert_true(compare_packages_version( + remote, entry_name, remote_path)) else: logger.debug("Pattern '{0}' doesn't match the file '{1}', " "uploading skipped".format(condition, local_path)) @@ -717,3 +724,42 @@ def get_process_uptime(remote, process_name): uptime += int(ps_output[-i]) * time_factor time_factor *= 60 return uptime + + +def get_package_version(remote_admin, package, income=None): + if income: + cmd_version = ('rpm ' + '-qp {0} --queryformat ' + '"%{{VERSION}} %{{RELEASE}}"'.format(package)) + else: + cmd_version = ('rpm ' + '-q {0} --queryformat ' + '"%{{VERSION}} %{{RELEASE}}"'.format(package)) + result = remote_admin.execute(cmd_version) + logger.debug('Command {0} execution result {1}'.format( + cmd_version, result)) + if result['exit_code'] != 0: + asserts.assert_true('not installed' in ''.join(result['stdout']), + 'Command {0} fails by unexpected ' + 'reason {1}'.format(cmd_version, result)) + return None + return ''.join(result['stdout']).strip() + + +def compare_packages_version(remote, package_name, income_package_name): + income_release, income_version = get_package_version( + remote, income_package_name, income=True).split(' ') + if not get_package_version(remote, package_name): + return True + installed_release, installed_version = get_package_version( + remote, package_name).split(' ') + if not version.LooseVersion(income_release) == version.LooseVersion( + installed_release): + raise exceptions.PackageVersionError( + package=income_package_name, version=income_release) + if version.LooseVersion(installed_version) >= version.LooseVersion( + income_version): + raise exceptions.PackageVersionError( + package=income_package_name, version=income_version) + else: + return True diff --git a/gates_tests/helpers/exceptions.py b/gates_tests/helpers/exceptions.py index cc53f2196..52584dbed 100644 --- a/gates_tests/helpers/exceptions.py +++ b/gates_tests/helpers/exceptions.py @@ -15,3 +15,13 @@ class ConfigurationException(Exception): pass + + +class PackageVersionError(Exception): + def __init__(self, package, version): + self.package = package + self.version = version + + def __repr__(self): + return 'Package {0} has wrong version {1}'.format( + self.package, self.version) diff --git a/gates_tests/helpers/utils.py b/gates_tests/helpers/utils.py index d10f2689c..9c9086ad6 100644 --- a/gates_tests/helpers/utils.py +++ b/gates_tests/helpers/utils.py @@ -15,13 +15,12 @@ import os from proboscis.asserts import assert_equal - from devops.helpers import helpers -from fuelweb_test.helpers import checkers -from gates_tests.helpers import exceptions +from fuelweb_test.helpers import checkers from fuelweb_test import logger from fuelweb_test import settings +from gates_tests.helpers import exceptions def replace_fuel_agent_rpm(environment): diff --git a/system_test/__init__.py b/system_test/__init__.py index a157bf1a2..48ddb3342 100644 --- a/system_test/__init__.py +++ b/system_test/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2014 Mirantis, Inc. +# Copyright 2015 Mirantis, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain