send_binary_data_over_ssl keyword added to SocketKeywords.py 89/92689/2
authormarekpl <marek.pondel@nokia.com>
Mon, 5 Aug 2019 14:17:22 +0000 (16:17 +0200)
committermarekpl <marek.pondel@nokia.com>
Tue, 6 Aug 2019 11:23:04 +0000 (13:23 +0200)
send_binary_data_over_ssl keyword added to SocketKeywords.py

Issue-ID: DCAEGEN2-565
Signed-off-by: marekpl <marek.pondel@nokia.com>
Change-Id: Icdb36610a78f955f0ffe0db2ce6e23be9727401d

robotframework-onap/ONAPLibrary/SocketKeywords.py

index 08a3fc7..2999880 100644 (file)
@@ -1,4 +1,4 @@
-import socket
+import socket, ssl
 from robot.api.deco import keyword
 
 
@@ -9,10 +9,28 @@ class SocketKeywords(object):
         super(SocketKeywords, self).__init__()
 
     @keyword
-    def send_binary_data(self, host, port, data):
-        """ send raw bytes over tcp socket"""
-        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        # Connect to server and send data
-        sock.connect((host, int(port)))
-        sock.sendall(bytes(data))
-        sock.close()
+    def send_binary_data(self, host, port, data, ssl_enabled=None, cert_required=None, ca=None, cert=None, key=None):
+        """ send raw bytes over tcp socket with optional ssl """
+        if ssl_enabled:
+            if cert_required:
+                context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
+                context.verify_mode = ssl.CERT_REQUIRED
+                # Load CA cert
+                context.load_verify_locations(str(ca))
+                # Load Client cert and key
+                context.load_cert_chain(str(cert), str(key))
+            else:
+                context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
+                context.verify_mode = ssl.CERT_OPTIONAL
+            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            ssock = context.wrap_socket(sock, server_hostname=str(host))
+            # Connect to server over ssl and send data
+            ssock.connect((str(host), int(port)))
+            ssock.sendall(bytes(data))
+            ssock.close()
+        else:
+            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            # Connect to server and send data
+            sock.connect((str(host), int(port)))
+            sock.sendall(bytes(data))
+            sock.close()