1e3bc207618012dd22c8b5324d24764002ab1045
[tt2015.git] / a2 / code / client / gen.py
1 #!/usr/bin/python
2 from sender import Sender
3 import sys
4 import random
5 import string
6
7 def test(corruptDestinationPort, corruptSourcePort, numpackets, payloadsize, outOfOrder, serverPort):
8 msgs = []
9 ownSeqnr = 101
10
11 # Make the messages
12 for _ in range(numpackets):
13 #msgs.append((ownSeqnr, ''.join(random.choice(string.ascii_letters) for _ in range(payloadsize))))
14 msgs.append((ownSeqnr, ''.join(random.choice(string.ascii_letters) for _ in range(payloadsize))))
15 ownSeqnr += payloadsize
16
17 # Out of order
18 if outOfOrder and len(msgs) > 1:
19 indexes = range(0, len(msgs))
20 random.shuffle(indexes)
21 msgs[indexes[0]], msgs[indexes[1]] = msgs[indexes[1]], msgs[indexes[0]]
22 print msgs
23
24 sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
25 # isLocal is True if the interface is a local one
26 response = sender.sendInput("S", 100, 100)
27
28 # triggers the response SA _ 101 if the server is listening on the specified port
29 # if the server isn't listening, there are no responses
30 print sender.lastAckReceived
31 print sender.isTimeout
32
33 # an example for the echo handling server
34 if sender.isTimeout == False: # in case something was received
35 #print 'swapped {} {}'.format(indexes[0], indexes[1])
36 corruptDestinationPort = -1 if not corruptDestinationPort else random.randint(0, len(msgs))
37 oldDestinationPort = sender.serverPort
38 corruptSourcePort = -1 if not corruptSourcePort else random.randint(0, len(msgs))
39 oldSourcePort = sender.senderPort
40 for i, (seq, m) in enumerate(msgs):
41 if i == corruptDestinationPort:
42 sender.serverPort = sender.serverPort+1
43 else:
44 sender.serverPort = oldDestinationPort
45
46 if i == corruptSourcePort:
47 sender.senderPort = sender.senderPort+1
48 else:
49 sender.senderPort = oldSourcePort
50 sender.sendInput("A", seq, sender.lastSeqReceived + 1, None) # send some data
51 sender.sendInput("PA", seq, sender.lastSeqReceived + 1, m) # send some data
52
53 print 'response: ', sender.sendInput("FA", ownSeqnr, sender.lastSeqReceived + 1) # close connection (the echo also closes)
54 print 'response: ', sender.sendInput("RP", ownSeqnr+1, 0) # reset connection
55
56 sender.sendReset() # switch sender port
57 print 'Succes!'
58
59
60 if __name__ == '__main__':
61 serverPort = 10000
62 if len(sys.argv) > 1:
63 serverPort = int(sys.argv[1])
64 test(corruptDestinationPort=False, corruptSourcePort=False, numpackets=2, payloadsize=1, outOfOrder=False, serverPort=serverPort)