3 from werkzeug import secure_filename
4 from flask import Flask, render_template, request
8 from flask import Flask
11 DEFAULT_IP = "localhost"
15 "/events/unauthenticated.VES_NOTIFICATION_OUTPUT/OpenDcae-c12/C12",
21 mr_counter = mr_counter + 1
22 print("MR receiver counter: " + str(mr_counter))
24 if mr_replies[mr_counter].sleepMs != 0:
25 sleep(mr_replies[mr_counter].sleepMs / 1000.0)
26 print("Sleeping: " + str(mr_replies[mr_counter].sleepMs) + " ms")
28 if mr_replies[mr_counter].replytype == 0:
29 #print (str(mr_replies[mr_counter].jsonreply))
30 print("Regular reply")
31 response = app.response_class(
32 response=mr_replies[mr_counter].jsonreply,
34 mimetype='application/json')
38 if mr_replies[mr_counter].replytype == 2:
41 response = app.response_class(
44 mimetype='application/json')
48 if mr_replies[mr_counter].replytype == 1:
49 print("do nothing, sink request")
54 """An instance of the reply event, which can be configured to behave in a certain way
55 (delay, error code, reply body"""
68 self.sleepMs = sleepMs
72 self.replytype = replyType # 0 for reply, 1 timeout, 2 deny
76 self.jsonreply = str.encode("""
79 "commonEventHeader": {
80 "startEpochMicrosec": 8745745764578,
81 "eventId": "FileReady_1797490e-10ae-4d48-9ea7-3d7d790b25e1",
82 "timeZoneOffset": "UTC+05.30",
83 "internalHeaderFields": {
84 "collectorTimeStamp": "Tue, 09 18 2018 10:56:52 UTC"
88 "reportingEntityName": "otenb5309",
90 "domain": "notification",
91 "lastEpochMicrosec": 8745745764578,
92 "eventName": "Noti_RnNode-Ericsson_FileReady",
93 "vesEventListenerVersion": "7.0.1",
94 "sourceName": "oteNB5309"
96 "notificationFields": {
97 "notificationFieldsVersion": "2.0",
98 "changeType": "FileReady",
99 "changeIdentifier": "PM_MEAS_FILES",
100 "arrayOfNamedHashMap": [
106 "fileFormatType": "org.3GPP.32.435#measCollec",
120 "fileFormatVersion": "V10",
121 "compression": "gzip"
138 # first item does not require .
139 aggregatedReply = Reply(ip, file, port=factoryport).to_json()
140 for i in range(count - 1):
141 aggregatedReply = aggregatedReply + b", " + \
142 Reply(ip, file, port=factoryport, type=factorytype).to_json()
143 #print(b"aggregated reply: " + aggregatedReply)
144 return b"[" + aggregatedReply + b"]"
147 def prepareMrRespArrSftp():
150 for i in range(400): # prepare 400 regular replies
157 #mr_replies[0] is not used
160 def prepareMrRespArrFtps():
173 prepareMrRespArrSftp()
174 # no mutation needed in this TC
188 # inserting and empty reply message
189 mr_replies[1].jsonreply = b""
190 mr_replies[2].jsonreply = b""
192 # inserting a 404 error and delay
193 mr_replies[3].replytype = 2
194 mr_replies[3].sleepMs = 2000
196 # inserting and empty reply message
197 mr_replies[4].jsonreply = b""
200 mr_replies[5].replytype = 1
202 # reply with one proper file finally
203 mr_replies[6] = Reply(
211 prepareMrRespArrFtps()
225 # inserting and empty reply message
226 mr_replies[1].jsonreply = b""
227 mr_replies[2].jsonreply = b""
229 # inserting a 404 error and delay
230 mr_replies[3].replytype = 2
231 mr_replies[3].sleepMs = 2000
233 # inserting and empty reply message
234 mr_replies[4].jsonreply = b""
237 mr_replies[5].replytype = 1
239 # reply with one proper file finally
240 mr_replies[6] = Reply(
247 if __name__ == "__main__":
249 mr_counter = 0 # counting hits reaching MR instance
250 DR_block_single_req = 0
252 parser = argparse.ArgumentParser()
256 help='TC1: reply all queries with 1-1 files using SFTP')
260 help='TC2: Reply according to error scenarios, then return 1 file finally for SFTP ---NOTE: updated keys required')
264 help='TC3: reply all queries with 1-1 files using FTPS')
268 help='TC4: Reply according to error scenarios, then return 1 file finally for FTPS ---NOTE: updated keys required')
270 args = parser.parse_args()
286 print("No TC was defined")
287 print("use --help for usage info")