vibed
This commit is contained in:
128
test_sample.py
Normal file
128
test_sample.py
Normal file
@@ -0,0 +1,128 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Simple test script to verify the log parsing and monitoring functionality
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import tempfile
|
||||
import time
|
||||
from main import LogParser, Config, LogMonitor
|
||||
|
||||
def test_log_parsing():
|
||||
"""Test log parsing functionality"""
|
||||
print("Testing log parsing...")
|
||||
|
||||
# Test access log
|
||||
access_line = '45.153.34.68 - - [02/Mar/2026:21:22:38 +0000] "GET / HTTP/1.1" 444 0 "-" "Mozilla/5.0"'
|
||||
parsed = LogParser.parse_log_line(access_line)
|
||||
assert parsed is not None, "Failed to parse access log"
|
||||
assert parsed['type'] == 'access', "Wrong log type"
|
||||
assert parsed['ip'] == '45.153.34.68', "Wrong IP"
|
||||
print("✓ Access log parsing works")
|
||||
|
||||
# Test error log
|
||||
error_line = '2026/03/02 04:11:13 [error] 1083281#1083281: *3381930 connect() failed (113: No route to host) while connecting to upstream, client: 185.71.113.95, server: jellyfin.nussnougate.net, request: "POST /Sessions/Playing/Progress HTTP/1.1", upstream: "http://192.168.100.101:8096/Sessions/Playing/Progress", host: "jellyfin.nussnougate.net"'
|
||||
parsed = LogParser.parse_log_line(error_line)
|
||||
assert parsed is not None, "Failed to parse error log"
|
||||
assert parsed['type'] == 'error', "Wrong log type"
|
||||
assert parsed['ip'] == '185.71.113.95', "Wrong IP"
|
||||
print("✓ Error log parsing works")
|
||||
|
||||
# Test NAXSI log
|
||||
naxsi_line = '{"ip":"192.253.248.11","server":"jellyfin.nussnougate.net","uri":"/","config":"block","rid":"a3da57ce31e7a5489d0625abe261f6e0","cscore0":"$UWA","score0":8,"zone0":"HEADERS","id0":10000034,"var_name0":"user-agent"}, client: 192.253.248.11, server: jellyfin.nussnougate.net, request: "GET / HTTP/1.1", host: "jellyfin.nussnougate.net", referrer: "http://jellyfin.nussnougate.net//.git/HEAD"'
|
||||
parsed = LogParser.parse_log_line(naxsi_line)
|
||||
assert parsed is not None, "Failed to parse NAXSI log"
|
||||
assert parsed['type'] == 'error', "Wrong log type"
|
||||
assert parsed['subtype'] == 'naxsi', "Wrong subtype"
|
||||
assert parsed['ip'] == '192.253.248.11', "Wrong IP"
|
||||
print("✓ NAXSI log parsing works")
|
||||
|
||||
def test_config_loading():
|
||||
"""Test configuration loading"""
|
||||
print("\nTesting configuration loading...")
|
||||
|
||||
config = Config()
|
||||
logbull_config = config.get_logbull_config()
|
||||
assert 'host' in logbull_config, "Missing LogBull host in config"
|
||||
assert 'project_id' in logbull_config, "Missing LogBull project_id in config"
|
||||
|
||||
log_files = config.get_log_files()
|
||||
assert len(log_files) > 0, "No log files configured"
|
||||
|
||||
service_config = config.get_service_config()
|
||||
assert 'poll_interval' in service_config, "Missing poll_interval in config"
|
||||
|
||||
print("✓ Configuration loading works")
|
||||
|
||||
def test_file_monitoring():
|
||||
"""Test file monitoring functionality"""
|
||||
print("\nTesting file monitoring...")
|
||||
|
||||
# Create temporary log file
|
||||
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.log') as f:
|
||||
temp_log_file = f.name
|
||||
f.write('45.153.34.68 - - [02/Mar/2026:21:22:38 +0000] "GET / HTTP/1.1" 444 0 "-" "Mozilla/5.0"\n')
|
||||
f.write('2026/03/02 04:11:13 [error] 1083281#1083281: *3381930 connect() failed (113: No route to host) while connecting to upstream, client: 185.71.113.95, server: test.example.com, request: "POST /test HTTP/1.1", host: "test.example.com"\n')
|
||||
|
||||
try:
|
||||
# Create a test config with our temp file
|
||||
test_config_content = """
|
||||
logbull:
|
||||
host: "http://localhost:4005"
|
||||
project_id: "778e67d7-5ec6-4c48-b199-cfbded605557"
|
||||
flush_interval: 1
|
||||
|
||||
log_files:
|
||||
- "{}"
|
||||
|
||||
service:
|
||||
poll_interval: 0.1
|
||||
max_lines_per_batch: 10
|
||||
log_level: "DEBUG"
|
||||
""".format(temp_log_file)
|
||||
|
||||
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.yaml') as f:
|
||||
temp_config_file = f.name
|
||||
f.write(test_config_content)
|
||||
|
||||
# Test monitor initialization
|
||||
config = Config(temp_config_file)
|
||||
monitor = LogMonitor(config)
|
||||
|
||||
# Process logs
|
||||
monitor.process_logs()
|
||||
|
||||
print("✓ File monitoring works")
|
||||
|
||||
finally:
|
||||
# Clean up
|
||||
os.unlink(temp_log_file)
|
||||
os.unlink(temp_config_file)
|
||||
|
||||
def main():
|
||||
"""Run all tests"""
|
||||
print("Running tests for proxy-to-logbull...\n")
|
||||
|
||||
try:
|
||||
test_log_parsing()
|
||||
test_config_loading()
|
||||
test_file_monitoring()
|
||||
|
||||
print("\n🎉 All tests passed! The service is ready to use.")
|
||||
print("\nTo run the service:")
|
||||
print(" python3 main.py")
|
||||
print("\nTo run as a systemd service:")
|
||||
print(" sudo cp proxy-to-logbull.service /etc/systemd/system/")
|
||||
print(" sudo systemctl daemon-reload")
|
||||
print(" sudo systemctl start proxy-to-logbull")
|
||||
print(" sudo systemctl enable proxy-to-logbull")
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n❌ Test failed: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user