Add Aprsme.Is tests for send_message live branch, init disable_connection branch, and start_link
This commit is contained in:
parent
02d435557a
commit
e2c0b00238
1 changed files with 68 additions and 0 deletions
|
|
@ -201,6 +201,74 @@ defmodule Aprsme.IsTest do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "send_message/1 when GenServer is running" do
|
||||||
|
test "calls into the live process" do
|
||||||
|
# Spawn a tiny GenServer registered as Aprsme.Is so send_message/1 hits
|
||||||
|
# the `_pid -> GenServer.call(__MODULE__, ...)` branch.
|
||||||
|
original = Process.whereis(Aprsme.Is)
|
||||||
|
if original, do: :erlang.unregister(Aprsme.Is)
|
||||||
|
|
||||||
|
{:ok, fake_pid} =
|
||||||
|
GenServer.start(__MODULE__.FakeIs, :ok)
|
||||||
|
|
||||||
|
Process.register(fake_pid, Aprsme.Is)
|
||||||
|
|
||||||
|
try do
|
||||||
|
# The fake responds with :ok to {:send_message, _} calls.
|
||||||
|
assert Aprsme.Is.send_message("hello") == :ok
|
||||||
|
after
|
||||||
|
if Process.whereis(Aprsme.Is) == fake_pid, do: :erlang.unregister(Aprsme.Is)
|
||||||
|
if original && !Process.whereis(Aprsme.Is), do: Process.register(original, Aprsme.Is)
|
||||||
|
if Process.alive?(fake_pid), do: GenServer.stop(fake_pid)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defmodule FakeIs do
|
||||||
|
@moduledoc false
|
||||||
|
use GenServer
|
||||||
|
|
||||||
|
def init(state), do: {:ok, state}
|
||||||
|
def handle_call({:send_message, _msg}, _from, state), do: {:reply, :ok, state}
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "init/1 disable_connection branch in non-test env" do
|
||||||
|
test "init with non-test env + disable_connection=true returns {:stop, :test_environment_disabled}" do
|
||||||
|
original_env = Application.get_env(:aprsme, :env)
|
||||||
|
original_disable = Application.get_env(:aprsme, :disable_aprs_connection)
|
||||||
|
|
||||||
|
try do
|
||||||
|
Application.put_env(:aprsme, :env, :prod)
|
||||||
|
Application.put_env(:aprsme, :disable_aprs_connection, true)
|
||||||
|
|
||||||
|
# Hits do_init(:prod, true) — line 60 Logger.warning + {:stop, _}.
|
||||||
|
assert {:stop, :test_environment_disabled} = Aprsme.Is.init([])
|
||||||
|
after
|
||||||
|
Application.put_env(:aprsme, :env, original_env)
|
||||||
|
Application.put_env(:aprsme, :disable_aprs_connection, original_disable)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "start_link/1 in test env" do
|
||||||
|
test "starts and immediately returns an error due to {:stop, _} from init" do
|
||||||
|
# The GenServer link will exit when init returns {:stop, _}, so we run
|
||||||
|
# it in a temporarily trap-exit task to avoid taking down the test pid.
|
||||||
|
Process.flag(:trap_exit, true)
|
||||||
|
|
||||||
|
try do
|
||||||
|
result = Aprsme.Is.start_link([])
|
||||||
|
|
||||||
|
assert match?({:error, :test_environment_disabled}, result) or
|
||||||
|
match?({:error, _}, result)
|
||||||
|
catch
|
||||||
|
:exit, _ -> :ok
|
||||||
|
after
|
||||||
|
Process.flag(:trap_exit, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "handle_info(:aprsme_no_message_timeout, ...)" do
|
describe "handle_info(:aprsme_no_message_timeout, ...)" do
|
||||||
test "ignores timeout when socket is nil" do
|
test "ignores timeout when socket is nil" do
|
||||||
state = build_state(%{socket: nil})
|
state = build_state(%{socket: nil})
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue