test: add reliability test for Task.yield_many race condition fix
This commit is contained in:
parent
1d1a686634
commit
cf412e2261
1 changed files with 44 additions and 0 deletions
|
|
@ -616,4 +616,48 @@ defmodule Towerops.Workers.DevicePollerWorkerTest do
|
|||
assert job.max_attempts == 1
|
||||
end
|
||||
end
|
||||
|
||||
describe "reliability fixes - Task.yield_many race condition" do
|
||||
import ExUnit.CaptureLog
|
||||
import Oban.Testing
|
||||
|
||||
test "handles Task.yield_many result count mismatch gracefully", %{site: site} do
|
||||
# This test verifies the fix for the race condition where Task.yield_many
|
||||
# can return fewer results than tasks if any crash or timeout.
|
||||
# The fix adds length validation and error logging.
|
||||
|
||||
{:ok, device} =
|
||||
Devices.create_device(%{
|
||||
name: "Race Condition Test",
|
||||
ip_address: "192.168.1.250",
|
||||
site_id: site.id,
|
||||
organization_id: site.organization_id,
|
||||
snmp_enabled: true
|
||||
})
|
||||
|
||||
# Create SNMP device
|
||||
{:ok, snmp_device} =
|
||||
Repo.insert(%Device{
|
||||
device_id: device.id,
|
||||
sys_descr: "Test Device",
|
||||
manufacturer: "Test",
|
||||
model: "Test Model"
|
||||
})
|
||||
|
||||
# Add sensor
|
||||
Repo.insert!(%Sensor{
|
||||
snmp_device_id: snmp_device.id,
|
||||
sensor_index: "1",
|
||||
sensor_descr: "Test Sensor",
|
||||
sensor_type: "temperature",
|
||||
sensor_oid: ".1.3.6.1.4.1.9.9.13.1.3.1.3.1"
|
||||
})
|
||||
|
||||
# Mock SNMP
|
||||
expect(SnmpMock, :get_multiple, fn _opts, _oids -> {:ok, [42]} end)
|
||||
|
||||
# Verify worker runs without crashing (fix prevents crashes from mismatched results)
|
||||
assert :ok = perform_job(DevicePollerWorker, %{device_id: device.id})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue