From 676572c65a7c0030a3bdc669ef1abe0b1d5cd730 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Wed, 18 Oct 2023 16:18:24 +0200 Subject: [PATCH] fix: use check_schema to simplify API implementation --- apps/emqx_bridge/src/emqx_bridge_v2_api.erl | 16 ++++------------ .../src/schema/emqx_bridge_v2_schema.erl | 6 ++---- .../test/emqx_bridge_v2_api_SUITE.erl | 18 ++++++++++++------ 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/apps/emqx_bridge/src/emqx_bridge_v2_api.erl b/apps/emqx_bridge/src/emqx_bridge_v2_api.erl index d1028ccd5..72d7f14d5 100644 --- a/apps/emqx_bridge/src/emqx_bridge_v2_api.erl +++ b/apps/emqx_bridge/src/emqx_bridge_v2_api.erl @@ -70,7 +70,7 @@ namespace() -> "bridge_v2". api_spec() -> - emqx_dashboard_swagger:spec(?MODULE, #{check_schema => false}). + emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}). paths() -> [ @@ -348,11 +348,7 @@ schema("/bridges_v2_probe") -> ?OK(zip_bridges(AllBridges)); {error, Reason} -> ?INTERNAL_ERROR(Reason) - end; -'/bridges_v2'(post, _Params) -> - ?BAD_REQUEST("Bad Request"); -'/bridges_v2'(_, _) -> - ?METHOD_NOT_ALLOWED. + end. '/bridges_v2/:id'(get, #{bindings := #{id := Id}}) -> ?TRY_PARSE_ID(Id, lookup_from_all_nodes(BridgeType, BridgeName, 200)); @@ -390,9 +386,7 @@ schema("/bridges_v2_probe") -> {error, not_found} -> ?BRIDGE_NOT_FOUND(BridgeType, BridgeName) end - ); -'/bridges_v2/:id'(_, _) -> - ?METHOD_NOT_ALLOWED. + ). '/bridges_v2/:id/enable/:enable'(put, #{bindings := #{id := Id, enable := Enable}}) -> ?TRY_PARSE_ID( @@ -414,9 +408,7 @@ schema("/bridges_v2_probe") -> ?INTERNAL_ERROR(Reason) end end - ); -'/bridges_v2/:id/enable/:enable'(_, _) -> - ?METHOD_NOT_ALLOWED. + ). '/bridges_v2/:id/:operation'(post, #{ bindings := diff --git a/apps/emqx_bridge/src/schema/emqx_bridge_v2_schema.erl b/apps/emqx_bridge/src/schema/emqx_bridge_v2_schema.erl index b2c96c2bc..d6d9cec1d 100644 --- a/apps/emqx_bridge/src/schema/emqx_bridge_v2_schema.erl +++ b/apps/emqx_bridge/src/schema/emqx_bridge_v2_schema.erl @@ -92,16 +92,14 @@ bridge_api_union(Refs) -> undefined -> throw(#{ field_name => type, + value => T, reason => <<"unknown bridge type">> }); Ref -> [Ref] end; _ -> - throw(#{ - field_name => type, - reason => <<"unknown bridge type">> - }) + maps:values(Index) end end. diff --git a/apps/emqx_bridge/test/emqx_bridge_v2_api_SUITE.erl b/apps/emqx_bridge/test/emqx_bridge_v2_api_SUITE.erl index b7c7be5ac..ceeffed46 100644 --- a/apps/emqx_bridge/test/emqx_bridge_v2_api_SUITE.erl +++ b/apps/emqx_bridge/test/emqx_bridge_v2_api_SUITE.erl @@ -367,9 +367,9 @@ t_bridges_lifecycle(Config) -> ), ?assertMatch( - {ok, 404, #{ - <<"code">> := <<"NOT_FOUND">>, - <<"message">> := <<"Invalid operation", _/binary>> + {ok, 400, #{ + <<"code">> := <<"BAD_REQUEST">>, + <<"message">> := _ }}, request_json(post, uri([?ROOT, BridgeID, "brababbel"]), Config) ), @@ -388,7 +388,10 @@ t_bridges_lifecycle(Config) -> request_json( put, uri([?ROOT, BridgeID]), - ?KAFKA_BRIDGE(?BRIDGE_NAME, <<"foobla">>), + maps:without( + [<<"type">>, <<"name">>], + ?KAFKA_BRIDGE(?BRIDGE_NAME, <<"foobla">>) + ), Config ) ), @@ -406,7 +409,10 @@ t_bridges_lifecycle(Config) -> request_json( put, uri([?ROOT, BridgeID]), - ?KAFKA_BRIDGE(?BRIDGE_NAME), + maps:without( + [<<"type">>, <<"name">>], + ?KAFKA_BRIDGE(?BRIDGE_NAME) + ), Config ) ), @@ -489,7 +495,7 @@ do_start_bridge(TestType, Config) -> request_json(get, uri([?ROOT, BridgeID]), Config) ), - {ok, 404, _} = request(post, {operation, TestType, invalidop, BridgeID}, Config), + {ok, 400, _} = request(post, {operation, TestType, invalidop, BridgeID}, Config), %% delete the bridge {ok, 204, <<>>} = request(delete, uri([?ROOT, BridgeID]), Config),