pubsub_queue, assert
This commit is contained in:
parent
a0319d9d26
commit
e1ae9a7068
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
-include("emqttd.hrl").
|
-include("emqttd.hrl").
|
||||||
|
|
||||||
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
|
|
||||||
all() ->
|
all() ->
|
||||||
[{group, pubsub},
|
[{group, pubsub},
|
||||||
{group, router},
|
{group, router},
|
||||||
|
@ -38,7 +40,8 @@ groups() ->
|
||||||
create_subscription,
|
create_subscription,
|
||||||
subscribe_unsubscribe,
|
subscribe_unsubscribe,
|
||||||
publish, pubsub,
|
publish, pubsub,
|
||||||
'pubsub#', 'pubsub+']},
|
'pubsub#', 'pubsub+',
|
||||||
|
pubsub_queue]},
|
||||||
{router, [sequence],
|
{router, [sequence],
|
||||||
[router_add_del,
|
[router_add_del,
|
||||||
router_print,
|
router_print,
|
||||||
|
@ -99,7 +102,7 @@ create_subscription(_) ->
|
||||||
[#mqtt_subscription{subid = <<"clientId">>, topic = <<"topic/sub">>, qos = 2}]
|
[#mqtt_subscription{subid = <<"clientId">>, topic = <<"topic/sub">>, qos = 2}]
|
||||||
= emqttd_backend:lookup_subscriptions(<<"clientId">>),
|
= emqttd_backend:lookup_subscriptions(<<"clientId">>),
|
||||||
ok = emqttd_backend:del_subscriptions(<<"clientId">>),
|
ok = emqttd_backend:del_subscriptions(<<"clientId">>),
|
||||||
[] = emqttd_backend:lookup_subscriptions(<<"clientId">>).
|
?assertEqual([], emqttd_backend:lookup_subscriptions(<<"clientId">>)).
|
||||||
|
|
||||||
subscribe_unsubscribe(_) ->
|
subscribe_unsubscribe(_) ->
|
||||||
ok = emqttd:subscribe(<<"topic/subunsub">>),
|
ok = emqttd:subscribe(<<"topic/subunsub">>),
|
||||||
|
@ -114,7 +117,7 @@ publish(_) ->
|
||||||
ok = emqttd:subscribe(<<"test/+">>),
|
ok = emqttd:subscribe(<<"test/+">>),
|
||||||
timer:sleep(10),
|
timer:sleep(10),
|
||||||
emqttd:publish(Msg),
|
emqttd:publish(Msg),
|
||||||
true = receive {dispatch, <<"test/+">>, Msg} -> true after 5 -> false end.
|
?assert(receive {dispatch, <<"test/+">>, Msg} -> true after 5 -> false end).
|
||||||
|
|
||||||
pubsub(_) ->
|
pubsub(_) ->
|
||||||
Self = self(),
|
Self = self(),
|
||||||
|
@ -124,7 +127,7 @@ pubsub(_) ->
|
||||||
[{Self, <<"a/b/c">>}] = ets:lookup(subscribed, Self),
|
[{Self, <<"a/b/c">>}] = ets:lookup(subscribed, Self),
|
||||||
[{<<"a/b/c">>, Self}] = ets:lookup(subscriber, <<"a/b/c">>),
|
[{<<"a/b/c">>, Self}] = ets:lookup(subscriber, <<"a/b/c">>),
|
||||||
emqttd:publish(emqttd_message:make(ct, <<"a/b/c">>, <<"hello">>)),
|
emqttd:publish(emqttd_message:make(ct, <<"a/b/c">>, <<"hello">>)),
|
||||||
true = receive {dispatch, <<"a/b/c">>, _} -> true after 2 -> false end,
|
?assert(receive {dispatch, <<"a/b/c">>, _} -> true after 2 -> false end),
|
||||||
spawn(fun() ->
|
spawn(fun() ->
|
||||||
emqttd:subscribe(<<"a/b/c">>),
|
emqttd:subscribe(<<"a/b/c">>),
|
||||||
emqttd:subscribe(<<"c/d/e">>),
|
emqttd:subscribe(<<"c/d/e">>),
|
||||||
|
@ -138,16 +141,42 @@ pubsub(_) ->
|
||||||
emqttd:subscribe(<<"a/#">>),
|
emqttd:subscribe(<<"a/#">>),
|
||||||
timer:sleep(10),
|
timer:sleep(10),
|
||||||
emqttd:publish(emqttd_message:make(ct, <<"a/b/c">>, <<"hello">>)),
|
emqttd:publish(emqttd_message:make(ct, <<"a/b/c">>, <<"hello">>)),
|
||||||
true = receive {dispatch, <<"a/#">>, _} -> true after 2 -> false end,
|
?assert(receive {dispatch, <<"a/#">>, _} -> true after 2 -> false end),
|
||||||
emqttd:unsubscribe(<<"a/#">>).
|
emqttd:unsubscribe(<<"a/#">>).
|
||||||
|
|
||||||
'pubsub+'(_) ->
|
'pubsub+'(_) ->
|
||||||
emqttd:subscribe(<<"a/+/+">>),
|
emqttd:subscribe(<<"a/+/+">>),
|
||||||
timer:sleep(10),
|
timer:sleep(10),
|
||||||
emqttd:publish(emqttd_message:make(ct, <<"a/b/c">>, <<"hello">>)),
|
emqttd:publish(emqttd_message:make(ct, <<"a/b/c">>, <<"hello">>)),
|
||||||
true = receive {dispatch, <<"a/+/+">>, _} -> true after 1 -> false end,
|
?assert(receive {dispatch, <<"a/+/+">>, _} -> true after 1 -> false end),
|
||||||
emqttd:unsubscribe(<<"a/+/+">>).
|
emqttd:unsubscribe(<<"a/+/+">>).
|
||||||
|
|
||||||
|
pubsub_queue(_) ->
|
||||||
|
Self = self(), Q = <<"$queue/abc">>,
|
||||||
|
SubFun = fun() ->
|
||||||
|
emqttd:subscribe(Q),
|
||||||
|
{ok, Msgs} = loop_recv(Q, 10),
|
||||||
|
Self ! {recv, self(), Msgs}
|
||||||
|
end,
|
||||||
|
Sub1 = spawn(SubFun), Sub2 = spawn(SubFun),
|
||||||
|
timer:sleep(5),
|
||||||
|
emqttd:publish(emqttd_message:make(ct, Q, <<"1", Q/binary>>)),
|
||||||
|
emqttd:publish(emqttd_message:make(ct, Q, <<"2", Q/binary>>)),
|
||||||
|
emqttd:publish(emqttd_message:make(ct, Q, <<"3", Q/binary>>)),
|
||||||
|
?assert(receive {recv, Sub1, Msgs1} -> length(Msgs1) < 3 end),
|
||||||
|
?assert(receive {recv, Sub2, Msgs2} -> length(Msgs2) < 3 end).
|
||||||
|
|
||||||
|
loop_recv(Topic, Timeout) ->
|
||||||
|
loop_recv(Topic, Timeout, []).
|
||||||
|
|
||||||
|
loop_recv(Topic, Timeout, Acc) ->
|
||||||
|
receive
|
||||||
|
{dispatch, Topic, Msg} ->
|
||||||
|
loop_recv(Topic, Timeout, [Msg|Acc])
|
||||||
|
after
|
||||||
|
Timeout -> {ok, Acc}
|
||||||
|
end.
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% Router Test
|
%% Router Test
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
@ -293,7 +322,7 @@ dispatch_retained_messages(_) ->
|
||||||
payload = <<"payload">>},
|
payload = <<"payload">>},
|
||||||
emqttd_retainer:retain(Msg),
|
emqttd_retainer:retain(Msg),
|
||||||
emqttd_retainer:dispatch(<<"a/b/+">>, self()),
|
emqttd_retainer:dispatch(<<"a/b/+">>, self()),
|
||||||
true = receive {dispatch, <<"a/b/+">>, Msg} -> true after 10 -> false end,
|
?assert(receive {dispatch, <<"a/b/+">>, Msg} -> true after 10 -> false end),
|
||||||
emqttd_retainer:retain(#mqtt_message{retain = true, topic = <<"a/b/c">>, payload = <<>>}),
|
emqttd_retainer:retain(#mqtt_message{retain = true, topic = <<"a/b/c">>, payload = <<>>}),
|
||||||
[] = emqttd_backend:read_messages(<<"a/b/c">>).
|
[] = emqttd_backend:read_messages(<<"a/b/c">>).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue