diff --git a/test/fixtures.py b/test/fixtures.py index 1dcd2d790918be9bfed466ebc8edd17c19c4e692..3dfd2c11be754315c40f3c70fb4a8e79eca96dc1 100644 --- a/test/fixtures.py +++ b/test/fixtures.py @@ -86,7 +86,7 @@ def router_subscription_factory(site_subscription_factory, faker): router_is_ias_connected=True, ) -> UUIDstr: description = description or faker.text(max_nb_chars=30) - router_fqdn = router_fqdn or faker.domain_name() + 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()) diff --git a/test/workflows/iptrunk/test_create_iptrunk.py b/test/workflows/iptrunk/test_create_iptrunk.py index dfded4f7f70b70d7098e41a867c87f351b0dcab9..b9a1930e31b823da7c4baec0b85027256e028175 100644 --- a/test/workflows/iptrunk/test_create_iptrunk.py +++ b/test/workflows/iptrunk/test_create_iptrunk.py @@ -15,7 +15,7 @@ from test.workflows import ( extract_state, resume_workflow, run_workflow, - user_accept_and_assert_suspended + user_accept_and_assert_suspended, ) diff --git a/test/workflows/router/test_create_router.py b/test/workflows/router/test_create_router.py index 2c7a8a477ee8ac2bf12ee20f111af6475b15ed7f..7a8f65c56cdd49076e0fbd799dc74935386eb77e 100644 --- a/test/workflows/router/test_create_router.py +++ b/test/workflows/router/test_create_router.py @@ -15,7 +15,7 @@ from test.workflows import ( extract_state, resume_workflow, run_workflow, - user_accept_and_assert_suspended + user_accept_and_assert_suspended, ) @@ -70,10 +70,18 @@ def test_create_router_success( mock_allocate_host.return_value = str(mock_v4), str(mock_v6) mock_allocate_v4_network.return_value = mock_v4_net mock_allocate_v6_network.return_value = faker.ipv6_network() + + # Run workflow + initial_router_data = [{"product": product_id}, router_creation_input_form_data] + result, process_stat, step_log = run_workflow("create_router", initial_router_data) + assert_suspended(result) + + state = extract_state(result) + subscription_id = state["subscription_id"] mock_find_host_by_fqdn.return_value = objects.HostRecord( connector=None, aliases=[mock_fqdn], - comment=product_id, + comment=subscription_id, ipv4addrs=[ objects.IPv4( ipv4addr=str(mock_v4), @@ -87,17 +95,12 @@ def test_create_router_success( ) mock_find_network_by_cidr.return_value = objects.NetworkV4( connector=None, - comment=faker.sentence(), + comment=subscription_id, network=str(mock_v4_net), network_view="default", cidr=str(mock_v4_net), ) - # Run workflow - initial_router_data = [{"product": product_id}, router_creation_input_form_data] - result, process_stat, step_log = run_workflow("create_router", initial_router_data) - assert_suspended(result) - lso_return = { "pp_run_results": { "status": "ok", @@ -116,7 +119,6 @@ def test_create_router_success( assert_complete(result) state = extract_state(result) - subscription_id = state["subscription_id"] subscription = Router.from_subscription(subscription_id) assert "active" == subscription.status @@ -126,6 +128,8 @@ def test_create_router_success( assert mock_netbox_create_device.call_count == 1 assert mock_find_host_by_fqdn.call_count == 1 assert mock_find_network_by_cidr.call_count == 3 + for error in ["ipam_warning", "ipam_si_warning", "ipam_ias_lt_ipv4_warning", "ipam_ias_lt_ipv6_warning"]: + assert error not in state @pytest.mark.workflow @@ -146,7 +150,7 @@ def test_create_router_lso_failure( mock_hostname_available, mock_netbox_create_device, mock_provision_router, - router_creation_input_form_data, + router_creation_input_form_data, faker, ): # Set up mock return values @@ -222,5 +226,3 @@ def test_create_router_lso_failure( assert mock_netbox_create_device.call_count == 0 assert mock_find_host_by_fqdn.call_count == 0 assert mock_find_network_by_cidr.call_count == 0 - for error in ["ipam_warning", "ipam_si_warning", "ipam_ias_lt_ipv4_warning", "ipam_ias_lt_ipv6_warning"]: - assert error not in state diff --git a/test/workflows/router/test_terminate_router.py b/test/workflows/router/test_terminate_router.py new file mode 100644 index 0000000000000000000000000000000000000000..f5e88ca7d89ff0b10b3414286ac0be302d370df6 --- /dev/null +++ b/test/workflows/router/test_terminate_router.py @@ -0,0 +1,41 @@ +from unittest.mock import patch + +import pytest + +from gso.products import Router +from test.workflows import assert_complete, extract_state, run_workflow + + +@pytest.fixture +def router_termination_input_form_data(site_subscription_factory, faker): + return {"tt_number": faker.tt_number(), "remove_configuration": True, "clean_up_ipam": True} + + +@pytest.mark.workflow +@patch("gso.workflows.router.terminate_router.NetBoxClient.delete_device") +@patch("gso.workflows.router.terminate_router.infoblox.delete_host_by_ip") +@patch("gso.workflows.router.terminate_router.infoblox.delete_network") +def test_terminate_router_success( + mock_delete_network, + mock_delete_host_by_ip, + mock_delete_device, + router_termination_input_form_data, + router_subscription_factory, + faker, +): + # Set up active subscription in database + product_id = router_subscription_factory() + + # Run workflow + initial_router_data = [{"subscription_id": product_id}, router_termination_input_form_data] + result, process_stat, step_log = run_workflow("terminate_router", initial_router_data) + assert_complete(result) + + state = extract_state(result) + subscription_id = state["subscription_id"] + subscription = Router.from_subscription(subscription_id) + + assert "terminated" == subscription.status + assert mock_delete_network.call_count == 3 + assert mock_delete_device.call_count == 1 + assert mock_delete_host_by_ip.call_count == 1