116 lines
2.8 KiB
Python
116 lines
2.8 KiB
Python
#!/usr/bin/env python
|
|
|
|
from charmhelpers.contrib.mellanox import infiniband
|
|
|
|
from mock import patch, call
|
|
import unittest
|
|
|
|
TO_PATCH = [
|
|
"log",
|
|
"INFO",
|
|
"apt_install",
|
|
"apt_update",
|
|
"modprobe",
|
|
"network_interfaces"
|
|
]
|
|
|
|
NETWORK_INTERFACES = [
|
|
'lo',
|
|
'eth0',
|
|
'eth1',
|
|
'eth2',
|
|
'eth3',
|
|
'eth4',
|
|
'juju-br0',
|
|
'ib0',
|
|
'virbr0',
|
|
'ovs-system',
|
|
'br-int',
|
|
'br-ex',
|
|
'br-data',
|
|
'phy-br-data',
|
|
'int-br-data',
|
|
'br-tun'
|
|
]
|
|
|
|
|
|
IBSTAT_OUTPUT = """
|
|
CA 'mlx4_0'
|
|
CA type: MT4103
|
|
Number of ports: 2
|
|
Firmware version: 2.33.5000
|
|
Hardware version: 0
|
|
Node GUID: 0xe41d2d03000a1120
|
|
System image GUID: 0xe41d2d03000a1123
|
|
"""
|
|
|
|
|
|
class InfinibandTest(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
for m in TO_PATCH:
|
|
setattr(self, m, self._patch(m))
|
|
|
|
def _patch(self, method):
|
|
_m = patch('charmhelpers.contrib.mellanox.infiniband.' + method)
|
|
mock = _m.start()
|
|
self.addCleanup(_m.stop)
|
|
return mock
|
|
|
|
def test_load_modules(self):
|
|
infiniband.load_modules()
|
|
|
|
self.modprobe.assert_has_calls(map(lambda x: call(x, persist=True),
|
|
infiniband.REQUIRED_MODULES))
|
|
|
|
def test_install_packages(self):
|
|
infiniband.install_packages()
|
|
|
|
self.apt_update.assert_is_called_once()
|
|
self.apt_install.assert_is_called_once()
|
|
|
|
@patch("os.path.exists")
|
|
def test_is_enabled(self, exists):
|
|
exists.return_value = True
|
|
self.assertTrue(infiniband.is_enabled())
|
|
|
|
@patch("subprocess.check_output")
|
|
def test_stat(self, check_output):
|
|
infiniband.stat()
|
|
|
|
check_output.assert_called_with(["ibstat"])
|
|
|
|
@patch("subprocess.check_output")
|
|
def test_devices(self, check_output):
|
|
infiniband.devices()
|
|
|
|
check_output.assert_called_with(["ibstat", "-l"])
|
|
|
|
@patch("subprocess.check_output")
|
|
def test_device_info(self, check_output):
|
|
check_output.return_value = IBSTAT_OUTPUT
|
|
|
|
info = infiniband.device_info("mlx4_0")
|
|
|
|
self.assertEquals(info.num_ports, "2")
|
|
self.assertEquals(info.device_type, "MT4103")
|
|
self.assertEquals(info.fw_ver, "2.33.5000")
|
|
self.assertEquals(info.hw_ver, "0")
|
|
self.assertEquals(info.node_guid, "0xe41d2d03000a1120")
|
|
self.assertEquals(info.sys_guid, "0xe41d2d03000a1123")
|
|
|
|
@patch("subprocess.check_output")
|
|
def test_ipoib_interfaces(self, check_output):
|
|
self.network_interfaces.return_value = NETWORK_INTERFACES
|
|
|
|
ipoib_nic = "ib0"
|
|
|
|
def c(*args, **kwargs):
|
|
if ipoib_nic in args[0]:
|
|
return "driver: ib_ipoib"
|
|
else:
|
|
return "driver: mock"
|
|
|
|
check_output.side_effect = c
|
|
self.assertEquals(infiniband.ipoib_interfaces(), [ipoib_nic])
|