1# Copyright (c) 2016 RIPE NCC
2#
3# This program is free software: you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation, either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16from ripe.atlas.sagan import Result
17from ripe.atlas.sagan.ping import PingResult, Packet
18
19
20def test_ping_0():
21    result = Result.get('{"avg":"58.042","dst_addr":"62.2.16.12","dup":"0","fw":0,"max":"58.272","min":"57.876","msm_id":1000192,"prb_id":677,"rcvd":"3","sent":"3","src_addr":"78.128.9.202","timestamp":1328019792,"type":"ping"}')
22    assert(result.af == 4)
23    assert(result.rtt_average == 58.042)
24    assert(result.rtt_median is None)
25    assert(result.destination_address == "62.2.16.12")
26    assert(result.destination_name is None)
27    assert(result.duplicates == 0)
28    assert(result.origin is None)
29    assert(result.firmware == 0)
30    assert(result.seconds_since_sync is None)
31    assert(result.rtt_max == 58.272)
32    assert(result.rtt_min == 57.876)
33    assert(result.measurement_id == 1000192)
34    assert(result.probe_id == 677)
35    assert(result.protocol is None)
36    assert(result.packets_received == 3)
37    assert(result.packets_sent == 3)
38    assert(result.packet_size is None)
39    assert(result.step is None)
40    assert(result.created.isoformat() == "2012-01-31T14:23:12+00:00")
41    assert(result.packets == [])
42
43
44def test_ping_1():
45    result = Result.get('{"addr":"62.2.16.12","avg":124.572,"dup":0,"from":"194.85.27.7","fw":1,"max":125.44499999999999,"min":123.89400000000001,"msm_id":1000192,"name":"hsi.cablecom.ch","prb_id":165,"rcvd":3,"sent":3,"size":56,"timestamp":1340523908,"type":"ping"}')
46    assert(result.af == 4)
47    assert(result.rtt_average == 124.572)
48    assert(result.rtt_median is None)
49    assert(result.destination_address == "62.2.16.12")
50    assert(result.destination_name == "hsi.cablecom.ch")
51    assert(result.duplicates == 0)
52    assert(result.origin == "194.85.27.7")
53    assert(result.firmware == 1)
54    assert(result.seconds_since_sync is None)
55    assert(result.rtt_max == 125.445)
56    assert(result.rtt_min == 123.894)
57    assert(result.measurement_id == 1000192)
58    assert(result.probe_id == 165)
59    assert(result.protocol is None)
60    assert(result.packets_received == 3)
61    assert(result.packets_sent == 3)
62    assert(result.packet_size is None)
63    assert(result.step is None)
64    assert(result.created.isoformat() == "2012-06-24T07:45:08+00:00")
65    assert(result.packets == [])
66
67
68def test_ping_4460():
69    result = Result.get('{"addr":"62.2.16.12","af":4,"avg":48.388333333333328,"dst_addr":"62.2.16.12","dst_name":"hsi.cablecom.ch","dup":0,"from":"188.194.234.136","fw":4460,"max":56.948999999999998,"min":43.869999999999997,"msm_id":1000192,"name":"hsi.cablecom.ch","prb_id":270,"proto":"ICMP","rcvd":3,"result":[{"rtt":43.869999999999997},{"rtt":56.948999999999998},{"rtt":44.345999999999997}],"sent":3,"size":20,"src_addr":"192.168.178.21","timestamp":1340524626,"ttl":52,"type":"ping"}')
70    assert(result.af == 4)
71    assert(result.rtt_average == 48.388)
72    assert(result.rtt_median == 44.346)
73    assert(result.destination_address == "62.2.16.12")
74    assert(result.destination_name == "hsi.cablecom.ch")
75    assert(result.duplicates == 0)
76    assert(result.origin == "188.194.234.136")
77    assert(result.firmware == 4460)
78    assert(result.seconds_since_sync is None)
79    assert(result.rtt_max == 56.949)
80    assert(result.rtt_min == 43.87)
81    assert(result.measurement_id == 1000192)
82    assert(result.probe_id == 270)
83    assert(result.protocol == PingResult.PROTOCOL_ICMP)
84    assert(result.packets_received == 3)
85    assert(result.packets_sent == 3)
86    assert(result.packet_size == 12)
87    assert(result.step is None)
88    assert(result.created.isoformat() == "2012-06-24T07:57:06+00:00")
89    assert(result.packets[0].rtt == 43.87)
90    assert(result.packets[1].rtt == 56.949)
91    assert(result.packets[2].rtt == 44.346)
92    assert(result.packets[0].ttl == 52)
93    assert(result.packets[1].ttl == 52)
94    assert(result.packets[2].ttl == 52)
95    assert(result.packets[0].dup is False)
96    assert(result.packets[1].dup is False)
97    assert(result.packets[2].dup is False)
98    assert(result.packets[0].source_address == "192.168.178.21")
99    assert(result.packets[1].source_address == "192.168.178.21")
100    assert(result.packets[2].source_address == "192.168.178.21")
101
102
103def test_ping_4470():
104    result = Result.get('{"addr":"62.2.16.12","af":4,"avg":195.649,"dst_addr":"62.2.16.12","dst_name":"hsi.cablecom.ch","dup":0,"from":"194.85.27.7","fw":4470,"max":197.79300000000001,"min":193.059,"msm_id":1000192,"name":"hsi.cablecom.ch","prb_id":165,"proto":"ICMP","rcvd":3,"result":[{"rtt":196.095},{"rtt":197.79300000000001},{"rtt":193.059}],"sent":3,"size":20,"src_addr":"192.168.3.8","timestamp":1344514151,"ttl":46,"type":"ping"}')
105    assert(result.af == 4)
106    assert(result.rtt_average == 195.649)
107    assert(result.rtt_median == 196.095)
108    assert(result.destination_address == "62.2.16.12")
109    assert(result.destination_name == "hsi.cablecom.ch")
110    assert(result.duplicates == 0)
111    assert(result.origin == "194.85.27.7")
112    assert(result.firmware == 4470)
113    assert(result.seconds_since_sync is None)
114    assert(result.rtt_max == 197.793)
115    assert(result.rtt_min == 193.059)
116    assert(result.measurement_id == 1000192)
117    assert(result.probe_id == 165)
118    assert(result.protocol == PingResult.PROTOCOL_ICMP)
119    assert(result.packets_received == 3)
120    assert(result.packets_sent == 3)
121    assert(result.packet_size == 12)
122    assert(result.step is None)
123    assert(result.created.isoformat() == "2012-08-09T12:09:11+00:00")
124    assert(result.packets[0].rtt == 196.095)
125    assert(result.packets[1].rtt == 197.793)
126    assert(result.packets[2].rtt == 193.059)
127    assert(result.packets[0].ttl == 46)
128    assert(result.packets[1].ttl == 46)
129    assert(result.packets[2].ttl == 46)
130    assert(result.packets[0].dup is False)
131    assert(result.packets[1].dup is False)
132    assert(result.packets[2].dup is False)
133    assert(result.packets[0].source_address == "192.168.3.8")
134    assert(result.packets[1].source_address == "192.168.3.8")
135    assert(result.packets[2].source_address == "192.168.3.8")
136
137
138def test_ping_4480():
139    result = Result.get('{"addr":"62.2.16.12","af":4,"avg":95.756666666666661,"dst_addr":"62.2.16.12","dst_name":"hsi.cablecom.ch","dup":0,"from":"194.85.27.7","fw":4480,"max":96.147999999999996,"min":95.388999999999996,"msm_id":1000192,"name":"hsi.cablecom.ch","prb_id":165,"proto":"ICMP","rcvd":3,"result":[{"rtt":95.733000000000004},{"rtt":96.147999999999996},{"rtt":95.388999999999996}],"sent":3,"size":20,"src_addr":"192.168.3.8","timestamp":1349776268,"ttl":46,"type":"ping"}')
140    assert(result.af == 4)
141    assert(result.rtt_average == 95.757)
142    assert(result.rtt_median == 95.733)
143    assert(result.destination_address == "62.2.16.12")
144    assert(result.destination_name == "hsi.cablecom.ch")
145    assert(result.duplicates == 0)
146    assert(result.origin == "194.85.27.7")
147    assert(result.firmware == 4480)
148    assert(result.seconds_since_sync is None)
149    assert(result.rtt_max == 96.148)
150    assert(result.rtt_min == 95.389)
151    assert(result.measurement_id == 1000192)
152    assert(result.probe_id == 165)
153    assert(result.protocol == PingResult.PROTOCOL_ICMP)
154    assert(result.packets_received == 3)
155    assert(result.packets_sent == 3)
156    assert(result.packet_size == 12)
157    assert(result.step is None)
158    assert(result.created.isoformat() == "2012-10-09T09:51:08+00:00")
159    assert(result.packets[0].rtt == 95.733)
160    assert(result.packets[1].rtt == 96.148)
161    assert(result.packets[2].rtt == 95.389)
162    assert(result.packets[0].ttl == 46)
163    assert(result.packets[1].ttl == 46)
164    assert(result.packets[2].ttl == 46)
165    assert(result.packets[0].dup is False)
166    assert(result.packets[1].dup is False)
167    assert(result.packets[2].dup is False)
168    assert(result.packets[0].source_address == "192.168.3.8")
169    assert(result.packets[1].source_address == "192.168.3.8")
170    assert(result.packets[2].source_address == "192.168.3.8")
171
172
173def test_ping_4500():
174    result = Result.get('{"addr":"62.2.16.12","af":4,"avg":30.114666666666665,"dst_addr":"62.2.16.12","dst_name":"hsi.cablecom.ch","dup":0,"from":"80.56.151.3","fw":4500,"max":30.344999999999999,"min":29.960999999999999,"msm_id":1000192,"name":"hsi.cablecom.ch","prb_id":202,"proto":"ICMP","rcvd":3,"result":[{"rtt":30.038},{"rtt":29.960999999999999},{"rtt":30.344999999999999}],"sent":3,"size":20,"src_addr":"192.168.1.229","timestamp":1361244431,"ttl":55,"type":"ping"}')
175    assert(result.af == 4)
176    assert(result.rtt_average == 30.115)
177    assert(result.rtt_median == 30.038)
178    assert(result.destination_address == "62.2.16.12")
179    assert(result.destination_name == "hsi.cablecom.ch")
180    assert(result.duplicates == 0)
181    assert(result.origin == "80.56.151.3")
182    assert(result.firmware == 4500)
183    assert(result.seconds_since_sync is None)
184    assert(result.rtt_max == 30.345)
185    assert(result.rtt_min == 29.961)
186    assert(result.measurement_id == 1000192)
187    assert(result.probe_id == 202)
188    assert(result.protocol == PingResult.PROTOCOL_ICMP)
189    assert(result.packets_received == 3)
190    assert(result.packets_sent == 3)
191    assert(result.packet_size == 12)
192    assert(result.step is None)
193    assert(result.created.isoformat() == "2013-02-19T03:27:11+00:00")
194    assert(result.packets[0].rtt == 30.038)
195    assert(result.packets[1].rtt == 29.961)
196    assert(result.packets[2].rtt == 30.345)
197    assert(result.packets[0].ttl == 55)
198    assert(result.packets[1].ttl == 55)
199    assert(result.packets[2].ttl == 55)
200    assert(result.packets[0].dup is False)
201    assert(result.packets[1].dup is False)
202    assert(result.packets[2].dup is False)
203    assert(result.packets[0].source_address == "192.168.1.229")
204    assert(result.packets[1].source_address == "192.168.1.229")
205    assert(result.packets[2].source_address == "192.168.1.229")
206
207
208def test_ping_4520():
209    result = Result.get('{"addr":"62.2.16.12","af":4,"avg":67.420999999999992,"dst_addr":"62.2.16.12","dst_name":"hsi.cablecom.ch","dup":0,"from":"194.85.27.7","fw":4520,"max":70.230999999999995,"min":65.974999999999994,"msm_id":1000192,"name":"hsi.cablecom.ch","prb_id":165,"proto":"ICMP","rcvd":3,"result":[{"rtt":70.230999999999995},{"rtt":65.974999999999994},{"rtt":66.057000000000002}],"sent":3,"size":20,"src_addr":"192.168.3.8","timestamp":1365379380,"ttl":47,"type":"ping"}')
210    assert(result.af == 4)
211    assert(result.rtt_average == 67.421)
212    assert(result.rtt_median == 66.057)
213    assert(result.destination_address == "62.2.16.12")
214    assert(result.destination_name == "hsi.cablecom.ch")
215    assert(result.duplicates == 0)
216    assert(result.origin == "194.85.27.7")
217    assert(result.firmware == 4520)
218    assert(result.seconds_since_sync is None)
219    assert(result.rtt_max == 70.231)
220    assert(result.rtt_min == 65.975)
221    assert(result.measurement_id == 1000192)
222    assert(result.probe_id == 165)
223    assert(result.protocol == PingResult.PROTOCOL_ICMP)
224    assert(result.packets_received == 3)
225    assert(result.packets_sent == 3)
226    assert(result.packet_size == 12)
227    assert(result.step is None)
228    assert(result.created.isoformat() == "2013-04-08T00:03:00+00:00")
229    assert(result.packets[0].rtt == 70.231)
230    assert(result.packets[1].rtt == 65.975)
231    assert(result.packets[2].rtt == 66.057)
232    assert(result.packets[0].ttl == 47)
233    assert(result.packets[1].ttl == 47)
234    assert(result.packets[2].ttl == 47)
235    assert(result.packets[0].dup is False)
236    assert(result.packets[1].dup is False)
237    assert(result.packets[2].dup is False)
238    assert(result.packets[0].source_address == "192.168.3.8")
239    assert(result.packets[1].source_address == "192.168.3.8")
240    assert(result.packets[2].source_address == "192.168.3.8")
241
242
243def test_ping_4550():
244    result = Result.get('{"af":4,"avg":27.300999999999998,"dst_addr":"62.2.16.12","dst_name":"hsi.cablecom.ch","dup":0,"from":"80.56.151.3","fw":4550,"lts":365,"max":27.300999999999998,"min":27.300999999999998,"msm_id":1000192,"msm_name":"Ping","prb_id":202,"proto":"ICMP","rcvd":1,"result":[{"srcaddr":"192.168.1.229","x":"*"},{"x":"*"},{"rtt":27.300999999999998,"ttl":54}],"sent":3,"size":20,"src_addr":"192.168.1.229","step":360,"timestamp":1378271710,"ttl":54,"type":"ping"}')
245    assert(result.af == 4)
246    assert(result.rtt_average == 27.301)
247    assert(result.rtt_median == 27.301)
248    assert(result.destination_address == "62.2.16.12")
249    assert(result.destination_name == "hsi.cablecom.ch")
250    assert(result.duplicates == 0)
251    assert(result.origin == "80.56.151.3")
252    assert(result.firmware == 4550)
253    assert(result.seconds_since_sync == 365)
254    assert(result.rtt_max == 27.301)
255    assert(result.rtt_min == 27.301)
256    assert(result.measurement_id == 1000192)
257    assert(result.probe_id == 202)
258    assert(result.protocol == PingResult.PROTOCOL_ICMP)
259    assert(result.packets_received == 1)
260    assert(result.packets_sent == 3)
261    assert(result.packet_size == 12)
262    assert(result.step == 360)
263    assert(result.created.isoformat() == "2013-09-04T05:15:10+00:00")
264    assert(result.packets[0].rtt is None)
265    assert(result.packets[1].rtt is None)
266    assert(result.packets[2].rtt == 27.301)
267    assert(result.packets[0].ttl is None)
268    assert(result.packets[1].ttl is None)
269    assert(result.packets[2].ttl == 54)
270    assert(result.packets[0].dup is False)
271    assert(result.packets[1].dup is False)
272    assert(result.packets[2].dup is False)
273    assert(result.packets[0].source_address == "192.168.1.229")
274    assert(result.packets[1].source_address == "192.168.1.229")
275    assert(result.packets[2].source_address == "192.168.1.229")
276
277
278def test_ping_4560():
279    result = Result.get('{"af":4,"avg":36.887,"dst_addr":"62.2.16.12","dst_name":"hsi.cablecom.ch","dup":0,"from":"62.195.143.53","fw":4560,"lts":36,"max":40.234000000000002,"min":34.747999999999998,"msm_id":1000192,"msm_name":"Ping","prb_id":202,"proto":"ICMP","rcvd":3,"result":[{"rtt":40.234000000000002},{"rtt":34.747999999999998,"srcaddr":"192.168.1.229"},{"rtt":35.679000000000002,"srcaddr":"192.168.1.229"}],"sent":3,"size":20,"src_addr":"192.168.1.229","step":360,"timestamp":1380586151,"ttl":54,"type":"ping"}')
280    assert(result.af == 4)
281    assert(result.rtt_average == 36.887)
282    assert(result.rtt_median == 35.679)
283    assert(result.destination_address == "62.2.16.12")
284    assert(result.destination_name == "hsi.cablecom.ch")
285    assert(result.duplicates == 0)
286    assert(result.origin == "62.195.143.53")
287    assert(result.firmware == 4560)
288    assert(result.seconds_since_sync is 36)
289    assert(result.rtt_max == 40.234)
290    assert(result.rtt_min == 34.748)
291    assert(result.measurement_id == 1000192)
292    assert(result.probe_id == 202)
293    assert(result.protocol == PingResult.PROTOCOL_ICMP)
294    assert(result.packets_received == 3)
295    assert(result.packets_sent == 3)
296    assert(result.packet_size == 12)
297    assert(result.step == 360)
298    assert(result.created.isoformat() == "2013-10-01T00:09:11+00:00")
299    assert(result.packets[0].rtt == 40.234)
300    assert(result.packets[1].rtt == 34.748)
301    assert(result.packets[2].rtt == 35.679)
302    assert(result.packets[0].ttl == 54)
303    assert(result.packets[1].ttl == 54)
304    assert(result.packets[2].ttl == 54)
305    assert(result.packets[0].dup is False)
306    assert(result.packets[1].dup is False)
307    assert(result.packets[2].dup is False)
308    assert(result.packets[0].source_address == "192.168.1.229")
309    assert(result.packets[1].source_address == "192.168.1.229")
310    assert(result.packets[2].source_address == "192.168.1.229")
311
312
313def test_ping_4570():
314    result = Result.get('{"af":4,"avg":36.608333333333327,"dst_addr":"62.2.16.12","dst_name":"hsi.cablecom.ch","dup":0,"from":"62.195.143.53","fw":4570,"lts":-1,"max":36.741,"min":36.423999999999999,"msm_id":1000192,"msm_name":"Ping","prb_id":202,"proto":"ICMP","rcvd":3,"result":[{"rtt":36.741},{"rtt":36.659999999999997},{"rtt":36.423999999999999}],"sent":3,"size":12,"step":360,"timestamp":1384500425, "type":"ping"}')
315    assert(result.af == 4)
316    assert(result.rtt_average == 36.608)
317    assert(result.rtt_median == 36.66)
318    assert(result.destination_address == "62.2.16.12")
319    assert(result.destination_name == "hsi.cablecom.ch")
320    assert(result.duplicates == 0)
321    assert(result.origin == "62.195.143.53")
322    assert(result.firmware == 4570)
323    assert(result.seconds_since_sync is None)
324    assert(result.rtt_max == 36.741)
325    assert(result.rtt_min == 36.424)
326    assert(result.measurement_id == 1000192)
327    assert(result.probe_id == 202)
328    assert(result.protocol == PingResult.PROTOCOL_ICMP)
329    assert(result.packets_received == 3)
330    assert(result.packets_sent == 3)
331    assert(result.packet_size == 12)
332    assert(result.step == 360)
333    assert(result.created.isoformat() == "2013-11-15T07:27:05+00:00")
334    assert(result.packets[0].rtt == 36.741)
335    assert(result.packets[1].rtt == 36.66)
336    assert(result.packets[2].rtt == 36.424)
337    assert(result.packets[0].ttl is None)
338    assert(result.packets[1].ttl is None)
339    assert(result.packets[2].ttl is None)
340    assert(result.packets[0].dup is False)
341    assert(result.packets[1].dup is False)
342    assert(result.packets[2].dup is False)
343    assert(result.packets[0].source_address is None)
344    assert(result.packets[1].source_address is None)
345    assert(result.packets[2].source_address is None)
346
347
348def test_ping_4600():
349    result = Result.get('{"af":4,"avg":47.951999999999998,"dst_addr":"62.2.16.24","dst_name":"hsi.cablecom.ch","dup":0,"from":"188.195.183.141","fw":4600,"group_id":1000192,"lts":222,"max":48.990000000000002,"min":45.939,"msm_id":1000192,"msm_name":"Ping","prb_id":270,"proto":"ICMP","rcvd":3,"result":[{"rtt":45.939},{"rtt":48.927},{"rtt":48.990000000000002}],"sent":3,"size":12,"src_addr":"192.168.178.21","step":360,"timestamp":1392321470,"ttl":50,"type":"ping"}')
350    assert(result.af == 4)
351    assert(result.rtt_average == 47.952)
352    assert(result.rtt_median == 48.927)
353    assert(result.destination_address == "62.2.16.24")
354    assert(result.destination_name == "hsi.cablecom.ch")
355    assert(result.duplicates == 0)
356    assert(result.origin == "188.195.183.141")
357    assert(result.firmware == 4600)
358    assert(result.seconds_since_sync == 222)
359    assert(result.rtt_max == 48.99)
360    assert(result.rtt_min == 45.939)
361    assert(result.measurement_id == 1000192)
362    assert(result.probe_id == 270)
363    assert(result.protocol == PingResult.PROTOCOL_ICMP)
364    assert(result.packets_received == 3)
365    assert(result.packets_sent == 3)
366    assert(result.packet_size == 12)
367    assert(result.step == 360)
368    assert(result.created.isoformat() == "2014-02-13T19:57:50+00:00")
369    assert(result.packets[0].rtt == 45.939)
370    assert(result.packets[1].rtt == 48.927)
371    assert(result.packets[2].rtt == 48.99)
372    assert(result.packets[0].ttl == 50)
373    assert(result.packets[1].ttl == 50)
374    assert(result.packets[2].ttl == 50)
375    assert(result.packets[0].dup is False)
376    assert(result.packets[1].dup is False)
377    assert(result.packets[2].dup is False)
378    assert(result.packets[0].source_address == "192.168.178.21")
379    assert(result.packets[1].source_address == "192.168.178.21")
380    assert(result.packets[2].source_address == "192.168.178.21")
381
382
383def test_ping_4610():
384    result = Result.get('{"af":4,"avg":57.140666666666668,"dst_addr":"62.2.16.24","dst_name":"hsi.cablecom.ch","dup":0,"from":"188.195.181.120","fw":4610,"group_id":1000192,"lts":93,"max":63.213000000000001,"min":47.941000000000003,"msm_id":1000192,"msm_name":"Ping","prb_id":270,"proto":"ICMP","rcvd":3,"result":[{"rtt":63.213000000000001},{"rtt":47.941000000000003,"ttl":51},{"rtt":60.268000000000001,"ttl":50}],"sent":3,"size":12,"src_addr":"192.168.178.21","step":360,"timestamp":1395416383,"ttl":50,"type":"ping"}')
385    assert(isinstance(result, Result))
386    assert(isinstance(result, PingResult))
387    assert(isinstance(result.packets[0], Packet))
388    assert(isinstance(result.packets[1], Packet))
389    assert(isinstance(result.packets[2], Packet))
390    assert(result.af == 4)
391    assert(result.rtt_average == 57.141)
392    assert(result.rtt_median == 60.268)
393    assert(result.destination_address == "62.2.16.24")
394    assert(result.destination_name == "hsi.cablecom.ch")
395    assert(result.duplicates == 0)
396    assert(result.origin == "188.195.181.120")
397    assert(result.firmware == 4610)
398    assert(result.seconds_since_sync == 93)
399    assert(result.rtt_max == 63.213)
400    assert(result.rtt_min == 47.941)
401    assert(result.measurement_id == 1000192)
402    assert(result.probe_id == 270)
403    assert(result.protocol == PingResult.PROTOCOL_ICMP)
404    assert(result.packets_received == 3)
405    assert(result.packets_sent == 3)
406    assert(result.packet_size == 12)
407    assert(result.step == 360)
408    assert(result.created.isoformat() == "2014-03-21T15:39:43+00:00")
409    assert(result.packets[0].rtt == 63.213)
410    assert(result.packets[1].rtt == 47.941)
411    assert(result.packets[2].rtt == 60.268)
412    assert(result.packets[0].ttl == 50)
413    assert(result.packets[1].ttl == 51)
414    assert(result.packets[2].ttl == 50)
415    assert(result.packets[0].dup is False)
416    assert(result.packets[1].dup is False)
417    assert(result.packets[2].dup is False)
418    assert(result.packets[0].source_address == "192.168.178.21")
419    assert(result.packets[1].source_address == "192.168.178.21")
420    assert(result.packets[2].source_address == "192.168.178.21")
421
422
423def test_ping_duplicate():
424    result = Result.get('{"af":4,"avg":27.768000000000001,"dst_addr":"62.2.16.24","dst_name":"hsi.cablecom.ch","dup":2,"from":"109.190.83.40","fw":4610,"lts":38,"max":27.768000000000001,"min":27.768000000000001,"msm_id":1000192,"msm_name":"Ping","prb_id":1216,"proto":"ICMP","rcvd":1,"result":[{"srcaddr":"192.168.103.130","x":"*"},{"dup":1,"rtt":36.454000000000001,"ttl":54},{"dup":1,"rtt":37.756},{"rtt":27.768000000000001}],"sent":2,"size":12,"src_addr":"192.168.103.130","step":360,"timestamp":1395277728,"ttl":54,"type":"ping"}')
425    assert(result.af == 4)
426    assert(result.rtt_average == 27.768)
427    assert(result.rtt_median == 27.768)
428    assert(result.destination_address == "62.2.16.24")
429    assert(result.destination_name == "hsi.cablecom.ch")
430    assert(result.duplicates == 2)
431    assert(result.origin == "109.190.83.40")
432    assert(result.firmware == 4610)
433    assert(result.seconds_since_sync == 38)
434    assert(result.rtt_max == 27.768)
435    assert(result.rtt_min == 27.768)
436    assert(result.measurement_id == 1000192)
437    assert(result.probe_id == 1216)
438    assert(result.protocol == PingResult.PROTOCOL_ICMP)
439    assert(result.packets_received == 1)
440    assert(result.packets_sent == 2)
441    assert(result.packet_size == 12)
442    assert(result.step == 360)
443    assert(result.created.isoformat() == "2014-03-20T01:08:48+00:00")
444    assert(result.packets[0].rtt is None)
445    assert(result.packets[1].rtt == 36.454)
446    assert(result.packets[2].rtt == 37.756)
447    assert(result.packets[3].rtt == 27.768)
448    assert(result.packets[0].ttl is None)
449    assert(result.packets[1].ttl == 54)
450    assert(result.packets[2].ttl == 54)
451    assert(result.packets[3].ttl == 54)
452    assert(result.packets[0].dup is False)
453    assert(result.packets[1].dup is True)
454    assert(result.packets[2].dup is True)
455    assert(result.packets[3].dup is False)
456    assert(result.packets[0].source_address == "192.168.103.130")
457    assert(result.packets[1].source_address == "192.168.103.130")
458    assert(result.packets[2].source_address == "192.168.103.130")
459    assert(result.packets[3].source_address == "192.168.103.130")
460
461
462def test_ping_buggy():
463    result = Result.get('{"af":4,"avg":-1,"dst_addr":"62.2.16.24","dst_name":"hsi.cablecom.ch","dup":2,"from":"62.195.143.53","fw":4600,"lts":130,"max":-1,"min":-1,"msm_id":1000192,"msm_name":"Ping","prb_id":202,"proto":"ICMP","rcvd":0,"result":[{"srcaddr":"192.168.1.229","x":"*"},{"dup":1,"rtt":1635.423,"ttl":55},{"dup":1,"rtt":1800.4939999999999}],"sent":1,"size":12,"src_addr":"192.168.1.229","step":360,"timestamp":1394745831,"ttl":55,"type":"ping"}')
464    assert(result.af == 4)
465    assert(result.rtt_average is None)
466    assert(result.rtt_median is None)
467    assert(result.destination_address == "62.2.16.24")
468    assert(result.destination_name == "hsi.cablecom.ch")
469    assert(result.duplicates == 2)
470    assert(result.origin == "62.195.143.53")
471    assert(result.firmware == 4600)
472    assert(result.seconds_since_sync == 130)
473    assert(result.rtt_max is None)
474    assert(result.rtt_min is None)
475    assert(result.measurement_id == 1000192)
476    assert(result.probe_id == 202)
477    assert(result.protocol == PingResult.PROTOCOL_ICMP)
478    assert(result.packets_received == 0)
479    assert(result.packets_sent == 1)
480    assert(result.packet_size == 12)
481    assert(result.step == 360)
482    print(result.created, type(result.created))
483    print(result.created.isoformat())
484    assert(result.created.isoformat() == "2014-03-13T21:23:51+00:00")
485    assert(result.packets[0].rtt is None)
486    assert(result.packets[1].rtt == 1635.423)
487    assert(result.packets[2].rtt == 1800.494)
488    assert(result.packets[0].ttl is None)
489    assert(result.packets[1].ttl == 55)
490    assert(result.packets[2].ttl == 55)
491    assert(result.packets[0].dup is False)
492    assert(result.packets[1].dup is True)
493    assert(result.packets[2].dup is True)
494    assert(result.packets[0].source_address == "192.168.1.229")
495    assert(result.packets[1].source_address == "192.168.1.229")
496    assert(result.packets[2].source_address == "192.168.1.229")
497
498
499def test_ping_lts():
500    result = Result.get('{"af":4,"prb_id":270,"result":[{"rtt":70.265},{"rtt":54.584,"ttl":51},{"rtt":52.875}],"ttl":51,"avg":59.2413333333,"size":12,"from":"188.193.157.75","proto":"ICMP","timestamp":1406561624,"dup":0,"type":"ping","sent":3,"msm_id":1000192,"fw":4650,"max":70.265,"step":360,"src_addr":"192.168.178.21","rcvd":3,"msm_name":"Ping","lts":76,"dst_name":"hsi.cablecom.ch","min":52.875,"group_id":1000192,"dst_addr":"62.2.16.24"}')
501    assert(result.seconds_since_sync == 76)
502