towerops/test/towerops/snmp/profiles/vendors/dlinkap_test.exs
2026-06-16 09:56:51 -05:00

101 lines
2.7 KiB
Elixir

defmodule Towerops.Snmp.Profiles.Vendors.DlinkapTest do
use Towerops.DataCase, async: true
import Mox
alias Towerops.Snmp.Profiles.Vendors.Dlinkap
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 dlinkap profile name" do
assert Dlinkap.profile_names() == ["dlinkap"]
end
end
describe "detect_hardware/1" do
test "detects hardware from model OID" do
expect(SnmpMock, :get, fn _, "1.3.6.1.4.1.171.10.37.1.1.1.0", _ ->
{:ok, "DAP-2660"}
end)
assert Dlinkap.detect_hardware(@client_opts) == "DAP-2660"
end
test "returns nil when OID unavailable" do
expect(SnmpMock, :get, fn _, _, _ ->
{:error, :no_such_object}
end)
assert Dlinkap.detect_hardware(@client_opts) == nil
end
end
describe "wireless_oid_defs/0" do
test "returns list of wireless sensor definitions" do
defs = Dlinkap.wireless_oid_defs()
assert [_ | _] = defs
end
test "includes associated clients sensor" do
defs = Dlinkap.wireless_oid_defs()
clients = Enum.find(defs, &(&1.sensor_descr == "Associated Clients"))
assert clients.sensor_type == "clients"
end
test "includes CPU sensor" do
defs = Dlinkap.wireless_oid_defs()
cpu = Enum.find(defs, &(&1.sensor_descr == "CPU Utilization"))
assert cpu.sensor_type == "load"
end
test "includes band-specific client sensors" do
defs = Dlinkap.wireless_oid_defs()
clients_2g = Enum.find(defs, &(&1.sensor_descr == "2.4GHz Clients"))
clients_5g = Enum.find(defs, &(&1.sensor_descr == "5GHz Clients"))
assert %{sensor_descr: "2.4GHz Clients"} = clients_2g
assert %{sensor_descr: "5GHz Clients"} = clients_5g
end
end
describe "discover_wireless_sensors/1" do
test "discovers sensors when SNMP responds" do
expect(SnmpMock, :get, 4, fn _, oid, _ ->
cond do
String.contains?(oid, "171.10.37.1.2.1.0") -> {:ok, 85}
String.contains?(oid, "171.10.37.1.2.2.0") -> {:ok, 40}
String.contains?(oid, "171.10.37.1.2.3.0") -> {:ok, 45}
String.contains?(oid, "171.10.37.1.3.1.0") -> {:ok, 30}
true -> {:error, :no_such_object}
end
end)
sensors = Dlinkap.discover_wireless_sensors(@client_opts)
assert length(sensors) == 4
end
test "returns empty list when no sensors respond" do
expect(SnmpMock, :get, 4, fn _, _, _ ->
{:error, :no_such_object}
end)
sensors = Dlinkap.discover_wireless_sensors(@client_opts)
assert sensors == []
end
end
end