Merge "Create or attach interface should use specific network"
diff --git a/patrole_tempest_plugin/tests/api/compute/rbac_base.py b/patrole_tempest_plugin/tests/api/compute/rbac_base.py
index 1bd1cc7..18d2f48 100644
--- a/patrole_tempest_plugin/tests/api/compute/rbac_base.py
+++ b/patrole_tempest_plugin/tests/api/compute/rbac_base.py
@@ -35,6 +35,9 @@
cls.setup_rbac_utils()
cls.hosts_client = cls.os_primary.hosts_client
cls.tenant_usages_client = cls.os_primary.tenant_usages_client
+ cls.networks_client = cls.os_primary.networks_client
+ cls.subnets_client = cls.os_primary.subnets_client
+ cls.ports_client = cls.os_primary.ports_client
@classmethod
def create_flavor(cls, **kwargs):
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_misc_policy_actions_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_misc_policy_actions_rbac.py
index 9cf476b..d393a4c 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_misc_policy_actions_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_misc_policy_actions_rbac.py
@@ -13,6 +13,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+import netaddr
+
import testtools
from tempest.common import utils
@@ -566,12 +568,48 @@
@classmethod
def resource_setup(cls):
+ def _cleanup_ports(network_id):
+ ports = cls.ports_client.\
+ list_ports(network_id=network_id)['ports']
+ for port in ports:
+ test_utils.call_and_ignore_notfound_exc(
+ cls.ports_client.delete_port,
+ port['id'])
+
super(MiscPolicyActionsNetworkRbacTest, cls).resource_setup()
cls.server = cls.create_test_server(wait_until='ACTIVE')
+ # Create network the interface will be attached to
+ network_name = \
+ data_utils.rand_name(cls.__class__.__name__ + '-network')
+ post_body = {'name': network_name}
+ post_body['router:external'] = False
+ post_body['shared'] = True
+ post_body['port_security_enabled'] = True
+ cls.network = \
+ cls.networks_client.create_network(**post_body)['network']
+ cls.addClassResourceCleanup(
+ cls.networks_client.delete_network,
+ cls.network['id'])
+
+ # Create subnet for network
+ cls.cidr = netaddr.IPNetwork(CONF.network.project_network_cidr)
+ cls.subnet = cls.subnets_client.create_subnet(
+ network_id=cls.network['id'],
+ cidr=cls.cidr,
+ ip_version=4)['subnet']
+ cls.addClassResourceCleanup(
+ cls.subnets_client.delete_subnet,
+ cls.subnet['id'])
+
+ # ports on the network need to be deleted before the network can
+ # be deleted
+ cls.addClassResourceCleanup(_cleanup_ports, cls.network['id'])
+
def _attach_interface_to_server(self):
+ network_id = self.network['id']
interface = self.interfaces_client.create_interface(
- self.server['id'])['interfaceAttachment']
+ self.server['id'], net_id=network_id)['interfaceAttachment']
waiters.wait_for_interface_status(
self.interfaces_client, self.server['id'],
interface['port_id'], 'ACTIVE')
@@ -616,9 +654,10 @@
rule="os_compute_api:os-attach-interfaces:create")
def test_create_interface(self):
"""Test create interface, part of os-attach-interfaces."""
+ network_id = self.network['id']
with self.rbac_utils.override_role(self):
interface = self.interfaces_client.create_interface(
- self.server['id'])['interfaceAttachment']
+ self.server['id'], net_id=network_id)['interfaceAttachment']
waiters.wait_for_interface_status(
self.interfaces_client, self.server['id'],
interface['port_id'], 'ACTIVE')