Ensure we always close the port
This commit is contained in:
parent
22024701a5
commit
d358007c26
2 changed files with 15 additions and 0 deletions
|
@ -273,6 +273,16 @@ defmodule GenMagic.Server do
|
|||
{:next_state, :starting, %{data | port: nil, cycles: 0}}
|
||||
end
|
||||
|
||||
@doc false
|
||||
@impl :gen_statem
|
||||
def terminate(_, _, %{port: port}) do
|
||||
Kernel.send(port, {self(), :close})
|
||||
end
|
||||
|
||||
def terminate(_, _, _) do
|
||||
:ok
|
||||
end
|
||||
|
||||
defp send(port, command) do
|
||||
Kernel.send(port, {self(), {:command, :erlang.term_to_binary(command)}})
|
||||
end
|
||||
|
|
|
@ -6,11 +6,13 @@ defmodule GenMagic.ApprenticeTest do
|
|||
|
||||
test "sends ready" do
|
||||
port = Port.open(GenMagic.Config.get_port_name(), GenMagic.Config.get_port_options([]))
|
||||
on_exit(fn() -> send(port, {self(), :close}) end)
|
||||
assert_ready(port)
|
||||
end
|
||||
|
||||
test "stops" do
|
||||
port = Port.open(GenMagic.Config.get_port_name(), GenMagic.Config.get_port_options([]))
|
||||
on_exit(fn() -> send(port, {self(), :close}) end)
|
||||
assert_ready(port)
|
||||
send(port, {self(), {:command, :erlang.term_to_binary({:stop, :stop})}})
|
||||
assert_receive {^port, {:exit_status, 0}}
|
||||
|
@ -19,6 +21,7 @@ defmodule GenMagic.ApprenticeTest do
|
|||
test "exits with no database" do
|
||||
opts = [:use_stdio, :binary, :exit_status, {:packet, 2}, {:args, []}]
|
||||
port = Port.open(GenMagic.Config.get_port_name(), opts)
|
||||
on_exit(fn() -> send(port, {self(), :close}) end)
|
||||
assert_receive {^port, {:exit_status, 1}}
|
||||
end
|
||||
|
||||
|
@ -32,12 +35,14 @@ defmodule GenMagic.ApprenticeTest do
|
|||
]
|
||||
|
||||
port = Port.open(GenMagic.Config.get_port_name(), opts)
|
||||
on_exit(fn() -> send(port, {self(), :close}) end)
|
||||
assert_receive {^port, {:exit_status, 3}}
|
||||
end
|
||||
|
||||
describe "port" do
|
||||
setup do
|
||||
port = Port.open(GenMagic.Config.get_port_name(), GenMagic.Config.get_port_options([]))
|
||||
on_exit(fn() -> send(port, {self(), :close}) end)
|
||||
assert_ready(port)
|
||||
%{port: port}
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue