Merge "Plugin developer can specify major version in release dependencies"

This commit is contained in:
Jenkins 2015-03-05 11:57:34 +00:00 committed by Gerrit Code Review
commit 43aec17cad
2 changed files with 56 additions and 33 deletions

View File

@ -110,12 +110,25 @@ class ClusterAttributesPluginBase(object):
# plugin writer should be able to specify ha in release['mode']
# and know nothing about ha_compact
mode_compat = any(mode in cluster.mode for mode in release['mode'])
release_version_compat = (
cluster.release.version == release['version'])
release_version_compat = self._is_release_version_compatible(
cluster.release.version, release['version'])
if all((os_compat, mode_compat, release_version_compat)):
return True
return False
def _is_release_version_compatible(self, rel_version, plugin_rel_version):
"""Checks if release version is compatible with
plugin version.
:param str rel_version: release version
:param str plugin_rel_version: plugin release version
:returns: True if compatible, Fals if not
"""
rel_os, rel_fuel = rel_version.split('-')
plugin_os, plugin_rel = plugin_rel_version.split('-')
return rel_os.startswith(plugin_os) and rel_fuel.startswith(plugin_rel)
def update_metadata(self, attributes):
"""Overwrights only default values in metadata.
Plugin should be able to provide UI "native" conditions

View File

@ -169,50 +169,60 @@ class TestClusterCompatiblityValidation(base.BaseTestCase):
def setUp(self):
super(TestClusterCompatiblityValidation, self).setUp()
self.plugin = Plugin.create(self.env.get_default_plugin_metadata())
self.plugin = Plugin.create(self.env.get_default_plugin_metadata(
releases=[{
'version': '2014.2-6.0',
'os': 'ubuntu',
'mode': ['ha']}]))
self.attr_plugin = attr_plugin.ClusterAttributesPluginV1(self.plugin)
def get_cluster(self, os, mode, version):
def cluster_mock(self, os, mode, version):
release = mock.Mock(operating_system=os, version=version)
cluster = mock.Mock(mode=mode, release=release)
return cluster
def validate_with_cluster(self, **kwargs):
cluster = self.cluster_mock(**kwargs)
return self.attr_plugin.validate_cluster_compatibility(cluster)
def test_validation_ubuntu_ha(self):
cluster = self.get_cluster(
self.assertTrue(self.validate_with_cluster(
os='Ubuntu',
mode='ha_compact',
version='2014.2-6.0')
validated = self.attr_plugin.validate_cluster_compatibility(cluster)
self.assertTrue(validated)
def test_validation_centos_multinode(self):
cluster = self.get_cluster(
os='Centos',
mode='multinode',
version='2014.2-6.0')
validated = self.attr_plugin.validate_cluster_compatibility(cluster)
self.assertTrue(validated)
def test_not_existent_os(self):
cluster = self.get_cluster(
os='Fedora',
mode='multinode',
version='2014.2-6.0')
validated = self.attr_plugin.validate_cluster_compatibility(cluster)
self.assertFalse(validated)
version='2014.2-6.0'))
def test_plugin_provided_ha_compact(self):
cluster = self.get_cluster(
self.assertTrue(self.validate_with_cluster(
os='Ubuntu',
mode='ha_compact',
version='2014.2-6.0')
validated = self.attr_plugin.validate_cluster_compatibility(cluster)
self.assertTrue(validated)
version='2014.2-6.0'))
def test_version_mismatch(self):
cluster = self.get_cluster(
def test_not_existent_os(self):
self.assertFalse(self.validate_with_cluster(
os='Centos',
mode='multinode',
version='2014.2-6.0'))
def test_version_fuel_mismatch(self):
self.assertFalse(self.validate_with_cluster(
os='Ubuntu',
mode='ha_compact',
version='2014.2.1-6.0')
validated = self.attr_plugin.validate_cluster_compatibility(cluster)
self.assertFalse(validated)
version='2014.2-6.1'))
def test_version_os_mismatch(self):
self.assertFalse(self.validate_with_cluster(
os='Ubuntu',
mode='ha_compact',
version='2014.3-6.1'))
def test_validation_centos_multinode(self):
self.assertFalse(self.validate_with_cluster(
os='Ubuntu',
mode='multinode',
version='2014.2-6.0'))
def test_validation_centos_different_minor_version(self):
self.assertTrue(self.validate_with_cluster(
os='Ubuntu',
mode='ha_compact',
version='2014.2.99-6.0.99'))