From 60e791e0e374b8b6e8f38959de568fcf59999f76 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 22 Feb 2022 11:17:15 -0300 Subject: [PATCH] test: add test case for elixir plugin --- apps/emqx_plugins/test/emqx_plugins_SUITE.erl | 67 +++++++++++++++++-- 1 file changed, 61 insertions(+), 6 deletions(-) diff --git a/apps/emqx_plugins/test/emqx_plugins_SUITE.erl b/apps/emqx_plugins/test/emqx_plugins_SUITE.erl index 4607382d2..7fb778b2f 100644 --- a/apps/emqx_plugins/test/emqx_plugins_SUITE.erl +++ b/apps/emqx_plugins/test/emqx_plugins_SUITE.erl @@ -23,6 +23,7 @@ -include_lib("eunit/include/eunit.hrl"). -define(EMQX_PLUGIN_TEMPLATE_VSN, "5.0-rc.1"). +-define(EMQX_ELIXIR_PLUGIN_TEMPLATE_VSN, "0.1.0"). -define(PACKAGE_SUFFIX, ".tar.gz"). all() -> emqx_common_test_helpers:all(?MODULE). @@ -146,12 +147,6 @@ t_demo_install_start_stop_uninstall(Config) -> ok = emqx_plugins:ensure_uninstalled(NameVsn), ?assertEqual([], emqx_plugins:list()), ok. - ?assertMatch([#{<<"name">> := ReleaseName, - <<"rel_vsn">> := PluginVsn - }], emqx_plugins:list()), - ok = emqx_plugins:ensure_uninstalled(NameVsn), - ?assertEqual([], emqx_plugins:list()), - ok. %% help function to create a info file. %% The file is in JSON format when built @@ -298,6 +293,66 @@ t_bad_info_json(Config) -> emqx_plugins:purge(NameVsn), ok. +t_elixir_plugin({init, Config}) -> + Opts0 = + #{ target_path => "_build/prod/plugrelex/elixir_plugin_template" + , release_name => "elixir_plugin_template" + , git_url => "https://github.com/emqx/emqx-elixir-plugin.git" + , vsn => ?EMQX_ELIXIR_PLUGIN_TEMPLATE_VSN + , workdir => "demo_src_elixir" + }, + Opts = #{package := Package} = build_demo_plugin_package(Opts0), + NameVsn = filename:basename(Package, ?PACKAGE_SUFFIX), + [ {name_vsn, NameVsn} + , {plugin_opts, Opts} + | Config + ]; +t_elixir_plugin({'end', _Config}) -> ok; +t_elixir_plugin(Config) -> + NameVsn = proplists:get_value(name_vsn, Config), + #{ release_name := ReleaseName + , vsn := PluginVsn + } = proplists:get_value(plugin_opts, Config), + ok = emqx_plugins:ensure_installed(NameVsn), + %% idempotent + ok = emqx_plugins:ensure_installed(NameVsn), + {ok, Info} = emqx_plugins:read_plugin(NameVsn), + ?assertEqual([Info], emqx_plugins:list()), + %% start + ok = emqx_plugins:ensure_started(NameVsn), + ok = assert_app_running(elixir_plugin_template, true), + ok = assert_app_running(hallux, true), + %% start (idempotent) + ok = emqx_plugins:ensure_started(bin(NameVsn)), + ok = assert_app_running(elixir_plugin_template, true), + ok = assert_app_running(hallux, true), + + %% call an elixir function + 1 = 'Elixir.ElixirPluginTemplate':ping(), + 3 = 'Elixir.Kernel':'+'(1, 2), + + %% running app can not be un-installed + ?assertMatch({error, _}, + emqx_plugins:ensure_uninstalled(NameVsn)), + + %% stop + ok = emqx_plugins:ensure_stopped(NameVsn), + ok = assert_app_running(elixir_plugin_template, false), + ok = assert_app_running(hallux, false), + %% stop (idempotent) + ok = emqx_plugins:ensure_stopped(bin(NameVsn)), + ok = assert_app_running(elixir_plugin_template, false), + ok = assert_app_running(hallux, false), + %% still listed after stopped + ReleaseNameBin = list_to_binary(ReleaseName), + PluginVsnBin = list_to_binary(PluginVsn), + ?assertMatch([#{<<"name">> := ReleaseNameBin, + <<"rel_vsn">> := PluginVsnBin + }], emqx_plugins:list()), + ok = emqx_plugins:ensure_uninstalled(NameVsn), + ?assertEqual([], emqx_plugins:list()), + ok. + make_tar(Cwd, NameWithVsn) -> {ok, OriginalCwd} = file:get_cwd(), ok = file:set_cwd(Cwd),