Merge pull request #10909 from HJianBo/remove-deprecated-gateways

feat: remove the deprecated '/gateway/*' HTTP APIs
This commit is contained in:
JianBo He 2023-06-05 09:59:50 +08:00 committed by GitHub
commit e07c86b6a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 29 additions and 94 deletions

View File

@ -63,11 +63,11 @@ api_spec() ->
emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}). emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}).
paths() -> paths() ->
emqx_gateway_utils:make_deprecated_paths([ [
"/gateways", "/gateways",
"/gateways/:name", "/gateways/:name",
"/gateways/:name/enable/:enable" "/gateways/:name/enable/:enable"
]). ].
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% http handlers %% http handlers
@ -240,9 +240,7 @@ schema("/gateways/:name/enable/:enable") ->
) )
} }
} }
}; }.
schema(Path) ->
emqx_gateway_utils:make_compatible_schema(Path, fun schema/1).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% params defines %% params defines

View File

@ -61,11 +61,11 @@ api_spec() ->
emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}). emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}).
paths() -> paths() ->
emqx_gateway_utils:make_deprecated_paths([ [
"/gateways/:name/authentication", "/gateways/:name/authentication",
"/gateways/:name/authentication/users", "/gateways/:name/authentication/users",
"/gateways/:name/authentication/users/:uid" "/gateways/:name/authentication/users/:uid"
]). ].
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% http handlers %% http handlers
@ -318,9 +318,8 @@ schema("/gateways/:name/authentication/users/:uid") ->
responses => responses =>
?STANDARD_RESP(#{204 => <<"User Deleted">>}) ?STANDARD_RESP(#{204 => <<"User Deleted">>})
} }
}; }.
schema(Path) ->
emqx_gateway_utils:make_compatible_schema(Path, fun schema/1).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% params defines %% params defines

View File

@ -55,10 +55,10 @@ api_spec() ->
emqx_dashboard_swagger:spec(?MODULE, #{check_schema => false}). emqx_dashboard_swagger:spec(?MODULE, #{check_schema => false}).
paths() -> paths() ->
emqx_gateway_utils:make_deprecated_paths([ [
"/gateways/:name/authentication/import_users", "/gateways/:name/authentication/import_users",
"/gateways/:name/listeners/:id/authentication/import_users" "/gateways/:name/listeners/:id/authentication/import_users"
]). ].
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% http handlers %% http handlers
@ -147,9 +147,7 @@ schema("/gateways/:name/listeners/:id/authentication/import_users") ->
responses => responses =>
?STANDARD_RESP(#{204 => <<"Imported">>}) ?STANDARD_RESP(#{204 => <<"Imported">>})
} }
}; }.
schema(Path) ->
emqx_gateway_utils:make_compatible_schema(Path, fun schema/1).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% params defines %% params defines

View File

@ -70,12 +70,12 @@ api_spec() ->
emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true, translate_body => true}). emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true, translate_body => true}).
paths() -> paths() ->
emqx_gateway_utils:make_deprecated_paths([ [
"/gateways/:name/clients", "/gateways/:name/clients",
"/gateways/:name/clients/:clientid", "/gateways/:name/clients/:clientid",
"/gateways/:name/clients/:clientid/subscriptions", "/gateways/:name/clients/:clientid/subscriptions",
"/gateways/:name/clients/:clientid/subscriptions/:topic" "/gateways/:name/clients/:clientid/subscriptions/:topic"
]). ].
-define(CLIENT_QSCHEMA, [ -define(CLIENT_QSCHEMA, [
{<<"node">>, atom}, {<<"node">>, atom},
@ -541,9 +541,7 @@ schema("/gateways/:name/clients/:clientid/subscriptions/:topic") ->
responses => responses =>
?STANDARD_RESP(#{204 => <<"Unsubscribed">>}) ?STANDARD_RESP(#{204 => <<"Unsubscribed">>})
} }
}; }.
schema(Path) ->
emqx_gateway_utils:make_compatible_schema(Path, fun schema/1).
params_client_query() -> params_client_query() ->
params_gateway_name_in_path() ++ params_gateway_name_in_path() ++

View File

@ -70,13 +70,13 @@ api_spec() ->
emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}). emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}).
paths() -> paths() ->
emqx_gateway_utils:make_deprecated_paths([ [
"/gateways/:name/listeners", "/gateways/:name/listeners",
"/gateways/:name/listeners/:id", "/gateways/:name/listeners/:id",
"/gateways/:name/listeners/:id/authentication", "/gateways/:name/listeners/:id/authentication",
"/gateways/:name/listeners/:id/authentication/users", "/gateways/:name/listeners/:id/authentication/users",
"/gateways/:name/listeners/:id/authentication/users/:uid" "/gateways/:name/listeners/:id/authentication/users/:uid"
]). ].
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% http handlers %% http handlers
@ -590,9 +590,7 @@ schema("/gateways/:name/listeners/:id/authentication/users/:uid") ->
responses => responses =>
?STANDARD_RESP(#{204 => <<"Deleted">>}) ?STANDARD_RESP(#{204 => <<"Deleted">>})
} }
}; }.
schema(Path) ->
emqx_gateway_utils:make_compatible_schema(Path, fun schema/1).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% params defines %% params defines

View File

@ -45,8 +45,6 @@
is_running/2, is_running/2,
global_chain/1, global_chain/1,
listener_chain/3, listener_chain/3,
make_deprecated_paths/1,
make_compatible_schema/2,
find_gateway_definitions/0 find_gateway_definitions/0
]). ]).
@ -531,39 +529,6 @@ default_subopts() ->
is_new => true is_new => true
}. }.
%% Since 5.0.8, the API path of the gateway has been changed from "gateway" to "gateways"
%% and we need to be compatible with the old path
get_compatible_path("/gateway") ->
"/gateways";
get_compatible_path("/gateway/" ++ Rest) ->
"/gateways/" ++ Rest.
get_deprecated_path("/gateways") ->
"/gateway";
get_deprecated_path("/gateways/" ++ Rest) ->
"/gateway/" ++ Rest.
make_deprecated_paths(Paths) ->
Paths ++ [get_deprecated_path(Path) || Path <- Paths].
make_compatible_schema(Path, SchemaFun) ->
OldPath = get_compatible_path(Path),
make_compatible_schema2(OldPath, SchemaFun).
make_compatible_schema2(Path, SchemaFun) ->
Schema = SchemaFun(Path),
maps:map(
fun(Key, Value) ->
case lists:member(Key, [get, delete, put, post]) of
true ->
Value#{deprecated => true};
_ ->
Value
end
end,
Schema
).
-spec find_gateway_definitions() -> list(gateway_def()). -spec find_gateway_definitions() -> list(gateway_def()).
find_gateway_definitions() -> find_gateway_definitions() ->
lists:flatten( lists:flatten(

View File

@ -107,9 +107,9 @@ t_gateway(_) ->
StompGw StompGw
), ),
{204, _} = request(put, "/gateways/stomp", #{enable => true}), {204, _} = request(put, "/gateways/stomp", #{enable => true}),
{200, #{enable := true}} = request(get, "/gateway/stomp"), {200, #{enable := true}} = request(get, "/gateways/stomp"),
{204, _} = request(put, "/gateways/stomp", #{enable => false}), {204, _} = request(put, "/gateways/stomp", #{enable => false}),
{200, #{enable := false}} = request(get, "/gateway/stomp"), {200, #{enable := false}} = request(get, "/gateways/stomp"),
{404, _} = request(put, "/gateways/undefined", #{}), {404, _} = request(put, "/gateways/undefined", #{}),
{400, _} = request(put, "/gateways/stomp", #{bad_key => "foo"}), {400, _} = request(put, "/gateways/stomp", #{bad_key => "foo"}),
ok. ok.
@ -121,27 +121,14 @@ t_gateway_fail(_) ->
{400, _} = request(put, "/gateways/coap", #{}), {400, _} = request(put, "/gateways/coap", #{}),
ok. ok.
t_deprecated_gateway(_) ->
{200, Gateways} = request(get, "/gateway"),
lists:foreach(fun assert_gw_unloaded/1, Gateways),
{404, NotFoundReq} = request(get, "/gateway/uname_gateway"),
assert_not_found(NotFoundReq),
{204, _} = request(put, "/gateway/stomp", #{}),
{200, StompGw} = request(get, "/gateway/stomp"),
assert_fields_exist(
[name, status, enable, created_at, started_at],
StompGw
),
ok.
t_gateway_enable(_) -> t_gateway_enable(_) ->
{204, _} = request(put, "/gateways/stomp", #{}), {204, _} = request(put, "/gateways/stomp", #{}),
{200, #{enable := Enable}} = request(get, "/gateway/stomp"), {200, #{enable := Enable}} = request(get, "/gateways/stomp"),
NotEnable = not Enable, NotEnable = not Enable,
{204, _} = request(put, "/gateways/stomp/enable/" ++ atom_to_list(NotEnable), undefined), {204, _} = request(put, "/gateways/stomp/enable/" ++ atom_to_list(NotEnable), undefined),
{200, #{enable := NotEnable}} = request(get, "/gateway/stomp"), {200, #{enable := NotEnable}} = request(get, "/gateways/stomp"),
{204, _} = request(put, "/gateways/stomp/enable/" ++ atom_to_list(Enable), undefined), {204, _} = request(put, "/gateways/stomp/enable/" ++ atom_to_list(Enable), undefined),
{200, #{enable := Enable}} = request(get, "/gateway/stomp"), {200, #{enable := Enable}} = request(get, "/gateways/stomp"),
{404, _} = request(put, "/gateways/undefined/enable/true", undefined), {404, _} = request(put, "/gateways/undefined/enable/true", undefined),
{404, _} = request(put, "/gateways/not_a_known_atom/enable/true", undefined), {404, _} = request(put, "/gateways/not_a_known_atom/enable/true", undefined),
{404, _} = request(put, "/gateways/coap/enable/true", undefined), {404, _} = request(put, "/gateways/coap/enable/true", undefined),

View File

@ -46,7 +46,7 @@ api_spec() ->
emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true, translate_body => true}). emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true, translate_body => true}).
paths() -> paths() ->
emqx_gateway_utils:make_deprecated_paths([?PREFIX ++ "/request"]). [?PREFIX ++ "/request"].
schema(?PREFIX ++ "/request") -> schema(?PREFIX ++ "/request") ->
#{ #{
@ -65,9 +65,7 @@ schema(?PREFIX ++ "/request") ->
) )
} }
} }
}; }.
schema(Path) ->
emqx_gateway_utils:make_compatible_schema(Path, fun schema/1).
request(post, #{body := Body, bindings := Bindings}) -> request(post, #{body := Body, bindings := Bindings}) ->
ClientId = maps:get(clientid, Bindings, undefined), ClientId = maps:get(clientid, Bindings, undefined),

View File

@ -97,8 +97,6 @@ t_send_request_api(_) ->
?assertEqual(Payload, RPayload) ?assertEqual(Payload, RPayload)
end, end,
Test("gateways/coap/clients/client1/request"), Test("gateways/coap/clients/client1/request"),
timer:sleep(100),
Test("gateway/coap/clients/client1/request"),
erlang:exit(ClientId, kill), erlang:exit(ClientId, kill),
ok. ok.

View File

@ -1,6 +1,6 @@
{application, emqx_gateway_lwm2m, [ {application, emqx_gateway_lwm2m, [
{description, "LwM2M Gateway"}, {description, "LwM2M Gateway"},
{vsn, "0.1.0"}, {vsn, "0.1.1"},
{registered, []}, {registered, []},
{applications, [kernel, stdlib, emqx, emqx_gateway, emqx_gateway_coap]}, {applications, [kernel, stdlib, emqx, emqx_gateway, emqx_gateway_coap]},
{env, []}, {env, []},

View File

@ -40,9 +40,9 @@ api_spec() ->
emqx_dashboard_swagger:spec(?MODULE). emqx_dashboard_swagger:spec(?MODULE).
paths() -> paths() ->
emqx_gateway_utils:make_deprecated_paths([ [
?PATH("/lookup"), ?PATH("/observe"), ?PATH("/read"), ?PATH("/write") ?PATH("/lookup"), ?PATH("/observe"), ?PATH("/read"), ?PATH("/write")
]). ].
schema(?PATH("/lookup")) -> schema(?PATH("/lookup")) ->
#{ #{
@ -127,9 +127,7 @@ schema(?PATH("/write")) ->
404 => error_codes(['CLIENT_NOT_FOUND'], <<"Clientid not found">>) 404 => error_codes(['CLIENT_NOT_FOUND'], <<"Clientid not found">>)
} }
} }
}; }.
schema(Path) ->
emqx_gateway_utils:make_compatible_schema(Path, fun schema/1).
fields(resource) -> fields(resource) ->
[ [

View File

@ -306,7 +306,7 @@ t_observe(Config) ->
test_recv_mqtt_response(RespTopic), test_recv_mqtt_response(RespTopic),
%% step2, call observe API %% step2, call observe API
?assertMatch({204, []}, call_deprecated_send_api(Epn, "observe", "path=/3/0/1&enable=false")), ?assertMatch({204, []}, call_send_api(Epn, "observe", "path=/3/0/1&enable=false")),
timer:sleep(100), timer:sleep(100),
#coap_message{type = Type, method = Method, options = Opts} = test_recv_coap_request(UdpSock), #coap_message{type = Type, method = Method, options = Opts} = test_recv_coap_request(UdpSock),
?assertEqual(con, Type), ?assertEqual(con, Type),
@ -328,9 +328,6 @@ call_lookup_api(ClientId, Path, Action) ->
call_send_api(ClientId, Cmd, Query) -> call_send_api(ClientId, Cmd, Query) ->
call_send_api(ClientId, Cmd, Query, "gateways/lwm2m/clients"). call_send_api(ClientId, Cmd, Query, "gateways/lwm2m/clients").
call_deprecated_send_api(ClientId, Cmd, Query) ->
call_send_api(ClientId, Cmd, Query, "gateway/lwm2m/clients").
call_send_api(ClientId, Cmd, Query, API) -> call_send_api(ClientId, Cmd, Query, API) ->
ApiPath = emqx_mgmt_api_test_util:api_path([API, ClientId, Cmd]), ApiPath = emqx_mgmt_api_test_util:api_path([API, ClientId, Cmd]),
Auth = emqx_mgmt_api_test_util:auth_header_(), Auth = emqx_mgmt_api_test_util:auth_header_(),

View File

@ -0,0 +1 @@
Remove the deprecated HTTP APIs for gateways