Stabilize TLS listener reload e2e
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 1s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 1s

This commit is contained in:
2026-03-17 04:12:42 +01:00
parent 4d169c23ae
commit 35c8d50db0

View File

@@ -70,19 +70,27 @@ defmodule Parrhesia.Web.TLSE2ETest do
5_000 5_000
) )
first_fingerprint = server_cert_fingerprint(port) expected_first_fingerprint = TLSCerts.cert_sha256!(server_a.certfile)
assert first_fingerprint == TLSCerts.cert_sha256!(server_a.certfile)
assert_eventually(
fn ->
server_cert_fingerprint(port) == {:ok, expected_first_fingerprint}
end,
5_000
)
File.cp!(server_b.certfile, active_certfile) File.cp!(server_b.certfile, active_certfile)
File.cp!(server_b.keyfile, active_keyfile) File.cp!(server_b.keyfile, active_keyfile)
assert :ok = Endpoint.reload_listener(endpoint_name, listener_id) assert :ok = Endpoint.reload_listener(endpoint_name, listener_id)
expected_reloaded_fingerprint = TLSCerts.cert_sha256!(server_b.certfile)
assert_eventually( assert_eventually(
fn -> fn ->
server_cert_fingerprint(port) == TLSCerts.cert_sha256!(server_b.certfile) server_cert_fingerprint(port) == {:ok, expected_reloaded_fingerprint}
end, end,
30_000 10_000
) )
end end
@@ -275,18 +283,30 @@ defmodule Parrhesia.Web.TLSE2ETest do
end end
defp server_cert_fingerprint(port) do defp server_cert_fingerprint(port) do
{:ok, socket} = case :ssl.connect(
:ssl.connect( ~c"127.0.0.1",
~c"127.0.0.1", port,
port, [
[verify: :verify_none, active: false, server_name_indication: ~c"localhost"], verify: :verify_none,
5_000 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)
end
{:ok, cert_der} = :ssl.peercert(socket) {:error, _reason} = error ->
:ok = :ssl.close(socket) error
end
Base.encode64(:crypto.hash(:sha256, cert_der))
end end
defp ca_certs(certfile) do defp ca_certs(certfile) do