From 69de1d55fa9c18012c19b8f275bbcf9161b3ef37 Mon Sep 17 00:00:00 2001 From: Karel van Klink <karel.vanklink@geant.org> Date: Wed, 23 Oct 2024 14:43:14 +0200 Subject: [PATCH] Deduplicate fixtures --- test/cli/test_imports.py | 8 +- test/conftest.py | 2 +- test/fixtures.py | 522 +----------------- test/fixtures/__init__.py | 5 +- test/fixtures/edge_port_fixtures.py | 9 +- test/fixtures/iptrunk_fixtures.py | 9 +- test/fixtures/office_router_fixtures.py | 4 +- test/fixtures/opengear_fixtures.py | 4 +- test/fixtures/router_fixtures.py | 125 +---- test/fixtures/site_fixtures.py | 4 +- test/fixtures/super_pop_switch_fixtures.py | 4 +- .../edge_port/test_create_edge_port.py | 5 +- .../test_create_imported_edge_port.py | 5 +- 13 files changed, 54 insertions(+), 652 deletions(-) diff --git a/test/cli/test_imports.py b/test/cli/test_imports.py index b0ec0adb..33ab32dd 100644 --- a/test/cli/test_imports.py +++ b/test/cli/test_imports.py @@ -201,10 +201,10 @@ def opengear_data(temp_file, faker, site_subscription_factory): @pytest.fixture() -def edge_port_data(temp_file, faker, nokia_router_subscription_factory, partner_factory): +def edge_port_data(temp_file, faker, router_subscription_factory, partner_factory): def _edge_port_data(**kwargs): edge_port_data = { - "node": Router.from_subscription(nokia_router_subscription_factory()).router.router_fqdn, + "node": Router.from_subscription(router_subscription_factory(vendor=Vendor.NOKIA)).router.router_fqdn, "service_type": EdgePortType.CUSTOMER, "speed": PhysicalPortCapacity.TEN_GIGABIT_PER_SECOND, "encapsulation": EncapsulationType.DOT1Q, @@ -526,9 +526,9 @@ def test_import_edge_port_successful(mock_start_process, mock_sleep, edge_port_d @patch("gso.cli.imports.time.sleep") @patch("gso.cli.imports.start_process") def test_import_edge_port_with_invalid_router( - mock_start_process, mock_sleep, edge_port_data, capfd, nokia_router_subscription_factory + mock_start_process, mock_sleep, edge_port_data, capfd, router_subscription_factory ): - p_router = nokia_router_subscription_factory(router_role=RouterRole.P) + p_router = router_subscription_factory(vendor=Vendor.NOKIA, router_role=RouterRole.P) broken_data = edge_port_data(node=Router.from_subscription(p_router).router.router_fqdn) import_edge_port(broken_data["path"]) diff --git a/test/conftest.py b/test/conftest.py index 88e43569..98176865 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -45,8 +45,8 @@ from test.fixtures import ( # noqa: F401 office_router_subscription_factory, opengear_subscription_factory, router_subscription_factory, - site_subscription_factory, service_binding_port_factory, + site_subscription_factory, super_pop_switch_subscription_factory, ) diff --git a/test/fixtures.py b/test/fixtures.py index 6c392855..e2b905c1 100644 --- a/test/fixtures.py +++ b/test/fixtures.py @@ -1,4 +1,3 @@ -import ipaddress from collections.abc import Generator from typing import Any from uuid import uuid4 @@ -6,462 +5,15 @@ from uuid import uuid4 import pytest from orchestrator import step, workflow from orchestrator.config.assignee import Assignee -from orchestrator.db import ( - ProductTable, - SubscriptionInstanceTable, - SubscriptionInstanceValueTable, - SubscriptionTable, - db, -) -from orchestrator.domain import SubscriptionModel -from orchestrator.types import SubscriptionLifecycle, UUIDstr -from orchestrator.utils.datetime import nowtz +from orchestrator.types import UUIDstr from orchestrator.workflow import done, init, inputstep from pydantic_forms.core import FormPage -from pydantic_forms.types import FormGenerator, SubscriptionMapping +from pydantic_forms.types import FormGenerator from pydantic_forms.validators import Choice -from gso.products import ProductName -from gso.products.product_blocks.iptrunk import ( - IptrunkInterfaceBlock, - IptrunkSideBlock, - IptrunkType, -) -from gso.products.product_blocks.router import RouterRole -from gso.products.product_blocks.site import SiteTier -from gso.products.product_types.iptrunk import ImportedIptrunkInactive, IptrunkInactive -from gso.products.product_types.office_router import ImportedOfficeRouterInactive, OfficeRouterInactive -from gso.products.product_types.opengear import ImportedOpengearInactive, OpengearInactive -from gso.products.product_types.router import ImportedRouterInactive, Router, RouterInactive -from gso.products.product_types.site import ImportedSiteInactive, Site, SiteInactive -from gso.products.product_types.super_pop_switch import ImportedSuperPopSwitchInactive, SuperPopSwitchInactive -from gso.services import subscriptions -from gso.utils.helpers import iso_from_ipv4 -from gso.utils.shared_enums import Vendor -from gso.utils.types.interfaces import PhysicalPortCapacity -from gso.utils.types.ip_address import IPv4AddressType, IPv6AddressType from test.workflows import WorkflowInstanceForTests -@pytest.fixture() -def site_subscription_factory(faker, geant_partner): - def subscription_create( - description=None, - start_date="2023-05-24T00:00:00+00:00", - site_name=None, - site_city=None, - site_country=None, - site_country_code=None, - site_latitude=None, - site_longitude=None, - site_bgp_community_id=None, - site_internal_id=None, - site_tier=SiteTier.TIER1, - site_ts_address=None, - status: SubscriptionLifecycle | None = None, - partner: dict | None = None, - *, - is_imported: bool | None = True, - ) -> UUIDstr: - if partner is None: - partner = geant_partner - - description = description or "Site Subscription" - site_name = site_name or faker.site_name() - site_city = site_city or faker.city() - site_country = site_country or faker.country() - site_country_code = site_country_code or faker.country_code() - site_latitude = site_latitude or str(faker.latitude()) - site_longitude = site_longitude or str(faker.longitude()) - site_bgp_community_id = site_bgp_community_id or faker.pyint() - site_internal_id = site_internal_id or faker.pyint() - site_ts_address = site_ts_address or faker.ipv4() - - if is_imported: - product_id = subscriptions.get_product_id_by_name(ProductName.SITE) - site_subscription = SiteInactive.from_product_id(product_id, customer_id=partner["partner_id"], insync=True) - else: - product_id = subscriptions.get_product_id_by_name(ProductName.IMPORTED_SITE) - site_subscription = ImportedSiteInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - - site_subscription.site.site_city = site_city - site_subscription.site.site_name = site_name - site_subscription.site.site_country = site_country - site_subscription.site.site_country_code = site_country_code - site_subscription.site.site_latitude = site_latitude - site_subscription.site.site_longitude = site_longitude - site_subscription.site.site_bgp_community_id = site_bgp_community_id - site_subscription.site.site_internal_id = site_internal_id - site_subscription.site.site_tier = site_tier - site_subscription.site.site_ts_address = site_ts_address - - site_subscription = SubscriptionModel.from_other_lifecycle(site_subscription, SubscriptionLifecycle.ACTIVE) - site_subscription.description = description - site_subscription.start_date = start_date - if status: - site_subscription.status = status - - site_subscription.save() - db.session.commit() - - return str(site_subscription.subscription_id) - - return subscription_create - - -@pytest.fixture() -def router_subscription_factory(site_subscription_factory, faker, geant_partner): - def subscription_create( - description: str | None = None, - start_date: str | None = "2023-05-24T00:00:00+00:00", - router_fqdn: str | None = None, - router_ts_port: int | None = None, - router_lo_ipv4_address: IPv4AddressType | None = None, - router_lo_ipv6_address: IPv6AddressType | None = None, - router_lo_iso_address: str | None = None, - router_role: RouterRole | None = RouterRole.PE, - router_site=None, - status: SubscriptionLifecycle | None = None, - partner: dict | None = None, - vendor: Vendor | None = Vendor.NOKIA, - *, - router_access_via_ts: bool | None = None, - is_imported: bool | None = True, - ) -> UUIDstr: - if partner is None: - partner = geant_partner - if is_imported: - product_id = subscriptions.get_product_id_by_name(ProductName.ROUTER) - router_subscription = RouterInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - else: - product_id = subscriptions.get_product_id_by_name(ProductName.IMPORTED_ROUTER) - router_subscription = ImportedRouterInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - - router_subscription.router.router_fqdn = router_fqdn or faker.domain_name(levels=4) - router_subscription.router.router_ts_port = router_ts_port or faker.port_number(is_user=True) - router_subscription.router.router_access_via_ts = router_access_via_ts or faker.boolean() - router_subscription.router.router_lo_ipv4_address = router_lo_ipv4_address or ipaddress.IPv4Address( - faker.ipv4() - ) - router_subscription.router.router_lo_ipv6_address = router_lo_ipv6_address or ipaddress.IPv6Address( - faker.ipv6() - ) - router_subscription.router.router_lo_iso_address = router_lo_iso_address or iso_from_ipv4(faker.ipv4()) - router_subscription.router.router_role = router_role - router_subscription.router.router_site = Site.from_subscription(router_site or site_subscription_factory()).site - router_subscription.router.vendor = vendor - - router_subscription = SubscriptionModel.from_other_lifecycle(router_subscription, SubscriptionLifecycle.ACTIVE) - router_subscription.insync = True - router_subscription.description = description or faker.text(max_nb_chars=30) - router_subscription.start_date = start_date - - if status: - router_subscription.status = status - - router_subscription.save() - db.session.commit() - - return str(router_subscription.subscription_id) - - return subscription_create - - -@pytest.fixture() -def iptrunk_side_subscription_factory(router_subscription_factory, faker): - def subscription_create( - iptrunk_side_node=None, - iptrunk_side_ae_iface=None, - iptrunk_side_ae_geant_a_sid=None, - iptrunk_side_ae_members=None, - iptrunk_side_ae_members_description=None, - ) -> IptrunkSideBlock: - iptrunk_side_node_id = iptrunk_side_node or router_subscription_factory() - iptrunk_side_node = Router.from_subscription(iptrunk_side_node_id).router - iptrunk_side_ae_iface = iptrunk_side_ae_iface or faker.pystr() - iptrunk_side_ae_geant_a_sid = iptrunk_side_ae_geant_a_sid or faker.geant_sid() - iptrunk_side_ae_members = iptrunk_side_ae_members or [ - IptrunkInterfaceBlock.new( - faker.uuid4(), - interface_name=faker.network_interface(), - interface_description=faker.sentence(), - ), - IptrunkInterfaceBlock.new( - faker.uuid4(), - interface_name=faker.network_interface(), - interface_description=faker.sentence(), - ), - ] - - return IptrunkSideBlock.new( - faker.uuid4(), - iptrunk_side_node=iptrunk_side_node, - iptrunk_side_ae_iface=iptrunk_side_ae_iface, - iptrunk_side_ae_geant_a_sid=iptrunk_side_ae_geant_a_sid, - iptrunk_side_ae_members=iptrunk_side_ae_members, - iptrunk_side_ae_members_description=iptrunk_side_ae_members_description, - ) - - return subscription_create - - -@pytest.fixture() -def iptrunk_subscription_factory(iptrunk_side_subscription_factory, faker, geant_partner): - def subscription_create( - description=None, - start_date="2023-05-24T00:00:00+00:00", - geant_s_sid=None, - iptrunk_description=None, - iptrunk_type=IptrunkType.LEASED, - iptrunk_speed=PhysicalPortCapacity.ONE_GIGABIT_PER_SECOND, - iptrunk_isis_metric=None, - iptrunk_ipv4_network=None, - iptrunk_ipv6_network=None, - iptrunk_sides=None, - status: SubscriptionLifecycle | None = None, - partner: dict | None = None, - *, - is_imported: bool | None = True, - ) -> UUIDstr: - if partner is None: - partner = geant_partner - - if is_imported: - product_id = subscriptions.get_product_id_by_name(ProductName.IP_TRUNK) - iptrunk_subscription = IptrunkInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - else: - product_id = subscriptions.get_product_id_by_name(ProductName.IMPORTED_IP_TRUNK) - iptrunk_subscription = ImportedIptrunkInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - - description = description or faker.sentence() - geant_s_sid = geant_s_sid or faker.geant_sid() - iptrunk_description = iptrunk_description or faker.sentence() - iptrunk_isis_metric = iptrunk_isis_metric or faker.pyint() - iptrunk_ipv4_network = iptrunk_ipv4_network or faker.ipv4_network(max_subnet=31) - iptrunk_ipv6_network = iptrunk_ipv6_network or faker.ipv6_network(max_subnet=126) - iptrunk_minimum_links = 1 - iptrunk_side_a = iptrunk_side_subscription_factory() - iptrunk_side_b = iptrunk_side_subscription_factory() - iptrunk_sides = iptrunk_sides or [iptrunk_side_a, iptrunk_side_b] - - iptrunk_subscription.iptrunk.geant_s_sid = geant_s_sid - iptrunk_subscription.iptrunk.iptrunk_description = iptrunk_description - iptrunk_subscription.iptrunk.iptrunk_type = iptrunk_type - iptrunk_subscription.iptrunk.iptrunk_speed = iptrunk_speed - iptrunk_subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links - iptrunk_subscription.iptrunk.iptrunk_isis_metric = iptrunk_isis_metric - iptrunk_subscription.iptrunk.iptrunk_ipv4_network = iptrunk_ipv4_network - iptrunk_subscription.iptrunk.iptrunk_ipv6_network = iptrunk_ipv6_network - iptrunk_subscription.iptrunk.iptrunk_sides = iptrunk_sides - - iptrunk_subscription = SubscriptionModel.from_other_lifecycle( - iptrunk_subscription, - SubscriptionLifecycle.ACTIVE, - ) - - if status: - iptrunk_subscription.status = status - - iptrunk_subscription.description = description - iptrunk_subscription.start_date = start_date - iptrunk_subscription.save() - db.session.commit() - - return str(iptrunk_subscription.subscription_id) - - return subscription_create - - -@pytest.fixture() -def office_router_subscription_factory(site_subscription_factory, faker, geant_partner): - def subscription_create( - description=None, - start_date="2023-05-24T00:00:00+00:00", - office_router_fqdn=None, - office_router_ts_port=None, - office_router_lo_ipv4_address=None, - office_router_lo_ipv6_address=None, - office_router_site=None, - status: SubscriptionLifecycle | None = None, - partner: dict | None = None, - *, - is_imported: bool | None = True, - ) -> UUIDstr: - if partner is None: - partner = geant_partner - - description = description or faker.text(max_nb_chars=30) - office_router_fqdn = office_router_fqdn or faker.domain_name(levels=4) - office_router_ts_port = office_router_ts_port or faker.random_int(min=1, max=49151) - office_router_lo_ipv4_address = office_router_lo_ipv4_address or ipaddress.IPv4Address(faker.ipv4()) - office_router_lo_ipv6_address = office_router_lo_ipv6_address or ipaddress.IPv6Address(faker.ipv6()) - office_router_site = office_router_site or site_subscription_factory() - - if is_imported: - product_id = subscriptions.get_product_id_by_name(ProductName.OFFICE_ROUTER) - office_router_subscription = OfficeRouterInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - else: - product_id = subscriptions.get_product_id_by_name(ProductName.IMPORTED_OFFICE_ROUTER) - office_router_subscription = ImportedOfficeRouterInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - - office_router_subscription.office_router.office_router_fqdn = office_router_fqdn - office_router_subscription.office_router.office_router_ts_port = office_router_ts_port - office_router_subscription.office_router.office_router_lo_ipv4_address = office_router_lo_ipv4_address - office_router_subscription.office_router.office_router_lo_ipv6_address = office_router_lo_ipv6_address - office_router_subscription.office_router.office_router_site = Site.from_subscription(office_router_site).site - office_router_subscription.office_router.vendor = Vendor.NOKIA - - office_router_subscription = SubscriptionModel.from_other_lifecycle( - office_router_subscription, SubscriptionLifecycle.ACTIVE - ) - office_router_subscription.description = description - office_router_subscription.start_date = start_date - - if status: - office_router_subscription.status = status - - office_router_subscription.save() - db.session.commit() - - return str(office_router_subscription.subscription_id) - - return subscription_create - - -@pytest.fixture() -def super_pop_switch_subscription_factory(site_subscription_factory, faker, geant_partner): - def subscription_create( - description=None, - start_date="2023-05-24T00:00:00+00:00", - super_pop_switch_fqdn=None, - super_pop_switch_ts_port=None, - super_pop_switch_mgmt_ipv4_address=None, - super_pop_switch_site=None, - status: SubscriptionLifecycle | None = None, - partner: dict | None = None, - *, - is_imported: bool | None = True, - ) -> UUIDstr: - if partner is None: - partner = geant_partner - - description = description or faker.text(max_nb_chars=30) - super_pop_switch_fqdn = super_pop_switch_fqdn or faker.domain_name(levels=4) - super_pop_switch_ts_port = super_pop_switch_ts_port or faker.random_int(min=1, max=49151) - super_pop_switch_mgmt_ipv4_address = super_pop_switch_mgmt_ipv4_address or ipaddress.IPv4Address(faker.ipv4()) - super_pop_switch_site = super_pop_switch_site or site_subscription_factory() - - if is_imported: - product_id = subscriptions.get_product_id_by_name(ProductName.SUPER_POP_SWITCH) - super_pop_switch_subscription = SuperPopSwitchInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - else: - product_id = subscriptions.get_product_id_by_name(ProductName.IMPORTED_SUPER_POP_SWITCH) - super_pop_switch_subscription = ImportedSuperPopSwitchInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - - super_pop_switch_subscription.super_pop_switch.super_pop_switch_fqdn = super_pop_switch_fqdn - super_pop_switch_subscription.super_pop_switch.super_pop_switch_ts_port = super_pop_switch_ts_port - super_pop_switch_subscription.super_pop_switch.super_pop_switch_mgmt_ipv4_address = ( - super_pop_switch_mgmt_ipv4_address - ) - super_pop_switch_subscription.super_pop_switch.super_pop_switch_site = Site.from_subscription( - super_pop_switch_site - ).site - super_pop_switch_subscription.super_pop_switch.vendor = Vendor.NOKIA - - super_pop_switch_subscription = SubscriptionModel.from_other_lifecycle( - super_pop_switch_subscription, SubscriptionLifecycle.ACTIVE - ) - super_pop_switch_subscription.description = description - super_pop_switch_subscription.start_date = start_date - - if status: - super_pop_switch_subscription.status = status - - super_pop_switch_subscription.save() - db.session.commit() - - return str(super_pop_switch_subscription.subscription_id) - - return subscription_create - - -@pytest.fixture() -def opengear_subscription_factory(site_subscription_factory, faker, geant_partner): - def subscription_create( - description=None, - start_date="2023-05-24T00:00:00+00:00", - opengear_site=None, - opengear_hostname=None, - opengear_wan_address=None, - opengear_wan_netmask=None, - opengear_wan_gateway=None, - status: SubscriptionLifecycle | None = None, - partner: dict | None = None, - *, - is_imported: bool | None = True, - ) -> UUIDstr: - if partner is None: - partner = geant_partner - - description = description or faker.text(max_nb_chars=30) - opengear_site = opengear_site or site_subscription_factory() - opengear_hostname = opengear_hostname or faker.domain_name(levels=4) - opengear_wan_address = opengear_wan_address or faker.ipv4() - opengear_wan_netmask = opengear_wan_netmask or faker.ipv4() - opengear_wan_gateway = opengear_wan_gateway or faker.ipv4() - - if is_imported: - product_id = subscriptions.get_product_id_by_name(ProductName.OPENGEAR) - opengear_subscription = OpengearInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - else: - product_id = subscriptions.get_product_id_by_name(ProductName.IMPORTED_OPENGEAR) - opengear_subscription = ImportedOpengearInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - - opengear_subscription.opengear.opengear_site = Site.from_subscription(opengear_site).site - opengear_subscription.opengear.opengear_hostname = opengear_hostname - opengear_subscription.opengear.opengear_wan_address = opengear_wan_address - opengear_subscription.opengear.opengear_wan_netmask = opengear_wan_netmask - opengear_subscription.opengear.opengear_wan_gateway = opengear_wan_gateway - - opengear_subscription = SubscriptionModel.from_other_lifecycle( - opengear_subscription, SubscriptionLifecycle.ACTIVE - ) - opengear_subscription.description = description - opengear_subscription.start_date = start_date - - if status: - opengear_subscription.status = status - - opengear_subscription.save() - db.session.commit() - - return str(opengear_subscription.subscription_id) - - return subscription_create - - @pytest.fixture() def test_workflow(generic_subscription_1: UUIDstr, generic_product_type_1) -> Generator: _, generic_product_one = generic_product_type_1 @@ -497,73 +49,3 @@ def test_workflow(generic_subscription_1: UUIDstr, generic_product_type_1) -> Ge with WorkflowInstanceForTests(workflow_for_testing_processes_py, "workflow_for_testing_processes_py") as wf: yield wf - - -def create_subscription_for_mapping( - product: ProductTable, mapping: SubscriptionMapping, values: dict[str, Any], **kwargs: Any -) -> SubscriptionTable: - """Create a subscription in the test coredb for the given subscription_mapping and values. - - This function handles optional resource types starting with a ? in the mapping not supplied in the values array. - - Args: - product: the ProductTable to create a sub for - mapping: the subscription_mapping belonging to that product - values: a dictionary of keys from the sub_map and their corresponding test values - kwargs: The rest of the arguments - - Returns: The conforming subscription. - """ - - def build_instance(name, value_mapping): - block = product.find_block_by_name(name) - - def build_value(rt, value): - resource_type = block.find_resource_type_by_name(rt) - return SubscriptionInstanceValueTable(resource_type_id=resource_type.resource_type_id, value=value) - - return SubscriptionInstanceTable( - product_block_id=block.product_block_id, - values=[ - build_value(resource_type, values[value_key]) for (resource_type, value_key) in value_mapping.items() - ], - ) - - # recreate the mapping: leave out the ?keys if no value supplied for them - mapping = { - name: [ - { - **{k: value_map[k] for k in value_map if not value_map[k].startswith("?")}, - **{ - k: value_map[k][1:] - for k in value_map - if value_map[k].startswith("?") and value_map[k][1:] in values - }, - } - for value_map in mapping[name] - ] - for name in mapping - } - - instances = [ - build_instance(name, value_mapping) - for (name, value_mappings) in mapping.items() - for value_mapping in value_mappings - ] - - return create_subscription(instances=instances, product=product, **kwargs) - - -def create_subscription(**kwargs): - attrs = { - "description": "A subscription.", - "customer_id": kwargs.get("customer_id", "85938c4c-0a11-e511-80d0-005056956c1a"), - "start_date": nowtz(), - "status": "active", - "insync": True, - **kwargs, - } - o = SubscriptionTable(**attrs) - db.session.add(o) - db.session.commit() - return o diff --git a/test/fixtures/__init__.py b/test/fixtures/__init__.py index 645e6d20..0b69c5fb 100644 --- a/test/fixtures/__init__.py +++ b/test/fixtures/__init__.py @@ -8,7 +8,7 @@ from test.fixtures.nren_l3_core_service_fixtures import ( ) from test.fixtures.office_router_fixtures import office_router_subscription_factory from test.fixtures.opengear_fixtures import opengear_subscription_factory -from test.fixtures.router_fixtures import juniper_router_subscription_factory, nokia_router_subscription_factory +from test.fixtures.router_fixtures import router_subscription_factory from test.fixtures.site_fixtures import site_subscription_factory from test.fixtures.super_pop_switch_fixtures import super_pop_switch_subscription_factory @@ -17,12 +17,11 @@ __all__ = [ "edge_port_subscription_factory", "iptrunk_side_subscription_factory", "iptrunk_subscription_factory", - "juniper_router_subscription_factory", - "nokia_router_subscription_factory", "nren_access_port_factory", "nren_l3_core_service_subscription_factory", "office_router_subscription_factory", "opengear_subscription_factory", + "router_subscription_factory", "service_binding_port_factory", "site_subscription_factory", "super_pop_switch_subscription_factory", diff --git a/test/fixtures/edge_port_fixtures.py b/test/fixtures/edge_port_fixtures.py index f689c191..669d42ff 100644 --- a/test/fixtures/edge_port_fixtures.py +++ b/test/fixtures/edge_port_fixtures.py @@ -1,7 +1,5 @@ import pytest -from orchestrator.db import ( - db, -) +from orchestrator.db import db from orchestrator.domain import SubscriptionModel from orchestrator.types import SubscriptionLifecycle, UUIDstr @@ -14,11 +12,12 @@ from gso.products.product_blocks.edge_port import ( from gso.products.product_types.edge_port import EdgePortInactive, ImportedEdgePortInactive from gso.products.product_types.router import Router from gso.services import subscriptions +from gso.utils.shared_enums import Vendor from gso.utils.types.interfaces import PhysicalPortCapacity @pytest.fixture() -def edge_port_subscription_factory(faker, partner_factory, nokia_router_subscription_factory): +def edge_port_subscription_factory(faker, partner_factory, router_subscription_factory): def subscription_create( description=None, partner: dict | None = None, @@ -40,7 +39,7 @@ def edge_port_subscription_factory(faker, partner_factory, nokia_router_subscrip is_imported=True, ) -> UUIDstr: partner = partner or partner_factory() - node = Router.from_subscription(nokia_router_subscription_factory()).router + node = Router.from_subscription(router_subscription_factory(vendor=Vendor.NOKIA)).router if is_imported: product_id = subscriptions.get_product_id_by_name(ProductName.EDGE_PORT) edge_port_subscription = EdgePortInactive.from_product_id( diff --git a/test/fixtures/iptrunk_fixtures.py b/test/fixtures/iptrunk_fixtures.py index f2251fc7..70ccdeb5 100644 --- a/test/fixtures/iptrunk_fixtures.py +++ b/test/fixtures/iptrunk_fixtures.py @@ -1,7 +1,5 @@ import pytest -from orchestrator.db import ( - db, -) +from orchestrator.db import db from orchestrator.domain import SubscriptionModel from orchestrator.types import SubscriptionLifecycle, UUIDstr @@ -14,11 +12,12 @@ from gso.products.product_blocks.iptrunk import ( from gso.products.product_types.iptrunk import ImportedIptrunkInactive, IptrunkInactive from gso.products.product_types.router import Router from gso.services import subscriptions +from gso.utils.shared_enums import Vendor from gso.utils.types.interfaces import PhysicalPortCapacity @pytest.fixture() -def iptrunk_side_subscription_factory(nokia_router_subscription_factory, faker): +def iptrunk_side_subscription_factory(router_subscription_factory, faker): def subscription_create( iptrunk_side_node=None, iptrunk_side_ae_iface=None, @@ -26,7 +25,7 @@ def iptrunk_side_subscription_factory(nokia_router_subscription_factory, faker): iptrunk_side_ae_members=None, iptrunk_side_ae_members_description=None, ) -> IptrunkSideBlock: - iptrunk_side_node_id = iptrunk_side_node or nokia_router_subscription_factory() + iptrunk_side_node_id = iptrunk_side_node or router_subscription_factory(vendor=Vendor.NOKIA) iptrunk_side_node = Router.from_subscription(iptrunk_side_node_id).router iptrunk_side_ae_iface = iptrunk_side_ae_iface or faker.pystr() iptrunk_side_ae_geant_a_sid = iptrunk_side_ae_geant_a_sid or faker.geant_sid() diff --git a/test/fixtures/office_router_fixtures.py b/test/fixtures/office_router_fixtures.py index 2f43fa6b..0c55ada0 100644 --- a/test/fixtures/office_router_fixtures.py +++ b/test/fixtures/office_router_fixtures.py @@ -1,9 +1,7 @@ import ipaddress import pytest -from orchestrator.db import ( - db, -) +from orchestrator.db import db from orchestrator.domain import SubscriptionModel from orchestrator.types import SubscriptionLifecycle, UUIDstr diff --git a/test/fixtures/opengear_fixtures.py b/test/fixtures/opengear_fixtures.py index d3cd83da..b6dbff50 100644 --- a/test/fixtures/opengear_fixtures.py +++ b/test/fixtures/opengear_fixtures.py @@ -1,7 +1,5 @@ import pytest -from orchestrator.db import ( - db, -) +from orchestrator.db import db from orchestrator.domain import SubscriptionModel from orchestrator.types import SubscriptionLifecycle, UUIDstr diff --git a/test/fixtures/router_fixtures.py b/test/fixtures/router_fixtures.py index d08dde35..04c77ced 100644 --- a/test/fixtures/router_fixtures.py +++ b/test/fixtures/router_fixtures.py @@ -1,9 +1,7 @@ import ipaddress import pytest -from orchestrator.db import ( - db, -) +from orchestrator.db import db from orchestrator.domain import SubscriptionModel from orchestrator.types import SubscriptionLifecycle, UUIDstr @@ -12,39 +10,32 @@ from gso.products.product_blocks.router import RouterRole from gso.products.product_types.router import ImportedRouterInactive, RouterInactive from gso.products.product_types.site import Site from gso.services import subscriptions +from gso.utils.helpers import iso_from_ipv4 from gso.utils.shared_enums import Vendor +from gso.utils.types.ip_address import IPv4AddressType, IPv6AddressType @pytest.fixture() -def nokia_router_subscription_factory(site_subscription_factory, faker, geant_partner): +def router_subscription_factory(site_subscription_factory, faker, geant_partner): def subscription_create( - description=None, - start_date="2023-05-24T00:00:00+00:00", - router_fqdn=None, - router_ts_port=None, - router_access_via_ts=None, - router_lo_ipv4_address=None, - router_lo_ipv6_address=None, - router_lo_iso_address=None, - router_role=RouterRole.PE, + description: str | None = None, + start_date: str | None = "2023-05-24T00:00:00+00:00", + router_fqdn: str | None = None, + router_ts_port: int | None = None, + router_lo_ipv4_address: IPv4AddressType | None = None, + router_lo_ipv6_address: IPv6AddressType | None = None, + router_lo_iso_address: str | None = None, + router_role: RouterRole | None = RouterRole.PE, router_site=None, status: SubscriptionLifecycle | None = None, partner: dict | None = None, + vendor: Vendor | None = Vendor.NOKIA, *, + router_access_via_ts: bool | None = None, is_imported: bool | None = True, ) -> UUIDstr: if partner is None: partner = geant_partner - - description = description or faker.text(max_nb_chars=30) - router_fqdn = router_fqdn or faker.domain_name(levels=4) - router_ts_port = router_ts_port or faker.random_int(min=1, max=49151) - router_access_via_ts = router_access_via_ts or faker.boolean() - router_lo_ipv4_address = router_lo_ipv4_address or ipaddress.IPv4Address(faker.ipv4()) - router_lo_ipv6_address = router_lo_ipv6_address or ipaddress.IPv6Address(faker.ipv6()) - router_lo_iso_address = router_lo_iso_address or faker.word() - router_site = router_site or site_subscription_factory() - if is_imported: product_id = subscriptions.get_product_id_by_name(ProductName.ROUTER) router_subscription = RouterInactive.from_product_id( @@ -56,85 +47,23 @@ def nokia_router_subscription_factory(site_subscription_factory, faker, geant_pa product_id, customer_id=partner["partner_id"], insync=True ) - router_subscription.router.router_fqdn = router_fqdn - router_subscription.router.router_ts_port = router_ts_port - router_subscription.router.router_access_via_ts = router_access_via_ts - router_subscription.router.router_lo_ipv4_address = router_lo_ipv4_address - router_subscription.router.router_lo_ipv6_address = router_lo_ipv6_address - router_subscription.router.router_lo_iso_address = router_lo_iso_address + router_subscription.router.router_fqdn = router_fqdn or faker.domain_name(levels=4) + router_subscription.router.router_ts_port = router_ts_port or faker.port_number(is_user=True) + router_subscription.router.router_access_via_ts = router_access_via_ts or faker.boolean() + router_subscription.router.router_lo_ipv4_address = router_lo_ipv4_address or ipaddress.IPv4Address( + faker.ipv4() + ) + router_subscription.router.router_lo_ipv6_address = router_lo_ipv6_address or ipaddress.IPv6Address( + faker.ipv6() + ) + router_subscription.router.router_lo_iso_address = router_lo_iso_address or iso_from_ipv4(faker.ipv4()) router_subscription.router.router_role = router_role - router_subscription.router.router_site = Site.from_subscription(router_site).site - router_subscription.router.vendor = Vendor.NOKIA + router_subscription.router.router_site = Site.from_subscription(router_site or site_subscription_factory()).site + router_subscription.router.vendor = vendor router_subscription = SubscriptionModel.from_other_lifecycle(router_subscription, SubscriptionLifecycle.ACTIVE) router_subscription.insync = True - router_subscription.description = description - router_subscription.start_date = start_date - - if status: - router_subscription.status = status - - router_subscription.save() - db.session.commit() - - return str(router_subscription.subscription_id) - - return subscription_create - - -@pytest.fixture() -def juniper_router_subscription_factory(site_subscription_factory, faker, geant_partner): - def subscription_create( - description=None, - start_date="2023-05-24T00:00:00+00:00", - router_fqdn=None, - router_ts_port=None, - router_access_via_ts=None, - router_lo_ipv4_address=None, - router_lo_ipv6_address=None, - router_lo_iso_address=None, - router_role=RouterRole.PE, - router_site=None, - status: SubscriptionLifecycle | None = None, - partner: dict | None = None, - *, - is_imported: bool | None = True, - ) -> UUIDstr: - if partner is None: - partner = geant_partner - - description = description or faker.text(max_nb_chars=30) - router_fqdn = router_fqdn or faker.domain_name(levels=4) - router_ts_port = router_ts_port or faker.random_int(min=1, max=49151) - router_access_via_ts = router_access_via_ts or faker.boolean() - router_lo_ipv4_address = router_lo_ipv4_address or ipaddress.IPv4Address(faker.ipv4()) - router_lo_ipv6_address = router_lo_ipv6_address or ipaddress.IPv6Address(faker.ipv6()) - router_lo_iso_address = router_lo_iso_address or faker.word() - router_site = router_site or site_subscription_factory() - - if is_imported: - product_id = subscriptions.get_product_id_by_name(ProductName.ROUTER) - router_subscription = RouterInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - else: - product_id = subscriptions.get_product_id_by_name(ProductName.IMPORTED_ROUTER) - router_subscription = ImportedRouterInactive.from_product_id( - product_id, customer_id=partner["partner_id"], insync=True - ) - - router_subscription.router.router_fqdn = router_fqdn - router_subscription.router.router_ts_port = router_ts_port - router_subscription.router.router_access_via_ts = router_access_via_ts - router_subscription.router.router_lo_ipv4_address = router_lo_ipv4_address - router_subscription.router.router_lo_ipv6_address = router_lo_ipv6_address - router_subscription.router.router_lo_iso_address = router_lo_iso_address - router_subscription.router.router_role = router_role - router_subscription.router.router_site = Site.from_subscription(router_site).site - router_subscription.router.vendor = Vendor.JUNIPER - - router_subscription = SubscriptionModel.from_other_lifecycle(router_subscription, SubscriptionLifecycle.ACTIVE) - router_subscription.description = description + router_subscription.description = description or faker.text(max_nb_chars=30) router_subscription.start_date = start_date if status: diff --git a/test/fixtures/site_fixtures.py b/test/fixtures/site_fixtures.py index b9155a29..e0a3a0bd 100644 --- a/test/fixtures/site_fixtures.py +++ b/test/fixtures/site_fixtures.py @@ -1,7 +1,5 @@ import pytest -from orchestrator.db import ( - db, -) +from orchestrator.db import db from orchestrator.domain import SubscriptionModel from orchestrator.types import SubscriptionLifecycle, UUIDstr diff --git a/test/fixtures/super_pop_switch_fixtures.py b/test/fixtures/super_pop_switch_fixtures.py index 33459570..5350e2a7 100644 --- a/test/fixtures/super_pop_switch_fixtures.py +++ b/test/fixtures/super_pop_switch_fixtures.py @@ -1,9 +1,7 @@ import ipaddress import pytest -from orchestrator.db import ( - db, -) +from orchestrator.db import db from orchestrator.domain import SubscriptionModel from orchestrator.types import SubscriptionLifecycle, UUIDstr diff --git a/test/workflows/edge_port/test_create_edge_port.py b/test/workflows/edge_port/test_create_edge_port.py index d087134f..a9a47b8d 100644 --- a/test/workflows/edge_port/test_create_edge_port.py +++ b/test/workflows/edge_port/test_create_edge_port.py @@ -9,6 +9,7 @@ from gso.products.product_blocks.edge_port import EdgePortType, EncapsulationTyp from gso.products.product_types.edge_port import EdgePort from gso.products.product_types.router import Router from gso.services.subscriptions import get_product_id_by_name +from gso.utils.shared_enums import Vendor from gso.utils.types.interfaces import PhysicalPortCapacity from test.services.conftest import MockedNetboxClient from test.workflows import ( @@ -43,10 +44,10 @@ def _netbox_client_mock(): @pytest.fixture() -def input_form_wizard_data(request, nokia_router_subscription_factory, partner_factory, faker): +def input_form_wizard_data(request, router_subscription_factory, partner_factory, faker): create_edge_port_step = { "tt_number": faker.tt_number(), - "node": nokia_router_subscription_factory(), + "node": router_subscription_factory(vendor=Vendor.NOKIA), "partner": partner_factory(name="GAAR", email=faker.email())["partner_id"], "service_type": EdgePortType.PUBLIC, "geant_ga_id": faker.geant_gid(), diff --git a/test/workflows/edge_port/test_create_imported_edge_port.py b/test/workflows/edge_port/test_create_imported_edge_port.py index 8ebd12a1..c5590fe4 100644 --- a/test/workflows/edge_port/test_create_imported_edge_port.py +++ b/test/workflows/edge_port/test_create_imported_edge_port.py @@ -3,14 +3,15 @@ from orchestrator.types import SubscriptionLifecycle from gso.products.product_blocks.edge_port import EdgePortType, EncapsulationType from gso.products.product_types.edge_port import ImportedEdgePort +from gso.utils.shared_enums import Vendor from gso.utils.types.interfaces import PhysicalPortCapacity from test.workflows import assert_complete, extract_state, run_workflow @pytest.fixture() -def imported_edge_port_creation_input_form_data(nokia_router_subscription_factory, partner_factory, faker): +def imported_edge_port_creation_input_form_data(router_subscription_factory, partner_factory, faker): return { - "node": nokia_router_subscription_factory(), + "node": router_subscription_factory(vendor=Vendor.NOKIA), "service_type": EdgePortType.CUSTOMER, "speed": PhysicalPortCapacity.TEN_GIGABIT_PER_SECOND, "encapsulation": EncapsulationType.DOT1Q, -- GitLab