diff --git a/Makefile b/Makefile index 374b74fb7..758e93a05 100644 --- a/Makefile +++ b/Makefile @@ -36,7 +36,7 @@ CT_SUITES = emqx emqx_client emqx_zone emqx_banned emqx_session \ emqx_mqtt_props emqx_mqueue emqx_net emqx_pqueue emqx_router emqx_sm \ emqx_tables emqx_time emqx_topic emqx_trie emqx_vm emqx_mountpoint \ emqx_listeners emqx_protocol emqx_pool emqx_shared_sub emqx_bridge \ - emqx_hooks emqx_batch emqx_sequence emqx_pmon emqx_pd + emqx_hooks emqx_batch emqx_sequence emqx_pmon emqx_pd emqx_gc CT_NODE_NAME = emqxct@127.0.0.1 CT_OPTS = -cover test/ct.cover.spec -erl_args -name $(CT_NODE_NAME) diff --git a/test/emqx_gc_SUITE.erl b/test/emqx_gc_SUITE.erl new file mode 100644 index 000000000..22d7cd584 --- /dev/null +++ b/test/emqx_gc_SUITE.erl @@ -0,0 +1,57 @@ +%% Copyright (c) 2018 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_gc_SUITE). + +-compile(export_all). +-compile(nowarn_export_all). + +-include_lib("eunit/include/eunit.hrl"). + +all() -> + [t_init, t_run, t_info, t_reset]. + +t_init(_) -> + ?assertEqual(undefined, emqx_gc:init(false)), + GC1 = emqx_gc:init(#{count => 10, bytes => 0}), + ?assertEqual(#{cnt => {10, 10}}, emqx_gc:info(GC1)), + GC2 = emqx_gc:init(#{count => 0, bytes => 10}), + ?assertEqual(#{oct => {10, 10}}, emqx_gc:info(GC2)), + GC3 = emqx_gc:init(#{count => 10, bytes => 10}), + ?assertEqual(#{cnt => {10, 10}, oct => {10, 10}}, emqx_gc:info(GC3)). + +t_run(_) -> + GC = emqx_gc:init(#{count => 10, bytes => 10}), + ?assertEqual({true, GC}, emqx_gc:run(1, 1000, GC)), + ?assertEqual({true, GC}, emqx_gc:run(1000, 1, GC)), + {false, GC1} = emqx_gc:run(1, 1, GC), + ?assertEqual(#{cnt => {10, 9}, oct => {10, 9}}, emqx_gc:info(GC1)), + {false, GC2} = emqx_gc:run(2, 2, GC1), + ?assertEqual(#{cnt => {10, 7}, oct => {10, 7}}, emqx_gc:info(GC2)), + {false, GC3} = emqx_gc:run(3, 3, GC2), + ?assertEqual(#{cnt => {10, 4}, oct => {10, 4}}, emqx_gc:info(GC3)), + ?assertEqual({true, GC}, emqx_gc:run(4, 4, GC3)). + +t_info(_) -> + ?assertEqual(undefined, emqx_gc:info(undefined)), + GC = emqx_gc:init(#{count => 10, bytes => 0}), + ?assertEqual(#{cnt => {10, 10}}, emqx_gc:info(GC)). + +t_reset(_) -> + ?assertEqual(undefined, emqx_gc:reset(undefined)), + GC = emqx_gc:init(#{count => 10, bytes => 10}), + {false, GC1} = emqx_gc:run(5, 5, GC), + ?assertEqual(#{cnt => {10, 5}, oct => {10, 5}}, emqx_gc:info(GC1)), + ?assertEqual(GC, emqx_gc:reset(GC1)). + diff --git a/test/emqx_gc_tests.erl b/test/emqx_gc_tests.erl deleted file mode 100644 index ffcac91d1..000000000 --- a/test/emqx_gc_tests.erl +++ /dev/null @@ -1,53 +0,0 @@ -%% Copyright (c) 2018 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_gc_tests). - --include_lib("eunit/include/eunit.hrl"). - -trigger_by_cnt_test() -> - Args = #{count => 2, bytes => 0}, - ok = emqx_gc:init(Args), - ok = emqx_gc:inc(1, 1000), - St1 = inspect(), - ?assertMatch({_, Remain} when Remain > 0, maps:get(cnt, St1)), - ok = emqx_gc:inc(2, 2), - St2 = inspect(), - ok = emqx_gc:inc(0, 2000), - St3 = inspect(), - ?assertEqual(St2, St3), - ?assertMatch({N, N}, maps:get(cnt, St2)), - ?assertNot(maps:is_key(oct, St2)), - ok. - -trigger_by_oct_test() -> - Args = #{count => 2, bytes => 2}, - ok = emqx_gc:init(Args), - ok = emqx_gc:inc(1, 1), - St1 = inspect(), - ?assertMatch({_, Remain} when Remain > 0, maps:get(oct, St1)), - ok = emqx_gc:inc(2, 2), - St2 = inspect(), - ?assertMatch({N, N}, maps:get(oct, St2)), - ?assertMatch({M, M}, maps:get(cnt, St2)), - ok. - -disabled_test() -> - Args = #{count => -1, bytes => false}, - ok = emqx_gc:init(Args), - ok = emqx_gc:inc(1, 1), - ?assertEqual(#{}, inspect()), - ok. - -inspect() -> erlang:get(emqx_gc).