towerops/test/towerops/snmp/profiles/vendors/aviat_test.exs
Graham McIntire 0a4482f974
feat: add 5 new vendor modules and fix dialyzer issues
Vendor modules added:
- Aviat (WTM microwave radios)
- Aruba (wireless controllers and APs)
- CiscoWLC (Cisco wireless LAN controllers)
- Teltonika (RUTOS LTE routers)
- Sub10 (mmWave backhaul radios)

Dialyzer fixes:
- Fix unknown type Devices.t/0 in alert.ex and device.ex
- Fix unmatched_return warnings across multiple files
- Add :exq to PLT for Exq function detection
- Remove dead code in base.ex, dynamic.ex, vendor.ex
- Fix Device.t() type spec to allow nil name field

Tests: 1437 tests, 0 failures
Dialyzer: 0 errors
Credo: no issues
2026-01-22 09:34:50 -06:00

114 lines
2.9 KiB
Elixir

defmodule Towerops.Snmp.Profiles.Vendors.AviatTest do
use Towerops.DataCase, async: true
import Mox
alias Towerops.Snmp.Profiles.Vendors.Aviat
alias Towerops.Snmp.SnmpMock
setup :verify_on_exit!
@client_opts [
ip: "192.168.1.1",
community: "public",
version: "2c",
port: 161,
timeout: 5000
]
describe "profile_names/0" do
test "returns aviat profile names" do
assert Aviat.profile_names() == ["aviat-wtm"]
end
end
describe "detect_hardware/1" do
test "detects hardware from model OID" do
expect(SnmpMock, :get, fn _, "1.3.6.1.4.1.2509.9.6.1.1.2.1.3.1", _ ->
{:ok, "WTM 4200"}
end)
assert Aviat.detect_hardware(@client_opts) == "WTM 4200"
end
test "returns nil when OID unavailable" do
expect(SnmpMock, :get, fn _, _, _ ->
{:error, :no_such_object}
end)
assert Aviat.detect_hardware(@client_opts) == nil
end
end
describe "wireless_oid_defs/0" do
test "returns list of wireless sensor definitions" do
defs = Aviat.wireless_oid_defs()
assert is_list(defs)
assert [_ | _] = defs
end
test "includes temperature sensor" do
defs = Aviat.wireless_oid_defs()
temp = Enum.find(defs, &(&1.sensor_type == "temperature"))
assert temp
assert temp.sensor_descr == "ODU Temperature"
end
test "includes RSL sensor" do
defs = Aviat.wireless_oid_defs()
rssi = Enum.find(defs, &(&1.sensor_type == "rssi"))
assert rssi
assert rssi.sensor_descr == "RSL"
assert rssi.sensor_unit == "dBm"
end
test "includes SNR sensor" do
defs = Aviat.wireless_oid_defs()
snr = Enum.find(defs, &(&1.sensor_type == "snr"))
assert snr
assert snr.sensor_unit == "dB"
end
test "includes capacity sensor" do
defs = Aviat.wireless_oid_defs()
capacity = Enum.find(defs, &(&1.sensor_type == "capacity"))
assert capacity
assert capacity.sensor_unit == "Mbps"
end
end
describe "discover_wireless_sensors/1" do
test "discovers sensors when SNMP responds" do
expect(SnmpMock, :get, 5, fn _, oid, _ ->
cond do
String.contains?(oid, "2509.9.6.2.3.1.1.5.1") -> {:ok, 45}
String.contains?(oid, "2509.9.6.2.2.1.1.7.1") -> {:ok, -550}
String.contains?(oid, "2509.9.6.2.2.1.1.5.1") -> {:ok, 200}
String.contains?(oid, "2509.9.6.2.2.1.1.12.1") -> {:ok, 280}
String.contains?(oid, "2509.9.6.2.2.1.1.15.1") -> {:ok, 400}
true -> {:error, :no_such_object}
end
end)
sensors = Aviat.discover_wireless_sensors(@client_opts)
assert is_list(sensors)
assert length(sensors) == 5
end
test "returns empty list when no sensors respond" do
expect(SnmpMock, :get, 5, fn _, _, _ ->
{:error, :no_such_object}
end)
sensors = Aviat.discover_wireless_sensors(@client_opts)
assert sensors == []
end
end
end