herolib_python/lib/core/logger/log_test.py
2025-08-05 15:48:18 +02:00

150 lines
4.8 KiB
Python

import unittest
import os
import shutil
from lib.core.logger.factory import new
from lib.core.logger.model import LogItemArgs, LogType, Logger # Import Logger class
from lib.data.ourtime.ourtime import new as ourtime_new, now as ourtime_now
from lib.core.pathlib.pathlib import get_file, ls, rmdir_all
class TestLogger(unittest.TestCase):
def setUp(self):
# Corresponds to testsuite_begin()
if os.path.exists('/tmp/testlogs'):
rmdir_all('/tmp/testlogs')
def tearDown(self):
# Corresponds to testsuite_end()
# if os.path.exists('/tmp/testlogs'):
# rmdir_all('/tmp/testlogs')
pass
def test_logger_functionality(self):
logger = new('/tmp/testlogs')
# Test stdout logging
logger.log(LogItemArgs(
cat='test-app',
log='This is a test message\nWith a second line\nAnd a third line',
logtype=LogType.STDOUT,
timestamp=ourtime_new('2022-12-05 20:14:35')
))
# Test error logging
logger.log(LogItemArgs(
cat='error-test',
log='This is an error\nWith details',
logtype=LogType.ERROR,
timestamp=ourtime_new('2022-12-05 20:14:35')
))
logger.log(LogItemArgs(
cat='test-app',
log='This is a test message\nWith a second line\nAnd a third line',
logtype=LogType.STDOUT,
timestamp=ourtime_new('2022-12-05 20:14:36')
))
logger.log(LogItemArgs(
cat='error-test',
log='''
This is an error
With details
''',
logtype=LogType.ERROR,
timestamp=ourtime_new('2022-12-05 20:14:36')
))
logger.log(LogItemArgs(
cat='error-test',
log='''
aaa
bbb
''',
logtype=LogType.ERROR,
timestamp=ourtime_new('2022-12-05 22:14:36')
))
logger.log(LogItemArgs(
cat='error-test',
log='''
aaa2
bbb2
''',
logtype=LogType.ERROR,
timestamp=ourtime_new('2022-12-05 22:14:36')
))
# Verify log directory exists
self.assertTrue(os.path.exists('/tmp/testlogs'), 'Log directory should exist')
# Get log file
files = ls('/tmp/testlogs')
self.assertEqual(len(files), 2) # Expecting two files: 2022-12-05-20.log and 2022-12-05-22.log
# Test search functionality
items_stdout = logger.search(
timestamp_from=ourtime_new('2022-11-01 20:14:35'),
timestamp_to=ourtime_new('2025-11-01 20:14:35'),
logtype=LogType.STDOUT
)
self.assertEqual(len(items_stdout), 2)
items_error = logger.search(
timestamp_from=ourtime_new('2022-11-01 20:14:35'),
timestamp_to=ourtime_new('2025-11-01 20:14:35'),
logtype=LogType.ERROR
)
self.assertEqual(len(items_error), 4)
# Test specific log content
found_error_log = False
for item in items_error:
if "This is an error\nWith details" in item.log:
found_error_log = True
break
self.assertTrue(found_error_log, "Expected error log content not found")
found_stdout_log = False
for item in items_stdout:
if "This is a test message\nWith a second line\nAnd a third line" in item.log:
found_stdout_log = True
break
self.assertTrue(found_stdout_log, "Expected stdout log content not found")
# Test search by category
items_test_app = logger.search(
timestamp_from=ourtime_new('2022-11-01 20:14:35'),
timestamp_to=ourtime_new('2025-11-01 20:14:35'),
cat='test-app'
)
self.assertEqual(len(items_test_app), 2)
items_error_test = logger.search(
timestamp_from=ourtime_new('2022-11-01 20:14:35'),
timestamp_to=ourtime_new('2025-11-01 20:14:35'),
cat='error-test'
)
self.assertEqual(len(items_error_test), 4)
# Test search by log content
items_with_aaa = logger.search(
timestamp_from=ourtime_new('2022-11-01 20:14:35'),
timestamp_to=ourtime_new('2025-11-01 20:14:35'),
log='aaa'
)
self.assertEqual(len(items_with_aaa), 2)
# Test search with timestamp range
items_specific_time = logger.search(
timestamp_from=ourtime_new('2022-12-05 22:00:00'),
timestamp_to=ourtime_new('2022-12-05 23:00:00'),
logtype=LogType.ERROR
)
self.assertEqual(len(items_specific_time), 2)
if __name__ == '__main__':
unittest.main()