Ensure we call application_version_set with valid argument

Change-Id: If5ddff7eaae5e23df7d705959cd8bffd1b9c6afe
Closes-Bug: #1767060
This commit is contained in:
Frode Nordahl 2018-04-26 11:19:01 +02:00
parent 5f90ad4ca6
commit fce8db8756
No known key found for this signature in database
GPG Key ID: 6A5D59A3BA48373F
2 changed files with 65 additions and 1 deletions

View File

@ -756,7 +756,25 @@ def assess_status(configs):
"""
assess_status_func(configs)()
if pxc_installed():
application_version_set(get_upstream_version(determine_packages()[0]))
# NOTE(fnordahl) ensure we do not call application_version_set with
# None argument. New charm deployments will have the meta-package
# installed, but upgraded deployments will not.
def _possible_packages():
base = determine_packages()[0]
yield base
if '.' not in base:
for i in range(5, 7+1):
yield base+'-5.'+str(i)
version = None
for pkg in _possible_packages():
version = get_upstream_version(pkg)
if version is not None:
break
else:
log('Unable to determine installed version for package "{}"'
.format(determine_packages()[0]), level=WARNING)
return
application_version_set(version)
def assess_status_func(configs):

View File

@ -467,6 +467,52 @@ class UtilsTestsCTC(CharmTestCase):
)
application_version_set.assert_called_with('5.6.17')
@mock.patch.object(percona_utils, 'pxc_installed')
@mock.patch.object(percona_utils, 'determine_packages')
@mock.patch.object(percona_utils, 'application_version_set')
@mock.patch.object(percona_utils, 'get_upstream_version')
def test_assess_status_find_pkg(self, get_upstream_version,
application_version_set,
determine_packages,
pxc_installed):
get_upstream_version.side_effect = [None, None, '5.6.17']
determine_packages.return_value = ['percona-xtradb-cluster-server']
pxc_installed.return_value = True
with mock.patch.object(percona_utils, 'assess_status_func') as asf:
callee = mock.Mock()
asf.return_value = callee
percona_utils.assess_status('test-config')
asf.assert_called_once_with('test-config')
callee.assert_called_once_with()
get_upstream_version.assert_called_with(
'percona-xtradb-cluster-server-5.6'
)
application_version_set.assert_called_with('5.6.17')
@mock.patch.object(percona_utils, 'log')
@mock.patch.object(percona_utils, 'pxc_installed')
@mock.patch.object(percona_utils, 'determine_packages')
@mock.patch.object(percona_utils, 'application_version_set')
@mock.patch.object(percona_utils, 'get_upstream_version')
def test_assess_status_find_pkg_fails(self, get_upstream_version,
application_version_set,
determine_packages,
pxc_installed, log):
get_upstream_version.return_value = None
determine_packages.return_value = ['percona-xtradb-cluster-server']
pxc_installed.return_value = True
with mock.patch.object(percona_utils, 'assess_status_func') as asf:
callee = mock.Mock()
asf.return_value = callee
percona_utils.assess_status('test-config')
asf.assert_called_once_with('test-config')
callee.assert_called_once_with()
get_upstream_version.assert_called_with(
'percona-xtradb-cluster-server-5.7'
)
self.assertFalse(application_version_set.called)
self.assertTrue(log.called)
@mock.patch.object(percona_utils, 'services')
@mock.patch.object(percona_utils, 'REQUIRED_INTERFACES')
@mock.patch.object(percona_utils, 'make_assess_status_func')