fix failing tests after namespace updates in HC
[csit.git] / resources / libraries / python / honeycomb / Netconf.py
index 3c98387..3033610 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2018 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 """Keywords used to connect to Honeycomb through Netconf, send messages
  and receive replies."""
 
+import socket
 from time import time
 
 import paramiko
-import socket
 from robot.api import logger
-from interruptingcow import timeout
 
 from resources.libraries.python.honeycomb.HoneycombUtil import HoneycombError
 
@@ -61,8 +60,7 @@ class Netconf(object):
                        password=node['honeycomb']['passwd'],
                        pkey=None,
                        port=node['honeycomb']['netconf_port'],
-                       timeout=time_out,
-                       )
+                       timeout=time_out)
 
         logger.trace('Connect took {0} seconds'.format(time() - start))
         logger.debug('New ssh: {0}'.format(client))
@@ -83,7 +81,6 @@ class Netconf(object):
         # read OpenDaylight's hello message and capability list
         self.get_response(
             size=131072,
-            time_out=time_out,
             err="Timeout on getting hello message."
         )
 
@@ -91,18 +88,16 @@ class Netconf(object):
         if not self.channel.active:
             raise HoneycombError("Channel closed on capabilities exchange.")
 
-    def get_response(self, size=4096, time_out=10, err="Unspecified Error."):
+    def get_response(self, size=4096, err="Unspecified Error."):
         """Iteratively read data from the receive buffer and catenate together
         until message ends with the message delimiter, or
         until timeout is reached.
 
         :param size: Maximum number of bytes to read in one iteration.
-        :param time_out: Timeout value for getting the complete response.
         :param err: Error message to provide when timeout is reached.
-        :type size:int
-        :type time_out:int
-        :type err:str
-        :return: Content of response.
+        :type size: int
+        :type err: str
+        :returns: Content of response.
         :rtype: str
         :raises HoneycombError: If the read process times out.
         """
@@ -110,39 +105,36 @@ class Netconf(object):
         reply = ''
 
         try:
-            with timeout(time_out, exception=RuntimeError):
-                while not reply.endswith(self.delimiter) or \
-                        self.channel.recv_ready():
-                    try:
-                        chunk = self.channel.recv(size)
-                        if not chunk:
-                            break
-                        reply += chunk
-                        if self.channel.exit_status_ready():
-                            logger.debug('Channel exit status ready.')
-                            break
-                    except socket.timeout:
-                        raise HoneycombError("Socket timeout.",
-                                             enable_logging=False
-                                             )
+            while not reply.endswith(self.delimiter) or \
+                    self.channel.recv_ready():
+                try:
+                    chunk = self.channel.recv(size)
+                    if not chunk:
+                        break
+                    reply += chunk
+                    if self.channel.exit_status_ready():
+                        logger.debug('Channel exit status ready.')
+                        break
+                except socket.timeout:
+                    raise HoneycombError("Socket timeout.",
+                                         enable_logging=False)
 
         except RuntimeError:
             raise HoneycombError(err + " Content of buffer: {0}".format(reply),
-                                 enable_logging=False
-                                 )
+                                 enable_logging=False)
 
         logger.trace(reply)
         return reply.replace(self.delimiter, "")
 
     def get_all_responses(self, size=4096, time_out=3):
         """Read responses from the receive buffer and catenate together
-         until a read operation times out.
+        until a read operation times out.
 
         :param size: Maximum number of bytes to read in one iteration.
         :param time_out: Timeout value for getting the complete response.
-        :type size:int
-        :type time_out:int
-        :return: Content of response.
+        :type size: int
+        :type time_out: int
+        :returns: Content of response.
         :rtype: str
         """
 
@@ -151,20 +143,26 @@ class Netconf(object):
 
         while True:
             try:
-                response += self.get_response(size, time_out, err)
+                response += self.get_response(size, err)
             except HoneycombError:
                 break
 
         return response
 
-    def send(self, message):
+    def send(self, message, **params):
         """Sends provided message through the channel.
 
         :param message: Message to be sent to Honeycomb.
+        :param params: Format the message string with these parameters.
         :type message: str
+        :type params: dict
         """
 
+        message = message.format(**params)
+
         if not message.endswith(self.delimiter):
             message += self.delimiter
 
+        logger.debug(message)
+
         self.channel.send(message)