def test_seek_tail_not_enough_lines(self): self.write_log_file('2000-01-01 00:00:00,000 FlowID ERROR Thread C.m(C.java:23): Error! Nooooo!\n' * 10) with open('log.log', 'rb') as f: reader = LogReader(0, 'log.log', Log4jParser(), FakeReceiver(), tail_length=20) reader.logfile = f reader._seek_tail() self.assertEqual(f.tell(), 0)
def test_make_progress_string_success(self): with open('log.log', 'wb') as f: f.write('Some file contents!') f.seek(10) reader = LogReader(0, 'log.log', Log4jParser(), FakeReceiver(), progress_file_path_prefix='progress') reader.logfile = f reader.logfile_id = '123g456' self.assertEqual(reader._make_progress_string(), 'log.log 123g456 10 19')
def test_seek_tail_multiple_chunks(self): self.write_log_file('2000-01-01 00:00:00,000 FlowID ERROR Thread C.m(C.java:23): Error! Nooooo!\n' * 1000) with open('log.log', 'rb') as f: reader = LogReader(0, 'log.log', Log4jParser(), FakeReceiver(), tail_length=900) reader.CHUNK_SIZE = 1024 reader.logfile = f reader._seek_tail() self.assertEqual(f.tell(), 100 * 75)
def test_seek_first_unprocessed_position_no_progress_file(self): self.write_log_file('2000-01-01 00:00:00,000 FlowID ERROR Thread C.m(C.java:23): Error! Nooooo!\n' * 20) with open('log.log', 'rb') as f: reader = LogReader(0, 'log.log', Log4jParser(), FakeReceiver(), progress_file_path_prefix='progress', tail_length=10) reader.logfile = f reader._seek_first_unprocessed_position() self.assertEqual(f.tell(), 0) self.assertEqual(self.fake_logging.log, ['[WARN] Failed to read the progress file for "log.log".'])
def test_seek_tail_with_multiline_messages_one_chunk(self): message = '2000-01-01 00:00:00,000 FlowID ERROR Thread C.m(C.java:23): Error! Nooooo!\n' + 'X' * 24 + '\n' self.write_log_file(message * 10) with open('log.log', 'rb') as f: reader = LogReader(0, 'log.log', Log4jParser(), FakeReceiver(), tail_length=5) reader.CHUNK_SIZE = 1024 reader.logfile = f reader._seek_tail() self.assertEqual(f.tell(), 5 * 100)
def test_seek_first_unprocessed_position(self): self.write_log_file('XXXX\n' * 100) self.write_progress_file('log.log 123g456 50 75') with open('log.log', 'rb') as f: reader = LogReader(0, 'log.log', Log4jParser(), FakeReceiver(), progress_file_path_prefix='progress') reader.logfile = f reader._seek_first_unprocessed_position() self.assertEqual(f.tell(), 50) self.assertEqual(reader.logfile_id, '123g456')
def __enter__(self): lines = [] for i in self.seconds: lines.append(self.message_template % divmod(i, 60)) with open('log.log', 'wb') as f: f.write(''.join(lines)) self.log = open('log.log', 'rb') reader = LogReader(0, 'log.log', Log4jParser(), FakeReceiver()) reader.logfile = self.log return reader
def test_ensure_file_is_good_file_is_good(self): with open('log.log', 'wb') as f: f.write('Some file contents!') f.seek(10) reader = LogReader(0, 'log.log', Log4jParser(), FakeReceiver()) reader.logfile = f reader.logfile_id = get_device_and_inode_string(os.fstat(f.fileno())) reader._ensure_file_is_good() self.assertFalse(f.closed) self.assertEqual(reader.logfile, f) self.assertEqual(f.tell(), 10) self.assertEqual(self.fake_logging.log, [])
def test_ensure_file_is_good_file_has_been_rotated(self): with open('log.log', 'wb') as f: f.write('Some file contents!') reader = LogReader(0, 'log.log', Log4jParser(), FakeReceiver()) reader.logfile = f reader.logfile_id = 'not matching' reader._ensure_file_is_good() self.assertTrue(f.closed) self.assertNotEqual(reader.logfile, f) self.assertFalse(reader.logfile.closed) self.assertEqual(reader.logfile.readline(), 'Some file contents!') self.assertEqual(self.fake_logging.log, ['[INFO] The file log.log has been rotated.', '[INFO] Closed log.log.', '[INFO] Opened log.log.'])