Skip to content
This repository has been archived by the owner on Apr 7, 2022. It is now read-only.

[WIP] Refactor Nuage enterprise sandbox so that it also returns count values #8458

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 56 additions & 34 deletions cfme/fixtures/nuage.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from argparse import Namespace

import pytest
from wrapanapi.utils.random import random_name

Expand All @@ -6,46 +8,64 @@


def create_basic_sandbox(nuage):
box = {}
box = Namespace()

# Create empty enterprise aka 'sandbox'.
enterprise = box['enterprise'] = nuage.create_enterprise()
logger.info('Created sandbox enterprise %s (%s)', enterprise.name, enterprise.id)
box.enterprise = get_object_dictionary(nuage.create_enterprise())
logger.info('Created sandbox enterprise %s (%s)',
box.enterprise['name'], box.enterprise['id'])

# Fill the sandbox with some entities.
# Method `create_child` returns a tuple (object, connection) and we only need object.
box['template'] = enterprise.create_child(
nuage.vspk.NUDomainTemplate(name=random_name()))[0]
box['domain'] = enterprise.create_child(
nuage.vspk.NUDomain(name=random_name(), template_id=box['template'].id))[0]
box['zone'] = box['domain'].create_child(
nuage.vspk.NUZone(name=random_name()))[0]
box['subnet'] = box['zone'].create_child(
box.template = get_object_dictionary(box.enterprise['obj'].create_child(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this layer-cake of Namespace/attribute/dictionary/key makes this entity generation very readable. I'll keep reading, but I'm continuing to think this get_object_dictionary layer is a bad pattern.

nuage.vspk.NUDomainTemplate(name=random_name()))[0])
box.domain = get_object_dictionary(box.enterprise['obj'].create_child(
nuage.vspk.NUDomain(name=random_name(), template_id=box.template['obj'].id))[0])
box.domain.update(num_subnets=1, num_security_groups=1)
box.zone = get_object_dictionary(box.domain['obj'].create_child(
nuage.vspk.NUZone(name=random_name()))[0])
box.subnet = get_object_dictionary(box.zone['obj'].create_child(
nuage.vspk.NUSubnet(
name=random_name(),
address='192.168.0.0',
netmask='255.255.255.0',
gateway='192.168.0.1'))[0]
box['cont_vport'] = box['subnet'].create_child(
nuage.vspk.NUVPort(name=random_name(), type='CONTAINER'))[0]
box['vm_vport'] = box['subnet'].create_child(
nuage.vspk.NUVPort(name=random_name(), type='VM'))[0]
box['l2_template'] = enterprise.create_child(
nuage.vspk.NUL2DomainTemplate(name=random_name()))[0]
box['l2_domain'] = enterprise.create_child(
nuage.vspk.NUL2Domain(name=random_name(), template_id=box['l2_template'].id))[0]
box['l2_cont_vport'] = box['l2_domain'].create_child(
nuage.vspk.NUVPort(name=random_name(), type='CONTAINER'))[0]
box['l2_vm_vport'] = box['l2_domain'].create_child(
nuage.vspk.NUVPort(name=random_name(), type='VM'))[0]
box['group'] = box['domain'].create_child(
nuage.vspk.NUPolicyGroup(name=random_name()))[0]
box['l2_group'] = box['l2_domain'].create_child(
nuage.vspk.NUPolicyGroup(name=random_name()))[0]
gateway='192.168.0.1'))[0])
box.subnet.update(num_ports=2, num_security_groups=0)
box.cont_vport = get_object_dictionary(box.subnet['obj'].create_child(
nuage.vspk.NUVPort(name=random_name(), type='CONTAINER'))[0])
box.cont_vport.update(num_subnets=1)
box.vm_vport = get_object_dictionary(box.subnet['obj'].create_child(
nuage.vspk.NUVPort(name=random_name(), type='VM'))[0])
box.vm_vport.update(num_subnets=1)
box.l2_template = get_object_dictionary(box.enterprise['obj'].create_child(
nuage.vspk.NUL2DomainTemplate(name=random_name()))[0])
box.l2_domain = get_object_dictionary(box.enterprise['obj'].create_child(
nuage.vspk.NUL2Domain(name=random_name(), template_id=box.l2_template['obj'].id))[0])
box.l2_domain.update(num_ports=2, num_security_groups=1)
box.l2_cont_vport = get_object_dictionary(box.l2_domain['obj'].create_child(
nuage.vspk.NUVPort(name=random_name(), type='CONTAINER'))[0])
box.l2_cont_vport.update(num_subnets=1)
box.l2_vm_vport = get_object_dictionary(box.l2_domain['obj'].create_child(
nuage.vspk.NUVPort(name=random_name(), type='VM'))[0])
box.l2_vm_vport.update(num_subnets=1)
box.group = get_object_dictionary(box.domain['obj'].create_child(
nuage.vspk.NUPolicyGroup(name=random_name()))[0])
box.l2_group = get_object_dictionary(box.l2_domain['obj'].create_child(
nuage.vspk.NUPolicyGroup(name=random_name()))[0])

box.counts = {
'num_subnets': 2,
'num_network_routers': 1,
'num_security_groups': 2,
'num_network_ports': 4
}
return box


def get_object_dictionary(obj):
return dict(obj=obj, name=obj.name, id=obj.id)


@pytest.fixture
def with_nuage_sandbox(networks_provider):
nuage = networks_provider.mgmt
Expand All @@ -55,7 +75,7 @@ def with_nuage_sandbox(networks_provider):
yield sandbox

# Destroy the sandbox.
enterprise = sandbox['enterprise']
enterprise = sandbox.enterprise['obj']
nuage.delete_enterprise(enterprise)
logger.info('Destroyed sandbox enterprise %s (%s)', enterprise.name, enterprise.id)

Expand All @@ -64,21 +84,23 @@ def with_nuage_sandbox(networks_provider):
def with_nuage_sandbox_modscope(appliance, setup_provider_modscope, provider):
nuage = provider.mgmt
sandbox = create_basic_sandbox(nuage)
enterprise = sandbox['enterprise']
logger.info('Performing a full refresh, so sandbox %s appears in the database', enterprise.name)
enterprise = sandbox.enterprise
logger.info('Performing a full refresh, so sandbox %s appears in the database',
enterprise['name'])
provider.refresh_provider_relationships()
wait_for(provider.is_refreshed, func_kwargs=dict(refresh_delta=5), timeout=600, delay=10)

# Check if tenant exists in database, if not fail test immediately
tenants_table = appliance.db.client['cloud_tenants']
tenant = (appliance.db.client.session
.query(tenants_table.name, tenants_table.ems_ref)
.filter(tenants_table.ems_ref == enterprise.id).first())
assert tenant is not None, 'Nuage sandbox tenant inventory missing: {}'.format(enterprise.name)
.filter(tenants_table.ems_ref == enterprise['id']).first())
assert tenant is not None, 'Nuage sandbox tenant inventory missing: {}'.format(
enterprise['name'])

# Let integration test do whatever it needs to do.
yield sandbox

# Destroy the sandbox.
nuage.delete_enterprise(enterprise)
logger.info('Destroyed sandbox enterprise %s (%s)', enterprise.name, enterprise.id)
nuage.delete_enterprise(enterprise['obj'])
logger.info('Destroyed sandbox enterprise %s (%s)', enterprise['name'], enterprise['id'])
1 change: 1 addition & 0 deletions cfme/networks/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,5 @@ def validate_stats(self, expected_stats):
cfme_stats = {
(path, stat): self.ui_details_value(path, stat) for path, stat in expected_stats
}
expected_stats = {k: str(v) for k, v in expected_stats.items()}
assert cfme_stats == expected_stats
46 changes: 23 additions & 23 deletions cfme/tests/networks/nuage/test_events_are_triggered.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,19 @@ def test_creating_entities_emits_events(register_event, with_nuage_sandbox):
listener = register_event
sandbox = with_nuage_sandbox

expect_event(listener, 'nuage_enterprise_create', sandbox['enterprise'].id)
expect_event(listener, 'nuage_domaintemplate_create', sandbox['template'].id)
expect_event(listener, 'nuage_domain_create', sandbox['domain'].id)
expect_event(listener, 'nuage_zone_create', sandbox['zone'].id)
expect_event(listener, 'nuage_subnet_create', sandbox['subnet'].id)
expect_event(listener, 'nuage_vport_create', sandbox['cont_vport'].id, comment='L3 cont')
expect_event(listener, 'nuage_vport_create', sandbox['vm_vport'].id, comment='L3 vm')
expect_event(listener, 'nuage_l2domaintemplate_create', sandbox['l2_template'].id)
expect_event(listener, 'nuage_l2domain_create', sandbox['l2_domain'].id)
expect_event(listener, 'nuage_vport_create', sandbox['l2_cont_vport'].id, comment='L2 cont')
expect_event(listener, 'nuage_vport_create', sandbox['l2_vm_vport'].id, comment='L2 vm')
expect_event(listener, 'nuage_policygroup_create', sandbox['group'].id, comment='L1')
expect_event(listener, 'nuage_policygroup_create', sandbox['l2_group'].id, comment='L2')
expect_event(listener, 'nuage_enterprise_create', sandbox.enterprise['id'])
expect_event(listener, 'nuage_domaintemplate_create', sandbox.template['id'])
expect_event(listener, 'nuage_domain_create', sandbox.domain['id'])
expect_event(listener, 'nuage_zone_create', sandbox.zone['id'])
expect_event(listener, 'nuage_subnet_create', sandbox.subnet['id'])
expect_event(listener, 'nuage_vport_create', sandbox.cont_vport['id'], comment='L3 cont')
expect_event(listener, 'nuage_vport_create', sandbox.vm_vport['id'], comment='L3 vm')
expect_event(listener, 'nuage_l2domaintemplate_create', sandbox.l2_template['id'])
expect_event(listener, 'nuage_l2domain_create', sandbox.l2_domain['id'])
expect_event(listener, 'nuage_vport_create', sandbox.l2_cont_vport['id'], comment='L2 cont')
expect_event(listener, 'nuage_vport_create', sandbox.l2_vm_vport['id'], comment='L2 vm')
expect_event(listener, 'nuage_policygroup_create', sandbox.group['id'], comment='L1')
expect_event(listener, 'nuage_policygroup_create', sandbox.l2_group['id'], comment='L2')


def test_creating_entities_triggers_targeted_refresh(targeted_refresh, with_nuage_sandbox):
Expand All @@ -71,16 +71,16 @@ def test_creating_entities_triggers_targeted_refresh(targeted_refresh, with_nuag
"""
sandbox = with_nuage_sandbox
with targeted_refresh.timeout():
targeted_refresh.register_target(sandbox['enterprise'].id, 'Enterprise')
targeted_refresh.register_target(sandbox['domain'].id, 'Domain')
targeted_refresh.register_target(sandbox['subnet'].id, 'Subnet')
targeted_refresh.register_target(sandbox['cont_vport'].id, 'Container vPort (L3)')
targeted_refresh.register_target(sandbox['vm_vport'].id, 'VM vPort (L3)')
targeted_refresh.register_target(sandbox['l2_domain'].id, 'Domain (L2)')
targeted_refresh.register_target(sandbox['l2_cont_vport'].id, 'Container vPort (L2)')
targeted_refresh.register_target(sandbox['l2_vm_vport'].id, 'VM vPort (L2)')
targeted_refresh.register_target(sandbox['group'].id, 'Security group (L3)')
targeted_refresh.register_target(sandbox['l2_group'].id, 'Security group (L2)')
targeted_refresh.register_target(sandbox.enterprise['id'], 'Enterprise')
targeted_refresh.register_target(sandbox.domain['id'], 'Domain')
targeted_refresh.register_target(sandbox.subnet['id'], 'Subnet')
targeted_refresh.register_target(sandbox.cont_vport['id'], 'Container vPort (L3)')
targeted_refresh.register_target(sandbox.vm_vport['id'], 'VM vPort (L3)')
targeted_refresh.register_target(sandbox.l2_domain['id'], 'Domain (L2)')
targeted_refresh.register_target(sandbox.l2_cont_vport['id'], 'Container vPort (L2)')
targeted_refresh.register_target(sandbox.l2_vm_vport['id'], 'VM vPort (L2)')
targeted_refresh.register_target(sandbox.group['id'], 'Security group (L3)')
targeted_refresh.register_target(sandbox.l2_group['id'], 'Security group (L2)')


def expect_event(listener, event_type, entity_id, comment=''):
Expand Down
72 changes: 36 additions & 36 deletions cfme/tests/networks/nuage/test_inventory.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@

def test_tenant_details(setup_provider_modscope, provider, with_nuage_sandbox_modscope):
sandbox = with_nuage_sandbox_modscope
tenant_name = sandbox['enterprise'].name
tenant_name = sandbox.enterprise['name']
tenant = provider.collections.cloud_tenants.instantiate(name=tenant_name, provider=provider)

tenant.validate_stats({
('relationships', 'Cloud Subnets'): '2',
('relationships', 'Network Routers'): '1',
('relationships', 'Security Groups'): '2',
('relationships', 'Network Ports'): '4'
('relationships', 'Cloud Subnets'): sandbox.counts['num_subnets'],
('relationships', 'Network Routers'): sandbox.counts['num_network_routers'],
('relationships', 'Security Groups'): sandbox.counts['num_security_groups'],
('relationships', 'Network Ports'): sandbox.counts['num_network_ports']
})


Expand All @@ -28,9 +28,9 @@ def test_subnet_details(setup_provider_modscope, provider, with_nuage_sandbox_mo
Tenant > Router > Subnet
"""
sandbox = with_nuage_sandbox_modscope
tenant_name = sandbox['enterprise'].name
subnet_name = sandbox['subnet'].name
router_name = sandbox['domain'].name
tenant_name = sandbox.enterprise['name']
subnet_name = sandbox.subnet['name']
router_name = sandbox.domain['name']
tenant = provider.collections.cloud_tenants.instantiate(name=tenant_name, provider=provider)
router = tenant.collections.routers.instantiate(name=router_name)
subnet = router.collections.subnets.instantiate(name=subnet_name)
Expand All @@ -42,8 +42,8 @@ def test_subnet_details(setup_provider_modscope, provider, with_nuage_sandbox_mo
('properties', 'Gateway'): '192.168.0.1',
('properties', 'Network protocol'): 'ipv4',
('relationships', 'Network Router'): router_name,
('relationships', 'Network Ports'): '2',
('relationships', 'Security Groups'): '0',
('relationships', 'Network Ports'): sandbox.subnet['num_ports'],
('relationships', 'Security Groups'): sandbox.subnet['num_security_groups'],
})


Expand All @@ -56,31 +56,31 @@ def test_l2_subnet_details(setup_provider_modscope, provider, with_nuage_sandbox
Tenant > Subnet
"""
sandbox = with_nuage_sandbox_modscope
tenant_name = sandbox['enterprise'].name
subnet_name = sandbox['l2_domain'].name
tenant_name = sandbox.enterprise['name']
subnet_name = sandbox.l2_domain['name']
tenant = provider.collections.cloud_tenants.instantiate(name=tenant_name, provider=provider)
subnet = tenant.collections.subnets.instantiate(name=subnet_name)

subnet.validate_stats({
('properties', 'Name'): subnet_name,
('properties', 'Type'): 'ManageIQ/Providers/Nuage/Network Manager/Cloud Subnet/L2',
('relationships', 'Network Ports'): '2',
('relationships', 'Security Groups'): '1',
('relationships', 'Network Ports'): sandbox.l2_domain['num_ports'],
('relationships', 'Security Groups'): sandbox.l2_domain['num_security_groups'],
})


def test_network_router_details(setup_provider_modscope, provider, with_nuage_sandbox_modscope):
sandbox = with_nuage_sandbox_modscope
tenant_name = sandbox['enterprise'].name
router_name = sandbox['domain'].name
tenant_name = sandbox.enterprise['name']
router_name = sandbox.domain['name']
tenant = provider.collections.cloud_tenants.instantiate(name=tenant_name, provider=provider)
router = tenant.collections.routers.instantiate(name=router_name)

router.validate_stats({
('properties', 'Name'): router_name,
('properties', 'Type'): 'ManageIQ/Providers/Nuage/Network Manager/Network Router',
('relationships', 'Cloud Subnets'): '1',
('relationships', 'Security Groups'): '1',
('relationships', 'Cloud Subnets'): sandbox.domain['num_subnets'],
('relationships', 'Security Groups'): sandbox.domain['num_security_groups'],
})


Expand All @@ -92,10 +92,10 @@ def test_network_port_vm(setup_provider_modscope, provider, with_nuage_sandbox_m
Tenant > Router > Subnet > Network Port
"""
sandbox = with_nuage_sandbox_modscope
tenant_name = sandbox['enterprise'].name
subnet_name = sandbox['subnet'].name
router_name = sandbox['domain'].name
vport_name = sandbox['vm_vport'].name
tenant_name = sandbox.enterprise['name']
subnet_name = sandbox.subnet['name']
router_name = sandbox.domain['name']
vport_name = sandbox.vm_vport['name']
tenant = provider.collections.cloud_tenants.instantiate(name=tenant_name, provider=provider)
router = tenant.collections.routers.instantiate(name=router_name)
subnet = router.collections.subnets.instantiate(name=subnet_name)
Expand All @@ -105,7 +105,7 @@ def test_network_port_vm(setup_provider_modscope, provider, with_nuage_sandbox_m
('properties', 'Name'): vport_name,
('properties', 'Type'): 'ManageIQ/Providers/Nuage/Network Manager/Network Port/Vm',
('relationships', 'Cloud tenant'): tenant_name,
('relationships', 'Cloud subnets'): '1',
('relationships', 'Cloud subnets'): sandbox.vm_vport['num_subnets'],
})


Expand All @@ -117,10 +117,10 @@ def test_network_port_container(setup_provider_modscope, provider, with_nuage_sa
Tenant > Router > Subnet > Network Port
"""
sandbox = with_nuage_sandbox_modscope
tenant_name = sandbox['enterprise'].name
subnet_name = sandbox['subnet'].name
router_name = sandbox['domain'].name
vport_name = sandbox['cont_vport'].name
tenant_name = sandbox.enterprise['name']
subnet_name = sandbox.subnet['name']
router_name = sandbox.domain['name']
vport_name = sandbox.cont_vport['name']
tenant = provider.collections.cloud_tenants.instantiate(name=tenant_name, provider=provider)
router = tenant.collections.routers.instantiate(name=router_name)
subnet = router.collections.subnets.instantiate(name=subnet_name)
Expand All @@ -130,7 +130,7 @@ def test_network_port_container(setup_provider_modscope, provider, with_nuage_sa
('properties', 'Name'): vport_name,
('properties', 'Type'): 'ManageIQ/Providers/Nuage/Network Manager/Network Port/Container',
('relationships', 'Cloud tenant'): tenant_name,
('relationships', 'Cloud subnets'): '1',
('relationships', 'Cloud subnets'): sandbox.cont_vport['num_subnets'],
})


Expand All @@ -143,9 +143,9 @@ def test_network_port_l2_vm(setup_provider_modscope, provider, with_nuage_sandbo
Tenant > Subnet > Network Port
"""
sandbox = with_nuage_sandbox_modscope
tenant_name = sandbox['enterprise'].name
subnet_name = sandbox['l2_domain'].name
vport_name = sandbox['l2_vm_vport'].name
tenant_name = sandbox.enterprise['name']
subnet_name = sandbox.l2_domain['name']
vport_name = sandbox.l2_vm_vport['name']
tenant = provider.collections.cloud_tenants.instantiate(name=tenant_name, provider=provider)
subnet = tenant.collections.subnets.instantiate(name=subnet_name)
network_port = subnet.collections.network_ports.instantiate(name=vport_name)
Expand All @@ -154,7 +154,7 @@ def test_network_port_l2_vm(setup_provider_modscope, provider, with_nuage_sandbo
('properties', 'Name'): vport_name,
('properties', 'Type'): 'ManageIQ/Providers/Nuage/Network Manager/Network Port/Vm',
('relationships', 'Cloud tenant'): tenant_name,
('relationships', 'Cloud subnets'): '1',
('relationships', 'Cloud subnets'): sandbox.l2_vm_vport['num_subnets'],
})


Expand All @@ -167,9 +167,9 @@ def test_network_port_l2_container(setup_provider_modscope, provider, with_nuage
Tenant > Subnet > Network Port
"""
sandbox = with_nuage_sandbox_modscope
tenant_name = sandbox['enterprise'].name
subnet_name = sandbox['l2_domain'].name
vport_name = sandbox['l2_cont_vport'].name
tenant_name = sandbox.enterprise['name']
subnet_name = sandbox.l2_domain['name']
vport_name = sandbox.l2_cont_vport['name']
tenant = provider.collections.cloud_tenants.instantiate(name=tenant_name, provider=provider)
subnet = tenant.collections.subnets.instantiate(name=subnet_name)
network_port = subnet.collections.network_ports.instantiate(name=vport_name)
Expand All @@ -178,5 +178,5 @@ def test_network_port_l2_container(setup_provider_modscope, provider, with_nuage
('properties', 'Name'): vport_name,
('properties', 'Type'): 'ManageIQ/Providers/Nuage/Network Manager/Network Port/Container',
('relationships', 'Cloud tenant'): tenant_name,
('relationships', 'Cloud subnets'): '1',
('relationships', 'Cloud subnets'): sandbox.l2_cont_vport['num_subnets'],
})
Loading