Pylint fixes
[csit.git] / resources / libraries / python / DUTSetup.py
index a0a4870..1f87f03 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+"""DUT setup library."""
+
 from robot.api import logger
 
 from resources.libraries.python.topology import NodeType
 from resources.libraries.python.ssh import SSH
 from resources.libraries.python.constants import Constants
 from robot.api import logger
 
 from resources.libraries.python.topology import NodeType
 from resources.libraries.python.ssh import SSH
 from resources.libraries.python.constants import Constants
+from resources.libraries.python.VatExecutor import VatExecutor
 
 
 class DUTSetup(object):
 
 
 class DUTSetup(object):
+    """Contains methods for setting up DUTs."""
     @staticmethod
     def start_vpp_service_on_all_duts(nodes):
         """Start up the VPP service on all nodes."""
     @staticmethod
     def start_vpp_service_on_all_duts(nodes):
         """Start up the VPP service on all nodes."""
@@ -27,13 +31,43 @@ class DUTSetup(object):
             if node['type'] == NodeType.DUT:
                 ssh.connect(node)
                 (ret_code, stdout, stderr) = \
             if node['type'] == NodeType.DUT:
                 ssh.connect(node)
                 (ret_code, stdout, stderr) = \
-                    ssh.exec_command_sudo('service vpp restart')
-                if 0 != int(ret_code):
+                    ssh.exec_command_sudo('service vpp restart', timeout=120)
+                if int(ret_code) != 0:
                     logger.debug('stdout: {0}'.format(stdout))
                     logger.debug('stderr: {0}'.format(stderr))
                     raise Exception('DUT {0} failed to start VPP service'.
                                     format(node['host']))
 
                     logger.debug('stdout: {0}'.format(stdout))
                     logger.debug('stderr: {0}'.format(stderr))
                     raise Exception('DUT {0} failed to start VPP service'.
                                     format(node['host']))
 
+    @staticmethod
+    def vpp_show_version_verbose(node):
+        """Run "show version verbose" CLI command.
+
+        :param node: Node to run command on.
+        :type node: dict
+        """
+        vat = VatExecutor()
+        vat.execute_script("show_version_verbose.vat", node, json_out=False)
+
+    @staticmethod
+    def vpp_api_trace_save(node):
+        """Run "api trace save" CLI command.
+
+        :param node: Node to run command on.
+        :type node: dict
+        """
+        vat = VatExecutor()
+        vat.execute_script("api_trace_save.vat", node, json_out=False)
+
+    @staticmethod
+    def vpp_api_trace_dump(node):
+        """Run "api trace custom-dump" CLI command.
+
+        :param node: Node to run command on.
+        :type node: dict
+        """
+        vat = VatExecutor()
+        vat.execute_script("api_trace_dump.vat", node, json_out=False)
+
     @staticmethod
     def setup_all_duts(nodes):
         """Prepare all DUTs in given topology for test execution."""
     @staticmethod
     def setup_all_duts(nodes):
         """Prepare all DUTs in given topology for test execution."""
@@ -43,16 +77,69 @@ class DUTSetup(object):
 
     @staticmethod
     def setup_dut(node):
 
     @staticmethod
     def setup_dut(node):
+        """Run script over SSH to setup the DUT node.
+
+        :param node: DUT node to set up.
+        :type node: dict
+
+        :raises Exception: If the DUT setup fails.
+        """
         ssh = SSH()
         ssh.connect(node)
 
         (ret_code, stdout, stderr) = \
         ssh = SSH()
         ssh.connect(node)
 
         (ret_code, stdout, stderr) = \
-            ssh.exec_command('sudo -Sn bash {0}/{1}/dut_setup.sh'.format(
-                Constants.REMOTE_FW_DIR, Constants.RESOURCES_LIB_SH))
+            ssh.exec_command('sudo -Sn bash {0}/{1}/dut_setup.sh'.
+                             format(Constants.REMOTE_FW_DIR,
+                                    Constants.RESOURCES_LIB_SH), timeout=120)
         logger.trace(stdout)
         logger.trace(stderr)
         logger.trace(stdout)
         logger.trace(stderr)
-        if 0 != int(ret_code):
+        if int(ret_code) != 0:
             logger.debug('DUT {0} setup script failed: "{1}"'.
                          format(node['host'], stdout + stderr))
             raise Exception('DUT test setup script failed at node {}'.
                             format(node['host']))
             logger.debug('DUT {0} setup script failed: "{1}"'.
                          format(node['host'], stdout + stderr))
             raise Exception('DUT test setup script failed at node {}'.
                             format(node['host']))
+
+    @staticmethod
+    def get_vpp_pid(node):
+        """Get PID of running VPP process.
+
+        :param node: DUT node.
+        :type node: dict
+        :return: PID
+        :rtype: int
+        :raises RuntimeError if it is not possible to get the PID.
+        """
+
+        ssh = SSH()
+        ssh.connect(node)
+        ret_code, stdout, stderr = ssh.exec_command('pidof vpp')
+
+        logger.trace(stdout)
+        logger.trace(stderr)
+
+        if int(ret_code) != 0:
+            logger.debug('Not possible to get PID of VPP process on node: '
+                         '{0}\n {1}'.format(node['host'], stdout + stderr))
+            raise RuntimeError('Not possible to get PID of VPP process on node:'
+                               ' {}'.format(node['host']))
+
+        if len(stdout.splitlines()) != 1:
+            raise RuntimeError("More then one VPP PID found on node {0}".
+                               format(node['host']))
+        return int(stdout)
+
+    @staticmethod
+    def get_vpp_pids(nodes):
+        """Get PID of running VPP process on all DUTs.
+
+        :param nodes: DUT nodes.
+        :type nodes: dict
+        :return: PIDs
+        :rtype: dict
+        """
+
+        pids = dict()
+        for node in nodes.values():
+            if node['type'] == NodeType.DUT:
+                pids[node['host']] = DUTSetup.get_vpp_pid(node)
+        return pids