diff --git a/apps/emqx_bridge/test/emqx_bridge_v2_testlib.erl b/apps/emqx_bridge/test/emqx_bridge_v2_testlib.erl index bbcd04293..47bfc51e7 100644 --- a/apps/emqx_bridge/test/emqx_bridge_v2_testlib.erl +++ b/apps/emqx_bridge/test/emqx_bridge_v2_testlib.erl @@ -692,7 +692,6 @@ t_consume(Config, Opts) -> ) ), ok = add_source_hookpoint(Config), - ResourceId = resource_id(Config), ?retry( _Sleep = 200, _Attempts = 20, @@ -732,6 +731,13 @@ t_create_via_http(Config) -> Config ) ), + + %% check that v1 list API is fine + ?assertMatch( + {ok, {{_, 200, _}, _, _}}, + list_bridges_http_api_v1() + ), + ok end, [] diff --git a/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_consumer_action_info.erl b/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_consumer_action_info.erl index 0e602e610..52420aa7a 100644 --- a/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_consumer_action_info.erl +++ b/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_consumer_action_info.erl @@ -60,8 +60,9 @@ connector_action_config_to_bridge_v1_config(ConnectorConfig, SourceConfig) -> fun(RO) -> maps:with(bridge_v1_resource_opts_fields(), RO) end, BridgeV1Config2 ), - BridgeV1Config4 = emqx_utils_maps:deep_remove([<<"parameters">>, <<"topic">>], BridgeV1Config3), - emqx_utils_maps:rename(<<"parameters">>, <<"consumer">>, BridgeV1Config4). + BridgeV1Config4 = maybe_fabricate_topic_mapping(BridgeV1Config3), + BridgeV1Config = emqx_utils_maps:deep_remove([<<"parameters">>, <<"topic">>], BridgeV1Config4), + emqx_utils_maps:rename(<<"parameters">>, <<"consumer">>, BridgeV1Config). %%------------------------------------------------------------------------------------------ %% Internal helper fns @@ -74,6 +75,23 @@ maybe_set_pubsub_topic(#{<<"topic_mapping">> := [#{<<"pubsub_topic">> := Topic} maybe_set_pubsub_topic(Params) -> Params. +%% The old schema requires `topic_mapping', which is now hidden. +maybe_fabricate_topic_mapping(#{<<"parameters">> := Params0} = BridgeV1Config0) -> + #{<<"topic">> := Topic} = Params0, + case maps:get(<<"topic_mapping">>, Params0, undefined) of + [_ | _] -> + BridgeV1Config0; + _ -> + %% Have to fabricate an MQTT topic, unfortunately... QoS and payload already + %% have defaults. + FakeTopicMapping = #{ + <<"pubsub_topic">> => Topic, + <<"mqtt_topic">> => <<>> + }, + Params = Params0#{<<"topic_mapping">> => [FakeTopicMapping]}, + BridgeV1Config0#{<<"parameters">> := Params} + end. + resource_opts_fields() -> [ to_bin(K) diff --git a/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_consumer_worker.erl b/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_consumer_worker.erl index 5161839f2..b3c1b92d7 100644 --- a/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_consumer_worker.erl +++ b/apps/emqx_bridge_gcp_pubsub/src/emqx_bridge_gcp_pubsub_consumer_worker.erl @@ -783,7 +783,7 @@ legacy_maybe_publish_mqtt_message( }, SourceResId, FullMessage -) -> +) when MQTTTopic =/= <<>> -> Payload = render(FullMessage, PayloadTemplate), MQTTMessage = emqx_message:make(SourceResId, MQTTQoS, MQTTTopic, Payload), _ = emqx:publish(MQTTMessage), diff --git a/apps/emqx_bridge_gcp_pubsub/test/emqx_bridge_v2_gcp_pubsub_consumer_SUITE.erl b/apps/emqx_bridge_gcp_pubsub/test/emqx_bridge_v2_gcp_pubsub_consumer_SUITE.erl index 8a4362bf3..32d006a89 100644 --- a/apps/emqx_bridge_gcp_pubsub/test/emqx_bridge_v2_gcp_pubsub_consumer_SUITE.erl +++ b/apps/emqx_bridge_gcp_pubsub/test/emqx_bridge_v2_gcp_pubsub_consumer_SUITE.erl @@ -35,7 +35,8 @@ common_init_per_testcase(TestCase, Config0) -> ServiceAccountJSON = #{<<"project_id">> := ProjectId} = emqx_bridge_gcp_pubsub_utils:generate_service_account_json(), - Name = atom_to_binary(TestCase), + UniqueNum = integer_to_binary(erlang:unique_integer()), + Name = <<(atom_to_binary(TestCase))/binary, UniqueNum/binary>>, ConnectorConfig = connector_config(Name, ServiceAccountJSON), PubsubTopic = Name, SourceConfig = source_config(#{ @@ -117,6 +118,10 @@ t_start_stop(Config) -> ok = emqx_bridge_v2_testlib:t_start_stop(Config, gcp_pubsub_stop), ok. +t_create_via_http(Config) -> + ok = emqx_bridge_v2_testlib:t_create_via_http(Config), + ok. + t_consume(Config) -> Topic = ?config(pubsub_topic, Config), Payload = #{<<"key">> => <<"value">>},