Skip to content

Commit 82ceb6b

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Reproduce bug 1945310" into stable/xena
2 parents 7df9379 + 1066353 commit 82ceb6b

File tree

2 files changed

+216
-0
lines changed

2 files changed

+216
-0
lines changed

nova/tests/fixtures/neutron.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ def list_ports(self, retrieve_all=True, **_params):
5151
self.is_admin, retrieve_all=retrieve_all, **_params,
5252
)
5353

54+
def show_port(self, port_id, **_params):
55+
return self.fixture.show_port(
56+
port_id, is_admin=self.is_admin, **_params,
57+
)
58+
5459

5560
# TODO(stephenfin): We should split out the stubs of neutronclient from the
5661
# stubs of 'nova.network.neutron' to simplify matters
@@ -805,6 +810,14 @@ def show_port(self, port_id, **_params):
805810

806811
port = copy.deepcopy(self._ports[port_id])
807812
self._merge_in_active_binding(port)
813+
814+
# port.resource_request is admin only, if the client is not an admin
815+
# client then remove the content of the field from the response to
816+
# properly simulate neutron's behavior
817+
if not _params.get('is_admin', True):
818+
if 'resource_request' in port:
819+
port['resource_request'] = None
820+
808821
return {'port': port}
809822

810823
def delete_port(self, port_id, **_params):

nova/tests/functional/test_servers_resource_request.py

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import copy
1616
import logging
17+
import unittest
1718

1819
from keystoneauth1 import adapter
1920
import mock
@@ -813,12 +814,18 @@ def setUp(self):
813814
'os_compute_api:servers:show': '@',
814815
'os_compute_api:os-attach-interfaces': '@',
815816
'os_compute_api:os-attach-interfaces:create': '@',
817+
'os_compute_api:os-attach-interfaces:show': '@',
816818
'os_compute_api:os-shelve:shelve': '@',
817819
'os_compute_api:os-shelve:unshelve': '@',
818820
'os_compute_api:os-migrate-server:migrate_live': '@',
819821
'os_compute_api:os-evacuate': '@',
820822
})
821823

824+
# this is bug 1945310
825+
@unittest.expectedFailure
826+
def test_interface_attach_with_resource_request_old_compute(self):
827+
super().test_interface_attach_with_resource_request_old_compute()
828+
822829

823830
class PortResourceRequestBasedSchedulingTest(
824831
PortResourceRequestBasedSchedulingTestBase):
@@ -1497,6 +1504,37 @@ def test_sriov_macvtap_port_with_resource_request(self):
14971504
port_binding['pci_slot'])
14981505

14991506

1507+
class NonAdminPortResourceRequestTests(
1508+
PortResourceRequestBasedSchedulingTest
1509+
):
1510+
def setUp(self):
1511+
super().setUp()
1512+
# switch to non admin api
1513+
self.api = self.api_fixture.api
1514+
self.api.microversion = self.microversion
1515+
1516+
# allow non-admin to call the operations
1517+
self.policy.set_rules({
1518+
'os_compute_api:servers:create': '@',
1519+
'os_compute_api:servers:delete': '@',
1520+
'os_compute_api:servers:create:attach_network': '@',
1521+
'os_compute_api:servers:show': '@',
1522+
'os_compute_api:os-attach-interfaces': '@',
1523+
'os_compute_api:os-attach-interfaces:create': '@',
1524+
'os_compute_api:os-attach-interfaces:delete': '@',
1525+
'os_compute_api:os-attach-interfaces:show': '@',
1526+
'os_compute_api:os-server-external-events:create': '@',
1527+
'os_compute_api:os-hypervisors:list': '@',
1528+
'os_compute_api:os-migrations:index': '@',
1529+
'os_compute_api:os-services:list': '@',
1530+
})
1531+
1532+
# this is bug 1945310
1533+
@unittest.expectedFailure
1534+
def test_interface_detach_with_port_with_bandwidth_request(self):
1535+
super().test_interface_detach_with_port_with_bandwidth_request()
1536+
1537+
15001538
class ExtendedPortResourceRequestBasedSchedulingTestBase(
15011539
PortResourceRequestBasedSchedulingTestBase):
15021540
"""A base class for tests with neutron extended resource request."""
@@ -1617,6 +1655,37 @@ def setUp(self):
16171655
MultiGroupResourceRequestNeutronFixture(self))
16181656

16191657

1658+
class NonAdminMultiGroupResReqTests(
1659+
MultiGroupResourceRequestBasedSchedulingTest
1660+
):
1661+
def setUp(self):
1662+
super().setUp()
1663+
# switch to non admin api
1664+
self.api = self.api_fixture.api
1665+
self.api.microversion = self.microversion
1666+
1667+
# allow non-admin to call the operations
1668+
self.policy.set_rules({
1669+
'os_compute_api:servers:create': '@',
1670+
'os_compute_api:servers:delete': '@',
1671+
'os_compute_api:servers:create:attach_network': '@',
1672+
'os_compute_api:servers:show': '@',
1673+
'os_compute_api:os-attach-interfaces': '@',
1674+
'os_compute_api:os-attach-interfaces:create': '@',
1675+
'os_compute_api:os-attach-interfaces:delete': '@',
1676+
'os_compute_api:os-attach-interfaces:show': '@',
1677+
'os_compute_api:os-server-external-events:create': '@',
1678+
'os_compute_api:os-hypervisors:list': '@',
1679+
'os_compute_api:os-migrations:index': '@',
1680+
'os_compute_api:os-services:list': '@',
1681+
})
1682+
1683+
# this is bug 1945310
1684+
@unittest.expectedFailure
1685+
def test_interface_detach_with_port_with_bandwidth_request(self):
1686+
super().test_interface_detach_with_port_with_bandwidth_request()
1687+
1688+
16201689
class ServerMoveWithPortResourceRequestTest(
16211690
PortResourceRequestBasedSchedulingTestBase):
16221691

@@ -2548,6 +2617,57 @@ def test_unshelve_offloaded_server_with_qos_port_fails_due_to_neutron(
25482617
server, qos_normal_port, qos_sriov_port)
25492618

25502619

2620+
class NonAdminServerMoveWithPortResourceRequestTests(
2621+
ServerMoveWithPortResourceRequestTest
2622+
):
2623+
def setUp(self):
2624+
super().setUp()
2625+
# switch to non admin api
2626+
self.api = self.api_fixture.api
2627+
self.api.microversion = self.microversion
2628+
2629+
# allow non-admin to call the operations
2630+
self.policy.set_rules({
2631+
'os_compute_api:servers:create': '@',
2632+
'os_compute_api:servers:delete': '@',
2633+
'os_compute_api:os-services:update': '@',
2634+
'os_compute_api:servers:create:attach_network': '@',
2635+
'os_compute_api:servers:show': '@',
2636+
'os_compute_api:os-extended-server-attributes': '@',
2637+
'os_compute_api:os-shelve:shelve': '@',
2638+
'os_compute_api:os-shelve:unshelve': '@',
2639+
'os_compute_api:os-migrate-server:migrate': '@',
2640+
'os_compute_api:os-migrate-server:migrate_live': '@',
2641+
'os_compute_api:servers:resize': '@',
2642+
'os_compute_api:servers:confirm_resize': '@',
2643+
'os_compute_api:servers:revert_resize': '@',
2644+
'os_compute_api:os-evacuate': '@',
2645+
'os_compute_api:os-hypervisors:list': '@',
2646+
'os_compute_api:os-migrations:index': '@',
2647+
'os_compute_api:os-services:list': '@',
2648+
'compute:servers:create:requested_destination': '@',
2649+
'os_compute_api:os-instance-actions:show': '@',
2650+
'os_compute_api:os-instance-actions:list': '@',
2651+
})
2652+
2653+
# this is bug 1945310
2654+
@unittest.expectedFailure
2655+
def test_live_migrate_with_qos_port(self, host=None):
2656+
super().test_live_migrate_with_qos_port()
2657+
2658+
# this is bug 1945310
2659+
@unittest.expectedFailure
2660+
def test_live_migrate_with_qos_port_with_target_host(self):
2661+
super(
2662+
).test_live_migrate_with_qos_port_with_target_host()
2663+
2664+
# this is bug 1945310
2665+
@unittest.expectedFailure
2666+
def test_live_migrate_with_qos_port_reschedule_success(self):
2667+
super(
2668+
).test_live_migrate_with_qos_port_reschedule_success()
2669+
2670+
25512671
class ServerMoveWithMultiGroupResourceRequestBasedSchedulingTest(
25522672
ExtendedPortResourceRequestBasedSchedulingTestBase,
25532673
ServerMoveWithPortResourceRequestTest,
@@ -2564,6 +2684,57 @@ def setUp(self):
25642684
MultiGroupResourceRequestNeutronFixture(self))
25652685

25662686

2687+
class NonAdminServerMoveWithMultiGroupResReqTests(
2688+
ServerMoveWithMultiGroupResourceRequestBasedSchedulingTest
2689+
):
2690+
def setUp(self):
2691+
super().setUp()
2692+
# switch to non admin api
2693+
self.api = self.api_fixture.api
2694+
self.api.microversion = self.microversion
2695+
2696+
# allow non-admin to call the operations
2697+
self.policy.set_rules({
2698+
'os_compute_api:servers:create': '@',
2699+
'os_compute_api:servers:delete': '@',
2700+
'os_compute_api:os-services:update': '@',
2701+
'os_compute_api:servers:create:attach_network': '@',
2702+
'os_compute_api:servers:show': '@',
2703+
'os_compute_api:os-extended-server-attributes': '@',
2704+
'os_compute_api:os-shelve:shelve': '@',
2705+
'os_compute_api:os-shelve:unshelve': '@',
2706+
'os_compute_api:os-migrate-server:migrate': '@',
2707+
'os_compute_api:os-migrate-server:migrate_live': '@',
2708+
'os_compute_api:servers:resize': '@',
2709+
'os_compute_api:servers:confirm_resize': '@',
2710+
'os_compute_api:servers:revert_resize': '@',
2711+
'os_compute_api:os-evacuate': '@',
2712+
'os_compute_api:os-hypervisors:list': '@',
2713+
'os_compute_api:os-migrations:index': '@',
2714+
'os_compute_api:os-services:list': '@',
2715+
'compute:servers:create:requested_destination': '@',
2716+
'os_compute_api:os-instance-actions:show': '@',
2717+
'os_compute_api:os-instance-actions:list': '@',
2718+
})
2719+
2720+
# this is bug 1945310
2721+
@unittest.expectedFailure
2722+
def test_live_migrate_with_qos_port(self, host=None):
2723+
super().test_live_migrate_with_qos_port()
2724+
2725+
# this is bug 1945310
2726+
@unittest.expectedFailure
2727+
def test_live_migrate_with_qos_port_with_target_host(self):
2728+
super(
2729+
).test_live_migrate_with_qos_port_with_target_host()
2730+
2731+
# this is bug 1945310
2732+
@unittest.expectedFailure
2733+
def test_live_migrate_with_qos_port_reschedule_success(self):
2734+
super(
2735+
).test_live_migrate_with_qos_port_reschedule_success()
2736+
2737+
25672738
class LiveMigrateAbortWithPortResourceRequestTest(
25682739
PortResourceRequestBasedSchedulingTestBase):
25692740

@@ -2955,3 +3126,35 @@ def test_interface_attach(self, mock_get_service):
29553126
'services to Xena (24.0.0) or later.',
29563127
str(ex)
29573128
)
3129+
3130+
3131+
class NonAdminExtendedResourceRequestOldCompute(
3132+
ExtendedResourceRequestOldCompute
3133+
):
3134+
3135+
def setUp(self):
3136+
super().setUp()
3137+
# switch to non admin api
3138+
self.api = self.api_fixture.api
3139+
self.api.microversion = self.microversion
3140+
3141+
# allow non-admin to call the operations
3142+
self.policy.set_rules({
3143+
'os_compute_api:servers:create': '@',
3144+
'os_compute_api:servers:show': '@',
3145+
'os_compute_api:servers:create:attach_network': '@',
3146+
'os_compute_api:os-attach-interfaces': '@',
3147+
'os_compute_api:os-attach-interfaces:create': '@',
3148+
'os_compute_api:os-attach-interfaces:show': '@',
3149+
'os_compute_api:os-shelve:shelve': '@',
3150+
'os_compute_api:os-shelve:unshelve': '@',
3151+
'os_compute_api:os-migrate-server:migrate': '@',
3152+
'os_compute_api:os-migrate-server:migrate_live': '@',
3153+
'os_compute_api:servers:resize': '@',
3154+
'os_compute_api:os-evacuate': '@',
3155+
})
3156+
3157+
# this is bug 1945310
3158+
@unittest.expectedFailure
3159+
def test_interface_attach(self, mock_get_service):
3160+
super().test_interface_attach()

0 commit comments

Comments
 (0)