New plugin data is collected in statsender

White list for plugins info added into statsender.
Now we are checking that all plugin data is collected in tests. In
case of adding new property to Plugin DB model test checks that
this field is collected by statsender.

Change-Id: Iae3f41b839172b5f6d4f79b207b2a19c309b6e8b
Closes-Bug: #1521596
This commit is contained in:
Alexander Kislitsky 2015-12-01 16:40:53 +03:00 committed by Alexander Kislitsky
parent 34e4f4f0dc
commit 5ded5017e5
2 changed files with 56 additions and 43 deletions

View File

@ -134,6 +134,27 @@ class InstallationInfo(object):
'vsphere_cluster'), 'vmware_az_nova_computes_num', len),
)
plugin_info_white_list = (
# ((path, to, property), 'map_to_name', transform_function)
WhiteListRule(('id',), 'id', None),
WhiteListRule(('name',), 'name', None),
WhiteListRule(('version',), 'version', None),
WhiteListRule(('releases',), 'releases', None),
WhiteListRule(('fuel_version',), 'fuel_version', None),
WhiteListRule(('package_version',), 'package_version', None),
WhiteListRule(('groups',), 'groups', None),
WhiteListRule(('licenses',), 'licenses', None),
WhiteListRule(('is_hotpluggable',), 'is_hotpluggable', None),
WhiteListRule(('attributes_metadata',), 'attributes_metadata', None),
WhiteListRule(('volumes_metadata',), 'volumes_metadata', None),
WhiteListRule(('roles_metadata',), 'roles_metadata', None),
WhiteListRule(('network_roles_metadata',),
'network_roles_metadata', None),
WhiteListRule(('components_metadata',), 'components_metadata', None),
WhiteListRule(('deployment_tasks',), 'deployment_tasks', None),
WhiteListRule(('tasks',), 'tasks', None),
)
def fuel_release_info(self):
return settings.VERSION
@ -213,14 +234,8 @@ class InstallationInfo(object):
def get_cluster_plugins_info(self, cluster):
plugins_info = []
for plugin_inst in ClusterPlugins.get_enabled(cluster.id):
plugin_info = {
"id": plugin_inst.id,
"name": plugin_inst.name,
"version": plugin_inst.version,
"releases": plugin_inst.releases,
"fuel_version": plugin_inst.fuel_version,
"package_version": plugin_inst.package_version,
}
plugin_info = self.get_attributes(plugin_inst.__dict__,
self.plugin_info_white_list)
plugins_info.append(plugin_info)
return plugins_info

View File

@ -272,45 +272,15 @@ class TestInstallationInfo(BaseTestCase):
)
def test_plugins_info(self):
info = InstallationInfo()
cluster = self.env.create_cluster(api=False)
plugin = self.env.create_plugin(api=False, cluster=cluster)
plugin_kwargs = self.env.get_default_plugin_metadata()
plugin_obj = plugins.Plugin(**plugin_kwargs)
plugin_kwargs['id'] = plugin.id
self.db.add(plugin_obj)
self.db.flush()
plugin_kwargs["id"] = plugin_obj.id
cluster_plugin_kwargs = {
"cluster_id": cluster.id,
"plugin_id": plugin_obj.id,
"enabled": True
}
cluster_plugin = plugins.ClusterPlugins(**cluster_plugin_kwargs)
self.db.add(cluster_plugin)
self.db.flush()
expected_attributes_names = (
"id",
"name",
"version",
"releases",
"fuel_version",
"package_version",
)
expected_info = dict(
[(key, value) for key, value in six.iteritems(plugin_kwargs)
if key in expected_attributes_names]
)
expected = [expected_info]
actual = info.get_cluster_plugins_info(cluster)
self.assertEqual(expected, actual)
for name, expected in six.iteritems(plugin_kwargs):
actual = getattr(plugin, name)
self.assertEqual(expected, actual)
def test_installation_info(self):
info = InstallationInfo()
@ -470,6 +440,30 @@ class TestInstallationInfo(BaseTestCase):
for path in expected_paths:
self.assertIn(path, actual_paths)
def test_all_plugin_data_collected(self):
cluster = self.env.create_cluster(api=False)
self.env.create_plugin(api=False, cluster=cluster)
# Fetching plugin info
info = InstallationInfo().get_cluster_plugins_info(cluster)
actual_plugin = info[0]
# Creating plugin data schema
plugin_schema = {}
for column in inspect(plugins.Plugin).columns:
plugin_schema[six.text_type(column.name)] = None
# Removing of not required fields
remove_fields = ('description', 'title', 'authors', 'homepage')
for field in remove_fields:
plugin_schema.pop(field)
# If test failed here it means, that you have added properties
# to plugin and they are not exported into statistics.
# If you don't know what to do, contact fuel-stats team please.
for key in six.iterkeys(plugin_schema):
self.assertIn(key, actual_plugin)
def test_wite_list_unique_names(self):
names = set(rule.map_to_name for rule in
InstallationInfo.attributes_white_list)
@ -479,3 +473,7 @@ class TestInstallationInfo(BaseTestCase):
InstallationInfo.vmware_attributes_white_list)
self.assertEqual(len(InstallationInfo.vmware_attributes_white_list),
len(names))
names = set(rule.map_to_name for rule in
InstallationInfo.plugin_info_white_list)
self.assertEqual(len(InstallationInfo.plugin_info_white_list),
len(names))