From 75c6348cf56aeb52ccc5c9f98219beb069fc2f12 Mon Sep 17 00:00:00 2001 From: HuangDan Date: Wed, 16 Aug 2017 03:07:30 +0800 Subject: [PATCH] Added more test cases for hot configuration --- Makefile | 2 +- test/emqttd_config_SUITE.erl | 118 ++++++++++++++++++++++++++++++++++- 2 files changed, 117 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index d313936ac..8203004c8 100644 --- a/Makefile +++ b/Makefile @@ -36,7 +36,7 @@ EUNIT_OPTS = verbose CT_SUITES = emqttd emqttd_access emqttd_lib emqttd_inflight emqttd_mod \ emqttd_net emqttd_mqueue emqttd_protocol emqttd_topic \ - emqttd_trie emqttd_vm + emqttd_trie emqttd_vm emqttd_config CT_OPTS = -cover test/ct.cover.spec -erl_args -name emqttd_ct@127.0.0.1 diff --git a/test/emqttd_config_SUITE.erl b/test/emqttd_config_SUITE.erl index 6ea3f7ece..24d5c2f43 100644 --- a/test/emqttd_config_SUITE.erl +++ b/test/emqttd_config_SUITE.erl @@ -20,7 +20,121 @@ -include("emqttd.hrl"). -all() -> []. +-include_lib("eunit/include/eunit.hrl"). -groups() -> []. +-include_lib("common_test/include/ct.hrl"). +all() -> + [{group, emq_config}]. + +groups() -> + [{emq_config, [sequence], + [run_protocol_cmd, + run_client_cmd, + run_session_cmd, + run_queue_cmd, + run_auth_cmd, + run_lager_cmd, + run_connection_cmd, + run_broker_config] + }]. + +init_per_suite(Config) -> + Config. + +end_per_suite(Config) -> + Config. + +run_protocol_cmd(_Config) -> + SetConfigKeys = [{"max_clientid_len=2048", int}, + {"max_packet_size=1024", int}, + % {"websocket_protocol_header=off", atom}, + {"keepalive_backoff=0.5", float}], + lists:foreach(fun set_cmd/1, SetConfigKeys), + R = lists:sort(lists:map(fun env_value/1, SetConfigKeys)), + {ok, E} = application:get_env(emqttd, protocol), + ?assertEqual(R, lists:sort(E)), + emqttd_cli_config:run(["config", "set", "mqtt.websocket_protocol_header=off", "--app=emqttd"]), + {ok, E1} = application:get_env(emqttd, websocket_protocol_header), + ?assertEqual(false, E1). + +run_client_cmd(_Config) -> + SetConfigKeys = [{"max_publish_rate=100", int}, + {"idle_timeout=300", int}, + {"enable_stats=on", atom}], + lists:foreach(fun(Key) -> set_cmd("client", Key) end, SetConfigKeys), + R = lists:sort(lists:map(fun env_value/1, SetConfigKeys)), + {ok, E} = application:get_env(emqttd, client), + ?assertEqual(R, lists:sort(E)). + +run_session_cmd(_Config) -> + SetConfigKeys = [{"max_subscriptions=5", int}, + {"upgrade_qos=on", atom}, + {"max_inflight=64", int}, + {"retry_interval=40000", int}, + {"max_awaiting_rel=200", int}, + {"await_rel_timeout=400000",int}, + {"enable_stats=on", atom}, + {"expiry_interval=2", date}, + {"ignore_loop_deliver=true", atom}], + lists:foreach(fun(Key) -> set_cmd("session", Key) end, SetConfigKeys), + R = lists:sort(lists:map(fun env_value/1, SetConfigKeys)), + {ok, E} = application:get_env(emqttd, session), + ?assertEqual(R, lists:sort(E)). + +run_queue_cmd(_Config) -> + SetConfigKeys = [{"type=priority", atom}, + {"priority=hah", atom}, + {"max_length=2000", int}, + {"low_watermark=40%",percent}, + {"high_watermark=80%", percent}, + {"store_qos0=false", atom}], + lists:foreach(fun(Key) -> set_cmd("mqueue", Key) end, SetConfigKeys), + R = lists:sort(lists:map(fun env_value/1, SetConfigKeys)), + {ok, E} = application:get_env(emqttd, mqueue), + ?assertEqual(R, lists:sort(E)). + +run_auth_cmd(_Config) -> + SetConfigKeys = [{"allow_anonymous=true", atom}, + {"acl_nomatch=deny", atom}, + {"acl_file=etc/test.acl", string}, + {"cache_acl=false", atom}], + lists:foreach(fun set_cmd/1, SetConfigKeys), + {ok, true} = application:get_env(emqttd, allow_anonymous), + {ok, deny} = application:get_env(emqttd, acl_nomatch), + {ok, "etc/test.acl"} = application:get_env(emqttd, acl_file), + {ok, false} = application:get_env(emqttd, cache_acl). + +run_lager_cmd(_Config) -> + emqttd_cli_config:run(["config", "set", "log.console.level=info", "--app=emqttd"]), + ok. + +run_connection_cmd(_Config) -> + emqttd_cli_config:run(["config", "set", "mqtt.conn.force_gc_count=1000", "--app=emqttd"]), + {ok, E} = application:get_env(emqttd, conn_force_gc_count), + ?assertEqual(1000, E). + +run_broker_config(_Config) -> + emqttd_cli_config:run(["config", "set", "mqtt.broker.sys_interval=10", "--app=emqttd"]), + {ok, E} = application:get_env(emqttd, sys_interval), + ?assertEqual(10, E). + +env_value({Key, Type}) -> + [K, V] = string:split(Key, "="), + {list_to_atom(K), format(Type, V)}. + +format(string, S) -> S; +format(atom, "on") -> true; +format(atom, "off") -> false; +format(atom, A) -> list_to_atom(A); +format(float, F) -> list_to_float(F); +format(percent, P) -> + {match, [N]} = re:run(P, "^([0-9]+)%$", [{capture, all_but_first, list}]), + list_to_integer(N) / 100; +format(int, I) -> list_to_integer(I). + +set_cmd({Key, _Type}) -> + emqttd_cli_config:run(["config", "set", string:join(["mqtt", Key], "."), "--app=emqttd"]). + +set_cmd(Pre, {Key, _Type}) -> + emqttd_cli_config:run(["config", "set", string:join(["mqtt", Pre, Key], "."), "--app=emqttd"]).