X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FDUTSetup.py;h=7c8ca1b828b9c9324b92d773b8eec7c5f9340e89;hb=81184fdb8f4ec8668bd7b0c8a703891d95095192;hp=ae42637f5293e1b170491e46b2a2cd31ad4a5d5d;hpb=73a01b1a7fc836c964627eea2c08106df0da5aee;p=csit.git diff --git a/resources/libraries/python/DUTSetup.py b/resources/libraries/python/DUTSetup.py index ae42637f52..7c8ca1b828 100644 --- a/resources/libraries/python/DUTSetup.py +++ b/resources/libraries/python/DUTSetup.py @@ -190,7 +190,7 @@ class DUTSetup(object): :type node: dict :returns: PID :rtype: int - :raises RuntimeError if it is not possible to get the PID. + :raises RuntimeError: If it is not possible to get the PID. """ ssh = SSH() @@ -385,24 +385,31 @@ class DUTSetup(object): def get_pci_dev_driver(node, pci_addr): """Get current PCI device driver on node. + .. note:: + # lspci -vmmks 0000:00:05.0 + Slot: 00:05.0 + Class: Ethernet controller + Vendor: Red Hat, Inc + Device: Virtio network device + SVendor: Red Hat, Inc + SDevice: Device 0001 + PhySlot: 5 + Driver: virtio-pci + :param node: DUT node. :param pci_addr: PCI device address. :type node: dict :type pci_addr: str :returns: Driver or None :raises RuntimeError: If PCI rescan or lspci command execution failed. + :raises RuntimeError: If it is not possible to get the interface driver + information from the node. """ ssh = SSH() ssh.connect(node) for i in range(3): - logger.trace('Try {0}: Get interface driver'.format(i)) - cmd = 'sh -c "echo 1 > /sys/bus/pci/rescan"' - ret_code, _, _ = ssh.exec_command_sudo(cmd) - if int(ret_code) != 0: - raise RuntimeError("'{0}' failed on '{1}'" - .format(cmd, node['host'])) - + logger.trace('Try number {0}: Get PCI device driver'.format(i)) cmd = 'lspci -vmmks {0}'.format(pci_addr) ret_code, stdout, _ = ssh.exec_command(cmd) if int(ret_code) != 0: @@ -421,24 +428,31 @@ class DUTSetup(object): return None if name == 'Driver:': return value - else: - return None + + if i < 2: + logger.trace('Driver for PCI device {} not found, executing ' + 'pci rescan and retrying'.format(pci_addr)) + cmd = 'sh -c "echo 1 > /sys/bus/pci/rescan"' + ret_code, _, _ = ssh.exec_command_sudo(cmd) + if int(ret_code) != 0: + raise RuntimeError("'{0}' failed on '{1}'" + .format(cmd, node['host'])) + + return None @staticmethod def kernel_module_verify(node, module, force_load=False): - """Verify if kernel module is loaded on all DUTs. If parameter force + """Verify if kernel module is loaded on node. If parameter force load is set to True, then try to load the modules. - :param node: DUT node. + :param node: Node. :param module: Module to verify. :param force_load: If True then try to load module. :type node: dict :type module: str :type force_load: bool - :returns: nothing :raises RuntimeError: If module is not loaded or failed to load. """ - ssh = SSH() ssh.connect(node) @@ -453,6 +467,35 @@ class DUTSetup(object): raise RuntimeError('Kernel module {0} is not loaded on host ' '{1}'.format(module, node['host'])) + @staticmethod + def kernel_module_verify_on_all_duts(nodes, module, force_load=False): + """Verify if kernel module is loaded on all DUTs. If parameter force + load is set to True, then try to load the modules. + + :param node: DUT nodes. + :param module: Module to verify. + :param force_load: If True then try to load module. + :type node: dict + :type module: str + :type force_load: bool + """ + for node in nodes.values(): + if node['type'] == NodeType.DUT: + DUTSetup.kernel_module_verify(node, module, force_load) + + @staticmethod + def verify_uio_driver_on_all_duts(nodes): + """Verify if uio driver kernel module is loaded on all DUTs. If module + is not present it will try to load it. + + :param node: DUT nodes. + :type node: dict + """ + for node in nodes.values(): + if node['type'] == NodeType.DUT: + uio_driver = Topology.get_uio_driver(node) + DUTSetup.kernel_module_verify(node, uio_driver, force_load=True) + @staticmethod def kernel_module_load(node, module): """Load kernel module on node. @@ -510,7 +553,7 @@ class DUTSetup(object): :type vpp_pkg_dir: str :type vpp_rpm_pkgs: list :type vpp_deb_pkgs: list - :raises: RuntimeError if failed to remove or install VPP + :raises RuntimeError: If failed to remove or install VPP. """ logger.debug("Installing VPP") @@ -592,8 +635,8 @@ class DUTSetup(object): :param node: DUT node. :type node: dict - :raises: RuntimeError if failed to restart VPP, get VPP version or - get VPP interfaces + :raises RuntimeError: If failed to restart VPP, get VPP version + or get VPP interfaces. """ logger.debug("Verify VPP on node {0}".format(node['host']))