update generatiescirpt
[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(
8 expectedResult,
9 numSegments=0,
10 corruptDestinationPort=False,
11 corruptSourcePort=False,
12 outOfOrder=False,
13 payloadSize=1,
14 serverPort=1000):
15 msgs = []
16 ownSeqnr = 101
17
18 # Make the messages
19 for _ in range(numSegments):
20 msgs.append((
21 ownSeqnr,
22 ''.join(random.choice(string.ascii_letters) for _ in
23 range(payloadSize))))
24 ownSeqnr += payloadSize
25 results = ([], msgs[:])
26
27 # Out of order
28 if outOfOrder and len(msgs) > 1:
29 indexes = range(0, len(msgs))
30 random.shuffle(indexes)
31 msgs[indexes[0]], msgs[indexes[1]] = msgs[indexes[1]], msgs[indexes[0]]
32
33 sender = Sender(
34 serverIP="127.0.0.1",
35 networkInterface="lo",
36 isLocal=True,
37 serverPort=serverPort,
38 waitTime=1,
39 isVerbose=0)
40 # isLocal is True if the interface is a local one
41 response = sender.sendInput("S", 100, 100)
42 results[0].append(response)
43
44 # triggers the response SA _ 101 if the server is listening on the specified port
45 # if the server isn't listening, there are no responses
46 # print sender.lastAckReceived
47 # print sender.isTimeout
48
49 # an example for the echo handling server
50 if sender.isTimeout == False: # in case something was received
51 #print 'swapped {} {}'.format(indexes[0], indexes[1])
52 corruptDestinationPort = \
53 -1 if not corruptDestinationPort else random.randint(0, len(msgs))
54 oldDestinationPort = sender.serverPort
55 corruptSourcePort = \
56 -1 if not corruptSourcePort else random.randint(0, len(msgs))
57 oldSourcePort = sender.senderPort
58 for i, (seq, m) in enumerate(msgs):
59 if i == corruptDestinationPort:
60 sender.serverPort = sender.serverPort+1
61 else:
62 sender.serverPort = oldDestinationPort
63
64 if i == corruptSourcePort:
65 sender.senderPort = sender.senderPort+1
66 else:
67 sender.senderPort = oldSourcePort
68 results[0].append(sender.sendInput("A", seq, sender.lastSeqReceived + 1, None))
69 results[0].append(sender.sendInput("PA", seq, sender.lastSeqReceived + 1, m))
70
71 results[0].append(sender.sendInput("FA", ownSeqnr, sender.lastSeqReceived + 1))
72 results[0].append(sender.sendInput("RP", ownSeqnr+1, 0))
73
74 sender.sendReset() # switch sender port
75 print 'compare results with expected results'
76 print 'Succes!'
77
78 if __name__ == '__main__':
79 serverPort = 10000
80 if len(sys.argv) > 1:
81 serverPort = int(sys.argv[1])
82 tcs = [
83 #Case 1
84 {'expectedResult': [],
85 'numSegments': 0,
86 'corruptDestinationPort': False,
87 'corruptSourcePort': False,
88 'payloadSize': 1,
89 'outOfOrder': False},
90 #Case 2
91 {'expectedResult': [],
92 'numSegments': 1,
93 'corruptDestinationPort': False,
94 'corruptSourcePort': False,
95 'payloadSize': 1,
96 'outOfOrder': False},
97 #Case 3
98 {'expectedResult': [],
99 'numSegments': 5,
100 'corruptDestinationPort': False,
101 'corruptSourcePort': False,
102 'payloadSize': 1,
103 'outOfOrder': False},
104 #Case 4
105 {'expectedResult': [],
106 'numSegments': 5,
107 'corruptDestinationPort': False,
108 'corruptSourcePort': False,
109 'payloadSize': 65495,
110 'outOfOrder': False},
111 ]
112 for i, d in enumerate(tcs, 1):
113 with open('{:02d}.py'.format(i), 'w') as f:
114 f.write("""\
115 #!/usr/bin/python
116 import gen
117 gen.test({}, serverPort={})
118 """.format(', '.join('{}={}'.format(k, v) for k, v in d.items()), serverPort))
119 print 'Testkaas {} geschreven'.format(i)