Stabilize TLS and sync worker tests
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 0s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 0s

This commit is contained in:
2026-03-17 12:17:29 +01:00
parent f4d94c9fcb
commit 101ded43cb
2 changed files with 47 additions and 26 deletions

View File

@@ -51,7 +51,7 @@ defmodule Parrhesia.Sync.WorkerTest do
match: %{"kinds" => [5000], "#r" => ["tribes.accounts.user"]}
})
{manager_name, _supervisor_name} = start_sync_runtime()
{manager_name, _supervisor_name, _worker_supervisor} = start_sync_runtime()
assert {:ok, _server} =
Sync.put_server(
@@ -109,7 +109,7 @@ defmodule Parrhesia.Sync.WorkerTest do
relay_url = "ws://127.0.0.1:#{port}/relay"
wait_for_relay(relay_url, String.duplicate("d", 64))
{manager_name, _supervisor_name} = start_sync_runtime()
{manager_name, _supervisor_name, _worker_supervisor} = start_sync_runtime()
assert {:ok, _server} =
Sync.put_server(
@@ -156,6 +156,8 @@ defmodule Parrhesia.Sync.WorkerTest do
)
on_exit(fn ->
stop_sync_workers(manager_name, worker_supervisor)
ref = Process.monitor(supervisor_pid)
try do
@@ -167,11 +169,30 @@ defmodule Parrhesia.Sync.WorkerTest do
receive do
{:DOWN, ^ref, :process, ^supervisor_pid, _reason} -> :ok
after
1_000 -> :ok
5_000 -> :ok
end
end)
{manager_name, supervisor_name}
{manager_name, supervisor_name, worker_supervisor}
end
defp stop_sync_workers(manager_name, worker_supervisor) do
with manager_pid when is_pid(manager_pid) <- Process.whereis(manager_name),
{:ok, servers} <- Sync.list_servers(manager: manager_name) do
Enum.each(servers, fn server ->
_ = Sync.stop_server(server.id, manager: manager_name)
end)
end
case Process.whereis(worker_supervisor) do
pid when is_pid(pid) ->
assert_eventually(fn ->
DynamicSupervisor.which_children(worker_supervisor) == []
end)
nil ->
:ok
end
end
defp assert_event_synced(event, remote_pubkey) do

View File

@@ -84,7 +84,7 @@ defmodule Parrhesia.Web.TLSE2ETest do
fn ->
server_cert_fingerprint(port) == {:ok, expected_reloaded_fingerprint}
end,
10_000
15_000
)
end
@@ -277,29 +277,29 @@ defmodule Parrhesia.Web.TLSE2ETest do
end
defp server_cert_fingerprint(port) do
case :ssl.connect(
~c"127.0.0.1",
port,
[
verify: :verify_none,
active: false,
reuse_sessions: false,
server_name_indication: ~c"localhost"
],
5_000
) do
{:ok, socket} ->
try do
case :ssl.peercert(socket) do
{:ok, cert_der} -> {:ok, Base.encode64(:crypto.hash(:sha256, cert_der))}
{:error, _reason} = error -> error
end
after
:ok = :ssl.close(socket)
command =
"printf '' | /usr/bin/openssl s_client -connect 127.0.0.1:#{port} -servername localhost -showcerts"
case System.cmd("/bin/sh", ["-c", command], stderr_to_stdout: true) do
{output, 0} ->
with {:ok, pem_entry} <- first_certificate_pem(output),
[entry | _rest] <- :public_key.pem_decode(pem_entry),
cert_der <- elem(entry, 1) do
{:ok, Base.encode64(:crypto.hash(:sha256, cert_der))}
else
[] -> {:error, :missing_certificate}
{:error, _reason} = error -> error
end
{:error, _reason} = error ->
error
{output, status} ->
{:error, {:openssl_failed, status, output}}
end
end
defp first_certificate_pem(output) do
case Regex.run(~r/-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----/ms, output) do
[pem] -> {:ok, pem}
_other -> {:error, :missing_certificate}
end
end