@@ -1318,6 +1318,186 @@ def test_list_network_interfaces_with_vendor_info(self,
13181318 self .assertEqual ('0x1014' , interfaces [0 ].product )
13191319 self .assertEqual ('em0' , interfaces [0 ].biosdevname )
13201320
1321+ @mock .patch ('ironic_python_agent.hardware.get_managers' , autospec = True )
1322+ @mock .patch ('netifaces.ifaddresses' , autospec = True )
1323+ @mock .patch ('os.listdir' , autospec = True )
1324+ @mock .patch ('os.path.exists' , autospec = True )
1325+ @mock .patch ('builtins.open' , autospec = True )
1326+ @mock .patch .object (utils , 'execute' , autospec = True )
1327+ @mock .patch .object (netutils , 'get_mac_addr' , autospec = True )
1328+ @mock .patch .object (netutils , 'interface_has_carrier' , autospec = True )
1329+ def test_list_network_vlan_interfaces (self ,
1330+ mock_has_carrier ,
1331+ mock_get_mac ,
1332+ mocked_execute ,
1333+ mocked_open ,
1334+ mocked_exists ,
1335+ mocked_listdir ,
1336+ mocked_ifaddresses ,
1337+ mockedget_managers ):
1338+ mockedget_managers .return_value = [hardware .GenericHardwareManager ()]
1339+ CONF .set_override ('enable_vlan_interfaces' , 'eth0.100' )
1340+ mocked_listdir .return_value = ['lo' , 'eth0' ]
1341+ mocked_exists .side_effect = [False , True , False ]
1342+ mocked_open .return_value .__enter__ = lambda s : s
1343+ mocked_open .return_value .__exit__ = mock .Mock ()
1344+ read_mock = mocked_open .return_value .read
1345+ read_mock .side_effect = ['1' ]
1346+ mocked_ifaddresses .return_value = {
1347+ netifaces .AF_INET : [{'addr' : '192.168.1.2' }],
1348+ netifaces .AF_INET6 : [{'addr' : 'fd00::101' }]
1349+ }
1350+ mocked_execute .return_value = ('em0\n ' , '' )
1351+ mock_get_mac .mock_has_carrier = True
1352+ mock_get_mac .return_value = '00:0c:29:8c:11:b1'
1353+ interfaces = self .hardware .list_network_interfaces ()
1354+ self .assertEqual (2 , len (interfaces ))
1355+ self .assertEqual ('eth0' , interfaces [0 ].name )
1356+ self .assertEqual ('00:0c:29:8c:11:b1' , interfaces [0 ].mac_address )
1357+ self .assertEqual ('192.168.1.2' , interfaces [0 ].ipv4_address )
1358+ self .assertEqual ('fd00::101' , interfaces [0 ].ipv6_address )
1359+ self .assertIsNone (interfaces [0 ].lldp )
1360+ self .assertEqual ('eth0.100' , interfaces [1 ].name )
1361+ self .assertEqual ('00:0c:29:8c:11:b1' , interfaces [1 ].mac_address )
1362+ self .assertIsNone (interfaces [1 ].lldp )
1363+
1364+ @mock .patch ('ironic_python_agent.hardware.get_managers' , autospec = True )
1365+ @mock .patch ('ironic_python_agent.netutils.get_lldp_info' , autospec = True )
1366+ @mock .patch ('netifaces.ifaddresses' , autospec = True )
1367+ @mock .patch ('os.listdir' , autospec = True )
1368+ @mock .patch ('os.path.exists' , autospec = True )
1369+ @mock .patch ('builtins.open' , autospec = True )
1370+ @mock .patch .object (utils , 'execute' , autospec = True )
1371+ @mock .patch .object (netutils , 'get_mac_addr' , autospec = True )
1372+ @mock .patch .object (netutils , 'interface_has_carrier' , autospec = True )
1373+ def test_list_network_vlan_interfaces_using_lldp (self ,
1374+ mock_has_carrier ,
1375+ mock_get_mac ,
1376+ mocked_execute ,
1377+ mocked_open ,
1378+ mocked_exists ,
1379+ mocked_listdir ,
1380+ mocked_ifaddresses ,
1381+ mocked_lldp_info ,
1382+ mockedget_managers ):
1383+ mockedget_managers .return_value = [hardware .GenericHardwareManager ()]
1384+ CONF .set_override ('collect_lldp' , True )
1385+ CONF .set_override ('enable_vlan_interfaces' , 'eth0' )
1386+ mocked_listdir .return_value = ['lo' , 'eth0' ]
1387+ mocked_execute .return_value = ('em0\n ' , '' )
1388+ mocked_exists .side_effect = [False , True , False ]
1389+ mocked_open .return_value .__enter__ = lambda s : s
1390+ mocked_open .return_value .__exit__ = mock .Mock ()
1391+ read_mock = mocked_open .return_value .read
1392+ read_mock .side_effect = ['1' ]
1393+ mocked_lldp_info .return_value = {'eth0' : [
1394+ (0 , b'' ),
1395+ (127 , b'\x00 \x80 \xc2 \x03 \x00 d\x08 vlan-100' ),
1396+ (127 , b'\x00 \x80 \xc2 \x03 \x00 e\x08 vlan-101' )]
1397+ }
1398+ mock_has_carrier .return_value = True
1399+ mock_get_mac .return_value = '00:0c:29:8c:11:b1'
1400+ interfaces = self .hardware .list_network_interfaces ()
1401+ self .assertEqual (3 , len (interfaces ))
1402+ self .assertEqual ('eth0' , interfaces [0 ].name )
1403+ self .assertEqual ('00:0c:29:8c:11:b1' , interfaces [0 ].mac_address )
1404+ expected_lldp_info = [
1405+ (0 , '' ),
1406+ (127 , "0080c203006408766c616e2d313030" ),
1407+ (127 , "0080c203006508766c616e2d313031" )
1408+ ]
1409+ self .assertEqual (expected_lldp_info , interfaces [0 ].lldp )
1410+ self .assertEqual ('eth0.100' , interfaces [1 ].name )
1411+ self .assertEqual ('00:0c:29:8c:11:b1' , interfaces [1 ].mac_address )
1412+ self .assertIsNone (interfaces [1 ].lldp )
1413+ self .assertEqual ('eth0.101' , interfaces [2 ].name )
1414+ self .assertEqual ('00:0c:29:8c:11:b1' , interfaces [2 ].mac_address )
1415+ self .assertIsNone (interfaces [2 ].lldp )
1416+
1417+ @mock .patch .object (netutils , 'LOG' , autospec = True )
1418+ @mock .patch ('ironic_python_agent.hardware.get_managers' , autospec = True )
1419+ @mock .patch ('netifaces.ifaddresses' , autospec = True )
1420+ @mock .patch ('os.listdir' , autospec = True )
1421+ @mock .patch ('os.path.exists' , autospec = True )
1422+ @mock .patch ('builtins.open' , autospec = True )
1423+ @mock .patch .object (utils , 'execute' , autospec = True )
1424+ @mock .patch .object (netutils , 'get_mac_addr' , autospec = True )
1425+ @mock .patch .object (netutils , 'interface_has_carrier' , autospec = True )
1426+ def test_list_network_vlan_invalid_int (self ,
1427+ mock_has_carrier ,
1428+ mock_get_mac ,
1429+ mocked_execute ,
1430+ mocked_open ,
1431+ mocked_exists ,
1432+ mocked_listdir ,
1433+ mocked_ifaddresses ,
1434+ mockedget_managers ,
1435+ mocked_log ):
1436+ mockedget_managers .return_value = [hardware .GenericHardwareManager ()]
1437+ CONF .set_override ('collect_lldp' , True )
1438+ CONF .set_override ('enable_vlan_interfaces' , 'enp0s1' )
1439+ mocked_listdir .return_value = ['lo' , 'eth0' ]
1440+ mocked_exists .side_effect = [False , True , False ]
1441+ mocked_open .return_value .__enter__ = lambda s : s
1442+ mocked_open .return_value .__exit__ = mock .Mock ()
1443+ read_mock = mocked_open .return_value .read
1444+ read_mock .side_effect = ['1' ]
1445+ mocked_ifaddresses .return_value = {
1446+ netifaces .AF_INET : [{'addr' : '192.168.1.2' }],
1447+ netifaces .AF_INET6 : [{'addr' : 'fd00::101' }]
1448+ }
1449+ mocked_execute .return_value = ('em0\n ' , '' )
1450+ mock_get_mac .mock_has_carrier = True
1451+ mock_get_mac .return_value = '00:0c:29:8c:11:b1'
1452+
1453+ self .hardware .list_network_interfaces ()
1454+ mocked_log .warning .assert_called_once_with (
1455+ 'Provided interface name %s was not found' , 'enp0s1' )
1456+
1457+ @mock .patch ('ironic_python_agent.hardware.get_managers' , autospec = True )
1458+ @mock .patch ('ironic_python_agent.netutils.get_lldp_info' , autospec = True )
1459+ @mock .patch ('os.listdir' , autospec = True )
1460+ @mock .patch ('os.path.exists' , autospec = True )
1461+ @mock .patch ('builtins.open' , autospec = True )
1462+ @mock .patch .object (utils , 'execute' , autospec = True )
1463+ @mock .patch .object (netutils , 'get_mac_addr' , autospec = True )
1464+ def test_list_network_vlan_interfaces_using_lldp_all (self ,
1465+ mock_get_mac ,
1466+ mocked_execute ,
1467+ mocked_open ,
1468+ mocked_exists ,
1469+ mocked_listdir ,
1470+ mocked_lldp_info ,
1471+ mockedget_managers ):
1472+ mockedget_managers .return_value = [hardware .GenericHardwareManager ()]
1473+ CONF .set_override ('collect_lldp' , True )
1474+ CONF .set_override ('enable_vlan_interfaces' , 'all' )
1475+ mocked_listdir .return_value = ['lo' , 'eth0' , 'eth1' ]
1476+ mocked_execute .return_value = ('em0\n ' , '' )
1477+ mocked_exists .side_effect = [False , True , True ]
1478+ mocked_open .return_value .__enter__ = lambda s : s
1479+ mocked_open .return_value .__exit__ = mock .Mock ()
1480+ read_mock = mocked_open .return_value .read
1481+ read_mock .side_effect = ['1' ]
1482+ mocked_lldp_info .return_value = {'eth0' : [
1483+ (0 , b'' ),
1484+ (127 , b'\x00 \x80 \xc2 \x03 \x00 d\x08 vlan-100' ),
1485+ (127 , b'\x00 \x80 \xc2 \x03 \x00 e\x08 vlan-101' )],
1486+ 'eth1' : [
1487+ (0 , b'' ),
1488+ (127 , b'\x00 \x80 \xc2 \x03 \x00 f\x08 vlan-102' ),
1489+ (127 , b'\x00 \x80 \xc2 \x03 \x00 g\x08 vlan-103' )]
1490+ }
1491+
1492+ interfaces = self .hardware .list_network_interfaces ()
1493+ self .assertEqual (6 , len (interfaces ))
1494+ self .assertEqual ('eth0' , interfaces [0 ].name )
1495+ self .assertEqual ('eth1' , interfaces [1 ].name )
1496+ self .assertEqual ('eth0.100' , interfaces [2 ].name )
1497+ self .assertEqual ('eth0.101' , interfaces [3 ].name )
1498+ self .assertEqual ('eth1.102' , interfaces [4 ].name )
1499+ self .assertEqual ('eth1.103' , interfaces [5 ].name )
1500+
13211501 @mock .patch .object (os , 'readlink' , autospec = True )
13221502 @mock .patch .object (os , 'listdir' , autospec = True )
13231503 @mock .patch .object (hardware , 'get_cached_node' , autospec = True )
0 commit comments