-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmqttex_test.exs
87 lines (66 loc) · 2.22 KB
/
mqttex_test.exs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
defmodule MqttexTest do
use ExUnit.Case
test "A mqttx server is up and running" do
client_id = "MqttexTest A"
conMsg = connect(client_id)
{%Mqttex.Msg.ConnAck{}, server} = Mqttex.Server.connect(conMsg, self)
assert(is_pid(server))
ref = Process.monitor server
assert Mqttex.Server.stop(server) == :ok
wait_for_server_shutdown(ref)
refute Process.alive? server
end
test "BA start server and ping it with messages" do
client_id = "MqttexTest A"
conMsg = connect(client_id)
{%Mqttex.Msg.ConnAck{}, server} = Mqttex.Server.connect(conMsg, self)
assert(is_pid(server))
ref = Process.monitor server
ping = Mqttex.Msg.ping_req()
assert Mqttex.Server.receive(server, ping) == :ok
assert_receive %Mqttex.Msg.Simple{msg_type: :ping_resp}
assert Mqttex.Server.stop(server) == :ok
wait_for_server_shutdown(ref)
refute Process.alive? server
end
test "CA start server and reconnect with messages" do
client_id = "MqttexTest A"
conMsg = connect(client_id)
{%Mqttex.Msg.ConnAck{}, server} = Mqttex.Server.connect(conMsg, self)
assert(is_pid(server))
ref = Process.monitor server
dis = Mqttex.Msg.disconnect()
assert Mqttex.Server.receive(server, dis) == :ok
{ack, s} = Mqttex.Server.connect(conMsg, self)
assert ack == Mqttex.Msg.conn_ack
assert s == server
assert Mqttex.Server.stop(server) == :ok
wait_for_server_shutdown(ref)
refute Process.alive? server
end
test "DA disconnect server and ping with messages" do
client_id = "MqttexTest A"
conMsg = connect(client_id)
{%Mqttex.Msg.ConnAck{}, server} = Mqttex.Server.connect(conMsg, self)
assert(is_pid(server))
ref = Process.monitor server
dis = Mqttex.Msg.disconnect()
assert Mqttex.Server.receive(server, dis) == :ok
ping = Mqttex.Msg.ping_req()
assert Mqttex.Server.receive(server, ping) == :ok
assert Mqttex.Server.stop(server) == :ok
wait_for_server_shutdown(ref)
refute Process.alive? server
end
def connect(client_id) do
Mqttex.Msg.connection(client_id, "", "", true)
end
def wait_for_server_shutdown(ref) do
receive do
{:DOWN, ^ref, type, object, info} ->
:error_logger.info_msg "Got DOWN message"
after 1_000 ->
:error_logger.info_msg "Server does exit properly!"
end
end
end