chronoscope/test/chronoscope/nts/client_test.exs
2024-07-26 09:29:42 -04:00

106 lines
3.7 KiB
Elixir

defmodule Chronoscope.NTS.ClientTest do
use Chronoscope.Case, async: true
alias Chronoscope.Certificate
alias Chronoscope.DateTimeMock
alias Chronoscope.EndpointMock
alias Chronoscope.NTS.Client
alias Chronoscope.SSLMock
import Mox
setup :verify_on_exit!
setup _tags do
DateTimeMock
|> stub(:utc_now, fn -> ~U[2024-03-31 01:23:45Z] end)
:ok
end
describe "Chronoscope.NTS.Client.init()" do
test "initializes successfully" do
EndpointMock
|> expect(:broadcast, fn "nts-servers", "initializing", %{host: "localhost", port: 3333} -> :ok end)
assert Client.init(%{host: "localhost", port: 3333}) ==
{:ok,
%{
server: %{host: "localhost", port: 3333},
key_establishment_response: {:error, "initializing"},
last_key_establishment: ~U[2024-03-31 01:23:15Z]
}}
end
end
describe "Chronoscope.NTS.Client.handle_call()" do
test ":terminate" do
assert Client.handle_call(:terminate, nil, %{state: true}) == {:stop, :normal, self(), %{state: true}}
end
test ":list" do
assert Client.handle_call(:list, nil, %{state: true}) == {:reply, %{state: true}, %{state: true}}
end
test ":auto_refresh" do
assert {:reply, :ok, %{server: true, timer: _timer}} = Client.handle_call(:auto_refresh, nil, %{server: true})
end
test ":auto_refresh - already activated" do
assert Client.handle_call(:auto_refresh, nil, %{server: true, timer: true}) ==
{:reply, :already_started, %{server: true, timer: true}}
end
test ":cancel_auto_refresh" do
EndpointMock
|> expect(:broadcast, fn "nts-servers", "cancel-auto-refresh", _ -> :ok end)
assert Client.handle_call(:cancel_auto_refresh, nil, %{server: true, timer: true}) == {:reply, :ok, %{server: true}}
end
test ":cancel_auto_refresh - already cancelled" do
assert Client.handle_call(:cancel_auto_refresh, nil, %{server: true}) == {:reply, :already_cancelled, %{server: true}}
end
test ":key_establishment - cached" do
assert Client.handle_call(:key_establishment, nil, %{
server: %{host: "localhost", port: 3333},
key_establishment_response: {:error, "initializing"},
last_key_establishment: ~U[2024-03-31 01:23:45Z]
}) ==
{:reply, {:error, "initializing"},
%{
server: %{host: "localhost", port: 3333},
key_establishment_response: {:error, "initializing"},
last_key_establishment: ~U[2024-03-31 01:23:45Z]
}}
end
test ":key_establishment - not cached" do
peercert = peercert()
peercert_expiration = Certificate.expiration_date(peercert)
SSLMock
|> expect(:connect, fn ~c"localhost", 3333, _, _ -> {:ok, :socket} end)
|> expect(:send, fn :socket, _ -> send_ssl_response([]) end)
|> expect(:peercert, fn :socket -> {:ok, peercert} end)
|> expect(:close, fn :socket -> :ok end)
EndpointMock
|> expect(:broadcast, fn "nts-servers", "key-establishment", _ -> :ok end)
assert {:reply, {:ok, %{cert_expiration: ^peercert_expiration}},
%{
server: %{host: "localhost", port: 3333},
key_establishment_response: {:ok, %{cert_expiration: ^peercert_expiration}},
last_key_establishment: ~U[2024-03-31 01:23:45Z]
}} =
Client.handle_call(:key_establishment, nil, %{
server: %{host: "localhost", port: 3333},
key_establishment_response: {:error, "initializing"},
last_key_establishment: ~U[2024-03-31 01:23:00Z]
})
end
end
end