blob: ef46535f5719d1dfbcef2d46fa0b874391705db7 [file] [log] [blame]
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)