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

101 lines
2.4 KiB
Elixir

defmodule Towerops.Snmp.Profiles.Vendors.DevaTest do
use Towerops.DataCase, async: true
import Mox
alias Towerops.Snmp.Profiles.Vendors.Deva
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 expected profile names" do
assert Deva.profile_names() == ["deva-db7001"]
end
end
describe "detect_hardware/1" do
test "returns hardware description when SNMP responds" do
expect(SnmpMock, :get, fn _, "1.3.6.1.2.1.1.1.0", _ ->
{:ok, "Test Device Model XYZ"}
end)
assert Deva.detect_hardware(@client_opts) == "Test Device Model XYZ"
end
test "returns nil when SNMP fails" do
expect(SnmpMock, :get, fn _, _, _ ->
{:error, :timeout}
end)
assert Deva.detect_hardware(@client_opts) == nil
end
test "truncates long descriptions to 64 characters" do
long_descr = String.duplicate("A", 100)
expect(SnmpMock, :get, fn _, "1.3.6.1.2.1.1.1.0", _ ->
{:ok, long_descr}
end)
result = Deva.detect_hardware(@client_opts)
assert String.length(result) == 64
end
end
describe "wireless_oid_defs/0" do
test "returns list of sensor definitions" do
defs = Deva.wireless_oid_defs()
assert [_ | _] = defs
end
test "each definition has required fields" do
defs = Deva.wireless_oid_defs()
Enum.each(defs, fn def ->
assert Map.has_key?(def, :oid)
assert Map.has_key?(def, :sensor_descr)
assert Map.has_key?(def, :sensor_type)
assert Map.has_key?(def, :sensor_unit)
assert Map.has_key?(def, :sensor_divisor)
end)
end
end
describe "discover_wireless_sensors/1" do
test "discovers sensors when SNMP responds" do
defs = Deva.wireless_oid_defs()
num_defs = length(defs)
expect(SnmpMock, :get, num_defs, fn _, _oid, _ ->
{:ok, 42}
end)
sensors = Deva.discover_wireless_sensors(@client_opts)
assert length(sensors) == num_defs
end
test "returns empty list when no sensors respond" do
defs = Deva.wireless_oid_defs()
num_defs = length(defs)
expect(SnmpMock, :get, num_defs, fn _, _, _ ->
{:error, :no_such_object}
end)
sensors = Deva.discover_wireless_sensors(@client_opts)
assert sensors == []
end
end
end