Added VM2VM test between different routers in 2 projects
Added the test:
VM to VM test in different projects, different networks,
different routers, measure by Floating IPs (common floating net):
* a separate project is created, admin user is added to it
* VMs are in separate projects (admin and newly created),
separate networks, each project has its own router.
VMs have access to each other only by the common floating net.
* VMs are created on the same and different compute nodes.
* Verification is done via Floating IPs in 1 and multiple threads.
Other enhancements:
* renamed "tenant" variables and values to "project"
* more detailed logging (e.g. in which project resource is created)
* some refactoring
* fixed picking existing spt flavor if any
* check the project is empty before deleting it
* added stderr, stdout in case Internet is absent at VM and iperf
was not installed
Related-PROD: PROD-36943
Change-Id: I165ed41259336e586ad16ed9eb27ea59619db4c8
diff --git a/fixtures/base.py b/fixtures/base.py
index 721d772..d1434dd 100644
--- a/fixtures/base.py
+++ b/fixtures/base.py
@@ -16,11 +16,11 @@
return os_client.OfficialClientManager(
username=os.environ['OS_USERNAME'],
password=os.environ['OS_PASSWORD'],
- tenant_name=os.environ['OS_PROJECT_NAME'],
+ project_name=os.environ['OS_PROJECT_NAME'],
auth_url=os.environ['OS_AUTH_URL'],
cert=False,
domain=os.environ['OS_PROJECT_DOMAIN_NAME'],
- )
+ )
nodes = utils.get_pairs()
@@ -34,6 +34,7 @@
@pytest.fixture(scope='session')
def os_resources(openstack_clients):
+ logger.info("Setting up resources in admin project...")
os_actions = os_client.OSCliActions(openstack_clients)
os_resource = {}
config = utils.get_configuration()
@@ -50,19 +51,16 @@
if os_images_list.__len__() == 0:
pytest.skip("No images with name {}. This name can be redefined "
"with 'image_name' env var ".format(image_name))
-
os_resource['image_id'] = str(os_images_list[0])
-
- os_resource['flavor_id'] = [flavor.id for flavor in
- openstack_clients.compute.flavors.list()
- if flavor.name == flavor_name]
- flavor_is_created = False
- if not os_resource['flavor_id']:
+ flavor_id = os_actions.get_flavor_id_by_name(flavor_name)
+ if flavor_id is None:
+ flavor_is_created = True
os_resource['flavor_id'] = os_actions.create_flavor(
flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id
- flavor_is_created = True
else:
- os_resource['flavor_id'] = str(os_resource['flavor_id'][0])
+ flavor_is_created = False
+ logger.info("Flavor {} already exists".format(flavor_name))
+ os_resource['flavor_id'] = flavor_id
os_resource['sec_group'] = os_actions.create_sec_group()
os_resource['keypair'] = openstack_clients.compute.keypairs.create(
@@ -70,12 +68,12 @@
)
os_resource['net1'] = os_actions.create_network_resources()
os_resource['ext_net'] = os_actions.get_external_network()
- adm_tenant = os_actions.get_admin_tenant()
+ adm_project = os_actions.get_project_by_name("admin")
os_resource['router'] = os_actions.create_router(
- os_resource['ext_net'], adm_tenant.id)
- os_resource['net2'] = os_actions.create_network(adm_tenant.id)
+ os_resource['ext_net'], adm_project.id)
+ os_resource['net2'] = os_actions.create_network(adm_project.id)
os_resource['subnet2'] = os_actions.create_subnet(
- os_resource['net2'], adm_tenant.id, '10.2.7.0/24')
+ os_resource['net2'], adm_project.id, '10.2.7.0/24')
for subnet in openstack_clients.network.list_subnets()['subnets']:
if subnet['network_id'] == os_resource['net1']['id']:
os_resource['subnet1'] = subnet['id']
@@ -88,7 +86,8 @@
yield os_resource
# cleanup created resources
- logger.info("Deleting routers, networks, SG, key pair, flavor...")
+ logger.info("Deleting routers, networks, SG, key pair, flavor in {}..."
+ "".format(adm_project.name))
openstack_clients.network.remove_interface_router(
os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
openstack_clients.network.remove_interface_router(
@@ -109,3 +108,104 @@
openstack_clients.compute.flavors.delete(os_resource['flavor_id'])
if os_actions.create_fake_ext_net:
openstack_clients.network.delete_network(os_resource['ext_net']['id'])
+
+
+@pytest.fixture(scope='session')
+def openstack_alt_clients(openstack_clients):
+ # create alt project with regular admin user
+ tmp_os_actions = os_client.OSCliActions(openstack_clients)
+ alt_project = tmp_os_actions.create_project()
+ tmp_os_actions.add_roles_to_user_in_project(alt_project.id)
+
+ # create a client using alt project with admin user in it
+ return os_client.OfficialClientManager(
+ username=os.environ['OS_USERNAME'],
+ password=os.environ['OS_PASSWORD'],
+ project_name=alt_project.name,
+ auth_url=os.environ['OS_AUTH_URL'],
+ cert=False,
+ domain=os.environ['OS_PROJECT_DOMAIN_NAME'],
+ )
+
+
+@pytest.fixture(scope='session')
+def os_resources_alt_project(openstack_alt_clients):
+ logger.info("Setting up resources in the project {}..."
+ "".format(openstack_alt_clients.project_name))
+ alt_os_actions = os_client.OSCliActions(openstack_alt_clients)
+ os_resource_alt_project = {}
+ config = utils.get_configuration()
+ image_name = config.get('image_name', 'Ubuntu-18.04')
+ flavor_name = config.get('flavor_name', 'spt-test')
+ flavor_ram = config.get('flavor_ram', 1536)
+ flavor_vcpus = config.get('flavor_vcpus', 1)
+ flavor_disk = config.get('flavor_disk', 3)
+ os_images_list = [image.id for image in
+ openstack_alt_clients.image.images.list(
+ filters={'name': image_name})]
+
+ if os_images_list.__len__() == 0:
+ pytest.skip("No images with name {}. This name can be redefined "
+ "with 'image_name' env var ".format(image_name))
+ os_resource_alt_project['image_id'] = str(os_images_list[0])
+
+ flavor_id = alt_os_actions.get_flavor_id_by_name(flavor_name)
+ if flavor_id is None:
+ flavor_is_created = True
+ os_resource_alt_project['flavor_id'] = alt_os_actions.create_flavor(
+ flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id
+ else:
+ flavor_is_created = False
+ logger.info("Flavor {} already exists".format(flavor_name))
+ os_resource_alt_project['flavor_id'] = flavor_id
+
+ os_resource_alt_project['sec_group'] = alt_os_actions.create_sec_group()
+
+ alt_project = alt_os_actions.get_project_by_name(
+ openstack_alt_clients.project_name)
+ os_resource_alt_project['net1'] = alt_os_actions.create_network_resources(
+ project=alt_project.name, cidr='10.3.7.0/24')
+ os_resource_alt_project['ext_net'] = alt_os_actions.get_external_network()
+
+ os_resource_alt_project['router'] = alt_os_actions.create_router(
+ os_resource_alt_project['ext_net'], alt_project.id)
+
+ os_resource_alt_project['subnet1'] = \
+ openstack_alt_clients.network.show_network(
+ os_resource_alt_project['net1']['id'])['network']['subnets'][0]
+ openstack_alt_clients.network.add_interface_router(
+ os_resource_alt_project['router']['id'],
+ {'subnet_id': os_resource_alt_project['subnet1']})
+ yield os_resource_alt_project
+
+ # cleanup created resources
+ logger.info("Deleting routers, networks, SG, flavor in {} "
+ "project...".format(alt_project.name))
+
+ openstack_alt_clients.network.remove_interface_router(
+ os_resource_alt_project['router']['id'],
+ {'subnet_id': os_resource_alt_project['subnet1']})
+ openstack_alt_clients.network.remove_gateway_router(
+ os_resource_alt_project['router']['id'])
+ time.sleep(5)
+ openstack_alt_clients.network.delete_router(
+ os_resource_alt_project['router']['id'])
+ time.sleep(5)
+ openstack_alt_clients.network.delete_network(
+ os_resource_alt_project['net1']['id'])
+
+ openstack_alt_clients.network.delete_security_group(
+ os_resource_alt_project['sec_group']['id'])
+ if flavor_is_created:
+ openstack_alt_clients.compute.flavors.delete(
+ os_resource_alt_project['flavor_id'])
+ if alt_os_actions.create_fake_ext_net:
+ openstack_alt_clients.network.delete_network(
+ os_resource_alt_project['ext_net']['id'])
+
+ if alt_os_actions.is_project_empty(alt_project.id):
+ openstack_alt_clients.auth.projects.delete(alt_project.id)
+ logger.info("Deleted project {}".format(alt_project.name))
+ else:
+ logger.info("Project {} is not empty, skip deleting".format(
+ alt_project.name))