- Fix leader election guard test for :undefined pid - Fix cpu_sup.util() pattern matching to handle numeric return - Fix encoding_utils to always return explicit nil when needed - Remove unused finite_float? function - Fix signal handler to match :ok return from :os.set_signal/2 - Remove redundant catch-all pattern in database metrics - Fix Gridsquare pattern matching in info_live template - Remove unnecessary nil check for calculate_course result - Fix get_packet_received_at to not check for nil (always returns DateTime) - Remove redundant catch-all pattern in weather format_weather_value - Fix query builder to use from(p in Packet) instead of bare Packet atom Reduced dialyzer errors from 49 to 6. Remaining warnings are mostly false positives from template compilation and overloaded function specs. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
113 lines
3.6 KiB
Elixir
113 lines
3.6 KiB
Elixir
defmodule Aprsme.IsTest do
|
|
@moduledoc """
|
|
Tests to ensure APRS-IS external connections are properly blocked in test environment.
|
|
"""
|
|
use ExUnit.Case, async: false
|
|
use Aprsme.DataCase
|
|
|
|
describe "APRS-IS mock functionality" do
|
|
setup do
|
|
# Start the mock if not already running
|
|
case GenServer.start_link(AprsIsMock, [], name: AprsIsMock) do
|
|
{:ok, pid} ->
|
|
on_exit(fn ->
|
|
if Process.alive?(pid) do
|
|
GenServer.stop(pid, :normal)
|
|
end
|
|
end)
|
|
|
|
{:ok, mock_pid: pid}
|
|
|
|
{:error, {:already_started, pid}} ->
|
|
on_exit(fn ->
|
|
if Process.alive?(pid) do
|
|
GenServer.stop(pid, :normal)
|
|
end
|
|
end)
|
|
|
|
{:ok, mock_pid: pid}
|
|
end
|
|
end
|
|
|
|
test "mock should provide status without external connections", %{mock_pid: _pid} do
|
|
status = AprsIsMock.get_status()
|
|
|
|
assert status.connected == false
|
|
assert status.server == "mock.aprs.test"
|
|
assert status.port == 14_580
|
|
assert status.login_id == "TEST"
|
|
assert is_map(status.packet_stats)
|
|
end
|
|
|
|
test "mock should handle message sending safely", %{mock_pid: _pid} do
|
|
# These should not attempt external connections
|
|
assert AprsIsMock.send_message("test message") == :ok
|
|
assert AprsIsMock.send_message("TEST", "DEST", "hello") == :ok
|
|
assert AprsIsMock.set_filter("r/0/0/1") == :ok
|
|
assert AprsIsMock.list_active_filters() == :ok
|
|
end
|
|
|
|
test "mock can simulate packet reception for testing", %{mock_pid: _pid} do
|
|
# This allows tests to simulate receiving packets without external connections
|
|
test_packet = %{
|
|
sender: "TEST-1",
|
|
destination: "APRS",
|
|
path: ["WIDE1-1", "WIDE2-1"],
|
|
data_type: :position,
|
|
latitude: 33.0,
|
|
longitude: -96.0
|
|
}
|
|
|
|
assert AprsIsMock.simulate_packet(test_packet) == :ok
|
|
end
|
|
|
|
test "mock can simulate connection state changes", %{mock_pid: _pid} do
|
|
# Simulate connected state
|
|
assert AprsIsMock.simulate_connection_state(true) == :ok
|
|
status = AprsIsMock.get_status()
|
|
assert status.connected == true
|
|
assert status.connected_at
|
|
|
|
# Simulate disconnected state
|
|
assert AprsIsMock.simulate_connection_state(false) == :ok
|
|
status = AprsIsMock.get_status()
|
|
assert status.connected == false
|
|
assert status.connected_at == nil
|
|
end
|
|
end
|
|
|
|
describe "network isolation verification" do
|
|
test "no external network calls should be made during test runs" do
|
|
# This test verifies that no actual TCP connections are attempted
|
|
# We can do this by checking that :gen_tcp.connect is not called
|
|
# with real APRS server addresses
|
|
|
|
# Common APRS-IS servers that should never be contacted in tests
|
|
forbidden_servers = [
|
|
"rotate.aprs2.net",
|
|
"dallas.aprs2.net",
|
|
"seattle.aprs2.net",
|
|
"chicago.aprs2.net",
|
|
"atlanta.aprs2.net"
|
|
]
|
|
|
|
# Verify these are not in the current configuration
|
|
current_server = Application.get_env(:aprsme, :aprsme_is_server)
|
|
|
|
if current_server do
|
|
server_str = to_string(current_server)
|
|
|
|
refute Enum.any?(forbidden_servers, fn forbidden ->
|
|
String.contains?(server_str, forbidden)
|
|
end),
|
|
"Test environment should not be configured with real APRS servers"
|
|
end
|
|
end
|
|
|
|
test "test environment marker is properly set" do
|
|
# Verify we're definitely in test environment
|
|
assert Mix.env() == :test
|
|
assert Application.get_env(:aprsme, :env) == :test
|
|
end
|
|
end
|
|
end
|