Skip to content
Snippets Groups Projects

Feature/nat 329 interface names should validated 3

Merged Hakan Calim requested to merge feature/NAT-329-interface-names-should-validated-3 into develop
All threads resolved!
1 file
+ 47
37
Compare changes
  • Side-by-side
  • Inline
@@ -4,6 +4,8 @@ import pytest
from gso.products import Iptrunk
from gso.products.product_blocks.iptrunk import IptrunkType, PhyPortCapacity
from gso.products.product_blocks.router import RouterVendor
from test.conftest import UseJuniperSide
from test.workflows import (
assert_complete,
assert_pp_interaction_success,
@@ -13,36 +15,43 @@ from test.workflows import (
from test.workflows.iptrunk.test_create_iptrunk import MockedNetboxClient
@pytest.mark.workflow()
@patch("gso.workflows.iptrunk.modify_trunk_interface.provisioning_proxy.provision_ip_trunk")
@patch("gso.services.netbox_client.NetboxClient.get_available_interfaces")
@patch("gso.services.netbox_client.NetboxClient.attach_interface_to_lag")
@patch("gso.services.netbox_client.NetboxClient.reserve_interface")
@patch("gso.services.netbox_client.NetboxClient.allocate_interface")
@patch("gso.services.netbox_client.NetboxClient.free_interface")
@patch("gso.services.netbox_client.NetboxClient.detach_interfaces_from_lag")
def test_iptrunk_modify_trunk_interface_success(
mocked_detach_interfaces_from_lag,
mocked_free_interface,
mocked_allocate_interface,
mocked_reserve_interface,
mocked_attach_interface_to_lag,
mocked_get_available_interfaces,
mock_provision_ip_trunk,
iptrunk_subscription_factory,
@pytest.fixture()
def input_form_iptrunk_data(
request,
faker,
data_config_filename,
iptrunk_subscription_factory,
juniper_router_subscription_factory,
nokia_router_subscription_factory,
iptrunk_side_subscription_factory,
):
# Set up mock return values
mocked_netbox = MockedNetboxClient()
mocked_get_available_interfaces.return_value = mocked_netbox.get_available_interfaces()
mocked_attach_interface_to_lag.return_value = mocked_netbox.attach_interface_to_lag()
mocked_reserve_interface.return_value = mocked_netbox.reserve_interface()
mocked_allocate_interface.return_value = mocked_netbox.allocate_interface()
mocked_free_interface.return_value = mocked_netbox.free_interface()
mocked_detach_interfaces_from_lag.return_value = mocked_netbox.detach_interfaces_from_lag()
use_juniper = getattr(request, "param", UseJuniperSide.NONE)
if use_juniper == UseJuniperSide.SIDE_A:
side_node = juniper_router_subscription_factory()
side_a_node = iptrunk_side_subscription_factory(iptrunk_side_node=side_node)
side_b_node = iptrunk_side_subscription_factory()
new_side_a_ae_members = faker.generate_juniper_members_list()
new_side_b_ae_members = faker.generate_nokia_members_list()
elif use_juniper == UseJuniperSide.SIDE_B:
side_node = juniper_router_subscription_factory()
side_a_node = iptrunk_side_subscription_factory()
side_b_node = iptrunk_side_subscription_factory(iptrunk_side_node=side_node)
new_side_a_ae_members = faker.generate_nokia_members_list()
new_side_b_ae_members = faker.generate_juniper_members_list()
elif use_juniper == UseJuniperSide.SIDE_BOTH:
side_node_1 = juniper_router_subscription_factory()
side_node_2 = juniper_router_subscription_factory()
side_a_node = iptrunk_side_subscription_factory(iptrunk_side_node=side_node_1)
side_b_node = iptrunk_side_subscription_factory(iptrunk_side_node=side_node_2)
new_side_a_ae_members = faker.generate_juniper_members_list()
new_side_b_ae_members = faker.generate_juniper_members_list()
else:
side_a_node = iptrunk_side_subscription_factory()
side_b_node = iptrunk_side_subscription_factory()
new_side_a_ae_members = faker.generate_nokia_members_list()
new_side_b_ae_members = faker.generate_nokia_members_list()
product_id = iptrunk_subscription_factory(iptrunk_sides=[side_a_node, side_b_node])
product_id = iptrunk_subscription_factory()
new_sid = faker.geant_sid()
new_description = faker.sentence()
new_type = IptrunkType.LEASED
@@ -50,17 +59,10 @@ def test_iptrunk_modify_trunk_interface_success(
new_link_count = 2
new_side_a_sid = faker.geant_sid()
new_side_a_ae_members = [
{"interface_name": f"Interface{i}", "interface_description": faker.sentence()} for i in range(5)
]
new_side_b_sid = faker.geant_sid()
new_side_b_ae_members = [
{"interface_name": f"Interface{i}", "interface_description": faker.sentence()} for i in range(5)
]
# Run workflow
initial_iptrunk_data = [
return [
{"subscription_id": product_id},
{
"tt_number": faker.tt_number(),
@@ -80,7 +82,43 @@ def test_iptrunk_modify_trunk_interface_success(
},
]
result, process_stat, step_log = run_workflow("modify_trunk_interface", initial_iptrunk_data)
@pytest.mark.parametrize(
"input_form_iptrunk_data",
[UseJuniperSide.NONE, UseJuniperSide.SIDE_A, UseJuniperSide.SIDE_B, UseJuniperSide.SIDE_BOTH],
indirect=True,
)
@pytest.mark.workflow()
@patch("gso.workflows.iptrunk.modify_trunk_interface.provisioning_proxy.provision_ip_trunk")
@patch("gso.services.netbox_client.NetboxClient.get_available_interfaces")
@patch("gso.services.netbox_client.NetboxClient.attach_interface_to_lag")
@patch("gso.services.netbox_client.NetboxClient.reserve_interface")
@patch("gso.services.netbox_client.NetboxClient.allocate_interface")
@patch("gso.services.netbox_client.NetboxClient.free_interface")
@patch("gso.services.netbox_client.NetboxClient.detach_interfaces_from_lag")
def test_iptrunk_modify_trunk_interface_success(
mocked_detach_interfaces_from_lag,
mocked_free_interface,
mocked_allocate_interface,
mocked_reserve_interface,
mocked_attach_interface_to_lag,
mocked_get_available_interfaces,
mock_provision_ip_trunk,
input_form_iptrunk_data,
faker,
data_config_filename,
):
# Set up mock return values
mocked_netbox = MockedNetboxClient()
mocked_get_available_interfaces.return_value = mocked_netbox.get_available_interfaces()
mocked_attach_interface_to_lag.return_value = mocked_netbox.attach_interface_to_lag()
mocked_reserve_interface.return_value = mocked_netbox.reserve_interface()
mocked_allocate_interface.return_value = mocked_netbox.allocate_interface()
mocked_free_interface.return_value = mocked_netbox.free_interface()
mocked_detach_interfaces_from_lag.return_value = mocked_netbox.detach_interfaces_from_lag()
# Run workflow
result, process_stat, step_log = run_workflow("modify_trunk_interface", input_form_iptrunk_data)
for _ in range(2):
result, step_log = assert_pp_interaction_success(result, process_stat, step_log)
@@ -94,23 +132,42 @@ def test_iptrunk_modify_trunk_interface_success(
assert subscription.status == "active"
assert mock_provision_ip_trunk.call_count == 2
# Assert all Netbox calls have been made
assert mocked_reserve_interface.call_count == 10 # 5 interfaces per side
assert mocked_attach_interface_to_lag.call_count == 10 # 5 interfaces per side
assert mocked_free_interface.call_count == 4 # 2 interfaces per side(The old ones)
assert mocked_detach_interfaces_from_lag.call_count == 2 # 1 time per side
new_sid = input_form_iptrunk_data[1]["geant_s_sid"]
new_side_a_sid = input_form_iptrunk_data[2]["side_a_ae_geant_a_sid"]
new_side_a_ae_members = input_form_iptrunk_data[2]["side_a_ae_members"]
new_side_b_sid = input_form_iptrunk_data[3]["side_b_ae_geant_a_sid"]
new_side_b_ae_members = input_form_iptrunk_data[3]["side_b_ae_members"]
# Only Nokia interfaces will checked
vendor_side_a = subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.vendor
vendor_side_b = subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node.vendor
num_ifaces = (len(new_side_a_ae_members) if vendor_side_a == RouterVendor.NOKIA else 0) + (
len(new_side_b_ae_members) if vendor_side_b == RouterVendor.NOKIA else 0
)
# Define free interfaces for only nokia sides
num_free_ifaces = 2 * (vendor_side_a == RouterVendor.NOKIA) + 2 * (vendor_side_b == RouterVendor.NOKIA)
# lag interface for nokia sides
num_lag_ifaces = int(vendor_side_a == RouterVendor.NOKIA) + int(vendor_side_b == RouterVendor.NOKIA)
assert mocked_reserve_interface.call_count == num_ifaces # Only nokia interfaces per side num is randomly generated
assert mocked_attach_interface_to_lag.call_count == num_ifaces
assert mocked_free_interface.call_count == num_free_ifaces # 2 interfaces per nokia side(The old ones)
assert mocked_detach_interfaces_from_lag.call_count == num_lag_ifaces # 1 time per nokia side
# Assert all subscription properties have been updated correctly
assert subscription.description == f"IP trunk, geant_s_sid:{new_sid}"
assert subscription.iptrunk.geant_s_sid == new_sid
assert subscription.iptrunk.iptrunk_description == new_description
assert subscription.iptrunk.iptrunk_type == new_type
assert subscription.iptrunk.iptrunk_speed == new_speed
assert subscription.iptrunk.iptrunk_minimum_links == new_link_count
assert subscription.iptrunk.geant_s_sid == input_form_iptrunk_data[1]["geant_s_sid"]
assert subscription.iptrunk.iptrunk_description == input_form_iptrunk_data[1]["iptrunk_description"]
assert subscription.iptrunk.iptrunk_type == input_form_iptrunk_data[1]["iptrunk_type"]
assert subscription.iptrunk.iptrunk_speed == input_form_iptrunk_data[1]["iptrunk_speed"]
assert subscription.iptrunk.iptrunk_minimum_links == input_form_iptrunk_data[1]["iptrunk_minimum_links"]
assert subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_geant_a_sid == new_side_a_sid
def _find_interface_by_name(interfaces: list[dict[str, str]], name: str):
for interface in interfaces:
if interface["interface_name"] == name:
if interface.interface_name == name:
return interface
msg = f"Interface {name} not found!"
raise IndexError(msg)
@@ -118,7 +175,7 @@ def test_iptrunk_modify_trunk_interface_success(
for member in subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_members:
assert (
member.interface_description
== _find_interface_by_name(new_side_a_ae_members, member.interface_name)["interface_description"]
== _find_interface_by_name(new_side_a_ae_members, member.interface_name).interface_description
)
assert subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_geant_a_sid == new_side_b_sid
@@ -126,5 +183,5 @@ def test_iptrunk_modify_trunk_interface_success(
for member in subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_members:
assert (
member.interface_description
== _find_interface_by_name(new_side_b_ae_members, member.interface_name)["interface_description"]
== _find_interface_by_name(new_side_b_ae_members, member.interface_name).interface_description
)
Loading