aprs.me/test/aprsme/packet_pipeline_integration_test.exs
Graham McIntire 8811298eed
Fix packet buffer overflow and system load adjustment issues
- Fixed InsertOptimizer returning map instead of keyword list for Ecto
- Increased batch size ranges to handle high load (100-800 packets)
- Improved consumer responsiveness:
  - Reduced batch timeout from 1000ms to 500ms
  - Process batches at 80% capacity for better throughput
  - Reduced adjustment interval from 10s to 5s
- Added comprehensive logging for debugging buffer status
- Created integration tests for packet pipeline
- Coordinated batch sizing between SystemMonitor and InsertOptimizer

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15 08:16:11 -05:00

62 lines
1.8 KiB
Elixir

defmodule Aprsme.PacketPipelineIntegrationTest do
use Aprsme.DataCase, async: false
import ExUnit.CaptureLog
alias Aprsme.PacketProducer
describe "packet pipeline under load" do
test "system adjusts batch sizes based on load" do
# Test the actual running system without starting new processes
initial_batch_size = Aprsme.SystemMonitor.get_recommended_batch_size()
assert initial_batch_size >= 100
assert initial_batch_size <= 800
# Submit some packets to the running system
log_output =
capture_log(fn ->
for i <- 1..10 do
packet = %{
sender: "TEST-#{i}",
destination: "APRS",
path: "WIDE1-1",
information_field: "Integration test packet #{i}",
data_type: "position",
lat: 40.0 + i / 1000,
lon: -74.0 + i / 1000
}
PacketProducer.submit_packet(packet)
end
# Wait a bit for processing
Process.sleep(100)
end)
# Verify no errors occurred
refute log_output =~ "error"
end
test "insert optimizer provides reasonable batch sizes" do
batch_size = Aprsme.Performance.InsertOptimizer.get_optimal_batch_size()
assert batch_size >= 100
assert batch_size <= 800
end
test "system monitor provides metrics" do
metrics = Aprsme.SystemMonitor.get_metrics()
assert is_map(metrics)
assert Map.has_key?(metrics, :memory)
assert Map.has_key?(metrics, :cpu)
assert Map.has_key?(metrics, :processes)
assert Map.has_key?(metrics, :db_pool)
# Check pressure values are reasonable
assert metrics.memory.pressure >= 0.0
assert metrics.memory.pressure <= 1.0
assert metrics.cpu.pressure >= 0.0
assert metrics.cpu.pressure <= 1.0
end
end
end