Rafael Fayan 778d67dc6b Remove env variable from RBAC tests
Since the env option and fixtures depending on it were not in use
by any RBAC test anymore, they were removed from code.

Fixtures removed:
- env

Story: 2009156
Task: 43128

Signed-off-by: Rafael Fayan <RafaelShibana.Fayan@windriver.com>
Change-Id: I15c3758263c3ec00385e063cad03f82f92fbd21d
2021-10-04 17:43:27 +00:00

1514 lines
63 KiB
Python

#
# Copyright (c) 2021 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# All Rights Reserved.
#
import pytest
import netaddr
from openstack import exceptions
from tests.fv_rbac import OpenStackRouterInterface
from tests.test_neutron.rbac_neutron import OpenStackNetworkingTesting
@pytest.fixture(scope='class', autouse=True)
def networking_setup(request, network_admin_setup):
cfg = network_admin_setup
request.cls.os_sdk_admin_conn = cfg.os_sdk_admin_conn
request.cls.users = cfg.users
request.cls.user02 = cfg.user02
request.cls.user11 = cfg.user11
request.cls.user12 = cfg.user12
request.cls.user13 = cfg.user13
class TestNetworking(OpenStackNetworkingTesting):
def test_uc_network_1(self, tc_teardown):
"""
1. user11 tries to create dedicated network 'network11', and tries to
create shared network 'network12', should succeed;
2. user11 tries to create external network 'extnet11', should fail;
3. user11/12/13 tries to get list and detail of networks created in
step 1. should succeed;
4. user11 tries to update networks created in step1,should succeed;
5. user12/13 tries to update/delete networks created in step1,should
fail;
6. user11 tries to delete networks created in step1,should succeed;
7. user12/13 tries to create networks mentioned in step1,should fail;
"""
print ("\nTC-1")
self.set_connections_for_user(self.user11)
network11 = self._create_network("network11")
assert network11 is not None
network12 = self._create_network("network12", shared=True)
assert network12 is not None
args = {'router:external': True}
with pytest.raises(exceptions.HttpException) as err:
assert self._create_network("extnet11", **args)
assert err.match("HttpException: 403")
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
networks = self._list_networks()
for name in ["network11", "network12"]:
assert name in [n.name for n in networks]
network = self._get_network(name)
assert network is not None
self.set_connections_for_user(self.user11)
for name in ["network11", "network12"]:
network = self._get_network(name)
port_security_enabled = not network.is_port_security_enabled
args = {'port_security_enabled': port_security_enabled}
self._update_network(name, **args)
network = self._get_network(name)
assert network.is_port_security_enabled == port_security_enabled
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
for name in ["network11", "network12"]:
network = self._get_network(name)
port_security_enabled = not network.is_port_security_enabled
with pytest.raises(exceptions.HttpException) as err:
args = {'port_security_enabled': port_security_enabled}
assert self._update_network(name, **args)
assert err.match("HttpException: 403")
network = self._get_network(name)
assert network.is_port_security_enabled != port_security_enabled
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_network(name)
assert err.match("HttpException: 403")
self.set_connections_for_user(self.user11)
for name in ["network11", "network12"]:
self._delete_network(name)
assert name not in [n.name for n in self._list_networks()]
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.HttpException) as err:
assert self._create_network("network11")
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._create_network("network12", shared=True)
assert err.match("HttpException: 403")
def test_uc_network_3(self, tc_teardown):
"""
1. user02 create dedicated network 'network21' and shared network
'network22', external network 'extnet21'
2. user11/12/13 tries to get list and detail of networks, should
succeed to get 'network22' and extnet21, should fail to get
'network21';
3. user11/12/13 tries to update/delete 'network22', 'extnet21', should
fail;
"""
print ("\nTC-3")
self.set_connections_for_user(self.user02)
network21 = self._create_network("network21")
assert network21 is not None
network22 = self._create_network("network22", shared=True)
assert network22 is not None
args = {'router:external': True}
extnet21 = self._create_network("extnet21", shared=True, **args)
assert extnet21 is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
for name in ["network21", "network22", "extnet21"]:
if name == "network21":
assert (name not in [n.name for n in self._list_networks()])
assert (self._find_network(name) is None)
else:
assert name in [n.name for n in self._list_networks()]
network = self._get_network(name)
assert network is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
for name in ["network22", "extnet21"]:
network = self._get_network(name)
port_security_enabled = not network.is_port_security_enabled
with pytest.raises(exceptions.HttpException) as err:
args = {'port_security_enabled': port_security_enabled}
assert self._update_network(name, **args)
assert err.match("HttpException: 403")
network = self._get_network(name)
assert network.is_port_security_enabled != port_security_enabled
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_network(name)
assert err.match("HttpException: 403")
def test_uc_subnet_1(self, tc_teardown):
"""
1. user11 tries to create dedicated network 'network11' and subnet
'subnet11' for it, tries to create shared network and subnet:
'network12' and 'subnet12', should succeed;
2. user11/12/13 tries to get list and detail of subnets: 'subnet11'
and 'subnet12', should succeed;
3. user11 tries to update subnets 'subnet11' and 'subnet12', should
succeed;
4. user12/13 tries to update/delete subnets 'subnet11' and 'subnet12',
should fail;
5. user11 tries to delete subnets 'subnet11' and 'subnet12',should
succeed;
6. user12/13 tries to create subnet 'subnet13' for network 'network21',
should fail;
"""
print ("\nTC-4")
self.set_connections_for_user(self.user11)
network11 = self._create_network("network11")
assert network11 is not None
subnet = self._create_subnet("subnet11", "network11",
cidr="192.168.195.0/24",
gateway_ip="192.168.195.1")
assert "subnet11" in [s.name for s in self._list_subnets()]
network12 = self._create_network("network12", shared=True)
assert network12 is not None
subnet = self._create_subnet("subnet12", "network12",
cidr="192.168.196.0/24",
gateway_ip="192.168.196.1")
assert "subnet12" in [s.name for s in self._list_subnets()]
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
for name in ["subnet11", "subnet12"]:
assert name in [s.name for s in self._list_subnets()]
subnet = self._get_subnet(name)
assert subnet is not None
self.set_connections_for_user(self.user11)
for name in ["subnet11", "subnet12"]:
subnet = self._get_subnet(name)
new_dhcp_enabled = not subnet.is_dhcp_enabled
args = {'enable_dhcp': new_dhcp_enabled}
self._update_subnet(name, **args)
subnet = self._get_subnet(name)
assert subnet.is_dhcp_enabled == new_dhcp_enabled
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
for name in ["subnet11", "subnet12"]:
subnet = self._get_subnet(name)
new_dhcp_enabled = not subnet.is_dhcp_enabled
with pytest.raises(exceptions.HttpException) as err:
assert self._update_subnet(name, **args)
assert err.match("HttpException: 403")
subnet = self._get_subnet(name)
assert subnet.is_dhcp_enabled != new_dhcp_enabled
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_subnet(name)
assert err.match("HttpException: 403")
self.set_connections_for_user(self.user11)
for name in ["subnet11", "subnet12"]:
self._delete_subnet(name)
assert self._find_subnet(name) is None
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.HttpException) as err:
self._create_subnet("subnet13", "network12",
cidr="192.168.197.0/24", gateway_ip="192.168.197.1")
assert err.match("HttpException: 403")
subnets = self._list_subnets()
assert "subnet13" not in [s.name for s in subnets]
def test_uc_subnet_2(self, tc_teardown):
"""
1. user02 creates network21 and subnet21 for project2, and creates
shared network22 and subnet22 for project2,
2. user11/12/13 tries to get list and detail of subnets, should succeed
to get 'subnet22,', should fail to get 'subnet21';
3. user11/12/13 tries to update/delete subnets: subnet21 and subnet22,
should fail
"""
print ("\nTC-5")
self.set_connections_for_user(self.user02)
network = self._create_network("network21")
assert network is not None
subnet21 = self._create_subnet("subnet21", "network21",
enable_dhcp=False,
cidr="192.168.195.0/24",
gateway_ip="192.168.195.1")
subnet21 = self._get_subnet("subnet21")
assert subnet21 is not None
network = self._create_network("network22", shared=True)
assert network is not None
subnet22 = self._create_subnet("subnet22", "network22",
enable_dhcp=False,
cidr="192.168.196.0/24",
gateway_ip="192.168.196.1")
subnet22 = self._get_subnet("subnet22")
assert subnet22 is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
subnets = self._list_subnets()
assert ("subnet21" not in [s.name for s in subnets])
assert self._find_subnet("subnet21") is None
subnets = self._list_subnets()
assert ("subnet22" in [s.name for s in subnets])
subnet = self._get_subnet("subnet22")
assert subnet is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
args = {'enable_dhcp': True}
with pytest.raises(exceptions.ResourceNotFound):
assert self._update_subnet(subnet21.id, **args)
with pytest.raises(exceptions.ResourceNotFound):
self._delete_subnet(subnet21.id)
with pytest.raises(exceptions.HttpException) as err:
assert self._update_subnet(subnet22.id, **args)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
self._delete_subnet(subnet22.id)
assert err.match("HttpException: 403")
def test_uc_ip_availabilities(self, tc_teardown):
"""
1. user02 creates network21 and subnet21 for project2, and creates
shared 'network22' and 'subnet22' for project2,
2. user11 create network and subnet: 'network11', 'subnet11' for
project1.
3. user12/13 tries to get list and detail of network-ip-availabilities
of networks, should fail to get list and detail of
network-ip-availabilities of network11. network 21,network22
"""
print ("\nTC-6")
self.set_connections_for_user(self.user02)
network21 = self._create_network("network21")
assert network21 is not None
network22 = self._create_network("network22", shared=True)
assert network22 is not None
self._create_subnet("subnet21", "network21",
cidr="192.168.195.0/24",
gateway_ip="192.168.195.1")
assert "subnet21" in [s.name for s in self._list_subnets()]
self._create_subnet("subnet22", "network22",
cidr="192.168.196.0/24",
gateway_ip="192.168.196.1")
assert "subnet22" in [s.name for s in self._list_subnets()]
self.set_connections_for_user(self.user11)
network = self._create_network("network11")
assert network is not None
self._create_subnet("subnet11", "network11",
cidr="192.168.195.0/24",
gateway_ip="192.168.195.1")
assert "subnet11" in [s.name for s in self._list_subnets()]
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
for name in ["network11", "network21", "network22"]:
ip_availabilities = self._list_ip_availabilities(name)
assert name not in [i.network_name for i in ip_availabilities]
assert self._find_ip_availability(name) is None
def test_uc_subnetpool_1(self, tc_teardown):
"""
1. user11 tries to create dedicated subnetpool 'subnetpool11', and tries
to create shared subnetpool 'subnetpool12',should succeed;
2. user11/12/13 tries to get list and detail of subnetpools created in
step 1, should succeed;
3. user11 tries to update subnetpools created in step1.should succeed;
4. user12/13 tries to update/delete subnetpools created in step1.should
fail;
5. user11 tries to delete subnetpools created in step1.should succeed;
6. user12/13 tries to create subnetpools mentioned in step1.should fail;
"""
print ("\nTC-7")
self.set_connections_for_user(self.user11)
subnetpool11 = self._create_subnetpool(
"subnetpool11",
prefixes=["192.168.0.0/16", "10.10.24.0/21"])
assert subnetpool11 is not None
subnetpool12 = self._create_subnetpool(
"subnetpool12",
prefixes=["192.169.0.0/16", "10.10.38.0/21"],
shared=True)
assert subnetpool12 is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
for name in ["subnetpool11", "subnetpool12"]:
subnetpools = self._list_subnetpools()
assert name in [s.name for s in subnetpools]
subnetpool = self._get_subnetpool(name)
assert subnetpool is not None
self.set_connections_for_user(self.user11)
for name in ["subnetpool11", "subnetpool12"]:
subnetpool = self._get_subnetpool(name)
new_max_prefixlen = subnetpool.maximum_prefix_length - 2
args = {'max_prefixlen': new_max_prefixlen}
self._update_subnetpool(name, **args)
subnetpool = self._get_subnetpool(name)
assert subnetpool.maximum_prefix_length == new_max_prefixlen
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
for name in ["subnetpool11", "subnetpool12"]:
subnetpool = self._get_subnetpool(name)
new_max_prefixlen = subnetpool.maximum_prefix_length + 2
args = {'max_prefixlen': new_max_prefixlen}
with pytest.raises(exceptions.HttpException) as err:
assert self._update_subnetpool(name, **args)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_subnetpool(name)
assert err.match("HttpException: 403")
assert name in [s.name for s in self._list_subnetpools()]
self.set_connections_for_user(self.user11)
for name in ["subnetpool11", "subnetpool12"]:
subnetpool = self._get_subnetpool(name)
self._delete_subnetpool(name)
assert name not in [s.name for s in self._list_subnetpools()]
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.HttpException) as err:
assert self._create_subnetpool(
"subnetpool11",
prefixes=["192.168.0.0/16", "10.10.24.0/21"])
with pytest.raises(exceptions.HttpException) as err:
assert self._create_subnetpool(
"subnetpool12",
prefixes=["192.169.0.0/16", "10.10.38.0/21"],
shared=True)
def test_uc_subnetpool_2(self, tc_teardown):
"""
1. user02 create dedicated subnetpool 'subnetpool21' and shared
subnetpool 'subnetpool22' for project2,
2. user11/12/13 tries to get list and detail of subnetpool, should
succeed to get 'subnetpool22' and fail to get 'subnetpool21',
3. user11/12/13 tries to update/delete , 'subnetpool22', should fail;
"""
print ("\nTC-8")
self.set_connections_for_user(self.user02)
subnetpool21 = self._create_subnetpool(
"subnetpool21",
prefixes=["192.168.0.0/16", "10.10.24.0/21"])
assert subnetpool21 is not None
subnetpool22 = self._create_subnetpool(
"subnetpool22",
prefixes=["192.169.0.0/16", "10.10.48.0/21"],
shared=True)
assert subnetpool22 is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
subnetpools = self._list_subnetpools()
assert "subnetpool21" not in [s.name for s in subnetpools]
assert self._find_subnetpool("subnetpool21") is None
subnetpools = self._list_subnetpools()
assert "subnetpool22" in [s.name for s in subnetpools]
subnetpool = self._get_subnetpool("subnetpool22")
assert subnetpool is not None
new_max_prefixlen = subnetpool.maximum_prefix_length + 2
args = {'max_prefixlen': new_max_prefixlen}
with pytest.raises(exceptions.HttpException) as err:
assert self._update_subnetpool("subnetpool22", **args)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_subnetpool("subnetpool22")
assert err.match("HttpException: 403")
def test_uc_addrscope_1(self, tc_teardown):
"""
1. user11 tries to create dedicated address-scope 'addrscope11', and
tries to create shared subnetpool 'addrscope12', should succeed;
2. user11/12/13 tries to get list and detail of address-scopes created
in step 1, should succeed;
3. user11 tries to update address-scopes created in step1.should
succeed;
4. user12/13 tries to update/delete address-scopes created in
step1.should fail;
5. user11 tries to delete address-scopes created in step1.should
succeed;
6. user12/13 tries to create address-scopes mentioned in step1.should
fail;
"""
print ("\nTC-9")
self.set_connections_for_user(self.user11)
addrscope11 = self._create_addrscope("addrscope11")
assert addrscope11 is not None
addrscope12 = self._create_addrscope("addrscope12", shared=True)
assert addrscope12 is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
for name in ["addrscope11", "addrscope12"]:
addrscopes = self._list_addrscopes()
assert name in [a.name for a in addrscopes]
addrscope = self._get_addrscope(name)
assert addrscope is not None
self.set_connections_for_user(self.user11)
for name in ["addrscope11", "addrscope12"]:
addrscope = self._get_addrscope(name)
new_name = name + "_new"
self._update_addrscope(name, new_name)
addrscope = self._get_addrscope(new_name)
assert addrscope is not None
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
for name in ["addrscope11_new", "addrscope12_new"]:
addrscope = self._get_addrscope(name)
new_name = name + "_new"
with pytest.raises(exceptions.HttpException) as err:
assert self._update_addrscope(name, new_name)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_addrscope(name)
assert err.match("HttpException: 403")
self.set_connections_for_user(self.user11)
for name in ["addrscope11_new", "addrscope12_new"]:
addrscope = self._get_addrscope(name)
self._delete_addrscope(name)
assert name not in [a.name for a in self._list_addrscopes()]
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.HttpException) as err:
assert self._create_addrscope("addrscope11", shared=True)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._create_addrscope("addrscope12", shared=True)
assert err.match("HttpException: 403")
def test_uc_addrscope_2(self, tc_teardown):
"""
1. user02 create dedicated address-scope 'addrscope21' and shared
address-scope 'addrscope22',
2. user11/12/13 tries to get list and detail of address-scopes, should
succeed to get 'addrscope22' and fail to get 'addrscope21',
3. user11/12/13 tries to update/delete 'addrscope22', should fail;
"""
print ("\nTC-10")
self.set_connections_for_user(self.user02)
addrscope21 = self._create_addrscope("addrscope21")
assert addrscope21 is not None
addrscope22 = self._create_addrscope("addrscope22", shared=True)
assert addrscope22 is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
assert "addrscope21" not in [a.name for a in self._list_addrscopes()]
assert self._find_addrscope("addrscope21") is None
assert "addrscope22" in [s.name for s in self._list_addrscopes()]
addresscope = self._get_addrscope("addrscope22")
assert addresscope is not None
with pytest.raises(exceptions.HttpException) as err:
assert self._update_addrscope("addrscope22", "addrscope22_new")
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_addrscope("addrscope22")
assert err.match("HttpException: 403")
def test_uc_router_1(self, create_external_network, tc_teardown):
"""
1. user02 create external network and subnet: extnet21, subnet21,
2. user11 creates network 'network11' and 'subnet11', then tries to
create router 'vr11', then tries to add router interface for vr11
and 'network11',should succeed;
3. user11/12/13 tries to get list and detail of routers created in
step 1, should succeed;
4. user11 tries to update routers created in step1.should succeed;
5. user12/13 tries to update/delete routers created in step1.should
fail;
6. user11 tries to remove router interface and tries to delete routers
created in step1.should succeed;
7. user12/13 tries to create routers mentioned in step1.should fail;
"""
print ("\nTC-11")
extnet, extsubnet = create_external_network
self.set_connections_for_user(self.user11)
network11 = self._create_network("network11")
assert network11 is not None
subnet11 = self._create_subnet("subnet11", "network11",
cidr="10.10.20.0/24", gateway_ip="10.10.20.1")
assert subnet11 is not None
vr11 = self._create_router("vr11", extnet.name)
ri = OpenStackRouterInterface("vr11", "subnet11")
vr11 = self._add_interface_to_router(ri)
assert subnet11.id in vr11.get('subnet_ids')
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
routers = self._list_routers()
assert "vr11" in [r.name for r in routers]
router = self._get_router("vr11")
assert router is not None
self.set_connections_for_user(self.user11)
vr = self._get_router("vr11")
descr = "Router VR11"
args = {'description': descr}
router = self._update_router("vr11", **args)
vr = self._get_router("vr11")
assert vr.description == descr
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
descr = "Router VR11 " + user.get("name")
args = {'description': descr}
with pytest.raises(exceptions.HttpException) as err:
assert self._update_router("vr11", **args)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_router("vr11")
assert err.match("HttpException: 403")
self.set_connections_for_user(self.user11)
vr11 = self._delete_interface_from_router(ri)
self._delete_router("vr11")
assert "vr11" not in [r.name for r in self._list_routers()]
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.HttpException) as err:
assert self._create_router("vr11", extnet.name)
assert err.match("HttpException: 403")
def test_uc_router_2(self, create_router_vr21):
"""
1. user02 creates external network 'extnet2', and subnet2 for
'extnet2', then create 'vr21'
2. user11/12/13 tries to get list or detail of router vr21.should fail;
"""
print ("\nTC-12")
vr21 = create_router_vr21
assert vr21 is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
assert "vr21" not in [r.name for r in self._list_routers()]
assert self._find_router("vr21") is None
# No teardown is needed, the router created by create_router_vr21 fixture will be used from now on
def test_uc_floatingip_1(self, create_router_vr21, create_external_network, create_router_vr11, tc_teardown):
"""
1. user02 create shared external network and subnet: extnet21, subnet21
2. user11 creates network 'network11' and 'subnet11', then create
router 'vr11', add router interface for vr11 and 'network11',
3. user11 launches vm11 over 'network11',which will create a port
connecting to 'network11',
4. user11 tries to create floatingip for vm11's port, should succeed;
5. user12/13 tries to update/delete floatingip created in step4. should
fail;
6. user11 update/delete floatingip created in step4. should succeed.
7. user12/13 tries to create floatingip as step4. should fail;
"""
print ("\nTC-13")
extnet, extsubnet = create_external_network
self.set_connections_for_user(self.user11)
network11 = self._create_network("network11")
assert network11 is not None
subnet11 = self._create_subnet("subnet11", "network11", cidr="10.10.20.0/24", gateway_ip="10.10.20.1")
assert subnet11 is not None
vr11 = create_router_vr11
ri = OpenStackRouterInterface("vr11", "subnet11")
vr11 = self._add_interface_to_router(ri)
assert subnet11.id in vr11.get("subnet_ids")
vm11 = self._create_server("vm11", "cirros", "m1.tiny", network_name="network11")
vm11 = self._get_server("vm11")
network = self._get_network("network11")
vm11_port = [p for p in self._list_ports(device_id=vm11.id)][0]
assert vm11_port.network_id == network.id
fip11 = self._create_floatingip(subnet_id=extsubnet.id, floating_network_id=extnet.id, port_id=vm11_port.id)
assert fip11 is not None
fip11 = self._get_floatingip(fip11.name)
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
new_descr = "Floating IP " + user.get("name")
with pytest.raises(exceptions.HttpException) as err:
assert self._update_floatingip(fip11.name, description=new_descr)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_floatingip(fip11.name)
assert err.match("HttpException: 403")
self.set_connections_for_user(self.user11)
new_descr = "Floating IP " + user.get("name")
self._update_floatingip(fip11.name, description=new_descr)
fip11 = self._get_floatingip(fip11.name)
assert fip11.description == new_descr
self._delete_floatingip(fip11.name)
assert fip11.name not in [f.name for f in self._list_floatingips()]
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.HttpException) as err:
assert self._create_floatingip(subnet_id=extsubnet.id,
floating_network_id=extnet.id,
port_id=vm11_port.id)
assert err.match("HttpException: 403")
def test_uc_floatingip_2(self, create_external_network, create_router_vr21, tc_teardown):
"""
1. user02 create shared external network and subnet: extnet21, subnet21
2. user10 creates network 'network21' and 'subnet21', then create
router 'vr21', add router interface for vr21 and 'network21',
3. user02 launches vm21 over 'network21',which will create a port
connecting to 'network21',
4. user02 create floatingip for vm21's port;
5. user11/12/13 tries to get list and detail of floatingip in created
in step4. should fail;
"""
print ("\nTC-14")
self.set_connections_for_user(self.user02)
extnet, extsubnet = create_external_network
network21 = self._create_network("network21")
assert network21 is not None
networks = self._list_networks()
assert "network21" in [n.name for n in networks]
vr21 = create_router_vr21
network = self._get_network("network21")
subnet21 = self._create_subnet("subnet21", "network21", cidr="10.10.20.0/24", gateway_ip="10.10.20.1")
assert subnet21 is not None
ri = OpenStackRouterInterface("vr21", "subnet21")
vr21 = self._add_interface_to_router(ri)
assert subnet21.id in vr21.get("subnet_ids")
vm21 = self._create_server("vm21", "cirros", "m1.tiny", network_name="network21")
vm21 = self._get_server("vm21")
network = self._get_network("network21")
vm21_port = [p for p in self._list_ports(device_id=vm21.id)][0]
assert vm21_port.network_id == network.id
fip21 = self._create_floatingip(subnet_id=extsubnet.id, floating_network_id=extnet.id, port_id=vm21_port.id)
assert fip21 is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
assert fip21.id not in [fip.id for fip in self._list_floatingips()]
assert self._find_floatingip(fip21.name) is None
def test_uc_portforwarding_1(self, create_external_network, create_router_vr11, tc_teardown):
"""
https://docs.starlingx.io/api-ref/stx-docs/api-ref-networking-v2-cgcs-ext.html#port-forwarding
1. user02 create external network and subnet: extnet21, subnet21,
2. user11 creates network 'network11' and 'subnet11', then create router
'vr11', add router interface for vr11 and 'network11',
3. user11 launches vm11 over 'network11',which will create a port
connecting to 'network11',
4. user11 tries to create floatingip for vm11's port, should succeed;
5. user11 tries to create portforwarding for floatingip created on
step4, should succeed;
6. user11 tries to update the portforwarding created in step5, should
succeed;
7. user12/13 tries to update/delete portforwarding created in step5,
should fail;
8. user11 delete portforwarding created in step5, should succeed.
9. user12/13 tries to create portforwarding as step5, should fail;
"""
print ("\nTC-15")
extnet, extsubnet = create_external_network
self.set_connections_for_user(self.user11)
network11 = self._create_network("network11")
assert network11 is not None
subnet = self._create_subnet("subnet11", "network11", cidr="10.10.20.0/24", gateway_ip="10.10.20.1")
assert subnet is not None
vr11 = create_router_vr11
ri = OpenStackRouterInterface("vr11", "subnet11")
vr11 = self._add_interface_to_router(ri)
assert subnet.id in vr11.get("subnet_ids")
vm11 = self._create_server("vm11", "cirros", "m1.tiny", network_name="network11")
vm11 = self._get_server("vm11")
network = self._get_network("network11")
vm11_port = [p for p in self._list_ports(device_id=vm11.id)][0]
assert vm11_port.network_id == network.id
fip11 = self._create_floatingip(subnet_id=extsubnet.id, floating_network_id=extnet.id)
assert fip11 is not None
vm_ip_address = None
for ip in vm11_port.fixed_ips:
if ip.get('subnet_id') == subnet.id:
vm_ip_address = ip.get('ip_address')
fip = self._get_floatingip(fip11.name)
fip_pf = self._create_portforwarding(
fip.id,
protocol="tcp",
internal_ip_address=vm_ip_address,
internal_port=25,
internal_port_id=vm11_port.id,
external_port=2230)
assert fip_pf is not None
fip_pf = self._get_portforwarding(fip_pf.id, fip.id)
new_ext_port = fip_pf.external_port + 10
fip_pf = self._update_portforwarding(fip_pf.id, fip.id, external_port=new_ext_port)
assert fip_pf is not None
fip_pf = self._get_portforwarding(fip_pf.id, fip.id)
assert fip_pf.external_port == new_ext_port
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
fip_pf = self._get_portforwarding(fip_pf.id, fip.id)
new_ext_port = fip_pf.external_port + 10
with pytest.raises(exceptions.HttpException) as err:
assert self._update_portforwarding(fip_pf.id, fip.id, external_port=new_ext_port)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_portforwarding(fip_pf.id, fip.id)
assert err.match("HttpException: 403")
self.set_connections_for_user(self.user11)
self._delete_portforwarding(fip_pf.id, fip.id)
port_forwardings = self._list_portforwarding(fip.id)
assert fip_pf.id not in [f.id for f in port_forwardings]
# FIXME: not throwing exceptions and allowing the operation
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.HttpException) as err:
assert self._create_portforwarding(
fip.id,
protocol="tcp",
internal_ip_address=vm_ip_address,
internal_port=25,
internal_port_id=vm11_port.id,
external_port=2230)
assert err.match("HttpException: 403")
def test_uc_portforwarding_2(self, create_external_network, create_router_vr21, tc_teardown):
"""
https://docs.starlingx.io/api-ref/stx-docs/api-ref-networking-v2-cgcs-ext.html#port-forwarding
1. user02 create external network and subnet: extnet21, subnet21,
2. user10 creates network 'network21' and 'subnet21', then create router
'vr21', add router interface for vr21 and 'network21',
3. user02 launches vm21 over 'network21',which will create a port
connecting to 'network21',
4. user02 creates floatingip for vm21's port, should succeed;
5. user02 creates portforwarding for floatingip created on step4;
6. user11/12/13 tries to get list and detail of portfowarding in created
in step5, should fail;
"""
print ("\nTC-16")
extnet, extsubnet = create_external_network
self.set_connections_for_user(self.user02)
network21 = self._create_network("network21")
assert network21 is not None
networks = self._list_networks()
assert "network21" in [n.name for n in networks]
network = self._get_network("network21")
subnet22 = self._create_subnet("subnet21", "network21", cidr="10.10.20.0/24", gateway_ip="10.10.20.1")
assert subnet22 is not None
vr21 = create_router_vr21
subnet = self._get_subnet("subnet21")
ri = OpenStackRouterInterface("vr21", "subnet21")
vr21 = self._add_interface_to_router(ri)
assert subnet.id in vr21.get("subnet_ids")
vm21 = self._create_server("vm21", "cirros", "m1.tiny", network_name="network21")
vm21 = self._get_server("vm21")
network = self._get_network("network21")
vm21_port = [p for p in self._list_ports(device_id=vm21.id)][0]
assert vm21_port.network_id == network.id
fip21 = self._create_floatingip(subnet_id=extsubnet.id, floating_network_id=extnet.id)
assert fip21 is not None
vm_ip_address = None
for ip in vm21_port.fixed_ips:
if ip.get('subnet_id') == subnet.id:
vm_ip_address = ip.get('ip_address')
fip = self._get_floatingip(fip21.name)
fip_pf21 = self._create_portforwarding(fip.id,
protocol="tcp",
internal_ip_address=vm_ip_address,
internal_port=25,
internal_port_id=vm21_port.id,
external_port=2250)
assert fip_pf21 is not None
fip_pf = self._get_portforwarding(fip_pf21.id, fip.id)
new_ext_port = fip_pf.external_port + 10
fip_pf21 = self._update_portforwarding(fip_pf.id, fip.id, external_port=new_ext_port)
fip_pf = self._get_portforwarding(fip_pf21.id, fip.id)
assert fip_pf.external_port == new_ext_port
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.ResourceNotFound):
port_forwardings = self._list_portforwarding(fip.id)
assert fip_pf.id not in [pf.id for pf in port_forwardings]
with pytest.raises(exceptions.ResourceNotFound):
assert self._get_portforwarding(fip_pf.id, fip.id)
self.set_connections_for_user(self.user02)
self._delete_portforwarding(fip_pf.id, fip.id)
port_forwardings = self._list_portforwarding(fip.id)
assert fip_pf.id not in [f.id for f in port_forwardings]
@pytest.mark.parametrize('active_user', [
('user11'),
('user12')
])
def test_uc_port_1(self, create_external_network, active_user, tc_teardown):
"""
1. user02 create shared external network and subnet: extnet21,
extsubnetnet21;
2. user11 create network and subnet: network11. subnet11;
3. user11 create shared network and subnet: network12, subnet12;
4. user11/12 tries to create port 'extport21' for extnet21. port11 for
network11, port12 for network12, should succeed;
5. user11/12/13 tries to get list and detail of ports, should get
'extport21', 'port11', 'port12';
6. user13 tries to update/delete ports: extport11. port21, port12,
should fail;
7. user11/12 tries to update/delete ports: extport11, port21, port12,
should succeed;
"""
print ("\nTC-17")
self.set_connections_for_user(self.user02)
extnet, extsubnet = create_external_network
self.set_connections_for_user(self.user11)
network11 = self._create_network("network11")
assert network11 is not None
subnet11 = self._create_subnet("subnet11", "network11",
cidr="10.10.20.0/24", gateway_ip="10.10.20.1")
assert subnet11 is not None
network12 = self._create_network("network12", shared=True)
assert network12 is not None
subnet12 = self._create_subnet("subnet12", "network12",
cidr="10.10.20.0/24", gateway_ip="10.10.20.1")
assert subnet12 is not None
if active_user == "user11":
self.set_connections_for_user(self.user11)
else:
self.set_connections_for_user(self.user12)
for network_name, port_name in [("extnet21", "extport21"),
("network11", "port11"),
("network12", "port12")]:
port = self._create_port(port_name, network_name)
assert port is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
port_names = [p.name for p in self._list_ports()]
for port_name in ["extport21", "port11", "port12"]:
assert port_name in port_names
port = self._get_port(port_name)
assert port is not None
self.set_connections_for_user(self.user13)
for port_name in ["extport21", "port11", "port12"]:
new_descr = user.get("name") + " " + port_name
with pytest.raises(exceptions.HttpException) as err:
assert self._update_port(port_name, description=new_descr)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_port(port_name)
assert err.match("HttpException: 403")
if active_user == "user11":
self.set_connections_for_user(self.user11)
else:
self.set_connections_for_user(self.user12)
for port_name in ["extport21", "port11", "port12"]:
new_descr = user.get("name") + " " + port_name
self._update_port(port_name, description=new_descr)
port = self._get_port(port_name)
assert port.description == new_descr
self._delete_port(port.id)
assert port_name not in [p.name for p in self._list_ports()]
def test_uc_port_2(self, create_external_network, tc_teardown):
"""
1. user02 create shared external network and subnet: extnet21,
extsubnetnet21;
2. user02 create network and subnet: network21. subnet21;
3. user02 create shared network and subnet: network22. subnet22;
4. user02 create port 'extport21' for extnet21. port21 for network21,
port22 for network22;
5. user11/12/13 tries to get list and detail of ports, should get
'extport21', 'port21', 'port22'; should fail;
"""
print ("\nTC-18")
self.set_connections_for_user(self.user02)
extnet, extsubnet = create_external_network
network = self._create_network("network21")
assert network is not None
self._create_subnet("subnet21", "network21",
enable_dhcp=False,
cidr="10.10.20.0/24",
gateway_ip="10.10.20.1")
assert "subnet21" in [s.name for s in self._list_subnets()]
network = self._create_network("network22", shared=True)
assert network is not None
self._create_subnet("subnet22", "network22",
enable_dhcp=False,
cidr="10.10.30.0/24",
gateway_ip="10.10.30.1")
assert "subnet22" in [s.name for s in self._list_subnets()]
for network_name, port_name in [("extnet21", "extport21"),
("network21", "port21"),
("network22", "port22")]:
port = self._create_port(port_name, network_name)
assert port is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
port_names = [p.name for p in self._list_ports()]
for port_name in ["extport21", "port21", "port22"]:
assert port_name not in port_names
assert self._find_port(port_name) is None
def test_uc_trunk_1(self, tc_teardown):
"""
1. user11 creates networks and subnets: 'network11'/'subnet11',
'network12'/'subnet12', 'network13'/'subnet13';
2. user11 creates parent-port 'parentport11' over 'network11', creates
subport 'subport12' over 'network12', creates subport 'subport13'
over 'network13';
3. user11 tries to create trunk 'trunk11' with 'parentport11' and
'subport12', should succeed;
4. user11 tries to set 'subport13' to 'trunk11', should succeed;
5. user11/12/13 tries to get list and detail of trunk 'trunk11', should
succeed;
6. user11/12/13 tries to get list and detail of trunk subport12.
subport13, should succeed;
7. user12/13 tries to remove subport13 from trunk11. should fail;
8. user11 tries to remove subport13 from trunk11. should succeed;
9. user12/13 tries to update/delete 'trunk11', should fail;
10. user11 tries to update/delete trunk11, should succeed;
11. user11 tries to update/delete 'subport12', 'subport13', should
succeed;
"""
print ("\nTC-19")
self.set_connections_for_user(self.user11)
ip_addr = "10.10.20.0"
for network_name, subnet_name in [("network11", "subnet11"),
("network12", "subnet12"),
("network13", "subnet13")]:
network = self._create_network(network_name)
assert network is not None
self._create_subnet(subnet_name, network_name,
cidr=ip_addr+"/24",
gateway_ip=str(netaddr.IPAddress(ip_addr) + 1))
assert "subnet11" in [s.name for s in self._list_subnets()]
ip_addr = str(netaddr.IPAddress(ip_addr) + 256)
for network_name, port_name in [("network11", "parentport11"),
("network12", "subport12"),
("network13", "subport13")]:
port = self._create_port(port_name, network_name)
assert port is not None
subport12 = self._get_port('subport12')
subport13 = self._get_port('subport13')
trunk11 = self._create_trunk("trunk11", "parentport11",
sub_ports=[{
"port_id": subport12.id,
"segmentation_id": 11,
"segmentation_type": "vlan"
}])
assert trunk11 is not None
trunk = self._get_trunk("trunk11")
self._add_trunk_subport("trunk11", "subport13", 12, "vlan")
subports = self._get_trunk_subports("trunk11")
assert subport13.id in [s.get('port_id') for s in subports]
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
trunks = self._list_trunks()
assert "trunk11" in [t.name for t in trunks]
trunk = self._get_trunk("trunk11")
assert trunk is not None
subports = self._get_trunk_subports("trunk11")
for subport_name in ["subport12", "subport13"]:
subport = self._get_port(subport_name)
assert subport is not None
assert subport.id in [s.get('port_id') for s in subports]
subport13 = self._get_port("subport13")
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.HttpException) as err:
assert self._remove_trunk_subport("trunk11", "subport13")
assert err.match("HttpException: 403")
subports = self._get_trunk_subports("trunk11")
assert subport13.id in [s.get('port_id') for s in subports]
self.set_connections_for_user(self.user11)
self._remove_trunk_subport("trunk11", "subport13")
subports = self._get_trunk_subports("trunk11")
assert subport13.id not in [s.get('port_id') for s in subports]
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
new_descr = "Trunk " + user.get("name")
with pytest.raises(exceptions.HttpException) as err:
assert self._update_trunk("trunk11",
description=new_descr)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_trunk("trunk11")
assert err.match("HttpException: 403")
self.set_connections_for_user(self.user11)
new_descr = "Trunk user11"
self._update_trunk("trunk11", description=new_descr)
trunk = self._get_trunk("trunk11")
assert trunk.description == new_descr
self._delete_trunk("trunk11")
assert trunk.name not in [t.name for t in self._list_trunks()]
self.set_connections_for_user(self.user11)
for port_name in ["subport12", "subport13"]:
new_descr = user.get("name") + " " + port_name
self._update_port(port_name, description=new_descr)
port = self._get_port(port_name)
assert port.description == new_descr
self._delete_port(port_name)
assert self._find_port(port_name) is None
def test_uc_trunk_2(self, tc_teardown):
"""
1. user02 creates networks and subnets:
'network21'/'subnet21','network22'/'subnet22','network23'/'subnet23';
2. user02 creates parent-port 'parentport21' over 'network21', creates
subport 'subport22' over 'network22', creates subport 'subport23'
over 'network23';
3. user02 creates trunk 'trunk21' with 'parentport21' and 'subport22';
4. user11/12/13 tries to get list of trunk and subports creaetd in
step2 and setp3. should fail;
"""
print ("\nTC-20")
self.set_connections_for_user(self.user02)
ip_addr = "10.10.20.0"
for network_name, subnet_name in [("network21", "subnet21"),
("network22", "subnet22"),
("network23", "subnet23")]:
network = self._create_network(network_name)
assert network is not None
subnet = self._create_subnet(subnet_name, network_name,
cidr=ip_addr+"/24",
gateway_ip=str(netaddr.IPAddress(ip_addr) + 1))
assert subnet is not None
ip_addr = str(netaddr.IPAddress(ip_addr) + 256)
for network_name, port_name in [("network21", "parentport21"),
("network22", "subport22"),
("network23", "subport23")]:
port = self._create_port(port_name, network_name)
assert port is not None
subport22 = self._get_port('subport22')
trunk21 = self._create_trunk("trunk21", "parentport21",
sub_ports=[{
"port_id": subport22.id,
"segmentation_id": 11,
"segmentation_type": "vlan"
}])
assert trunk21 is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
assert "trunk21" not in [t.name for t in self._list_trunks()]
assert self._find_trunk("trunk21") is None
with pytest.raises(exceptions.NotFoundException):
assert not self._get_trunk_subports("trunk21")
def test_uc_rbacpolicy_1(self, tc_teardown):
"""
1. user11 creates network and subnet: 'network11' and 'subnet11';
2. user11 tries to create rbac-policy with type: network, should
succeed;
3. user11/12/13 tries to get list and detail of rbac-poliy cretaed in
step2. should succeed;
4. user12/13 tries to update/delete rback-policy created in step2.
should fail;
5. user11 tries to update/delete rback-policy created in step2. should
succeed;
"""
print ("\nTC-21")
self.set_connections_for_user(self.user11)
network = self._create_network("network11")
assert network is not None
subnet = self._create_subnet("subnet11", "network11",
enable_dhcp=False,
cidr="192.168.195.0/24",
gateway_ip="192.168.195.1")
assert subnet is not None
rbac_policy = self._create_rbac_policy(
action="access_as_shared",
network_id=network.id,
target_tenant='project1')
assert rbac_policy is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
assert rbac_policy.id in [rp.id for rp in self._list_rbac_policies()]
rp = self._get_rbac_policy(rbac_policy.id)
assert rp is not None
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.HttpException) as err:
assert self._update_rbac_policy(rbac_policy.id,
target_tenant="project2")
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_rbac_policy(rbac_policy.id)
assert err.match("HttpException: 403")
self.set_connections_for_user(self.user11)
self._update_rbac_policy(rbac_policy.id, target_tenant="project2")
rbac_policy = self._get_rbac_policy(rbac_policy.id)
# NOTE(myumi): target_project_id receives the target_tenant on
# openstacksdk (why?)
assert rbac_policy.target_project_id == "project2"
self._delete_rbac_policy(rbac_policy.id)
assert self._find_rbac_policy(rbac_policy.id) is None
def test_uc_rbacpolicy_2(self, tc_teardown):
"""
1. user02 creates network and subnet: 'network21', 'subnet21';
2. user02 creates rbac-policy with type: network;
3. user11/12/13 tries to get list and detail of rback created in step2.
should fail;
"""
print ("\nTC-22")
self.set_connections_for_user(self.user02)
network = self._create_network("network21")
assert network is not None
self._create_subnet("subnet21", "network21", enable_dhcp=False,
cidr="192.168.195.0/24", gateway_ip="192.168.195.1")
assert "subnet21" in [s.name for s in self._list_subnets()]
rbac_policy = self._create_rbac_policy(
action="access_as_shared",
network_id=network.id,
target_tenant='project2')
assert rbac_policy is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
rbac_policies = self._list_rbac_policies()
assert rbac_policy.id not in [rp.id for rp in rbac_policies]
assert self._find_rbac_policy(rbac_policy.id) is None
def test_uc_sg_1(self, tc_teardown):
"""
1. user11 tries to create security-group 'sg11', should succeed;
2. user11 tries to create securit-group-rule 'sgrule11' for 'sg11',
should succeed;
3. user11/12/13 tries to get list and detail of security-groups: sg11.
should succeed;
4. user11/12/13 tries to get list and detail of security-group-rule
created in step2. should succeed;
5. user12/13 tries to delete security-group-rule created in step2. should
fail;
6. user11 tries to delete security-group-rule created in step2. should
succeed;
7. user12/13 tries to update/delete security-group-rule in step1. should
fail;
8. user11 tries to update/delete security-group in step1. should succeed;
"""
print ("\nTC-23")
self.set_connections_for_user(self.user11)
security_group = self._create_security_group(name="sg11")
assert security_group is not None
rule = self._create_security_group_rule(
"sg11",
direction="ingress",
protocol="icmp",
ethertype="IPv4")
assert rule is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
assert self._get_security_group("sg11") is not None
assert "sg11" in [sg.name for sg in self._list_security_groups()]
assert self._get_security_group_rule(rule.id) is not None
rules = self._list_security_group_rules(security_group.id)
assert "icmp" in [r.protocol for r in rules]
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
with pytest.raises(exceptions.HttpException) as err:
assert self._delete_security_group_rule(rule.id)
err.match("HttpException: 403")
self.set_connections_for_user(self.user11)
self._delete_security_group_rule(rule.id)
rules = self._list_security_group_rules(security_group.id)
assert "icmp" not in [r.protocol for r in rules]
for user in [self.user12, self.user13]:
self.set_connections_for_user(user)
new_descr = user.get("name") + "'s security group"
with pytest.raises(exceptions.HttpException) as err:
assert self._update_security_group("sg11", description=new_descr)
assert err.match("HttpException: 403")
with pytest.raises(exceptions.HttpException) as err:
self._delete_security_group("sg11")
assert err.match("HttpException: 403")
self.set_connections_for_user(self.user11)
new_descr = user.get("name") + "'s security group"
self._update_security_group("sg11", description=new_descr)
sg = self._get_security_group("sg11")
assert sg.description == new_descr
self._delete_security_group("sg11")
assert self._find_security_group("sg11") is None
def test_uc_sg_2(self, tc_teardown):
"""
1. user02 tries to create security-group 'sg21', should succeed;
2. user02 tries to create securit-group-rule 'sgrule21' for 'sg11',
should succeed;
3. user11/12/13 tries to get list and detail of security-groups: sg21.
should fail;
4. user11/12/13 tries to get list and detail of security-group-rules
created in step2. should fail;
"""
print ("\nTC-24")
self.set_connections_for_user(self.user02)
self._create_security_group(name="sg21")
security_group = self._get_security_group("sg21")
assert security_group is not None
rule = self._create_security_group_rule(
"sg21",
protocol="icmp",
direction="ingress",
ethertype="IPv4")
assert rule is not None
for user in [self.user11, self.user12, self.user13]:
self.set_connections_for_user(user)
assert "sg21" not in [s.name for s in self._list_security_groups()]
assert self._find_security_group("sg21") is None
rules = self._list_security_group_rules(security_group.id)
assert "icmp" not in [r.protocol for r in rules]
with pytest.raises(exceptions.ResourceNotFound):
assert self._get_security_group_rule(rule.id) is None