fix(emqx_bridge): unwrap rpc multicall result

This commit is contained in:
Stefan Strigler 2023-02-10 12:00:20 +01:00
parent d1eb788ee1
commit e196d6f42a
2 changed files with 35 additions and 4 deletions

View File

@ -856,7 +856,7 @@ unpack_bridge_conf(Type, PackedConf) ->
is_ok(ok) ->
ok;
is_ok({ok, _} = OkResult) ->
is_ok(OkResult = {ok, _}) ->
OkResult;
is_ok(Error = {error, _}) ->
Error;
@ -933,7 +933,9 @@ maybe_try_restart(_, _, _) ->
{501}.
do_bpapi_call(all, Call, Args) ->
do_bpapi_call_vsn(emqx_bpapi:supported_version(emqx_bridge), Call, Args);
maybe_unwrap(
do_bpapi_call_vsn(emqx_bpapi:supported_version(emqx_bridge), Call, Args)
);
do_bpapi_call(Node, Call, Args) ->
do_bpapi_call_vsn(emqx_bpapi:supported_version(Node, emqx_bridge), Call, Args).
@ -945,6 +947,11 @@ do_bpapi_call_vsn(SupportedVersion, Call, Args) ->
{error, not_implemented}
end.
maybe_unwrap({error, not_implemented}) ->
{error, not_implemented};
maybe_unwrap(RpcMulticallResult) ->
emqx_rpc:unwrap_erpc(RpcMulticallResult).
supported_versions(start_bridge_to_node) -> [2];
supported_versions(start_bridges_to_all_nodes) -> [2];
supported_versions(_Call) -> [1, 2].

View File

@ -38,12 +38,16 @@
<<"type">> => TYPE,
<<"name">> => NAME
}).
-define(MQTT_BRIDGE(SERVER), ?BRIDGE(<<"mqtt_egress_test_bridge">>, <<"mqtt">>)#{
-define(BRIDGE_TYPE_MQTT, <<"mqtt">>).
-define(MQTT_BRIDGE(SERVER, NAME), ?BRIDGE(NAME, ?BRIDGE_TYPE_MQTT)#{
<<"server">> => SERVER,
<<"username">> => <<"user1">>,
<<"password">> => <<"">>,
<<"proto_ver">> => <<"v5">>
}).
-define(MQTT_BRIDGE(SERVER), ?MQTT_BRIDGE(SERVER, <<"mqtt_egress_test_bridge">>)).
-define(HTTP_BRIDGE(URL, TYPE, NAME), ?BRIDGE(NAME, TYPE)#{
<<"url">> => URL,
<<"local_topic">> => <<"emqx_webhook/#">>,
@ -536,7 +540,27 @@ do_start_stop_bridges(Type, Config) ->
?assertMatch(#{<<"status">> := <<"connected">>}, jsx:decode(Bridge4)),
%% delete the bridge
{ok, 204, <<>>} = request(delete, uri(["bridges", BridgeID]), []),
{ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []).
{ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []),
%% Create broken bridge
BadServer = <<"nohost">>,
BadName = <<"bad_", (atom_to_binary(Type))/binary>>,
{ok, 201, BadBridge1} = request(
post,
uri(["bridges"]),
?MQTT_BRIDGE(BadServer, BadName)
),
#{
<<"type">> := ?BRIDGE_TYPE_MQTT,
<<"name">> := BadName,
<<"enable">> := true,
<<"server">> := BadServer,
<<"status">> := <<"disconnected">>,
<<"node_status">> := [_ | _]
} = jsx:decode(BadBridge1),
BadBridgeID = emqx_bridge_resource:bridge_id(?BRIDGE_TYPE_MQTT, BadName),
{ok, 500, _} = request(post, operation_path(Type, start, BadBridgeID), <<"">>),
ok.
t_enable_disable_bridges(Config) ->
%% assert we there's no bridges at first