From 50067dafdb36ac2a6cbdb0186fa22082cf424e9a Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Thu, 3 Sep 2020 17:01:32 +0200 Subject: Cleanup: reduce tar test cases to a few generic C files This commit removes the existing tar test cases that simply call the generic test case function with several different paths with generic test case source files that are parameneterized via the pro-processor. For each tar archive, a separate test case is generated. On the one hand, this reduces the test source code to practically nothing. On the other hand, a test binary is generated for every distinct test case, instead of one per group and we get more detailed insights if something goes wrong. Signed-off-by: David Oberhollenzer --- tests/Makemodule.am | 173 +++++++++++++++++++++++++++++++++++++------ tests/tar_big_file.c | 27 +++++++ tests/tar_gnu.c | 32 -------- tests/tar_pax.c | 31 -------- tests/tar_simple.c | 66 +++++++++++++++++ tests/tar_sparse.c | 82 ++++++++++++++++++++ tests/tar_sparse_gnu.c | 2 - tests/tar_sparse_gnu1.c | 15 ---- tests/tar_sparse_gnu2.c | 16 ---- tests/tar_ustar.c | 33 --------- tests/tar_xattr.c | 38 ++++++++++ tests/tar_xattr_bin.c | 46 ++++++++++++ tests/tar_xattr_bsd.c | 15 ---- tests/tar_xattr_schily.c | 15 ---- tests/tar_xattr_schily_bin.c | 48 ------------ tests/test_tar.h | 151 ------------------------------------- 16 files changed, 408 insertions(+), 382 deletions(-) create mode 100644 tests/tar_big_file.c delete mode 100644 tests/tar_gnu.c delete mode 100644 tests/tar_pax.c create mode 100644 tests/tar_simple.c create mode 100644 tests/tar_sparse.c delete mode 100644 tests/tar_sparse_gnu1.c delete mode 100644 tests/tar_sparse_gnu2.c delete mode 100644 tests/tar_ustar.c create mode 100644 tests/tar_xattr.c create mode 100644 tests/tar_xattr_bin.c delete mode 100644 tests/tar_xattr_bsd.c delete mode 100644 tests/tar_xattr_schily.c delete mode 100644 tests/tar_xattr_schily_bin.c diff --git a/tests/Makemodule.am b/tests/Makemodule.am index 2bca679..809ff07 100644 --- a/tests/Makemodule.am +++ b/tests/Makemodule.am @@ -61,17 +61,115 @@ test_filename_sane_w32_SOURCES = tests/filename_sane.c test_filename_sane_w32_SOURCES += lib/fstree/filename_sane.c test_filename_sane_w32_CPPFLAGS = $(AM_CPPFLAGS) -DTEST_WIN32=1 -test_tar_gnu_SOURCES = tests/tar_gnu.c tests/test.h tests/test_tar.h -test_tar_gnu_LDADD = libtar.a libcompat.a -test_tar_gnu_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar - -test_tar_pax_SOURCES = tests/tar_pax.c tests/test.h tests/test_tar.h -test_tar_pax_LDADD = libtar.a libcompat.a -test_tar_pax_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar - -test_tar_ustar_SOURCES = tests/tar_ustar.c tests/test.h tests/test_tar.h -test_tar_ustar_LDADD = libtar.a libcompat.a -test_tar_ustar_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_gnu0_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_gnu0_LDADD = libtar.a libcompat.a +test_tar_gnu0_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_gnu0_CPPFLAGS += -DTESTFILE=format-acceptance/gnu.tar + +test_tar_gnu1_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_gnu1_LDADD = libtar.a libcompat.a +test_tar_gnu1_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_gnu1_CPPFLAGS += -DTESTFILE=format-acceptance/gnu-g.tar + +test_tar_gnu2_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_gnu2_LDADD = libtar.a libcompat.a +test_tar_gnu2_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_gnu2_CPPFLAGS += -DTESTFILE=user-group-largenum/gnu.tar +test_tar_gnu2_CPPFLAGS += -DTESTUID=0x80000000 -DTESTGID=0x80000000 +test_tar_gnu2_CPPFLAGS += -DTESTTS=1542995392 + +test_tar_gnu3_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_gnu3_LDADD = libtar.a libcompat.a +test_tar_gnu3_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_gnu3_CPPFLAGS += -DTESTFILE=negative-mtime/gnu.tar -DTESTTS=-315622800 + +test_tar_gnu4_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_gnu4_LDADD = libtar.a libcompat.a +test_tar_gnu4_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_gnu4_CPPFLAGS += -DTESTFILE=long-paths/gnu.tar -DLONG_NAME_TEST +test_tar_gnu4_CPPFLAGS += -DTESTTS=1542909670 + +test_tar_gnu5_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_gnu5_LDADD = libtar.a libcompat.a +test_tar_gnu5_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_gnu5_CPPFLAGS += -DTESTFILE=large-mtime/gnu.tar -DTESTTS=8589934592L + +test_tar_gnu6_SOURCES = tests/tar_big_file.c tests/test.h tests/test_tar.h +test_tar_gnu6_LDADD = libtar.a libcompat.a +test_tar_gnu6_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_gnu6_CPPFLAGS += -DTESTFILE=file-size/gnu.tar + +test_tar_pax0_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_pax0_LDADD = libtar.a libcompat.a +test_tar_pax0_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_pax0_CPPFLAGS += -DTESTFILE=format-acceptance/pax.tar + +test_tar_pax1_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_pax1_LDADD = libtar.a libcompat.a +test_tar_pax1_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_pax1_CPPFLAGS += -DTESTFILE=user-group-largenum/pax.tar +test_tar_pax1_CPPFLAGS += -DTESTUID=2147483648UL -DTESTGID=2147483648UL +test_tar_pax1_CPPFLAGS += -DTESTTS=1542995392 + +test_tar_pax2_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_pax2_LDADD = libtar.a libcompat.a +test_tar_pax2_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_pax2_CPPFLAGS += -DTESTFILE=large-mtime/pax.tar -DTESTTS=8589934592L + +test_tar_pax3_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_pax3_LDADD = libtar.a libcompat.a +test_tar_pax3_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_pax3_CPPFLAGS += -DTESTFILE=negative-mtime/pax.tar -DTESTTS=-315622800 + +test_tar_pax4_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_pax4_LDADD = libtar.a libcompat.a +test_tar_pax4_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_pax4_CPPFLAGS += -DTESTFILE=long-paths/pax.tar +test_tar_pax4_CPPFLAGS += -DLONG_NAME_TEST -DTESTTS=1542909670 + +test_tar_pax5_SOURCES = tests/tar_big_file.c tests/test.h tests/test_tar.h +test_tar_pax5_LDADD = libtar.a libcompat.a +test_tar_pax5_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_pax5_CPPFLAGS += -DTESTFILE=file-size/pax.tar + +test_tar_ustar0_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_ustar0_LDADD = libtar.a libcompat.a +test_tar_ustar0_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_ustar0_CPPFLAGS += -DTESTFILE=format-acceptance/ustar.tar + +test_tar_ustar1_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_ustar1_LDADD = libtar.a libcompat.a +test_tar_ustar1_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_ustar1_CPPFLAGS += -DTESTFILE=format-acceptance/ustar-pre-posix.tar + +test_tar_ustar2_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_ustar2_LDADD = libtar.a libcompat.a +test_tar_ustar2_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_ustar2_CPPFLAGS += -DTESTFILE=format-acceptance/v7.tar + +test_tar_ustar3_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_ustar3_LDADD = libtar.a libcompat.a +test_tar_ustar3_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_ustar3_CPPFLAGS += -DTESTFILE=user-group-largenum/8-digit.tar +test_tar_ustar3_CPPFLAGS += -DTESTUID=8388608 -DTESTGID=8388608 +test_tar_ustar3_CPPFLAGS += -DTESTTS=1542995392 + +test_tar_ustar4_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_ustar4_LDADD = libtar.a libcompat.a +test_tar_ustar4_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_ustar4_CPPFLAGS += -DTESTFILE=large-mtime/12-digit.tar +test_tar_ustar4_CPPFLAGS += -DTESTTS=8589934592L + +test_tar_ustar5_SOURCES = tests/tar_simple.c tests/test.h tests/test_tar.h +test_tar_ustar5_LDADD = libtar.a libcompat.a +test_tar_ustar5_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_ustar5_CPPFLAGS += -DTESTFILE=long-paths/ustar.tar +test_tar_ustar5_CPPFLAGS += -DLONG_NAME_TEST -DTESTTS=1542909670 + +test_tar_ustar6_SOURCES = tests/tar_big_file.c tests/test.h tests/test_tar.h +test_tar_ustar6_LDADD = libtar.a libcompat.a +test_tar_ustar6_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_ustar6_CPPFLAGS += -DTESTFILE=file-size/12-digit.tar test_tar_target_filled_SOURCES = tests/tar_target_filled.c tests/test.h test_tar_target_filled_SOURCES += tests/test_tar.h @@ -84,33 +182,47 @@ test_tar_sparse_gnu_SOURCES += tests/test_tar.h test_tar_sparse_gnu_LDADD = libtar.a libcompat.a test_tar_sparse_gnu_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar -test_tar_sparse_gnu1_SOURCES = tests/tar_sparse_gnu1.c tests/test.h -test_tar_sparse_gnu1_SOURCES += tests/test_tar.h +test_tar_sparse_gnu0_SOURCES = tests/tar_sparse.c tests/test.h tests/test_tar.h +test_tar_sparse_gnu0_LDADD = libtar.a libcompat.a +test_tar_sparse_gnu0_CPPFLAGS = $(AM_CPPFLAGS) +test_tar_sparse_gnu0_CPPFLAGS += -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_sparse_gnu0_CPPFLAGS += -DTESTFILE=sparse-files/pax-gnu0-0.tar + +test_tar_sparse_gnu1_SOURCES = tests/tar_sparse.c tests/test.h tests/test_tar.h test_tar_sparse_gnu1_LDADD = libtar.a libcompat.a test_tar_sparse_gnu1_CPPFLAGS = $(AM_CPPFLAGS) test_tar_sparse_gnu1_CPPFLAGS += -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_sparse_gnu1_CPPFLAGS += -DTESTFILE=sparse-files/pax-gnu0-1.tar -test_tar_sparse_gnu2_SOURCES = tests/tar_sparse_gnu2.c tests/test.h -test_tar_sparse_gnu2_SOURCES += tests/test_tar.h +test_tar_sparse_gnu2_SOURCES = tests/tar_sparse.c tests/test.h tests/test_tar.h test_tar_sparse_gnu2_LDADD = libtar.a libcompat.a test_tar_sparse_gnu2_CPPFLAGS = $(AM_CPPFLAGS) test_tar_sparse_gnu2_CPPFLAGS += -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_sparse_gnu2_CPPFLAGS += -DTESTFILE=sparse-files/pax-gnu1-0.tar + +test_tar_sparse_gnu3_SOURCES = tests/tar_sparse.c tests/test.h tests/test_tar.h +test_tar_sparse_gnu3_LDADD = libtar.a libcompat.a +test_tar_sparse_gnu3_CPPFLAGS = $(AM_CPPFLAGS) +test_tar_sparse_gnu3_CPPFLAGS += -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_sparse_gnu3_CPPFLAGS += -DTESTFILE=sparse-files/gnu.tar -test_tar_xattr_bsd_SOURCES = tests/tar_xattr_bsd.c tests/test.h tests/test_tar.h +test_tar_xattr_bsd_SOURCES = tests/tar_xattr.c tests/test.h tests/test_tar.h test_tar_xattr_bsd_LDADD = libtar.a libcompat.a test_tar_xattr_bsd_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_xattr_bsd_CPPFLAGS += -DTESTFILE=xattr/xattr-libarchive.tar -test_tar_xattr_schily_SOURCES = tests/tar_xattr_schily.c tests/test.h -test_tar_xattr_schily_SOURCES += tests/test_tar.h +test_tar_xattr_schily_SOURCES = tests/tar_xattr.c tests/test.h tests/test_tar.h test_tar_xattr_schily_LDADD = libtar.a libcompat.a test_tar_xattr_schily_CPPFLAGS = $(AM_CPPFLAGS) test_tar_xattr_schily_CPPFLAGS += -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_xattr_schily_CPPFLAGS += -DTESTFILE=xattr/xattr-schily.tar -test_tar_xattr_schily_bin_SOURCES = tests/tar_xattr_schily_bin.c tests/test.h +test_tar_xattr_schily_bin_SOURCES = tests/tar_xattr_bin.c tests/test.h test_tar_xattr_schily_bin_SOURCES += tests/test_tar.h test_tar_xattr_schily_bin_LDADD = libtar.a libcompat.a test_tar_xattr_schily_bin_CPPFLAGS = $(AM_CPPFLAGS) test_tar_xattr_schily_bin_CPPFLAGS += -DTESTPATH=$(top_srcdir)/tests/tar +test_tar_xattr_schily_bin_CPPFLAGS += -DTESTFILE=xattr/xattr-schily-binary.tar fstree_fuzz_SOURCES = tests/fstree_fuzz.c fstree_fuzz_LDADD = libfstree.a libcompat.a @@ -122,8 +234,15 @@ check_PROGRAMS += test_mknode_simple test_mknode_slink test_mknode_reg check_PROGRAMS += test_mknode_dir test_gen_inode_numbers test_add_by_path check_PROGRAMS += test_get_path test_fstree_sort test_fstree_from_file check_PROGRAMS += test_fstree_init test_filename_sane test_filename_sane_w32 -check_PROGRAMS += test_tar_ustar test_tar_pax test_tar_gnu -check_PROGRAMS += test_tar_sparse_gnu test_tar_sparse_gnu1 test_tar_sparse_gnu2 +check_PROGRAMS += test_tar_ustar0 test_tar_ustar1 test_tar_ustar2 +check_PROGRAMS += test_tar_ustar3 test_tar_ustar4 test_tar_ustar5 +check_PROGRAMS += test_tar_ustar6 +check_PROGRAMS += test_tar_pax0 test_tar_pax1 test_tar_pax2 test_tar_pax3 +check_PROGRAMS += test_tar_pax4 test_tar_pax5 +check_PROGRAMS += test_tar_gnu0 test_tar_gnu1 test_tar_gnu2 test_tar_gnu3 +check_PROGRAMS += test_tar_gnu4 test_tar_gnu5 test_tar_gnu6 +check_PROGRAMS += test_tar_sparse_gnu test_tar_sparse_gnu0 test_tar_sparse_gnu1 +check_PROGRAMS += test_tar_sparse_gnu2 test_tar_sparse_gnu3 check_PROGRAMS += test_tar_xattr_bsd test_tar_xattr_schily check_PROGRAMS += test_tar_xattr_schily_bin test_tar_target_filled @@ -133,9 +252,15 @@ TESTS += test_mknode_simple test_mknode_slink TESTS += test_mknode_reg test_mknode_dir test_gen_inode_numbers TESTS += test_add_by_path test_get_path test_fstree_sort test_fstree_from_file TESTS += test_fstree_init test_filename_sane test_filename_sane_w32 -TESTS += test_tar_ustar test_tar_pax -TESTS += test_tar_gnu test_tar_sparse_gnu test_tar_sparse_gnu1 -TESTS += test_tar_sparse_gnu2 test_tar_xattr_bsd test_tar_xattr_schily +TESTS += test_tar_ustar0 test_tar_ustar1 test_tar_ustar2 test_tar_ustar3 +TESTS += test_tar_ustar4 test_tar_ustar5 test_tar_ustar6 +TESTS += test_tar_gnu0 test_tar_gnu1 test_tar_gnu2 test_tar_gnu3 test_tar_gnu4 +TESTS += test_tar_gnu5 test_tar_gnu6 +TESTS += test_tar_pax0 test_tar_pax1 test_tar_pax2 test_tar_pax3 test_tar_pax4 +TESTS += test_tar_pax5 +TESTS += test_tar_sparse_gnu test_tar_sparse_gnu0 +TESTS += test_tar_sparse_gnu1 test_tar_sparse_gnu2 test_tar_sparse_gnu3 +TESTS += test_tar_xattr_bsd test_tar_xattr_schily TESTS += test_tar_xattr_schily_bin test_tar_target_filled if CORPORA_TESTS diff --git a/tests/tar_big_file.c b/tests/tar_big_file.c new file mode 100644 index 0000000..b949f60 --- /dev/null +++ b/tests/tar_big_file.c @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * tar_big_file.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "test_tar.h" + +int main(void) +{ + tar_header_decoded_t hdr; + FILE *fp; + + fp = test_open_read(STRVALUE(TESTPATH) "/" STRVALUE(TESTFILE)); + TEST_ASSERT(read_header(fp, &hdr) == 0); + TEST_EQUAL_UI(hdr.sb.st_mode, S_IFREG | 0644); + TEST_EQUAL_UI(hdr.sb.st_uid, 01750); + TEST_EQUAL_UI(hdr.sb.st_gid, 01750); + TEST_EQUAL_UI(hdr.sb.st_size, 8589934592); + TEST_EQUAL_UI(hdr.sb.st_mtime, 1542959190); + TEST_EQUAL_UI(hdr.mtime, 1542959190); + TEST_STR_EQUAL(hdr.name, "big-file.bin"); + TEST_ASSERT(!hdr.unknown_record); + clear_header(&hdr); + fclose(fp); + return EXIT_SUCCESS; +} diff --git a/tests/tar_gnu.c b/tests/tar_gnu.c deleted file mode 100644 index b21c283..0000000 --- a/tests/tar_gnu.c +++ /dev/null @@ -1,32 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * tar_gnu.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "test_tar.h" - -static const char *filename = -"012345678901234567890123456789/012345678901234567890123456789/" -"012345678901234567890123456789/012345678901234567890123456789/" -"012345678901234567890123456789/input.txt"; - -int main(void) -{ - TEST_ASSERT(chdir(TEST_PATH) == 0); - - testcase_simple("format-acceptance/gnu.tar", 1542905892, - 1000, 1000, "input.txt"); - testcase_simple("format-acceptance/gnu-g.tar", 013375560044, - 1000, 1000, "input.txt"); - testcase_simple("user-group-largenum/gnu.tar", 013376036700, - 0x80000000, 0x80000000, "input.txt"); - testcase_simple("negative-mtime/gnu.tar", -315622800, - 1000, 1000, "input.txt"); - testcase_simple("long-paths/gnu.tar", 1542909670, - 1000, 1000, filename); - testcase_simple("large-mtime/gnu.tar", 8589934592L, - 1000, 1000, "input.txt"); - test_case_file_size("file-size/gnu.tar"); - return EXIT_SUCCESS; -} diff --git a/tests/tar_pax.c b/tests/tar_pax.c deleted file mode 100644 index 52b3481..0000000 --- a/tests/tar_pax.c +++ /dev/null @@ -1,31 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * tar_pax.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "test_tar.h" - -static const char *filename = -"012345678901234567890123456789/012345678901234567890123456789/" -"012345678901234567890123456789/012345678901234567890123456789/" -"012345678901234567890123456789/input.txt"; - -int main(void) -{ - TEST_ASSERT(chdir(TEST_PATH) == 0); - - testcase_simple("format-acceptance/pax.tar", 1542905892, - 1000, 1000, "input.txt"); - testcase_simple("user-group-largenum/pax.tar", 013376036700, - 2147483648UL, 2147483648UL, "input.txt"); - testcase_simple("large-mtime/pax.tar", 8589934592L, - 1000, 1000, "input.txt"); - testcase_simple("negative-mtime/pax.tar", -315622800, - 1000, 1000, "input.txt"); - testcase_simple("long-paths/pax.tar", 1542909670, - 1000, 1000, filename); - - test_case_file_size("file-size/pax.tar"); - return EXIT_SUCCESS; -} diff --git a/tests/tar_simple.c b/tests/tar_simple.c new file mode 100644 index 0000000..02bd521 --- /dev/null +++ b/tests/tar_simple.c @@ -0,0 +1,66 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * tar_simple.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "test_tar.h" + +#ifndef TESTUID +#define TESTUID 1000 +#endif + +#ifndef TESTGID +#define TESTGID TESTUID +#endif + +#ifndef TESTFNAME +#define TESTFNAME input.txt +#endif + +#ifndef TESTTS +#define TESTTS 1542905892 +#endif + +#ifdef LONG_NAME_TEST +static const char *fname = +"012345678901234567890123456789/012345678901234567890123456789/" +"012345678901234567890123456789/012345678901234567890123456789/" +"012345678901234567890123456789/input.txt"; +#else +static const char *fname = STRVALUE(TESTFNAME); +#endif + +int main(void) +{ + tar_header_decoded_t hdr; + char buffer[6]; + sqfs_s64 ts; + FILE *fp; + + fp = test_open_read(STRVALUE(TESTPATH) "/" STRVALUE(TESTFILE)); + TEST_ASSERT(read_header(fp, &hdr) == 0); + TEST_EQUAL_UI(hdr.sb.st_mode, S_IFREG | 0644); + TEST_EQUAL_UI(hdr.sb.st_uid, TESTUID); + TEST_EQUAL_UI(hdr.sb.st_gid, TESTGID); + TEST_EQUAL_UI(hdr.sb.st_size, 5); + + ts = TESTTS; + + if (sizeof(time_t) < sizeof(ts) && ts > INT32_MAX) { + TEST_EQUAL_UI(hdr.sb.st_mtime, INT32_MAX); + } else { + TEST_EQUAL_UI(hdr.sb.st_mtime, ts); + } + + TEST_EQUAL_UI(hdr.mtime, ts); + TEST_STR_EQUAL(hdr.name, fname); + TEST_ASSERT(!hdr.unknown_record); + + TEST_ASSERT(read_retry("tar data", fp, buffer, 5) == 0); + buffer[5] = '\0'; + TEST_STR_EQUAL(buffer, "test\n"); + clear_header(&hdr); + fclose(fp); + return EXIT_SUCCESS; +} diff --git a/tests/tar_sparse.c b/tests/tar_sparse.c new file mode 100644 index 0000000..50940d0 --- /dev/null +++ b/tests/tar_sparse.c @@ -0,0 +1,82 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * tar_sparse.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "test_tar.h" + +static void test_case_sparse(const char *path) +{ + tar_header_decoded_t hdr; + sparse_map_t *sparse; + FILE *fp; + + fp = test_open_read(path); + TEST_ASSERT(read_header(fp, &hdr) == 0); + TEST_EQUAL_UI(hdr.sb.st_mode, S_IFREG | 0644); + TEST_EQUAL_UI(hdr.sb.st_uid, 01750); + TEST_EQUAL_UI(hdr.sb.st_gid, 01750); + TEST_EQUAL_UI(hdr.sb.st_size, 2097152); + TEST_EQUAL_UI(hdr.actual_size, 2097152); + TEST_EQUAL_UI(hdr.record_size, 32768); + TEST_STR_EQUAL(hdr.name, "input.bin"); + TEST_ASSERT(!hdr.unknown_record); + + sparse = hdr.sparse; + TEST_NOT_NULL(sparse); + TEST_EQUAL_UI(sparse->offset, 0); + TEST_EQUAL_UI(sparse->count, 4096); + + sparse = sparse->next; + TEST_NOT_NULL(sparse); + TEST_EQUAL_UI(sparse->offset, 262144); + TEST_EQUAL_UI(sparse->count, 4096); + + sparse = sparse->next; + TEST_NOT_NULL(sparse); + TEST_EQUAL_UI(sparse->offset, 524288); + TEST_EQUAL_UI(sparse->count, 4096); + + sparse = sparse->next; + TEST_NOT_NULL(sparse); + TEST_EQUAL_UI(sparse->offset, 786432); + TEST_EQUAL_UI(sparse->count, 4096); + + sparse = sparse->next; + TEST_NOT_NULL(sparse); + TEST_EQUAL_UI(sparse->offset, 1048576); + TEST_EQUAL_UI(sparse->count, 4096); + + sparse = sparse->next; + TEST_NOT_NULL(sparse); + TEST_EQUAL_UI(sparse->offset, 1310720); + TEST_EQUAL_UI(sparse->count, 4096); + + sparse = sparse->next; + TEST_NOT_NULL(sparse); + TEST_EQUAL_UI(sparse->offset, 1572864); + TEST_EQUAL_UI(sparse->count, 4096); + + sparse = sparse->next; + TEST_NOT_NULL(sparse); + TEST_EQUAL_UI(sparse->offset, 1835008); + TEST_EQUAL_UI(sparse->count, 4096); + + sparse = sparse->next; + TEST_NOT_NULL(sparse); + TEST_EQUAL_UI(sparse->offset, 2097152); + TEST_EQUAL_UI(sparse->count, 0); + + sparse = sparse->next; + TEST_NULL(sparse); + + clear_header(&hdr); + fclose(fp); +} + +int main(void) +{ + test_case_sparse( STRVALUE(TESTPATH) "/" STRVALUE(TESTFILE) ); + return EXIT_SUCCESS; +} diff --git a/tests/tar_sparse_gnu.c b/tests/tar_sparse_gnu.c index fdeb53e..216a54a 100644 --- a/tests/tar_sparse_gnu.c +++ b/tests/tar_sparse_gnu.c @@ -44,7 +44,5 @@ int main(void) clear_header(&hdr); fclose(fp); - - test_case_sparse("sparse-files/gnu.tar"); return EXIT_SUCCESS; } diff --git a/tests/tar_sparse_gnu1.c b/tests/tar_sparse_gnu1.c deleted file mode 100644 index 1e74969..0000000 --- a/tests/tar_sparse_gnu1.c +++ /dev/null @@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * tar_sparse_gnu1.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "test_tar.h" - -int main(void) -{ - TEST_ASSERT(chdir(TEST_PATH) == 0); - - test_case_sparse("sparse-files/pax-gnu0-0.tar"); - return EXIT_SUCCESS; -} diff --git a/tests/tar_sparse_gnu2.c b/tests/tar_sparse_gnu2.c deleted file mode 100644 index f08f286..0000000 --- a/tests/tar_sparse_gnu2.c +++ /dev/null @@ -1,16 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * tar_sparse_gnu2.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "test_tar.h" - -int main(void) -{ - TEST_ASSERT(chdir(TEST_PATH) == 0); - - test_case_sparse("sparse-files/pax-gnu0-1.tar"); - test_case_sparse("sparse-files/pax-gnu1-0.tar"); - return EXIT_SUCCESS; -} diff --git a/tests/tar_ustar.c b/tests/tar_ustar.c deleted file mode 100644 index 8ca1b36..0000000 --- a/tests/tar_ustar.c +++ /dev/null @@ -1,33 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * tar_ustar.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "test_tar.h" - -static const char *filename = -"012345678901234567890123456789/012345678901234567890123456789/" -"012345678901234567890123456789/012345678901234567890123456789/" -"012345678901234567890123456789/input.txt"; - -int main(void) -{ - TEST_ASSERT(chdir(TEST_PATH) == 0); - - testcase_simple("format-acceptance/ustar.tar", 1542905892, - 1000, 1000, "input.txt"); - testcase_simple("format-acceptance/ustar-pre-posix.tar", 1542905892, - 1000, 1000, "input.txt"); - testcase_simple("format-acceptance/v7.tar", 1542905892, - 1000, 1000, "input.txt"); - testcase_simple("user-group-largenum/8-digit.tar", 1542995392, - 8388608, 8388608, "input.txt"); - testcase_simple("large-mtime/12-digit.tar", 8589934592L, - 1000, 1000, "input.txt"); - testcase_simple("long-paths/ustar.tar", 1542909670, - 1000, 1000, filename); - - test_case_file_size("file-size/12-digit.tar"); - return EXIT_SUCCESS; -} diff --git a/tests/tar_xattr.c b/tests/tar_xattr.c new file mode 100644 index 0000000..179af2e --- /dev/null +++ b/tests/tar_xattr.c @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * tar_xattr.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "test_tar.h" + +int main(void) +{ + tar_header_decoded_t hdr; + char buffer[6]; + FILE *fp; + + fp = test_open_read(STRVALUE(TESTPATH) "/" STRVALUE(TESTFILE)); + TEST_ASSERT(read_header(fp, &hdr) == 0); + TEST_EQUAL_UI(hdr.sb.st_mode, S_IFREG | 0644); + TEST_EQUAL_UI(hdr.sb.st_uid, 01750); + TEST_EQUAL_UI(hdr.sb.st_gid, 01750); + TEST_EQUAL_UI(hdr.sb.st_size, 5); + TEST_EQUAL_UI(hdr.sb.st_mtime, 1543094477); + TEST_EQUAL_UI(hdr.mtime, 1543094477); + TEST_STR_EQUAL(hdr.name, "input.txt"); + TEST_ASSERT(!hdr.unknown_record); + TEST_ASSERT(read_retry("reading tar data", fp, buffer, 5) == 0); + buffer[5] = '\0'; + TEST_STR_EQUAL(buffer, "test\n"); + + TEST_NOT_NULL(hdr.xattr); + TEST_STR_EQUAL(hdr.xattr->key, "user.mime_type"); + TEST_STR_EQUAL((const char *)hdr.xattr->value, "text/plain"); + TEST_EQUAL_UI(hdr.xattr->value_len, 10); + TEST_NULL(hdr.xattr->next); + + clear_header(&hdr); + fclose(fp); + return EXIT_SUCCESS; +} diff --git a/tests/tar_xattr_bin.c b/tests/tar_xattr_bin.c new file mode 100644 index 0000000..ca0f918 --- /dev/null +++ b/tests/tar_xattr_bin.c @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * tar_xattr_bin.c + * + * Copyright (C) 2019 David Oberhollenzer + */ +#include "test_tar.h" + +static const uint8_t value[] = { + 0x00, 0x00, 0x00, 0x02, + 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, +}; + +int main(void) +{ + tar_header_decoded_t hdr; + char buffer[6]; + FILE *fp; + + fp = test_open_read(STRVALUE(TESTPATH) "/" STRVALUE(TESTFILE)); + TEST_ASSERT(read_header(fp, &hdr) == 0); + TEST_EQUAL_UI(hdr.sb.st_mode, S_IFREG | 0644); + TEST_EQUAL_UI(hdr.sb.st_uid, 01750); + TEST_EQUAL_UI(hdr.sb.st_gid, 01750); + TEST_EQUAL_UI(hdr.sb.st_size, 5); + TEST_EQUAL_UI(hdr.sb.st_mtime, 1543094477); + TEST_EQUAL_UI(hdr.mtime, 1543094477); + TEST_STR_EQUAL(hdr.name, "input.txt"); + TEST_ASSERT(!hdr.unknown_record); + TEST_ASSERT(read_retry("data0", fp, buffer, 5) == 0); + buffer[5] = '\0'; + TEST_STR_EQUAL(buffer, "test\n"); + + TEST_NOT_NULL(hdr.xattr); + TEST_STR_EQUAL(hdr.xattr->key, "security.capability"); + TEST_EQUAL_UI(hdr.xattr->value_len, sizeof(value)); + TEST_ASSERT(memcmp(hdr.xattr->value, value, sizeof(value)) == 0); + TEST_NULL(hdr.xattr->next); + + clear_header(&hdr); + fclose(fp); + return EXIT_SUCCESS; +} diff --git a/tests/tar_xattr_bsd.c b/tests/tar_xattr_bsd.c deleted file mode 100644 index 4918afe..0000000 --- a/tests/tar_xattr_bsd.c +++ /dev/null @@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * tar_xattr_bsd.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "test_tar.h" - -int main(void) -{ - TEST_ASSERT(chdir(TEST_PATH) == 0); - - test_case_xattr_simple("xattr/xattr-libarchive.tar"); - return EXIT_SUCCESS; -} diff --git a/tests/tar_xattr_schily.c b/tests/tar_xattr_schily.c deleted file mode 100644 index 1ca735b..0000000 --- a/tests/tar_xattr_schily.c +++ /dev/null @@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * tar_xattr_schily.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "test_tar.h" - -int main(void) -{ - TEST_ASSERT(chdir(TEST_PATH) == 0); - - test_case_xattr_simple("xattr/xattr-schily.tar"); - return EXIT_SUCCESS; -} diff --git a/tests/tar_xattr_schily_bin.c b/tests/tar_xattr_schily_bin.c deleted file mode 100644 index 0fe2004..0000000 --- a/tests/tar_xattr_schily_bin.c +++ /dev/null @@ -1,48 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* - * tar_xattr_schily_bin.c - * - * Copyright (C) 2019 David Oberhollenzer - */ -#include "test_tar.h" - -static const uint8_t value[] = { - 0x00, 0x00, 0x00, 0x02, - 0x00, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, -}; - -int main(void) -{ - tar_header_decoded_t hdr; - char buffer[6]; - FILE *fp; - - TEST_ASSERT(chdir(TEST_PATH) == 0); - - fp = test_open_read("xattr/xattr-schily-binary.tar"); - TEST_ASSERT(read_header(fp, &hdr) == 0); - TEST_EQUAL_UI(hdr.sb.st_mode, S_IFREG | 0644); - TEST_EQUAL_UI(hdr.sb.st_uid, 01750); - TEST_EQUAL_UI(hdr.sb.st_gid, 01750); - TEST_EQUAL_UI(hdr.sb.st_size, 5); - TEST_EQUAL_UI(hdr.sb.st_mtime, 1543094477); - TEST_EQUAL_UI(hdr.mtime, 1543094477); - TEST_STR_EQUAL(hdr.name, "input.txt"); - TEST_ASSERT(!hdr.unknown_record); - TEST_ASSERT(read_retry("data0", fp, buffer, 5) == 0); - buffer[5] = '\0'; - TEST_STR_EQUAL(buffer, "test\n"); - - TEST_NOT_NULL(hdr.xattr); - TEST_STR_EQUAL(hdr.xattr->key, "security.capability"); - TEST_EQUAL_UI(hdr.xattr->value_len, sizeof(value)); - TEST_ASSERT(memcmp(hdr.xattr->value, value, sizeof(value)) == 0); - TEST_NULL(hdr.xattr->next); - - clear_header(&hdr); - fclose(fp); - return EXIT_SUCCESS; -} diff --git a/tests/test_tar.h b/tests/test_tar.h index 3bbf328..9ec2b12 100644 --- a/tests/test_tar.h +++ b/tests/test_tar.h @@ -16,155 +16,4 @@ #define TEST_PATH STRVALUE(TESTPATH) -static ATTRIB_UNUSED void testcase_simple(const char *path, sqfs_s64 ts, - sqfs_u32 uid, sqfs_u32 gid, - const char *fname) -{ - tar_header_decoded_t hdr; - char buffer[6]; - FILE *fp; - - fp = test_open_read(path); - TEST_ASSERT(read_header(fp, &hdr) == 0); - TEST_EQUAL_UI(hdr.sb.st_mode, S_IFREG | 0644); - TEST_EQUAL_UI(hdr.sb.st_uid, uid); - TEST_EQUAL_UI(hdr.sb.st_gid, gid); - TEST_EQUAL_UI(hdr.sb.st_size, 5); - - if (sizeof(time_t) < sizeof(ts) && ts > INT32_MAX) { - TEST_EQUAL_UI(hdr.sb.st_mtime, INT32_MAX); - } else { - TEST_EQUAL_UI(hdr.sb.st_mtime, ts); - } - - TEST_EQUAL_UI(hdr.mtime, ts); - TEST_STR_EQUAL(hdr.name, fname); - TEST_ASSERT(!hdr.unknown_record); - - TEST_ASSERT(read_retry("tar data", fp, buffer, 5) == 0); - buffer[5] = '\0'; - TEST_STR_EQUAL(buffer, "test\n"); - clear_header(&hdr); - fclose(fp); - -} - -static ATTRIB_UNUSED void test_case_file_size(const char *path) -{ - tar_header_decoded_t hdr; - FILE *fp; - - fp = test_open_read(path); - TEST_ASSERT(read_header(fp, &hdr) == 0); - TEST_EQUAL_UI(hdr.sb.st_mode, S_IFREG | 0644); - TEST_EQUAL_UI(hdr.sb.st_uid, 01750); - TEST_EQUAL_UI(hdr.sb.st_gid, 01750); - TEST_EQUAL_UI(hdr.sb.st_size, 8589934592); - TEST_EQUAL_UI(hdr.sb.st_mtime, 1542959190); - TEST_EQUAL_UI(hdr.mtime, 1542959190); - TEST_STR_EQUAL(hdr.name, "big-file.bin"); - TEST_ASSERT(!hdr.unknown_record); - clear_header(&hdr); - fclose(fp); -} - -static ATTRIB_UNUSED void test_case_sparse(const char *path) -{ - tar_header_decoded_t hdr; - sparse_map_t *sparse; - FILE *fp; - - fp = test_open_read(path); - TEST_ASSERT(read_header(fp, &hdr) == 0); - TEST_EQUAL_UI(hdr.sb.st_mode, S_IFREG | 0644); - TEST_EQUAL_UI(hdr.sb.st_uid, 01750); - TEST_EQUAL_UI(hdr.sb.st_gid, 01750); - TEST_EQUAL_UI(hdr.sb.st_size, 2097152); - TEST_EQUAL_UI(hdr.actual_size, 2097152); - TEST_EQUAL_UI(hdr.record_size, 32768); - TEST_STR_EQUAL(hdr.name, "input.bin"); - TEST_ASSERT(!hdr.unknown_record); - - sparse = hdr.sparse; - TEST_NOT_NULL(sparse); - TEST_EQUAL_UI(sparse->offset, 0); - TEST_EQUAL_UI(sparse->count, 4096); - - sparse = sparse->next; - TEST_NOT_NULL(sparse); - TEST_EQUAL_UI(sparse->offset, 262144); - TEST_EQUAL_UI(sparse->count, 4096); - - sparse = sparse->next; - TEST_NOT_NULL(sparse); - TEST_EQUAL_UI(sparse->offset, 524288); - TEST_EQUAL_UI(sparse->count, 4096); - - sparse = sparse->next; - TEST_NOT_NULL(sparse); - TEST_EQUAL_UI(sparse->offset, 786432); - TEST_EQUAL_UI(sparse->count, 4096); - - sparse = sparse->next; - TEST_NOT_NULL(sparse); - TEST_EQUAL_UI(sparse->offset, 1048576); - TEST_EQUAL_UI(sparse->count, 4096); - - sparse = sparse->next; - TEST_NOT_NULL(sparse); - TEST_EQUAL_UI(sparse->offset, 1310720); - TEST_EQUAL_UI(sparse->count, 4096); - - sparse = sparse->next; - TEST_NOT_NULL(sparse); - TEST_EQUAL_UI(sparse->offset, 1572864); - TEST_EQUAL_UI(sparse->count, 4096); - - sparse = sparse->next; - TEST_NOT_NULL(sparse); - TEST_EQUAL_UI(sparse->offset, 1835008); - TEST_EQUAL_UI(sparse->count, 4096); - - sparse = sparse->next; - TEST_NOT_NULL(sparse); - TEST_EQUAL_UI(sparse->offset, 2097152); - TEST_EQUAL_UI(sparse->count, 0); - - sparse = sparse->next; - TEST_NULL(sparse); - - clear_header(&hdr); - fclose(fp); -} - -static ATTRIB_UNUSED void test_case_xattr_simple(const char *path) -{ - tar_header_decoded_t hdr; - char buffer[6]; - FILE *fp; - - fp = test_open_read(path); - TEST_ASSERT(read_header(fp, &hdr) == 0); - TEST_EQUAL_UI(hdr.sb.st_mode, S_IFREG | 0644); - TEST_EQUAL_UI(hdr.sb.st_uid, 01750); - TEST_EQUAL_UI(hdr.sb.st_gid, 01750); - TEST_EQUAL_UI(hdr.sb.st_size, 5); - TEST_EQUAL_UI(hdr.sb.st_mtime, 1543094477); - TEST_EQUAL_UI(hdr.mtime, 1543094477); - TEST_STR_EQUAL(hdr.name, "input.txt"); - TEST_ASSERT(!hdr.unknown_record); - TEST_ASSERT(read_retry("reading tar data", fp, buffer, 5) == 0); - buffer[5] = '\0'; - TEST_STR_EQUAL(buffer, "test\n"); - - TEST_NOT_NULL(hdr.xattr); - TEST_STR_EQUAL(hdr.xattr->key, "user.mime_type"); - TEST_STR_EQUAL((const char *)hdr.xattr->value, "text/plain"); - TEST_EQUAL_UI(hdr.xattr->value_len, 10); - TEST_NULL(hdr.xattr->next); - - clear_header(&hdr); - fclose(fp); -} - #endif /* TEST_TAR_H */ -- cgit v1.2.3