CSIT-775 HC Test: CRUD over IPv6 control-plane interface
[csit.git] / resources / libraries / python / honeycomb / HoneycombUtil.py
index f2f012e..b7338d3 100644 (file)
@@ -27,6 +27,7 @@ from enum import Enum, unique
 
 from robot.api import logger
 
+from resources.libraries.python.ssh import SSH
 from resources.libraries.python.HTTPRequest import HTTPRequest
 from resources.libraries.python.constants import Constants as Const
 
@@ -125,7 +126,7 @@ class HoneycombUtil(object):
         :param url_file: URL file. The argument contains only the name of file
         without extension, not the full path.
         :type url_file: str
-        :return: Requested path.
+        :returns: Requested path.
         :rtype: str
         """
 
@@ -177,7 +178,7 @@ class HoneycombUtil(object):
         :param path: Path to data we want to find.
         :type data: dict
         :type path: tuple
-        :return: Data represented by path.
+        :returns: Data represented by path.
         :rtype: str, dict, or list
         :raises HoneycombError: If the data has not been found.
         """
@@ -204,7 +205,7 @@ class HoneycombUtil(object):
         :param path: Path to data we want to remove.
         :type data: dict
         :type path: tuple
-        :return: Original data without removed part.
+        :returns: Original data without removed part.
         :rtype: dict
         """
 
@@ -244,7 +245,7 @@ class HoneycombUtil(object):
         :type data: dict
         :type path: tuple
         :type new_value: str, dict or list
-        :return: Original data with the new value.
+        :returns: Original data with the new value.
         :rtype: dict
         """
 
@@ -294,7 +295,7 @@ class HoneycombUtil(object):
         :type node: dict
         :type url_file: str
         :type path: str
-        :return: Status code and content of response.
+        :returns: Status code and content of response.
         :rtype tuple
         """
 
@@ -320,7 +321,7 @@ class HoneycombUtil(object):
         :type data: dict, str
         :type path: str
         :type data_representation: DataRepresentation
-        :return: Status code and content of response.
+        :returns: Status code and content of response.
         :rtype: tuple
         :raises HoneycombError: If the given data representation is not defined
         in HEADERS.
@@ -339,8 +340,8 @@ class HoneycombUtil(object):
         base_path = HoneycombUtil.read_path_from_url_file(url_file)
         path = base_path + path
         logger.trace(path)
-        return HTTPRequest.put(node=node, path=path, headers=header,
-                               payload=data)
+        return HTTPRequest.put(
+            node=node, path=path, headers=header, payload=data)
 
     @staticmethod
     def post_honeycomb_data(node, url_file, data=None,
@@ -360,7 +361,7 @@ class HoneycombUtil(object):
         :type data: dict, str
         :type data_representation: DataRepresentation
         :type timeout: int
-        :return: Status code and content of response.
+        :returns: Status code and content of response.
         :rtype: tuple
         :raises HoneycombError: If the given data representation is not defined
         in HEADERS.
@@ -375,8 +376,8 @@ class HoneycombUtil(object):
             data = dumps(data)
 
         path = HoneycombUtil.read_path_from_url_file(url_file)
-        return HTTPRequest.post(node=node, path=path, headers=header,
-                                payload=data, timeout=timeout)
+        return HTTPRequest.post(
+            node=node, path=path, headers=header, payload=data, timeout=timeout)
 
     @staticmethod
     def delete_honeycomb_data(node, url_file, path=""):
@@ -389,10 +390,69 @@ class HoneycombUtil(object):
         :type node: dict
         :type url_file: str
         :type path: str
-        :return: Status code and content of response.
+        :returns: Status code and content of response.
         :rtype tuple
         """
 
         base_path = HoneycombUtil.read_path_from_url_file(url_file)
         path = base_path + path
         return HTTPRequest.delete(node, path)
+
+    @staticmethod
+    def append_honeycomb_log(node, suite_name):
+        """Append Honeycomb log for the current test suite to the full log.
+
+        :param node: Honeycomb node.
+        :param suite_name: Name of the current test suite. ${SUITE_NAME}
+        variable in robotframework.
+        :type node: dict
+        :type suite_name: str
+        """
+
+        ssh = SSH()
+        ssh.connect(node)
+
+        ssh.exec_command(
+            "echo '{separator}' >> /tmp/honeycomb.log".format(separator="="*80))
+        ssh.exec_command(
+            "echo 'Log for suite: {suite}' >> /tmp/honeycomb.log".format(
+                suite=suite_name))
+        ssh.exec_command(
+            "cat {hc_log} >> /tmp/honeycomb.log".format(
+                hc_log=Const.REMOTE_HC_LOG))
+
+    @staticmethod
+    def clear_honeycomb_log(node):
+        """Delete the Honeycomb log file for the current test suite.
+
+        :param node: Honeycomb node.
+        :type node: dict"""
+
+        ssh = SSH()
+        ssh.connect(node)
+
+        ssh.exec_command("sudo rm {hc_log}".format(hc_log=Const.REMOTE_HC_LOG))
+
+    @staticmethod
+    def archive_honeycomb_log(node, perf=False):
+        """Copy honeycomb log file from DUT node to VIRL for archiving.
+
+        :param node: Honeycomb node.
+        :param perf: Alternate handling, for use with performance test topology.
+        :type node: dict
+        :type perf: bool
+        """
+
+        ssh = SSH()
+        ssh.connect(node)
+
+        if not perf:
+            cmd = "cp /tmp/honeycomb.log /scratch/"
+            ssh.exec_command_sudo(cmd, timeout=60)
+        else:
+            ssh.scp(
+                ".",
+                "/tmp/honeycomb.log",
+                get=True,
+                timeout=60)
+            ssh.exec_command("rm /tmp/honeycomb.log")