- observability: added tests for LogLevel.String(), Warn(), Warnf(), Infof(), Debugf(), Error(), WithFields(), and concurrent access patterns - file: added tests for Reopen(), Close(), empty/whitespace paths, validateFilePath allowed/rejected paths, concurrent writes, Flush(), and marshal errors - config: added tests for TimeWindowConfig.GetDuration(), CorrelationConfig getters, validation scenarios (no inputs, no outputs, duplicate sockets, ClickHouse validation), and LogConfig.GetLevel() Coverage improvements: - observability: 57.7% → 79.5% - file: 68.6% → 78.6% - config: 69.8% → 97.7% - total: 68.6% → 74.4% Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
102 lines
6.6 KiB
Bash
Executable File
102 lines
6.6 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
echo "=== AUDIT ARCHITECTURE COMPLIANCE ==="
|
|
echo ""
|
|
|
|
# 1. Runtime - systemd service
|
|
echo "1. RUNTIME - SYSTEMD SERVICE"
|
|
if [ -f /src/logcorrelator.service ]; then
|
|
echo "✅ logcorrelator.service exists"
|
|
grep -q "ExecStart=/usr/bin/logcorrelator" /src/logcorrelator.service && echo " ✅ ExecStart correct" || echo " ❌ ExecStart incorrect"
|
|
grep -q "ExecReload=" /src/logcorrelator.service && echo " ✅ ExecReload present" || echo " ❌ ExecReload missing"
|
|
grep -q "Restart=on-failure" /src/logcorrelator.service && echo " ✅ Restart policy correct" || echo " ❌ Restart policy incorrect"
|
|
else
|
|
echo "❌ logcorrelator.service missing"
|
|
fi
|
|
|
|
# Check signal handling in code
|
|
echo ""
|
|
grep -r "SIGINT\|SIGTERM\|SIGHUP" /src/cmd/logcorrelator/main.go > /dev/null && echo "✅ Signal handling (SIGINT/SIGTERM/SIGHUP) implemented" || echo "❌ Signal handling missing"
|
|
|
|
# 2. Packaging - RPM
|
|
echo ""
|
|
echo "2. PACKAGING - RPM"
|
|
[ -f /src/packaging/rpm/logcorrelator.spec ] && echo "✅ RPM spec file exists" || echo "❌ RPM spec missing"
|
|
grep -q "fpm" /src/Dockerfile.package && echo "✅ fpm tool used for packaging" || echo "❌ fpm not found"
|
|
|
|
# 3. Config - YAML
|
|
echo ""
|
|
echo "3. CONFIG - YAML"
|
|
[ -f /src/config.example.yml ] && echo "✅ config.example.yml exists" || echo "❌ config.example.yml missing"
|
|
grep -q "log:" /src/config.example.yml && echo " ✅ log section present" || echo " ❌ log section missing"
|
|
grep -q "inputs:" /src/config.example.yml && echo " ✅ inputs section present" || echo " ❌ inputs section missing"
|
|
grep -q "outputs:" /src/config.example.yml && echo " ✅ outputs section present" || echo " ❌ outputs section missing"
|
|
grep -q "correlation:" /src/config.example.yml && echo " ✅ correlation section present" || echo " ❌ correlation section missing"
|
|
|
|
# 4. Inputs - Unix datagram sockets
|
|
echo ""
|
|
echo "4. INPUTS - UNIX DATAGRAM SOCKETS"
|
|
grep -q "ListenUnixgram" /src/internal/adapters/inbound/unixsocket/source.go && echo "✅ Using ListenUnixgram (SOCK_DGRAM)" || echo "❌ Not using SOCK_DGRAM"
|
|
grep -q "ReadFromUnix" /src/internal/adapters/inbound/unixsocket/source.go && echo "✅ Using ReadFromUnix for datagrams" || echo "❌ Not using ReadFromUnix"
|
|
grep -q "MaxDatagramSize = 65535" /src/internal/adapters/inbound/unixsocket/source.go && echo "✅ max_datagram_bytes = 65535" || echo "❌ max_datagram_bytes incorrect"
|
|
grep -q "0666" /src/internal/adapters/inbound/unixsocket/source.go && echo "✅ Default socket permissions 0666" || echo "❌ Socket permissions not 0666"
|
|
|
|
# Check socket paths in config
|
|
grep -q "http.socket" /src/config.example.yml && echo " ✅ http.socket path configured" || echo " ❌ http.socket path missing"
|
|
grep -q "network.socket" /src/config.example.yml && echo " ✅ network.socket path configured" || echo " ❌ network.socket path missing"
|
|
|
|
# 5. Outputs - Sinks
|
|
echo ""
|
|
echo "5. OUTPUTS - SINKS"
|
|
[ -f /src/internal/adapters/outbound/file/sink.go ] && echo "✅ File sink exists" || echo "❌ File sink missing"
|
|
[ -f /src/internal/adapters/outbound/clickhouse/sink.go ] && echo "✅ ClickHouse sink exists" || echo "❌ ClickHouse sink missing"
|
|
[ -f /src/internal/adapters/outbound/multi/sink.go ] && echo "✅ MultiSink exists" || echo "❌ MultiSink missing"
|
|
|
|
# Check SIGHUP reopen in file sink
|
|
grep -q "Reopen" /src/internal/adapters/outbound/file/sink.go && echo " ✅ FileSink.Reopen() for SIGHUP" || echo " ❌ FileSink.Reopen() missing"
|
|
|
|
# Check ClickHouse batching
|
|
grep -q "batch" /src/internal/adapters/outbound/clickhouse/sink.go && echo " ✅ ClickHouse batching implemented" || echo " ❌ ClickHouse batching missing"
|
|
grep -q "drop_on_overflow\|DropOnOverflow" /src/internal/adapters/outbound/clickhouse/sink.go && echo " ✅ drop_on_overflow implemented" || echo " ❌ drop_on_overflow missing"
|
|
|
|
# 6. Correlation
|
|
echo ""
|
|
echo "6. CORRELATION"
|
|
grep -q "src_ip" /src/internal/domain/correlation_service.go && echo "✅ src_ip in correlation key" || echo "❌ src_ip missing"
|
|
grep -q "src_port" /src/internal/domain/correlation_service.go && echo "✅ src_port in correlation key" || echo "❌ src_port missing"
|
|
grep -q "MatchingMode" /src/internal/domain/correlation_service.go && echo "✅ MatchingMode (one_to_one/one_to_many) implemented" || echo "❌ MatchingMode missing"
|
|
grep -q "ApacheAlwaysEmit" /src/internal/domain/correlation_service.go && echo "✅ apache_always_emit orphan policy" || echo "❌ apache_always_emit missing"
|
|
grep -q "network_ttl\|NetworkTTLS" /src/internal/domain/correlation_service.go && echo "✅ TTL management for network events" || echo "❌ TTL management missing"
|
|
grep -q "max_http_items\|maxHttpItems\|MaxHTTPItems" /src/internal/domain/correlation_service.go && echo "✅ Buffer limit max_http_items" || echo " ⚠️ Buffer limit naming may differ"
|
|
grep -q "max_network_items\|maxNetworkItems\|MaxNetworkItems" /src/internal/domain/correlation_service.go && echo "✅ Buffer limit max_network_items" || echo " ⚠️ Buffer limit naming may differ"
|
|
|
|
# 7. Schema - Source A and B
|
|
echo ""
|
|
echo "7. SCHEMA - SOURCE A AND B"
|
|
grep -q "timestamp" /src/internal/adapters/inbound/unixsocket/source.go && echo "✅ timestamp field for Source A" || echo "❌ timestamp missing for Source A"
|
|
grep -q "SourceA\|SourceB" /src/internal/domain/event.go && echo "✅ EventSource enum (A/B)" || echo "❌ EventSource enum missing"
|
|
grep -q "header_" /src/internal/adapters/inbound/unixsocket/source.go && echo "✅ header_* dynamic fields" || echo "❌ header_* fields missing"
|
|
grep -q "Extra" /src/internal/domain/event.go && echo "✅ Extra fields map" || echo "❌ Extra fields missing"
|
|
|
|
# 8. Architecture modules
|
|
echo ""
|
|
echo "8. ARCHITECTURE MODULES"
|
|
[ -d /src/internal/domain ] && echo "✅ internal/domain" || echo "❌ internal/domain missing"
|
|
[ -d /src/internal/ports ] && echo "✅ internal/ports" || echo "❌ internal/ports missing"
|
|
[ -d /src/internal/app ] && echo "✅ internal/app" || echo "❌ internal/app missing"
|
|
[ -d /src/internal/adapters/inbound ] && echo "✅ internal/adapters/inbound" || echo "❌ internal/adapters/inbound missing"
|
|
[ -d /src/internal/adapters/outbound ] && echo "✅ internal/adapters/outbound" || echo "❌ internal/adapters/outbound missing"
|
|
[ -d /src/internal/config ] && echo "✅ internal/config" || echo "❌ internal/config missing"
|
|
[ -d /src/internal/observability ] && echo "✅ internal/observability" || echo "❌ internal/observability missing"
|
|
[ -d /src/cmd/logcorrelator ] && echo "✅ cmd/logcorrelator" || echo "❌ cmd/logcorrelator missing"
|
|
|
|
# 9. Testing
|
|
echo ""
|
|
echo "9. TESTING"
|
|
echo "Running tests with coverage..."
|
|
cd /src && go test ./... -cover 2>&1 | grep -E "^(ok|FAIL|\?)" || true
|
|
|
|
echo ""
|
|
echo "=== AUDIT COMPLETE ==="
|