Cluster.extenstions shouldn't have duplications

PUT converts input data to set(), so
ClusterExtensionsHandler will never produce duplications
in a list of enabled extensions.

Change-Id: I3631f9ba8bebc24102c13544d8463afdddd0bef4
Blueprint: extensions-management
Related-Bug: #1614526
This commit is contained in:
Alexander Gordeev 2016-08-24 20:11:04 +03:00
parent b8a2ee2c07
commit 06686519a0
3 changed files with 22 additions and 2 deletions

View File

@ -548,6 +548,6 @@ class ClusterExtensionsHandler(BaseHandler):
* 404 (cluster not found in db)
"""
cluster = self._get_cluster_obj(cluster_id)
data = self.checked_data()
data = set(self.checked_data())
set_extensions_for_object(cluster, data)
return cluster.extensions

View File

@ -199,7 +199,8 @@ def _collect_data_pipelines_for_cluster(cluster):
def _collect_extensions_for_cluster(cluster):
return [get_extension(e) for e in set(cluster.extensions)]
for e in cluster.extensions:
yield get_extension(e)
def fire_callback_on_node_serialization_for_deployment(node, node_data):

View File

@ -418,6 +418,25 @@ class TestClusterExtension(BaseIntegrationTest):
self.assertEqual(resp.status_code, 200)
self.assertItemsEqual(resp.json_body, enabled_extensions)
def test_enabling_duplicated_extensions(self):
extensions = 'bareon', 'volume_manager'
requested_extensions = 2 * extensions
with mock.patch(
'nailgun.api.v1.validators.extension.get_all_extensions',
return_value=make_mock_extensions(extensions)):
resp = self.app.put(
reverse(
'ClusterExtensionsHandler',
kwargs={'cluster_id': self.cluster.id}),
jsonutils.dumps(requested_extensions),
headers=self.default_headers,
)
self.assertEqual(resp.status_code, 200)
self.db.refresh(self.cluster)
self.assertItemsEqual(self.cluster.extensions, extensions)
def test_enabling_extensions(self):
extensions = 'bareon', 'volume_manager'