jtorx log
[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 dropNthPacket=-1,
11 corruptDestinationPort=False,
12 corruptSourcePort=False,
13 outOfOrder=False,
14 payloadSize=1,
15 serverPort=1000):
16 msgs = []
17 ownSeqnr = 101
18
19 # Make the messages
20 for _ in range(numSegments):
21 msgs.append((
22 ownSeqnr,
23 ''.join(random.choice(string.ascii_letters) for _ in
24 range(payloadSize))))
25 ownSeqnr += payloadSize
26 results = ([], msgs[:])
27
28 # Out of order
29 if outOfOrder and len(msgs) > 1:
30 msgs[1], msgs[2] = msgs[2], msgs[1]
31 # indexes = range(0, len(msgs))
32 # random.shuffle(indexes)
33 # msgs[indexes[0]], msgs[indexes[1]] = msgs[indexes[1]], msgs[indexes[0]]
34
35 sender = Sender(
36 serverIP="127.0.0.1",
37 networkInterface="lo",
38 isLocal=True,
39 serverPort=serverPort,
40 waitTime=1,
41 isVerbose=0)
42 # isLocal is True if the interface is a local one
43 response = sender.sendInput("S", 100, 100)
44 results[0].append(response)
45
46 # triggers the response SA _ 101 if the server is listening on the specified port
47 # if the server isn't listening, there are no responses
48 # print sender.lastAckReceived
49 # print sender.isTimeout
50
51 # an example for the echo handling server
52 if sender.isTimeout == False: # in case something was received
53 #print 'swapped {} {}'.format(indexes[0], indexes[1])
54 corruptDestinationPort = \
55 -1 if not corruptDestinationPort else random.randint(0, len(msgs))
56 oldDestinationPort = sender.serverPort
57 corruptSourcePort = \
58 -1 if not corruptSourcePort else random.randint(0, len(msgs))
59 oldSourcePort = sender.senderPort
60 for i, (seq, m) in enumerate(msgs):
61 if i == corruptDestinationPort:
62 sender.serverPort = sender.serverPort+1
63 else:
64 sender.serverPort = oldDestinationPort
65
66 if i == corruptSourcePort:
67 sender.senderPort = sender.senderPort+1
68 else:
69 sender.senderPort = oldSourcePort
70 if i == dropNthPacket:
71 continue
72 #results[0].append(sender.sendInput("A", seq, sender.lastSeqReceived + 1, None))
73 results[0].append(sender.sendInput("PA", seq, sender.lastSeqReceived + 1, m))
74
75 results[0].append(sender.sendInput("FA", ownSeqnr, sender.lastSeqReceived + 1))
76 results[0].append(sender.sendInput("RP", ownSeqnr+1, 0))
77
78 sender.sendReset() # switch sender port
79 result = [r[2] for r in results[0]]
80 if result == expectedResult:
81 print 'Success'
82 else:
83 print 'Fail'
84 print '{} not equal to\n{}'.format(result, expectedResult)
85
86 if __name__ == '__main__':
87 serverPort = 10000
88 if len(sys.argv) > 1:
89 serverPort = int(sys.argv[1])
90 tcs = [
91 #Case 1
92 {'expectedResult': [101, 102, 'm'],
93 'numSegments': 0,
94 'corruptDestinationPort': False,
95 'corruptSourcePort': False,
96 'payloadSize': 1,
97 'dropNthPacket': -1,
98 'outOfOrder': False},
99 #Case 2
100 {'expectedResult': [101, 102, 103, 'm'],
101 'numSegments': 1,
102 'corruptDestinationPort': False,
103 'corruptSourcePort': False,
104 'payloadSize': 1,
105 'dropNthPacket': -1,
106 'outOfOrder': False},
107 #Case 3
108 {'expectedResult': [101, 102, 103, 104, 105, 106, 107, 'm'],
109 'numSegments': 5,
110 'corruptDestinationPort': False,
111 'corruptSourcePort': False,
112 'payloadSize': 1,
113 'dropNthPacket': -1,
114 'outOfOrder': False},
115 #Case 4
116 {'expectedResult': [101, 65596, 65596, 131091, 196586, 262081, 327576, 327577],
117 'numSegments': 5,
118 'corruptDestinationPort': False,
119 'corruptSourcePort': False,
120 'payloadSize': 65495,
121 'dropNthPacket': -1,
122 'outOfOrder': False},
123 #Case 5
124 {'expectedResult': [101, 102, 'm', 103, 103, 'm', 'm', 'm'],
125 'numSegments': 5,
126 'corruptDestinationPort': True,
127 'corruptSourcePort': True,
128 'payloadSize': 1,
129 'dropNthPacket': -1,
130 'outOfOrder': True},
131 #Case 6
132 {'expectedResult': [101, 65596, 65596, 131091, 'm', 'm', 'm'],
133 'numSegments': 5,
134 'corruptDestinationPort': True,
135 'corruptSourcePort': True,
136 'payloadSize': 65495,
137 'dropNthPacket': 2,
138 'outOfOrder': False},
139 #Case 7
140 {'expectedResult': [101, 'm', 101, 'm', 'm', 'm', 'm', 'm'],
141 'numSegments': 5,
142 'corruptDestinationPort': True,
143 'corruptSourcePort': True,
144 'payloadSize': 1,
145 'dropNthPacket': -1,
146 'outOfOrder': False},
147 #Case 8
148 {'expectedResult': [101, 'm', 101, 'm', 'm', 'm', 'm', 'm'],
149 'numSegments': 5,
150 'corruptDestinationPort': True,
151 'corruptSourcePort': True,
152 'payloadSize': 65495,
153 'dropNthPacket': -1,
154 'outOfOrder': False},
155 #Case 9
156 {'expectedResult': [101, 102, 103, 103, 'm', 'm', 'm'],
157 'numSegments': 5,
158 'corruptDestinationPort': False,
159 'corruptSourcePort': False,
160 'payloadSize': 1,
161 'dropNthPacket': 2,
162 'outOfOrder': False},
163 #Case 10
164 {'expectedResult': [101, 65596, 131091, 131091, 'm', 'm', 'm'],
165 'numSegments': 5,
166 'corruptDestinationPort': False,
167 'corruptSourcePort': False,
168 'payloadSize': 65495,
169 'dropNthPacket': 2,
170 'outOfOrder': False},
171 #Case 11
172 {'expectedResult': [101, 65596, 65596, 'm', 'm', 'm', 'm'],
173 'numSegments': 5,
174 'corruptDestinationPort': True,
175 'corruptSourcePort': False,
176 'payloadSize': 65495,
177 'dropNthPacket': 2,
178 'outOfOrder': False},
179 #Case 12
180 {'expectedResult': [101, 65596, 65596, 65596, 131091, 'm', 'm', 'm'],
181 'numSegments': 5,
182 'corruptDestinationPort': False,
183 'corruptSourcePort': True,
184 'payloadSize': 65495,
185 'dropNthPacket': -1,
186 'outOfOrder': True},
187 #Case 13
188 {'expectedResult': [101, 'm', 'm', 'm'],
189 'numSegments': 1,
190 'corruptDestinationPort': True,
191 'corruptSourcePort': True,
192 'payloadSize': 1,
193 'dropNthPacket': -1,
194 'outOfOrder': False},
195 #Case 14
196 {'expectedResult': [101, 102, 103, 104, 'm', 104, 'm', 'm'],
197 'numSegments': 5,
198 'corruptDestinationPort': True,
199 'corruptSourcePort': True,
200 'payloadSize': 1,
201 'dropNthPacket': -1,
202 'outOfOrder': False},
203 #Case 15
204 {'expectedResult': [101, 65596, 'm', 65596, 'm', 'm', 'm', 'm'],
205 'numSegments': 5,
206 'corruptDestinationPort': True,
207 'corruptSourcePort': True,
208 'payloadSize': 65495,
209 'dropNthPacket': -1,
210 'outOfOrder': False},
211 #Case 16
212 {'expectedResult': [101, 65596, 65596, 131091, 196586, 'm', 'm', 'm'],
213 'numSegments': 5,
214 'corruptDestinationPort': True,
215 'corruptSourcePort': True,
216 'payloadSize': 65495,
217 'dropNthPacket': -1,
218 'outOfOrder': False},
219 #Case 17
220 {'expectedResult': [101, 'm', 101, 'm', 'm', 'm', 'm', 'm'],
221 'numSegments': 5,
222 'corruptDestinationPort': True,
223 'corruptSourcePort': False,
224 'payloadSize': 1,
225 'dropNthPacket': -1,
226 'outOfOrder': True},
227 #Case 18
228 {'expectedResult': [101, 65596, 65596, 'm', 'm', 'm', 'm', 'm'],
229 'numSegments': 5,
230 'corruptDestinationPort': True,
231 'corruptSourcePort': False,
232 'payloadSize': 65495,
233 'dropNthPacket': -1,
234 'outOfOrder': True}
235 ]
236 for i, d in enumerate(tcs, 1):
237 with open('{:02d}.py'.format(i), 'w') as f:
238 f.write("""\
239 #!/usr/bin/python
240 import gen
241 print 'Test number: {}'
242 gen.test({}, serverPort={})
243 """.format(i, ', '.join('{}={}'.format(k, v) for k, v in d.items()), serverPort))
244 print 'Testkaas {} geschreven'.format(i)