From: Zbigniew Jędrzejewski-Szmek Date: Wed, 15 Oct 2025 09:42:41 +0000 (+0200) Subject: test-tar-extract: add a binary wrapping tar_x() for manual testing X-Git-Tag: v259-rc1~319 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1929f43199da21d308b9245e41019fc895c4dde4;p=thirdparty%2Fsystemd.git test-tar-extract: add a binary wrapping tar_x() for manual testing We'll probably want to turn this into a test in the integration tests. --- diff --git a/src/import/meson.build b/src/import/meson.build index e1670da8174..4aec57373af 100644 --- a/src/import/meson.build +++ b/src/import/meson.build @@ -93,6 +93,10 @@ executables += [ 'name' : 'systemd-import-generator', 'sources' : files('import-generator.c'), }, + test_template + { + 'sources' : files('test-tar-extract.c'), + 'type' : 'manual', + }, test_template + { 'sources' : files('test-qcow2.c'), 'objects' : ['systemd-importd'], @@ -100,6 +104,7 @@ executables += [ 'conditions' : ['HAVE_ZLIB'], 'type' : 'manual', }, + ] install_data('org.freedesktop.import1.conf', diff --git a/src/import/test-tar-extract.c b/src/import/test-tar-extract.c new file mode 100644 index 00000000000..f7fa06f044f --- /dev/null +++ b/src/import/test-tar-extract.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "fd-util.h" +#include "libarchive-util.h" +#include "main-func.h" +#include "tar-util.h" +#include "tests.h" + +static int run(int argc, char **argv) { + int r; + + test_setup_logging(LOG_DEBUG); + + if (argc != 3) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "Need two arguments exactly: "); + + r = dlopen_libarchive(); + if (r < 0) + return r; + + _cleanup_close_ int input_fd = open(argv[1], O_RDONLY | O_CLOEXEC); + if (input_fd < 0) + return log_error_errno(input_fd, "Cannot open %s: %m", argv[1]); + + _cleanup_close_ int output_fd = open(argv[2], O_DIRECTORY | O_CLOEXEC); + if (output_fd < 0) + return log_error_errno(output_fd, "Cannot open %s: %m", argv[2]); + + r = tar_x(input_fd, output_fd, /* flags= */ TAR_SELINUX); + if (r < 0) + return log_error_errno(r, "tar_x failed: %m"); + + return 0; +} + +DEFINE_MAIN_FUNCTION(run);