From 22337773f750cc403c9ab4e83323168ee012fb67 Mon Sep 17 00:00:00 2001 From: Marco Platania Date: Tue, 3 Apr 2018 16:52:13 -0400 Subject: Update docker version numbers in Manifest file Change-Id: I17d617d5dfa060441b4a143066b62537066c018e Issue-ID: INT-444 Signed-off-by: Marco Platania --- .../tests/dcaegen2/testcases/resources/DMaaP.py | 844 ++++++++++----------- .../dcaegen2/testcases/resources/DcaeLibrary.py | 318 ++++---- .../testcases/resources/dcae_keywords.robot | 266 +++---- .../testcases/resources/dcae_properties.robot | 30 +- test/csit/tests/vfc/nfvo-wfengine/workflow.robot | 226 +++--- 5 files changed, 842 insertions(+), 842 deletions(-) (limited to 'test') diff --git a/test/csit/tests/dcaegen2/testcases/resources/DMaaP.py b/test/csit/tests/dcaegen2/testcases/resources/DMaaP.py index 63e4e8c6b..db59557db 100644 --- a/test/csit/tests/dcaegen2/testcases/resources/DMaaP.py +++ b/test/csit/tests/dcaegen2/testcases/resources/DMaaP.py @@ -1,423 +1,423 @@ -''' -Created on Aug 15, 2017 - -@author: sw6830 -''' -import os -import posixpath -import BaseHTTPServer -import urllib -import urlparse -import cgi, sys, shutil, mimetypes -from jsonschema import validate -import jsonschema, json -import DcaeVariables -import SimpleHTTPServer -from robot.api import logger - - -try: - from cStringIO import StringIO -except ImportError: - from StringIO import StringIO - -EvtSchema = None -DMaaPHttpd = None - - -def cleanUpEvent(): - sz = DcaeVariables.VESEventQ.qsize() - for i in range(sz): - try: - self.evtQueue.get_nowait() - except: - pass - -def enqueEvent(evt): - if DcaeVariables.VESEventQ != None: - try: - DcaeVariables.VESEventQ.put(evt) - if DcaeVariables.IsRobotRun: - logger.console("DMaaP Event enqued - size=" + str(len(evt))) - else: - print ("DMaaP Event enqueued - size=" + str(len(evt))) - return True - except Exception as e: - print (str(e)) - return False - return False - -def dequeEvent(waitSec=25): - if DcaeVariables.IsRobotRun: - logger.console("Enter DequeEvent") - try: - evt = DcaeVariables.VESEventQ.get(True, waitSec) - if DcaeVariables.IsRobotRun: - logger.console("DMaaP Event dequeued - size=" + str(len(evt))) - else: - print("DMaaP Event dequeued - size=" + str(len(evt))) - return evt - except Exception as e: - if DcaeVariables.IsRobotRun: - logger.console(str(e)) - logger.console("DMaaP Event dequeue timeout") - else: - print("DMaaP Event dequeue timeout") - return None - -class DMaaPHandler(BaseHTTPServer.BaseHTTPRequestHandler): - - def do_PUT(self): - self.send_response(405) - return - - def do_POST(self): - - respCode = 0 - # Parse the form data posted - ''' - form = cgi.FieldStorage( - fp=self.rfile, - headers=self.headers, - environ={'REQUEST_METHOD':'POST', - 'CONTENT_TYPE':self.headers['Content-Type'], - }) - - - form = cgi.FieldStorage( - fp=self.rfile, - headers=self.headers, - environ={"REQUEST_METHOD": "POST"}) - - for item in form.list: - print "%s=%s" % (item.name, item.value) - - ''' - - if 'POST' not in self.requestline: - respCode = 405 - - ''' - if respCode == 0: - if '/eventlistener/v5' not in self.requestline and '/eventlistener/v5/eventBatch' not in self.requestline and \ - '/eventlistener/v5/clientThrottlingState' not in self.requestline: - respCode = 404 - - - if respCode == 0: - if 'Y29uc29sZTpaakprWWpsbE1qbGpNVEkyTTJJeg==' not in str(self.headers): - respCode = 401 - ''' - - if respCode == 0: - content_len = int(self.headers.getheader('content-length', 0)) - post_body = self.rfile.read(content_len) - - if DcaeVariables.IsRobotRun: - logger.console("\n" + "DMaaP Receive Event:\n" + post_body) - else: - print("\n" + "DMaaP Receive Event:") - print (post_body) - - indx = post_body.index("{") - if indx != 0: - post_body = post_body[indx:] - - if enqueEvent(post_body) == False: - print "enque event fails" - - global EvtSchema - try: - if EvtSchema == None: - with open(DcaeVariables.CommonEventSchemaV5) as file: - EvtSchema = json.load(file) - decoded_body = json.loads(post_body) - jsonschema.validate(decoded_body, EvtSchema) - except: - respCode = 400 - - # Begin the response - if DcaeVariables.IsRobotRun == False: - print ("Response Message:") - - ''' - { - "200" : { - "description" : "Success", - "schema" : { - "$ref" : "#/definitions/DR_Pub" - } - } - - rspStr = "{'responses' : {'200' : {'description' : 'Success'}}}" - rspStr1 = "{'count': 1, 'serverTimeMs': 3}" - - ''' - - if respCode == 0: - if 'clientThrottlingState' in self.requestline: - self.send_response(204) - else: - self.send_response(200) - self.send_header('Content-Type', 'application/json') - self.end_headers() - #self.wfile.write("{'responses' : {'200' : {'description' : 'Success'}}}") - self.wfile.write("{'count': 1, 'serverTimeMs': 3}") - self.wfile.close() - else: - self.send_response(respCode) - - ''' - self.end_headers() - self.wfile.write('Client: %s\n' % str(self.client_address)) - self.wfile.write('User-agent: %s\n' % str(self.headers['user-agent'])) - self.wfile.write('Path: %s\n' % self.path) - self.wfile.write('Form data:\n') - self.wfile.close() - - # Echo back information about what was posted in the form - for field in form.keys(): - field_item = form[field] - if field_item.filename: - # The field contains an uploaded file - file_data = field_item.file.read() - file_len = len(file_data) - del file_data - self.wfile.write('\tUploaded %s as "%s" (%d bytes)\n' % \ - (field, field_item.filename, file_len)) - else: - # Regular form value - self.wfile.write('\t%s=%s\n' % (field, form[field].value)) - ''' - return - - - def do_GET(self): - """Serve a GET request.""" - f = self.send_head() - if f: - try: - self.copyfile(f, self.wfile) - finally: - f.close() - - def do_HEAD(self): - """Serve a HEAD request.""" - f = self.send_head() - if f: - f.close() - - def send_head(self): - """Common code for GET and HEAD commands. - - This sends the response code and MIME headers. - - Return value is either a file object (which has to be copied - to the outputfile by the caller unless the command was HEAD, - and must be closed by the caller under all circumstances), or - None, in which case the caller has nothing further to do. - - """ - path = self.translate_path(self.path) - f = None - if os.path.isdir(path): - parts = urlparse.urlsplit(self.path) - if not parts.path.endswith('/'): - # redirect browser - doing basically what apache does - self.send_response(301) - new_parts = (parts[0], parts[1], parts[2] + '/', - parts[3], parts[4]) - new_url = urlparse.urlunsplit(new_parts) - self.send_header("Location", new_url) - self.end_headers() - return None - for index in "index.html", "index.htm": - index = os.path.join(path, index) - if os.path.exists(index): - path = index - break - else: - return self.list_directory(path) - ctype = self.guess_type(path) - try: - # Always read in binary mode. Opening files in text mode may cause - # newline translations, making the actual size of the content - # transmitted *less* than the content-length! - f = open(path, 'rb') - except IOError: - self.send_error(404, "File not found") - return None - try: - self.send_response(200) - self.send_header("Content-type", ctype) - fs = os.fstat(f.fileno()) - self.send_header("Content-Length", str(fs[6])) - self.send_header("Last-Modified", self.date_time_string(fs.st_mtime)) - self.end_headers() - return f - except: - f.close() - raise - - def list_directory(self, path): - """Helper to produce a directory listing (absent index.html). - - Return value is either a file object, or None (indicating an - error). In either case, the headers are sent, making the - interface the same as for send_head(). - - """ - try: - list = os.listdir(path) - except os.error: - self.send_error(404, "No permission to list directory") - return None - list.sort(key=lambda a: a.lower()) - f = StringIO() - displaypath = cgi.escape(urllib.unquote(self.path)) - f.write('') - f.write("\nDirectory listing for %s\n" % displaypath) - f.write("\n

Directory listing for %s

\n" % displaypath) - f.write("
\n\n
\n\n\n") - length = f.tell() - f.seek(0) - self.send_response(200) - encoding = sys.getfilesystemencoding() - self.send_header("Content-type", "text/html; charset=%s" % encoding) - self.send_header("Content-Length", str(length)) - self.end_headers() - return f - - def translate_path(self, path): - """Translate a /-separated PATH to the local filename syntax. - - Components that mean special things to the local file system - (e.g. drive or directory names) are ignored. (XXX They should - probably be diagnosed.) - - """ - # abandon query parameters - path = path.split('?',1)[0] - path = path.split('#',1)[0] - # Don't forget explicit trailing slash when normalizing. Issue17324 - trailing_slash = path.rstrip().endswith('/') - path = posixpath.normpath(urllib.unquote(path)) - words = path.split('/') - words = filter(None, words) - path = os.getcwd() - for word in words: - if os.path.dirname(word) or word in (os.curdir, os.pardir): - # Ignore components that are not a simple file/directory name - continue - path = os.path.join(path, word) - if trailing_slash: - path += '/' - return path - - def copyfile(self, source, outputfile): - """Copy all data between two file objects. - - The SOURCE argument is a file object open for reading - (or anything with a read() method) and the DESTINATION - argument is a file object open for writing (or - anything with a write() method). - - The only reason for overriding this would be to change - the block size or perhaps to replace newlines by CRLF - -- note however that this the default server uses this - to copy binary data as well. - - """ - shutil.copyfileobj(source, outputfile) - - def guess_type(self, path): - """Guess the type of a file. - - Argument is a PATH (a filename). - - Return value is a string of the form type/subtype, - usable for a MIME Content-type header. - - The default implementation looks the file's extension - up in the table self.extensions_map, using application/octet-stream - as a default; however it would be permissible (if - slow) to look inside the data to make a better guess. - - """ - - base, ext = posixpath.splitext(path) - if ext in self.extensions_map: - return self.extensions_map[ext] - ext = ext.lower() - if ext in self.extensions_map: - return self.extensions_map[ext] - else: - return self.extensions_map[''] - - if not mimetypes.inited: - mimetypes.init() # try to read system mime.types - extensions_map = mimetypes.types_map.copy() - extensions_map.update({ - '': 'application/octet-stream', # Default - '.py': 'text/plain', - '.c': 'text/plain', - '.h': 'text/plain', - }) - -def test(HandlerClass = DMaaPHandler, - ServerClass = BaseHTTPServer.HTTPServer, protocol="HTTP/1.0", port=3904): - print "Load event schema file: " + DcaeVariables.CommonEventSchemaV5 - with open(DcaeVariables.CommonEventSchemaV5) as file: - global EvtSchema - EvtSchema = json.load(file) - - server_address = ('', port) - - HandlerClass.protocol_version = protocol - httpd = ServerClass(server_address, HandlerClass) - - global DMaaPHttpd - DMaaPHttpd = httpd - DcaeVariables.HTTPD = httpd - - sa = httpd.socket.getsockname() - print "Serving HTTP on", sa[0], "port", sa[1], "..." - #httpd.serve_forever() - -def _main_ (HandlerClass = DMaaPHandler, - ServerClass = BaseHTTPServer.HTTPServer, protocol="HTTP/1.0"): - - if sys.argv[1:]: - port = int(sys.argv[1]) - else: - port = 3904 - - print "Load event schema file: " + DcaeVariables.CommonEventSchemaV5 - with open(DcaeVariables.CommonEventSchemaV5) as file: - global EvtSchema - EvtSchema = json.load(file) - - server_address = ('', port) - - HandlerClass.protocol_version = protocol - httpd = ServerClass(server_address, HandlerClass) - - sa = httpd.socket.getsockname() - print "Serving HTTP on", sa[0], "port", sa[1], "..." - httpd.serve_forever() - -if __name__ == '__main__': +''' +Created on Aug 15, 2017 + +@author: sw6830 +''' +import os +import posixpath +import BaseHTTPServer +import urllib +import urlparse +import cgi, sys, shutil, mimetypes +from jsonschema import validate +import jsonschema, json +import DcaeVariables +import SimpleHTTPServer +from robot.api import logger + + +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO + +EvtSchema = None +DMaaPHttpd = None + + +def cleanUpEvent(): + sz = DcaeVariables.VESEventQ.qsize() + for i in range(sz): + try: + self.evtQueue.get_nowait() + except: + pass + +def enqueEvent(evt): + if DcaeVariables.VESEventQ != None: + try: + DcaeVariables.VESEventQ.put(evt) + if DcaeVariables.IsRobotRun: + logger.console("DMaaP Event enqued - size=" + str(len(evt))) + else: + print ("DMaaP Event enqueued - size=" + str(len(evt))) + return True + except Exception as e: + print (str(e)) + return False + return False + +def dequeEvent(waitSec=25): + if DcaeVariables.IsRobotRun: + logger.console("Enter DequeEvent") + try: + evt = DcaeVariables.VESEventQ.get(True, waitSec) + if DcaeVariables.IsRobotRun: + logger.console("DMaaP Event dequeued - size=" + str(len(evt))) + else: + print("DMaaP Event dequeued - size=" + str(len(evt))) + return evt + except Exception as e: + if DcaeVariables.IsRobotRun: + logger.console(str(e)) + logger.console("DMaaP Event dequeue timeout") + else: + print("DMaaP Event dequeue timeout") + return None + +class DMaaPHandler(BaseHTTPServer.BaseHTTPRequestHandler): + + def do_PUT(self): + self.send_response(405) + return + + def do_POST(self): + + respCode = 0 + # Parse the form data posted + ''' + form = cgi.FieldStorage( + fp=self.rfile, + headers=self.headers, + environ={'REQUEST_METHOD':'POST', + 'CONTENT_TYPE':self.headers['Content-Type'], + }) + + + form = cgi.FieldStorage( + fp=self.rfile, + headers=self.headers, + environ={"REQUEST_METHOD": "POST"}) + + for item in form.list: + print "%s=%s" % (item.name, item.value) + + ''' + + if 'POST' not in self.requestline: + respCode = 405 + + ''' + if respCode == 0: + if '/eventlistener/v5' not in self.requestline and '/eventlistener/v5/eventBatch' not in self.requestline and \ + '/eventlistener/v5/clientThrottlingState' not in self.requestline: + respCode = 404 + + + if respCode == 0: + if 'Y29uc29sZTpaakprWWpsbE1qbGpNVEkyTTJJeg==' not in str(self.headers): + respCode = 401 + ''' + + if respCode == 0: + content_len = int(self.headers.getheader('content-length', 0)) + post_body = self.rfile.read(content_len) + + if DcaeVariables.IsRobotRun: + logger.console("\n" + "DMaaP Receive Event:\n" + post_body) + else: + print("\n" + "DMaaP Receive Event:") + print (post_body) + + indx = post_body.index("{") + if indx != 0: + post_body = post_body[indx:] + + if enqueEvent(post_body) == False: + print "enque event fails" + + global EvtSchema + try: + if EvtSchema == None: + with open(DcaeVariables.CommonEventSchemaV5) as file: + EvtSchema = json.load(file) + decoded_body = json.loads(post_body) + jsonschema.validate(decoded_body, EvtSchema) + except: + respCode = 400 + + # Begin the response + if DcaeVariables.IsRobotRun == False: + print ("Response Message:") + + ''' + { + "200" : { + "description" : "Success", + "schema" : { + "$ref" : "#/definitions/DR_Pub" + } + } + + rspStr = "{'responses' : {'200' : {'description' : 'Success'}}}" + rspStr1 = "{'count': 1, 'serverTimeMs': 3}" + + ''' + + if respCode == 0: + if 'clientThrottlingState' in self.requestline: + self.send_response(204) + else: + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + #self.wfile.write("{'responses' : {'200' : {'description' : 'Success'}}}") + self.wfile.write("{'count': 1, 'serverTimeMs': 3}") + self.wfile.close() + else: + self.send_response(respCode) + + ''' + self.end_headers() + self.wfile.write('Client: %s\n' % str(self.client_address)) + self.wfile.write('User-agent: %s\n' % str(self.headers['user-agent'])) + self.wfile.write('Path: %s\n' % self.path) + self.wfile.write('Form data:\n') + self.wfile.close() + + # Echo back information about what was posted in the form + for field in form.keys(): + field_item = form[field] + if field_item.filename: + # The field contains an uploaded file + file_data = field_item.file.read() + file_len = len(file_data) + del file_data + self.wfile.write('\tUploaded %s as "%s" (%d bytes)\n' % \ + (field, field_item.filename, file_len)) + else: + # Regular form value + self.wfile.write('\t%s=%s\n' % (field, form[field].value)) + ''' + return + + + def do_GET(self): + """Serve a GET request.""" + f = self.send_head() + if f: + try: + self.copyfile(f, self.wfile) + finally: + f.close() + + def do_HEAD(self): + """Serve a HEAD request.""" + f = self.send_head() + if f: + f.close() + + def send_head(self): + """Common code for GET and HEAD commands. + + This sends the response code and MIME headers. + + Return value is either a file object (which has to be copied + to the outputfile by the caller unless the command was HEAD, + and must be closed by the caller under all circumstances), or + None, in which case the caller has nothing further to do. + + """ + path = self.translate_path(self.path) + f = None + if os.path.isdir(path): + parts = urlparse.urlsplit(self.path) + if not parts.path.endswith('/'): + # redirect browser - doing basically what apache does + self.send_response(301) + new_parts = (parts[0], parts[1], parts[2] + '/', + parts[3], parts[4]) + new_url = urlparse.urlunsplit(new_parts) + self.send_header("Location", new_url) + self.end_headers() + return None + for index in "index.html", "index.htm": + index = os.path.join(path, index) + if os.path.exists(index): + path = index + break + else: + return self.list_directory(path) + ctype = self.guess_type(path) + try: + # Always read in binary mode. Opening files in text mode may cause + # newline translations, making the actual size of the content + # transmitted *less* than the content-length! + f = open(path, 'rb') + except IOError: + self.send_error(404, "File not found") + return None + try: + self.send_response(200) + self.send_header("Content-type", ctype) + fs = os.fstat(f.fileno()) + self.send_header("Content-Length", str(fs[6])) + self.send_header("Last-Modified", self.date_time_string(fs.st_mtime)) + self.end_headers() + return f + except: + f.close() + raise + + def list_directory(self, path): + """Helper to produce a directory listing (absent index.html). + + Return value is either a file object, or None (indicating an + error). In either case, the headers are sent, making the + interface the same as for send_head(). + + """ + try: + list = os.listdir(path) + except os.error: + self.send_error(404, "No permission to list directory") + return None + list.sort(key=lambda a: a.lower()) + f = StringIO() + displaypath = cgi.escape(urllib.unquote(self.path)) + f.write('') + f.write("\nDirectory listing for %s\n" % displaypath) + f.write("\n

Directory listing for %s

\n" % displaypath) + f.write("
\n\n
\n\n\n") + length = f.tell() + f.seek(0) + self.send_response(200) + encoding = sys.getfilesystemencoding() + self.send_header("Content-type", "text/html; charset=%s" % encoding) + self.send_header("Content-Length", str(length)) + self.end_headers() + return f + + def translate_path(self, path): + """Translate a /-separated PATH to the local filename syntax. + + Components that mean special things to the local file system + (e.g. drive or directory names) are ignored. (XXX They should + probably be diagnosed.) + + """ + # abandon query parameters + path = path.split('?',1)[0] + path = path.split('#',1)[0] + # Don't forget explicit trailing slash when normalizing. Issue17324 + trailing_slash = path.rstrip().endswith('/') + path = posixpath.normpath(urllib.unquote(path)) + words = path.split('/') + words = filter(None, words) + path = os.getcwd() + for word in words: + if os.path.dirname(word) or word in (os.curdir, os.pardir): + # Ignore components that are not a simple file/directory name + continue + path = os.path.join(path, word) + if trailing_slash: + path += '/' + return path + + def copyfile(self, source, outputfile): + """Copy all data between two file objects. + + The SOURCE argument is a file object open for reading + (or anything with a read() method) and the DESTINATION + argument is a file object open for writing (or + anything with a write() method). + + The only reason for overriding this would be to change + the block size or perhaps to replace newlines by CRLF + -- note however that this the default server uses this + to copy binary data as well. + + """ + shutil.copyfileobj(source, outputfile) + + def guess_type(self, path): + """Guess the type of a file. + + Argument is a PATH (a filename). + + Return value is a string of the form type/subtype, + usable for a MIME Content-type header. + + The default implementation looks the file's extension + up in the table self.extensions_map, using application/octet-stream + as a default; however it would be permissible (if + slow) to look inside the data to make a better guess. + + """ + + base, ext = posixpath.splitext(path) + if ext in self.extensions_map: + return self.extensions_map[ext] + ext = ext.lower() + if ext in self.extensions_map: + return self.extensions_map[ext] + else: + return self.extensions_map[''] + + if not mimetypes.inited: + mimetypes.init() # try to read system mime.types + extensions_map = mimetypes.types_map.copy() + extensions_map.update({ + '': 'application/octet-stream', # Default + '.py': 'text/plain', + '.c': 'text/plain', + '.h': 'text/plain', + }) + +def test(HandlerClass = DMaaPHandler, + ServerClass = BaseHTTPServer.HTTPServer, protocol="HTTP/1.0", port=3904): + print "Load event schema file: " + DcaeVariables.CommonEventSchemaV5 + with open(DcaeVariables.CommonEventSchemaV5) as file: + global EvtSchema + EvtSchema = json.load(file) + + server_address = ('', port) + + HandlerClass.protocol_version = protocol + httpd = ServerClass(server_address, HandlerClass) + + global DMaaPHttpd + DMaaPHttpd = httpd + DcaeVariables.HTTPD = httpd + + sa = httpd.socket.getsockname() + print "Serving HTTP on", sa[0], "port", sa[1], "..." + #httpd.serve_forever() + +def _main_ (HandlerClass = DMaaPHandler, + ServerClass = BaseHTTPServer.HTTPServer, protocol="HTTP/1.0"): + + if sys.argv[1:]: + port = int(sys.argv[1]) + else: + port = 3904 + + print "Load event schema file: " + DcaeVariables.CommonEventSchemaV5 + with open(DcaeVariables.CommonEventSchemaV5) as file: + global EvtSchema + EvtSchema = json.load(file) + + server_address = ('', port) + + HandlerClass.protocol_version = protocol + httpd = ServerClass(server_address, HandlerClass) + + sa = httpd.socket.getsockname() + print "Serving HTTP on", sa[0], "port", sa[1], "..." + httpd.serve_forever() + +if __name__ == '__main__': _main_() \ No newline at end of file diff --git a/test/csit/tests/dcaegen2/testcases/resources/DcaeLibrary.py b/test/csit/tests/dcaegen2/testcases/resources/DcaeLibrary.py index 0242ad7ab..e581f1b2c 100644 --- a/test/csit/tests/dcaegen2/testcases/resources/DcaeLibrary.py +++ b/test/csit/tests/dcaegen2/testcases/resources/DcaeLibrary.py @@ -1,159 +1,159 @@ -''' -Created on Aug 18, 2017 - -@author: sw6830 -''' -from robot.api import logger -from Queue import Queue -import uuid, time, datetime,json, threading,os, platform, subprocess,paramiko -import DcaeVariables -import DMaaP - -class DcaeLibrary(object): - - def __init__(self): - pass - - def setup_dmaap_server(self, portNum=3904): - if DcaeVariables.HttpServerThread != None: - DMaaP.cleanUpEvent() - logger.console("Clean up event from event queue before test") - logger.info("DMaaP Server already started") - return "true" - - DcaeVariables.IsRobotRun = True - DMaaP.test(port=portNum) - try: - DcaeVariables.VESEventQ = Queue() - DcaeVariables.HttpServerThread = threading.Thread(name='DMAAP_HTTPServer', target=DMaaP.DMaaPHttpd.serve_forever) - DcaeVariables.HttpServerThread.start() - logger.console("DMaaP Mockup Sever started") - time.sleep(2) - return "true" - except Exception as e: - print (str(e)) - return "false" - - def shutdown_dmaap(self): - if DcaeVariables.HTTPD != None: - DcaeVariables.HTTPD.shutdown() - logger.console("DMaaP Server shut down") - time.sleep(3) - return "true" - else: - return "false" - - def cleanup_ves_events(self): - if DcaeVariables.HttpServerThread != None: - DMaaP.cleanUpEvent() - logger.console("DMaaP event queue is cleaned up") - return "true" - logger.console("DMaaP server not started yet") - return "false" - - def enable_vesc_https_auth(self): - if 'Windows' in platform.system(): - try: - client = paramiko.SSHClient() - client.load_system_host_keys() - #client.set_missing_host_key_policy(paramiko.WarningPolicy) - client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - - client.connect(os.environ['CSIT_IP'], port=22, username=os.environ['CSIT_USER'], password=os.environ['CSIT_PD']) - stdin, stdout, stderr = client.exec_command('%{WORKSPACE}/test/csit/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh') - logger.console(stdout.read()) - finally: - client.close() - return - ws = os.environ['WORKSPACE'] - script2run = ws + "/test/csit/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh" - logger.info("Running script: " + script2run) - logger.console("Running script: " + script2run) - subprocess.call(script2run) - time.sleep(5) - return - - def dmaap_message_receive(self, evtobj, action='contain'): - - evtStr = DMaaP.dequeEvent() - while evtStr != None: - logger.console("DMaaP receive VES Event:\n" + evtStr) - if action == 'contain': - if evtobj in evtStr: - logger.info("DMaaP Receive Expected Publish Event:\n" + evtStr) - return 'true' - if action == 'sizematch': - if len(evtobj) == len(evtStr): - return 'true' - if action == 'dictmatch': - evtDict = json.loads(evtStr) - if cmp(evtobj, evtDict) == 0: - return 'true' - evtStr = DMaaP.dequeEvent() - return 'false' - - def create_header_from_string(self, dictStr): - logger.info("Enter create_header_from_string: dictStr") - return dict(u.split("=") for u in dictStr.split(",")) - - def is_json_empty(self, resp): - logger.info("Enter is_json_empty: resp.text: " + resp.text) - if resp.text == None or len(resp.text) < 2: - return 'True' - return 'False' - - def Generate_UUID(self): - """generate a uuid""" - return uuid.uuid4() - - def get_json_value_list(self, jsonstr, keyval): - logger.info("Enter Get_Json_Key_Value_List") - if jsonstr == None or len(jsonstr) < 2: - logger.info("No Json data found") - return [] - try: - data = json.loads(jsonstr) - nodelist = [] - for item in data: - nodelist.append(item[keyval]) - return nodelist - except Exception as e: - logger.info("Json data parsing fails") - print str(e) - return [] - - def generate_MilliTimestamp_UUID(self): - """generate a millisecond timestamp uuid""" - then = datetime.datetime.now() - return int(time.mktime(then.timetuple())*1e3 + then.microsecond/1e3) - - def test (self): - import json - from pprint import pprint - - with open('robot/assets/dcae/ves_volte_single_fault_event.json') as data_file: - data = json.load(data_file) - - data['event']['commonEventHeader']['version'] = '5.0' - pprint(data) - - - -if __name__ == '__main__': - ''' - dictStr = "action=getTable,Accept=application/json,Content-Type=application/json,X-FromAppId=1234908903284" - cls = DcaeLibrary() - #dict = cls.create_header_from_string(dictStr) - #print str(dict) - jsonStr = "[{'Node': 'onapfcnsl00', 'CheckID': 'serfHealth', 'Name': 'Serf Health Status', 'ServiceName': '', 'Notes': '', 'ModifyIndex': 6, 'Status': 'passing', 'ServiceID': '', 'ServiceTags': [], 'Output': 'Agent alive and reachable', 'CreateIndex': 6}]" - lsObj = cls.get_json_value_list(jsonStr, 'Status') - print lsObj - ''' - - lib = DcaeLibrary() - lib.enable_vesc_https_auth() - - ret = lib.setup_dmaap_server() - print ret - time.sleep(100000) - +''' +Created on Aug 18, 2017 + +@author: sw6830 +''' +from robot.api import logger +from Queue import Queue +import uuid, time, datetime,json, threading,os, platform, subprocess,paramiko +import DcaeVariables +import DMaaP + +class DcaeLibrary(object): + + def __init__(self): + pass + + def setup_dmaap_server(self, portNum=3904): + if DcaeVariables.HttpServerThread != None: + DMaaP.cleanUpEvent() + logger.console("Clean up event from event queue before test") + logger.info("DMaaP Server already started") + return "true" + + DcaeVariables.IsRobotRun = True + DMaaP.test(port=portNum) + try: + DcaeVariables.VESEventQ = Queue() + DcaeVariables.HttpServerThread = threading.Thread(name='DMAAP_HTTPServer', target=DMaaP.DMaaPHttpd.serve_forever) + DcaeVariables.HttpServerThread.start() + logger.console("DMaaP Mockup Sever started") + time.sleep(2) + return "true" + except Exception as e: + print (str(e)) + return "false" + + def shutdown_dmaap(self): + if DcaeVariables.HTTPD != None: + DcaeVariables.HTTPD.shutdown() + logger.console("DMaaP Server shut down") + time.sleep(3) + return "true" + else: + return "false" + + def cleanup_ves_events(self): + if DcaeVariables.HttpServerThread != None: + DMaaP.cleanUpEvent() + logger.console("DMaaP event queue is cleaned up") + return "true" + logger.console("DMaaP server not started yet") + return "false" + + def enable_vesc_https_auth(self): + if 'Windows' in platform.system(): + try: + client = paramiko.SSHClient() + client.load_system_host_keys() + #client.set_missing_host_key_policy(paramiko.WarningPolicy) + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + + client.connect(os.environ['CSIT_IP'], port=22, username=os.environ['CSIT_USER'], password=os.environ['CSIT_PD']) + stdin, stdout, stderr = client.exec_command('%{WORKSPACE}/test/csit/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh') + logger.console(stdout.read()) + finally: + client.close() + return + ws = os.environ['WORKSPACE'] + script2run = ws + "/test/csit/tests/dcaegen2/testcases/resources/vesc_enable_https_auth.sh" + logger.info("Running script: " + script2run) + logger.console("Running script: " + script2run) + subprocess.call(script2run) + time.sleep(5) + return + + def dmaap_message_receive(self, evtobj, action='contain'): + + evtStr = DMaaP.dequeEvent() + while evtStr != None: + logger.console("DMaaP receive VES Event:\n" + evtStr) + if action == 'contain': + if evtobj in evtStr: + logger.info("DMaaP Receive Expected Publish Event:\n" + evtStr) + return 'true' + if action == 'sizematch': + if len(evtobj) == len(evtStr): + return 'true' + if action == 'dictmatch': + evtDict = json.loads(evtStr) + if cmp(evtobj, evtDict) == 0: + return 'true' + evtStr = DMaaP.dequeEvent() + return 'false' + + def create_header_from_string(self, dictStr): + logger.info("Enter create_header_from_string: dictStr") + return dict(u.split("=") for u in dictStr.split(",")) + + def is_json_empty(self, resp): + logger.info("Enter is_json_empty: resp.text: " + resp.text) + if resp.text == None or len(resp.text) < 2: + return 'True' + return 'False' + + def Generate_UUID(self): + """generate a uuid""" + return uuid.uuid4() + + def get_json_value_list(self, jsonstr, keyval): + logger.info("Enter Get_Json_Key_Value_List") + if jsonstr == None or len(jsonstr) < 2: + logger.info("No Json data found") + return [] + try: + data = json.loads(jsonstr) + nodelist = [] + for item in data: + nodelist.append(item[keyval]) + return nodelist + except Exception as e: + logger.info("Json data parsing fails") + print str(e) + return [] + + def generate_MilliTimestamp_UUID(self): + """generate a millisecond timestamp uuid""" + then = datetime.datetime.now() + return int(time.mktime(then.timetuple())*1e3 + then.microsecond/1e3) + + def test (self): + import json + from pprint import pprint + + with open('robot/assets/dcae/ves_volte_single_fault_event.json') as data_file: + data = json.load(data_file) + + data['event']['commonEventHeader']['version'] = '5.0' + pprint(data) + + + +if __name__ == '__main__': + ''' + dictStr = "action=getTable,Accept=application/json,Content-Type=application/json,X-FromAppId=1234908903284" + cls = DcaeLibrary() + #dict = cls.create_header_from_string(dictStr) + #print str(dict) + jsonStr = "[{'Node': 'onapfcnsl00', 'CheckID': 'serfHealth', 'Name': 'Serf Health Status', 'ServiceName': '', 'Notes': '', 'ModifyIndex': 6, 'Status': 'passing', 'ServiceID': '', 'ServiceTags': [], 'Output': 'Agent alive and reachable', 'CreateIndex': 6}]" + lsObj = cls.get_json_value_list(jsonStr, 'Status') + print lsObj + ''' + + lib = DcaeLibrary() + lib.enable_vesc_https_auth() + + ret = lib.setup_dmaap_server() + print ret + time.sleep(100000) + diff --git a/test/csit/tests/dcaegen2/testcases/resources/dcae_keywords.robot b/test/csit/tests/dcaegen2/testcases/resources/dcae_keywords.robot index 59d44e158..98b341529 100644 --- a/test/csit/tests/dcaegen2/testcases/resources/dcae_keywords.robot +++ b/test/csit/tests/dcaegen2/testcases/resources/dcae_keywords.robot @@ -1,133 +1,133 @@ - *** Settings *** -Documentation The main interface for interacting with DCAE. It handles low level stuff like managing the http request library and DCAE required fields -Library RequestsLibrary -Library DcaeLibrary -Library OperatingSystem -Library Collections -Variables ../resources/DcaeVariables.py -Resource ../resources/dcae_properties.robot -*** Variables *** -${DCAE_HEALTH_CHECK_BODY} %{WORKSPACE}/test/csit/tests/dcae/testcases/assets/json_events/dcae_healthcheck.json -*** Keywords *** -Get DCAE Nodes - [Documentation] Get DCAE Nodes from Consul Catalog - #Log Creating session ${GLOBAL_DCAE_CONSUL_URL} - ${session}= Create Session dcae ${GLOBAL_DCAE_CONSUL_URL} - ${uuid}= Generate UUID - ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-Consul-Token=abcd1234 X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} - ${resp}= Get Request dcae /v1/catalog/nodes headers=${headers} - Log Received response from dcae consul: ${resp.json()} - Should Be Equal As Strings ${resp.status_code} 200 - ${NodeList}= Get Json Value List ${resp.text} Node - ${NodeListLength}= Get Length ${NodeList} - ${len}= Get Length ${NodeList} - Should Not Be Equal As Integers ${len} 0 - [return] ${NodeList} -DCAE Node Health Check - [Documentation] Perform DCAE Node Health Check - [Arguments] ${NodeName} - ${session}= Create Session dcae-${NodeName} ${GLOBAL_DCAE_CONSUL_URL} - ${uuid}= Generate UUID - ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-Consul-Token=abcd1234 X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} - ${hcpath}= Catenate SEPARATOR= /v1/health/node/ ${NodeName} - ${resp}= Get Request dcae-${NodeName} ${hcpath} headers=${headers} - Log Received response from dcae consul: ${resp.json()} - Should Be Equal As Strings ${resp.status_code} 200 - ${StatusList}= Get Json Value List ${resp.text} Status - ${len}= Get Length ${StatusList} - Should Not Be Equal As Integers ${len} 0 - DCAE Check Health Status ${NodeName} ${StatusList[0]} Serf Health Status - #Run Keyword if ${len} > 1 DCAE Check Health Status ${NodeName} ${StatusList[1]} Serf Health Status -DCAE Check Health Status - [Arguments] ${NodeName} ${ItemStatus} ${CheckType} - Should Be Equal As Strings ${ItemStatus} passing - Log Node: ${NodeName} ${CheckType} check pass ok -VES Collector Suite Setup DMaaP - [Documentation] Start DMaaP Mockup Server - ${ret}= Setup DMaaP Server - Should Be Equal As Strings ${ret} true -VES Collector Suite Shutdown DMaaP - [Documentation] Shutdown DMaaP Mockup Server - ${ret}= Shutdown DMaap - Should Be Equal As Strings ${ret} true -Check DCAE Results - [Documentation] Parse DCAE JSON response and make sure all rows have healthTestStatus=GREEN - [Arguments] ${json} - @{rows}= Get From Dictionary ${json['returns']} rows - @{headers}= Get From Dictionary ${json['returns']} columns - # Retrieve column names from headers - ${columns}= Create List - :for ${header} in @{headers} - \ ${colName}= Get From Dictionary ${header} colName - \ Append To List ${columns} ${colName} - # Process each row making sure status=GREEN - :for ${row} in @{rows} - \ ${cells}= Get From Dictionary ${row} cells - \ ${dict}= Make A Dictionary ${cells} ${columns} - \ Dictionary Should Contain Item ${dict} healthTestStatus GREEN -Make A Dictionary - [Documentation] Given a list of column names and a list of dictionaries, map columname=value - [Arguments] ${columns} ${names} ${valuename}=value - ${dict}= Create Dictionary - ${collength}= Get Length ${columns} - ${namelength}= Get Length ${names} - :for ${index} in range 0 ${collength} - \ ${name}= Evaluate ${names}[${index}] - \ ${valued}= Evaluate ${columns}[${index}] - \ ${value}= Get From Dictionary ${valued} ${valueName} - \ Set To Dictionary ${dict} ${name} ${value} - [Return] ${dict} -Get Event Data From File - [Arguments] ${jsonfile} - ${data}= OperatingSystem.Get File ${jsonfile} - #Should Not Be_Equal ${data} None - [return] ${data} -Json String To Dictionary - [Arguments] ${json_string} - ${json_dict}= evaluate json.loads('''${json_string}''') json - [return] ${json_dict} -Dictionary To Json String - [Arguments] ${json_dict} - ${json_string}= evaluate json.dumps(${json_dict}) json - [return] ${json_string} -Get DCAE Service Component Status - [Documentation] Get the status of a DCAE Service Component - [Arguments] ${url} ${urlpath} ${usr} ${passwd} - ${auth}= Create List ${usr} ${passwd} - ${session}= Create Session dcae-service-component ${url} auth=${auth} - ${resp}= Get Request dcae-service-component ${urlpath} - [return] ${resp} -Publish Event To VES Collector No Auth - [Documentation] Send an event to VES Collector - [Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata} - Log Creating session ${url} - ${session}= Create Session dcaegen2-d1 ${url} - ${resp}= Post Request dcaegen2-d1 ${evtpath} data=${evtdata} headers=${httpheaders} - #Log Received response from dcae ${resp.json()} - [return] ${resp} -Publish Event To VES Collector - [Documentation] Send an event to VES Collector - [Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata} ${user} ${pd} - ${auth}= Create List ${user} ${pd} - Log Creating session ${url} - ${session}= Create Session dcaegen2-d1 ${url} auth=${auth} disable_warnings=1 - ${resp}= Post Request dcaegen2-d1 ${evtpath} data=${evtdata} headers=${httpheaders} - #Log Received response from dcae ${resp.json()} - [return] ${resp} -Publish Event To VES Collector With Put Method - [Documentation] Send an event to VES Collector - [Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata} ${user} ${pd} - ${auth}= Create List ${user} ${pd} - Log Creating session ${url} - ${session}= Create Session dcae-d1 ${url} auth=${auth} - ${resp}= Put Request dcae-d1 ${evtpath} data=${evtdata} headers=${httpheaders} - #Log Received response from dcae ${resp.json()} - [return] ${resp} -Publish Event To VES Collector With Put Method No Auth - [Documentation] Send an event to VES Collector - [Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata} - Log Creating session ${url} - ${session}= Create Session dcae-d1 ${url} - ${resp}= Put Request dcae-d1 ${evtpath} data=${evtdata} headers=${httpheaders} - #Log Received response from dcae ${resp.json()} - [return] ${resp} + *** Settings *** +Documentation The main interface for interacting with DCAE. It handles low level stuff like managing the http request library and DCAE required fields +Library RequestsLibrary +Library DcaeLibrary +Library OperatingSystem +Library Collections +Variables ../resources/DcaeVariables.py +Resource ../resources/dcae_properties.robot +*** Variables *** +${DCAE_HEALTH_CHECK_BODY} %{WORKSPACE}/test/csit/tests/dcae/testcases/assets/json_events/dcae_healthcheck.json +*** Keywords *** +Get DCAE Nodes + [Documentation] Get DCAE Nodes from Consul Catalog + #Log Creating session ${GLOBAL_DCAE_CONSUL_URL} + ${session}= Create Session dcae ${GLOBAL_DCAE_CONSUL_URL} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-Consul-Token=abcd1234 X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Get Request dcae /v1/catalog/nodes headers=${headers} + Log Received response from dcae consul: ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${NodeList}= Get Json Value List ${resp.text} Node + ${NodeListLength}= Get Length ${NodeList} + ${len}= Get Length ${NodeList} + Should Not Be Equal As Integers ${len} 0 + [return] ${NodeList} +DCAE Node Health Check + [Documentation] Perform DCAE Node Health Check + [Arguments] ${NodeName} + ${session}= Create Session dcae-${NodeName} ${GLOBAL_DCAE_CONSUL_URL} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-Consul-Token=abcd1234 X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${hcpath}= Catenate SEPARATOR= /v1/health/node/ ${NodeName} + ${resp}= Get Request dcae-${NodeName} ${hcpath} headers=${headers} + Log Received response from dcae consul: ${resp.json()} + Should Be Equal As Strings ${resp.status_code} 200 + ${StatusList}= Get Json Value List ${resp.text} Status + ${len}= Get Length ${StatusList} + Should Not Be Equal As Integers ${len} 0 + DCAE Check Health Status ${NodeName} ${StatusList[0]} Serf Health Status + #Run Keyword if ${len} > 1 DCAE Check Health Status ${NodeName} ${StatusList[1]} Serf Health Status +DCAE Check Health Status + [Arguments] ${NodeName} ${ItemStatus} ${CheckType} + Should Be Equal As Strings ${ItemStatus} passing + Log Node: ${NodeName} ${CheckType} check pass ok +VES Collector Suite Setup DMaaP + [Documentation] Start DMaaP Mockup Server + ${ret}= Setup DMaaP Server + Should Be Equal As Strings ${ret} true +VES Collector Suite Shutdown DMaaP + [Documentation] Shutdown DMaaP Mockup Server + ${ret}= Shutdown DMaap + Should Be Equal As Strings ${ret} true +Check DCAE Results + [Documentation] Parse DCAE JSON response and make sure all rows have healthTestStatus=GREEN + [Arguments] ${json} + @{rows}= Get From Dictionary ${json['returns']} rows + @{headers}= Get From Dictionary ${json['returns']} columns + # Retrieve column names from headers + ${columns}= Create List + :for ${header} in @{headers} + \ ${colName}= Get From Dictionary ${header} colName + \ Append To List ${columns} ${colName} + # Process each row making sure status=GREEN + :for ${row} in @{rows} + \ ${cells}= Get From Dictionary ${row} cells + \ ${dict}= Make A Dictionary ${cells} ${columns} + \ Dictionary Should Contain Item ${dict} healthTestStatus GREEN +Make A Dictionary + [Documentation] Given a list of column names and a list of dictionaries, map columname=value + [Arguments] ${columns} ${names} ${valuename}=value + ${dict}= Create Dictionary + ${collength}= Get Length ${columns} + ${namelength}= Get Length ${names} + :for ${index} in range 0 ${collength} + \ ${name}= Evaluate ${names}[${index}] + \ ${valued}= Evaluate ${columns}[${index}] + \ ${value}= Get From Dictionary ${valued} ${valueName} + \ Set To Dictionary ${dict} ${name} ${value} + [Return] ${dict} +Get Event Data From File + [Arguments] ${jsonfile} + ${data}= OperatingSystem.Get File ${jsonfile} + #Should Not Be_Equal ${data} None + [return] ${data} +Json String To Dictionary + [Arguments] ${json_string} + ${json_dict}= evaluate json.loads('''${json_string}''') json + [return] ${json_dict} +Dictionary To Json String + [Arguments] ${json_dict} + ${json_string}= evaluate json.dumps(${json_dict}) json + [return] ${json_string} +Get DCAE Service Component Status + [Documentation] Get the status of a DCAE Service Component + [Arguments] ${url} ${urlpath} ${usr} ${passwd} + ${auth}= Create List ${usr} ${passwd} + ${session}= Create Session dcae-service-component ${url} auth=${auth} + ${resp}= Get Request dcae-service-component ${urlpath} + [return] ${resp} +Publish Event To VES Collector No Auth + [Documentation] Send an event to VES Collector + [Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata} + Log Creating session ${url} + ${session}= Create Session dcaegen2-d1 ${url} + ${resp}= Post Request dcaegen2-d1 ${evtpath} data=${evtdata} headers=${httpheaders} + #Log Received response from dcae ${resp.json()} + [return] ${resp} +Publish Event To VES Collector + [Documentation] Send an event to VES Collector + [Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata} ${user} ${pd} + ${auth}= Create List ${user} ${pd} + Log Creating session ${url} + ${session}= Create Session dcaegen2-d1 ${url} auth=${auth} disable_warnings=1 + ${resp}= Post Request dcaegen2-d1 ${evtpath} data=${evtdata} headers=${httpheaders} + #Log Received response from dcae ${resp.json()} + [return] ${resp} +Publish Event To VES Collector With Put Method + [Documentation] Send an event to VES Collector + [Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata} ${user} ${pd} + ${auth}= Create List ${user} ${pd} + Log Creating session ${url} + ${session}= Create Session dcae-d1 ${url} auth=${auth} + ${resp}= Put Request dcae-d1 ${evtpath} data=${evtdata} headers=${httpheaders} + #Log Received response from dcae ${resp.json()} + [return] ${resp} +Publish Event To VES Collector With Put Method No Auth + [Documentation] Send an event to VES Collector + [Arguments] ${url} ${evtpath} ${httpheaders} ${evtdata} + Log Creating session ${url} + ${session}= Create Session dcae-d1 ${url} + ${resp}= Put Request dcae-d1 ${evtpath} data=${evtdata} headers=${httpheaders} + #Log Received response from dcae ${resp.json()} + [return] ${resp} diff --git a/test/csit/tests/dcaegen2/testcases/resources/dcae_properties.robot b/test/csit/tests/dcaegen2/testcases/resources/dcae_properties.robot index be072d73c..692488814 100644 --- a/test/csit/tests/dcaegen2/testcases/resources/dcae_properties.robot +++ b/test/csit/tests/dcaegen2/testcases/resources/dcae_properties.robot @@ -1,15 +1,15 @@ -Documentation store all properties that can change or are used in multiple places here -... format is all caps with underscores between words and prepended with GLOBAL -... make sure you prepend them with GLOBAL so that other files can easily see it is from this file. - - - -*** Variables *** -${GLOBAL_APPLICATION_ID} robot-dcaegen2 -${GLOBAL_DCAE_CONSUL_URL} http://135.205.228.129:8500 -${GLOBAL_DCAE_CONSUL_URL1} http://135.205.228.170:8500 -${GLOBAL_DCAE_VES_URL} http://localhost:8443/eventlistener/v5 -${GLOBAL_DCAE_USERNAME} console -${GLOBAL_DCAE_PASSWORD} ZjJkYjllMjljMTI2M2Iz -${VESC_HTTPS_USER} sample1 -${VESC_HTTPS_PD} sample1 +Documentation store all properties that can change or are used in multiple places here +... format is all caps with underscores between words and prepended with GLOBAL +... make sure you prepend them with GLOBAL so that other files can easily see it is from this file. + + + +*** Variables *** +${GLOBAL_APPLICATION_ID} robot-dcaegen2 +${GLOBAL_DCAE_CONSUL_URL} http://135.205.228.129:8500 +${GLOBAL_DCAE_CONSUL_URL1} http://135.205.228.170:8500 +${GLOBAL_DCAE_VES_URL} http://localhost:8443/eventlistener/v5 +${GLOBAL_DCAE_USERNAME} console +${GLOBAL_DCAE_PASSWORD} ZjJkYjllMjljMTI2M2Iz +${VESC_HTTPS_USER} sample1 +${VESC_HTTPS_PD} sample1 diff --git a/test/csit/tests/vfc/nfvo-wfengine/workflow.robot b/test/csit/tests/vfc/nfvo-wfengine/workflow.robot index 07bfe6979..c9dbe6c46 100644 --- a/test/csit/tests/vfc/nfvo-wfengine/workflow.robot +++ b/test/csit/tests/vfc/nfvo-wfengine/workflow.robot @@ -1,113 +1,113 @@ -*** Settings *** -Resource ../../common.robot -Library Collections -Library json -Library OperatingSystem -Library RequestsLibrary -Library HttpLibrary.HTTP - -*** Variables *** -${MSB_IP} 127.0.0.1 -${MSB_PORT} 10550 -${ACTIVITI_IP} 127.0.0.1 -${ACTIVITI_PORT} 8804 -${MGRSERVICE_IP} 127.0.0.1 -${MGRSERVICE_PORT} 8805 -${processId} demo -${deployid} 0 -${bmpfilepath} ${SCRIPTS}/nfvo-wfengine/demo.bpmn20.xml - -*** Test Cases *** -Deploy BPMN File Test On Activiti - [Documentation] Check if the test bpmn file can be deployed in activiti engine - ${auth}= Create List kermit kermit - ${headers}= Create Dictionary Accept=application/json - Create Session web_session http://${ACTIVITI_IP}:${ACTIVITI_PORT} headers=${headers} auth=${auth} - ${files}= evaluate {"file":open('${bmpfilepath}','rb')} - ${resp}= Post Request web_session /activiti-rest/service/repository/deployments files=${files} - Should Be Equal ${resp.status_code} ${201} - Log ${resp.json()} - ${deployedId}= Set Variable ${resp.json()["id"]} - Set Global Variable ${deployedId} - -Exectue BPMN File Testt On Activiti - [Documentation] Check if the test bpmn file can be exectued in activiti engine - ${headers} Create Dictionary Content-Type=application/json Accept=application/json Authorization=Basic a2VybWl0Omtlcm1pdA== - Create Session web_session http://${ACTIVITI_IP}:${ACTIVITI_PORT} headers=${headers} - ${body} Create Dictionary processDefinitionKey=${processId} - ${body} dumps ${body} - ${resp}= Post Request web_session /activiti-rest/service/runtime/process-instances ${body} - Should Be Equal ${resp.status_code} ${201} - -UnDeploy BPMN File Testt On Activiti - [Documentation] Check if the test bpmn file can be undeployed in activiti engine - log ${deployedId} - ${auth}= Create List kermit kermit - ${headers} Create Dictionary Content-Type=application/json Accept=application/json - Create Session web_session http://${ACTIVITI_IP}:${ACTIVITI_PORT} headers=${headers} auth=${auth} - ${resp}= Delete Request web_session /activiti-rest/service/repository/deployments/${deployedId}?cascade=true - Should Be Equal ${resp.status_code} ${204} - -Deploy BPMN File Test On MgrService - [Documentation] Check if the test bpmn file can be deployed in Management Service - ${auth}= Create List kermit kermit - ${headers}= Create Dictionary Accept=application/json - Create Session web_session http://${MGRSERVICE_IP}:${MGRSERVICE_PORT} headers=${headers} auth=${auth} - ${files}= evaluate {"file":open('${bmpfilepath}','rb')} - ${resp}= Post Request web_session api/workflow/v1/package files=${files} - Should Be Equal ${resp.status_code} ${200} - Log ${resp.json()} - ${deployedId}= Set Variable ${resp.json()["deployedId"]} - Set Global Variable ${deployedId} - -Exectue BPMN File Testt On MgrService - [Documentation] Check if the test bpmn file can be exectued in Management Service - ${headers} Create Dictionary Content-Type=application/json Accept=application/json Authorization=Basic a2VybWl0Omtlcm1pdA== - Create Session web_session http://${MGRSERVICE_IP}:${MGRSERVICE_PORT} headers=${headers} - ${body} Create Dictionary processDefinitionKey=${processId} - ${body} dumps ${body} - ${resp}= Post Request web_session api/workflow/v1/process/instance ${body} - Should Be Equal ${resp.status_code} ${200} - Log ${resp.json()} - Should Be Equal ${resp.json()["processDefinitionKey"]} ${processId} - -UnDeploy BPMN File Testt On MgrService - [Documentation] Check if the test bpmn file can be undeployed in Management Service - log ${deployedId} - ${auth}= Create List kermit kermit - ${headers} Create Dictionary Content-Type=application/json Accept=application/json - Create Session web_session http://${MGRSERVICE_IP}:${MGRSERVICE_PORT} headers=${headers} auth=${auth} - ${resp}= Delete Request web_session /api/workflow/v1/package/${deployedId} - Should Be Equal ${resp.status_code} ${200} - -Deploy BPMN File Test On MSB - [Documentation] Check if the test bpmn file can be deployed in activiti engine - ${auth}= Create List kermit kermit - ${headers}= Create Dictionary Accept=application/json - Create Session web_session http://${MSB_IP}:${MSB_PORT} headers=${headers} auth=${auth} - ${files}= evaluate {"file":open('${bmpfilepath}','rb')} - ${resp}= Post Request web_session api/workflow/v1/package files=${files} - Should Be Equal ${resp.status_code} ${200} - Log ${resp.json()} - ${deployedId}= Set Variable ${resp.json()["deployedId"]} - Set Global Variable ${deployedId} - -Exectue BPMN File Testt On MSB - [Documentation] Check if the test bpmn file can be exectued in MSB - ${headers} Create Dictionary Content-Type=application/json Accept=application/json Authorization=Basic a2VybWl0Omtlcm1pdA== - Create Session web_session http://${MSB_IP}:${MSB_PORT} headers=${headers} - ${body} Create Dictionary processDefinitionKey=${processId} - ${body} dumps ${body} - ${resp}= Post Request web_session api/workflow/v1/process/instance ${body} - Should Be Equal ${resp.status_code} ${200} - Log ${resp.json()} - Should Be Equal ${resp.json()["processDefinitionKey"]} ${processId} - -UnDeploy BPMN File Testt On MSB - [Documentation] Check if the test bpmn file can be undeployed in MSB - log ${deployedId} - ${auth}= Create List kermit kermit - ${headers} Create Dictionary Content-Type=application/json Accept=application/json - Create Session web_session http://${MSB_IP}:${MSB_PORT} headers=${headers} auth=${auth} - ${resp}= Delete Request web_session /api/workflow/v1/package/${deployedId} - Should Be Equal ${resp.status_code} ${200} +*** Settings *** +Resource ../../common.robot +Library Collections +Library json +Library OperatingSystem +Library RequestsLibrary +Library HttpLibrary.HTTP + +*** Variables *** +${MSB_IP} 127.0.0.1 +${MSB_PORT} 10550 +${ACTIVITI_IP} 127.0.0.1 +${ACTIVITI_PORT} 8804 +${MGRSERVICE_IP} 127.0.0.1 +${MGRSERVICE_PORT} 8805 +${processId} demo +${deployid} 0 +${bmpfilepath} ${SCRIPTS}/nfvo-wfengine/demo.bpmn20.xml + +*** Test Cases *** +Deploy BPMN File Test On Activiti + [Documentation] Check if the test bpmn file can be deployed in activiti engine + ${auth}= Create List kermit kermit + ${headers}= Create Dictionary Accept=application/json + Create Session web_session http://${ACTIVITI_IP}:${ACTIVITI_PORT} headers=${headers} auth=${auth} + ${files}= evaluate {"file":open('${bmpfilepath}','rb')} + ${resp}= Post Request web_session /activiti-rest/service/repository/deployments files=${files} + Should Be Equal ${resp.status_code} ${201} + Log ${resp.json()} + ${deployedId}= Set Variable ${resp.json()["id"]} + Set Global Variable ${deployedId} + +Exectue BPMN File Testt On Activiti + [Documentation] Check if the test bpmn file can be exectued in activiti engine + ${headers} Create Dictionary Content-Type=application/json Accept=application/json Authorization=Basic a2VybWl0Omtlcm1pdA== + Create Session web_session http://${ACTIVITI_IP}:${ACTIVITI_PORT} headers=${headers} + ${body} Create Dictionary processDefinitionKey=${processId} + ${body} dumps ${body} + ${resp}= Post Request web_session /activiti-rest/service/runtime/process-instances ${body} + Should Be Equal ${resp.status_code} ${201} + +UnDeploy BPMN File Testt On Activiti + [Documentation] Check if the test bpmn file can be undeployed in activiti engine + log ${deployedId} + ${auth}= Create List kermit kermit + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${ACTIVITI_IP}:${ACTIVITI_PORT} headers=${headers} auth=${auth} + ${resp}= Delete Request web_session /activiti-rest/service/repository/deployments/${deployedId}?cascade=true + Should Be Equal ${resp.status_code} ${204} + +Deploy BPMN File Test On MgrService + [Documentation] Check if the test bpmn file can be deployed in Management Service + ${auth}= Create List kermit kermit + ${headers}= Create Dictionary Accept=application/json + Create Session web_session http://${MGRSERVICE_IP}:${MGRSERVICE_PORT} headers=${headers} auth=${auth} + ${files}= evaluate {"file":open('${bmpfilepath}','rb')} + ${resp}= Post Request web_session api/workflow/v1/package files=${files} + Should Be Equal ${resp.status_code} ${200} + Log ${resp.json()} + ${deployedId}= Set Variable ${resp.json()["deployedId"]} + Set Global Variable ${deployedId} + +Exectue BPMN File Testt On MgrService + [Documentation] Check if the test bpmn file can be exectued in Management Service + ${headers} Create Dictionary Content-Type=application/json Accept=application/json Authorization=Basic a2VybWl0Omtlcm1pdA== + Create Session web_session http://${MGRSERVICE_IP}:${MGRSERVICE_PORT} headers=${headers} + ${body} Create Dictionary processDefinitionKey=${processId} + ${body} dumps ${body} + ${resp}= Post Request web_session api/workflow/v1/process/instance ${body} + Should Be Equal ${resp.status_code} ${200} + Log ${resp.json()} + Should Be Equal ${resp.json()["processDefinitionKey"]} ${processId} + +UnDeploy BPMN File Testt On MgrService + [Documentation] Check if the test bpmn file can be undeployed in Management Service + log ${deployedId} + ${auth}= Create List kermit kermit + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${MGRSERVICE_IP}:${MGRSERVICE_PORT} headers=${headers} auth=${auth} + ${resp}= Delete Request web_session /api/workflow/v1/package/${deployedId} + Should Be Equal ${resp.status_code} ${200} + +Deploy BPMN File Test On MSB + [Documentation] Check if the test bpmn file can be deployed in activiti engine + ${auth}= Create List kermit kermit + ${headers}= Create Dictionary Accept=application/json + Create Session web_session http://${MSB_IP}:${MSB_PORT} headers=${headers} auth=${auth} + ${files}= evaluate {"file":open('${bmpfilepath}','rb')} + ${resp}= Post Request web_session api/workflow/v1/package files=${files} + Should Be Equal ${resp.status_code} ${200} + Log ${resp.json()} + ${deployedId}= Set Variable ${resp.json()["deployedId"]} + Set Global Variable ${deployedId} + +Exectue BPMN File Testt On MSB + [Documentation] Check if the test bpmn file can be exectued in MSB + ${headers} Create Dictionary Content-Type=application/json Accept=application/json Authorization=Basic a2VybWl0Omtlcm1pdA== + Create Session web_session http://${MSB_IP}:${MSB_PORT} headers=${headers} + ${body} Create Dictionary processDefinitionKey=${processId} + ${body} dumps ${body} + ${resp}= Post Request web_session api/workflow/v1/process/instance ${body} + Should Be Equal ${resp.status_code} ${200} + Log ${resp.json()} + Should Be Equal ${resp.json()["processDefinitionKey"]} ${processId} + +UnDeploy BPMN File Testt On MSB + [Documentation] Check if the test bpmn file can be undeployed in MSB + log ${deployedId} + ${auth}= Create List kermit kermit + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${MSB_IP}:${MSB_PORT} headers=${headers} auth=${auth} + ${resp}= Delete Request web_session /api/workflow/v1/package/${deployedId} + Should Be Equal ${resp.status_code} ${200} -- cgit 1.2.3-korg