CSIT-383: IPSEC IPv4 negative test cases
[csit.git] / resources / libraries / python / TrafficScriptExecutor.py
index ee29695..33b3d6d 100644 (file)
 
 """Traffic script executor library."""
 
-from constants import Constants
-from ssh import SSH
 from robot.api import logger
 
+from resources.libraries.python.constants import Constants
+from resources.libraries.python.ssh import SSH
+
 __all__ = ['TrafficScriptExecutor']
 
 
@@ -27,31 +28,37 @@ class TrafficScriptExecutor(object):
     def _escape(string):
         """Escape quotation mark and dollar mark for shell command.
 
-           :param string: String to escape.
-           :type string: str
-           :return: Escaped string.
-           :rtype: str
+        :param string: String to escape.
+        :type string: str
+        :return: Escaped string.
+        :rtype: str
         """
         return string.replace('"', '\\"').replace("$", "\\$")
 
     @staticmethod
     def run_traffic_script_on_node(script_file_name, node, script_args,
-                                   timeout=10):
+                                   timeout=60):
         """Run traffic script on the TG node.
 
-           :param script_file_name: Traffic script name
-           :param node: Node to run traffic script on.
-           :param script_args: Traffic scripts arguments.
-           :param timeout: Timeout (optional).
-           :type script_file_name: str
-           :type node: dict
-           :type script_args: str
-           :type timeout: int
+        :param script_file_name: Traffic script name.
+        :param node: Node to run traffic script on.
+        :param script_args: Traffic scripts arguments.
+        :param timeout: Timeout (optional).
+        :type script_file_name: str
+        :type node: dict
+        :type script_args: str
+        :type timeout: int
+        :raises RuntimeError: ICMP echo Rx timeout.
+        :raises RuntimeError: DHCP REQUEST Rx timeout.
+        :raises RuntimeError: DHCP DISCOVER Rx timeout.
+        :raises RuntimeError: TCP/UDP Rx timeout.
+        :raises RuntimeError: ARP reply timeout.
+        :raises RuntimeError: Traffic script execution failed.
         """
         logger.trace("{}".format(timeout))
         ssh = SSH()
         ssh.connect(node)
-        cmd = ("cd {}; virtualenv env && " +
+        cmd = ("cd {}; virtualenv --system-site-packages env && " +
                "export PYTHONPATH=${{PWD}}; " +
                ". ${{PWD}}/env/bin/activate; " +
                "resources/traffic_scripts/{} {}") \
@@ -64,28 +71,41 @@ class TrafficScriptExecutor(object):
         logger.debug("stderr: {}".format(stderr))
         logger.debug("ret_code: {}".format(ret_code))
         if ret_code != 0:
-            raise Exception("Traffic script execution failed")
+            if "RuntimeError: ICMP echo Rx timeout" in stderr:
+                raise RuntimeError("ICMP echo Rx timeout")
+            elif "RuntimeError: DHCP REQUEST Rx timeout" in stderr:
+                raise RuntimeError("DHCP REQUEST Rx timeout")
+            elif "RuntimeError: DHCP DISCOVER Rx timeout" in stderr:
+                raise RuntimeError("DHCP DISCOVER Rx timeout")
+            elif "RuntimeError: TCP/UDP Rx timeout" in stderr:
+                raise RuntimeError("TCP/UDP Rx timeout")
+            elif "Error occurred: ARP reply timeout" in stdout:
+                raise RuntimeError("ARP reply timeout")
+            elif "RuntimeError: ESP packet Rx timeout" in stderr:
+                raise RuntimeError("ESP packet Rx timeout")
+            else:
+                raise RuntimeError("Traffic script execution failed")
 
     @staticmethod
     def traffic_script_gen_arg(rx_if, tx_if, src_mac, dst_mac, src_ip, dst_ip):
         """Generate traffic script basic arguments string.
 
-           :param rx_if: Interface that receives traffic.
-           :param tx_if: Interface that sends traffic.
-           :param src_mac: Source MAC address.
-           :param dst_mac: Destination MAC address.
-           :param src_ip: Source IP address.
-           :param dst_ip: Destination IP address.
-           :type rx_if: str
-           :type tx_if: str
-           :type src_mac: str
-           :type dst_mac: str
-           :type src_ip: str
-           :type dst_ip: str
-           :return: Traffic script arguments string.
-           :rtype: str
+        :param rx_if: Interface that receives traffic.
+        :param tx_if: Interface that sends traffic.
+        :param src_mac: Source MAC address.
+        :param dst_mac: Destination MAC address.
+        :param src_ip: Source IP address.
+        :param dst_ip: Destination IP address.
+        :type rx_if: str
+        :type tx_if: str
+        :type src_mac: str
+        :type dst_mac: str
+        :type src_ip: str
+        :type dst_ip: str
+        :return: Traffic script arguments string.
+        :rtype: str
         """
-        args = '--rx_if {0} --tx_if {1} --src_mac {2} --dst_mac {3} --src_ip' \
-            ' {4} --dst_ip {5}'.format(rx_if, tx_if, src_mac, dst_mac, src_ip,
-                                       dst_ip)
+        args = ('--rx_if {0} --tx_if {1} --src_mac {2} --dst_mac {3} --src_ip'
+                ' {4} --dst_ip {5}').format(rx_if, tx_if, src_mac, dst_mac,
+                                            src_ip, dst_ip)
         return args