HC Test: exception handling for restconf GET operation
[csit.git] / resources / libraries / python / honeycomb / HoneycombUtil.py
index a718a24..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="",
@@ -399,16 +406,60 @@ class HoneycombUtil(object):
         return HTTPRequest.delete(node, path)
 
     @staticmethod
-    def archive_honeycomb_log(node):
-        """Copy honeycomb log file from DUT node to VIRL for archiving.
+    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)
 
-        cmd = "cp /var/log/honeycomb/honeycomb.log /scratch/"
+        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))
 
-        ssh.exec_command_sudo(cmd)
+    @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")