From 4d169c23ae6658adec5b8a6f9b25e9ea06c3db80 Mon Sep 17 00:00:00 2001 From: Steffen Beyer Date: Tue, 17 Mar 2026 03:55:49 +0100 Subject: [PATCH] Harden CI-sensitive integration tests --- test/parrhesia/api/stream_test.exs | 22 ++++++++++++++++ test/parrhesia/sync/worker_test.exs | 35 +++++++++++++++++++------- test/parrhesia/web/connection_test.exs | 22 ++++++++++++++++ test/parrhesia/web/tls_e2e_test.exs | 2 +- 4 files changed, 71 insertions(+), 10 deletions(-) diff --git a/test/parrhesia/api/stream_test.exs b/test/parrhesia/api/stream_test.exs index d41efcf..941686b 100644 --- a/test/parrhesia/api/stream_test.exs +++ b/test/parrhesia/api/stream_test.exs @@ -9,6 +9,8 @@ defmodule Parrhesia.API.StreamTest do alias Parrhesia.Repo setup do + ensure_repo_started() + ensure_stream_runtime_started() :ok = Sandbox.checkout(Repo) :ok end @@ -77,4 +79,24 @@ defmodule Parrhesia.API.StreamTest do defp recalculate_event_id(event) do Map.put(event, "id", EventValidator.compute_id(event)) end + + defp ensure_stream_runtime_started do + if is_nil(Process.whereis(Parrhesia.API.Stream.Supervisor)) do + case start_supervised({Parrhesia.Subscriptions.Supervisor, []}) do + {:ok, _pid} -> :ok + {:error, {:already_started, _pid}} -> :ok + end + else + :ok + end + end + + defp ensure_repo_started do + if is_nil(Process.whereis(Repo)) do + _ = start_supervised(Repo) + :ok + else + :ok + end + end end diff --git a/test/parrhesia/sync/worker_test.exs b/test/parrhesia/sync/worker_test.exs index 022f7c8..72f01dd 100644 --- a/test/parrhesia/sync/worker_test.exs +++ b/test/parrhesia/sync/worker_test.exs @@ -157,15 +157,32 @@ defmodule Parrhesia.Sync.WorkerTest do worker_supervisor = unique_name("SyncWorkerSupervisor") supervisor_name = unique_name("SyncSupervisor") - start_supervised!( - {Supervisor, - name: supervisor_name, - manager: manager_name, - worker_registry: worker_registry, - worker_supervisor: worker_supervisor, - path: unique_sync_path(), - start_workers?: true} - ) + supervisor_pid = + start_supervised!( + {Supervisor, + name: supervisor_name, + manager: manager_name, + worker_registry: worker_registry, + worker_supervisor: worker_supervisor, + path: unique_sync_path(), + start_workers?: true} + ) + + on_exit(fn -> + ref = Process.monitor(supervisor_pid) + + try do + _ = GenServer.stop(supervisor_pid, :normal) + catch + :exit, _reason -> :ok + end + + receive do + {:DOWN, ^ref, :process, ^supervisor_pid, _reason} -> :ok + after + 1_000 -> :ok + end + end) {manager_name, supervisor_name} end diff --git a/test/parrhesia/web/connection_test.exs b/test/parrhesia/web/connection_test.exs index ec153b6..a87520e 100644 --- a/test/parrhesia/web/connection_test.exs +++ b/test/parrhesia/web/connection_test.exs @@ -12,6 +12,8 @@ defmodule Parrhesia.Web.ConnectionTest do alias Parrhesia.Web.Connection setup do + ensure_repo_started() + ensure_stream_runtime_started() :ok = Sandbox.checkout(Repo) :ok end @@ -874,6 +876,26 @@ defmodule Parrhesia.Web.ConnectionTest do state end + defp ensure_stream_runtime_started do + if is_nil(Process.whereis(Parrhesia.API.Stream.Supervisor)) do + case start_supervised({Parrhesia.Subscriptions.Supervisor, []}) do + {:ok, _pid} -> :ok + {:error, {:already_started, _pid}} -> :ok + end + else + :ok + end + end + + defp ensure_repo_started do + if is_nil(Process.whereis(Repo)) do + _ = start_supervised(Repo) + :ok + else + :ok + end + end + defp listener(overrides) do base = %{ id: :test, diff --git a/test/parrhesia/web/tls_e2e_test.exs b/test/parrhesia/web/tls_e2e_test.exs index 4d02f6f..3df00c2 100644 --- a/test/parrhesia/web/tls_e2e_test.exs +++ b/test/parrhesia/web/tls_e2e_test.exs @@ -82,7 +82,7 @@ defmodule Parrhesia.Web.TLSE2ETest do fn -> server_cert_fingerprint(port) == TLSCerts.cert_sha256!(server_b.certfile) end, - 10_000 + 30_000 ) end