feat(ft): add API tests

This commit is contained in:
Ilya Averyanov 2023-02-15 21:49:33 +02:00
parent 6d9f780313
commit 16fa55e19a
3 changed files with 185 additions and 5 deletions

View File

@ -0,0 +1,177 @@
%%--------------------------------------------------------------------
%% Copyright (c) 2020-2023 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_ft_api_SUITE).
-compile(export_all).
-compile(nowarn_export_all).
-include_lib("common_test/include/ct.hrl").
-include_lib("stdlib/include/assert.hrl").
-define(assertInclude(Pattern, List),
?assert(
lists:any(
fun(El) ->
case El of
Pattern -> true;
_ -> false
end
end,
List
)
)
).
-import(emqx_mgmt_api_test_util, [request/3, uri/1]).
all() -> emqx_common_test_helpers:all(?MODULE).
init_per_suite(Config) ->
ok = emqx_mgmt_api_test_util:init_suite(
[emqx_conf, emqx_ft], set_special_configs(Config)
),
ok = emqx_common_test_helpers:set_gen_rpc_stateless(),
Config.
end_per_suite(_Config) ->
ok = emqx_mgmt_api_test_util:end_suite([emqx_ft, emqx_conf]),
ok.
set_special_configs(Config) ->
fun
(emqx_ft) ->
ok = emqx_config:put([file_transfer, storage], #{
type => local, root => emqx_ft_test_helpers:ft_root(Config, node())
});
(_) ->
ok
end.
init_per_testcase(Case, Config) ->
[{tc, Case} | Config].
end_per_testcase(_Case, _Config) ->
ok.
%%--------------------------------------------------------------------
%% Tests
%%--------------------------------------------------------------------
t_list_ready_transfers(Config) ->
ClientId = client_id(Config),
ok = emqx_ft_test_helpers:upload_file(ClientId, <<"f1">>, <<"data">>, node()),
{ok, 200, Response} = request(get, uri(["file_transfer", "files"])),
#{<<"files">> := Files} = emqx_json:decode(Response, [return_maps]),
?assertInclude(
#{<<"id">> := #{<<"clientid">> := ClientId, <<"fileid">> := <<"f1">>}},
Files
).
%% This shouldn't happen in real life
%% but we need to test it anyway
t_list_ready_transfers_no_nodes(_Config) ->
_ = meck:new(mria_mnesia, [passthrough]),
_ = meck:expect(mria_mnesia, running_nodes, fun() -> [] end),
?assertMatch(
{ok, 503, _},
request(get, uri(["file_transfer", "files"]))
).
t_download_transfer(Config) ->
ClientId = client_id(Config),
ok = emqx_ft_test_helpers:upload_file(ClientId, <<"f1">>, <<"data">>, node()),
?assertMatch(
{ok, 503, _},
request(
get,
uri(["file_transfer", "file"]) ++
query(#{
clientid => ClientId,
fileid => <<"f1">>
})
)
),
?assertMatch(
{ok, 503, _},
request(
get,
uri(["file_transfer", "file"]) ++
query(#{
clientid => ClientId,
fileid => <<"f1">>,
node => <<"nonode@nohost">>
})
)
),
?assertMatch(
{ok, 404, _},
request(
get,
uri(["file_transfer", "file"]) ++
query(#{
clientid => ClientId,
fileid => <<"unknown_file">>,
node => node()
})
)
),
{ok, 200, Response} = request(
get,
uri(["file_transfer", "file"]) ++
query(#{
clientid => ClientId,
fileid => <<"f1">>,
node => node()
})
),
?assertEqual(
Response,
<<"data">>
).
%%--------------------------------------------------------------------
%% Helpers
%%--------------------------------------------------------------------
client_id(Config) ->
atom_to_binary(?config(tc, Config), utf8).
request(Method, Url) ->
request(Method, Url, []).
query(Params) ->
KVs = lists:map(fun({K, V}) -> uri_encode(K) ++ "=" ++ uri_encode(V) end, maps:to_list(Params)),
"?" ++ string:join(KVs, "&").
uri_encode(T) ->
emqx_http_lib:uri_encode(to_list(T)).
to_list(A) when is_atom(A) ->
atom_to_list(A);
to_list(B) when is_binary(B) ->
binary_to_list(B);
to_list(L) when is_list(L) ->
L.

View File

@ -25,9 +25,11 @@
-define(assertInclude(Pattern, List),
?assert(
lists:any(
fun
(Pattern) -> true;
(_) -> false
fun(El) ->
case El of
Pattern -> true;
_ -> false
end
end,
List
)

View File

@ -25,11 +25,12 @@
all() -> emqx_common_test_helpers:all(?MODULE).
init_per_suite(Config) ->
ok = emqx_common_test_helpers:start_apps([emqx_ft]),
ok = emqx_common_test_helpers:start_apps([emqx_conf, emqx_ft]),
ok = emqx_common_test_helpers:set_gen_rpc_stateless(),
Config.
end_per_suite(_Config) ->
ok = emqx_common_test_helpers:stop_apps([emqx_ft]),
ok = emqx_common_test_helpers:stop_apps([emqx_ft, emqx_conf]),
ok.
init_per_testcase(_Case, Config) ->