ae328b923a
Fix H404 error and start enforcing it. Trivialfix Change-Id: I0c062733660031faf43838798a697daf6674ef14
119 lines
5.1 KiB
Python
119 lines
5.1 KiB
Python
# 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 utils as tutils
|
|
from tempest.lib.common.utils import data_utils
|
|
from tempest.lib import decorators
|
|
|
|
from neutron_tempest_plugin.api import base_routers as base
|
|
|
|
|
|
class RoutersTestHA(base.BaseRouterTest):
|
|
|
|
required_extensions = ['router', 'l3-ha']
|
|
HA_NETWORK_NAME_TEMPL = "HA network tenant %s"
|
|
|
|
@classmethod
|
|
def resource_setup(cls):
|
|
# The check above will pass if api_extensions=all, which does
|
|
# not mean "l3-ha" extension itself is present.
|
|
# Instead, we have to check whether "ha" is actually present by using
|
|
# admin credentials to create router with ha=True attribute
|
|
# and checking for BadRequest exception and that the resulting router
|
|
# has a high availability attribute.
|
|
super(RoutersTestHA, cls).resource_setup()
|
|
name = data_utils.rand_name('pretest-check')
|
|
router = cls.admin_client.create_router(name)
|
|
cls.admin_client.delete_router(router['router']['id'])
|
|
if 'ha' not in router['router']:
|
|
msg = "'ha' attribute not found. HA Possibly not enabled"
|
|
raise cls.skipException(msg)
|
|
|
|
@decorators.idempotent_id('8abc177d-14f1-4018-9f01-589b299cbee1')
|
|
def test_ha_router_creation(self):
|
|
"""Test HA router creation
|
|
|
|
Test uses administrative credentials to create a
|
|
HA (High Availability) router using the ha=True.
|
|
|
|
Acceptance
|
|
The router is created and the "ha" attribute is set to True
|
|
"""
|
|
name = data_utils.rand_name('router')
|
|
router = self._create_admin_router(name, ha=True)
|
|
self.assertTrue(router['ha'])
|
|
|
|
@decorators.idempotent_id('97b5f7ef-2192-4fa3-901e-979cd5c1097a')
|
|
def test_legacy_router_creation(self):
|
|
"""Test legacy router creation
|
|
|
|
Test uses administrative credentials to create a
|
|
SF (Single Failure) router using the ha=False.
|
|
|
|
Acceptance
|
|
The router is created and the "ha" attribute is
|
|
set to False, thus making it a "Single Failure Router"
|
|
as opposed to a "High Availability Router"
|
|
"""
|
|
name = data_utils.rand_name('router')
|
|
router = self._create_admin_router(name, ha=False)
|
|
self.assertFalse(router['ha'])
|
|
|
|
@decorators.idempotent_id('5a6bfe82-5b23-45a4-b027-5160997d4753')
|
|
def test_legacy_router_update_to_ha(self):
|
|
"""Test legacy to HA router update
|
|
|
|
Test uses administrative credentials to create a
|
|
SF (Single Failure) router using the ha=False.
|
|
Then it will "update" the router ha attribute to True
|
|
|
|
Acceptance
|
|
The router is created and the "ha" attribute is
|
|
set to False. Once the router is updated, the ha
|
|
attribute will be set to True
|
|
"""
|
|
name = data_utils.rand_name('router')
|
|
# router needs to be in admin state down in order to be upgraded to HA
|
|
router = self._create_admin_router(name, ha=False,
|
|
admin_state_up=False)
|
|
self.assertFalse(router['ha'])
|
|
router = self.admin_client.update_router(router['id'],
|
|
ha=True)
|
|
self.assertTrue(router['router']['ha'])
|
|
|
|
@decorators.idempotent_id('0d8c0c8f-3809-4acc-a2c8-e0941333ff6c')
|
|
@tutils.requires_ext(extension="provider", service="network")
|
|
def test_delete_ha_router_keeps_ha_network_segment_data(self):
|
|
"""Test deleting an HA router keeps correct segment data for network.
|
|
|
|
Each tenant with HA router has an HA network. The HA network is a
|
|
normal tenant network with segmentation data like type (vxlan) and
|
|
segmenation id. This test makes sure that after an HA router is
|
|
deleted, those segmentation data are kept in HA network. This tests
|
|
regression of https://bugs.launchpad.net/neutron/+bug/1732543.
|
|
"""
|
|
for i in range(2):
|
|
router = self._create_admin_router(
|
|
data_utils.rand_name('router%d' % i),
|
|
ha=True)
|
|
ha_net_name = self.HA_NETWORK_NAME_TEMPL % router['tenant_id']
|
|
ha_network_pre_delete = self.admin_client.list_networks(
|
|
name=ha_net_name)['networks'][0]
|
|
segmentation_id = ha_network_pre_delete['provider:segmentation_id']
|
|
self._delete_router(router['id'], self.admin_client)
|
|
|
|
ha_network_post_delete = self.admin_client.show_network(
|
|
ha_network_pre_delete['id'])['network']
|
|
self.assertEqual(
|
|
ha_network_post_delete['provider:segmentation_id'],
|
|
segmentation_id)
|