summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/Makemodule.am173
-rw-r--r--tests/tar_big_file.c27
-rw-r--r--tests/tar_gnu.c32
-rw-r--r--tests/tar_pax.c31
-rw-r--r--tests/tar_simple.c66
-rw-r--r--tests/tar_sparse.c82
-rw-r--r--tests/tar_sparse_gnu.c2
-rw-r--r--tests/tar_sparse_gnu1.c15
-rw-r--r--tests/tar_sparse_gnu2.c16
-rw-r--r--tests/tar_ustar.c33
-rw-r--r--tests/tar_xattr.c38
-rw-r--r--tests/tar_xattr_bin.c (renamed from tests/tar_xattr_schily_bin.c)6
-rw-r--r--tests/tar_xattr_bsd.c15
-rw-r--r--tests/tar_xattr_schily.c15
-rw-r--r--tests/test_tar.h151
15 files changed, 364 insertions, 338 deletions
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 <goliath@infraroot.at>
+ */
+#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 <goliath@infraroot.at>
- */
-#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 <goliath@infraroot.at>
- */
-#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 <goliath@infraroot.at>
+ */
+#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 <goliath@infraroot.at>
+ */
+#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 <goliath@infraroot.at>
- */
-#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 <goliath@infraroot.at>
- */
-#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 <goliath@infraroot.at>
- */
-#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 <goliath@infraroot.at>
+ */
+#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_schily_bin.c b/tests/tar_xattr_bin.c
index 0fe2004..ca0f918 100644
--- a/tests/tar_xattr_schily_bin.c
+++ b/tests/tar_xattr_bin.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-3.0-or-later */
/*
- * tar_xattr_schily_bin.c
+ * tar_xattr_bin.c
*
* Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at>
*/
@@ -20,9 +20,7 @@ int main(void)
char buffer[6];
FILE *fp;
- TEST_ASSERT(chdir(TEST_PATH) == 0);
-
- fp = test_open_read("xattr/xattr-schily-binary.tar");
+ 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);
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 <goliath@infraroot.at>
- */
-#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 <goliath@infraroot.at>
- */
-#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/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 */