diff options
Diffstat (limited to 'test/mocks/datafilecollector-testharness/mr-sim/mr-sim.py')
-rw-r--r-- | test/mocks/datafilecollector-testharness/mr-sim/mr-sim.py | 847 |
1 files changed, 634 insertions, 213 deletions
diff --git a/test/mocks/datafilecollector-testharness/mr-sim/mr-sim.py b/test/mocks/datafilecollector-testharness/mr-sim/mr-sim.py index c37ae698a..ef46535f5 100644 --- a/test/mocks/datafilecollector-testharness/mr-sim/mr-sim.py +++ b/test/mocks/datafilecollector-testharness/mr-sim/mr-sim.py @@ -8,73 +8,432 @@ import json from flask import Flask app = Flask(__name__) -DEFAULT_IP = "localhost" +#Server info +HOST_IP = "0.0.0.0" +HOST_PORT = 2222 +#Test function to check server running +@app.route('/', + methods=['GET']) +def index(): + return 'Hello world' + +#Returns number of polls +@app.route('/ctr_requests', + methods=['GET']) +def counter_requests(): + global ctr_requests + return str(ctr_requests) +#Returns number of replies +@app.route('/ctr_responses', + methods=['GET']) +def counter_responses(): + global ctr_responses + return str(ctr_responses) + +#Returns number of unique files +@app.route('/ctr_unique_files', + methods=['GET']) +def counter_uniquefiles(): + global fileMap + return str(len(fileMap)) + +#Returns tc info +@app.route('/tc_info', + methods=['GET']) +def testcase_info(): + global tc_num + return tc_num + +#Messages polling function @app.route( "/events/unauthenticated.VES_NOTIFICATION_OUTPUT/OpenDcae-c12/C12", methods=['GET']) def MR_reply(): - global mr_counter - global mr_replies - - mr_counter = mr_counter + 1 - print("MR receiver counter: " + str(mr_counter)) - - if mr_replies[mr_counter].sleepMs != 0: - sleep(mr_replies[mr_counter].sleepMs / 1000.0) - print("Sleeping: " + str(mr_replies[mr_counter].sleepMs) + " ms") - - if mr_replies[mr_counter].replytype == 0: - #print (str(mr_replies[mr_counter].jsonreply)) - print("Regular reply") - response = app.response_class( - response=mr_replies[mr_counter].jsonreply, - status=200, - mimetype='application/json') - - return response - - if mr_replies[mr_counter].replytype == 2: - - print("error: 404") - response = app.response_class( - response="", - status=404, - mimetype='application/json') - - return response - - if mr_replies[mr_counter].replytype == 1: - print("do nothing, sink request") - return - - -class Reply: - """An instance of the reply event, which can be configured to behave in a certain way - (delay, error code, reply body""" - - def to_json(self): - return self.jsonreply - - def __init__( - self, - ip=DEFAULT_IP, - file="1MB.tar.gz", - sleepMs=0, - replyType=0, - port=1022, - type="ftps"): - self.sleepMs = sleepMs - self.ip = ip - self.file = file - self.port = port - self.replytype = replyType # 0 for reply, 1 timeout, 2 deny - self.user = "onap" - self.passwd = "pano" - self.type = type - self.jsonreply = str.encode(""" - [{ + global ctr_requests + global args + + ctr_requests = ctr_requests + 1 + print("MR: poll request#: " + str(ctr_requests)) + + if args.tc100: + return tc100("sftp") + elif args.tc101: + return tc101("sftp") + elif args.tc102: + return tc102("sftp") + + elif args.tc110: + return tc110("sftp") + elif args.tc111: + return tc111("sftp") + elif args.tc112: + return tc112("sftp") + elif args.tc113: + return tc113("sftp") + + elif args.tc120: + return tc120("sftp") + elif args.tc121: + return tc121("sftp") + elif args.tc122: + return tc122("sftp") + + elif args.tc1000: + return tc1000("sftp") + elif args.tc1001: + return tc1001("sftp") + + elif args.tc510: + return tc510("sftp") + + + elif args.tc200: + return tc200("ftps") + elif args.tc201: + return tc201("ftps") + elif args.tc202: + return tc202("ftps") + + elif args.tc210: + return tc210("ftps") + elif args.tc211: + return tc211("ftps") + elif args.tc212: + return tc212("ftps") + elif args.tc213: + return tc213("ftps") + + elif args.tc220: + return tc220("ftps") + elif args.tc221: + return tc221("ftps") + elif args.tc222: + return tc222("ftps") + + elif args.tc2000: + return tc2000("ftps") + elif args.tc2001: + return tc2001("ftps") + + elif args.tc610: + return tc510("ftps") + + +#### Test case functions + + +def tc100(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 1): + return buildOkResponse("[]") + + seqNr = (ctr_responses-1) + msg = getEventHead() + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + getEventEnd() + fileMap[seqNr] = seqNr + return buildOkResponse("["+msg+"]") + +def tc101(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 1): + return buildOkResponse("[]") + + seqNr = (ctr_responses-1) + msg = getEventHead() + getEventName("5MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + getEventEnd() + fileMap[seqNr] = seqNr + + return buildOkResponse("["+msg+"]") + +def tc102(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 1): + return buildOkResponse("[]") + + seqNr = (ctr_responses-1) + msg = getEventHead() + getEventName("50MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + getEventEnd() + fileMap[seqNr] = seqNr + + return buildOkResponse("["+msg+"]") + +def tc110(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 100): + return buildOkResponse("[]") + + seqNr = (ctr_responses-1) + msg = getEventHead() + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + getEventEnd() + fileMap[seqNr] = seqNr + + return buildOkResponse("["+msg+"]") + +def tc111(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 100): + return buildOkResponse("[]") + + msg = getEventHead() + + for i in range(100): + seqNr = i+(ctr_responses-1) + if i != 0: msg = msg + "," + msg = msg + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + fileMap[seqNr] = seqNr + + msg = msg + getEventEnd() + + return buildOkResponse("["+msg+"]") + +def tc112(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 100): + return buildOkResponse("[]") + + msg = getEventHead() + + for i in range(100): + seqNr = i+(ctr_responses-1) + if i != 0: msg = msg + "," + msg = msg + getEventName("5MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + fileMap[seqNr] = seqNr + + msg = msg + getEventEnd() + + return buildOkResponse("["+msg+"]") + +def tc113(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 1): + return buildOkResponse("[]") + + msg = "" + + for evts in range(100): # build 100 evts + if (evts > 0): + msg = msg + "," + msg = msg + getEventHead() + for i in range(100): # build 100 files + seqNr = i+evts+100*(ctr_responses-1) + if i != 0: msg = msg + "," + msg = msg + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + fileMap[seqNr] = seqNr + + msg = msg + getEventEnd() + + return buildOkResponse("["+msg+"]") + + +def tc120(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 100): + return buildOkResponse("[]") + + if (ctr_responses % 10 == 2): + return # Return nothing + + if (ctr_responses % 10 == 3): + return buildOkResponse("") # Return empty message + + if (ctr_responses % 10 == 4): + return buildOkResponse(getEventHead()) # Return part of a json event + + if (ctr_responses % 10 == 5): + return buildEmptyResponse(404) # Return empty message with status code + + if (ctr_responses % 10 == 6): + sleep(60) + + + msg = getEventHead() + + for i in range(100): + seqNr = i+(ctr_responses-1) + if i != 0: msg = msg + "," + msg = msg + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + fileMap[seqNr] = seqNr + + msg = msg + getEventEnd() + + return buildOkResponse("["+msg+"]") + +def tc121(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 100): + return buildOkResponse("[]") + + msg = getEventHead() + + for i in range(100): + seqNr = i+(ctr_responses-1) + if (seqNr%10 == 0): # Every 10th file is "missing" + fn = "MissingFile_" + str(seqNr) + ".tar.gz" + else: + fn = "1MB_" + str(seqNr) + ".tar.gz" + fileMap[seqNr] = seqNr + + if i != 0: msg = msg + "," + msg = msg + getEventName(fn,ftptype,"onap","pano","localhost",1022) + + + msg = msg + getEventEnd() + + return buildOkResponse("["+msg+"]") + +def tc122(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 100): + return buildOkResponse("[]") + + msg = getEventHead() + + for i in range(100): + fn = "1MB_0.tar.gz" # All files identical names + if i != 0: msg = msg + "," + msg = msg + getEventName(fn,ftptype,"onap","pano","localhost",1022) + + fileMap[0] = 0 + msg = msg + getEventEnd() + + return buildOkResponse("["+msg+"]") + + +def tc1000(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + msg = getEventHead() + + for i in range(100): + seqNr = i+(ctr_responses-1) + if i != 0: msg = msg + "," + msg = msg + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + fileMap[seqNr] = seqNr + + msg = msg + getEventEnd() + + return buildOkResponse("["+msg+"]") + +def tc1001(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + msg = getEventHead() + + for i in range(100): + seqNr = i+(ctr_responses-1) + if i != 0: msg = msg + "," + msg = msg + getEventName("5MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + fileMap[seqNr] = seqNr + + msg = msg + getEventEnd() + + return buildOkResponse("["+msg+"]") + +def tc510(ftptype): + global ctr_responses + global ctr_unique_files + + ctr_responses = ctr_responses + 1 + + if (ctr_responses > 5): + return buildOkResponse("[]") + + msg = "" + + for evts in range(700): # build events for 5 MEs + if (evts > 0): + msg = msg + "," + msg = msg + getEventHeadNodeName("PNF"+str(evts)) + seqNr = (ctr_responses-1) + msg = msg + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + seqNr = seqNr + evts*1000000 #Create unique id for this node and file + fileMap[seqNr] = seqNr + msg = msg + getEventEnd() + + return buildOkResponse("["+msg+"]") + +#Mapping FTPS TCs +def tc200(ftptype): + return tc100(ftptype) +def tc201(ftptype): + return tc101(ftptype) +def tc202(ftptype): + return tc102(ftptype) + +def tc210(ftptype): + return tc110(ftptype) +def tc211(ftptype): + return tc111(ftptype) +def tc212(ftptype): + return tc112(ftptype) +def tc213(ftptype): + return tc113(ftptype) + +def tc220(ftptype): + return tc120(ftptype) +def tc221(ftptype): + return tc121(ftptype) +def tc222(ftptype): + return tc122(ftptype) + +def tc2000(ftptype): + return tc1000(ftptype) +def tc2001(ftptype): + return tc1001(ftptype) + +#### Functions to build json messages and respones #### + +# Function to build fixed beginning of an event +def getEventHead(): + return getEventHeadNodeName("oteNB5309") + +def getEventHeadNodeName(nodename): + headStr = """ + { "event": { "commonEventHeader": { "startEpochMicrosec": 8745745764578, @@ -85,205 +444,267 @@ class Reply: }, "priority": "Normal", "version": "4.0.1", - "reportingEntityName": "otenb5309", + "reportingEntityName": \"""" + nodename + """", "sequence": 0, "domain": "notification", "lastEpochMicrosec": 8745745764578, "eventName": "Noti_RnNode-Ericsson_FileReady", "vesEventListenerVersion": "7.0.1", - "sourceName": "oteNB5309" + "sourceName": \"""" + nodename + """" }, "notificationFields": { "notificationFieldsVersion": "2.0", "changeType": "FileReady", "changeIdentifier": "PM_MEAS_FILES", "arrayOfNamedHashMap": [ - { - "name": \"""" + - self.file + - """", + """ + return headStr + +# Function to build the variable part of an event +def getEventName(fn,type,user,passwd,ip,port): + nameStr = """{ + "name": \"""" + fn + """", "hashMap": { "fileFormatType": "org.3GPP.32.435#measCollec", - "location": \"""" + - self.type + - """://""" + - self.user + - """:""" + - self.passwd + - """@""" + - self.ip + - """:""" + - str(self.port) + - """/""" + - self.file + - """", + "location": \"""" + type + """://""" + user + """:""" + passwd + """@""" + ip + """:""" + str(port) + """/""" + fn + """", "fileFormatVersion": "V10", "compression": "gzip" } - } + } """ + return nameStr + +# Function to build fixed end of an event +def getEventEnd(): + endStr = """ ] } } - }] - """) - - -def replyFactory( - ip=DEFAULT_IP, - file="1MB.tar.gz", - factoryport=1022, - count=1, - factorytype="ftps"): - aggregatedReply = "" - # first item does not require . - aggregatedReply = Reply(ip, file, port=factoryport).to_json() - for i in range(count - 1): - aggregatedReply = aggregatedReply + b", " + \ - Reply(ip, file, port=factoryport, type=factorytype).to_json() - #print(b"aggregated reply: " + aggregatedReply) - return b"[" + aggregatedReply + b"]" + } + """ + return endStr + +# Function to build an OK reponse from a message string +def buildOkResponse(msg): + response = app.response_class( + response=str.encode(msg), + status=200, + mimetype='application/json') + return response + +# Function to build an empty message with status +def buildEmptyResponse(status_code): + response = app.response_class( + response=str.encode(""), + status=status_code, + mimetype='application/json') + return response -def prepareMrRespArrSftp(): - global mr_replies - - for i in range(400): # prepare 400 regular replies - mr_replies.append( - Reply( - port=1022, - ip="localhost", - type="sftp", - file="1MB.tar.gz")) - #mr_replies[0] is not used - - -def prepareMrRespArrFtps(): - global mr_replies - - for i in range(400): - mr_replies.append( - Reply( - port=21, - ip="localhost", - type="ftps", - file="1MB.tar.gz")) - - -def tc1(): - prepareMrRespArrSftp() - # no mutation needed in this TC - - -def tc2(): - global mr_replies - - for i in range(7): - mr_replies.append( - Reply( - port=1022, - ip="localhost", - type="sftp", - file="1MB.tar.gz")) - - # inserting and empty reply message - mr_replies[1].jsonreply = b"" - mr_replies[2].jsonreply = b"" - - # inserting a 404 error and delay - mr_replies[3].replytype = 2 - mr_replies[3].sleepMs = 2000 - - # inserting and empty reply message - mr_replies[4].jsonreply = b"" - - # sink the message - mr_replies[5].replytype = 1 - - # reply with one proper file finally - mr_replies[6] = Reply( - port=1022, - ip="localhost", - type="sftp", - file="1MB.tar.gz") +if __name__ == "__main__": + + #Counters + ctr_responses = 0 + ctr_requests = 0 + ctr_unique_files = 0 + #Keeps all reponded file names + fileMap = {} -def tc3(): - prepareMrRespArrFtps() + tc_num = "Not set" + tc_help = "Not set" + parser = argparse.ArgumentParser() -def tc4(): - global mr_replies +#SFTP TCs with single ME + parser.add_argument( + '--tc100', + action='store_true', + help='TC100 - One ME, SFTP, 1 1MB file, 1 event') + parser.add_argument( + '--tc101', + action='store_true', + help='TC101 - One ME, SFTP, 1 5MB file, 1 event') + parser.add_argument( + '--tc102', + action='store_true', + help='TC102 - One ME, SFTP, 1 50MB file, 1 event') - for i in range(7): - mr_replies.append( - Reply( - port=21, - ip="localhost", - type="ftps", - file="1MB.tar.gz")) + parser.add_argument( + '--tc110', + action='store_true', + help='TC110 - One ME, SFTP, 1MB files, 1 file per event, 100 events, 1 event per poll.') + parser.add_argument( + '--tc111', + action='store_true', + help='TC111 - One ME, SFTP, 1MB files, 100 files per event, 100 events, 1 event per poll.') + parser.add_argument( + '--tc112', + action='store_true', + help='TC112 - One ME, SFTP, 5MB files, 100 files per event, 100 events, 1 event per poll.') + parser.add_argument( + '--tc113', + action='store_true', + help='TC113 - One ME, SFTP, 1MB files, 100 files per event, 100 events. All events in one poll.') - # inserting and empty reply message - mr_replies[1].jsonreply = b"" - mr_replies[2].jsonreply = b"" + parser.add_argument( + '--tc120', + action='store_true', + help='TC120 - One ME, SFTP, 1MB files, 100 files per event, 100 events, 1 event per poll. 10% of replies each: no response, empty message, slow response, 404-error, malformed json') + parser.add_argument( + '--tc121', + action='store_true', + help='TC121 - One ME, SFTP, 1MB files, 100 files per event, 100 events, 1 event per poll. 10% missing files') + parser.add_argument( + '--tc122', + action='store_true', + help='TC122 - One ME, SFTP, 1MB files, 100 files per event, 100 events. 1 event per poll. All files with identical name. ') - # inserting a 404 error and delay - mr_replies[3].replytype = 2 - mr_replies[3].sleepMs = 2000 + parser.add_argument( + '--tc1000', + action='store_true', + help='TC1000 - One ME, SFTP, 1MB files, 100 files per event, endless number of events, 1 event per poll') + parser.add_argument( + '--tc1001', + action='store_true', + help='TC1001 - One ME, SFTP, 5MB files, 100 files per event, endless number of events, 1 event per poll') - # inserting and empty reply message - mr_replies[4].jsonreply = b"" +# SFTP TCs with multiple MEs + parser.add_argument( + '--tc510', + action='store_true', + help='TC510 - 5 MEs, SFTP, 1MB files, 1 file per event, 100 events, 1 event per poll.') - # sink the message - mr_replies[5].replytype = 1 - # reply with one proper file finally - mr_replies[6] = Reply( - port=21, - ip="localhost", - type="fftp", - file="1MB.tar.gz") +# FTPS TCs with single ME + parser.add_argument( + '--tc200', + action='store_true', + help='TC200 - One ME, FTPS, 1 1MB file, 1 event') + parser.add_argument( + '--tc201', + action='store_true', + help='TC201 - One ME, FTPS, 1 5MB file, 1 event') + parser.add_argument( + '--tc202', + action='store_true', + help='TC202 - One ME, FTPS, 1 50MB file, 1 event') -if __name__ == "__main__": - mr_replies = [] - mr_counter = 0 # counting hits reaching MR instance - DR_block_single_req = 0 + parser.add_argument( + '--tc210', + action='store_true', + help='TC210 - One ME, FTPS, 1MB files, 1 file per event, 100 events, 1 event per poll.') + parser.add_argument( + '--tc211', + action='store_true', + help='TC211 - One ME, FTPS, 1MB files, 100 files per event, 100 events, 1 event per poll.') + parser.add_argument( + '--tc212', + action='store_true', + help='TC212 - One ME, FTPS, 5MB files, 100 files per event, 100 events, 1 event per poll.') + parser.add_argument( + '--tc213', + action='store_true', + help='TC213 - One ME, FTPS, 1MB files, 100 files per event, 100 events. All events in one poll.') - parser = argparse.ArgumentParser() parser.add_argument( - '--tc1', + '--tc220', + action='store_true', + help='TC220 - One ME, FTPS, 1MB files, 100 files per event, 100 events, 1 event per poll. 10% of replies each: no response, empty message, slow response, 404-error, malformed json') + parser.add_argument( + '--tc221', action='store_true', - help='TC1: reply all queries with 1-1 files using SFTP') + help='TC221 - One ME, FTPS, 1MB files, 100 files per event, 100 events, 1 event per poll. 10% missing files') parser.add_argument( - '--tc2', + '--tc222', action='store_true', - help='TC2: Reply according to error scenarios, then return 1 file finally for SFTP ---NOTE: updated keys required') + help='TC222 - One ME, FTPS, 1MB files, 100 files per event, 100 events. 1 event per poll. All files with identical name. ') + parser.add_argument( - '--tc3', + '--tc2000', action='store_true', - help='TC3: reply all queries with 1-1 files using FTPS') + help='TC2000 - One ME, FTPS, 1MB files, 100 files per event, endless number of events, 1 event per poll') parser.add_argument( - '--tc4', + '--tc2001', action='store_true', - help='TC4: Reply according to error scenarios, then return 1 file finally for FTPS ---NOTE: updated keys required') + help='TC2001 - One ME, FTPS, 5MB files, 100 files per event, endless number of events, 1 event per poll') + + parser.add_argument( + '--tc610', + action='store_true', + help='TC510 - 5 MEs, FTPS, 1MB files, 1 file per event, 100 events, 1 event per poll.') args = parser.parse_args() - if args.tc1: - print("TC: #1") - tc1() - elif args.tc2: - print("TC: #2") - tc2() - elif args.tc3: - print("TC: #3") - tc3() - elif args.tc4: - print("TC: #4") - tc4() + + + if args.tc100: + tc_num = "TC# 100" + elif args.tc101: + tc_num = "TC# 101" + elif args.tc102: + tc_num = "TC# 102" + + elif args.tc110: + tc_num = "TC# 110" + elif args.tc111: + tc_num = "TC# 111" + elif args.tc112: + tc_num = "TC# 112" + elif args.tc113: + tc_num = "TC# 113" + + elif args.tc120: + tc_num = "TC# 120" + elif args.tc121: + tc_num = "TC# 121" + elif args.tc122: + tc_num = "TC# 122" + + elif args.tc1000: + tc_num = "TC# 1000" + elif args.tc1001: + tc_num = "TC# 1001" + + elif args.tc510: + tc_num = "TC# 510" + + elif args.tc200: + tc_num = "TC# 200" + elif args.tc201: + tc_num = "TC# 201" + elif args.tc202: + tc_num = "TC# 202" + + elif args.tc210: + tc_num = "TC# 210" + elif args.tc211: + tc_num = "TC# 211" + elif args.tc212: + tc_num = "TC# 212" + elif args.tc213: + tc_num = "TC# 213" + + elif args.tc220: + tc_num = "TC# 220" + elif args.tc221: + tc_num = "TC# 221" + elif args.tc222: + tc_num = "TC# 222" + + elif args.tc2000: + tc_num = "TC# 2000" + elif args.tc2001: + tc_num = "TC# 2001" + + elif args.tc610: + tc_num = "TC# 610" else: print("No TC was defined") print("use --help for usage info") sys.exit() - app.run(port=2222) + + print(tc_num) + + app.run(port=HOST_PORT, host=HOST_IP) |