Current section
Files
Jump to
Current section
Files
test/autoclose_test.exs
defmodule AutoCloseTest do
use ExUnit.Case
test "test slave and master interaction" do
# run with: mix slave
alias Modbus.Tcp.Slave
alias Modbus.Tcp.Master
# start your slave with a shared model
model = %{0x50 => %{{:c, 0x5152} => 0}}
{:ok, spid} = Slave.start_link(model: model)
# get the assigned tcp port
port = Slave.port(spid)
self = self()
pid =
spawn(fn ->
{:ok, mpid} = Master.start_link(ip: {127, 0, 0, 1}, port: port)
socket = GenServer.call(mpid, :socket)
send(self, {mpid, socket})
# crash required for linked process to exit as well
Process.exit(self(), :crash)
end)
ref = :erlang.monitor(:process, pid)
assert_receive {mpid, socket}, 400
assert_receive {:DOWN, ^ref, :process, ^pid, :crash}, 800
assert {:error, :closed} == :gen_tcp.recv(socket, 0, 0)
assert false == Process.alive?(mpid)
end
end