From 1e072c75e46f31cbae04b56d0dffd47aeab7e303 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Fri, 6 Mar 2026 08:11:32 -0600 Subject: [PATCH] perf(tests): reduce assert/refute timeouts for faster tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reduce various test timeouts that were unnecessarily long: - assert_push timeouts: 150ms → 75ms (6 tests in agent_channel_test) - refute_receive timeouts: 200ms → 50ms (3 tests in worker tests) With 50ms channel debounce, 75ms is sufficient for assert_push. For refute_receive (expecting no message), 50ms is plenty. Estimated savings: ~600ms across affected tests --- .../workers/agent_latency_evaluator_test.exs | 2 +- .../workers/cloud_latency_probe_worker_test.exs | 4 ++-- test/towerops_web/channels/agent_channel_test.exs | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/test/towerops/workers/agent_latency_evaluator_test.exs b/test/towerops/workers/agent_latency_evaluator_test.exs index 8d681610..62309eba 100644 --- a/test/towerops/workers/agent_latency_evaluator_test.exs +++ b/test/towerops/workers/agent_latency_evaluator_test.exs @@ -631,7 +631,7 @@ defmodule Towerops.Workers.AgentLatencyEvaluatorTest do assert :ok = AgentLatencyEvaluator.perform(%Oban.Job{args: %{}}) # Local agents should not trigger reassignment - refute_receive {:device_reassigned, _}, 200 + refute_receive {:latency_probe_jobs, _}, 50 end end diff --git a/test/towerops/workers/cloud_latency_probe_worker_test.exs b/test/towerops/workers/cloud_latency_probe_worker_test.exs index e2b34d46..bcda1f40 100644 --- a/test/towerops/workers/cloud_latency_probe_worker_test.exs +++ b/test/towerops/workers/cloud_latency_probe_worker_test.exs @@ -76,7 +76,7 @@ defmodule Towerops.Workers.CloudLatencyProbeWorkerTest do assert :ok == CloudLatencyProbeWorker.perform(%Oban.Job{}) # Should not receive any probe jobs - refute_receive {:latency_probe_jobs, _}, 200 + refute_receive {:latency_probe_jobs, _}, 50 end test "skips devices assigned to local agents" do @@ -110,7 +110,7 @@ defmodule Towerops.Workers.CloudLatencyProbeWorkerTest do assert :ok == CloudLatencyProbeWorker.perform(%Oban.Job{}) - refute_receive {:latency_probe_jobs, _}, 200 + refute_receive {:latency_probe_jobs, _}, 50 end end end diff --git a/test/towerops_web/channels/agent_channel_test.exs b/test/towerops_web/channels/agent_channel_test.exs index 141dfe10..7df98cef 100644 --- a/test/towerops_web/channels/agent_channel_test.exs +++ b/test/towerops_web/channels/agent_channel_test.exs @@ -533,7 +533,7 @@ defmodule ToweropsWeb.AgentChannelTest do send(socket.channel_pid, {:assignments_changed, :assigned}) # Jobs push should come after debounce delay (50ms in test) - assert_push "jobs", %{binary: _jobs_binary}, 150 + assert_push "jobs", %{binary: _jobs_binary}, 75 end test "debounces rapid assignment changes", %{socket: socket} do @@ -543,7 +543,7 @@ defmodule ToweropsWeb.AgentChannelTest do send(socket.channel_pid, {:assignments_changed, :assigned}) # Should only get one push (debounced) - 50ms debounce in test - assert_push "jobs", %{binary: _}, 150 + assert_push "jobs", %{binary: _}, 75 refute_push "jobs", %{}, 50 end end @@ -1340,7 +1340,7 @@ defmodule ToweropsWeb.AgentChannelTest do ) # Should receive jobs message with 2 devices - assert_push "jobs", %{binary: initial_jobs_binary}, 150 + assert_push "jobs", %{binary: initial_jobs_binary}, 75 {:ok, decoded_initial} = Base.decode64(initial_jobs_binary) initial_job_list = AgentJobList.decode(decoded_initial) initial_device_ids = initial_job_list.jobs |> Enum.map(& &1.device_id) |> Enum.uniq() @@ -1352,7 +1352,7 @@ defmodule ToweropsWeb.AgentChannelTest do {:ok, _deleted} = Towerops.Devices.delete_device(device) # Should receive updated jobs message with only 1 device - assert_push "jobs", %{binary: updated_jobs_binary}, 150 + assert_push "jobs", %{binary: updated_jobs_binary}, 75 {:ok, decoded_updated} = Base.decode64(updated_jobs_binary) updated_job_list = AgentJobList.decode(decoded_updated) updated_device_ids = updated_job_list.jobs |> Enum.map(& &1.device_id) |> Enum.uniq() @@ -1368,7 +1368,7 @@ defmodule ToweropsWeb.AgentChannelTest do {:ok, _deleted} = Towerops.Devices.delete_device(device) # Wait for jobs refresh - assert_push "jobs", _, 150 + assert_push "jobs", _, 75 # Try to send a result for the deleted device result = %SnmpResult{ @@ -1402,7 +1402,7 @@ defmodule ToweropsWeb.AgentChannelTest do end # Should only receive ONE jobs message (debounced) - 50ms debounce in test - assert_push "jobs", %{binary: _jobs_binary}, 150 + assert_push "jobs", %{binary: _jobs_binary}, 75 # Should NOT receive additional jobs messages refute_push "jobs", _, 50