Add test case for emqx_mod_rewrite
This commit is contained in:
parent
a4e9142979
commit
783e29d6f7
|
@ -21,6 +21,11 @@
|
||||||
-include_lib("emqx.hrl").
|
-include_lib("emqx.hrl").
|
||||||
-include_lib("emqx_mqtt.hrl").
|
-include_lib("emqx_mqtt.hrl").
|
||||||
|
|
||||||
|
-ifdef(TEST).
|
||||||
|
-compile(export_all).
|
||||||
|
-compile(nowarn_export_all).
|
||||||
|
-endif.
|
||||||
|
|
||||||
%% APIs
|
%% APIs
|
||||||
-export([ rewrite_subscribe/4
|
-export([ rewrite_subscribe/4
|
||||||
, rewrite_unsubscribe/4
|
, rewrite_unsubscribe/4
|
||||||
|
@ -86,4 +91,3 @@ compile(Rules) ->
|
||||||
{ok, MP} = re:compile(Re),
|
{ok, MP} = re:compile(Re),
|
||||||
{rewrite, Topic, MP, Dest}
|
{rewrite, Topic, MP, Dest}
|
||||||
end, Rules).
|
end, Rules).
|
||||||
|
|
||||||
|
|
|
@ -19,63 +19,33 @@
|
||||||
-compile(export_all).
|
-compile(export_all).
|
||||||
-compile(nowarn_export_all).
|
-compile(nowarn_export_all).
|
||||||
|
|
||||||
-import(emqx_mod_rewrite,
|
-include("emqx_mqtt.hrl").
|
||||||
[ rewrite_subscribe/4
|
-include_lib("proper/include/proper.hrl").
|
||||||
, rewrite_unsubscribe/4
|
|
||||||
, rewrite_publish/2
|
|
||||||
]).
|
|
||||||
|
|
||||||
-include_lib("emqx.hrl").
|
|
||||||
-include_lib("eunit/include/eunit.hrl").
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
|
|
||||||
-define(TEST_RULES, [<<"x/# ^x/y/(.+)$ z/y/$1">>,
|
-define(rules, [{rewrite,<<"x/#">>,<<"^x/y/(.+)$">>,<<"z/y/$1">>},
|
||||||
<<"y/+/z/# ^y/(.+)/z/(.+)$ y/z/$2">>
|
{rewrite,<<"y/+/z/#">>,<<"^y/(.+)/z/(.+)$">>,<<"y/z/$2">>}]).
|
||||||
]).
|
|
||||||
|
|
||||||
all() -> emqx_ct:all(?MODULE).
|
all() -> emqx_ct:all(?MODULE).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
t_rewrite_rule(_Config) ->
|
||||||
%% Test cases
|
{ok, _} = emqx_hooks:start_link(),
|
||||||
%%--------------------------------------------------------------------
|
ok = emqx_mod_rewrite:load(?rules),
|
||||||
|
RawTopicFilters = [{<<"x/y/2">>, opts},
|
||||||
t_rewrite_subscribe(_) ->
|
{<<"x/1/2">>, opts},
|
||||||
?assertEqual({ok, [{<<"test">>, #{}}]},
|
{<<"y/a/z/b">>, opts},
|
||||||
rewrite(subscribe, [{<<"test">>, #{}}])),
|
{<<"y/def">>, opts}],
|
||||||
?assertEqual({ok, [{<<"z/y/test">>, #{}}]},
|
SubTopicFilters = emqx_hooks:run_fold('client.subscribe', [client, properties], RawTopicFilters),
|
||||||
rewrite(subscribe, [{<<"x/y/test">>, #{}}])),
|
UnSubTopicFilters = emqx_hooks:run_fold('client.unsubscribe', [client, properties], RawTopicFilters),
|
||||||
?assertEqual({ok, [{<<"y/z/test_topic">>, #{}}]},
|
Messages = [emqx_hooks:run_fold('message.publish', [], emqx_message:make(Topic, <<"payload">>))
|
||||||
rewrite(subscribe, [{<<"y/test/z/test_topic">>, #{}}])).
|
|| {Topic, _Opts} <- RawTopicFilters],
|
||||||
|
ExpectedTopicFilters = [{<<"z/y/2">>, opts},
|
||||||
t_rewrite_unsubscribe(_) ->
|
{<<"x/1/2">>, opts},
|
||||||
?assertEqual({ok, [{<<"test">>, #{}}]},
|
{<<"y/z/b">>, opts},
|
||||||
rewrite(unsubscribe, [{<<"test">>, #{}}])),
|
{<<"y/def">>, opts}],
|
||||||
?assertEqual({ok, [{<<"z/y/test">>, #{}}]},
|
?assertEqual(ExpectedTopicFilters, SubTopicFilters),
|
||||||
rewrite(unsubscribe, [{<<"x/y/test">>, #{}}])),
|
?assertEqual(ExpectedTopicFilters, UnSubTopicFilters),
|
||||||
?assertEqual({ok, [{<<"y/z/test_topic">>, #{}}]},
|
[?assertEqual(ExpectedTopic, emqx_message:topic(Message))
|
||||||
rewrite(unsubscribe, [{<<"y/test/z/test_topic">>, #{}}])).
|
|| {{ExpectedTopic, _opts}, Message} <- lists:zip(ExpectedTopicFilters, Messages)],
|
||||||
|
ok = emqx_mod_rewrite:unload(?rules),
|
||||||
t_rewrite_publish(_) ->
|
ok = emqx_hooks:stop().
|
||||||
?assertMatch({ok, #message{topic = <<"test">>}},
|
|
||||||
rewrite(publish, #message{topic = <<"test">>})),
|
|
||||||
?assertMatch({ok, #message{topic = <<"z/y/test">>}},
|
|
||||||
rewrite(publish, #message{topic = <<"x/y/test">>})),
|
|
||||||
?assertMatch({ok, #message{topic = <<"y/z/test_topic">>}},
|
|
||||||
rewrite(publish, #message{topic = <<"y/test/z/test_topic">>})).
|
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
%% Helper functions
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
|
|
||||||
rewrite(subscribe, TopicFilters) ->
|
|
||||||
rewrite_subscribe(#{}, #{}, TopicFilters, rules());
|
|
||||||
rewrite(unsubscribe, TopicFilters) ->
|
|
||||||
rewrite_unsubscribe(#{}, #{}, TopicFilters, rules());
|
|
||||||
rewrite(publish, Msg) -> rewrite_publish(Msg, rules()).
|
|
||||||
|
|
||||||
rules() ->
|
|
||||||
[begin
|
|
||||||
[Topic, Re, Dest] = string:split(Rule, " ", all),
|
|
||||||
{ok, MP} = re:compile(Re),
|
|
||||||
{rewrite, Topic, MP, Dest}
|
|
||||||
end || Rule <- ?TEST_RULES].
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue