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);
|
end);
|
||||||
gateway_insta(get, #{bindings := #{name := Name0}}) ->
|
gateway_insta(get, #{bindings := #{name := Name0}}) ->
|
||||||
try
|
try
|
||||||
GwName = try
|
|
||||||
binary_to_existing_atom(Name0)
|
binary_to_existing_atom(Name0)
|
||||||
catch _ : _ -> error(badname)
|
of
|
||||||
end,
|
GwName ->
|
||||||
case emqx_gateway:lookup(GwName) of
|
case emqx_gateway:lookup(GwName) of
|
||||||
undefined ->
|
undefined ->
|
||||||
{200, #{name => GwName, status => unloaded}};
|
{200, #{name => GwName, status => unloaded}};
|
||||||
|
|
|
@ -107,7 +107,7 @@ swagger("/gateway/:name/authentication", get) ->
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
swagger("/gateway/:name/authentication", put) ->
|
swagger("/gateway/:name/authentication", put) ->
|
||||||
#{ description => <<"Create the gateway authentication">>
|
#{ description => <<"Update authentication for the gateway">>
|
||||||
, parameters => params_gateway_name_in_path()
|
, parameters => params_gateway_name_in_path()
|
||||||
, requestBody => schema_authn()
|
, requestBody => schema_authn()
|
||||||
, responses =>
|
, responses =>
|
||||||
|
|
|
@ -123,7 +123,7 @@ clients_insta(delete, #{ bindings := #{name := Name0,
|
||||||
ClientId = emqx_mgmt_util:urldecode(ClientId0),
|
ClientId = emqx_mgmt_util:urldecode(ClientId0),
|
||||||
with_gateway(Name0, fun(GwName, _) ->
|
with_gateway(Name0, fun(GwName, _) ->
|
||||||
_ = emqx_gateway_http:kickout_client(GwName, ClientId),
|
_ = emqx_gateway_http:kickout_client(GwName, ClientId),
|
||||||
{200}
|
{204}
|
||||||
end).
|
end).
|
||||||
|
|
||||||
%% FIXME:
|
%% FIXME:
|
||||||
|
@ -157,7 +157,7 @@ subscriptions(post, #{ bindings := #{name := Name0,
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
return_http_error(404, Reason);
|
return_http_error(404, Reason);
|
||||||
ok ->
|
ok ->
|
||||||
{200}
|
{204}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end);
|
end);
|
||||||
|
@ -172,7 +172,7 @@ subscriptions(delete, #{ bindings := #{name := Name0,
|
||||||
Topic = emqx_mgmt_util:urldecode(Topic0),
|
Topic = emqx_mgmt_util:urldecode(Topic0),
|
||||||
with_gateway(Name0, fun(GwName, _) ->
|
with_gateway(Name0, fun(GwName, _) ->
|
||||||
_ = emqx_gateway_http:client_unsubscribe(GwName, ClientId, Topic),
|
_ = emqx_gateway_http:client_unsubscribe(GwName, ClientId, Topic),
|
||||||
{200}
|
{204}
|
||||||
end).
|
end).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
@ -444,7 +444,7 @@ swagger("/gateway/:name/clients/:clientid/subscriptions", post) ->
|
||||||
#{ <<"400">> => schema_bad_request()
|
#{ <<"400">> => schema_bad_request()
|
||||||
, <<"404">> => schema_not_found()
|
, <<"404">> => schema_not_found()
|
||||||
, <<"500">> => schema_internal_error()
|
, <<"500">> => schema_internal_error()
|
||||||
, <<"200">> => schema_no_content()
|
, <<"204">> => schema_no_content()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
swagger("/gateway/:name/clients/:clientid/subscriptions/:topic", delete) ->
|
swagger("/gateway/:name/clients/:clientid/subscriptions/:topic", delete) ->
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
-import(emqx_gateway_test_utils,
|
-import(emqx_gateway_test_utils,
|
||||||
[ assert_confs/2
|
[ assert_confs/2
|
||||||
|
, assert_feilds_apperence/2
|
||||||
, request/2
|
, request/2
|
||||||
, request/3
|
, request/3
|
||||||
]).
|
]).
|
||||||
|
@ -271,10 +272,3 @@ assert_gw_unloaded(Gateway) ->
|
||||||
|
|
||||||
assert_bad_request(BadReq) ->
|
assert_bad_request(BadReq) ->
|
||||||
?assertEqual(<<"BAD_REQUEST">>, maps:get(code, 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) ->
|
maybe_unconvert_listeners(Conf) ->
|
||||||
Conf.
|
Conf.
|
||||||
|
|
||||||
|
assert_feilds_apperence(Ks, Map) ->
|
||||||
|
lists:foreach(fun(K) ->
|
||||||
|
_ = maps:get(K, Map)
|
||||||
|
end, Ks).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% http
|
%% http
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,18 @@
|
||||||
|
|
||||||
-module(emqx_stomp_SUITE).
|
-module(emqx_stomp_SUITE).
|
||||||
|
|
||||||
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
-include_lib("emqx_gateway/src/stomp/include/emqx_stomp.hrl").
|
-include_lib("emqx_gateway/src/stomp/include/emqx_stomp.hrl").
|
||||||
|
|
||||||
-compile(export_all).
|
-compile(export_all).
|
||||||
-compile(nowarn_export_all).
|
-compile(nowarn_export_all).
|
||||||
|
|
||||||
|
-import(emqx_gateway_test_utils,
|
||||||
|
[ assert_feilds_apperence/2
|
||||||
|
, request/2
|
||||||
|
, request/3
|
||||||
|
]).
|
||||||
|
|
||||||
-define(HEARTBEAT, <<$\n>>).
|
-define(HEARTBEAT, <<$\n>>).
|
||||||
|
|
||||||
-define(CONF_DEFAULT, <<"
|
-define(CONF_DEFAULT, <<"
|
||||||
|
@ -43,11 +50,11 @@ all() -> emqx_common_test_helpers:all(?MODULE).
|
||||||
|
|
||||||
init_per_suite(Cfg) ->
|
init_per_suite(Cfg) ->
|
||||||
ok = emqx_config:init_load(emqx_gateway_schema, ?CONF_DEFAULT),
|
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.
|
Cfg.
|
||||||
|
|
||||||
end_per_suite(_Cfg) ->
|
end_per_suite(_Cfg) ->
|
||||||
emqx_common_test_helpers:stop_apps([emqx_gateway]),
|
emqx_mgmt_api_test_util:end_suite([emqx_gateway]),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
@ -339,6 +346,66 @@ t_ack(_) ->
|
||||||
body = _}, _, _} = parse(Data4)
|
body = _}, _, _} = parse(Data4)
|
||||||
end).
|
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,
|
%% TODO: Mountpoint, AuthChain, Authorization + Mountpoint, ClientInfoOverride,
|
||||||
%% Listeners, Metrics, Stats, ClientInfo
|
%% Listeners, Metrics, Stats, ClientInfo
|
||||||
%%
|
%%
|
||||||
|
|
Loading…
Reference in New Issue