HC Test: exception handling for restconf GET operation
[csit.git] / resources / libraries / python / honeycomb / HoneycombUtil.py
index 24f81af..76bb5b3 100644 (file)
@@ -302,7 +302,14 @@ class HoneycombUtil(object):
         base_path = HoneycombUtil.read_path_from_url_file(url_file)
         path = base_path + path
         status_code, resp = HTTPRequest.get(node, path)
-        return status_code, loads(resp)
+
+        try:
+            data = loads(resp)
+        except ValueError:
+            logger.debug("Failed to deserialize JSON data.")
+            data = None
+
+        return status_code, data
 
     @staticmethod
     def put_honeycomb_data(node, url_file, data, path="",
@@ -398,6 +405,41 @@ class HoneycombUtil(object):
         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.
@@ -412,10 +454,12 @@ class HoneycombUtil(object):
         ssh.connect(node)
 
         if not perf:
-            cmd = "cp /var/log/honeycomb/honeycomb.log /scratch/"
-            ssh.exec_command_sudo(cmd)
+            cmd = "cp /tmp/honeycomb.log /scratch/"
+            ssh.exec_command_sudo(cmd, timeout=60)
         else:
             ssh.scp(
                 ".",
-                "/var/log/honeycomb/honeycomb.log",
-                get=True)
+                "/tmp/honeycomb.log",
+                get=True,
+                timeout=60)
+            ssh.exec_command("rm /tmp/honeycomb.log")