freebsd-dev/lib/libarchive/test
Tim Kientzle 60617bf578 A subtle point: "pax interchange format" mandates that all strings
(including pathname, gname, uname) be stored in UTF-8.  This usually
doesn't cause problems on FreeBSD because the "C" locale on FreeBSD
can convert any byte to Unicode/wchar_t and from there to UTF-8.  In
other locales (including the "C" locale on Linux which is really
ASCII), you can get into trouble with pathnames that cannot be
converted to UTF-8.

Libarchive's pax writer truncated pathnames and other strings at the
first nonconvertible character.  (ouch!)  Other archivers have worked
around this by storing unconvertible pathnames as raw binary, a
practice which has been sanctioned by the Austin group.  However,
libarchive's pax reader would segfault reading headers that weren't
proper UTF-8.  (ouch!)  Since bsdtar defaults to pax format, this
affects bsdtar rather heavily.

To correctly support the new "hdrcharset" header that is going into
SUS and to handle conversion failures in general, libarchive's pax reader
and writer have been overhauled fairly extensively.  They used to do
most of the pax header processing using wchar_t (Unicode); they now do
most of it using char so that common logic applies to either UTF-8 or
"binary" strings.

As a bonus, a number of extraneous conversions to/from wchar_t have
been eliminated, which should speed things up just a tad.

Thanks to: Bjoern Jacke for originally reporting this to me
Thanks to: Joerg Sonnenberger for noting a bad typo in my first draft of this
Thanks to: Gunnar Ritter for getting the standard fixed
MFC after: 5 days
2008-03-15 01:43:59 +00:00
..
.cvsignore Ignore some built files. 2008-03-15 00:52:22 +00:00
main.c Portability: Eliminate the need for uudecode by incorporating 2008-03-12 05:12:23 +00:00
Makefile A subtle point: "pax interchange format" mandates that all strings 2008-03-15 01:43:59 +00:00
read_open_memory.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
README Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_acl_basic.c Make test suite work with libarchive 1.3.1: Take advantage of 2007-07-06 15:43:11 +00:00
test_acl_pax.c Make test suite work with libarchive 1.3.1: Take advantage of 2007-07-06 15:43:11 +00:00
test_archive_api_feature.c Rework the versioning implementation and test to match the 2008-03-14 22:31:57 +00:00
test_bad_fd.c
test_compat_gtar_1.tgz.uu Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_compat_gtar.c Portability: Eliminate the need for uudecode by incorporating 2008-03-12 05:12:23 +00:00
test_compat_tar_hardlink_1.tar.uu Add a test to verify compatibility with archives with 2008-01-31 07:47:38 +00:00
test_compat_tar_hardlink.c Portability: Eliminate the need for uudecode by incorporating 2008-03-12 05:12:23 +00:00
test_compat_zip_1.zip.uu Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_compat_zip.c Portability: Eliminate the need for uudecode by incorporating 2008-03-12 05:12:23 +00:00
test_empty_write.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_entry_strmode.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_entry.c Don't lie. If a string can't be converted to a wide (Unicode) string, 2008-03-14 23:19:46 +00:00
test_pax_filename_encoding.c A subtle point: "pax interchange format" mandates that all strings 2008-03-15 01:43:59 +00:00
test_pax_filename_encoding.tar.gz.uu A subtle point: "pax interchange format" mandates that all strings 2008-03-15 01:43:59 +00:00
test_read_compress_program.c Make test suite work with libarchive 1.3.1: Take advantage of 2007-07-06 15:43:11 +00:00
test_read_data_large.c libarchive 2.2.3 2007-05-29 01:00:21 +00:00
test_read_extract.c libarchive 2.2.3 2007-05-29 01:00:21 +00:00
test_read_format_ar.c Current 'ar' read support in libarchive can only handle a GNU/SVR4 2008-03-12 21:10:26 +00:00
test_read_format_cpio_bin_bz2.c
test_read_format_cpio_bin_gz.c
test_read_format_cpio_bin_Z.c
test_read_format_cpio_bin.c
test_read_format_cpio_odc.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_format_cpio_svr4_gzip.c
test_read_format_cpio_svr4c_Z.c
test_read_format_empty.c
test_read_format_gtar_gz.c
test_read_format_gtar_sparse_1_13.tgz.uu Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_format_gtar_sparse_1_17_posix00.tgz.uu Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_format_gtar_sparse_1_17_posix01.tgz.uu Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_format_gtar_sparse_1_17_posix10_modified.tar.uu Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_format_gtar_sparse_1_17_posix10.tgz.uu Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_format_gtar_sparse_1_17.tgz.uu Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_format_gtar_sparse.c Portability: Eliminate the need for uudecode by incorporating 2008-03-12 05:12:23 +00:00
test_read_format_iso_gz.c
test_read_format_isorr_bz2.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_format_mtree.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_format_pax_bz2.c
test_read_format_tar.c Since the tar bidder can never get called more than once, it 2008-01-13 23:50:30 +00:00
test_read_format_tbz.c
test_read_format_tgz.c
test_read_format_tz.c
test_read_format_zip.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_large.c libarchive 2.2.3 2007-05-29 01:00:21 +00:00
test_read_pax_truncated.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_read_position.c libarchive 2.2.3 2007-05-29 01:00:21 +00:00
test_read_truncated.c libarchive 2.2.3 2007-05-29 01:00:21 +00:00
test_tar_filenames.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_tar_large.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_write_compress_program.c Make test suite work with libarchive 1.3.1: Take advantage of 2007-07-06 15:43:11 +00:00
test_write_compress.c Support for writing 'compress' format, thanks to Joerg Sonnenberger. 2008-03-14 20:35:38 +00:00
test_write_disk_hardlink.c Issues with hardlinks in newc-format files prompted me to 2008-01-18 05:05:58 +00:00
test_write_disk_perms.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_write_disk_secure.c Make test suite work with libarchive 1.3.1: Take advantage of 2007-07-06 15:43:11 +00:00
test_write_disk.c Explain a subtle API change that was made recently. 2008-01-23 05:47:08 +00:00
test_write_format_ar.c Current 'ar' read support in libarchive can only handle a GNU/SVR4 2008-03-12 21:10:26 +00:00
test_write_format_cpio_empty.c libarchive 2.2.3 2007-05-29 01:00:21 +00:00
test_write_format_cpio_newc.c Properly pad symlinks when writing cpio "newc" format. 2008-01-23 05:43:26 +00:00
test_write_format_cpio_odc.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_write_format_cpio.c Extensive improvements to the libarchive_test test program that 2008-01-01 22:28:04 +00:00
test_write_format_shar_empty.c libarchive 2.2.3 2007-05-29 01:00:21 +00:00
test_write_format_tar_empty.c Make test suite work with libarchive 1.3.1: Take advantage of 2007-07-06 15:43:11 +00:00
test_write_format_tar.c libarchive 2.2.3 2007-05-29 01:00:21 +00:00
test_write_open_memory.c libarchive 2.2.3 2007-05-29 01:00:21 +00:00
test.h Portability: Eliminate the need for uudecode by incorporating 2008-03-12 05:12:23 +00:00

$FreeBSD$

This is the test harness for libarchive.

It compiles into a single program "libarchive_test" that is intended
to exercise as much of the library as possible.  It is, of course,
very much a work in progress.

Each test is a function named test_foo in a file named test_foo.c.
Note that the file name is the same as the function name.
Each file must start with this line:

  #include "test.h"

The test function must be declared with a line of this form

  DEFINE_TEST(test_foo)

Nothing else should appear on that line.

When you add a test, please update the Makefile to add your
file to the list of tests.  The Makefile and main.c use various
macro trickery to automatically collect a list of test functions
to be invoked.

Each test function can rely on the following:

  * The current directory will be a freshly-created empty directory
    suitable for that test.  (The top-level main() creates a
    directory for each separate test and chdir()s to that directory
    before running the test.)

  * The test function should use assert(), assertA() and similar macros
    defined in test.h.  If you need to add new macros of this form, feel
    free to do so.  The current macro set includes assertEqualInt() and
    assertEqualString() that print out additional detail about their
    arguments if the assertion does fail.  'A' versions also accept
    a struct archive * and display any error message from there on
    failure.

  * You are encouraged to document each assertion with a failure() call
    just before the assert.  The failure() function is a printf-like
    function whose text is displayed only if the assertion fails.  It
    can be used to display additional information relevant to the failure:

       failure("The data read from file %s did not match the data written to that file.", filename);
       assert(strcmp(buff1, buff2) == 0);

  * Tests are encouraged to be economical with their memory and disk usage,
    though this is not essential.  The test is occasionally run under
    a memory debugger to try to locate memory leaks in the library;
    as a result, tests should be careful to release any memory they
    allocate.

  * Disable tests on specific platforms as necessary.  Please don't
    use config.h to adjust feature requirements, as I want the tests
    to also serve as a check on the configure process.  The following
    form is appropriate:

#if !defined(__PLATFORM) && !defined(__Platform2__)
    assert(xxxx)
#endif