aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/network_services/helpers/test_dpdkbindnic_helper.py')
-rw-r--r--tests/unit/network_services/helpers/test_dpdkbindnic_helper.py633
1 files changed, 0 insertions, 633 deletions
diff --git a/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py b/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py
deleted file mode 100644
index 367072e84..000000000
--- a/tests/unit/network_services/helpers/test_dpdkbindnic_helper.py
+++ /dev/null
@@ -1,633 +0,0 @@
-# Copyright (c) 2016-2017 Intel Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import mock
-import unittest
-
-import os
-
-from yardstick.error import IncorrectConfig, SSHError
-from yardstick.error import IncorrectNodeSetup
-from yardstick.error import IncorrectSetup
-from yardstick.network_services.helpers.dpdkbindnic_helper import DpdkInterface
-from yardstick.network_services.helpers.dpdkbindnic_helper import DpdkNode
-from yardstick.network_services.helpers.dpdkbindnic_helper import DpdkBindHelper
-from yardstick.network_services.helpers.dpdkbindnic_helper import DpdkBindHelperException
-from yardstick.network_services.helpers.dpdkbindnic_helper import NETWORK_KERNEL
-from yardstick.network_services.helpers.dpdkbindnic_helper import NETWORK_DPDK
-from yardstick.network_services.helpers.dpdkbindnic_helper import CRYPTO_KERNEL
-from yardstick.network_services.helpers.dpdkbindnic_helper import CRYPTO_DPDK
-from yardstick.network_services.helpers.dpdkbindnic_helper import NETWORK_OTHER
-from yardstick.network_services.helpers.dpdkbindnic_helper import CRYPTO_OTHER
-
-
-NAME = "tg_0"
-
-
-class TestDpdkInterface(unittest.TestCase):
-
- SAMPLE_NETDEVS = {
- 'enp11s0': {
- 'address': '0a:de:ad:be:ef:f5',
- 'device': '0x1533',
- 'driver': 'igb',
- 'ifindex': '2',
- 'interface_name': 'enp11s0',
- 'operstate': 'down',
- 'pci_bus_id': '0000:0b:00.0',
- 'subsystem_device': '0x1533',
- 'subsystem_vendor': '0x15d9',
- 'vendor': '0x8086'
- },
- 'lan': {
- 'address': '0a:de:ad:be:ef:f4',
- 'device': '0x153a',
- 'driver': 'e1000e',
- 'ifindex': '3',
- 'interface_name': 'lan',
- 'operstate': 'up',
- 'pci_bus_id': '0000:00:19.0',
- 'subsystem_device': '0x153a',
- 'subsystem_vendor': '0x15d9',
- 'vendor': '0x8086'
- }
- }
-
- SAMPLE_VM_NETDEVS = {
- 'eth1': {
- 'address': 'fa:de:ad:be:ef:5b',
- 'device': '0x0001',
- 'driver': 'virtio_net',
- 'ifindex': '3',
- 'interface_name': 'eth1',
- 'operstate': 'down',
- 'pci_bus_id': '0000:00:04.0',
- 'vendor': '0x1af4'
- }
- }
-
- def test_parse_netdev_info(self):
- output = """\
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/ifindex:2
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/address:0a:de:ad:be:ef:f5
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/operstate:down
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/device/vendor:0x8086
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/device/device:0x1533
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/device/subsystem_vendor:0x15d9
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/device/subsystem_device:0x1533
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/driver:igb
-/sys/devices/pci0000:00/0000:00:1c.3/0000:0b:00.0/net/enp11s0/pci_bus_id:0000:0b:00.0
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/ifindex:3
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/address:0a:de:ad:be:ef:f4
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/operstate:up
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/device/vendor:0x8086
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/device/device:0x153a
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/device/subsystem_vendor:0x15d9
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/device/subsystem_device:0x153a
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/driver:e1000e
-/sys/devices/pci0000:00/0000:00:19.0/net/lan/pci_bus_id:0000:00:19.0
-"""
- res = DpdkBindHelper.parse_netdev_info(output)
- self.assertDictEqual(res, self.SAMPLE_NETDEVS)
-
- def test_parse_netdev_info_virtio(self):
- output = """\
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/ifindex:3
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/address:fa:de:ad:be:ef:5b
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/operstate:down
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/device/vendor:0x1af4
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/device/device:0x0001
-/sys/devices/pci0000:00/0000:00:04.0/virtio1/net/eth1/driver:virtio_net
-"""
- res = DpdkBindHelper.parse_netdev_info(output)
- self.assertDictEqual(res, self.SAMPLE_VM_NETDEVS)
-
- def test_probe_missing_values(self):
- mock_dpdk_node = mock.Mock()
- mock_dpdk_node.netdevs = self.SAMPLE_NETDEVS.copy()
-
- interface = {'local_mac': '0a:de:ad:be:ef:f5'}
- dpdk_intf = DpdkInterface(mock_dpdk_node, interface)
-
- dpdk_intf.probe_missing_values()
- self.assertEqual(interface['vpci'], '0000:0b:00.0')
-
- interface['local_mac'] = '0a:de:ad:be:ef:f4'
- dpdk_intf.probe_missing_values()
- self.assertEqual(interface['vpci'], '0000:00:19.0')
-
- def test_probe_missing_values_no_update(self):
- mock_dpdk_node = mock.Mock()
- mock_dpdk_node.netdevs = self.SAMPLE_NETDEVS.copy()
- del mock_dpdk_node.netdevs['enp11s0']['driver']
- del mock_dpdk_node.netdevs['lan']['driver']
-
- interface = {'local_mac': '0a:de:ad:be:ef:f5'}
- dpdk_intf = DpdkInterface(mock_dpdk_node, interface)
-
- dpdk_intf.probe_missing_values()
- self.assertNotIn('vpci', interface)
- self.assertNotIn('driver', interface)
-
- def test_probe_missing_values_negative(self):
- mock_dpdk_node = mock.Mock()
- mock_dpdk_node.netdevs.values.side_effect = IncorrectNodeSetup
-
- interface = {'local_mac': '0a:de:ad:be:ef:f5'}
- dpdk_intf = DpdkInterface(mock_dpdk_node, interface)
-
- with self.assertRaises(IncorrectConfig):
- dpdk_intf.probe_missing_values()
-
-
-class TestDpdkNode(unittest.TestCase):
-
- INTERFACES = [
- {'name': 'name1',
- 'virtual-interface': {
- 'local_mac': 404,
- 'vpci': 'pci10',
- }},
- {'name': 'name2',
- 'virtual-interface': {
- 'local_mac': 404,
- 'vpci': 'pci2',
- }},
- {'name': 'name3',
- 'virtual-interface': {
- 'local_mac': 404,
- 'vpci': 'some-pci1',
- }},
- ]
-
- def test_probe_dpdk_drivers(self):
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.return_value = 0, '', ''
-
- interfaces = [
- {'name': 'name1',
- 'virtual-interface': {
- 'local_mac': 404,
- 'vpci': 'pci10',
- }},
- {'name': 'name2',
- 'virtual-interface': {
- 'local_mac': 404,
- 'vpci': 'pci2',
- }},
- {'name': 'name3',
- 'virtual-interface': {
- 'local_mac': 404,
- 'vpci': 'some-pci1',
- }},
- ]
-
- dpdk_node = DpdkNode(NAME, interfaces, mock_ssh_helper)
- dpdk_helper = dpdk_node.dpdk_helper
-
- dpdk_helper.probe_real_kernel_drivers = mock.Mock()
- dpdk_helper.real_kernel_interface_driver_map = {
- 'pci1': 'driver1',
- 'pci2': 'driver2',
- 'pci3': 'driver3',
- 'pci4': 'driver1',
- 'pci6': 'driver3',
- }
-
- dpdk_node._probe_dpdk_drivers()
- self.assertNotIn('driver', interfaces[0]['virtual-interface'])
- self.assertEqual(interfaces[1]['virtual-interface']['driver'], 'driver2')
- self.assertEqual(interfaces[2]['virtual-interface']['driver'], 'driver1')
-
- def test_check(self):
- def update():
- if not mock_force_rebind.called:
- raise IncorrectConfig
-
- interfaces[0]['virtual-interface'].update({
- 'vpci': '0000:01:02.1',
- 'local_ip': '10.20.30.40',
- 'netmask': '255.255.0.0',
- 'driver': 'ixgbe',
- })
-
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.return_value = 0, '', ''
-
- interfaces = [
- {'name': 'name1',
- 'virtual-interface': {
- 'local_mac': 404,
- }},
- ]
-
- dpdk_node = DpdkNode(NAME, interfaces, mock_ssh_helper)
- dpdk_node._probe_missing_values = mock_probe_missing = mock.Mock(side_effect=update)
- dpdk_node._force_rebind = mock_force_rebind = mock.Mock()
-
- self.assertIsNone(dpdk_node.check())
- self.assertEqual(mock_probe_missing.call_count, 2)
-
- @mock.patch('yardstick.network_services.helpers.dpdkbindnic_helper.DpdkInterface')
- def test_check_negative(self, mock_intf_type):
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.return_value = 0, '', ''
-
- mock_intf_type().check.side_effect = SSHError
-
- dpdk_node = DpdkNode(NAME, self.INTERFACES, mock_ssh_helper)
-
- with self.assertRaises(IncorrectSetup):
- dpdk_node.check()
-
- def test_probe_netdevs(self):
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.return_value = 0, '', ''
-
- expected = {'key1': 500, 'key2': 'hello world'}
- update = {'key1': 1000, 'key3': []}
-
- dpdk_node = DpdkNode(NAME, self.INTERFACES, mock_ssh_helper)
- dpdk_helper = dpdk_node.dpdk_helper
- dpdk_helper.find_net_devices = mock.Mock(side_effect=[expected, update])
-
- self.assertDictEqual(dpdk_node.netdevs, {})
- dpdk_node._probe_netdevs()
- self.assertDictEqual(dpdk_node.netdevs, expected)
-
- expected = {'key1': 1000, 'key2': 'hello world', 'key3': []}
- dpdk_node._probe_netdevs()
- self.assertDictEqual(dpdk_node.netdevs, expected)
-
- def test_probe_netdevs_setup_negative(self):
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.return_value = 0, '', ''
-
- dpdk_node = DpdkNode(NAME, self.INTERFACES, mock_ssh_helper)
- dpdk_helper = dpdk_node.dpdk_helper
- dpdk_helper.find_net_devices = mock.Mock(side_effect=DpdkBindHelperException)
-
- with self.assertRaises(DpdkBindHelperException):
- dpdk_node._probe_netdevs()
-
- def test_force_rebind(self):
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.return_value = 0, '', ''
-
- dpdk_node = DpdkNode(NAME, self.INTERFACES, mock_ssh_helper)
- dpdk_helper = dpdk_node.dpdk_helper
- dpdk_helper.force_dpdk_rebind = mock_helper_func = mock.Mock()
-
- dpdk_node._force_rebind()
- self.assertEqual(mock_helper_func.call_count, 1)
-
-
-class TestDpdkBindHelper(unittest.TestCase):
- bin_path = "/opt/nsb_bin"
- EXAMPLE_OUTPUT = """
-
-Network devices using DPDK-compatible driver
-============================================
-0000:00:04.0 'Virtio network device' drv=igb_uio unused=
-0000:00:05.0 'Virtio network device' drv=igb_uio unused=
-
-Network devices using kernel driver
-===================================
-0000:00:03.0 'Virtio network device' if=ens3 drv=virtio-pci unused=igb_uio *Active*
-
-Other network devices
-=====================
-<none>
-
-Crypto devices using DPDK-compatible driver
-===========================================
-<none>
-
-Crypto devices using kernel driver
-==================================
-<none>
-
-Other crypto devices
-====================
-<none>
-"""
-
- PARSED_EXAMPLE = {
- NETWORK_DPDK: [
- {'active': False,
- 'dev_type': 'Virtio network device',
- 'driver': 'igb_uio',
- 'iface': None,
- 'unused': '',
- 'vpci': '0000:00:04.0',
- },
- {'active': False,
- 'dev_type': 'Virtio network device',
- 'driver': 'igb_uio',
- 'iface': None,
- 'unused': '',
- 'vpci': '0000:00:05.0',
- }
- ],
- NETWORK_KERNEL: [
- {'active': True,
- 'dev_type': 'Virtio network device',
- 'driver': 'virtio-pci',
- 'iface': 'ens3',
- 'unused': 'igb_uio',
- 'vpci': '0000:00:03.0',
- }
- ],
- CRYPTO_KERNEL: [],
- CRYPTO_DPDK: [],
- NETWORK_OTHER: [],
- CRYPTO_OTHER: [],
- }
-
- CLEAN_STATUS = {
- NETWORK_KERNEL: [],
- NETWORK_DPDK: [],
- CRYPTO_KERNEL: [],
- CRYPTO_DPDK: [],
- NETWORK_OTHER: [],
- CRYPTO_OTHER: [],
- }
-
- ONE_INPUT_LINE = ("0000:00:03.0 'Virtio network device' if=ens3 "
- "drv=virtio-pci unused=igb_uio *Active*")
-
- ONE_INPUT_LINE_PARSED = [{
- 'vpci': '0000:00:03.0',
- 'dev_type': 'Virtio network device',
- 'iface': 'ens3',
- 'driver': 'virtio-pci',
- 'unused': 'igb_uio',
- 'active': True,
- }]
-
- def test___init__(self):
- conn = mock.Mock()
- conn.provision_tool = mock.Mock(return_value='path_to_tool')
- conn.join_bin_path.return_value = os.path.join(self.bin_path, DpdkBindHelper.DPDK_DEVBIND)
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- self.assertEqual(conn, dpdk_bind_helper.ssh_helper)
- self.assertEqual(self.CLEAN_STATUS, dpdk_bind_helper.dpdk_status)
- self.assertIsNone(dpdk_bind_helper.status_nic_row_re)
- self.assertEqual(dpdk_bind_helper.dpdk_devbind,
- os.path.join(self.bin_path, dpdk_bind_helper.DPDK_DEVBIND))
- self.assertIsNone(dpdk_bind_helper._status_cmd_attr)
-
- def test__dpdk_execute(self):
- conn = mock.Mock()
- conn.execute = mock.Mock(return_value=(0, 'output', 'error'))
- conn.provision_tool = mock.Mock(return_value='tool_path')
- dpdk_bind_helper = DpdkBindHelper(conn)
- self.assertEqual((0, 'output', 'error'), dpdk_bind_helper._dpdk_execute('command'))
-
- def test__dpdk_execute_failure(self):
- conn = mock.Mock()
- conn.execute = mock.Mock(return_value=(1, 'output', 'error'))
- conn.provision_tool = mock.Mock(return_value='tool_path')
- dpdk_bind_helper = DpdkBindHelper(conn)
- with self.assertRaises(DpdkBindHelperException):
- dpdk_bind_helper._dpdk_execute('command')
-
- def test__addline(self):
- conn = mock.Mock()
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- dpdk_bind_helper._add_line(NETWORK_KERNEL, self.ONE_INPUT_LINE)
-
- self.assertIsNotNone(dpdk_bind_helper.dpdk_status)
- self.assertEqual(self.ONE_INPUT_LINE_PARSED, dpdk_bind_helper.dpdk_status[NETWORK_KERNEL])
-
- def test__switch_active_dict_by_header(self):
- line = "Crypto devices using DPDK-compatible driver"
- olddict = 'olddict'
- self.assertEqual(CRYPTO_DPDK, DpdkBindHelper._switch_active_dict(line, olddict))
-
- def test__switch_active_dict_by_header_empty(self):
- line = "<none>"
- olddict = 'olddict'
- self.assertEqual(olddict, DpdkBindHelper._switch_active_dict(line, olddict))
-
- def test_parse_dpdk_status_output(self):
- conn = mock.Mock()
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- dpdk_bind_helper._parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
-
- self.maxDiff = None
- self.assertEqual(self.PARSED_EXAMPLE, dpdk_bind_helper.dpdk_status)
-
- def test_kernel_bound_pci_addresses(self):
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.return_value = 0, '', ''
-
- expected = ['a', 'b', 3]
-
- dpdk_helper = DpdkBindHelper(mock_ssh_helper)
- dpdk_helper.dpdk_status = {
- NETWORK_DPDK: [{'vpci': 4}, {'vpci': 5}, {'vpci': 'g'}],
- NETWORK_KERNEL: [{'vpci': 'a'}, {'vpci': 'b'}, {'vpci': 3}],
- CRYPTO_DPDK: [],
- }
-
- result = dpdk_helper.kernel_bound_pci_addresses
- self.assertEqual(result, expected)
-
- def test_find_net_devices_negative(self):
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.return_value = 1, 'error', 'debug'
-
- dpdk_helper = DpdkBindHelper(mock_ssh_helper)
-
- self.assertDictEqual(dpdk_helper.find_net_devices(), {})
-
- def test_read_status(self):
- conn = mock.Mock()
- conn.execute = mock.Mock(return_value=(0, self.EXAMPLE_OUTPUT, ''))
- conn.provision_tool = mock.Mock(return_value='path_to_tool')
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- self.assertEqual(self.PARSED_EXAMPLE, dpdk_bind_helper.read_status())
-
- def test__get_bound_pci_addresses(self):
- conn = mock.Mock()
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- dpdk_bind_helper._parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
-
- self.assertEqual(['0000:00:04.0', '0000:00:05.0'],
- dpdk_bind_helper._get_bound_pci_addresses(NETWORK_DPDK))
- self.assertEqual(['0000:00:03.0'],
- dpdk_bind_helper._get_bound_pci_addresses(NETWORK_KERNEL))
-
- def test_interface_driver_map(self):
- conn = mock.Mock()
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- dpdk_bind_helper._parse_dpdk_status_output(self.EXAMPLE_OUTPUT)
-
- self.assertEqual({'0000:00:04.0': 'igb_uio',
- '0000:00:03.0': 'virtio-pci',
- '0000:00:05.0': 'igb_uio',
- },
- dpdk_bind_helper.interface_driver_map)
-
- def test_bind(self):
- conn = mock.Mock()
- conn.execute = mock.Mock(return_value=(0, '', ''))
- conn.join_bin_path.return_value = os.path.join(self.bin_path, DpdkBindHelper.DPDK_DEVBIND)
-
- dpdk_bind_helper = DpdkBindHelper(conn)
- dpdk_bind_helper.read_status = mock.Mock()
-
- dpdk_bind_helper.bind(['0000:00:03.0', '0000:00:04.0'], 'my_driver')
-
- conn.execute.assert_called_with('sudo /opt/nsb_bin/dpdk-devbind.py --force '
- '-b my_driver 0000:00:03.0 0000:00:04.0')
- dpdk_bind_helper.read_status.assert_called_once()
-
- def test_bind_single_pci(self):
- conn = mock.Mock()
- conn.execute = mock.Mock(return_value=(0, '', ''))
- conn.join_bin_path.return_value = os.path.join(self.bin_path, DpdkBindHelper.DPDK_DEVBIND)
-
- dpdk_bind_helper = DpdkBindHelper(conn)
- dpdk_bind_helper.read_status = mock.Mock()
-
- dpdk_bind_helper.bind('0000:00:03.0', 'my_driver')
-
- conn.execute.assert_called_with('sudo /opt/nsb_bin/dpdk-devbind.py --force '
- '-b my_driver 0000:00:03.0')
- dpdk_bind_helper.read_status.assert_called_once()
-
- def test_rebind_drivers(self):
- conn = mock.Mock()
-
- dpdk_bind_helper = DpdkBindHelper(conn)
-
- dpdk_bind_helper.bind = mock.Mock()
- dpdk_bind_helper.used_drivers = {
- 'd1': ['0000:05:00.0'],
- 'd3': ['0000:05:01.0', '0000:05:02.0'],
- }
-
- dpdk_bind_helper.rebind_drivers()
-
- dpdk_bind_helper.bind.assert_any_call(['0000:05:00.0'], 'd1', True)
- dpdk_bind_helper.bind.assert_any_call(['0000:05:01.0', '0000:05:02.0'], 'd3', True)
-
- def test_save_used_drivers(self):
- conn = mock.Mock()
- dpdk_bind_helper = DpdkBindHelper(conn)
- dpdk_bind_helper.dpdk_status = self.PARSED_EXAMPLE
-
- dpdk_bind_helper.save_used_drivers()
-
- expected = {
- 'igb_uio': ['0000:00:04.0', '0000:00:05.0'],
- 'virtio-pci': ['0000:00:03.0'],
- }
-
- self.assertDictEqual(expected, dpdk_bind_helper.used_drivers)
-
- def test_force_dpdk_rebind(self):
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.return_value = 0, '', ''
-
- dpdk_helper = DpdkBindHelper(mock_ssh_helper, 'driver2')
- dpdk_helper.dpdk_status = {
- NETWORK_DPDK: [
- {
- 'vpci': 'pci1',
- },
- {
- 'vpci': 'pci3',
- },
- {
- 'vpci': 'pci6',
- },
- {
- 'vpci': 'pci3',
- },
- ]
- }
- dpdk_helper.real_kernel_interface_driver_map = {
- 'pci1': 'real_driver1',
- 'pci2': 'real_driver2',
- 'pci3': 'real_driver1',
- 'pci4': 'real_driver4',
- 'pci6': 'real_driver6',
- }
- dpdk_helper.load_dpdk_driver = mock.Mock()
- dpdk_helper.read_status = mock.Mock()
- dpdk_helper.save_real_kernel_interface_driver_map = mock.Mock()
- dpdk_helper.save_used_drivers = mock.Mock()
- dpdk_helper.bind = mock_bind = mock.Mock()
-
- dpdk_helper.force_dpdk_rebind()
- self.assertEqual(mock_bind.call_count, 2)
-
- def test_save_real_kernel_drivers(self):
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.return_value = 0, '', ''
-
- dpdk_helper = DpdkBindHelper(mock_ssh_helper)
- dpdk_helper.real_kernel_drivers = {
- 'abc': '123',
- }
- dpdk_helper.real_kernel_interface_driver_map = {
- 'abc': 'AAA',
- 'def': 'DDD',
- 'abs': 'AAA',
- 'ghi': 'GGG',
- }
-
- # save_used_drivers must be called before save_real_kernel_drivers can be
- with self.assertRaises(AttributeError):
- dpdk_helper.save_real_kernel_drivers()
-
- dpdk_helper.save_used_drivers()
-
- expected_used_drivers = {
- 'AAA': ['abc', 'abs'],
- 'DDD': ['def'],
- 'GGG': ['ghi'],
- }
- dpdk_helper.save_real_kernel_drivers()
- self.assertDictEqual(dpdk_helper.used_drivers, expected_used_drivers)
- self.assertDictEqual(dpdk_helper.real_kernel_drivers, {})
-
- def test_get_real_kernel_driver(self):
- mock_ssh_helper = mock.Mock()
- mock_ssh_helper.execute.side_effect = [
- (0, 'non-matching text', ''),
- (0, 'pre Kernel modules: real_driver1', ''),
- (0, 'before Ethernet middle Virtio network device after', ''),
- ]
-
- dpdk_helper = DpdkBindHelper(mock_ssh_helper)
-
- self.assertIsNone(dpdk_helper.get_real_kernel_driver('abc'))
- self.assertEqual(dpdk_helper.get_real_kernel_driver('abc'), 'real_driver1')
- self.assertEqual(dpdk_helper.get_real_kernel_driver('abc'), DpdkBindHelper.VIRTIO_DRIVER)