def setUp(self): curdir = os.getcwd() testdir = os.path.join(curdir, 'test') self.testdir = testdir if not os.path.isdir(testdir): os.mkdir(testdir) logdir = os.path.join(testdir, 'log') if not os.path.isdir(logdir): os.mkdir(logdir) self.logdir = logdir self.logfile = os.path.join(logdir, 'testlog') self.logfile1 = os.path.join(logdir, 'testlog.1') self.logfile2 = os.path.join(logdir, 'testlog.2') self.logfile_pattern = os.path.join(logdir, 'testlog*') seekdir = os.path.join(testdir, 'seek') if not os.path.isdir(seekdir): os.mkdir(seekdir) self.seekdir = seekdir self.seekfile = os.path.join(seekdir, 'testlog.seek') self.seekfile1 = LogChecker.get_seekfile(self.logfile_pattern, seekdir, self.logfile1) self.seekfile2 = LogChecker.get_seekfile(self.logfile_pattern, seekdir, self.logfile2) self.logformat_syslog = LogChecker.FORMAT_SYSLOG
def tearDown(self): if os.path.exists(self.seekfile): os.unlink(self.seekfile) if os.path.exists(self.seekfile1): os.unlink(self.seekfile1) if os.path.exists(self.seekfile2): os.unlink(self.seekfile2) if os.path.exists(self.logfile): seekfile = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile, trace_inode=True) if os.path.exists(seekfile): os.unlink(seekfile) os.unlink(self.logfile) if os.path.exists(self.logfile1): seekfile1 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile1, trace_inode=True) if os.path.exists(seekfile1): os.unlink(seekfile1) os.unlink(self.logfile1) if os.path.exists(self.logfile2): seekfile2 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile2, trace_inode=True) if os.path.exists(seekfile2): os.unlink(seekfile2) os.unlink(self.logfile2) if os.path.exists(self.logdir): os.removedirs(self.logdir) if os.path.exists(self.seekdir): os.removedirs(self.seekdir) if os.path.exists(self.testdir): os.removedirs(self.testdir)
def test_seekfile_tag(self): """--seekfile-tag """ initial_data = { "logformat": self.logformat_syslog, "pattern_list": ["ERROR"], "critical_pattern_list": [], "negpattern_list": [], "critical_negpattern_list": [], "case_insensitive": False, "warning": 1, "critical": 0, "nodiff_warn": False, "nodiff_crit": False, "trace_inode": False, "multiline": False, "scantime": 86400, "expiration": 691200 } log = LogChecker(initial_data) # create new logfiles f = open(self.logfile, 'a') f.write("Dec 5 12:34:51 hostname noop: NOOP\n") f.write("Dec 5 12:34:51 hostname test: ERROR\n") f.write("Dec 5 12:34:52 hostname noop: NOOP\n") f.flush() f.close() f = open(self.logfile1, 'a') f.write("Dec 5 12:34:56 hostname noop: NOOP\n") f.write("Dec 5 12:34:56 hostname test: ERROR\n") f.write("Dec 5 12:34:57 hostname noop: NOOP\n") f.flush() f.close() f = open(self.logfile2, 'a') f.write("Dec 5 12:34:58 hostname noop: NOOP\n") f.write("Dec 5 12:34:59 hostname noop: NOOP\n") f.flush() f.close() # create seekfile of logfile seekfile_1 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile, seekfile_tag=self.tag1) seekfile_2 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile, seekfile_tag=self.tag1) seekfile_3 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile, seekfile_tag=self.tag2) log.check_log(self.logfile, seekfile_3) log.clear_state() log.check_log_multi(self.logfile_pattern, self.seekdir, seekfile_tag=self.tag2) self.assertEqual(log.get_state(), LogChecker.STATE_WARNING) self.assertEqual(log.get_message(), 'WARNING: Found 1 lines (limit=1/0): Dec 5 12:34:56 hostname test: ERROR at %s' % self.logfile1) self.assertEqual(seekfile_1, seekfile_2) self.assertNotEquals(seekfile_1, seekfile_3) self.assertTrue(seekfile_1.find(self.tag1)) self.assertTrue(os.path.exists(seekfile_3))
def test_trace_inode_without_expiration(self): """--trace_inode, --expiration and --remove-seekfile options """ initial_data = { "logformat": self.logformat_syslog, "pattern_list": ["ERROR"], "critical_pattern_list": [], "negpattern_list": [], "critical_negpattern_list": [], "case_insensitive": False, "warning": 1, "critical": 0, "nodiff_warn": False, "nodiff_crit": False, "trace_inode": True, "multiline": False, "scantime": 2, "expiration": 3 } log = LogChecker(initial_data) # create logfile f = open(self.logfile, 'a') f.write("Dec 5 12:34:50 hostname noop: NOOP\n") f.write("Dec 5 12:34:51 hostname test: ERROR\n") f.write("Dec 5 12:34:52 hostname noop: NOOP\n") f.flush() f.close() # log rotation os.rename(self.logfile, self.logfile1) # create new logfile f = open(self.logfile, 'a') f.write("Dec 5 12:34:53 hostname noop: NOOP\n") f.write("Dec 5 12:34:53 hostname test: ERROR\n") f.write("Dec 5 12:34:54 hostname noop: NOOP\n") f.flush() f.close() # do check_log_multi, and create seekfile and seekfile1 log.check_log_multi(self.logfile_pattern, self.seekdir, remove_seekfile=True) log.clear_state() seekfile_1 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile, trace_inode=True) seekfile1_1 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile1, trace_inode=True) time.sleep(4) # update logfile f = open(self.logfile, 'a') f.write("Dec 5 12:34:58 hostname noop: NOOP\n") f.write("Dec 5 12:34:59 hostname test: ERROR\n") f.write("Dec 5 12:34:59 hostname noop: NOOP\n") f.flush() f.close() # log rotation, purge old logfile2 os.rename(self.logfile1, self.logfile2) os.rename(self.logfile, self.logfile1) # seek file of old logfile1 should be purged. log.check_log_multi(self.logfile_pattern, self.seekdir, remove_seekfile=True) seekfile1_2 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile1, trace_inode=True) self.assertEqual(log.get_state(), LogChecker.STATE_WARNING) self.assertEqual(log.get_message(), 'WARNING: Found 1 lines (limit=1/0): Dec 5 12:34:59 hostname test: ERROR at %s' % self.logfile1) self.assertEqual(seekfile_1, seekfile1_2) self.assertFalse(os.path.exists(seekfile1_1)) self.assertTrue(os.path.exists(seekfile1_2))
def test_trace_inode(self): """--trace_inode """ initial_data = { "logformat": self.logformat_syslog, "pattern_list": ["ERROR"], "critical_pattern_list": [], "negpattern_list": [], "critical_negpattern_list": [], "case_insensitive": False, "warning": 1, "critical": 0, "nodiff_warn": False, "nodiff_crit": False, "trace_inode": True, "multiline": False, "scantime": 86400, "expiration": 691200 } log = LogChecker(initial_data) # create logfile f = open(self.logfile, 'a') f.write("Dec 5 12:34:51 hostname noop: NOOP\n") f.write("Dec 5 12:34:51 hostname test: ERROR\n") f.write("Dec 5 12:34:52 hostname noop: NOOP\n") f.flush() f.close() # create seekfile of logfile log.check_log_multi(self.logfile_pattern, self.seekdir, remove_seekfile=False) log.clear_state() seekfile_1 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile, trace_inode=True) # update logfile f = open(self.logfile, 'a') f.write("Dec 5 12:34:55 hostname noop: NOOP\n") f.write("Dec 5 12:34:55 hostname test: ERROR\n") f.write("Dec 5 12:34:56 hostname noop: NOOP\n") f.flush() f.close() # log rotation os.rename(self.logfile, self.logfile1) # create a new logfile f = open(self.logfile, 'a') f.write("Dec 5 12:34:59 hostname noop: NOOP\n") f.flush() f.close() # create seekfile of logfile log.check_log_multi(self.logfile_pattern, self.seekdir, remove_seekfile=False) seekfile_2 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile, trace_inode=True) seekfile1_2 = LogChecker.get_seekfile(self.logfile_pattern, self.seekdir, self.logfile1, trace_inode=True) self.assertEqual(log.get_state(), LogChecker.STATE_WARNING) self.assertEqual(log.get_message(), 'WARNING: Found 1 lines (limit=1/0): Dec 5 12:34:55 hostname test: ERROR at %s' % self.logfile1) self.assertEqual(seekfile_1, seekfile1_2) self.assertTrue(os.path.exists(seekfile_2)) self.assertTrue(os.path.exists(seekfile1_2))