Stabilize TLS and sync worker tests
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user