1+
2+ import mock
3+ import netifaces
4+
5+ from netbox_agent .config import config
6+ from netbox_agent .config import netbox_instance as nb
17from netbox_agent .dmidecode import parse
28from netbox_agent .server import ServerBase
9+ from netbox_agent .vendors .hp import HPHost
310from tests .conftest import parametrize_with_fixtures
11+ from tests .constants import DEFAULT_DATACENTER
12+ from tests .utils import setup_netbox
413
514
615@parametrize_with_fixtures ('dmidecode/' )
7- def test_init (fixture ):
8- dmi = parse (fixture )
16+ def test_init (dmi_fixture ):
17+ dmi = parse (dmi_fixture )
918 server = ServerBase (dmi )
1019 assert server
1120
@@ -17,8 +26,8 @@ def test_init(fixture):
1726 'HP_DL380p_Gen8' ,
1827 'HP_SL4540_Gen8'
1928 ])
20- def test_hp_service_tag (fixture ):
21- dmi = parse (fixture )
29+ def test_hp_service_tag (dmi_fixture ):
30+ dmi = parse (dmi_fixture )
2231 server = ServerBase (dmi )
2332 assert server .get_service_tag () == '4242'
2433
@@ -27,8 +36,8 @@ def test_hp_service_tag(fixture):
2736 'dmidecode/' , only_filenames = [
2837 'unknown.txt'
2938 ])
30- def test_generic_host_service_tag (fixture ):
31- dmi = parse (fixture )
39+ def test_generic_host_service_tag (dmi_fixture ):
40+ dmi = parse (dmi_fixture )
3241 server = ServerBase (dmi )
3342 assert server .get_service_tag () == '42'
3443
@@ -37,7 +46,56 @@ def test_generic_host_service_tag(fixture):
3746 'dmidecode/' , only_filenames = [
3847 'unknown.txt'
3948 ])
40- def test_generic_host_product_name (fixture ):
41- dmi = parse (fixture )
49+ def test_generic_host_product_name (dmi_fixture ):
50+ dmi = parse (dmi_fixture )
4251 server = ServerBase (dmi )
4352 assert server .get_product_name () == 'SR'
53+
54+
55+ @mock .patch ('netifaces.ifaddresses' )
56+ @mock .patch ('netifaces.interfaces' )
57+ @parametrize_with_fixtures (
58+ 'dmidecode/' , only_filenames = [
59+ 'HP_SL4540_Gen8' ,
60+ ], argname = 'dmi_fixture' )
61+ def test_create_server (
62+ mock_interfaces ,
63+ mock_ifaddresses ,
64+ fs ,
65+ dmi_fixture ,
66+ ):
67+ fake_addresses = {}
68+ fake_addresses [netifaces .AF_INET ] = [{'addr' : '42.42.42.42' , 'netmask' : '255.255.255.0' }]
69+ fake_addresses [netifaces .AF_LINK ] = [{'addr' : 'a8:1e:84:f2:9e:69' }]
70+
71+ mock_interfaces .return_value = ['enp1s0f0' ]
72+ mock_ifaddresses .return_value = fake_addresses
73+
74+ dmi = parse (dmi_fixture )
75+ server = HPHost (dmi )
76+
77+ setup_netbox (
78+ DEFAULT_DATACENTER ,
79+ 'Server' ,
80+ 'HP' ,
81+ server .get_product_name (),
82+ )
83+
84+ # Create fake /sys/class/net directory with fake interface and MAC addr
85+ fs .create_file ('/tmp/enp1s0f0/address' , contents = 'a8:1e:84:f2:9e:69' )
86+ fs .create_symlink ('/sys/class/net/enp1s0f0' , '/tmp/enp1s0f0' )
87+
88+ server .netbox_create (config )
89+
90+ # Check serial tag is correct
91+ assert server .get_service_tag () == '4242'
92+ network_card = server .network .get_netbox_network_card ({'name' : 'enp1s0f0' , 'mac' : None })
93+
94+ # Check network card is correct
95+ assert network_card .name == 'enp1s0f0'
96+
97+ # Check IP on network card
98+ ips = nb .ipam .ip_addresses .filter (
99+ interface_id = network_card .id
100+ )
101+ assert ips [0 ].address == '42.42.42.42/24'
0 commit comments