testcases erin
[tt2015.git] / a2 / code / client / gen.py
old mode 100755 (executable)
new mode 100644 (file)
index 1e3bc20..790c1c1
@@ -4,38 +4,58 @@ import sys
 import random
 import string
 
-def test(corruptDestinationPort, corruptSourcePort, numpackets, payloadsize, outOfOrder, serverPort):
+def test(
+        expectedResult,
+        numSegments=0, 
+        dropNthPacket=-1,
+        corruptDestinationPort=False,
+        corruptSourcePort=False,
+        outOfOrder=False, 
+        payloadSize=1, 
+        serverPort=1000):
     msgs = []
     ownSeqnr = 101
 
     # Make the messages
-    for _ in range(numpackets):
-        #msgs.append((ownSeqnr, ''.join(random.choice(string.ascii_letters) for _ in range(payloadsize))))
-        msgs.append((ownSeqnr, ''.join(random.choice(string.ascii_letters) for _ in range(payloadsize))))
-        ownSeqnr += payloadsize
+    for _ in range(numSegments):
+        msgs.append((
+            ownSeqnr,
+            ''.join(random.choice(string.ascii_letters) for _ in
+                    range(payloadSize))))
+        ownSeqnr += payloadSize
+    results = ([], msgs[:])
 
     # Out of order
     if outOfOrder and len(msgs) > 1:
-        indexes = range(0, len(msgs))
-        random.shuffle(indexes)
-        msgs[indexes[0]], msgs[indexes[1]] = msgs[indexes[1]], msgs[indexes[0]]
-    print msgs
+        msgs[1], msgs[2] = msgs[2], msgs[1]
+#        indexes = range(0, len(msgs))
+#        random.shuffle(indexes)
+#        msgs[indexes[0]], msgs[indexes[1]] = msgs[indexes[1]], msgs[indexes[0]]
     
-    sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
+    sender = Sender(
+         serverIP="127.0.0.1",
+         networkInterface="lo",
+         isLocal=True,
+         serverPort=serverPort,
+         waitTime=1,
+         isVerbose=0)
     # isLocal is True if the interface is a local one
     response = sender.sendInput("S", 100, 100) 
+    results[0].append(response)
 
     # triggers the response SA _ 101 if the server is listening on the specified port
     # if the server isn't listening, there are no responses
-    print sender.lastAckReceived
-    print sender.isTimeout
+#    print sender.lastAckReceived
+#    print sender.isTimeout
     
     # an example for the echo handling server
     if sender.isTimeout == False: # in case something was received
         #print 'swapped {} {}'.format(indexes[0], indexes[1])
-        corruptDestinationPort = -1 if not corruptDestinationPort else random.randint(0, len(msgs))
+        corruptDestinationPort = \
+            -1 if not corruptDestinationPort else random.randint(0, len(msgs))
         oldDestinationPort = sender.serverPort
-        corruptSourcePort = -1 if not corruptSourcePort else random.randint(0, len(msgs))
+        corruptSourcePort = \
+            -1 if not corruptSourcePort else random.randint(0, len(msgs))
         oldSourcePort = sender.senderPort
         for i, (seq, m) in enumerate(msgs):
             if i == corruptDestinationPort:
@@ -47,18 +67,178 @@ def test(corruptDestinationPort, corruptSourcePort, numpackets, payloadsize, out
                 sender.senderPort = sender.senderPort+1
             else:
                 sender.senderPort = oldSourcePort
-            sender.sendInput("A", seq, sender.lastSeqReceived + 1, None) # send some data
-            sender.sendInput("PA", seq, sender.lastSeqReceived + 1, m) # send some data
+            if i == dropNthPacket:
+                continue
+            #results[0].append(sender.sendInput("A", seq, sender.lastSeqReceived + 1, None))
+            results[0].append(sender.sendInput("PA", seq, sender.lastSeqReceived + 1, m))
 
-        print 'response: ', sender.sendInput("FA", ownSeqnr, sender.lastSeqReceived + 1) # close connection (the echo also closes)
-        print 'response: ', sender.sendInput("RP", ownSeqnr+1, 0) # reset connection
+        results[0].append(sender.sendInput("FA", ownSeqnr, sender.lastSeqReceived + 1))
+        results[0].append(sender.sendInput("RP", ownSeqnr+1, 0))
    
     sender.sendReset() # switch sender port
-    print 'Succes!'
-
+    result = [r[2] for r in results[0]]
+    if result == expectedResult:
+        print 'Success'
+    else:
+        print 'Fail'
+        print '{} not equal to\n{}'.format(result, expectedResult)
 
 if __name__ == '__main__':
     serverPort = 10000
     if len(sys.argv) > 1:
         serverPort = int(sys.argv[1])
-    test(corruptDestinationPort=False, corruptSourcePort=False, numpackets=2, payloadsize=1, outOfOrder=False, serverPort=serverPort)
+    tcs = [
+#Case 1
+        {'expectedResult': [101, 102, 'm'],
+         'numSegments': 0,
+        'corruptDestinationPort': False,
+         'corruptSourcePort': False,
+         'payloadSize': 1, 
+         'dropNthPacket': -1, 
+         'outOfOrder': False},
+#Case 2
+        {'expectedResult': [101, 102, 103, 'm'],
+         'numSegments': 1,
+        'corruptDestinationPort': False,
+         'corruptSourcePort': False,
+         'payloadSize': 1, 
+         'dropNthPacket': -1, 
+         'outOfOrder': False},
+#Case 3
+        {'expectedResult': [101, 102, 103, 104, 105, 106, 107, 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': False,
+         'corruptSourcePort': False,
+         'payloadSize': 1, 
+         'dropNthPacket': -1, 
+         'outOfOrder': False},
+#Case 4
+        {'expectedResult': [101, 65596, 65596, 131091, 196586, 262081, 327576, 327577],
+         'numSegments': 5,
+        'corruptDestinationPort': False,
+         'corruptSourcePort': False,
+         'payloadSize': 65495, 
+         'dropNthPacket': -1, 
+         'outOfOrder': False},
+#Case 5
+        {'expectedResult': [101, 102, 'm', 103, 103, 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': True,
+         'payloadSize': 1, 
+         'dropNthPacket': -1, 
+         'outOfOrder': True},
+#Case 6
+        {'expectedResult': [101, 65596, 65596, 131091, 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': True,
+         'payloadSize': 65495, 
+         'dropNthPacket': 2, 
+         'outOfOrder': False},
+#Case 7
+        {'expectedResult': [101, 'm', 101, 'm', 'm', 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': True,
+         'payloadSize': 1, 
+         'dropNthPacket': -1, 
+         'outOfOrder': False},
+#Case 8
+        {'expectedResult': [101, 'm', 101, 'm', 'm', 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': True,
+         'payloadSize': 65495, 
+         'dropNthPacket': -1, 
+         'outOfOrder': False},
+#Case 9
+        {'expectedResult': [101, 102, 103, 103, 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': False,
+         'corruptSourcePort': False,
+         'payloadSize': 1, 
+         'dropNthPacket': 2, 
+         'outOfOrder': False},
+#Case 10
+        {'expectedResult': [101, 65596, 131091, 131091, 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': False,
+         'corruptSourcePort': False,
+         'payloadSize': 65495, 
+         'dropNthPacket': 2, 
+         'outOfOrder': False},
+#Case 11
+        {'expectedResult': [101, 65596, 65596, 'm', 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': False,
+         'payloadSize': 65495, 
+         'dropNthPacket': 2, 
+         'outOfOrder': False},
+#Case 12
+        {'expectedResult': [101, 65596, 65596, 65596, 131091, 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': False,
+         'corruptSourcePort': True,
+         'payloadSize': 65495, 
+         'dropNthPacket': -1, 
+         'outOfOrder': True},
+#Case 13
+        {'expectedResult': [101, 'm', 'm', 'm'],
+         'numSegments': 1,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': True,
+         'payloadSize': 1, 
+         'dropNthPacket': -1, 
+         'outOfOrder': False},
+#Case 14
+        {'expectedResult': [101, 102, 103, 104, 'm', 104, 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': True,
+         'payloadSize': 1, 
+         'dropNthPacket': -1, 
+         'outOfOrder': False},
+#Case 15
+        {'expectedResult': [101, 65596, 'm', 65596, 'm', 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': True,
+         'payloadSize': 65495, 
+         'dropNthPacket': -1, 
+         'outOfOrder': False},
+#Case 16
+        {'expectedResult': [101, 65596, 65596, 131091, 196586, 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': True,
+         'payloadSize': 65495, 
+         'dropNthPacket': -1, 
+         'outOfOrder': False},
+#Case 17
+        {'expectedResult': [101, 'm', 101, 'm', 'm', 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': False,
+         'payloadSize': 1, 
+         'dropNthPacket': -1, 
+         'outOfOrder': True},
+#Case 18
+        {'expectedResult': [101, 65596, 65596, 'm', 'm', 'm', 'm', 'm'],
+         'numSegments': 5,
+        'corruptDestinationPort': True,
+         'corruptSourcePort': False,
+         'payloadSize': 65495, 
+         'dropNthPacket': -1, 
+         'outOfOrder': True}
+        ]
+    for i, d in enumerate(tcs, 1):
+        with open('{:02d}.py'.format(i), 'w') as f:
+             f.write("""\
+#!/usr/bin/python
+import gen
+print 'Test number: {}'
+gen.test({}, serverPort={})
+""".format(i, ', '.join('{}={}'.format(k, v) for k, v in d.items()), serverPort))
+        print 'Testkaas {} geschreven'.format(i)