From eeaf9dcdf5ff7ac5b75bf6a2256de4b12ae593ce Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Fri, 24 Apr 2026 08:28:12 -0500 Subject: [PATCH] test: HealthCheck edge cases --- test/aprsme_web/plugs/health_check_test.exs | 39 +++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/test/aprsme_web/plugs/health_check_test.exs b/test/aprsme_web/plugs/health_check_test.exs index 5d4c2b3..f0e06cc 100644 --- a/test/aprsme_web/plugs/health_check_test.exs +++ b/test/aprsme_web/plugs/health_check_test.exs @@ -74,4 +74,43 @@ defmodule AprsmeWeb.Plugs.HealthCheckTest do assert HealthCheck.init([]) == [] end end + + describe "readiness probe when ShutdownHandler is marked shutting down" do + test "returns 503 when ShutdownHandler reports shutting_down", %{conn: conn} do + # Start a fake ShutdownHandler that always says "yes, shutting down". + # Only start if not already running; if running, :sys.replace_state. + original_shutdown_pid = Process.whereis(Aprsme.ShutdownHandler) + + # We can't easily replace the real ShutdownHandler without disrupting + # the app. Instead, exercise the :draining short-circuit via health_status. + original = Application.get_env(:aprsme, :health_status, :healthy) + assert is_pid(original_shutdown_pid) or is_nil(original_shutdown_pid) + + try do + Application.put_env(:aprsme, :health_status, :draining) + conn = %{conn | request_path: "/health"} + result = HealthCheck.call(conn, probe_type: :readiness) + assert result.status == 503 + after + Application.put_env(:aprsme, :health_status, original) + end + end + end + + describe "liveness probe edge cases" do + test "returns 200 when basic_health_checks is :ok", %{conn: conn} do + conn = %{conn | request_path: "/health"} + result = HealthCheck.call(conn, probe_type: :liveness) + assert result.status == 200 + assert result.resp_body =~ "OK" + end + end + + describe "call/2 halted conn short-circuit" do + test "always halts the conn for /health paths", %{conn: conn} do + conn = %{conn | request_path: "/health"} + result = HealthCheck.call(conn, probe_type: :liveness) + assert result.halted + end + end end