- Remove trailing whitespace from comments - Fix long line in packet_processor.ex - Rename is_leader? to leader? following Elixir conventions
181 lines
5.1 KiB
Elixir
181 lines
5.1 KiB
Elixir
defmodule Aprsme.EnhancedParserTest do
|
|
use Aprsme.DataCase, async: true
|
|
|
|
alias Aprsme.Packet
|
|
|
|
describe "enhanced parser field extraction" do
|
|
test "extracts standard parser compatibility fields" do
|
|
attrs = %{
|
|
srccallsign: "W1AW",
|
|
dstcallsign: "APRS",
|
|
body: "!1234.56N/12345.67W-Test",
|
|
origpacket: "W1AW>APRS:!1234.56N/12345.67W-Test",
|
|
header: "W1AW>APRS",
|
|
alive: 1,
|
|
posambiguity: 0,
|
|
symboltable: "/",
|
|
symbolcode: "-",
|
|
messaging: 0,
|
|
sender: "W1AW",
|
|
base_callsign: "W1AW",
|
|
ssid: "0",
|
|
destination: "APRS",
|
|
data_type: "position",
|
|
received_at: DateTime.utc_now()
|
|
}
|
|
|
|
result = Packet.extract_additional_data(attrs, "W1AW>APRS:!1234.56N/12345.67W-Test")
|
|
|
|
assert result[:srccallsign] == "W1AW"
|
|
assert result[:dstcallsign] == "APRS"
|
|
assert result[:body] == "!1234.56N/12345.67W-Test"
|
|
assert result[:origpacket] == "W1AW>APRS:!1234.56N/12345.67W-Test"
|
|
assert result[:header] == "W1AW>APRS"
|
|
assert result[:alive] == 1
|
|
assert result[:posambiguity] == 0
|
|
assert result[:symboltable] == "/"
|
|
assert result[:symbolcode] == "-"
|
|
assert result[:messaging] == 0
|
|
end
|
|
|
|
test "extracts radio range field" do
|
|
attrs = %{
|
|
radiorange: "0050",
|
|
sender: "W1AW",
|
|
base_callsign: "W1AW",
|
|
ssid: "0",
|
|
destination: "APRS",
|
|
data_type: "position",
|
|
received_at: DateTime.utc_now()
|
|
}
|
|
|
|
result = Packet.extract_additional_data(attrs)
|
|
|
|
assert result[:radiorange] == "0050"
|
|
end
|
|
|
|
test "handles weather data from wx field" do
|
|
attrs = %{
|
|
sender: "WX1STN",
|
|
base_callsign: "WX1STN",
|
|
ssid: "0",
|
|
destination: "APRS",
|
|
data_type: "weather",
|
|
received_at: DateTime.utc_now(),
|
|
data_extended: %{
|
|
wx: %{
|
|
temperature: 72.5,
|
|
humidity: 65,
|
|
pressure: 1013.2,
|
|
wind_speed: 12.5,
|
|
wind_direction: 180
|
|
}
|
|
}
|
|
}
|
|
|
|
result = Packet.extract_additional_data(attrs)
|
|
|
|
assert result[:temperature] == 72.5
|
|
assert result[:humidity] == 65
|
|
assert result[:pressure] == 1013.2
|
|
assert result[:wind_speed] == 12.5
|
|
assert result[:wind_direction] == 180
|
|
end
|
|
|
|
test "handles PHG data in string format" do
|
|
attrs = %{
|
|
sender: "W1AW",
|
|
base_callsign: "W1AW",
|
|
ssid: "0",
|
|
destination: "APRS",
|
|
data_type: "position",
|
|
received_at: DateTime.utc_now(),
|
|
data_extended: %{
|
|
phg: "5430"
|
|
}
|
|
}
|
|
|
|
result = Packet.extract_additional_data(attrs)
|
|
|
|
# PHG 5430: power=5^2=25W, height=4->160ft, gain=3dB, dir=0->omni
|
|
assert result[:phg_power] == 25
|
|
assert result[:phg_height] == 160
|
|
assert result[:phg_gain] == 3
|
|
assert result[:phg_directivity] == 0
|
|
end
|
|
|
|
test "handles PHG data in legacy map format" do
|
|
attrs = %{
|
|
sender: "W1AW",
|
|
base_callsign: "W1AW",
|
|
ssid: "0",
|
|
destination: "APRS",
|
|
data_type: "position",
|
|
received_at: DateTime.utc_now(),
|
|
data_extended: %{
|
|
phg: %{
|
|
power: 25,
|
|
height: 160,
|
|
gain: 3,
|
|
directivity: 0
|
|
}
|
|
}
|
|
}
|
|
|
|
result = Packet.extract_additional_data(attrs)
|
|
|
|
assert result[:phg_power] == 25
|
|
assert result[:phg_height] == 160
|
|
assert result[:phg_gain] == 3
|
|
assert result[:phg_directivity] == 0
|
|
end
|
|
end
|
|
|
|
describe "enhanced parser packet storage" do
|
|
test "stores packet with enhanced parser fields" do
|
|
attrs = %{
|
|
sender: "W1AW-1",
|
|
base_callsign: "W1AW",
|
|
ssid: "1",
|
|
destination: "APRS",
|
|
data_type: "position",
|
|
received_at: DateTime.utc_now(),
|
|
raw_packet: "W1AW-1>APRS:!1234.56N/12345.67W-Test RNG0050",
|
|
lat: 12.576,
|
|
lon: -123.761,
|
|
symbol_code: "-",
|
|
symbol_table_id: "/",
|
|
comment: "Test station",
|
|
# Enhanced parser fields
|
|
srccallsign: "W1AW-1",
|
|
dstcallsign: "APRS",
|
|
body: "!1234.56N/12345.67W-Test RNG0050",
|
|
origpacket: "W1AW-1>APRS:!1234.56N/12345.67W-Test RNG0050",
|
|
header: "W1AW-1>APRS",
|
|
alive: 1,
|
|
posambiguity: 0,
|
|
symboltable: "/",
|
|
symbolcode: "-",
|
|
messaging: 0,
|
|
radiorange: "0050"
|
|
}
|
|
|
|
processed_attrs = Packet.extract_additional_data(attrs)
|
|
|
|
assert {:ok, packet} = Aprsme.Packets.store_packet(processed_attrs)
|
|
|
|
# Verify enhanced fields are stored
|
|
assert packet.srccallsign == "W1AW-1"
|
|
assert packet.dstcallsign == "APRS"
|
|
assert packet.body == "!1234.56N/12345.67W-Test RNG0050"
|
|
assert packet.origpacket == "W1AW-1>APRS:!1234.56N/12345.67W-Test RNG0050"
|
|
assert packet.header == "W1AW-1>APRS"
|
|
assert packet.alive == 1
|
|
assert packet.posambiguity == 0
|
|
assert packet.symboltable == "/"
|
|
assert packet.symbolcode == "-"
|
|
assert packet.messaging == 0
|
|
assert packet.radiorange == "0050"
|
|
end
|
|
end
|
|
end
|