3 from werkzeug import secure_filename
4 from flask import Flask, render_template, request
8 from flask import Flask
15 #Test function to check server running
21 #Returns number of polls
22 @app.route('/ctr_requests',
24 def counter_requests():
26 return str(ctr_requests)
28 #Returns number of replies
29 @app.route('/ctr_responses',
31 def counter_responses():
33 return str(ctr_responses)
35 #Returns number of unique files
36 @app.route('/ctr_unique_files',
38 def counter_uniquefiles():
40 return str(len(fileMap))
43 @app.route('/tc_info',
49 #Messages polling function
51 "/events/unauthenticated.VES_NOTIFICATION_OUTPUT/OpenDcae-c12/C12",
57 ctr_requests = ctr_requests + 1
58 print("MR: poll request#: " + str(ctr_requests))
116 return tc2000("ftps")
118 return tc2001("ftps")
124 #### Test case functions
129 global ctr_unique_files
131 ctr_responses = ctr_responses + 1
133 if (ctr_responses > 1):
134 return buildOkResponse("[]")
136 seqNr = (ctr_responses-1)
137 msg = getEventHead() + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + getEventEnd()
138 fileMap[seqNr] = seqNr
139 return buildOkResponse("["+msg+"]")
143 global ctr_unique_files
145 ctr_responses = ctr_responses + 1
147 if (ctr_responses > 1):
148 return buildOkResponse("[]")
150 seqNr = (ctr_responses-1)
151 msg = getEventHead() + getEventName("5MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + getEventEnd()
152 fileMap[seqNr] = seqNr
154 return buildOkResponse("["+msg+"]")
158 global ctr_unique_files
160 ctr_responses = ctr_responses + 1
162 if (ctr_responses > 1):
163 return buildOkResponse("[]")
165 seqNr = (ctr_responses-1)
166 msg = getEventHead() + getEventName("50MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + getEventEnd()
167 fileMap[seqNr] = seqNr
169 return buildOkResponse("["+msg+"]")
173 global ctr_unique_files
175 ctr_responses = ctr_responses + 1
177 if (ctr_responses > 100):
178 return buildOkResponse("[]")
180 seqNr = (ctr_responses-1)
181 msg = getEventHead() + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022) + getEventEnd()
182 fileMap[seqNr] = seqNr
184 return buildOkResponse("["+msg+"]")
188 global ctr_unique_files
190 ctr_responses = ctr_responses + 1
192 if (ctr_responses > 100):
193 return buildOkResponse("[]")
198 seqNr = i+(ctr_responses-1)
199 if i != 0: msg = msg + ","
200 msg = msg + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022)
201 fileMap[seqNr] = seqNr
203 msg = msg + getEventEnd()
205 return buildOkResponse("["+msg+"]")
209 global ctr_unique_files
211 ctr_responses = ctr_responses + 1
213 if (ctr_responses > 100):
214 return buildOkResponse("[]")
219 seqNr = i+(ctr_responses-1)
220 if i != 0: msg = msg + ","
221 msg = msg + getEventName("5MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022)
222 fileMap[seqNr] = seqNr
224 msg = msg + getEventEnd()
226 return buildOkResponse("["+msg+"]")
230 global ctr_unique_files
232 ctr_responses = ctr_responses + 1
234 if (ctr_responses > 1):
235 return buildOkResponse("[]")
239 for evts in range(100): # build 100 evts
242 msg = msg + getEventHead()
243 for i in range(100): # build 100 files
244 seqNr = i+evts+100*(ctr_responses-1)
245 if i != 0: msg = msg + ","
246 msg = msg + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022)
247 fileMap[seqNr] = seqNr
249 msg = msg + getEventEnd()
251 return buildOkResponse("["+msg+"]")
256 global ctr_unique_files
258 ctr_responses = ctr_responses + 1
260 if (ctr_responses > 100):
261 return buildOkResponse("[]")
263 if (ctr_responses % 10 == 2):
264 return # Return nothing
266 if (ctr_responses % 10 == 3):
267 return buildOkResponse("") # Return empty message
269 if (ctr_responses % 10 == 4):
270 return buildOkResponse(getEventHead()) # Return part of a json event
272 if (ctr_responses % 10 == 5):
273 return buildEmptyResponse(404) # Return empty message with status code
275 if (ctr_responses % 10 == 6):
282 seqNr = i+(ctr_responses-1)
283 if i != 0: msg = msg + ","
284 msg = msg + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022)
285 fileMap[seqNr] = seqNr
287 msg = msg + getEventEnd()
289 return buildOkResponse("["+msg+"]")
293 global ctr_unique_files
295 ctr_responses = ctr_responses + 1
297 if (ctr_responses > 100):
298 return buildOkResponse("[]")
303 seqNr = i+(ctr_responses-1)
304 if (seqNr%10 == 0): # Every 10th file is "missing"
305 fn = "MissingFile_" + str(seqNr) + ".tar.gz"
307 fn = "1MB_" + str(seqNr) + ".tar.gz"
308 fileMap[seqNr] = seqNr
310 if i != 0: msg = msg + ","
311 msg = msg + getEventName(fn,ftptype,"onap","pano","localhost",1022)
314 msg = msg + getEventEnd()
316 return buildOkResponse("["+msg+"]")
320 global ctr_unique_files
322 ctr_responses = ctr_responses + 1
324 if (ctr_responses > 100):
325 return buildOkResponse("[]")
330 fn = "1MB_0.tar.gz" # All files identical names
331 if i != 0: msg = msg + ","
332 msg = msg + getEventName(fn,ftptype,"onap","pano","localhost",1022)
335 msg = msg + getEventEnd()
337 return buildOkResponse("["+msg+"]")
342 global ctr_unique_files
344 ctr_responses = ctr_responses + 1
349 seqNr = i+(ctr_responses-1)
350 if i != 0: msg = msg + ","
351 msg = msg + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022)
352 fileMap[seqNr] = seqNr
354 msg = msg + getEventEnd()
356 return buildOkResponse("["+msg+"]")
360 global ctr_unique_files
362 ctr_responses = ctr_responses + 1
367 seqNr = i+(ctr_responses-1)
368 if i != 0: msg = msg + ","
369 msg = msg + getEventName("5MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022)
370 fileMap[seqNr] = seqNr
372 msg = msg + getEventEnd()
374 return buildOkResponse("["+msg+"]")
378 global ctr_unique_files
380 ctr_responses = ctr_responses + 1
382 if (ctr_responses > 5):
383 return buildOkResponse("[]")
387 for evts in range(700): # build events for 5 MEs
390 msg = msg + getEventHeadNodeName("PNF"+str(evts))
391 seqNr = (ctr_responses-1)
392 msg = msg + getEventName("1MB_" + str(seqNr) + ".tar.gz",ftptype,"onap","pano","localhost",1022)
393 seqNr = seqNr + evts*1000000 #Create unique id for this node and file
394 fileMap[seqNr] = seqNr
395 msg = msg + getEventEnd()
397 return buildOkResponse("["+msg+"]")
401 return tc100(ftptype)
403 return tc101(ftptype)
405 return tc102(ftptype)
408 return tc110(ftptype)
410 return tc111(ftptype)
412 return tc112(ftptype)
414 return tc113(ftptype)
417 return tc120(ftptype)
419 return tc121(ftptype)
421 return tc122(ftptype)
424 return tc1000(ftptype)
426 return tc1001(ftptype)
428 #### Functions to build json messages and respones ####
430 # Function to build fixed beginning of an event
432 return getEventHeadNodeName("oteNB5309")
434 def getEventHeadNodeName(nodename):
438 "commonEventHeader": {
439 "startEpochMicrosec": 8745745764578,
440 "eventId": "FileReady_1797490e-10ae-4d48-9ea7-3d7d790b25e1",
441 "timeZoneOffset": "UTC+05.30",
442 "internalHeaderFields": {
443 "collectorTimeStamp": "Tue, 09 18 2018 10:56:52 UTC"
445 "priority": "Normal",
447 "reportingEntityName": \"""" + nodename + """",
449 "domain": "notification",
450 "lastEpochMicrosec": 8745745764578,
451 "eventName": "Noti_RnNode-Ericsson_FileReady",
452 "vesEventListenerVersion": "7.0.1",
453 "sourceName": \"""" + nodename + """"
455 "notificationFields": {
456 "notificationFieldsVersion": "2.0",
457 "changeType": "FileReady",
458 "changeIdentifier": "PM_MEAS_FILES",
459 "arrayOfNamedHashMap": [
463 # Function to build the variable part of an event
464 def getEventName(fn,type,user,passwd,ip,port):
466 "name": \"""" + fn + """",
468 "fileFormatType": "org.3GPP.32.435#measCollec",
469 "location": \"""" + type + """://""" + user + """:""" + passwd + """@""" + ip + """:""" + str(port) + """/""" + fn + """",
470 "fileFormatVersion": "V10",
471 "compression": "gzip"
476 # Function to build fixed end of an event
486 # Function to build an OK reponse from a message string
487 def buildOkResponse(msg):
488 response = app.response_class(
489 response=str.encode(msg),
491 mimetype='application/json')
494 # Function to build an empty message with status
495 def buildEmptyResponse(status_code):
496 response = app.response_class(
497 response=str.encode(""),
499 mimetype='application/json')
503 if __name__ == "__main__":
510 #Keeps all reponded file names
516 parser = argparse.ArgumentParser()
518 #SFTP TCs with single ME
522 help='TC100 - One ME, SFTP, 1 1MB file, 1 event')
526 help='TC101 - One ME, SFTP, 1 5MB file, 1 event')
530 help='TC102 - One ME, SFTP, 1 50MB file, 1 event')
535 help='TC110 - One ME, SFTP, 1MB files, 1 file per event, 100 events, 1 event per poll.')
539 help='TC111 - One ME, SFTP, 1MB files, 100 files per event, 100 events, 1 event per poll.')
543 help='TC112 - One ME, SFTP, 5MB files, 100 files per event, 100 events, 1 event per poll.')
547 help='TC113 - One ME, SFTP, 1MB files, 100 files per event, 100 events. All events in one poll.')
552 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')
556 help='TC121 - One ME, SFTP, 1MB files, 100 files per event, 100 events, 1 event per poll. 10% missing files')
560 help='TC122 - One ME, SFTP, 1MB files, 100 files per event, 100 events. 1 event per poll. All files with identical name. ')
565 help='TC1000 - One ME, SFTP, 1MB files, 100 files per event, endless number of events, 1 event per poll')
569 help='TC1001 - One ME, SFTP, 5MB files, 100 files per event, endless number of events, 1 event per poll')
571 # SFTP TCs with multiple MEs
575 help='TC510 - 5 MEs, SFTP, 1MB files, 1 file per event, 100 events, 1 event per poll.')
579 # FTPS TCs with single ME
583 help='TC200 - One ME, FTPS, 1 1MB file, 1 event')
587 help='TC201 - One ME, FTPS, 1 5MB file, 1 event')
591 help='TC202 - One ME, FTPS, 1 50MB file, 1 event')
596 help='TC210 - One ME, FTPS, 1MB files, 1 file per event, 100 events, 1 event per poll.')
600 help='TC211 - One ME, FTPS, 1MB files, 100 files per event, 100 events, 1 event per poll.')
604 help='TC212 - One ME, FTPS, 5MB files, 100 files per event, 100 events, 1 event per poll.')
608 help='TC213 - One ME, FTPS, 1MB files, 100 files per event, 100 events. All events in one poll.')
613 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')
617 help='TC221 - One ME, FTPS, 1MB files, 100 files per event, 100 events, 1 event per poll. 10% missing files')
621 help='TC222 - One ME, FTPS, 1MB files, 100 files per event, 100 events. 1 event per poll. All files with identical name. ')
626 help='TC2000 - One ME, FTPS, 1MB files, 100 files per event, endless number of events, 1 event per poll')
630 help='TC2001 - One ME, FTPS, 5MB files, 100 files per event, endless number of events, 1 event per poll')
635 help='TC510 - 5 MEs, FTPS, 1MB files, 1 file per event, 100 events, 1 event per poll.')
637 args = parser.parse_args()
704 print("No TC was defined")
705 print("use --help for usage info")
710 app.run(port=HOST_PORT, host=HOST_IP)