diff --git a/test/mocks/datafilecollector-testharness/mr-sim/Dockerfile b/test/mocks/datafilecollector-testharness/mr-sim/Dockerfile
new file mode 100755
index 0000000..5341bb0
--- /dev/null
+++ b/test/mocks/datafilecollector-testharness/mr-sim/Dockerfile
@@ -0,0 +1,10 @@
+FROM python:3.6-alpine
+
+COPY . /app
+
+WORKDIR /app
+
+RUN pip install -r requirements.txt
+
+EXPOSE 2222
+
diff --git a/test/mocks/datafilecollector-testharness/mr-sim/README.md b/test/mocks/datafilecollector-testharness/mr-sim/README.md
index b04b9ec..5746345 100644
--- a/test/mocks/datafilecollector-testharness/mr-sim/README.md
+++ b/test/mocks/datafilecollector-testharness/mr-sim/README.md
@@ -1,3 +1,52 @@
+
+#Alternative to running python (as described below) on your machine, use the docker files.
+1. Build docker container with ```docker build -t mrsim:latest .```
+2. Run the container ```docker-compose up```
+The behavior can be changed by argument to the python script in the docker-compose.yml
+
+The simulator can be queried for statistics
+localhost:2222/ctr_requests   - return an integer of the number of get request to the event poll path
+localhost:2222/ctr_responses  - return an integer of the number of get responses to the event poll path
+localhost:2222/ctr_unique_files - returns an integer or the number of unique files. A unique file is the combination of node+file_sequence_number 
+
+
+##Common TC info
+File names for 1MB, 5MB and 50MB files
+Files in the format: <size-in-mb>MB_<sequence-number>.tar.gz    Ex. for 5MB file with sequence number 12:  5MB_12.tar.gz
+The sequence numbers are stepped so that all files have unique names
+Missing files (files that are not expected to be found in the ftp server. Format: MissingFile_<sequence-number>.tar.gz
+
+Limited event streams
+When the number of events are exhausted, empty replies are returned '[]'
+
+TC100 - One ME, SFTP, 1 1MB file, 1 event
+TC101 - One ME, SFTP, 1 5MB file, 1 event
+TC102 - One ME, SFTP, 1 50MB file, 1 event
+
+TC110 - One ME, SFTP, 1MB files, 1 file per event, 100 events, 1 event per poll.
+TC111 - One ME, SFTP, 1MB files, 100 files per event, 100 events, 1 event per poll.
+TC112 - One ME, SFTP, 5MB files, 100 files per event, 100 events, 1 event per poll.
+TC113 - One ME, SFTP, 1MB files, 100 files per event, 100 events. All events in one poll.
+
+
+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
+TC121 - One ME, SFTP, 1MB files, 100 files per event, 100 events, 1 event per poll. 10% missing files
+TC122 - One ME, SFTP, 1MB files, 100 files per event, 100 events. 1 event per poll. All files with identical name. 
+
+Endless event streams
+TC1000 - One ME, SFTP, 1MB files, 100 files per event, endless number of events, 1 event per poll
+TC1001 - One ME, SFTP, 5MB files, 100 files per event, endless number of events, 1 event per poll
+
+
+TC510 - 5 ME, SFTP, 1MB files, 1 file per event, 100 events, 1 event per poll.
+
+
+TC200-TC202 same as TC100-TC102 but with FTPS
+TC210-TC213 same as TC110-TC113 but with FTPS
+TC2000-TC2001 same as TC1000-TC1001 but with FTPS
+TC610 same as TC510 but with FTPS
+
+
 ## Developer workflow
 
 1. ```sudo apt install python3-venv```
diff --git a/test/mocks/datafilecollector-testharness/mr-sim/docker-compose.yml b/test/mocks/datafilecollector-testharness/mr-sim/docker-compose.yml
new file mode 100644
index 0000000..7315e4b
--- /dev/null
+++ b/test/mocks/datafilecollector-testharness/mr-sim/docker-compose.yml
@@ -0,0 +1,10 @@
+version: '2'
+
+services:
+  mrsim:
+    image: mrsim:latest
+    ports:
+     - "2222:2222"
+    container_name: mrsim
+    command: python mr-sim.py --tc100
+# Change -tc100 to other tc number for desired behavior.
\ No newline at end of file
diff --git a/test/mocks/datafilecollector-testharness/mr-sim/mr-sim.py b/test/mocks/datafilecollector-testharness/mr-sim/mr-sim.py
index c37ae69..ef46535 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 @@
 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
+    global ctr_requests
+    global args
 
-    mr_counter = mr_counter + 1
-    print("MR receiver counter: " + str(mr_counter))
+    ctr_requests = ctr_requests + 1
+    print("MR: poll request#: " + str(ctr_requests))
 
-    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 args.tc100:
+      return tc100("sftp")
+    elif args.tc101:
+      return tc101("sftp")
+    elif args.tc102:
+      return tc102("sftp")
 
-    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')
+    elif args.tc110:
+      return tc110("sftp")
+    elif args.tc111:
+      return tc111("sftp")
+    elif args.tc112:
+      return tc112("sftp")
+    elif args.tc113:
+      return tc113("sftp")
 
-        return response
+    elif args.tc120:
+      return tc120("sftp")
+    elif args.tc121:
+      return tc121("sftp")
+    elif args.tc122:
+      return tc122("sftp")
 
-    if mr_replies[mr_counter].replytype == 2:
+    elif args.tc1000:
+      return tc1000("sftp")
+    elif args.tc1001:
+      return tc1001("sftp")
 
-        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
+    elif args.tc510:
+      return tc510("sftp")      
 
 
-class Reply:
-    """An instance of the reply event, which can be configured to behave in a certain way
-    (delay, error code, reply body"""
+    elif args.tc200:
+      return tc200("ftps")
+    elif args.tc201:
+      return tc201("ftps")
+    elif args.tc202:
+      return tc202("ftps")
 
-    def to_json(self):
-        return self.jsonreply
+    elif args.tc210:
+      return tc210("ftps")
+    elif args.tc211:
+      return tc211("ftps")
+    elif args.tc212:
+      return tc212("ftps")
+    elif args.tc213:
+      return tc213("ftps")
 
-    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("""
-        [{
+    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 @@
               },
               "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 =  """
               ]
             }
           }
-        }]
-        """)
+        }
+        """
+    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
 
-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"]"
-
-
-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")
-
-
-def tc3():
-    prepareMrRespArrFtps()
-
-
-def tc4():
-    global mr_replies
-
-    for i in range(7):
-        mr_replies.append(
-            Reply(
-                port=21,
-                ip="localhost",
-                type="ftps",
-                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=21,
-        ip="localhost",
-        type="fftp",
-        file="1MB.tar.gz")
+# 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__":
-    mr_replies = []
-    mr_counter = 0  # counting hits reaching MR instance
-    DR_block_single_req = 0
+  
+    #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(
-        '--tc1',
+        '--tc100',
         action='store_true',
-        help='TC1: reply all queries with 1-1 files using SFTP')
+        help='TC100 - One ME, SFTP, 1 1MB file, 1 event')
     parser.add_argument(
-        '--tc2',
+        '--tc101',
         action='store_true',
-        help='TC2: Reply according to error scenarios, then return 1 file finally for SFTP ---NOTE: updated keys required')
+        help='TC101 - One ME, SFTP, 1 5MB file, 1 event')
     parser.add_argument(
-        '--tc3',
+        '--tc102',
         action='store_true',
-        help='TC3: reply all queries with 1-1 files using FTPS')
+        help='TC102 - One ME, SFTP, 1 50MB file, 1 event')
+
     parser.add_argument(
-        '--tc4',
+        '--tc110',
         action='store_true',
-        help='TC4: Reply according to error scenarios, then return 1 file finally for FTPS ---NOTE: updated keys required')
+        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.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)
