From 3850bba4832916938419f4d499b023ce6e59e1be Mon Sep 17 00:00:00 2001 From: Alexander Kislitsky Date: Wed, 11 Jan 2017 17:40:58 +0300 Subject: [PATCH] Tags info calculation is supported on plugins update For instance we made plugins sync operation. In this case tags info should be processed on the same way as on plugin creation. Also test for tags metadata migration improved. Change-Id: I2eebc40af3c3f360e2ef96958a38c7eae0da43d5 Closes-Bug: #1655264 --- nailgun/nailgun/objects/plugin.py | 2 + .../test/unit/test_migration_fuel_9_2.py | 44 ++++++++++++++++++- .../nailgun/test/unit/test_plugin_adapters.py | 6 +++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/nailgun/nailgun/objects/plugin.py b/nailgun/nailgun/objects/plugin.py index 35e9358b85..620922b53e 100644 --- a/nailgun/nailgun/objects/plugin.py +++ b/nailgun/nailgun/objects/plugin.py @@ -121,6 +121,8 @@ class Plugin(NailgunObject): graphs[graph.pop('type')] = graph data.pop("deployment_tasks", []) # could not be updated + # We must save tags info in the roles_metadata on the update + data = cls._process_tags(data) super(Plugin, cls).update(instance, data) for graph_type, graph_data in six.iteritems(graphs): diff --git a/nailgun/nailgun/test/unit/test_migration_fuel_9_2.py b/nailgun/nailgun/test/unit/test_migration_fuel_9_2.py index b0496f42fc..b86e5c2106 100644 --- a/nailgun/nailgun/test/unit/test_migration_fuel_9_2.py +++ b/nailgun/nailgun/test/unit/test_migration_fuel_9_2.py @@ -524,6 +524,33 @@ def prepare(): ]) }] ) + + db.execute( + meta.tables['plugins'].insert(), + [{ + 'name': 'test_tags', + 'title': 'Test tags plugin', + 'version': '2.0.0', + 'description': 'Test plugin A for Fuel', + 'homepage': 'http://fuel_plugins.test_plugin.com', + 'package_version': '5.0.0', + 'groups': jsonutils.dumps(['tgroup']), + 'authors': jsonutils.dumps(['tauthor']), + 'licenses': jsonutils.dumps(['tlicense']), + 'releases': jsonutils.dumps([ + {'repository_path': 'repositories/ubuntu'} + ]), + 'deployment_tasks': jsonutils.dumps([]), + 'fuel_version': jsonutils.dumps(['9.2']), + 'network_roles_metadata': jsonutils.dumps([]), + 'roles_metadata': jsonutils.dumps({ + 'plugin-tags-controller': { + 'name': 'Plugin Tags Controller', + }, + }), + }] + ) + db.commit() @@ -810,7 +837,7 @@ class TestTags(base.BaseAlembicMigrationTest): primary_tags = db.execute(query).fetchone()[0] self.assertItemsEqual(primary_tags, ['controller', 'role_y']) - def test_tags_meta_migration(self): + def test_tags_releases_meta_migration(self): releases = self.meta.tables['releases'] query = sa.select([releases.c.roles_metadata, releases.c.tags_metadata]) @@ -822,3 +849,18 @@ class TestTags(base.BaseAlembicMigrationTest): tags_meta[role_name].get('has_primary', False), role_meta.get('has_primary', False) ) + self.assertIn('tags', role_meta) + + def test_tags_plugins_meta_migration(self): + plugins = self.meta.tables['plugins'] + query = sa.select([plugins.c.roles_metadata, + plugins.c.tags_metadata]) + for roles_meta, tags_meta in db.execute(query): + tags_meta = jsonutils.loads(tags_meta) + for role_name, role_meta in six.iteritems( + jsonutils.loads(roles_meta)): + self.assertEqual( + tags_meta[role_name].get('has_primary', False), + role_meta.get('has_primary', False) + ) + self.assertIn('tags', role_meta) diff --git a/nailgun/nailgun/test/unit/test_plugin_adapters.py b/nailgun/nailgun/test/unit/test_plugin_adapters.py index edcaa1d910..aad3b0c1ea 100644 --- a/nailgun/nailgun/test/unit/test_plugin_adapters.py +++ b/nailgun/nailgun/test/unit/test_plugin_adapters.py @@ -161,6 +161,12 @@ class TestPluginBase(base.BaseTestCase): self.assertEqual( getattr(self.plugin, key), val) + def test_tags_saved_on_plugins_update(self): + Plugin.update(self.plugin, + {'roles_metadata': self.plugin.roles_metadata}) + for role, meta in self.plugin.roles_metadata.items(): + self.assertIn('tags', meta) + def test_get_deployment_tasks(self): dg = DeploymentGraph.get_for_model(self.plugin_adapter.plugin) DeploymentGraph.update(