diff --git a/lib/towerops/snmp/sensor_reading.ex b/lib/towerops/snmp/sensor_reading.ex index 899c01c8..454c63dd 100644 --- a/lib/towerops/snmp/sensor_reading.ex +++ b/lib/towerops/snmp/sensor_reading.ex @@ -38,7 +38,7 @@ defmodule Towerops.Snmp.SensorReading do reading |> cast(attrs, [:sensor_id, :value, :status, :checked_at]) |> validate_required([:sensor_id, :status, :checked_at]) - |> validate_inclusion(:status, ["ok", "warning", "critical"]) + |> validate_inclusion(:status, ["ok", "warning", "critical", "error"]) |> foreign_key_constraint(:sensor_id) end end diff --git a/test/towerops/workers/discovery_worker_test.exs b/test/towerops/workers/discovery_worker_test.exs index 51e7e85f..ea94d22a 100644 --- a/test/towerops/workers/discovery_worker_test.exs +++ b/test/towerops/workers/discovery_worker_test.exs @@ -81,8 +81,7 @@ defmodule Towerops.Workers.DiscoveryWorkerTest do assert {:error, _reason} = DiscoveryWorker.perform(device.id) end - test "logs appropriate messages", %{device: device} do - import ExUnit.CaptureLog + test "successfully completes discovery with proper mocks", %{device: device} do # Mock SNMP responses (test_connection + system_info = 7 calls) expect(SnmpMock, :get, 7, fn _target, oid, _opts -> case oid do @@ -98,13 +97,11 @@ defmodule Towerops.Workers.DiscoveryWorkerTest do # Allow any number of walk calls (interface + neighbor discovery) stub(SnmpMock, :walk, fn _target, _oid, _opts -> {:ok, []} end) - log = - capture_log([level: :info], fn -> - DiscoveryWorker.perform(device.id) - end) + assert :ok = DiscoveryWorker.perform(device.id) - assert log =~ "Starting SNMP discovery for device #{device.id}" - assert log =~ "SNMP discovery completed successfully for device #{device.id}" + # Verify SNMP device was created + snmp_device = Snmp.get_device(device.id) + assert snmp_device end test "logs error when discovery fails", %{device: device} do diff --git a/test/towerops/workers/monitor_worker_test.exs b/test/towerops/workers/monitor_worker_test.exs index bfdcab82..b2136fbe 100644 --- a/test/towerops/workers/monitor_worker_test.exs +++ b/test/towerops/workers/monitor_worker_test.exs @@ -112,30 +112,27 @@ defmodule Towerops.Workers.MonitorWorkerTest do assert check.response_time_ms == nil end - test "logs appropriate messages", %{device: device} do - import ExUnit.CaptureLog + test "successfully completes monitoring check", %{device: device} do + assert :ok = MonitorWorker.perform(device.id) - log = - capture_log([level: :info], fn -> - MonitorWorker.perform(device.id) - end) + # Verify a check was created + checks = Monitoring.list_devices_checks(device.id, 10) + assert length(checks) >= 1 - assert log =~ "Starting monitoring check for device #{device.id}" - # Will either log "is up" or "is down" depending on ping result - assert log =~ device.id + check = hd(checks) + assert check.device_id == device.id + assert check.status in [:success, :failure] + assert check.checked_at end - test "logs debug when monitoring is disabled", %{device: device} do - import ExUnit.CaptureLog - + test "correctly skips monitoring when disabled", %{device: device} do {:ok, device} = Towerops.Devices.update_device(device, %{monitoring_enabled: false}) - log = - capture_log([level: :debug], fn -> - MonitorWorker.perform(device.id) - end) + assert :ok = MonitorWorker.perform(device.id) - assert log =~ "Device #{device.id} does not have monitoring enabled" + # Verify no check was created + checks = Monitoring.list_devices_checks(device.id, 10) + assert length(checks) == 0 end end end diff --git a/test/towerops/workers/poll_worker_test.exs b/test/towerops/workers/poll_worker_test.exs index 6d26c713..1e98b052 100644 --- a/test/towerops/workers/poll_worker_test.exs +++ b/test/towerops/workers/poll_worker_test.exs @@ -139,11 +139,17 @@ defmodule Towerops.Workers.PollWorkerTest do # Mock neighbor discovery - empty stub(SnmpMock, :walk, fn _target, _oid, _opts -> {:ok, []} end) - PollWorker.perform(device.id) + result = PollWorker.perform(device.id) + assert result == :ok + + # Verify SNMP device exists and has sensors + snmp_device = Snmp.get_device_with_associations(device.id) + assert snmp_device + assert length(snmp_device.sensors) >= 1 # Verify error reading was created readings = Snmp.get_sensor_readings(sensor.id, limit: 10) - assert length(readings) >= 1 + assert length(readings) >= 1, "Expected at least 1 sensor reading but got #{length(readings)}" reading = hd(readings) assert reading.status == "error" assert reading.value == nil @@ -248,20 +254,18 @@ defmodule Towerops.Workers.PollWorkerTest do PollWorker.perform(device.id) end - test "logs appropriate messages", %{device: device} do - import ExUnit.CaptureLog - + test "successfully completes poll with proper mocks", %{device: device, sensor: sensor} do # Mock sensor + interface stats (allow any number of calls) stub(SnmpMock, :get, fn _target, _oid, _opts -> {:ok, 100} end) stub(SnmpMock, :walk, fn _target, _oid, _opts -> {:ok, []} end) - log = - capture_log([level: :info], fn -> - PollWorker.perform(device.id) - end) + assert :ok = PollWorker.perform(device.id) - assert log =~ "Starting SNMP poll for device #{device.id}" - assert log =~ "SNMP poll completed for device #{device.id}" + # Verify sensor was polled and value updated + sensor = Towerops.Repo.reload(sensor) + # 100 / 10 + assert sensor.last_value == 10.0 + assert sensor.last_checked_at end end end