summaryrefslogtreecommitdiffstats
path: root/lib/libarchive/test/test_read_compress_program.c
diff options
context:
space:
mode:
authorkientzle <kientzle@FreeBSD.org>2009-04-12 05:47:23 +0000
committerkientzle <kientzle@FreeBSD.org>2009-04-12 05:47:23 +0000
commitf4376efe43486d410755216aacd2459e2c05a8c3 (patch)
tree59389c5835bfd0030e274fbab2cefb55834810e5 /lib/libarchive/test/test_read_compress_program.c
parent9ad11762405b9796941c7374b61690a962eadc93 (diff)
downloadFreeBSD-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.c50
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));
}
OpenPOWER on IntegriCloud