%%-------------------------------------------------------------------- %% Copyright (c) 2022 EMQ Technologies Co., Ltd. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. %% You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, software %% distributed under the License is distributed on an "AS IS" BASIS, %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %% See the License for the specific language governing permissions and %% limitations under the License. %%-------------------------------------------------------------------- -module(emqx_gateway_cm_registry_SUITE). -include_lib("eunit/include/eunit.hrl"). -compile(export_all). -compile(nowarn_export_all). -define(GWNAME, mqttsn). -define(CLIENTID, <<"client1">>). -define(CONF_DEFAULT, <<"gateway {}">>). %%-------------------------------------------------------------------- %% setups %%-------------------------------------------------------------------- all() -> emqx_common_test_helpers:all(?MODULE). init_per_suite(Conf) -> emqx_config:erase(gateway), emqx_config:init_load(emqx_gateway_schema, ?CONF_DEFAULT), emqx_common_test_helpers:start_apps([]), Conf. end_per_suite(_Conf) -> emqx_common_test_helpers:stop_apps([]). init_per_testcase(_TestCase, Conf) -> {ok, Pid} = emqx_gateway_cm_registry:start_link(?GWNAME), [{registry, Pid} | Conf]. end_per_testcase(_TestCase, Conf) -> Pid = proplists:get_value(registry, Conf), gen_server:stop(Pid), Conf. %%-------------------------------------------------------------------- %% cases %%-------------------------------------------------------------------- t_tabname(_) -> ?assertEqual( emqx_gateway_gw_name_channel_registry, emqx_gateway_cm_registry:tabname(gw_name)). t_register_unregister_channel(_) -> ok = emqx_gateway_cm_registry:register_channel(?GWNAME, ?CLIENTID), ?assertEqual( [{channel, ?CLIENTID, self()}], ets:tab2list(emqx_gateway_cm_registry:tabname(?GWNAME))), ?assertEqual( [self()], emqx_gateway_cm_registry:lookup_channels(?GWNAME, ?CLIENTID)), ok = emqx_gateway_cm_registry:unregister_channel(?GWNAME, ?CLIENTID), ?assertEqual( [], ets:tab2list(emqx_gateway_cm_registry:tabname(?GWNAME))), ?assertEqual( [], emqx_gateway_cm_registry:lookup_channels(?GWNAME, ?CLIENTID)). t_cleanup_channels(Conf) -> Pid = proplists:get_value(registry, Conf), emqx_gateway_cm_registry:register_channel(?GWNAME, ?CLIENTID), ?assertEqual( [self()], emqx_gateway_cm_registry:lookup_channels(?GWNAME, ?CLIENTID)), Pid ! {membership, {mnesia, down, node()}}, ct:sleep(100), ?assertEqual( [], emqx_gateway_cm_registry:lookup_channels(?GWNAME, ?CLIENTID)). t_handle_unexpected_msg(Conf) -> Pid = proplists:get_value(registry, Conf), _ = Pid ! unexpected_info, ok = gen_server:cast(Pid, unexpected_cast), ignored = gen_server:call(Pid, unexpected_call).