diff options
author | kientzle <kientzle@FreeBSD.org> | 2009-04-12 05:47:23 +0000 |
---|---|---|
committer | kientzle <kientzle@FreeBSD.org> | 2009-04-12 05:47:23 +0000 |
commit | f4376efe43486d410755216aacd2459e2c05a8c3 (patch) | |
tree | 59389c5835bfd0030e274fbab2cefb55834810e5 /lib/libarchive/test/test_read_compress_program.c | |
parent | 9ad11762405b9796941c7374b61690a962eadc93 (diff) | |
download | FreeBSD-src-f4376efe43486d410755216aacd2459e2c05a8c3.zip FreeBSD-src-f4376efe43486d410755216aacd2459e2c05a8c3.tar.gz |
Merge from libarchive.googlecode.com r791, r879, r884, r948: Various
fixes to read_support_compression_program. In particular, failure of
the external program is detected a lot earlier, which gives much more
reasonable error handling.
Diffstat (limited to 'lib/libarchive/test/test_read_compress_program.c')
-rw-r--r-- | lib/libarchive/test/test_read_compress_program.c | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/lib/libarchive/test/test_read_compress_program.c b/lib/libarchive/test/test_read_compress_program.c index 020c8f8..1044197 100644 --- a/lib/libarchive/test/test_read_compress_program.c +++ b/lib/libarchive/test/test_read_compress_program.c @@ -35,14 +35,34 @@ static unsigned char archive[] = { DEFINE_TEST(test_read_compress_program) { int r; - -#if ARCHIVE_VERSION_NUMBER < 1009000 - skipping("archive_read_support_compression_program()"); -#else struct archive_entry *ae; struct archive *a; const char *extprog; + /* + * First, test handling when a non-existent compression + * program is requested. + */ + assert((a = archive_read_new()) != NULL); + r = archive_read_support_compression_program(a, "nonexistent"); + if (r == ARCHIVE_FATAL) { + skipping("archive_read_support_compression_program() " + "unsupported on this platform"); + return; + } + assertEqualIntA(a, ARCHIVE_OK, r); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_format_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_open_memory(a, archive, sizeof(archive))); + assertEqualIntA(a, ARCHIVE_FATAL, + archive_read_next_header(a, &ae)); + assertEqualIntA(a, ARCHIVE_WARN, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); + + /* + * If we have "gunzip", try using that. + */ if ((extprog = external_gzip_program(1)) == NULL) { skipping("There is no gzip uncompression " "program in this platform"); @@ -51,28 +71,18 @@ DEFINE_TEST(test_read_compress_program) assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_none(a)); - r = archive_read_support_compression_program(a, extprog); - if (r == ARCHIVE_FATAL) { - skipping("archive_read_support_compression_program() " - "unsupported on this platform"); - return; - } - assertEqualIntA(a, ARCHIVE_OK, r); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_compression_program(a, extprog)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, archive, sizeof(archive))); assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); - assert(archive_compression(a) == ARCHIVE_COMPRESSION_PROGRAM); - assert(archive_format(a) == ARCHIVE_FORMAT_TAR_USTAR); - assert(0 == archive_read_close(a)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_read_finish(a); -#else - assert(0 == archive_read_finish(a)); -#endif -#endif + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_PROGRAM); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_USTAR); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); } |