From 54c3e9fd5ec35b6e9446c4ccfdea5636d6ad6b94 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Fri, 24 Apr 2026 08:34:53 -0500 Subject: [PATCH] test: DatabaseMetrics pool-not-registered path --- .../telemetry/database_metrics_test.exs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/aprsme/telemetry/database_metrics_test.exs b/test/aprsme/telemetry/database_metrics_test.exs index 52f4b81..b6099fd 100644 --- a/test/aprsme/telemetry/database_metrics_test.exs +++ b/test/aprsme/telemetry/database_metrics_test.exs @@ -57,6 +57,34 @@ defmodule Aprsme.Telemetry.DatabaseMetricsTest do end end + describe "collect_db_pool_metrics/0 when Repo is not running" do + test "emits unavailable metrics when no Repo is registered" do + # Stop the Repo for this test — we need to restart it afterward to avoid + # breaking downstream tests. + repo_pid = Process.whereis(Aprsme.Repo) + + if repo_pid do + # Temporarily unregister without stopping to avoid disrupting other tests. + :erlang.unregister(Aprsme.Repo) + + on_exit(fn -> + if !Process.whereis(Aprsme.Repo) do + true = Process.register(repo_pid, Aprsme.Repo) + end + end) + end + + attach_collector([:aprsme, :repo, :pool]) + DatabaseMetrics.collect_db_pool_metrics() + + assert_receive {:telemetry, [:aprsme, :repo, :pool], measurements, _}, 1_000 + # The "unavailable" helper reports mostly zeros. + assert measurements.size == Application.get_env(:aprsme, Aprsme.Repo)[:pool_size] || 10 + assert measurements.idle == 0 + assert measurements.busy == 0 + end + end + describe "collect_postgres_metrics/0 outside :test env" do test "emits database, connections, packets_table and query_stats telemetry events" do original = Application.get_env(:aprsme, :env)