13
13
from understack_workflows .main .netapp_configure_net import argument_parser
14
14
from understack_workflows .main .netapp_configure_net import construct_device_name
15
15
from understack_workflows .main .netapp_configure_net import execute_graphql_query
16
- from understack_workflows .main .netapp_configure_net import netapp_create_interfaces
16
+ from understack_workflows .main .netapp_configure_net import (
17
+ netapp_create_interfaces_and_routes ,
18
+ )
17
19
from understack_workflows .main .netapp_configure_net import (
18
20
validate_and_transform_response ,
19
21
)
@@ -1355,6 +1357,8 @@ def test_netapp_create_interfaces_with_single_interface(self):
1355
1357
"""Test creating NetApp interfaces with single interface configuration."""
1356
1358
# Mock NetAppManager
1357
1359
mock_netapp_manager = Mock ()
1360
+ # Mock route creation to return empty list
1361
+ mock_netapp_manager .create_routes_for_project .return_value = []
1358
1362
1359
1363
# Create test data
1360
1364
interface = InterfaceInfo (name = "N1-lif-A" , address = "100.127.0.21/29" , vlan = 2002 )
@@ -1370,7 +1374,9 @@ def test_netapp_create_interfaces_with_single_interface(self):
1370
1374
mock_config_class .from_nautobot_response .return_value = [mock_config ]
1371
1375
1372
1376
# Call the function
1373
- netapp_create_interfaces (mock_netapp_manager , vm_network_info , project_id )
1377
+ netapp_create_interfaces_and_routes (
1378
+ mock_netapp_manager , vm_network_info , project_id
1379
+ )
1374
1380
1375
1381
# Verify NetappIPInterfaceConfig.from_nautobot_response was called
1376
1382
mock_config_class .from_nautobot_response .assert_called_once_with (
@@ -1382,10 +1388,16 @@ def test_netapp_create_interfaces_with_single_interface(self):
1382
1388
project_id , mock_config
1383
1389
)
1384
1390
1391
+ # Verify create_routes_for_project was called with correct parameters
1392
+ mock_netapp_manager .create_routes_for_project .assert_called_once_with (
1393
+ project_id , [mock_config ]
1394
+ )
1395
+
1385
1396
def test_netapp_create_interfaces_with_multiple_interfaces (self ):
1386
1397
"""Test creating NetApp interfaces with multiple interface configurations."""
1387
1398
# Mock NetAppManager
1388
1399
mock_netapp_manager = Mock ()
1400
+ mock_netapp_manager .create_routes_for_project .return_value = []
1389
1401
1390
1402
# Create test data with multiple interfaces
1391
1403
interfaces = [
@@ -1410,7 +1422,9 @@ def test_netapp_create_interfaces_with_multiple_interfaces(self):
1410
1422
mock_config_class .from_nautobot_response .return_value = mock_configs
1411
1423
1412
1424
# Call the function
1413
- netapp_create_interfaces (mock_netapp_manager , vm_network_info , project_id )
1425
+ netapp_create_interfaces_and_routes (
1426
+ mock_netapp_manager , vm_network_info , project_id
1427
+ )
1414
1428
1415
1429
# Verify NetappIPInterfaceConfig.from_nautobot_response was called
1416
1430
mock_config_class .from_nautobot_response .assert_called_once_with (
@@ -1425,10 +1439,16 @@ def test_netapp_create_interfaces_with_multiple_interfaces(self):
1425
1439
assert call .args [0 ] == project_id
1426
1440
assert call .args [1 ] == mock_configs [i ]
1427
1441
1442
+ # Verify create_routes_for_project was called with correct parameters
1443
+ mock_netapp_manager .create_routes_for_project .assert_called_once_with (
1444
+ project_id , mock_configs
1445
+ )
1446
+
1428
1447
def test_netapp_create_interfaces_with_empty_interfaces (self ):
1429
1448
"""Test creating NetApp interfaces with empty interface list."""
1430
1449
# Mock NetAppManager
1431
1450
mock_netapp_manager = Mock ()
1451
+ mock_netapp_manager .create_routes_for_project .return_value = []
1432
1452
1433
1453
# Create test data with no interfaces
1434
1454
vm_network_info = VirtualMachineNetworkInfo (interfaces = [])
@@ -1441,7 +1461,9 @@ def test_netapp_create_interfaces_with_empty_interfaces(self):
1441
1461
mock_config_class .from_nautobot_response .return_value = []
1442
1462
1443
1463
# Call the function
1444
- netapp_create_interfaces (mock_netapp_manager , vm_network_info , project_id )
1464
+ netapp_create_interfaces_and_routes (
1465
+ mock_netapp_manager , vm_network_info , project_id
1466
+ )
1445
1467
1446
1468
# Verify NetappIPInterfaceConfig.from_nautobot_response was called
1447
1469
mock_config_class .from_nautobot_response .assert_called_once_with (
@@ -1451,11 +1473,17 @@ def test_netapp_create_interfaces_with_empty_interfaces(self):
1451
1473
# Verify create_lif was not called
1452
1474
mock_netapp_manager .create_lif .assert_not_called ()
1453
1475
1476
+ # Verify create_routes_for_project was called with empty list
1477
+ mock_netapp_manager .create_routes_for_project .assert_called_once_with (
1478
+ project_id , []
1479
+ )
1480
+
1454
1481
def test_netapp_create_interfaces_propagates_netapp_manager_exceptions (self ):
1455
1482
"""Test that NetAppManager exceptions are propagated correctly."""
1456
1483
# Mock NetAppManager that raises exception
1457
1484
mock_netapp_manager = Mock ()
1458
1485
mock_netapp_manager .create_lif .side_effect = Exception ("SVM Not Found" )
1486
+ mock_netapp_manager .create_routes_for_project .return_value = []
1459
1487
1460
1488
# Create test data
1461
1489
interface = InterfaceInfo (name = "N1-lif-A" , address = "100.127.0.21/29" , vlan = 2002 )
@@ -1472,7 +1500,7 @@ def test_netapp_create_interfaces_propagates_netapp_manager_exceptions(self):
1472
1500
1473
1501
# Call the function and expect exception to be propagated
1474
1502
with pytest .raises (Exception , match = "SVM Not Found" ):
1475
- netapp_create_interfaces (
1503
+ netapp_create_interfaces_and_routes (
1476
1504
mock_netapp_manager , vm_network_info , project_id
1477
1505
)
1478
1506
@@ -1485,6 +1513,7 @@ def test_netapp_create_interfaces_logs_interface_creation(self):
1485
1513
"""Test that interface creation is properly logged."""
1486
1514
# Mock NetAppManager
1487
1515
mock_netapp_manager = Mock ()
1516
+ mock_netapp_manager .create_routes_for_project .return_value = []
1488
1517
1489
1518
# Create test data
1490
1519
interface = InterfaceInfo (
@@ -1506,19 +1535,28 @@ def test_netapp_create_interfaces_logs_interface_creation(self):
1506
1535
"understack_workflows.main.netapp_configure_net.logger"
1507
1536
) as mock_logger :
1508
1537
# Call the function
1509
- netapp_create_interfaces (
1538
+ netapp_create_interfaces_and_routes (
1510
1539
mock_netapp_manager , vm_network_info , project_id
1511
1540
)
1512
1541
1513
- # Verify logging was called with correct message
1514
- mock_logger .info .assert_called_once_with (
1515
- "Creating LIF %s for project %s" , "test-interface" , project_id
1542
+ # Verify logging was called with correct messages
1543
+ expected_calls = [
1544
+ (("Creating LIF %s for project %s" , "test-interface" , project_id ),),
1545
+ (("Creating routes for project %s" , project_id ),),
1546
+ (("Successfully created %d routes for project %s" , 0 , project_id ),),
1547
+ ]
1548
+ mock_logger .info .assert_has_calls (expected_calls , any_order = False )
1549
+
1550
+ # Verify create_routes_for_project was called
1551
+ mock_netapp_manager .create_routes_for_project .assert_called_once_with (
1552
+ project_id , [mock_config ]
1516
1553
)
1517
1554
1518
1555
def test_netapp_create_interfaces_with_realistic_data (self ):
1519
1556
"""Test creating NetApp interfaces with realistic interface data."""
1520
1557
# Mock NetAppManager
1521
1558
mock_netapp_manager = Mock ()
1559
+ mock_netapp_manager .create_routes_for_project .return_value = []
1522
1560
1523
1561
# Load realistic test data from JSON sample
1524
1562
sample_data = load_json_sample ("nautobot_graphql_vm_response_complex.json" )
@@ -1541,7 +1579,9 @@ def test_netapp_create_interfaces_with_realistic_data(self):
1541
1579
mock_config_class .from_nautobot_response .return_value = mock_configs
1542
1580
1543
1581
# Call the function
1544
- netapp_create_interfaces (mock_netapp_manager , vm_network_info , project_id )
1582
+ netapp_create_interfaces_and_routes (
1583
+ mock_netapp_manager , vm_network_info , project_id
1584
+ )
1545
1585
1546
1586
# Verify NetappIPInterfaceConfig.from_nautobot_response was called
1547
1587
mock_config_class .from_nautobot_response .assert_called_once_with (
@@ -1557,10 +1597,16 @@ def test_netapp_create_interfaces_with_realistic_data(self):
1557
1597
assert call_args .args [0 ] == project_id
1558
1598
assert call_args .args [1 ] == mock_configs [i ]
1559
1599
1600
+ # Verify create_routes_for_project was called with correct parameters
1601
+ mock_netapp_manager .create_routes_for_project .assert_called_once_with (
1602
+ project_id , mock_configs
1603
+ )
1604
+
1560
1605
def test_netapp_create_interfaces_return_value (self ):
1561
1606
"""Test that netapp_create_interfaces returns None."""
1562
1607
# Mock NetAppManager
1563
1608
mock_netapp_manager = Mock ()
1609
+ mock_netapp_manager .create_routes_for_project .return_value = []
1564
1610
1565
1611
# Create test data
1566
1612
interface = InterfaceInfo (name = "N1-lif-A" , address = "100.127.0.21/29" , vlan = 2002 )
@@ -1576,11 +1622,16 @@ def test_netapp_create_interfaces_return_value(self):
1576
1622
mock_config_class .from_nautobot_response .return_value = [mock_config ]
1577
1623
1578
1624
# Call the function and verify return value
1579
- result = netapp_create_interfaces (
1625
+ result = netapp_create_interfaces_and_routes (
1580
1626
mock_netapp_manager , vm_network_info , project_id
1581
1627
)
1582
1628
assert result is None
1583
1629
1630
+ # Verify create_routes_for_project was called
1631
+ mock_netapp_manager .create_routes_for_project .assert_called_once_with (
1632
+ project_id , [mock_config ]
1633
+ )
1634
+
1584
1635
1585
1636
class TestArgumentParserNetappConfigPath :
1586
1637
"""Test cases for the --netapp-config-path argument."""
@@ -1683,6 +1734,7 @@ def test_main_function_initializes_netapp_manager_with_default_path(
1683
1734
1684
1735
# Mock NetAppManager
1685
1736
mock_netapp_manager_instance = Mock ()
1737
+ mock_netapp_manager_instance .create_routes_for_project .return_value = []
1686
1738
mock_netapp_manager_class .return_value = mock_netapp_manager_instance
1687
1739
1688
1740
# Mock sys.argv with default netapp config path
@@ -1739,6 +1791,7 @@ def test_main_function_initializes_netapp_manager_with_custom_path(
1739
1791
1740
1792
# Mock NetAppManager
1741
1793
mock_netapp_manager_instance = Mock ()
1794
+ mock_netapp_manager_instance .create_routes_for_project .return_value = []
1742
1795
mock_netapp_manager_class .return_value = mock_netapp_manager_instance
1743
1796
1744
1797
# Mock sys.argv with custom netapp config path
@@ -1811,18 +1864,20 @@ def test_main_function_handles_netapp_manager_initialization_error(
1811
1864
"/etc/netapp/netapp_nvme.conf"
1812
1865
)
1813
1866
1814
- @patch ("understack_workflows.main.netapp_configure_net.netapp_create_interfaces" )
1867
+ @patch (
1868
+ "understack_workflows.main.netapp_configure_net.netapp_create_interfaces_and_routes"
1869
+ )
1815
1870
@patch ("understack_workflows.main.netapp_configure_net.NetAppManager" )
1816
1871
@patch ("understack_workflows.main.netapp_configure_net.Nautobot" )
1817
1872
@patch ("understack_workflows.main.netapp_configure_net.credential" )
1818
1873
@patch ("understack_workflows.main.netapp_configure_net.setup_logger" )
1819
- def test_main_function_calls_netapp_create_interfaces (
1874
+ def test_main_function_calls_netapp_create_interfaces_and_routes (
1820
1875
self ,
1821
1876
mock_setup_logger ,
1822
1877
mock_credential ,
1823
1878
mock_nautobot_class ,
1824
1879
mock_netapp_manager_class ,
1825
- mock_netapp_create_interfaces ,
1880
+ mock_netapp_create_interfaces_and_routes ,
1826
1881
):
1827
1882
"""Test that main function calls netapp_create_interfaces through do_action."""
1828
1883
from understack_workflows .main .netapp_configure_net import main
@@ -1847,6 +1902,7 @@ def test_main_function_calls_netapp_create_interfaces(
1847
1902
1848
1903
# Mock NetAppManager
1849
1904
mock_netapp_manager_instance = Mock ()
1905
+ mock_netapp_manager_instance .create_routes_for_project .return_value = []
1850
1906
mock_netapp_manager_class .return_value = mock_netapp_manager_instance
1851
1907
1852
1908
# Mock sys.argv
@@ -1865,11 +1921,11 @@ def test_main_function_calls_netapp_create_interfaces(
1865
1921
# Verify successful execution
1866
1922
assert result == 0
1867
1923
1868
- # Verify netapp_create_interfaces was called
1869
- mock_netapp_create_interfaces .assert_called_once ()
1870
- call_args = mock_netapp_create_interfaces .call_args
1924
+ # Verify netapp_create_interfaces_and_routes was called
1925
+ mock_netapp_create_interfaces_and_routes .assert_called_once ()
1926
+ call_args = mock_netapp_create_interfaces_and_routes .call_args
1871
1927
1872
- # Verify the arguments passed to netapp_create_interfaces
1928
+ # Verify the arguments passed to netapp_create_interfaces_and_routes
1873
1929
assert (
1874
1930
call_args .args [0 ] == mock_netapp_manager_instance
1875
1931
) # NetAppManager instance
0 commit comments