From c635e7306dc151f41ea3b22c42d32db34e20bf72 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 10 Feb 2022 14:19:14 +0100 Subject: [PATCH] feat: Add mysql tests for connector --- .../test/emqx_connector_mysql_SUITE.erl | 132 ++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 apps/emqx_connector/test/emqx_connector_mysql_SUITE.erl diff --git a/apps/emqx_connector/test/emqx_connector_mysql_SUITE.erl b/apps/emqx_connector/test/emqx_connector_mysql_SUITE.erl new file mode 100644 index 000000000..7ffca4c39 --- /dev/null +++ b/apps/emqx_connector/test/emqx_connector_mysql_SUITE.erl @@ -0,0 +1,132 @@ +% %%-------------------------------------------------------------------- +% %% Copyright (c) 2020-2022 EMQ Technologies Co., Ltd. All Rights Reserved. +% %% +% %% Licensed under the Apache License, Version 2.0 (the "License"); +% %% you may not use this file except in compliance with the License. +% %% You may obtain a copy of the License at +% %% http://www.apache.org/licenses/LICENSE-2.0 +% %% +% %% Unless required by applicable law or agreed to in writing, software +% %% distributed under the License is distributed on an "AS IS" BASIS, +% %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +% %% See the License for the specific language governing permissions and +% %% limitations under the License. +% %%-------------------------------------------------------------------- + +-module(emqx_connector_mysql_SUITE). + +-compile(nowarn_export_all). +-compile(export_all). + +-include_lib("eunit/include/eunit.hrl"). +-include_lib("emqx/include/emqx.hrl"). +-include_lib("stdlib/include/assert.hrl"). + +-define(MYSQL_HOST, "mysql"). +-define(MYSQL_PORT, 3306). + +all() -> + emqx_common_test_helpers:all(?MODULE). + +groups() -> + []. + +init_per_suite(Config) -> + case emqx_common_test_helpers:is_tcp_server_available(?MYSQL_HOST, ?MYSQL_PORT) of + true -> + Config; + false -> + {skip, no_mysql} + end. + +end_per_suite(_Config) -> + ok. + +init_per_testcase(_, Config) -> + ?assertEqual( + {ok, #{poolname => emqx_connector_mysql}}, + emqx_connector_mysql:on_start(<<"emqx_connector_mysql">>, mysql_config()) + ), + Config. + +end_per_testcase(_, _Config) -> + ?assertEqual( + ok, + emqx_connector_mysql:on_stop(<<"emqx_connector_mysql">>, #{poolname => emqx_connector_mysql}) + ). + +% %%------------------------------------------------------------------------------ +% %% Testcases +% %%------------------------------------------------------------------------------ + +% Simple test to make sure the proper reference to the module is returned. +t_roots(_Config) -> + ExpectedRoots = [{config, #{type => {ref, emqx_connector_mysql, config}}}], + ActualRoots = emqx_connector_mysql:roots(), + ?assertEqual(ExpectedRoots, ActualRoots). + +% Not sure if this level of testing is appropriate for this function. +% Checking the actual values/types of the returned term starts getting +% into checking the emqx_connector_schema_lib.erl returns and the shape +% of expected data elsewhere. +t_fields(_Config) -> + Fields = emqx_connector_mysql:fields(config), + lists:foreach( + fun({FieldName, FieldValue}) -> + ?assert(is_atom(FieldName)), + if + is_map(FieldValue) -> + ?assert(maps:is_key(type, FieldValue) and maps:is_key(default, FieldValue)); + true -> + ?assert(is_function(FieldValue)) + end + end, + Fields + ). + +% Execute a minimal query to validate connection. +t_basic_query(_Config) -> + ?assertMatch( + {ok, _, [[1]]}, + emqx_connector_mysql:on_query( + <<"emqx_connector_mysql">>, {sql, test_query()}, undefined, #{ + poolname => emqx_connector_mysql + } + ) + ). + +% Perform health check. +t_do_healthcheck(_Config) -> + ?assertEqual( + {ok, #{poolname => emqx_connector_mysql}}, + emqx_connector_mysql:on_health_check(<<"emqx_connector_mysql">>, #{ + poolname => emqx_connector_mysql + }) + ). + +% Perform healthcheck on a connector that does not exist. +t_healthceck_when_connector_does_not_exist(_Config) -> + ?assertEqual( + {error, health_check_failed, #{poolname => emqx_connector_mysql_does_not_exist}}, + emqx_connector_mysql:on_health_check(<<"emqx_connector_mysql_does_not_exist">>, #{ + poolname => emqx_connector_mysql_does_not_exist + }) + ). + +% %%------------------------------------------------------------------------------ +% %% Helpers +% %%------------------------------------------------------------------------------ + +mysql_config() -> + #{ + auto_reconnect => true, + database => <<"mqtt">>, + username => <<"root">>, + password => <<"public">>, + pool_size => 8, + server => {?MYSQL_HOST, ?MYSQL_PORT}, + ssl => #{enable => false} + }. + +test_query() -> + <<"SELECT 1">>.