Add output.xml with only INFO logging leve
[csit.git] / resources / libraries / python / HTTPRequest.py
index 5f87484..0f650a8 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:
@@ -27,15 +27,13 @@ from robot.libraries.BuiltIn import BuiltIn
 
 from requests import request, RequestException, Timeout, TooManyRedirects, \
     HTTPError, ConnectionError
-from requests.packages.urllib3 import disable_warnings
-from requests.packages.urllib3.exceptions import InsecureRequestWarning
 from requests.auth import HTTPBasicAuth
 
 
 @unique
 class HTTPCodes(IntEnum):
     """HTTP status codes"""
-    OK = 200
+    OK = 200  # HTTP standard code name.  # pylint: disable=invalid-name
     ACCEPTED = 201
     UNAUTHORIZED = 401
     FORBIDDEN = 403
@@ -50,10 +48,12 @@ class HTTPRequestError(Exception):
 
     When raising this exception, put this information to the message in this
     order:
-    - short description of the encountered problem,
-    - relevant messages if there are any collected, e.g., from caught
-      exception,
-    - relevant data if there are any collected.
+
+     - short description of the encountered problem,
+     - relevant messages if there are any collected, e.g., from caught
+       exception,
+     - relevant data if there are any collected.
+
     The logging is performed on two levels: 1. error - short description of the
     problem; 2. debug - detailed information.
     """
@@ -67,7 +67,7 @@ class HTTPRequestError(Exception):
 
         :param msg: Message to be displayed and logged.
         :param enable_logging: When True, logging is enabled, otherwise
-        logging is disabled.
+            logging is disabled.
         :type msg: str
         :type enable_logging: bool
         """
@@ -75,12 +75,9 @@ class HTTPRequestError(Exception):
         self._msg = "{0}: {1}".format(self.__class__.__name__, msg)
         self._details = details
         if enable_logging:
-            logger.error(self._msg)
+            logger.info(self._msg)
             logger.debug(self._details)
 
-        # suppress warnings about disabled SSL verification
-        disable_warnings(InsecureRequestWarning)
-
     def __repr__(self):
         return repr(self._msg)
 
@@ -118,7 +115,7 @@ class HTTPRequest(object):
         :type ip_addr: str
         :type port: str or int
         :type path: str
-        :return: Full url.
+        :returns: Full url.
         :rtype: str
         """
 
@@ -129,8 +126,8 @@ class HTTPRequest(object):
         except (AttributeError, AddressValueError):
             pass
 
-        return "https://{ip}:{port}{path}".format(ip=ip_addr, port=port,
-                                                  path=path)
+        return "http://{ip}:{port}{path}".format(ip=ip_addr, port=port,
+                                                 path=path)
 
     @staticmethod
     def _http_request(method, node, path, enable_logging=True, **kwargs):
@@ -173,7 +170,7 @@ class HTTPRequest(object):
         :type path: str
         :type enable_logging: bool
         :type kwargs: dict
-        :return: Status code and content of response.
+        :returns: Status code and content of response.
         :rtype: tuple
         :raises HTTPRequestError: If
         1. it is not possible to connect,
@@ -184,9 +181,12 @@ class HTTPRequest(object):
         """
         timeout = kwargs["timeout"]
 
-        if BuiltIn().get_variable_value("${use_odl_client}"):
-            # TODO: node["honeycomb"]["odl_port"]
+        use_odl = BuiltIn().get_variable_value("${use_odl_client}")
+
+        if use_odl:
             port = 8181
+            # Using default ODL Restconf port
+            # TODO: add node["honeycomb"]["odl_port"] to topology, use it here
             odl_url_part = "/network-topology:network-topology/topology/" \
                            "topology-netconf/node/vpp/yang-ext:mount"
         else:
@@ -233,23 +233,23 @@ class HTTPRequest(object):
 
     @staticmethod
     @keyword(name="HTTP Get")
-    def get(node, path, headers=None, timeout=10, enable_logging=True):
+    def get(node, path, headers=None, timeout=15, enable_logging=True):
         """Sends a GET request and returns the response and status code.
 
         :param node: Honeycomb node.
         :param path: URL path, e.g. /index.html.
         :param headers: Dictionary of HTTP Headers to send with the Request.
         :param timeout: How long to wait for the server to send data before
-        giving up, as a float, or a (connect timeout, read timeout) tuple.
+            giving up, as a float, or a (connect timeout, read timeout) tuple.
         :param enable_logging: Used to suppress errors when checking Honeycomb
-        state during suite setup and teardown. When True, logging is enabled,
-        otherwise logging is disabled.
+            state during suite setup and teardown. When True,
+            logging is enabled, otherwise logging is disabled.
         :type node: dict
         :type path: str
         :type headers: dict
         :type timeout: float or tuple
         :type enable_logging: bool
-        :return: Status code and content of response.
+        :returns: Status code and content of response.
         :rtype: tuple
         """
 
@@ -259,24 +259,24 @@ class HTTPRequest(object):
 
     @staticmethod
     @keyword(name="HTTP Put")
-    def put(node, path, headers=None, payload=None, json=None, timeout=10):
+    def put(node, path, headers=None, payload=None, json=None, timeout=15):
         """Sends a PUT request and returns the response and status code.
 
         :param node: Honeycomb node.
         :param path: URL path, e.g. /index.html.
         :param headers: Dictionary of HTTP Headers to send with the Request.
         :param payload: Dictionary, bytes, or file-like object to send in
-        the body of the Request.
+            the body of the Request.
         :param json: JSON formatted string to send in the body of the Request.
         :param timeout: How long to wait for the server to send data before
-        giving up, as a float, or a (connect timeout, read timeout) tuple.
+            giving up, as a float, or a (connect timeout, read timeout) tuple.
         :type node: dict
         :type path: str
         :type headers: dict
         :type payload: dict, bytes, or file-like object
         :type json: str
         :type timeout: float or tuple
-        :return: Status code and content of response.
+        :returns: Status code and content of response.
         :rtype: tuple
         """
         return HTTPRequest._http_request('PUT', node, path, headers=headers,
@@ -285,7 +285,7 @@ class HTTPRequest(object):
 
     @staticmethod
     @keyword(name="HTTP Post")
-    def post(node, path, headers=None, payload=None, json=None, timeout=10,
+    def post(node, path, headers=None, payload=None, json=None, timeout=15,
              enable_logging=True):
         """Sends a POST request and returns the response and status code.
 
@@ -293,13 +293,13 @@ class HTTPRequest(object):
         :param path: URL path, e.g. /index.html.
         :param headers: Dictionary of HTTP Headers to send with the Request.
         :param payload: Dictionary, bytes, or file-like object to send in
-        the body of the Request.
+            the body of the Request.
         :param json: JSON formatted string to send in the body of the Request.
         :param timeout: How long to wait for the server to send data before
-        giving up, as a float, or a (connect timeout, read timeout) tuple.
+            giving up, as a float, or a (connect timeout, read timeout) tuple.
         :param enable_logging: Used to suppress errors when checking ODL
-        state during suite setup and teardown. When True, logging is enabled,
-        otherwise logging is disabled.
+            state during suite setup and teardown. When True,
+            logging is enabled, otherwise logging is disabled.
         :type node: dict
         :type path: str
         :type headers: dict
@@ -307,7 +307,7 @@ class HTTPRequest(object):
         :type json: str
         :type timeout: float or tuple
         :type enable_logging: bool
-        :return: Status code and content of response.
+        :returns: Status code and content of response.
         :rtype: tuple
         """
         return HTTPRequest._http_request('POST', node, path,
@@ -317,17 +317,17 @@ class HTTPRequest(object):
 
     @staticmethod
     @keyword(name="HTTP Delete")
-    def delete(node, path, timeout=10):
+    def delete(node, path, timeout=15):
         """Sends a DELETE request and returns the response and status code.
 
         :param node: Honeycomb node.
         :param path: URL path, e.g. /index.html.
         :param timeout: How long to wait for the server to send data before
-        giving up, as a float, or a (connect timeout, read timeout) tuple.
+            giving up, as a float, or a (connect timeout, read timeout) tuple.
         :type node: dict
         :type path: str
         :type timeout: float or tuple
-        :return: Status code and content of response.
+        :returns: Status code and content of response.
         :rtype: tuple
         """
         return HTTPRequest._http_request('DELETE', node, path, timeout=timeout)