Add package version check

To avoid false positive result in gate fuel library test add next assertion:

* We have packages that should be updated - if not raise error
* Packages from review is higer version that installed - if not raise error

Change-Id: I065bef8f73d2abdb1b3a905a2720a2db5277e4fc
Closes-Bug: #1523466
This commit is contained in:
Tatyana Leontovich 2015-12-09 19:31:07 +02:00
parent 3acd8e818b
commit 1926f5498b
5 changed files with 63 additions and 5 deletions

View File

@ -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:

View File

@ -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

View File

@ -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)

View File

@ -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):

View File

@ -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