250 lines
6.3 KiB
Erlang
250 lines
6.3 KiB
Erlang
%%--------------------------------------------------------------------
|
|
%% Copyright (c) 2022-2023 EMQ Technologies Co., Ltd. All Rights Reserved.
|
|
%%--------------------------------------------------------------------
|
|
|
|
-module(emqx_license_checker_SUITE).
|
|
|
|
-compile(nowarn_export_all).
|
|
-compile(export_all).
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
-include_lib("common_test/include/ct.hrl").
|
|
-include_lib("snabbkaffe/include/snabbkaffe.hrl").
|
|
|
|
all() ->
|
|
emqx_common_test_helpers:all(?MODULE).
|
|
|
|
init_per_suite(Config) ->
|
|
_ = application:load(emqx_conf),
|
|
ok = emqx_common_test_helpers:start_apps([emqx_license], fun set_special_configs/1),
|
|
Config.
|
|
|
|
end_per_suite(_) ->
|
|
ok = emqx_common_test_helpers:stop_apps([emqx_license]).
|
|
|
|
init_per_testcase(t_default_limits, Config) ->
|
|
ok = emqx_common_test_helpers:stop_apps([emqx_license]),
|
|
Config;
|
|
init_per_testcase(_Case, Config) ->
|
|
{ok, _} = emqx_cluster_rpc:start_link(node(), emqx_cluster_rpc, 1000),
|
|
Config.
|
|
|
|
end_per_testcase(t_default_limits, _Config) ->
|
|
ok = emqx_common_test_helpers:start_apps([emqx_license], fun set_special_configs/1);
|
|
end_per_testcase(_Case, _Config) ->
|
|
ok.
|
|
|
|
set_special_configs(emqx_license) ->
|
|
Config = #{key => emqx_license_test_lib:default_license()},
|
|
emqx_config:put([license], Config);
|
|
set_special_configs(_) ->
|
|
ok.
|
|
|
|
%%------------------------------------------------------------------------------
|
|
%% Tests
|
|
%%------------------------------------------------------------------------------
|
|
|
|
t_default_limits(_Config) ->
|
|
?assertMatch({error, no_license}, emqx_license_checker:limits()).
|
|
|
|
t_dump(_Config) ->
|
|
License = mk_license(
|
|
[
|
|
"220111",
|
|
"0",
|
|
"10",
|
|
"Foo",
|
|
"contact@foo.com",
|
|
"bar",
|
|
"20220111",
|
|
"100000",
|
|
"10"
|
|
]
|
|
),
|
|
|
|
#{} = emqx_license_checker:update(License),
|
|
|
|
?assertEqual(
|
|
[
|
|
{customer, <<"Foo">>},
|
|
{email, <<"contact@foo.com">>},
|
|
{deployment, <<"bar">>},
|
|
{max_connections, 10},
|
|
{start_at, <<"2022-01-11">>},
|
|
{expiry_at, <<"2295-10-27">>},
|
|
{type, <<"trial">>},
|
|
{customer_type, 10},
|
|
{expiry, false}
|
|
],
|
|
emqx_license_checker:dump()
|
|
).
|
|
|
|
t_update(_Config) ->
|
|
License = mk_license(
|
|
[
|
|
"220111",
|
|
"0",
|
|
"10",
|
|
"Foo",
|
|
"contact@foo.com",
|
|
"bar",
|
|
"20220111",
|
|
"100000",
|
|
"123"
|
|
]
|
|
),
|
|
#{} = emqx_license_checker:update(License),
|
|
|
|
?assertMatch(
|
|
{ok, #{max_connections := 123}},
|
|
emqx_license_checker:limits()
|
|
).
|
|
|
|
t_update_by_timer(_Config) ->
|
|
?check_trace(
|
|
begin
|
|
?wait_async_action(
|
|
begin
|
|
erlang:send(
|
|
emqx_license_checker,
|
|
check_license
|
|
)
|
|
end,
|
|
#{?snk_kind := emqx_license_checked},
|
|
1000
|
|
)
|
|
end,
|
|
fun(Trace) ->
|
|
?assertMatch([_ | _], ?of_kind(emqx_license_checked, Trace))
|
|
end
|
|
).
|
|
|
|
t_expired_trial(_Config) ->
|
|
{NowDate, _} = calendar:universal_time(),
|
|
Date10DaysAgo = calendar:gregorian_days_to_date(
|
|
calendar:date_to_gregorian_days(NowDate) - 10
|
|
),
|
|
|
|
License = mk_license(
|
|
[
|
|
"220111",
|
|
"0",
|
|
"10",
|
|
"Foo",
|
|
"contact@foo.com",
|
|
"bar",
|
|
format_date(Date10DaysAgo),
|
|
"1",
|
|
"123"
|
|
]
|
|
),
|
|
#{} = emqx_license_checker:update(License),
|
|
|
|
?assertMatch(
|
|
{ok, #{max_connections := expired}},
|
|
emqx_license_checker:limits()
|
|
).
|
|
|
|
t_overexpired_small_client(_Config) ->
|
|
{NowDate, _} = calendar:universal_time(),
|
|
Date100DaysAgo = calendar:gregorian_days_to_date(
|
|
calendar:date_to_gregorian_days(NowDate) - 100
|
|
),
|
|
|
|
License = mk_license(
|
|
[
|
|
"220111",
|
|
"1",
|
|
"0",
|
|
"Foo",
|
|
"contact@foo.com",
|
|
"bar",
|
|
format_date(Date100DaysAgo),
|
|
"1",
|
|
"123"
|
|
]
|
|
),
|
|
#{} = emqx_license_checker:update(License),
|
|
|
|
?assertMatch(
|
|
{ok, #{max_connections := expired}},
|
|
emqx_license_checker:limits()
|
|
).
|
|
|
|
t_overexpired_medium_client(_Config) ->
|
|
{NowDate, _} = calendar:universal_time(),
|
|
Date100DaysAgo = calendar:gregorian_days_to_date(
|
|
calendar:date_to_gregorian_days(NowDate) - 100
|
|
),
|
|
|
|
License = mk_license(
|
|
[
|
|
"220111",
|
|
"1",
|
|
"1",
|
|
"Foo",
|
|
"contact@foo.com",
|
|
"bar",
|
|
format_date(Date100DaysAgo),
|
|
"1",
|
|
"123"
|
|
]
|
|
),
|
|
#{} = emqx_license_checker:update(License),
|
|
|
|
?assertMatch(
|
|
{ok, #{max_connections := 123}},
|
|
emqx_license_checker:limits()
|
|
).
|
|
|
|
t_recently_expired_small_client(_Config) ->
|
|
{NowDate, _} = calendar:universal_time(),
|
|
Date10DaysAgo = calendar:gregorian_days_to_date(
|
|
calendar:date_to_gregorian_days(NowDate) - 10
|
|
),
|
|
|
|
License = mk_license(
|
|
[
|
|
"220111",
|
|
"1",
|
|
"0",
|
|
"Foo",
|
|
"contact@foo.com",
|
|
"bar",
|
|
format_date(Date10DaysAgo),
|
|
"1",
|
|
"123"
|
|
]
|
|
),
|
|
#{} = emqx_license_checker:update(License),
|
|
|
|
?assertMatch(
|
|
{ok, #{max_connections := 123}},
|
|
emqx_license_checker:limits()
|
|
).
|
|
|
|
t_unknown_calls(_Config) ->
|
|
ok = gen_server:cast(emqx_license_checker, some_cast),
|
|
some_msg = erlang:send(emqx_license_checker, some_msg),
|
|
?assertEqual(unknown, gen_server:call(emqx_license_checker, some_request)).
|
|
|
|
%%------------------------------------------------------------------------------
|
|
%% Tests
|
|
%%------------------------------------------------------------------------------
|
|
|
|
mk_license(Fields) ->
|
|
EncodedLicense = emqx_license_test_lib:make_license(Fields),
|
|
{ok, License} = emqx_license_parser:parse(
|
|
EncodedLicense,
|
|
emqx_license_test_lib:public_key_pem()
|
|
),
|
|
License.
|
|
|
|
format_date({Year, Month, Day}) ->
|
|
lists:flatten(
|
|
io_lib:format(
|
|
"~4..0w~2..0w~2..0w",
|
|
[Year, Month, Day]
|
|
)
|
|
).
|