Add tests
This commit is contained in:
		
							parent
							
								
									bb05e5fad8
								
							
						
					
					
						commit
						548ef87bc4
					
				@ -28,4 +28,5 @@ config :chronoscope,
 | 
				
			|||||||
  registry: Chronoscope.RegistryMock,
 | 
					  registry: Chronoscope.RegistryMock,
 | 
				
			||||||
  gen_server: Chronoscope.GenServerMock,
 | 
					  gen_server: Chronoscope.GenServerMock,
 | 
				
			||||||
  nts: Chronoscope.NTSMock,
 | 
					  nts: Chronoscope.NTSMock,
 | 
				
			||||||
  gemini: Chronoscope.GeminiMock
 | 
					  gemini: Chronoscope.GeminiMock,
 | 
				
			||||||
 | 
					  endpoint: Chronoscope.EndpointMock
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,6 @@ defmodule Chronoscope.NTS.Client do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  alias Chronoscope.NTS
 | 
					  alias Chronoscope.NTS
 | 
				
			||||||
  alias Chronoscope.NTS.KeyEstablishmentClient
 | 
					  alias Chronoscope.NTS.KeyEstablishmentClient
 | 
				
			||||||
  alias ChronoscopeWeb.Endpoint
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @interval_in_seconds 30
 | 
					  @interval_in_seconds 30
 | 
				
			||||||
  @timeout_in_milliseconds 10_000
 | 
					  @timeout_in_milliseconds 10_000
 | 
				
			||||||
@ -11,6 +10,7 @@ defmodule Chronoscope.NTS.Client do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  @topic Application.compile_env(:chronoscope, :nts_topic)
 | 
					  @topic Application.compile_env(:chronoscope, :nts_topic)
 | 
				
			||||||
  @date_time Application.compile_env(:chronoscope, :date_time, DateTime)
 | 
					  @date_time Application.compile_env(:chronoscope, :date_time, DateTime)
 | 
				
			||||||
 | 
					  @endpoint Application.compile_env(:chronoscope, :endpoint, ChronoscopeWeb.Endpoint)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def start_link(server: server, name: name) do
 | 
					  def start_link(server: server, name: name) do
 | 
				
			||||||
    GenServer.start_link(__MODULE__, server, name: name)
 | 
					    GenServer.start_link(__MODULE__, server, name: name)
 | 
				
			||||||
@ -18,7 +18,7 @@ defmodule Chronoscope.NTS.Client do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  @impl true
 | 
					  @impl true
 | 
				
			||||||
  def init(server) do
 | 
					  def init(server) do
 | 
				
			||||||
    Endpoint.broadcast(@topic, "initializing", server)
 | 
					    @endpoint.broadcast(@topic, "initializing", server)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {:ok,
 | 
					    {:ok,
 | 
				
			||||||
     %{
 | 
					     %{
 | 
				
			||||||
@ -54,7 +54,7 @@ defmodule Chronoscope.NTS.Client do
 | 
				
			|||||||
  @impl true
 | 
					  @impl true
 | 
				
			||||||
  def handle_call(:cancel_auto_refresh, _from, %{timer: timer} = state) do
 | 
					  def handle_call(:cancel_auto_refresh, _from, %{timer: timer} = state) do
 | 
				
			||||||
    :timer.cancel(timer)
 | 
					    :timer.cancel(timer)
 | 
				
			||||||
    Endpoint.broadcast(@topic, "cancel-auto-refresh", state.server)
 | 
					    @endpoint.broadcast(@topic, "cancel-auto-refresh", state.server)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {:reply, :ok, Map.delete(state, :timer)}
 | 
					    {:reply, :ok, Map.delete(state, :timer)}
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
@ -82,7 +82,7 @@ defmodule Chronoscope.NTS.Client do
 | 
				
			|||||||
    if interval_surpassed?(now, state.last_key_establishment) do
 | 
					    if interval_surpassed?(now, state.last_key_establishment) do
 | 
				
			||||||
      state
 | 
					      state
 | 
				
			||||||
      |> Map.merge(current_data(state, now))
 | 
					      |> Map.merge(current_data(state, now))
 | 
				
			||||||
      |> tap(&Endpoint.broadcast(@topic, "key-exchange", Map.delete(&1, :timer)))
 | 
					      |> tap(&@endpoint.broadcast(@topic, "key-establishment", Map.delete(&1, :timer)))
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      state
 | 
					      state
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
				
			|||||||
@ -15,7 +15,7 @@ defmodule ChronoscopeWeb.IndexLive do
 | 
				
			|||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @impl true
 | 
					  @impl true
 | 
				
			||||||
  def handle_info(%{topic: @topic, event: "key-exchange", payload: client}, socket) do
 | 
					  def handle_info(%{topic: @topic, event: "key-establishment", payload: client}, socket) do
 | 
				
			||||||
    if client.server in socket.assigns.servers do
 | 
					    if client.server in socket.assigns.servers do
 | 
				
			||||||
      {:noreply, update(socket, :clients, &update_client(&1, client))}
 | 
					      {:noreply, update(socket, :clients, &update_client(&1, client))}
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ defmodule Chronoscope.NTS.ClientTest do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  alias Chronoscope.Certificate
 | 
					  alias Chronoscope.Certificate
 | 
				
			||||||
  alias Chronoscope.DateTimeMock
 | 
					  alias Chronoscope.DateTimeMock
 | 
				
			||||||
 | 
					  alias Chronoscope.EndpointMock
 | 
				
			||||||
  alias Chronoscope.NTS.Client
 | 
					  alias Chronoscope.NTS.Client
 | 
				
			||||||
  alias Chronoscope.SSLMock
 | 
					  alias Chronoscope.SSLMock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -19,6 +20,9 @@ defmodule Chronoscope.NTS.ClientTest do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  describe "Chronoscope.NTS.Client.init()" do
 | 
					  describe "Chronoscope.NTS.Client.init()" do
 | 
				
			||||||
    test "initializes successfully" 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}) ==
 | 
					      assert Client.init(%{host: "localhost", port: 3333}) ==
 | 
				
			||||||
               {:ok,
 | 
					               {:ok,
 | 
				
			||||||
                %{
 | 
					                %{
 | 
				
			||||||
@ -48,6 +52,9 @@ defmodule Chronoscope.NTS.ClientTest do
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test ":cancel_auto_refresh" do
 | 
					    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}}
 | 
					      assert Client.handle_call(:cancel_auto_refresh, nil, %{server: true, timer: true}) == {:reply, :ok, %{server: true}}
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -79,6 +86,9 @@ defmodule Chronoscope.NTS.ClientTest do
 | 
				
			|||||||
      |> expect(:peercert, fn :socket -> {:ok, peercert} end)
 | 
					      |> expect(:peercert, fn :socket -> {:ok, peercert} end)
 | 
				
			||||||
      |> expect(:close, fn :socket -> :ok end)
 | 
					      |> expect(:close, fn :socket -> :ok end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      EndpointMock
 | 
				
			||||||
 | 
					      |> expect(:broadcast, fn "nts-servers", "key-establishment", _ -> :ok end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      assert {:reply, {:ok, %{cert_expiration: ^peercert_expiration}},
 | 
					      assert {:reply, {:ok, %{cert_expiration: ^peercert_expiration}},
 | 
				
			||||||
              %{
 | 
					              %{
 | 
				
			||||||
                server: %{host: "localhost", port: 3333},
 | 
					                server: %{host: "localhost", port: 3333},
 | 
				
			||||||
 | 
				
			|||||||
@ -22,3 +22,7 @@ defmodule Chronoscope.GenServer.Behaviour do
 | 
				
			|||||||
  @callback call(pid(), any(), any()) :: any()
 | 
					  @callback call(pid(), any(), any()) :: any()
 | 
				
			||||||
  @callback call(pid(), any()) :: any()
 | 
					  @callback call(pid(), any()) :: any()
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					defmodule ChronoscopeWeb.Endpoint.Behaviour do
 | 
				
			||||||
 | 
					  @callback broadcast(any(), any(), any()) :: any()
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -5,3 +5,4 @@ Mox.defmock(Chronoscope.DynamicSupervisorMock, for: Chronoscope.DynamicSuperviso
 | 
				
			|||||||
Mox.defmock(Chronoscope.GenServerMock, for: Chronoscope.GenServer.Behaviour)
 | 
					Mox.defmock(Chronoscope.GenServerMock, for: Chronoscope.GenServer.Behaviour)
 | 
				
			||||||
Mox.defmock(Chronoscope.NTSMock, for: Chronoscope.NTS.Behaviour)
 | 
					Mox.defmock(Chronoscope.NTSMock, for: Chronoscope.NTS.Behaviour)
 | 
				
			||||||
Mox.defmock(Chronoscope.GeminiMock, for: Chronoscope.Gemini.Behaviour)
 | 
					Mox.defmock(Chronoscope.GeminiMock, for: Chronoscope.Gemini.Behaviour)
 | 
				
			||||||
 | 
					Mox.defmock(Chronoscope.EndpointMock, for: ChronoscopeWeb.Endpoint.Behaviour)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user