test(gw): add clients HTTP-API tests
This commit is contained in:
parent
6f0d0ab473
commit
46e0609544
|
@ -93,10 +93,9 @@ gateway_insta(delete, #{bindings := #{name := Name0}}) ->
|
|||
end);
|
||||
gateway_insta(get, #{bindings := #{name := Name0}}) ->
|
||||
try
|
||||
GwName = try
|
||||
binary_to_existing_atom(Name0)
|
||||
catch _ : _ -> error(badname)
|
||||
end,
|
||||
of
|
||||
GwName ->
|
||||
case emqx_gateway:lookup(GwName) of
|
||||
undefined ->
|
||||
{200, #{name => GwName, status => unloaded}};
|
||||
|
|
|
@ -107,7 +107,7 @@ swagger("/gateway/:name/authentication", get) ->
|
|||
}
|
||||
};
|
||||
swagger("/gateway/:name/authentication", put) ->
|
||||
#{ description => <<"Create the gateway authentication">>
|
||||
#{ description => <<"Update authentication for the gateway">>
|
||||
, parameters => params_gateway_name_in_path()
|
||||
, requestBody => schema_authn()
|
||||
, responses =>
|
||||
|
|
|
@ -123,7 +123,7 @@ clients_insta(delete, #{ bindings := #{name := Name0,
|
|||
ClientId = emqx_mgmt_util:urldecode(ClientId0),
|
||||
with_gateway(Name0, fun(GwName, _) ->
|
||||
_ = emqx_gateway_http:kickout_client(GwName, ClientId),
|
||||
{200}
|
||||
{204}
|
||||
end).
|
||||
|
||||
%% FIXME:
|
||||
|
@ -157,7 +157,7 @@ subscriptions(post, #{ bindings := #{name := Name0,
|
|||
{error, Reason} ->
|
||||
return_http_error(404, Reason);
|
||||
ok ->
|
||||
{200}
|
||||
{204}
|
||||
end
|
||||
end
|
||||
end);
|
||||
|
@ -172,7 +172,7 @@ subscriptions(delete, #{ bindings := #{name := Name0,
|
|||
Topic = emqx_mgmt_util:urldecode(Topic0),
|
||||
with_gateway(Name0, fun(GwName, _) ->
|
||||
_ = emqx_gateway_http:client_unsubscribe(GwName, ClientId, Topic),
|
||||
{200}
|
||||
{204}
|
||||
end).
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
|
@ -444,7 +444,7 @@ swagger("/gateway/:name/clients/:clientid/subscriptions", post) ->
|
|||
#{ <<"400">> => schema_bad_request()
|
||||
, <<"404">> => schema_not_found()
|
||||
, <<"500">> => schema_internal_error()
|
||||
, <<"200">> => schema_no_content()
|
||||
, <<"204">> => schema_no_content()
|
||||
}
|
||||
};
|
||||
swagger("/gateway/:name/clients/:clientid/subscriptions/:topic", delete) ->
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
-import(emqx_gateway_test_utils,
|
||||
[ assert_confs/2
|
||||
, assert_feilds_apperence/2
|
||||
, request/2
|
||||
, request/3
|
||||
]).
|
||||
|
@ -271,10 +272,3 @@ assert_gw_unloaded(Gateway) ->
|
|||
|
||||
assert_bad_request(BadReq) ->
|
||||
?assertEqual(<<"BAD_REQUEST">>, maps:get(code, BadReq)).
|
||||
|
||||
assert_feilds_apperence(Ks, Map) ->
|
||||
lists:foreach(fun(K) ->
|
||||
_ = maps:get(K, Map)
|
||||
end, Ks).
|
||||
|
||||
|
||||
|
|
|
@ -60,6 +60,11 @@ maybe_unconvert_listeners(Conf) when is_map(Conf) ->
|
|||
maybe_unconvert_listeners(Conf) ->
|
||||
Conf.
|
||||
|
||||
assert_feilds_apperence(Ks, Map) ->
|
||||
lists:foreach(fun(K) ->
|
||||
_ = maps:get(K, Map)
|
||||
end, Ks).
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
%% http
|
||||
|
||||
|
|
|
@ -16,11 +16,18 @@
|
|||
|
||||
-module(emqx_stomp_SUITE).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
-include_lib("emqx_gateway/src/stomp/include/emqx_stomp.hrl").
|
||||
|
||||
-compile(export_all).
|
||||
-compile(nowarn_export_all).
|
||||
|
||||
-import(emqx_gateway_test_utils,
|
||||
[ assert_feilds_apperence/2
|
||||
, request/2
|
||||
, request/3
|
||||
]).
|
||||
|
||||
-define(HEARTBEAT, <<$\n>>).
|
||||
|
||||
-define(CONF_DEFAULT, <<"
|
||||
|
@ -43,11 +50,11 @@ all() -> emqx_common_test_helpers:all(?MODULE).
|
|||
|
||||
init_per_suite(Cfg) ->
|
||||
ok = emqx_config:init_load(emqx_gateway_schema, ?CONF_DEFAULT),
|
||||
emqx_common_test_helpers:start_apps([emqx_gateway]),
|
||||
emqx_mgmt_api_test_util:init_suite([emqx_gateway]),
|
||||
Cfg.
|
||||
|
||||
end_per_suite(_Cfg) ->
|
||||
emqx_common_test_helpers:stop_apps([emqx_gateway]),
|
||||
emqx_mgmt_api_test_util:end_suite([emqx_gateway]),
|
||||
ok.
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
|
@ -339,6 +346,66 @@ t_ack(_) ->
|
|||
body = _}, _, _} = parse(Data4)
|
||||
end).
|
||||
|
||||
t_rest_clienit_info(_) ->
|
||||
with_connection(fun(Sock) ->
|
||||
gen_tcp:send(Sock, serialize(<<"CONNECT">>,
|
||||
[{<<"accept-version">>, ?STOMP_VER},
|
||||
{<<"host">>, <<"127.0.0.1:61613">>},
|
||||
{<<"login">>, <<"guest">>},
|
||||
{<<"passcode">>, <<"guest">>},
|
||||
{<<"heart-beat">>, <<"0,0">>}])),
|
||||
{ok, Data} = gen_tcp:recv(Sock, 0),
|
||||
{ok, #stomp_frame{command = <<"CONNECTED">>,
|
||||
headers = _,
|
||||
body = _}, _, _} = parse(Data),
|
||||
|
||||
%% client lists
|
||||
{200, Clients} = request(get, "/gateway/stomp/clients"),
|
||||
?assertEqual(1, length(maps:get(data, Clients))),
|
||||
StompClient = lists:nth(1, maps:get(data, Clients)),
|
||||
ClientId = maps:get(clientid, StompClient),
|
||||
ClientPath = "/gateway/stomp/clients/"
|
||||
++ binary_to_list(ClientId),
|
||||
{200, StompClient1} = request(get, ClientPath),
|
||||
?assertEqual(StompClient, StompClient1),
|
||||
assert_feilds_apperence(
|
||||
[proto_name, awaiting_rel_max, inflight_cnt, disconnected_at,
|
||||
send_msg, heap_size, connected, recv_cnt, send_pkt, mailbox_len,
|
||||
username, recv_pkt, expiry_interval, clientid, mqueue_max,
|
||||
send_oct, ip_address, is_bridge, awaiting_rel_cnt, mqueue_dropped,
|
||||
mqueue_len, node, inflight_max, reductions, subscriptions_max,
|
||||
connected_at, keepalive, created_at, clean_start,
|
||||
subscriptions_cnt, recv_msg, send_cnt, proto_ver, recv_oct
|
||||
], StompClient),
|
||||
|
||||
%% sub & unsub
|
||||
{200, []} = request(get, ClientPath ++ "/subscriptions"),
|
||||
gen_tcp:send(Sock, serialize(<<"SUBSCRIBE">>,
|
||||
[{<<"id">>, 0},
|
||||
{<<"destination">>, <<"/queue/foo">>},
|
||||
{<<"ack">>, <<"client">>}])),
|
||||
|
||||
{200, Subs} = request(get, ClientPath ++ "/subscriptions"),
|
||||
?assertEqual(1, length(Subs)),
|
||||
assert_feilds_apperence([topic, qos], lists:nth(1, Subs)),
|
||||
|
||||
{204, _} = request(post, ClientPath ++ "/subscriptions",
|
||||
#{topic => <<"t/a">>, qos => 1,
|
||||
sub_props => #{subid => <<"1001">>}}),
|
||||
|
||||
{200, Subs1} = request(get, ClientPath ++ "/subscriptions"),
|
||||
?assertEqual(2, length(Subs1)),
|
||||
|
||||
{204, _} = request(delete, ClientPath ++ "/subscriptions/t%2Fa"),
|
||||
{200, Subs2} = request(get, ClientPath ++ "/subscriptions"),
|
||||
?assertEqual(1, length(Subs2)),
|
||||
|
||||
%% kickout
|
||||
{204, _} = request(delete, ClientPath),
|
||||
{200, Clients2} = request(get, "/gateway/stomp/clients"),
|
||||
?assertEqual(0, length(maps:get(data, Clients2)))
|
||||
end).
|
||||
|
||||
%% TODO: Mountpoint, AuthChain, Authorization + Mountpoint, ClientInfoOverride,
|
||||
%% Listeners, Metrics, Stats, ClientInfo
|
||||
%%
|
||||
|
|
Loading…
Reference in New Issue