From 59f57bddf6a5faa1aa8885212d34a6305026ff09 Mon Sep 17 00:00:00 2001 From: Karel van Klink <karel.vanklink@geant.org> Date: Tue, 8 Oct 2024 11:02:14 +0200 Subject: [PATCH] =?UTF-8?q?Update=20G=C3=89ANT=20IP=20and=20Edge=20Port=20?= =?UTF-8?q?fixtures,=20add=20G=C3=89ANT=20IP=20creation=20unit=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gso/products/__init__.py | 4 +- test/conftest.py | 3 ++ test/fixtures/edge_port_fixtures.py | 2 - test/fixtures/geant_ip_fixtures.py | 14 ++--- test/workflows/geant_ip/__init__.py | 0 .../geant_ip/test_create_geant_ip.py | 52 +++++++++++++++++++ 6 files changed, 62 insertions(+), 13 deletions(-) create mode 100644 test/workflows/geant_ip/__init__.py create mode 100644 test/workflows/geant_ip/test_create_geant_ip.py diff --git a/gso/products/__init__.py b/gso/products/__init__.py index d3a076ad..2f860b7b 100644 --- a/gso/products/__init__.py +++ b/gso/products/__init__.py @@ -41,8 +41,8 @@ class ProductName(strEnum): IMPORTED_OPENGEAR = "Imported Opengear" EDGE_PORT = "Edge port" IMPORTED_EDGE_PORT = "Imported Edge port" - GEANT_IP = "GEANT IP" - IMPORTED_GEANT_IP = "Imported GEANT IP" + GEANT_IP = "GeantIP" + IMPORTED_GEANT_IP = "Imported GeantIP" class ProductType(strEnum): diff --git a/test/conftest.py b/test/conftest.py index d27d20d4..ccae3c61 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -119,6 +119,9 @@ class FakerProvider(BaseProvider): for i in range(iface_amount) ] + def vlan_id(self) -> int: + return self.generator.random_int(min=1, max=4096) + @pytest.fixture(scope="session") def faker() -> Faker: diff --git a/test/fixtures/edge_port_fixtures.py b/test/fixtures/edge_port_fixtures.py index cfed2090..58d72203 100644 --- a/test/fixtures/edge_port_fixtures.py +++ b/test/fixtures/edge_port_fixtures.py @@ -32,7 +32,6 @@ def edge_port_subscription_factory(faker, partner_factory, nokia_router_subscrip edge_port_type=EdgePortType.PUBLIC, geant_ga_id=None, edge_port_ae_members=None, - edge_port_sbp_list=None, status: SubscriptionLifecycle | None = None, *, enable_lacp=True, @@ -77,7 +76,6 @@ def edge_port_subscription_factory(faker, partner_factory, nokia_router_subscrip interface_description=faker.sentence(), ), ] - edge_port_subscription.edge_port.edge_port_sbp_list = edge_port_sbp_list or [] edge_port_subscription = SubscriptionModel.from_other_lifecycle( edge_port_subscription, SubscriptionLifecycle.ACTIVE, diff --git a/test/fixtures/geant_ip_fixtures.py b/test/fixtures/geant_ip_fixtures.py index 1c349a21..d024e405 100644 --- a/test/fixtures/geant_ip_fixtures.py +++ b/test/fixtures/geant_ip_fixtures.py @@ -49,7 +49,7 @@ def bgp_session_subscription_factory(faker): @pytest.fixture() -def service_binding_port_factory(faker, bgp_session_subscription_factory): +def service_binding_port_factory(faker, bgp_session_subscription_factory, edge_port_subscription_factory): def create_service_binding_port( sbp_bgp_session_list: list | None = None, geant_sid: str | None = None, @@ -57,6 +57,7 @@ def service_binding_port_factory(faker, bgp_session_subscription_factory): ipv4_address: str | None = None, ipv6_address: str | None = None, vlan_id: int | None = None, + edge_port: EdgePort | None = None, *, custom_firewall_filters: bool = False, is_tagged: bool = False, @@ -71,23 +72,18 @@ def service_binding_port_factory(faker, bgp_session_subscription_factory): custom_firewall_filters=custom_firewall_filters, geant_sid=geant_sid or faker.geant_sid(), sbp_bgp_session_list=sbp_bgp_session_list or [bgp_session_subscription_factory() for _ in range(2)], + edge_port=edge_port or edge_port_subscription_factory(), ) return create_service_binding_port @pytest.fixture() -def nren_access_port_factory(faker, edge_port_subscription_factory): - def create_nren_access_port( - nren_ap_type: APType | None = None, - edge_port: UUIDstr | None = None, - ): - edge_port = edge_port or edge_port_subscription_factory() - geant_ip_ep = EdgePort.from_subscription(edge_port).edge_port +def nren_access_port_factory(faker): + def create_nren_access_port(nren_ap_type: APType | None = None): return NRENAccessPort.new( subscription_id=uuid4(), nren_ap_type=nren_ap_type or random.choice(list(APType)), # noqa: S311 - geant_ip_ep=geant_ip_ep, ) return create_nren_access_port diff --git a/test/workflows/geant_ip/__init__.py b/test/workflows/geant_ip/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/workflows/geant_ip/test_create_geant_ip.py b/test/workflows/geant_ip/test_create_geant_ip.py new file mode 100644 index 00000000..56f63954 --- /dev/null +++ b/test/workflows/geant_ip/test_create_geant_ip.py @@ -0,0 +1,52 @@ +import pytest + +from gso.products import ProductName +from gso.services.subscriptions import get_product_id_by_name +from gso.utils.shared_enums import APType +from test.workflows import assert_complete, run_workflow + + +@pytest.fixture() +def base_bgp_peer_input(faker): + def _base_bgp_peer_input(): + bfd_enabled = faker.boolean() + return { + "bfd_enabled": bfd_enabled, + "bfd_interval": faker.pyint() if bfd_enabled else None, + "bfd_multiplier": faker.pyint() if bfd_enabled else None, + "has_custom_policies": faker.boolean(), + "authentication_key": faker.password(), + "multipath_enabled": faker.boolean(), + "send_default_route": faker.boolean(), + "is_passive": faker.boolean(), + } + + return _base_bgp_peer_input + + +@pytest.mark.workflow() +def test_create_geant_ip_success( + responses, faker, partner_factory, edge_port_subscription_factory, base_bgp_peer_input +): + partner = partner_factory(name=faker.company(), email=faker.email()) + product_id = get_product_id_by_name(ProductName.GEANT_IP) + edge_port_a = edge_port_subscription_factory(partner=partner) + + form_input_data = [ + {"product": product_id}, + {"tt_number": faker.tt_number(), "partner": partner["partner_id"]}, + {"edge_ports": [{"edge_port": edge_port_a, "ap_type": APType.PRIMARY}]}, + { + "geant_sid": faker.geant_sid(), + "is_tagged": faker.boolean(), + "vlan_id": faker.vlan_id(), + "ipv4_address": faker.ipv4(), + "ipv6_address": faker.ipv6(), + "custom_firewall_filters": faker.boolean(), + "v4_bgp_peer": base_bgp_peer_input() | {"add_v4_multicast": faker.boolean(), "peer_address": faker.ipv4()}, + "v6_bgp_peer": base_bgp_peer_input() | {"add_v6_multicast": faker.boolean(), "peer_address": faker.ipv6()}, + }, + ] + + result, process_stat, step_log = run_workflow("create_geant_ip", form_input_data) + assert_complete(result) -- GitLab