| import argparse |
| import os |
| from werkzeug import secure_filename |
| from flask import Flask, render_template, request |
| from time import sleep |
| import sys |
| import json |
| from flask import Flask |
| app = Flask(__name__) |
| |
| #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 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, |
| "eventId": "FileReady_1797490e-10ae-4d48-9ea7-3d7d790b25e1", |
| "timeZoneOffset": "UTC+05.30", |
| "internalHeaderFields": { |
| "collectorTimeStamp": "Tue, 09 18 2018 10:56:52 UTC" |
| }, |
| "priority": "Normal", |
| "version": "4.0.1", |
| "reportingEntityName": \"""" + nodename + """", |
| "sequence": 0, |
| "domain": "notification", |
| "lastEpochMicrosec": 8745745764578, |
| "eventName": "Noti_RnNode-Ericsson_FileReady", |
| "vesEventListenerVersion": "7.0.1", |
| "sourceName": \"""" + nodename + """" |
| }, |
| "notificationFields": { |
| "notificationFieldsVersion": "2.0", |
| "changeType": "FileReady", |
| "changeIdentifier": "PM_MEAS_FILES", |
| "arrayOfNamedHashMap": [ |
| """ |
| 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": \"""" + type + """://""" + user + """:""" + passwd + """@""" + ip + """:""" + str(port) + """/""" + fn + """", |
| "fileFormatVersion": "V10", |
| "compression": "gzip" |
| } |
| } """ |
| return nameStr |
| |
| # Function to build fixed end of an event |
| def getEventEnd(): |
| endStr = """ |
| ] |
| } |
| } |
| } |
| """ |
| 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 |
| |
| |
| if __name__ == "__main__": |
| |
| #Counters |
| ctr_responses = 0 |
| ctr_requests = 0 |
| ctr_unique_files = 0 |
| |
| #Keeps all reponded file names |
| fileMap = {} |
| |
| tc_num = "Not set" |
| tc_help = "Not set" |
| |
| parser = argparse.ArgumentParser() |
| |
| #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') |
| |
| 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.') |
| |
| 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. ') |
| |
| 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') |
| |
| # 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.') |
| |
| |
| |
| # 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') |
| |
| 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.add_argument( |
| '--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='TC221 - One ME, FTPS, 1MB files, 100 files per event, 100 events, 1 event per poll. 10% missing files') |
| parser.add_argument( |
| '--tc222', |
| action='store_true', |
| 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( |
| '--tc2000', |
| action='store_true', |
| help='TC2000 - One ME, FTPS, 1MB files, 100 files per event, endless number of events, 1 event per poll') |
| parser.add_argument( |
| '--tc2001', |
| action='store_true', |
| 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.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() |
| |
| print(tc_num) |
| |
| app.run(port=HOST_PORT, host=HOST_IP) |