from libarchive_test.
SVN-Revision: 653
/* Read entries, match up names with list above. */
for (i = 0; i < 6; ++i) {
r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping BZIP2 compression check: "
+ "This version of libarchive was compiled "
+ "without bzip2 support");
+ goto finish;
+ }
+ }
failure("Could not read file %d (%s) from %s", i, n[i], name);
assertEqualIntA(a, ARCHIVE_OK, r);
if (r != ARCHIVE_OK) {
assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_USTAR);
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
DEFINE_TEST(test_compat_bzip2)
{
-#if HAVE_BZLIB_H
compat_bzip2("test_compat_bzip2_1.tbz");
compat_bzip2("test_compat_bzip2_2.tbz");
-#else
- skipping("Need bzlib");
-#endif
}
/* Read entries, match up names with list above. */
for (i = 0; i < 6; ++i) {
r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping GZIP compression check: "
+ "This version of libarchive was compiled "
+ "without gzip support");
+ goto finish;
+ }
+ }
failure("Could not read file %d (%s) from %s", i, n[i], name);
assertEqualIntA(a, ARCHIVE_OK, r);
if (r != ARCHIVE_OK) {
assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_USTAR);
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
DEFINE_TEST(test_compat_gzip)
{
-#if HAVE_ZLIB_H
/* This sample has been 'split', each piece compressed separately,
* then concatenated. Gunzip will emit the concatenated result. */
/* Not supported in libarchive 2.6 and earlier */
/* This sample has been compressed as a single stream, but then
* some unrelated garbage text has been appended to the end. */
verify("test_compat_gzip_2.tgz");
-#else
- skipping("Need zlib");
-#endif
}
char name[] = "test_compat_zip_1.zip";
struct archive_entry *ae;
struct archive *a;
+ int r;
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a));
assertEqualString("META-INF/MANIFEST.MF", archive_entry_pathname(ae));
/* Read second entry. */
- assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+ r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "libarchive compiled without deflate support (no libz)") == 0) {
+ skipping("Skipping ZIP compression check: %s",
+ archive_error_string(a));
+ goto finish;
+ }
+ }
+ assertEqualIntA(a, ARCHIVE_OK, r);
assertEqualString("tmp.class", archive_entry_pathname(ae));
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ZIP);
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
DEFINE_TEST(test_compat_zip)
{
-#if HAVE_ZLIB_H
test_compat_zip_1();
-#else
- skipping("Need zlib");
-#endif
}
static const char *
files[] = {
"test_fuzz_1.iso",
-#if HAVE_BZLIB_H
"test_compat_bzip2_1.tbz",
-#endif
"test_compat_gtar_1.tar",
"test_compat_tar_hardlink_1.tar",
-#if HAVE_ZLIB_H
"test_compat_zip_1.zip",
-#endif
"test_read_format_gtar_sparse_1_17_posix10_modified.tar",
"test_read_format_tar_empty_filename.tar",
-#if HAVE_ZLIB_H
"test_read_format_zip.zip",
-#endif
NULL
};
const char **filep;
for (filep = files; *filep != NULL; ++filep) {
+ struct archive_entry *ae;
+ struct archive *a;
char *rawimage, *image;
size_t size;
- int i;
+ int i, r;
extract_reference_file(*filep);
rawimage = slurpfile(&size, *filep);
assert(image != NULL);
srand(time(NULL));
+ assert((a = archive_read_new()) != NULL);
+ assert(0 == archive_read_support_compression_all(a));
+ assert(0 == archive_read_support_format_all(a));
+ assert(0 == archive_read_open_memory(a, rawimage, size));
+ r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping GZIP/BZIP2 compression check: "
+ "This version of libarchive was compiled "
+ "without gzip/bzip2 support");
+ assert(0 == archive_read_close(a));
+ assert(0 == archive_read_finish(a));
+ continue;
+ }
+ } else {
+ char buff[20];
+
+ r = archive_read_data(a, buff, 19);
+ if (r < ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "libarchive compiled without deflate support (no libz)") == 0) {
+ skipping("Skipping ZIP compression check: %s",
+ archive_error_string(a));
+ assert(0 == archive_read_close(a));
+ assert(0 == archive_read_finish(a));
+ continue;
+ }
+ }
+ }
+ assert(0 == archive_read_close(a));
+ assert(0 == archive_read_finish(a));
+
for (i = 0; i < 100; ++i) {
- struct archive_entry *ae;
- struct archive *a;
int j, fd, numbytes;
/* Fuzz < 1% of the bytes in the archive. */
DEFINE_TEST(test_read_format_cpio_bin_bz2)
{
-#if HAVE_BZLIB_H
struct archive_entry *ae;
struct archive *a;
+ int r;
+
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK,
archive_read_support_compression_all(a));
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));
+ r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping BZ2 compression check: "
+ "This version of libarchive was compiled "
+ "without bz2 support");
+ goto finish;
+ }
+ }
+ assertEqualIntA(a, ARCHIVE_OK, r);
assert(archive_compression(a) == ARCHIVE_COMPRESSION_BZIP2);
assert(archive_format(a) == ARCHIVE_FORMAT_CPIO_BIN_LE);
assert(0 == archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
assert(0 == archive_read_finish(a));
#endif
-#else
- skipping("Need bzlib");
-#endif
}
DEFINE_TEST(test_read_format_cpio_bin_gz)
{
-#if HAVE_ZLIB_H
struct archive_entry *ae;
struct archive *a;
+ int r;
+
assert((a = archive_read_new()) != NULL);
assert(0 == archive_read_support_compression_all(a));
assert(0 == archive_read_support_format_all(a));
assert(0 == archive_read_open_memory(a, archive, sizeof(archive)));
- assert(0 == archive_read_next_header(a, &ae));
+ r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ /* TODO: when cpio really broken */
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping GZIP compression check: "
+ "This version of libarchive was compiled "
+ "without gzip support");
+ goto finish;
+ }
+ }
+ assert(0 == r);
assert(archive_compression(a) == ARCHIVE_COMPRESSION_GZIP);
assert(archive_format(a) == ARCHIVE_FORMAT_CPIO_BIN_LE);
assert(0 == archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
assert(0 == archive_read_finish(a));
#endif
-#else
- skipping("Need zlib");
-#endif
}
"Unrecognized archive format") == 0) {
skipping("Skipping XZ compression check: "
"This version of libarchive was compiled "
- "without xz support",
- archive_error_string(a));
+ "without xz support");
goto finish;
}
}
DEFINE_TEST(test_read_format_cpio_svr4_gzip)
{
-#if HAVE_ZLIB_H
struct archive_entry *ae;
struct archive *a;
+ int r;
+
assert((a = archive_read_new()) != NULL);
assert(0 == archive_read_support_compression_all(a));
assert(0 == archive_read_support_format_all(a));
assert(0 == archive_read_open_memory(a, archive, sizeof(archive)));
- assert(0 == archive_read_next_header(a, &ae));
+ r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping GZIP compression check: "
+ "This version of libarchive was compiled "
+ "without gzip support");
+ goto finish;
+ }
+ }
+ assert(0 == r);
assert(archive_compression(a) == ARCHIVE_COMPRESSION_GZIP);
assert(archive_format(a) == ARCHIVE_FORMAT_CPIO_SVR4_NOCRC);
assert(0 == archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
assert(0 == archive_read_finish(a));
#endif
-#else
- skipping("Need zlib");
-#endif
}
DEFINE_TEST(test_read_format_gtar_gz)
{
-#if HAVE_ZLIB_H
struct archive_entry *ae;
struct archive *a;
+ int r;
+
assert((a = archive_read_new()) != NULL);
assert(0 == archive_read_support_compression_all(a));
assert(0 == archive_read_support_format_all(a));
assert(0 == archive_read_open_memory(a, archive, sizeof(archive)));
- assert(0 == archive_read_next_header(a, &ae));
+ r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping GZIP compression check: "
+ "This version of libarchive was compiled "
+ "without gzip support");
+ goto finish;
+ }
+ }
+ assert(0 == r);
assert(archive_compression(a) == ARCHIVE_COMPRESSION_GZIP);
assert(archive_format(a) == ARCHIVE_FORMAT_TAR_GNUTAR);
assert(0 == archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
assert(0 == archive_read_finish(a));
#endif
-#else
- skipping("Need zlib");
-#endif
}
DEFINE_TEST(test_read_format_iso_gz)
{
-#if HAVE_ZLIB_H
struct archive_entry *ae;
struct archive *a;
+ int r;
+
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK,
archive_read_support_compression_all(a));
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));
+ r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping GZIP compression check: "
+ "This version of libarchive was compiled "
+ "without gzip support");
+ goto finish;
+ }
+ }
+ assertEqualIntA(a, ARCHIVE_OK, r);
assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_GZIP);
assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660);
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
assertEqualInt(ARCHIVE_OK, archive_read_finish(a));
#endif
-#else
- skipping("Need zlib");
-#endif
}
DEFINE_TEST(test_read_format_pax_bz2)
{
-#if HAVE_BZLIB_H
struct archive_entry *ae;
struct archive *a;
+ int r;
+
assert((a = archive_read_new()) != NULL);
assert(0 == archive_read_support_compression_all(a));
assert(0 == archive_read_support_format_all(a));
assert(0 == archive_read_open_memory(a, archive, sizeof(archive)));
- assert(0 == archive_read_next_header(a, &ae));
+ r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping BZIP2 compression check: "
+ "This version of libarchive was compiled "
+ "without bzip2 support");
+ goto finish;
+ }
+ }
+ assert(0 == r);
assert(archive_compression(a) == ARCHIVE_COMPRESSION_BZIP2);
assert(archive_format(a) == ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE);
assert(0 == archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
assert(0 == archive_read_finish(a));
#endif
-#else
- skipping("Need bzlib");
-#endif
}
DEFINE_TEST(test_read_format_tbz)
{
-#if HAVE_BZLIB_H
struct archive_entry *ae;
struct archive *a;
+ int r;
+
assert((a = archive_read_new()) != NULL);
assert(0 == archive_read_support_compression_all(a));
assert(0 == archive_read_support_format_all(a));
assert(0 == archive_read_open_memory(a, archive, sizeof(archive)));
- assert(0 == archive_read_next_header(a, &ae));
+ r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping BZIP2 compression check: "
+ "This version of libarchive was compiled "
+ "without bzip2 support");
+ goto finish;
+ }
+ }
+ assert(0 == r);
assert(archive_compression(a) == ARCHIVE_COMPRESSION_BZIP2);
assert(archive_format(a) == ARCHIVE_FORMAT_TAR_USTAR);
assert(0 == archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
assert(0 == archive_read_finish(a));
#endif
-#else
- skipping("Need bzlib");
-#endif
}
DEFINE_TEST(test_read_format_tgz)
{
-#if HAVE_ZLIB_H
struct archive_entry *ae;
struct archive *a;
+ int r;
+
assert((a = archive_read_new()) != NULL);
assert(0 == archive_read_support_compression_all(a));
assert(0 == archive_read_support_format_all(a));
assert(0 == archive_read_open_memory(a, archive, sizeof(archive)));
- assert(0 == archive_read_next_header(a, &ae));
+ r = archive_read_next_header(a, &ae);
+ if (r != ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "Unrecognized archive format") == 0) {
+ skipping("Skipping GZIP compression check: "
+ "This version of libarchive was compiled "
+ "without gzip support");
+ goto finish;
+ }
+ }
+ assert(0 == r);
assert(archive_compression(a) == ARCHIVE_COMPRESSION_GZIP);
assert(archive_format(a) == ARCHIVE_FORMAT_TAR_USTAR);
assert(0 == archive_read_close(a));
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
assert(0 == archive_read_finish(a));
#endif
-#else
- skipping("Need zlib");
-#endif
}
DEFINE_TEST(test_read_format_zip)
{
-#if HAVE_ZLIB_H
const char *refname = "test_read_format_zip.zip";
struct archive_entry *ae;
struct archive *a;
const void *pv;
size_t s;
off_t o;
+ int r;
extract_reference_file(refname);
assert((a = archive_read_new()) != NULL);
assertEqualInt(1179604289, archive_entry_mtime(ae));
assertEqualInt(18, archive_entry_size(ae));
failure("archive_read_data() returns number of bytes read");
- assertEqualInt(18, archive_read_data(a, buff, 19));
+ r = archive_read_data(a, buff, 19);
+ if (r < ARCHIVE_OK) {
+ if (strcmp(archive_error_string(a),
+ "libarchive compiled without deflate support (no libz)") == 0) {
+ skipping("Skipping ZIP compression check: %s",
+ archive_error_string(a));
+ goto finish;
+ }
+ }
+ assertEqualInt(18, r);
assert(0 == memcmp(buff, "hello\nhello\nhello\n", 18));
assertA(0 == archive_read_next_header(a, &ae));
assertEqualString("file2", archive_entry_pathname(ae));
assertA(archive_compression(a) == ARCHIVE_COMPRESSION_NONE);
assertA(archive_format(a) == ARCHIVE_FORMAT_ZIP);
assert(0 == archive_read_close(a));
-
+finish:
#if ARCHIVE_VERSION_NUMBER < 2000000
archive_read_finish(a);
#else
assert(0 == archive_read_finish(a));
#endif
-#else
- skipping("Need zlib");
-#endif
}