Merge "Group together tests that create server and require network resources"
This commit is contained in:
commit
2bf66db706
@ -1,92 +0,0 @@
|
||||
# Copyright 2017 AT&T Corporation.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
from patrole_tempest_plugin import rbac_rule_validation
|
||||
from patrole_tempest_plugin.tests.api.compute import rbac_base
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
|
||||
class AttachInterfacesRbacTest(rbac_base.BaseV2ComputeRbacTest):
|
||||
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
super(AttachInterfacesRbacTest, cls).skip_checks()
|
||||
if not test.is_extension_enabled('os-attach-interfaces', 'compute'):
|
||||
msg = ("%s skipped as os-attach-interfaces not "
|
||||
"enabled." % cls.__name__)
|
||||
raise cls.skipException(msg)
|
||||
if not CONF.compute_feature_enabled.interface_attach:
|
||||
raise cls.skipException(
|
||||
"%s skipped as interface attachment is not available"
|
||||
% cls.__name__)
|
||||
if not CONF.service_available.neutron:
|
||||
raise cls.skipException(
|
||||
'%s skipped as Neutron is required' % cls.__name__)
|
||||
|
||||
@classmethod
|
||||
def setup_credentials(cls):
|
||||
cls.prepare_instance_network()
|
||||
super(AttachInterfacesRbacTest, cls).setup_credentials()
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
super(AttachInterfacesRbacTest, cls).resource_setup()
|
||||
cls.server = cls.create_test_server(wait_until='ACTIVE')
|
||||
|
||||
def _attach_interface_to_server(self):
|
||||
interface = self.interfaces_client.create_interface(
|
||||
self.server['id'])['interfaceAttachment']
|
||||
waiters.wait_for_interface_status(
|
||||
self.interfaces_client, self.server['id'], interface['port_id'],
|
||||
'ACTIVE')
|
||||
self.addCleanup(
|
||||
test_utils.call_and_ignore_notfound_exc,
|
||||
self.os_admin.interfaces_client.delete_interface,
|
||||
self.server['id'], interface['port_id'])
|
||||
return interface
|
||||
|
||||
@decorators.idempotent_id('ddf53cb6-4a0a-4e5a-91e3-6c32aaa3b9b6')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova",
|
||||
rule="os_compute_api:os-attach-interfaces")
|
||||
def test_list_interfaces(self):
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self.interfaces_client.list_interfaces(
|
||||
self.server['id'])['interfaceAttachments']
|
||||
|
||||
@decorators.idempotent_id('d2d3a24d-4738-4bce-a287-36d664746cde')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova",
|
||||
rule="os_compute_api:os-attach-interfaces:create")
|
||||
def test_create_interface(self):
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self._attach_interface_to_server()
|
||||
|
||||
@decorators.idempotent_id('55b05692-ed44-4608-a84c-cd4219c82799')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova",
|
||||
rule="os_compute_api:os-attach-interfaces:delete")
|
||||
def test_delete_interface(self):
|
||||
interface = self._attach_interface_to_server()
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self.interfaces_client.delete_interface(self.server['id'],
|
||||
interface['port_id'])
|
@ -1,66 +0,0 @@
|
||||
# Copyright 2017 AT&T Corporation.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
from patrole_tempest_plugin import rbac_rule_validation
|
||||
from patrole_tempest_plugin.tests.api.compute import rbac_base
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
|
||||
class IpsRbacTest(rbac_base.BaseV2ComputeRbacTest):
|
||||
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
super(IpsRbacTest, cls).skip_checks()
|
||||
if not test.is_extension_enabled('os-ips', 'compute'):
|
||||
msg = "%s skipped as os-ips not enabled." % cls.__name__
|
||||
raise cls.skipException(msg)
|
||||
if not CONF.service_available.neutron:
|
||||
raise cls.skipException(
|
||||
'%s skipped as Neutron is required' % cls.__name__)
|
||||
|
||||
@classmethod
|
||||
def setup_credentials(cls):
|
||||
cls.prepare_instance_network()
|
||||
super(IpsRbacTest, cls).setup_credentials()
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
super(IpsRbacTest, cls).resource_setup()
|
||||
cls.server = cls.create_test_server(wait_until='ACTIVE')
|
||||
|
||||
@decorators.idempotent_id('6886d360-0d86-4760-b1a3-882d81fbebcc')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova",
|
||||
rule="os_compute_api:ips:index")
|
||||
def test_list_addresses(self):
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self.servers_client.list_addresses(self.server['id'])['addresses']
|
||||
|
||||
@decorators.idempotent_id('fa43e7e5-0db9-48eb-9c6b-c11eb766b8e4')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova",
|
||||
rule="os_compute_api:ips:show")
|
||||
def test_list_addresses_by_network(self):
|
||||
addresses = self.servers_client.list_addresses(
|
||||
self.server['id'])['addresses']
|
||||
address = next(iter(addresses))
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self.servers_client.list_addresses_by_network(
|
||||
self.server['id'], address)[address]
|
@ -1,61 +0,0 @@
|
||||
# Copyright 2017 AT&T Corporation.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
|
||||
from patrole_tempest_plugin import rbac_rule_validation
|
||||
from patrole_tempest_plugin.tests.api.compute import rbac_base
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
|
||||
class MultinicRbacTest(rbac_base.BaseV2ComputeRbacTest):
|
||||
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
super(MultinicRbacTest, cls).skip_checks()
|
||||
if not CONF.service_available.neutron:
|
||||
raise cls.skipException("Neutron is required")
|
||||
if not CONF.compute_feature_enabled.interface_attach:
|
||||
raise cls.skipException("Interface attachment is not available.")
|
||||
|
||||
@classmethod
|
||||
def setup_credentials(cls):
|
||||
# This test class requires network and subnet
|
||||
cls.set_network_resources(network=True, subnet=True)
|
||||
super(MultinicRbacTest, cls).setup_credentials()
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
super(MultinicRbacTest, cls).resource_setup()
|
||||
cls.server = cls.create_test_server(wait_until='ACTIVE')
|
||||
|
||||
@rbac_rule_validation.action(
|
||||
service="nova", rule="os_compute_api:os-multinic")
|
||||
@decorators.idempotent_id('bd3e2c74-130a-40f0-8085-124d93fe67da')
|
||||
def test_add_fixed_ip(self):
|
||||
"""Add fixed IP to server."""
|
||||
interfaces = (self.interfaces_client.list_interfaces(self.server['id'])
|
||||
['interfaceAttachments'])
|
||||
if interfaces:
|
||||
network_id = interfaces[0]['net_id']
|
||||
else:
|
||||
network_id = self.interfaces_client.create_interface(
|
||||
self.server['id'])['interfaceAttachment']['net_id']
|
||||
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self.servers_client.add_fixed_ip(self.server['id'],
|
||||
networkId=network_id)
|
@ -18,6 +18,7 @@ import testtools
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
@ -268,3 +269,128 @@ class MiscPolicyActionsRbacTest(rbac_base.BaseV2ComputeRbacTest):
|
||||
self.servers_client.resume_server(self.server_id)
|
||||
waiters.wait_for_server_status(
|
||||
self.os_admin.servers_client, self.server_id, 'ACTIVE')
|
||||
|
||||
|
||||
class MiscPolicyActionsNetworkRbacTest(rbac_base.BaseV2ComputeRbacTest):
|
||||
"""Test multiple policy actions that require a server to be created.
|
||||
|
||||
Only applies to:
|
||||
* policy "families" that require server creation
|
||||
* small policy "families" -- i.e. containing one to three policies
|
||||
* tests that require network resources
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
super(MiscPolicyActionsNetworkRbacTest, cls).skip_checks()
|
||||
# All tests below require Neutron availability.
|
||||
if not CONF.service_available.neutron:
|
||||
raise cls.skipException(
|
||||
'%s skipped as Neutron is required' % cls.__name__)
|
||||
|
||||
@classmethod
|
||||
def setup_credentials(cls):
|
||||
cls.prepare_instance_network()
|
||||
super(MiscPolicyActionsNetworkRbacTest, cls).setup_credentials()
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
super(MiscPolicyActionsNetworkRbacTest, cls).resource_setup()
|
||||
cls.server = cls.create_test_server(wait_until='ACTIVE')
|
||||
|
||||
def _attach_interface_to_server(self):
|
||||
interface = self.interfaces_client.create_interface(
|
||||
self.server['id'])['interfaceAttachment']
|
||||
waiters.wait_for_interface_status(
|
||||
self.os_admin.interfaces_client, self.server['id'],
|
||||
interface['port_id'], 'ACTIVE')
|
||||
self.addCleanup(
|
||||
test_utils.call_and_ignore_notfound_exc,
|
||||
self.interfaces_client.delete_interface,
|
||||
self.server['id'], interface['port_id'])
|
||||
return interface
|
||||
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.interface_attach,
|
||||
"Interface attachment is not available.")
|
||||
@test.requires_ext(extension='os-attach-interfaces', service='compute')
|
||||
@decorators.idempotent_id('ddf53cb6-4a0a-4e5a-91e3-6c32aaa3b9b6')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova",
|
||||
rule="os_compute_api:os-attach-interfaces")
|
||||
def test_list_interfaces(self):
|
||||
"""Test list interfaces, part of os-attach-interfaces."""
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self.interfaces_client.list_interfaces(
|
||||
self.server['id'])['interfaceAttachments']
|
||||
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.interface_attach,
|
||||
"Interface attachment is not available.")
|
||||
@test.requires_ext(extension='os-attach-interfaces', service='compute')
|
||||
@decorators.idempotent_id('d2d3a24d-4738-4bce-a287-36d664746cde')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova",
|
||||
rule="os_compute_api:os-attach-interfaces:create")
|
||||
def test_create_interface(self):
|
||||
"""Test create interface, part of os-attach-interfaces."""
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self._attach_interface_to_server()
|
||||
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.interface_attach,
|
||||
"Interface attachment is not available.")
|
||||
@test.requires_ext(extension='os-attach-interfaces', service='compute')
|
||||
@decorators.idempotent_id('55b05692-ed44-4608-a84c-cd4219c82799')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova",
|
||||
rule="os_compute_api:os-attach-interfaces:delete")
|
||||
def test_delete_interface(self):
|
||||
"""Test delete interface, part of os-attach-interfaces."""
|
||||
interface = self._attach_interface_to_server()
|
||||
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self.interfaces_client.delete_interface(self.server['id'],
|
||||
interface['port_id'])
|
||||
|
||||
@decorators.idempotent_id('6886d360-0d86-4760-b1a3-882d81fbebcc')
|
||||
@test.requires_ext(extension='os-ips', service='compute')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova",
|
||||
rule="os_compute_api:ips:index")
|
||||
def test_list_addresses(self):
|
||||
"""Test list server addresses, part of ips policy family."""
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self.servers_client.list_addresses(self.server['id'])['addresses']
|
||||
|
||||
@decorators.idempotent_id('fa43e7e5-0db9-48eb-9c6b-c11eb766b8e4')
|
||||
@test.requires_ext(extension='os-ips', service='compute')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova",
|
||||
rule="os_compute_api:ips:show")
|
||||
def test_list_addresses_by_network(self):
|
||||
"""Test list server addresses by network, part of ips policy family."""
|
||||
addresses = self.servers_client.list_addresses(self.server['id'])[
|
||||
'addresses']
|
||||
address = next(iter(addresses))
|
||||
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self.servers_client.list_addresses_by_network(
|
||||
self.server['id'], address)[address]
|
||||
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.interface_attach,
|
||||
"Interface attachment is not available.")
|
||||
@test.requires_ext(extension='os-multinic', service='compute')
|
||||
@rbac_rule_validation.action(
|
||||
service="nova", rule="os_compute_api:os-multinic")
|
||||
@decorators.idempotent_id('bd3e2c74-130a-40f0-8085-124d93fe67da')
|
||||
def test_add_fixed_ip(self):
|
||||
"""Test add fixed ip to server network, part of os-multinic."""
|
||||
interfaces = (self.interfaces_client.list_interfaces(self.server['id'])
|
||||
['interfaceAttachments'])
|
||||
if interfaces:
|
||||
network_id = interfaces[0]['net_id']
|
||||
else:
|
||||
network_id = self.interfaces_client.create_interface(
|
||||
self.server['id'])['interfaceAttachment']['net_id']
|
||||
|
||||
self.rbac_utils.switch_role(self, toggle_rbac_role=True)
|
||||
self.servers_client.add_fixed_ip(self.server['id'],
|
||||
networkId=network_id)
|
||||
|
Loading…
Reference in New Issue
Block a user