2 Test suite for parsing.py. Uses unittest module.
4 2011, Razvan Deaconescu, razvan.deaconescu@cs.pub.ro
16 class LibtorrentLogParserTest(unittest.TestCase):
17 """Test suite for LibtorrentLogParser class in parsing.py."""
21 status_file = "status.log"
22 verbose_file1 = "141.85.224.201_12345.log"
23 verbose_file2 = "141.85.224.202_12345.log"
24 verbose_file3 = "141.85.224.203_12345.log"
25 bogus_file1 = "dht.log"
26 bogus_file2 = "141.85.224.203.log"
27 bogus_file3 = "12345.log"
30 # Create folder and log files.
32 self.ok_status_file_path = os.path.join(self.ok_dir,
34 self.ok_verbose_file_path1 = os.path.join(self.ok_dir,
36 self.ok_verbose_file_path2 = os.path.join(self.ok_dir,
38 self.ok_verbose_file_path3 = os.path.join(self.ok_dir,
40 self.ok_bogus_file_path1 = os.path.join(self.ok_dir,
42 self.ok_bogus_file_path2 = os.path.join(self.ok_dir,
44 self.ok_bogus_file_path3 = os.path.join(self.ok_dir,
46 f = open(self.ok_status_file_path, "w")
48 f = open(self.ok_verbose_file_path1, "w")
50 f = open(self.ok_verbose_file_path2, "w")
52 f = open(self.ok_verbose_file_path3, "w")
54 f = open(self.ok_bogus_file_path1, "w")
56 f = open(self.ok_bogus_file_path2, "w")
58 f = open(self.ok_bogus_file_path3, "w")
61 # Initialize message type counters.
62 self.statmsg_count = 0
63 self.pstatmsg_count = 0
64 self.verbmsg_count = 0
66 # Initialize internal call counts.
67 self.bogus_line_num_calls = 0
68 self.status_line_num_calls = 0
69 self.peer_status_line_num_calls = 0
70 self.verbose_line_num_calls = 0
72 # Remove no_dir in case it exists.
74 shutil.rmtree(self.no_dir)
79 shutil.rmtree(self.ok_dir)
80 # Remove no_dir in case it exists.
82 shutil.rmtree(self.no_dir)
86 def append_line(self, filename, line):
87 """Add (append) a line to to a file."""
88 f = open(filename, "at")
92 def add_bogus_line(self, filename):
93 """Add bogus (non-relevant) line to file."""
94 if self.bogus_line_num_calls == 0:
95 self.append_line(filename, "Nebuchadnezzar")
97 self.append_line(filename, "Assurbanipal")
98 self.bogus_line_num_calls = self.bogus_line_num_calls + 1
100 def add_status_line(self, filename):
101 """Add status line to file."""
102 if self.status_line_num_calls == 0:
103 self.append_line(filename, "ps: 5, dht: 21 <> dl: 462.1kb/s, ul: 255.2kb/s <> dld: 45mb, uld: 3mb, size: 698mb <> eta: 24m 7s")
105 self.append_line(filename, "ps: 5, dht: 21 <> dl: 469kb/s, ul: 255.66kb/s <> dld: 46mb, uld: 4mb, size: 698mb <> eta: 23m 45s")
106 self.status_line_num_calls = self.status_line_num_calls + 1
108 def add_peer_status_line(self, filename):
109 """Add peer status line to file."""
110 if self.peer_status_line_num_calls == 0:
111 self.append_line(filename, "--Peers: (Aug 14 17:22:35) [ ip: 10.1.7.5:33289, dl: 86.63kb/s, ul: 175.07kb/s ][ ip: 10.1.9.5:55611, dl: 14.63kb/s, ul: 110.79kb/s ]")
113 self.append_line(filename, "--Peers: (Aug 14 17:22:40) [ ip: 10.1.7.5:33289, dl: 23.6kb/s, ul: 94.91kb/s ][ ip: 10.1.6.5:47254, dl: 55.61kb/s, ul: 100.72kb/s ][ ip: 10.1.4.5:6881, dl: 93.99kb/s, ul: 100.11kb/s ]")
114 self.peer_status_line_num_calls = self.peer_status_line_num_calls + 1
116 def add_verbose_line(self, filename):
117 """Add verbose line to file."""
118 if self.verbose_line_num_calls == 0:
119 self.append_line(filename, "Jan 08 22:20:50 <== REQUEST [ piece: 8a | s: 38000 | l: 4000 ]")
121 self.append_line(filename, "Jan 08 22:20:50 ==> PIECE [ piece: 8a | s: 34000 | l: 4000 ]")
122 self.verbose_line_num_calls = self.verbose_line_num_calls + 1
124 def add_message_to_count(self, msg):
125 """Update message type counters according to msg."""
126 if msg.__class__ == storage.StatusMessage:
127 self.statmsg_count = self.statmsg_count + 1
128 elif msg.__class__ == storage.PeerStatusMessage:
129 self.pstatmsg_count = self.pstatmsg_count + 1
130 elif msg.__class__ == storage.VerboseMessage:
131 self.verbmsg_count = self.verbmsg_count + 1
133 def test_non_existent_folder(self):
134 """libtorrent log folder doesn't exist.
135 Exception should be raised.
137 exception_raised = False
139 p = parsing.LibtorrentLogParser(self.no_dir,
140 "2009-01-01 12:13:14")
142 exception_raised = True
144 self.assertEqual(exception_raised, True)
146 def test_no_log_files(self):
147 """No log files are present in the log folder.
148 Exception should be raised.
151 os.remove(self.ok_status_file_path)
152 os.remove(self.ok_verbose_file_path1)
153 os.remove(self.ok_verbose_file_path2)
154 os.remove(self.ok_verbose_file_path3)
156 exception_raised = False
158 p = parsing.LibtorrentLogParser(self.ok_dir,
159 "2009-01-01 12:13:14")
160 except (IOError, OSError, IndexError), e:
161 exception_raised = True
163 self.assertEqual(exception_raised, True)
165 def test_get_parsing_file_no_status_log_file(self):
166 """No status log file is present.
167 Use get_current_parsing_filename() to get current log file.
169 # Remove status log file.
170 os.remove(self.ok_status_file_path)
172 p = parsing.LibtorrentLogParser(self.ok_dir, "2009-01-01 12:13:14")
173 current = p.get_current_parsing_filename()
175 value = (current == self.ok_verbose_file_path1 or
176 current == self.ok_verbose_file_path2 or
177 current == self.ok_verbose_file_path3)
178 self.assertEqual(value, True)
180 def test_get_to_parse_files_no_status_log_files(self):
181 """No status log file is present.
182 Use get_to_parse_list() to get files to be parsed.
184 # Remove status log file.
185 os.remove(self.ok_status_file_path)
187 # to_parse list should consists of 2 entries: the verbose log
188 # files minus the one that is currently being parsed.
189 p = parsing.LibtorrentLogParser(self.ok_dir, "2009-01-01 12:13:14")
190 count = len(p.get_to_parse_list())
192 self.assertEqual(count, 2)
194 def test_get_parsing_file_no_verbose_log_files(self):
195 """No verbose log file is present.
196 Use get_current_parsing_filename() to get current log file.
198 # Remove status log file.
199 os.remove(self.ok_verbose_file_path1)
200 os.remove(self.ok_verbose_file_path2)
201 os.remove(self.ok_verbose_file_path3)
203 p = parsing.LibtorrentLogParser(self.ok_dir, "2009-01-01 12:13:14")
204 current = p.get_current_parsing_filename()
206 value = (current == self.ok_status_file_path)
207 self.assertEqual(value, True)
209 def test_get_to_parse_files_no_verbose_log_files(self):
210 """No verbose log file is present.
211 Use get_to_parse_list() to get files to be parsed.
213 # Remove verbose log files.
214 os.remove(self.ok_verbose_file_path1)
215 os.remove(self.ok_verbose_file_path2)
216 os.remove(self.ok_verbose_file_path3)
218 # to_parse list should be empty: no verbose files and the
219 # status file is currently being parsed.
220 p = parsing.LibtorrentLogParser(self.ok_dir, "2009-01-01 12:13:14")
221 count = len(p.get_to_parse_list())
223 self.assertEqual(count, 0)
225 def test_get_parsing_status_priority(self):
226 """Set priority as "status".
227 get_current_parsing_filename() should return status log file.
229 p = parsing.LibtorrentLogParser(self.ok_dir,
230 "2009-01-01 12:13:14", priority="status")
231 current = p.get_current_parsing_filename()
233 value = (current == self.ok_status_file_path)
234 self.assertEqual(value, True)
236 def test_get_parsing_verbose_priority(self):
237 """Set priority as "status".
238 get_current_parsing_filename() should return a verbose log file.
240 p = parsing.LibtorrentLogParser(self.ok_dir,
241 "2009-01-01 12:13:14", priority="verbose")
242 current = p.get_current_parsing_filename()
244 value = (current == self.ok_verbose_file_path1 or
245 current == self.ok_verbose_file_path2 or
246 current == self.ok_verbose_file_path3)
247 self.assertEqual(value, True)
249 def test_get_message_no_status_log_file_empty_verbose_log_files(self):
250 """Status log file does not exist, verbose log files are empty.
251 Returned message should be None.
253 # Remove status log file.
254 os.remove(self.ok_status_file_path)
256 p = parsing.LibtorrentLogParser(self.ok_dir, "2009-01-01 12:13:14")
257 msg = p.get_next_message()
259 self.assertEqual(msg, None)
261 def test_get_message_no_verbose_log_files_empty_status_log_file(self):
262 """Verbose log files do not exist, status log file is empty.
263 Returned message should be None.
265 # Remove verbose log files.
266 os.remove(self.ok_verbose_file_path1)
267 os.remove(self.ok_verbose_file_path2)
268 os.remove(self.ok_verbose_file_path3)
270 p = parsing.LibtorrentLogParser(self.ok_dir, "2009-01-01 12:13:14")
271 msg = p.get_next_message()
273 self.assertEqual(msg, None)
275 def test_get_message_empty_log_files(self):
276 """Log files are empty.
277 Returned message should be None.
279 p = parsing.LibtorrentLogParser(self.ok_dir, "2009-01-01 12:13:14")
280 msg = p.get_next_message()
282 self.assertEqual(msg, None)
284 def test_get_none_message_in_status_log_file(self):
285 """Status log file consists of bogus information (no messages).
286 Set priority as "status".
287 Message is returned from verbose log file.
289 self.add_bogus_line(self.ok_status_file_path)
290 self.add_verbose_line(self.ok_verbose_file_path1)
292 p = parsing.LibtorrentLogParser(self.ok_dir,
293 "2009-01-01 12:13:14", priority="status")
294 msg = p.get_next_message()
296 self.add_message_to_count(msg)
298 self.assertEqual(self.verbmsg_count, 1)
300 def test_get_none_message_in_verbose_log_files(self):
301 """Verbose log files consist of bogus information (no messages).
302 Set priority as "verbose".
303 Message is returned from status log file.
305 self.add_bogus_line(self.ok_verbose_file_path1)
306 self.add_bogus_line(self.ok_verbose_file_path2)
307 self.add_bogus_line(self.ok_verbose_file_path3)
308 self.add_status_line(self.ok_status_file_path)
310 p = parsing.LibtorrentLogParser(self.ok_dir,
311 "2009-01-01 12:13:14", priority="verbose")
312 msg = p.get_next_message()
314 self.add_message_to_count(msg)
316 self.assertEqual(self.statmsg_count, 1)
318 def test_get_status_message(self):
319 """Return a status message from status log file."""
320 self.add_status_line(self.ok_status_file_path)
322 p = parsing.LibtorrentLogParser(self.ok_dir,
323 "2009-01-01 12:13:14", priority="verbose")
324 msg = p.get_next_message()
326 self.add_message_to_count(msg)
328 self.assertEqual(self.statmsg_count, 1)
330 def test_get_status_messages(self):
331 """Return multiple status messages from status log file."""
332 self.add_status_line(self.ok_status_file_path)
333 self.add_status_line(self.ok_status_file_path)
335 p = parsing.LibtorrentLogParser(self.ok_dir,
336 "2009-01-01 12:13:14", priority="verbose")
337 msg1 = p.get_next_message()
338 msg2 = p.get_next_message()
340 self.add_message_to_count(msg1)
341 self.add_message_to_count(msg2)
343 self.assertEqual(self.statmsg_count, 2)
345 def test_get_status_messages_different_files(self):
346 """Return multiple status messages from different log files."""
347 self.add_status_line(self.ok_status_file_path)
348 self.add_status_line(self.ok_verbose_file_path1)
350 p = parsing.LibtorrentLogParser(self.ok_dir,
351 "2009-01-01 12:13:14", priority="verbose")
352 msg1 = p.get_next_message()
353 msg2 = p.get_next_message()
355 self.add_message_to_count(msg1)
356 self.add_message_to_count(msg2)
358 self.assertEqual(self.statmsg_count, 2)
360 def test_get_peer_status_message(self):
361 """Return a peer status message from status log file."""
362 self.add_peer_status_line(self.ok_status_file_path)
364 p = parsing.LibtorrentLogParser(self.ok_dir,
365 "2009-01-01 12:13:14", priority="verbose")
366 msg = p.get_next_message()
368 self.add_message_to_count(msg)
370 self.assertEqual(self.pstatmsg_count, 1)
372 def test_get_peer_status_messages(self):
373 """Return multiple peer status messages from status log file."""
374 self.add_peer_status_line(self.ok_status_file_path)
375 self.add_peer_status_line(self.ok_status_file_path)
377 p = parsing.LibtorrentLogParser(self.ok_dir,
378 "2009-01-01 12:13:14", priority="verbose")
379 msg1 = p.get_next_message()
380 msg2 = p.get_next_message()
381 msg3 = p.get_next_message()
382 msg4 = p.get_next_message()
383 msg5 = p.get_next_message()
385 self.add_message_to_count(msg1)
386 self.add_message_to_count(msg2)
387 self.add_message_to_count(msg3)
388 self.add_message_to_count(msg4)
389 self.add_message_to_count(msg5)
391 self.assertEqual(self.pstatmsg_count, 5)
393 def test_get_peer_status_messages_different_files(self):
394 """Return multiple peer status messages from different log files."""
395 self.add_peer_status_line(self.ok_status_file_path)
396 self.add_peer_status_line(self.ok_verbose_file_path1)
398 p = parsing.LibtorrentLogParser(self.ok_dir,
399 "2009-01-01 12:13:14", priority="verbose")
400 msg1 = p.get_next_message()
401 msg2 = p.get_next_message()
402 msg3 = p.get_next_message()
403 msg4 = p.get_next_message()
404 msg5 = p.get_next_message()
406 self.add_message_to_count(msg1)
407 self.add_message_to_count(msg2)
408 self.add_message_to_count(msg3)
409 self.add_message_to_count(msg4)
410 self.add_message_to_count(msg5)
412 self.assertEqual(self.pstatmsg_count, 5)
414 def test_get_verbose_message(self):
415 """Return a verbose message from verbose log file."""
416 self.add_verbose_line(self.ok_verbose_file_path1)
418 p = parsing.LibtorrentLogParser(self.ok_dir,
419 "2009-01-01 12:13:14", priority="status")
420 msg = p.get_next_message()
422 self.add_message_to_count(msg)
424 self.assertEqual(self.verbmsg_count, 1)
426 def test_get_verbose_messages(self):
427 """Return multiple verbose messages from verbose log file."""
428 self.add_verbose_line(self.ok_verbose_file_path1)
429 self.add_verbose_line(self.ok_verbose_file_path1)
431 p = parsing.LibtorrentLogParser(self.ok_dir,
432 "2009-01-01 12:13:14", priority="verbose")
433 msg1 = p.get_next_message()
434 msg2 = p.get_next_message()
436 self.add_message_to_count(msg1)
437 self.add_message_to_count(msg2)
439 self.assertEqual(self.verbmsg_count, 2)
441 def test_get_verbose_messages_different_files(self):
442 """Return multiple verbose messages from different log files."""
443 self.add_verbose_line(self.ok_verbose_file_path1)
444 self.add_verbose_line(self.ok_verbose_file_path2)
446 p = parsing.LibtorrentLogParser(self.ok_dir,
447 "2009-01-01 12:13:14", priority="verbose")
448 msg1 = p.get_next_message()
449 msg2 = p.get_next_message()
451 self.add_message_to_count(msg1)
452 self.add_message_to_count(msg2)
454 self.assertEqual(self.verbmsg_count, 2)
456 def test_get_mixed_messages_same_file(self):
457 """Status file contains multiple messages of different types."""
458 self.add_status_line(self.ok_status_file_path)
459 self.add_peer_status_line(self.ok_status_file_path)
460 self.add_verbose_line(self.ok_status_file_path)
462 p = parsing.LibtorrentLogParser(self.ok_dir,
463 "2009-01-01 12:13:14", priority="verbose")
464 msg1 = p.get_next_message()
465 msg2 = p.get_next_message()
466 msg3 = p.get_next_message()
467 msg4 = p.get_next_message()
469 self.add_message_to_count(msg1)
470 self.add_message_to_count(msg2)
471 self.add_message_to_count(msg3)
472 self.add_message_to_count(msg4)
474 self.assertEqual(self.statmsg_count, 1)
475 self.assertEqual(self.pstatmsg_count, 2)
476 self.assertEqual(self.verbmsg_count, 1)
478 def test_get_mixed_messages_own_file(self):
479 """Each log file contains a single type of messages."""
480 self.add_status_line(self.ok_status_file_path)
481 self.add_status_line(self.ok_status_file_path)
482 self.add_peer_status_line(self.ok_verbose_file_path1)
483 self.add_peer_status_line(self.ok_verbose_file_path1)
484 self.add_verbose_line(self.ok_verbose_file_path2)
485 self.add_verbose_line(self.ok_verbose_file_path2)
487 p = parsing.LibtorrentLogParser(self.ok_dir,
488 "2009-01-01 12:13:14", priority="verbose")
489 msg1 = p.get_next_message()
490 msg2 = p.get_next_message()
491 msg3 = p.get_next_message()
492 msg4 = p.get_next_message()
493 msg5 = p.get_next_message()
494 msg6 = p.get_next_message()
495 msg7 = p.get_next_message()
496 msg8 = p.get_next_message()
497 msg9 = p.get_next_message()
499 self.add_message_to_count(msg1)
500 self.add_message_to_count(msg2)
501 self.add_message_to_count(msg3)
502 self.add_message_to_count(msg4)
503 self.add_message_to_count(msg5)
504 self.add_message_to_count(msg6)
505 self.add_message_to_count(msg7)
506 self.add_message_to_count(msg8)
507 self.add_message_to_count(msg9)
509 self.assertEqual(self.statmsg_count, 2)
510 self.assertEqual(self.pstatmsg_count, 5)
511 self.assertEqual(self.verbmsg_count, 2)
513 def test_get_mixed_messages_different_files(self):
514 """Log files contain different message types."""
515 self.add_status_line(self.ok_status_file_path)
516 self.add_status_line(self.ok_status_file_path)
517 self.add_peer_status_line(self.ok_verbose_file_path1)
518 self.add_peer_status_line(self.ok_verbose_file_path1)
519 self.add_verbose_line(self.ok_verbose_file_path2)
520 self.add_verbose_line(self.ok_verbose_file_path2)
522 p = parsing.LibtorrentLogParser(self.ok_dir,
523 "2009-01-01 12:13:14", priority="verbose")
524 msg1 = p.get_next_message()
525 msg2 = p.get_next_message()
526 msg3 = p.get_next_message()
527 msg4 = p.get_next_message()
528 msg5 = p.get_next_message()
529 msg6 = p.get_next_message()
530 msg7 = p.get_next_message()
531 msg8 = p.get_next_message()
532 msg9 = p.get_next_message()
534 self.add_message_to_count(msg1)
535 self.add_message_to_count(msg2)
536 self.add_message_to_count(msg3)
537 self.add_message_to_count(msg4)
538 self.add_message_to_count(msg5)
539 self.add_message_to_count(msg6)
540 self.add_message_to_count(msg7)
541 self.add_message_to_count(msg8)
542 self.add_message_to_count(msg9)
544 self.assertEqual(self.statmsg_count, 2)
545 self.assertEqual(self.pstatmsg_count, 5)
546 self.assertEqual(self.verbmsg_count, 2)
549 class TriblerLogParserTest(unittest.TestCase):
550 """Test suite for TriblerLogParser class in parsing.py."""
558 def test_no_log_file(self):
559 self.assertEqual(True, False)
561 def test_empty_log_file(self):
562 self.assertEqual(True, False)
564 def test_bogus_log_file(self):
565 self.assertEqual(True, False)
567 def test_get_status_message(self):
568 self.assertEqual(True, False)
570 def test_get_status_messages(self):
571 self.assertEqual(True, False)
573 def test_get_mixed_messages_same_file(self):
574 self.assertEqual(True, False)
577 if __name__ == "__main__":
578 # suite = unittest.TestSuite()
579 # suite.addTest(LibtorrentLogParserTest('test_get_status_message'))
580 # suite.addTest(LibtorrentLogParserTest('test_get_status_messages'))
581 # suite.addTest(LibtorrentLogParserTest('test_get_status_messages_different_files'))
582 # suite.addTest(LibtorrentLogParserTest('test_get_verbose_message'))
583 # suite.addTest(LibtorrentLogParserTest('test_get_verbose_messages'))
584 # suite.addTest(LibtorrentLogParserTest('test_get_verbose_messages_different_files'))
585 # suite.addTest(LibtorrentLogParserTest('test_get_mixed_messages_same_file'))
586 # unittest.TextTestRunner().run(suite)