Bulk creation of SecurityGroups
Currently, Bulk Creation of security groups
is enabled, but due to a mismatch in the function
signature, it is not possible to create security
groups in bulk.
This patch allows the same.
Change-Id: Id1c7a520aa1bb58984b199c86aca2267b98e6b3e
Closes-Bug: #1604662
diff --git a/neutron/tests/tempest/api/test_security_groups.py b/neutron/tests/tempest/api/test_security_groups.py
index a6009e4..4520ecc 100644
--- a/neutron/tests/tempest/api/test_security_groups.py
+++ b/neutron/tests/tempest/api/test_security_groups.py
@@ -53,3 +53,17 @@
self.assertEqual(show_body['security_group']['name'], new_name)
self.assertEqual(show_body['security_group']['description'],
new_description)
+
+ @test.idempotent_id('7c0ecb10-b2db-11e6-9b14-000c29248b0d')
+ def test_create_bulk_sec_groups(self):
+ # Creates 2 sec-groups in one request
+ sec_nm = [data_utils.rand_name('secgroup'),
+ data_utils.rand_name('secgroup')]
+ body = self.client.create_bulk_security_groups(sec_nm)
+ created_sec_grps = body['security_groups']
+ self.assertEqual(2, len(created_sec_grps))
+ for secgrp in created_sec_grps:
+ self.addCleanup(self.client.delete_security_group,
+ secgrp['id'])
+ self.assertIn(secgrp['name'], sec_nm)
+ self.assertIsNotNone(secgrp['id'])
diff --git a/neutron/tests/tempest/services/network/json/network_client.py b/neutron/tests/tempest/services/network/json/network_client.py
index 3b1a9a8..93e31ea 100644
--- a/neutron/tests/tempest/services/network/json/network_client.py
+++ b/neutron/tests/tempest/services/network/json/network_client.py
@@ -251,6 +251,18 @@
self.expected_success(201, resp.status)
return service_client.ResponseBody(resp, body)
+ def create_bulk_security_groups(self, security_group_list):
+ group_list = [{'security_group': {'name': name}}
+ for name in security_group_list]
+ post_data = {'security_groups': group_list}
+ body = self.serialize_list(post_data, 'security_groups',
+ 'security_group')
+ uri = self.get_uri("security-groups")
+ resp, body = self.post(uri, body)
+ body = {'security_groups': self.deserialize_list(body)}
+ self.expected_success(201, resp.status)
+ return service_client.ResponseBody(resp, body)
+
def wait_for_resource_deletion(self, resource_type, id):
"""Waits for a resource to be deleted."""
start_time = int(time.time())