From 3a6ad3b0495452968cdf7fe967c491ffe10f2b59 Mon Sep 17 00:00:00 2001 From: Paulo Zulato Date: Tue, 30 May 2023 21:28:43 -0300 Subject: [PATCH] fix(oracle): require either sid or service name Fixes https://emqx.atlassian.net/browse/EMQX-9980 --- .../src/emqx_bridge_oracle.app.src | 2 +- apps/emqx_bridge_oracle/src/emqx_bridge_oracle.erl | 12 +++++++++++- .../test/emqx_bridge_oracle_SUITE.erl | 12 ++++++++++++ changes/ee/feat-10892.en.md | 1 + lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl | 1 + 5 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 changes/ee/feat-10892.en.md diff --git a/apps/emqx_bridge_oracle/src/emqx_bridge_oracle.app.src b/apps/emqx_bridge_oracle/src/emqx_bridge_oracle.app.src index 4a2549f7c..ad96b4744 100644 --- a/apps/emqx_bridge_oracle/src/emqx_bridge_oracle.app.src +++ b/apps/emqx_bridge_oracle/src/emqx_bridge_oracle.app.src @@ -1,6 +1,6 @@ {application, emqx_bridge_oracle, [ {description, "EMQX Enterprise Oracle Database Bridge"}, - {vsn, "0.1.1"}, + {vsn, "0.1.2"}, {registered, []}, {applications, [ kernel, diff --git a/apps/emqx_bridge_oracle/src/emqx_bridge_oracle.erl b/apps/emqx_bridge_oracle/src/emqx_bridge_oracle.erl index 7f384c5e6..500059967 100644 --- a/apps/emqx_bridge_oracle/src/emqx_bridge_oracle.erl +++ b/apps/emqx_bridge_oracle/src/emqx_bridge_oracle.erl @@ -16,7 +16,8 @@ namespace/0, roots/0, fields/1, - desc/1 + desc/1, + config_validator/1 ]). -define(DEFAULT_SQL, << @@ -107,3 +108,12 @@ type_field(Type) -> name_field() -> {name, hoconsc:mk(binary(), #{required => true, desc => ?DESC("desc_name")})}. + +config_validator(#{<<"server">> := Server} = Config) when + not is_map(Server) andalso + not is_map_key(<<"sid">>, Config) andalso + not is_map_key(<<"service_name">>, Config) +-> + {error, "neither SID nor Service Name was set"}; +config_validator(_) -> + ok. diff --git a/apps/emqx_bridge_oracle/test/emqx_bridge_oracle_SUITE.erl b/apps/emqx_bridge_oracle/test/emqx_bridge_oracle_SUITE.erl index 721beab6e..2e72458b6 100644 --- a/apps/emqx_bridge_oracle/test/emqx_bridge_oracle_SUITE.erl +++ b/apps/emqx_bridge_oracle/test/emqx_bridge_oracle_SUITE.erl @@ -517,3 +517,15 @@ t_on_get_status(Config) -> ?assertEqual({ok, connected}, emqx_resource_manager:health_check(ResourceId)) ), ok. + +t_no_sid_nor_service_name(Config0) -> + OracleConfig0 = ?config(oracle_config, Config0), + OracleConfig1 = maps:remove(<<"sid">>, OracleConfig0), + OracleConfig = maps:remove(<<"service_name">>, OracleConfig1), + NewOracleConfig = {oracle_config, OracleConfig}, + Config = lists:keyreplace(oracle_config, 1, Config0, NewOracleConfig), + ?assertMatch( + {error, #{kind := validation_error}}, + create_bridge(Config) + ), + ok. diff --git a/changes/ee/feat-10892.en.md b/changes/ee/feat-10892.en.md new file mode 100644 index 000000000..8802f3b36 --- /dev/null +++ b/changes/ee/feat-10892.en.md @@ -0,0 +1 @@ +Require that SID or Service Name is set on Oracle Database bridge creation. diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl index be42a913a..42e10179e 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl @@ -186,6 +186,7 @@ fields(bridges) -> hoconsc:map(name, ref(emqx_bridge_oracle, "config")), #{ desc => <<"Oracle Bridge Config">>, + validator => fun emqx_bridge_oracle:config_validator/1, required => false } )},