test: add test for arbitrary content in tar file
This commit is contained in:
parent
70c4e12b68
commit
a866c995f5
|
@ -20,6 +20,7 @@
|
||||||
-compile(nowarn_export_all).
|
-compile(nowarn_export_all).
|
||||||
|
|
||||||
-include_lib("eunit/include/eunit.hrl").
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
|
-include_lib("common_test/include/ct.hrl").
|
||||||
|
|
||||||
-define(EMQX_PLUGIN_TEMPLATE_RELEASE_NAME, "emqx_plugin_template").
|
-define(EMQX_PLUGIN_TEMPLATE_RELEASE_NAME, "emqx_plugin_template").
|
||||||
-define(EMQX_PLUGIN_TEMPLATE_URL,
|
-define(EMQX_PLUGIN_TEMPLATE_URL,
|
||||||
|
@ -325,27 +326,60 @@ t_bad_tar_gz(Config) ->
|
||||||
%% idempotent
|
%% idempotent
|
||||||
ok = emqx_plugins:delete_package("fake-vsn").
|
ok = emqx_plugins:delete_package("fake-vsn").
|
||||||
|
|
||||||
%% create a corrupted .tar.gz
|
%% create with incomplete info file
|
||||||
%% failed install attempts should not leave behind extracted dir
|
%% failed install attempts should not leave behind extracted dir
|
||||||
t_bad_tar_gz2({init, Config}) ->
|
t_bad_tar_gz2({init, Config}) ->
|
||||||
Config;
|
|
||||||
t_bad_tar_gz2({'end', _Config}) ->
|
|
||||||
ok;
|
|
||||||
t_bad_tar_gz2(Config) ->
|
|
||||||
WorkDir = proplists:get_value(data_dir, Config),
|
WorkDir = proplists:get_value(data_dir, Config),
|
||||||
NameVsn = "foo-0.2",
|
NameVsn = "foo-0.2",
|
||||||
%% this an invalid info file content
|
%% this an invalid info file content (description missing)
|
||||||
BadInfo = "name=foo, rel_vsn=\"0.2\", rel_apps=[foo]",
|
BadInfo = "name=foo, rel_vsn=\"0.2\", rel_apps=[foo]",
|
||||||
ok = write_info_file(Config, NameVsn, BadInfo),
|
ok = write_info_file(Config, NameVsn, BadInfo),
|
||||||
TarGz = filename:join([WorkDir, NameVsn ++ ".tar.gz"]),
|
TarGz = filename:join([WorkDir, NameVsn ++ ".tar.gz"]),
|
||||||
ok = make_tar(WorkDir, NameVsn),
|
ok = make_tar(WorkDir, NameVsn),
|
||||||
|
[{tar_gz, TarGz}, {name_vsn, NameVsn} | Config];
|
||||||
|
t_bad_tar_gz2({'end', Config}) ->
|
||||||
|
NameVsn = ?config(name_vsn, Config),
|
||||||
|
ok = emqx_plugins:delete_package(NameVsn),
|
||||||
|
ok;
|
||||||
|
t_bad_tar_gz2(Config) ->
|
||||||
|
TarGz = ?config(tar_gz, Config),
|
||||||
|
NameVsn = ?config(name_vsn, Config),
|
||||||
?assert(filelib:is_regular(TarGz)),
|
?assert(filelib:is_regular(TarGz)),
|
||||||
%% failed to install, it also cleans up the bad .tar.gz file
|
%% failed to install, it also cleans up the bad content of .tar.gz file
|
||||||
?assertMatch({error, _}, emqx_plugins:ensure_installed(NameVsn)),
|
?assertMatch({error, _}, emqx_plugins:ensure_installed(NameVsn)),
|
||||||
|
?assertEqual({error, enoent}, file:read_file_info(emqx_plugins:dir(NameVsn))),
|
||||||
|
%% but the tar.gz file is still around
|
||||||
|
?assert(filelib:is_regular(TarGz)),
|
||||||
|
ok.
|
||||||
|
|
||||||
|
%% test that we even cleanup content that doesn't match the expected name-vsn
|
||||||
|
%% pattern
|
||||||
|
t_tar_vsn_content_mismatch({init, Config}) ->
|
||||||
|
WorkDir = proplists:get_value(data_dir, Config),
|
||||||
|
NameVsn = "bad_tar-0.2",
|
||||||
|
%% this an invalid info file content
|
||||||
|
BadInfo = "name=foo, rel_vsn=\"0.2\", rel_apps=[\"foo-0.2\"], description=\"lorem ipsum\"",
|
||||||
|
ok = write_info_file(Config, "foo-0.2", BadInfo),
|
||||||
|
TarGz = filename:join([WorkDir, "bad_tar-0.2.tar.gz"]),
|
||||||
|
ok = make_tar(WorkDir, "foo-0.2", NameVsn),
|
||||||
|
file:delete(filename:join([WorkDir, "foo-0.2", "release.json"])),
|
||||||
|
[{tar_gz, TarGz}, {name_vsn, NameVsn} | Config];
|
||||||
|
t_tar_vsn_content_mismatch({'end', Config}) ->
|
||||||
|
NameVsn = ?config(name_vsn, Config),
|
||||||
|
ok = emqx_plugins:delete_package(NameVsn),
|
||||||
|
ok;
|
||||||
|
t_tar_vsn_content_mismatch(Config) ->
|
||||||
|
TarGz = ?config(tar_gz, Config),
|
||||||
|
NameVsn = ?config(name_vsn, Config),
|
||||||
|
?assert(filelib:is_regular(TarGz)),
|
||||||
|
%% failed to install, it also cleans up content of the bad .tar.gz file even
|
||||||
|
%% if in other directory
|
||||||
|
?assertMatch({error, _}, emqx_plugins:ensure_installed(NameVsn)),
|
||||||
|
?assertEqual({error, enoent}, file:read_file_info(emqx_plugins:dir(NameVsn))),
|
||||||
|
?assertEqual({error, enoent}, file:read_file_info(emqx_plugins:dir("foo-0.2"))),
|
||||||
%% the tar.gz file is still around
|
%% the tar.gz file is still around
|
||||||
?assert(filelib:is_regular(TarGz)),
|
?assert(filelib:is_regular(TarGz)),
|
||||||
?assertEqual({error, enoent}, file:read_file_info(emqx_plugins:dir(NameVsn))),
|
ok.
|
||||||
ok = emqx_plugins:delete_package(NameVsn).
|
|
||||||
|
|
||||||
t_bad_info_json({init, Config}) ->
|
t_bad_info_json({init, Config}) ->
|
||||||
Config;
|
Config;
|
||||||
|
@ -446,11 +480,14 @@ t_elixir_plugin(Config) ->
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
make_tar(Cwd, NameWithVsn) ->
|
make_tar(Cwd, NameWithVsn) ->
|
||||||
|
make_tar(Cwd, NameWithVsn, NameWithVsn).
|
||||||
|
|
||||||
|
make_tar(Cwd, NameWithVsn, TarfileVsn) ->
|
||||||
{ok, OriginalCwd} = file:get_cwd(),
|
{ok, OriginalCwd} = file:get_cwd(),
|
||||||
ok = file:set_cwd(Cwd),
|
ok = file:set_cwd(Cwd),
|
||||||
try
|
try
|
||||||
Files = filelib:wildcard(NameWithVsn ++ "/**"),
|
Files = filelib:wildcard(NameWithVsn ++ "/**"),
|
||||||
TarFile = NameWithVsn ++ ".tar.gz",
|
TarFile = TarfileVsn ++ ".tar.gz",
|
||||||
ok = erl_tar:create(TarFile, Files, [compressed])
|
ok = erl_tar:create(TarFile, Files, [compressed])
|
||||||
after
|
after
|
||||||
file:set_cwd(OriginalCwd)
|
file:set_cwd(OriginalCwd)
|
||||||
|
|
Loading…
Reference in New Issue