Merge pull request #11876 from sstrigler/EMQX-11317-creating-a-bridge-for-a-non-existent-or-non-matching-connector-results-in-a-crash
handle errors from pre/post_config_update
This commit is contained in:
commit
8a1b370a5e
|
@ -745,7 +745,12 @@ create_or_update_bridge(BridgeType, BridgeName, Conf, HttpStatusCode) ->
|
||||||
case emqx_bridge_v2:create(BridgeType, BridgeName, Conf) of
|
case emqx_bridge_v2:create(BridgeType, BridgeName, Conf) of
|
||||||
{ok, _} ->
|
{ok, _} ->
|
||||||
lookup_from_all_nodes(BridgeType, BridgeName, HttpStatusCode);
|
lookup_from_all_nodes(BridgeType, BridgeName, HttpStatusCode);
|
||||||
{error, Reason} when is_map(Reason) ->
|
{error, {PreOrPostConfigUpdate, _HandlerMod, Reason}} when
|
||||||
|
PreOrPostConfigUpdate =:= pre_config_update;
|
||||||
|
PreOrPostConfigUpdate =:= post_config_update
|
||||||
|
->
|
||||||
|
?BAD_REQUEST(map_to_json(redact(Reason)));
|
||||||
|
{error, Reason} ->
|
||||||
?BAD_REQUEST(map_to_json(redact(Reason)))
|
?BAD_REQUEST(map_to_json(redact(Reason)))
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
|
@ -100,6 +100,11 @@
|
||||||
}).
|
}).
|
||||||
-define(KAFKA_BRIDGE(Name), ?KAFKA_BRIDGE(Name, ?CONNECTOR_NAME)).
|
-define(KAFKA_BRIDGE(Name), ?KAFKA_BRIDGE(Name, ?CONNECTOR_NAME)).
|
||||||
|
|
||||||
|
-define(KAFKA_BRIDGE_UPDATE(Name, Connector),
|
||||||
|
maps:without([<<"name">>, <<"type">>], ?KAFKA_BRIDGE(Name, Connector))
|
||||||
|
).
|
||||||
|
-define(KAFKA_BRIDGE_UPDATE(Name), ?KAFKA_BRIDGE_UPDATE(Name, ?CONNECTOR_NAME)).
|
||||||
|
|
||||||
%% -define(BRIDGE_TYPE_MQTT, <<"mqtt">>).
|
%% -define(BRIDGE_TYPE_MQTT, <<"mqtt">>).
|
||||||
%% -define(MQTT_BRIDGE(SERVER, NAME), ?BRIDGE(NAME, ?BRIDGE_TYPE_MQTT)#{
|
%% -define(MQTT_BRIDGE(SERVER, NAME), ?BRIDGE(NAME, ?BRIDGE_TYPE_MQTT)#{
|
||||||
%% <<"server">> => SERVER,
|
%% <<"server">> => SERVER,
|
||||||
|
@ -399,18 +404,102 @@ t_bridges_lifecycle(Config) ->
|
||||||
request_json(
|
request_json(
|
||||||
put,
|
put,
|
||||||
uri([?ROOT, BridgeID]),
|
uri([?ROOT, BridgeID]),
|
||||||
maps:without(
|
?KAFKA_BRIDGE_UPDATE(?BRIDGE_NAME, <<"foobla">>),
|
||||||
[<<"type">>, <<"name">>],
|
|
||||||
?KAFKA_BRIDGE(?BRIDGE_NAME, <<"foobla">>)
|
|
||||||
),
|
|
||||||
Config
|
Config
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
||||||
|
%% update bridge with unknown connector name
|
||||||
|
{ok, 400, #{
|
||||||
|
<<"code">> := <<"BAD_REQUEST">>,
|
||||||
|
<<"message">> := Message1
|
||||||
|
}} =
|
||||||
|
request_json(
|
||||||
|
put,
|
||||||
|
uri([?ROOT, BridgeID]),
|
||||||
|
?KAFKA_BRIDGE_UPDATE(?BRIDGE_NAME, <<"does_not_exist">>),
|
||||||
|
Config
|
||||||
|
),
|
||||||
|
?assertMatch(
|
||||||
|
#{<<"reason">> := <<"connector_not_found_or_wrong_type">>},
|
||||||
|
emqx_utils_json:decode(Message1)
|
||||||
|
),
|
||||||
|
|
||||||
|
%% update bridge with connector of wrong type
|
||||||
|
{ok, 201, _} =
|
||||||
|
request(
|
||||||
|
post,
|
||||||
|
uri(["connectors"]),
|
||||||
|
(?CONNECTOR(<<"foobla2">>))#{
|
||||||
|
<<"type">> => <<"azure_event_hub_producer">>,
|
||||||
|
<<"authentication">> => #{
|
||||||
|
<<"username">> => <<"emqxuser">>,
|
||||||
|
<<"password">> => <<"topSecret">>,
|
||||||
|
<<"mechanism">> => <<"plain">>
|
||||||
|
},
|
||||||
|
<<"ssl">> => #{
|
||||||
|
<<"enable">> => true,
|
||||||
|
<<"server_name_indication">> => <<"auto">>,
|
||||||
|
<<"verify">> => <<"verify_none">>,
|
||||||
|
<<"versions">> => [<<"tlsv1.3">>, <<"tlsv1.2">>]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Config
|
||||||
|
),
|
||||||
|
{ok, 400, #{
|
||||||
|
<<"code">> := <<"BAD_REQUEST">>,
|
||||||
|
<<"message">> := Message2
|
||||||
|
}} =
|
||||||
|
request_json(
|
||||||
|
put,
|
||||||
|
uri([?ROOT, BridgeID]),
|
||||||
|
?KAFKA_BRIDGE_UPDATE(?BRIDGE_NAME, <<"foobla2">>),
|
||||||
|
Config
|
||||||
|
),
|
||||||
|
?assertMatch(
|
||||||
|
#{<<"reason">> := <<"connector_not_found_or_wrong_type">>},
|
||||||
|
emqx_utils_json:decode(Message2)
|
||||||
|
),
|
||||||
|
|
||||||
%% delete the bridge
|
%% delete the bridge
|
||||||
{ok, 204, <<>>} = request(delete, uri([?ROOT, BridgeID]), Config),
|
{ok, 204, <<>>} = request(delete, uri([?ROOT, BridgeID]), Config),
|
||||||
{ok, 200, []} = request_json(get, uri([?ROOT]), Config),
|
{ok, 200, []} = request_json(get, uri([?ROOT]), Config),
|
||||||
|
|
||||||
|
%% try create with unknown connector name
|
||||||
|
{ok, 400, #{
|
||||||
|
<<"code">> := <<"BAD_REQUEST">>,
|
||||||
|
<<"message">> := Message3
|
||||||
|
}} =
|
||||||
|
request_json(
|
||||||
|
post,
|
||||||
|
uri([?ROOT]),
|
||||||
|
?KAFKA_BRIDGE(?BRIDGE_NAME, <<"does_not_exist">>),
|
||||||
|
Config
|
||||||
|
),
|
||||||
|
?assertMatch(
|
||||||
|
#{<<"reason">> := <<"connector_not_found_or_wrong_type">>},
|
||||||
|
emqx_utils_json:decode(Message3)
|
||||||
|
),
|
||||||
|
|
||||||
|
%% try create bridge with connector of wrong type
|
||||||
|
{ok, 400, #{
|
||||||
|
<<"code">> := <<"BAD_REQUEST">>,
|
||||||
|
<<"message">> := Message4
|
||||||
|
}} =
|
||||||
|
request_json(
|
||||||
|
post,
|
||||||
|
uri([?ROOT]),
|
||||||
|
?KAFKA_BRIDGE(?BRIDGE_NAME, <<"foobla2">>),
|
||||||
|
Config
|
||||||
|
),
|
||||||
|
?assertMatch(
|
||||||
|
#{<<"reason">> := <<"connector_not_found_or_wrong_type">>},
|
||||||
|
emqx_utils_json:decode(Message4)
|
||||||
|
),
|
||||||
|
|
||||||
|
%% make sure nothing has been created above
|
||||||
|
{ok, 200, []} = request_json(get, uri([?ROOT]), Config),
|
||||||
|
|
||||||
%% update a deleted bridge returns an error
|
%% update a deleted bridge returns an error
|
||||||
?assertMatch(
|
?assertMatch(
|
||||||
{ok, 404, #{
|
{ok, 404, #{
|
||||||
|
@ -420,15 +509,12 @@ t_bridges_lifecycle(Config) ->
|
||||||
request_json(
|
request_json(
|
||||||
put,
|
put,
|
||||||
uri([?ROOT, BridgeID]),
|
uri([?ROOT, BridgeID]),
|
||||||
maps:without(
|
?KAFKA_BRIDGE_UPDATE(?BRIDGE_NAME),
|
||||||
[<<"type">>, <<"name">>],
|
|
||||||
?KAFKA_BRIDGE(?BRIDGE_NAME)
|
|
||||||
),
|
|
||||||
Config
|
Config
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
||||||
%% Deleting a non-existing bridge should result in an error
|
%% deleting a non-existing bridge should result in an error
|
||||||
?assertMatch(
|
?assertMatch(
|
||||||
{ok, 404, #{
|
{ok, 404, #{
|
||||||
<<"code">> := <<"NOT_FOUND">>,
|
<<"code">> := <<"NOT_FOUND">>,
|
||||||
|
|
Loading…
Reference in New Issue