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
114 lines
2.9 KiB
Elixir
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
|