Slawek Kaplonski 8dd49aac9f Rehome tempest tests from networking-bgpvpn repo
This patch rehomes networking-bgpvpn tempest tests from
networking-bgpvpn repo to neutron_tempest_plugin.bgpvpn module.

It also adds definition of new, zuulv3 job which will run tests from
this neutron_tempest_plugin.bgpvpn module.

Change-Id: Ideb935b76c9a3b36f88a2a66dbfcb1844348cd86
2019-05-23 16:59:23 +02:00

381 lines
17 KiB
Python

# Copyright (c) 2015 Ericsson.
# 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 oslo_utils import uuidutils
from tempest.lib.common.utils import data_utils
from tempest.lib import decorators
from tempest.lib import exceptions
from testtools import ExpectedException
from neutron_tempest_plugin.bgpvpn.base import BaseBgpvpnTest as base
class BgpvpnTest(base):
"""Tests the following operations in the Neutron API:
create bgpvpn
delete bgpvpn
show bgpvpn
list bgpvpns
associate network to bgpvpn
disassociate network from bgpvpn
show network association
list network associations
update route targets
v2.0 of the Neutron API is assumed. It is also assumed that the following
options are defined in the [network] section of etc/tempest.conf:
...
"""
@decorators.idempotent_id('4f90deb2-eb8e-4e7d-9d68-c5b5cc657f7e')
def test_create_bgpvpn(self):
self.create_bgpvpn(self.bgpvpn_admin_client)
@decorators.attr(type=['negative'])
@decorators.idempotent_id('0a911d61-d908-4c21-a11e-e403ac0d8e38')
def test_create_bgpvpn_as_non_admin_fail(self):
self.assertRaises(exceptions.Forbidden,
self.create_bgpvpn, self.bgpvpn_client)
@decorators.idempotent_id('709b23b0-9719-47df-9f53-b0812a5d5a48')
def test_delete_bgpvpn(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
self.delete_bgpvpn(self.bgpvpn_admin_client, bgpvpn)
@decorators.attr(type=['negative'])
@decorators.idempotent_id('596abfc2-fd89-491d-863d-25459db1df4b')
def test_delete_bgpvpn_as_non_admin_fail(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
self.assertRaises(exceptions.Forbidden,
self.bgpvpn_client.delete_bgpvpn, bgpvpn['id'])
@decorators.idempotent_id('9fa29db8-35d0-4beb-a986-23c369499ab1')
def test_show_bgpvpn(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
bgpvpn_details = self.bgpvpn_client.show_bgpvpn(bgpvpn['id'])['bgpvpn']
self.assertEqual(bgpvpn['id'], bgpvpn_details['id'])
@decorators.attr(type=['negative'])
@decorators.idempotent_id('b20110bb-393b-4342-8b30-6486cd2b4fc6')
def test_show_bgpvpn_as_non_owner_fail(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
self.assertRaises(exceptions.NotFound,
self.bgpvpn_alt_client.show_bgpvpn, bgpvpn['id'])
@decorators.idempotent_id('7a7feca2-1c24-4f5d-ad4b-b0e5a712adb1')
def test_list_bgpvpn(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
bgpvpns = self.bgpvpn_client.list_bgpvpns()['bgpvpns']
self.assertIn(bgpvpn['id'],
[bgpvpn_alt['id'] for bgpvpn_alt in bgpvpns])
@decorators.attr(type=['negative'])
@decorators.idempotent_id('4875e65d-0b65-40c0-9efd-309420686ab4')
def test_list_bgpvpn_as_non_owner_fail(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
bgpvpns_alt = self.bgpvpn_alt_client.list_bgpvpns()['bgpvpns']
self.assertNotIn(bgpvpn['id'],
[bgpvpn_alt['id'] for bgpvpn_alt in bgpvpns_alt])
@decorators.idempotent_id('096281da-356d-4c04-bd55-784a26bb1b0c')
def test_list_show_network_association(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
network = self.networks_client.create_network()['network']
association = self.bgpvpn_client.create_network_association(
bgpvpn['id'], network['id'])['network_association']
net_assocs = self.bgpvpn_client\
.list_network_associations(bgpvpn['id'])['network_associations']
self.assertIn(association['id'],
[net_assoc['id'] for net_assoc in net_assocs])
net_assoc_details = self.bgpvpn_client\
.show_network_association(bgpvpn['id'],
association['id'])['network_association']
self.assertEqual(association['id'], net_assoc_details['id'])
@decorators.attr(type=['negative'])
@decorators.idempotent_id('57b0da93-8e37-459f-9aaf-f903acc36025')
def test_show_netassoc_as_non_owner_fail(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
network = self.networks_client.create_network()['network']
net_assoc = self.bgpvpn_client.create_network_association(
bgpvpn['id'], network['id'])['network_association']
self.assertRaises(exceptions.NotFound,
self.bgpvpn_alt_client.show_network_association,
bgpvpn['id'], net_assoc['id'])
@decorators.attr(type=['negative'])
@decorators.idempotent_id('2cbb10af-bf9c-4b32-b6a6-4066de783758')
def test_list_netassoc_as_non_owner_fail(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
network = self.networks_client.create_network()['network']
self.bgpvpn_client.create_network_association(bgpvpn['id'],
network['id'])
net_assocs_alt = self.bgpvpn_alt_client\
.list_network_associations(bgpvpn['id'])
self.assertFalse(net_assocs_alt['network_associations'])
@decorators.idempotent_id('51e1b079-aefa-4c37-8b1a-0567b3ef7954')
def test_associate_disassociate_network(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
network = self.networks_client.create_network()
network_id = network['network']['id']
# Associate the network to the bgpvpn resource
association = self.bgpvpn_client.create_network_association(
bgpvpn['id'], network_id)
self.assertEqual(association['network_association']['network_id'],
network_id)
updated_bgpvpn = self.bgpvpn_client.show_bgpvpn(bgpvpn['id'])
self.assertEqual(updated_bgpvpn['bgpvpn']['networks'], [network_id])
# Disassociate the network from the bgpvpn resource
self.bgpvpn_client.delete_network_association(
bgpvpn['id'],
association['network_association']['id'])
updated_bgpvpn = self.bgpvpn_client.show_bgpvpn(bgpvpn['id'])
self.assertEqual(updated_bgpvpn['bgpvpn']['networks'], [])
self.networks_client.delete_network(network_id)
@decorators.idempotent_id('559013fd-1e34-4fde-9599-f8aafe9ae716')
def test_update_route_target(self):
bgpvpn = self.create_bgpvpn(
self.bgpvpn_admin_client,
route_targets=['64512:1'],
import_targets=['64512:2'],
export_targets=['64512:3'])
bgpvpn = self.bgpvpn_admin_client.update_bgpvpn(
bgpvpn['id'],
route_targets=['64512:4'],
import_targets=['64512:5'],
export_targets=['64512:6']
)['bgpvpn']
self.assertEqual(['64512:4'], bgpvpn['route_targets'])
self.assertEqual(['64512:5'], bgpvpn['import_targets'])
self.assertEqual(['64512:6'], bgpvpn['export_targets'])
@decorators.attr(type=['negative'])
@decorators.idempotent_id('e35eb9be-fe1f-406c-b36b-fc1879328313')
def test_update_route_target_non_admin_fail(self):
bgpvpn = self.create_bgpvpn(
self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id,
route_targets=['64512:1'])
with ExpectedException(exceptions.Forbidden):
self.bgpvpn_client.update_bgpvpn(
bgpvpn['id'],
route_targets=['64512:2'],
import_targets=['64512:3'],
export_targets=['64512:4'])
@decorators.attr(type=['negative'])
@decorators.idempotent_id('464ca6f9-86e4-4ee3-9c65-f1edae93223d')
def test_create_bgpvpn_with_invalid_routetargets(self):
"""Create a bgpvpn with invalid route target
This test verifies that invalid route targets,import targets,
export targets are rejected by the Create API
"""
postdata = {
"name": "testbgpvpn",
"tenant_id": self.bgpvpn_client.tenant_id,
"route_targets": ["0"]
}
self.assertRaises(exceptions.BadRequest,
self.bgpvpn_admin_client.create_bgpvpn, **postdata)
postdata = {
"name": "testbgpvpn",
"tenant_id": self.bgpvpn_client.tenant_id,
"import_targets": ["test", " "]
}
self.assertRaises(exceptions.BadRequest,
self.bgpvpn_admin_client.create_bgpvpn, **postdata)
postdata = {
"name": "testbgpvpn",
"tenant_id": self.bgpvpn_client.tenant_id,
"export_targets": ["64512:1000000000000", "xyz"]
}
self.assertRaises(exceptions.BadRequest,
self.bgpvpn_admin_client.create_bgpvpn, **postdata)
@decorators.attr(type=['negative'])
@decorators.idempotent_id('7d4e9b87-e1ab-47a7-a8d6-9d179365556a')
def test_update_bgpvpn_invalid_routetargets(self):
"""Update the bgpvpn with invalid route targets
This test verifies that invalid route targets,import targets
and export targets are rejected by the Update API
"""
postdata = {
"name": "testbgpvpn",
"tenant_id": self.bgpvpn_client.tenant_id,
}
bgpvpn = self.bgpvpn_admin_client.create_bgpvpn(**postdata)
updatedata = {
"route_targets": ["0"]
}
self.assertRaises(exceptions.BadRequest,
self.bgpvpn_admin_client.update_bgpvpn,
bgpvpn['bgpvpn']['id'], **updatedata)
updatedata = {
"import_targets": ["test", " "]
}
self.assertRaises(exceptions.BadRequest,
self.bgpvpn_admin_client.update_bgpvpn,
bgpvpn['bgpvpn']['id'], **updatedata)
updatedata = {
"export_targets": ["64512:1000000000000", "xyz"],
}
self.assertRaises(exceptions.BadRequest,
self.bgpvpn_admin_client.update_bgpvpn,
bgpvpn['bgpvpn']['id'], **updatedata)
@decorators.attr(type=['negative'])
@decorators.idempotent_id('f049ce21-d239-47c0-b13f-fb57a2a558ce')
def test_associate_invalid_network(self):
"""Associate the invalid network in bgpvpn
This test verifies that invalid network id,bgpvpn id
are rejected by the associate API
"""
postdata = {
"name": "testbgpvpn",
"tenant_id": self.bgpvpn_client.tenant_id,
}
bgpvpn = self.bgpvpn_admin_client.create_bgpvpn(**postdata)
network = self.networks_client.create_network()
self.assertRaises(exceptions.NotFound,
self.bgpvpn_client.create_network_association,
bgpvpn['bgpvpn']['id'], uuidutils.generate_uuid())
self.assertRaises(exceptions.NotFound,
self.bgpvpn_client.create_network_association,
uuidutils.generate_uuid(),
network['network']['id'])
@decorators.attr(type=['negative'])
@decorators.idempotent_id('078b2660-4adb-4c4c-abf0-b77bf0bface5')
def test_disassociate_invalid_network(self):
"""Disassociate the invalid network in bgpvpn
This test verifies that invalid network id,
bgpvpn id are rejected by the disassociate API
"""
postdata = {
"name": "testbgpvpn",
"tenant_id": self.bgpvpn_client.tenant_id,
}
bgpvpn = self.bgpvpn_admin_client.create_bgpvpn(**postdata)
network = self.networks_client.create_network()
association = self.bgpvpn_client.create_network_association(
bgpvpn['bgpvpn']['id'], network['network']['id'])
self.assertEqual(association['network_association'][
'network_id'], network['network']['id'])
self.assertRaises(exceptions.NotFound,
self.bgpvpn_client.delete_network_association,
bgpvpn['bgpvpn']['id'],
uuidutils.generate_uuid())
self.assertRaises(exceptions.NotFound,
self.bgpvpn_client.delete_network_association,
uuidutils.generate_uuid(),
association['network_association']['id'])
@decorators.idempotent_id('de8d94b0-0239-4a48-9574-c3a4a4f7cacb')
def test_associate_disassociate_router(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
router = self.routers_client.create_router()
router_id = router['router']['id']
# Associate the network to the bgpvpn resource
association = self.bgpvpn_client.create_router_association(
bgpvpn['id'], router_id)
self.assertEqual(association['router_association']['router_id'],
router_id)
updated_bgpvpn = self.bgpvpn_client.show_bgpvpn(bgpvpn['id'])
self.assertEqual(updated_bgpvpn['bgpvpn']['routers'], [router_id])
# Disassociate the network from the bgpvpn resource
self.bgpvpn_client.delete_router_association(
bgpvpn['id'],
association['router_association']['id'])
updated_bgpvpn = self.bgpvpn_client.show_bgpvpn(bgpvpn['id'])
self.assertEqual(updated_bgpvpn['bgpvpn']['routers'], [])
self.routers_client.delete_router(router_id)
@decorators.idempotent_id('3ae91755-b1b6-4c62-a699-a44eeb4ee522')
def test_list_show_router_association(self):
bgpvpn = self.create_bgpvpn(self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
router = self.routers_client.create_router()
router_id = router['router']['id']
association = self.bgpvpn_client.create_router_association(
bgpvpn['id'], router_id)['router_association']
rtr_assocs = self.bgpvpn_client\
.list_router_associations(bgpvpn['id'])['router_associations']
self.assertIn(association['id'],
[rtr_assoc['id'] for rtr_assoc in rtr_assocs])
rtr_assoc_details = self.bgpvpn_client\
.show_router_association(bgpvpn['id'],
association['id'])['router_association']
self.assertEqual(association['id'], rtr_assoc_details['id'])
@decorators.attr(type=['negative'])
@decorators.idempotent_id('4be1f073-fe57-4858-b7b9-9a189e90b770')
def test_attach_associated_subnet_to_associated_router(self):
# Create a first bgpvpn and associate a network with a subnet to it
bgpvpn_net = self.create_bgpvpn(
self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
network = self.create_network()
subnet = self.create_subnet(network)
self.bgpvpn_client.create_network_association(
bgpvpn_net['id'], network['id'])
# Create a second bgpvpn and associate a router to it
bgpvpn_router = self.create_bgpvpn(
self.bgpvpn_admin_client,
tenant_id=self.bgpvpn_client.tenant_id)
router = self.create_router(
router_name=data_utils.rand_name('test-bgpvpn-'))
self.bgpvpn_client.create_router_association(
bgpvpn_router['id'],
router['id'])
# Attach the subnet of the network to the router
subnet_data = {'subnet_id': subnet['id']}
self.assertRaises(exceptions.Conflict,
self.routers_client.add_router_interface,
router['id'],
**subnet_data)