1231200Smm/*- 2231200Smm * Copyright (c) 2011 Michihiro NAKAJIMA 3231200Smm * All rights reserved. 4231200Smm * 5231200Smm * Redistribution and use in source and binary forms, with or without 6231200Smm * modification, are permitted provided that the following conditions 7231200Smm * are met: 8231200Smm * 1. Redistributions of source code must retain the above copyright 9231200Smm * notice, this list of conditions and the following disclaimer. 10231200Smm * 2. Redistributions in binary form must reproduce the above copyright 11231200Smm * notice, this list of conditions and the following disclaimer in the 12231200Smm * documentation and/or other materials provided with the distribution. 13231200Smm * 14231200Smm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 15231200Smm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16231200Smm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17231200Smm * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 18231200Smm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19231200Smm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20231200Smm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21231200Smm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22231200Smm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23231200Smm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24231200Smm */ 25231200Smm#include "test.h" 26231200Smm__FBSDID("$FreeBSD"); 27231200Smm 28302001Smm#if defined(_WIN32) && !defined(__CYGWIN__) 29302001Smm#define close _close 30302001Smm#define open _open 31302001Smm#endif 32302001Smm 33231200Smm/* 34238856Smm * Extract a non-encoded file. 35238856Smm * The header of the 7z archive files is not encoded. 36231200Smm */ 37231200Smmstatic void 38302001Smmtest_copy(int use_open_fd) 39231200Smm{ 40231200Smm const char *refname = "test_read_format_7zip_copy.7z"; 41231200Smm struct archive_entry *ae; 42231200Smm struct archive *a; 43231200Smm char buff[128]; 44302001Smm int fd = -1; 45231200Smm 46231200Smm extract_reference_file(refname); 47231200Smm assert((a = archive_read_new()) != NULL); 48231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 49231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 50302001Smm if (use_open_fd) { 51302001Smm fd = open(refname, O_RDONLY | O_BINARY); 52302001Smm assertEqualIntA(a, ARCHIVE_OK, 53302001Smm archive_read_open_fd(a, fd, 10240)); 54302001Smm } else { 55302001Smm assertEqualIntA(a, ARCHIVE_OK, 56302001Smm archive_read_open_filename(a, refname, 10240)); 57302001Smm } 58231200Smm 59231200Smm /* Verify regular file1. */ 60231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 61238856Smm assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae)); 62231200Smm assertEqualString("file1", archive_entry_pathname(ae)); 63231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 64231200Smm assertEqualInt(60, archive_entry_size(ae)); 65302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 66302001Smm assert(archive_read_has_encrypted_entries(a) > ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 67231200Smm assertEqualInt(60, archive_read_data(a, buff, sizeof(buff))); 68231200Smm assertEqualMem(buff, " ", 4); 69231200Smm 70231200Smm assertEqualInt(1, archive_file_count(a)); 71231200Smm 72231200Smm /* End of archive. */ 73231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 74231200Smm 75231200Smm /* Verify archive format. */ 76248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 77231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 78231200Smm 79231200Smm /* Close the archive. */ 80231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 81231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 82302001Smm if (fd != -1) 83302001Smm close(fd); 84231200Smm} 85231200Smm 86231200Smm/* 87231200Smm * An archive file has no entry. 88231200Smm */ 89231200Smmstatic void 90358090Smmtest_empty_archive(void) 91231200Smm{ 92231200Smm const char *refname = "test_read_format_7zip_empty_archive.7z"; 93231200Smm struct archive_entry *ae; 94231200Smm struct archive *a; 95231200Smm 96231200Smm extract_reference_file(refname); 97231200Smm assert((a = archive_read_new()) != NULL); 98231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 99231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 100231200Smm assertEqualIntA(a, ARCHIVE_OK, 101231200Smm archive_read_open_filename(a, refname, 10240)); 102231200Smm 103231200Smm /* End of archive. */ 104231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 105231200Smm 106231200Smm assertEqualInt(0, archive_file_count(a)); 107231200Smm 108231200Smm /* Verify archive format. */ 109248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 110231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 111231200Smm 112231200Smm /* Close the archive. */ 113231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 114231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 115231200Smm} 116231200Smm 117231200Smm/* 118231200Smm * An archive file has one empty file. It means there is no content 119231200Smm * in the archive file except for a header. 120231200Smm */ 121231200Smmstatic void 122358090Smmtest_empty_file(void) 123231200Smm{ 124231200Smm const char *refname = "test_read_format_7zip_empty_file.7z"; 125231200Smm struct archive_entry *ae; 126231200Smm struct archive *a; 127231200Smm 128231200Smm extract_reference_file(refname); 129231200Smm assert((a = archive_read_new()) != NULL); 130231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 131231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 132231200Smm assertEqualIntA(a, ARCHIVE_OK, 133231200Smm archive_read_open_filename(a, refname, 10240)); 134231200Smm 135231200Smm /* Verify regular empty. */ 136231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 137231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 138231200Smm assertEqualString("empty", archive_entry_pathname(ae)); 139231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 140231200Smm assertEqualInt(0, archive_entry_size(ae)); 141302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 142302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 143231200Smm 144231200Smm assertEqualInt(1, archive_file_count(a)); 145231200Smm 146231200Smm /* End of archive. */ 147231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 148231200Smm 149231200Smm /* Verify archive format. */ 150248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 151231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 152231200Smm 153231200Smm /* Close the archive. */ 154231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 155231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 156231200Smm} 157231200Smm 158231200Smm/* 159231200Smm * Extract an encoded file. 160238856Smm * The header of the 7z archive files is not encoded. 161231200Smm */ 162231200Smmstatic void 163231200Smmtest_plain_header(const char *refname) 164231200Smm{ 165231200Smm struct archive_entry *ae; 166231200Smm struct archive *a; 167231200Smm char buff[128]; 168231200Smm 169231200Smm extract_reference_file(refname); 170231200Smm assert((a = archive_read_new()) != NULL); 171231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 172231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 173231200Smm assertEqualIntA(a, ARCHIVE_OK, 174231200Smm archive_read_open_filename(a, refname, 10240)); 175231200Smm 176231200Smm /* Verify regular file1. */ 177231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 178231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 179231200Smm assertEqualString("file1", archive_entry_pathname(ae)); 180231200Smm assertEqualInt(1322058763, archive_entry_mtime(ae)); 181231200Smm assertEqualInt(2844, archive_entry_size(ae)); 182302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 183302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 184231200Smm assertEqualInt(sizeof(buff), archive_read_data(a, buff, sizeof(buff))); 185231200Smm assertEqualMem(buff, "The libarchive distribution ", 28); 186231200Smm 187231200Smm assertEqualInt(1, archive_file_count(a)); 188231200Smm 189231200Smm /* End of archive. */ 190231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 191231200Smm 192231200Smm /* Verify archive format. */ 193248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 194231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 195231200Smm 196231200Smm /* Close the archive. */ 197231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 198231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 199231200Smm} 200231200Smm 201231200Smm/* 202231200Smm * Extract multi files. 203238856Smm * The header of the 7z archive files is encoded with LZMA. 204231200Smm */ 205231200Smmstatic void 206231200Smmtest_extract_all_files(const char *refname) 207231200Smm{ 208231200Smm struct archive_entry *ae; 209231200Smm struct archive *a; 210231200Smm char buff[128]; 211231200Smm 212231200Smm extract_reference_file(refname); 213231200Smm assert((a = archive_read_new()) != NULL); 214231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 215231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 216231200Smm assertEqualIntA(a, ARCHIVE_OK, 217231200Smm archive_read_open_filename(a, refname, 10240)); 218231200Smm 219231200Smm /* Verify regular file1. */ 220231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 221231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 222231200Smm assertEqualString("dir1/file1", archive_entry_pathname(ae)); 223231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 224231200Smm assertEqualInt(13, archive_entry_size(ae)); 225302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 226302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 227231200Smm assertEqualInt(13, archive_read_data(a, buff, sizeof(buff))); 228231200Smm assertEqualMem(buff, "aaaaaaaaaaaa\n", 13); 229231200Smm 230231200Smm /* Verify regular file2. */ 231231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 232231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 233231200Smm assertEqualString("file2", archive_entry_pathname(ae)); 234231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 235231200Smm assertEqualInt(26, archive_entry_size(ae)); 236302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 237302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 238231200Smm assertEqualInt(26, archive_read_data(a, buff, sizeof(buff))); 239231200Smm assertEqualMem(buff, "aaaaaaaaaaaa\nbbbbbbbbbbbb\n", 26); 240231200Smm 241231200Smm /* Verify regular file3. */ 242231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 243231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 244231200Smm assertEqualString("file3", archive_entry_pathname(ae)); 245231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 246231200Smm assertEqualInt(39, archive_entry_size(ae)); 247302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 248302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 249231200Smm assertEqualInt(39, archive_read_data(a, buff, sizeof(buff))); 250231200Smm assertEqualMem(buff, "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\n", 39); 251231200Smm 252231200Smm /* Verify regular file4. */ 253231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 254231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 255231200Smm assertEqualString("file4", archive_entry_pathname(ae)); 256231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 257231200Smm assertEqualInt(52, archive_entry_size(ae)); 258302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 259302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 260231200Smm assertEqualInt(52, archive_read_data(a, buff, sizeof(buff))); 261231200Smm assertEqualMem(buff, 262231200Smm "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\ndddddddddddd\n", 52); 263231200Smm 264231200Smm /* Verify directory dir1. */ 265231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 266231200Smm assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae)); 267231200Smm assertEqualString("dir1/", archive_entry_pathname(ae)); 268231200Smm assertEqualInt(2764801, archive_entry_mtime(ae)); 269302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 270302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 271231200Smm 272231200Smm assertEqualInt(5, archive_file_count(a)); 273231200Smm 274231200Smm /* End of archive. */ 275231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 276231200Smm 277231200Smm /* Verify archive format. */ 278248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 279231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 280231200Smm 281231200Smm /* Close the archive. */ 282231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 283231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 284231200Smm} 285231200Smm 286231200Smm/* 287231200Smm * Extract last file. 288238856Smm * The header of the 7z archive files is encoded with LZMA. 289231200Smm */ 290231200Smmstatic void 291231200Smmtest_extract_last_file(const char *refname) 292231200Smm{ 293231200Smm struct archive_entry *ae; 294231200Smm struct archive *a; 295231200Smm char buff[128]; 296231200Smm 297231200Smm extract_reference_file(refname); 298231200Smm assert((a = archive_read_new()) != NULL); 299231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 300231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 301231200Smm assertEqualIntA(a, ARCHIVE_OK, 302231200Smm archive_read_open_filename(a, refname, 10240)); 303231200Smm 304231200Smm /* Verify regular file1. */ 305231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 306231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 307231200Smm assertEqualString("dir1/file1", archive_entry_pathname(ae)); 308231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 309231200Smm assertEqualInt(13, archive_entry_size(ae)); 310302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 311302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 312231200Smm 313231200Smm /* Verify regular file2. */ 314231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 315231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 316231200Smm assertEqualString("file2", archive_entry_pathname(ae)); 317231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 318231200Smm assertEqualInt(26, archive_entry_size(ae)); 319302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 320302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 321231200Smm 322231200Smm /* Verify regular file3. */ 323231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 324231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 325231200Smm assertEqualString("file3", archive_entry_pathname(ae)); 326231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 327231200Smm assertEqualInt(39, archive_entry_size(ae)); 328302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 329302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 330231200Smm 331231200Smm /* Verify regular file4. */ 332231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 333231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 334231200Smm assertEqualString("file4", archive_entry_pathname(ae)); 335231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 336231200Smm assertEqualInt(52, archive_entry_size(ae)); 337302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 338302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 339231200Smm assertEqualInt(52, archive_read_data(a, buff, sizeof(buff))); 340231200Smm assertEqualMem(buff, 341231200Smm "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\ndddddddddddd\n", 52); 342231200Smm 343231200Smm /* Verify directory dir1. */ 344231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 345231200Smm assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae)); 346231200Smm assertEqualString("dir1/", archive_entry_pathname(ae)); 347231200Smm assertEqualInt(2764801, archive_entry_mtime(ae)); 348302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 349302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 350231200Smm 351231200Smm assertEqualInt(5, archive_file_count(a)); 352231200Smm 353231200Smm /* End of archive. */ 354231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 355231200Smm 356231200Smm /* Verify archive format. */ 357248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 358231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 359231200Smm 360231200Smm /* Close the archive. */ 361231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 362231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 363231200Smm} 364231200Smm 365231200Smm/* 366238856Smm * Extract a mixed archive file which has both LZMA and LZMA2 encoded files. 367231200Smm * LZMA: file1, file2, file3, file4 368231200Smm * LZMA2: zfile1, zfile2, zfile3, zfile4 369231200Smm */ 370231200Smmstatic void 371231200Smmtest_extract_all_files2(const char *refname) 372231200Smm{ 373231200Smm struct archive_entry *ae; 374231200Smm struct archive *a; 375231200Smm char buff[128]; 376231200Smm 377231200Smm extract_reference_file(refname); 378231200Smm assert((a = archive_read_new()) != NULL); 379231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 380231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 381231200Smm assertEqualIntA(a, ARCHIVE_OK, 382231200Smm archive_read_open_filename(a, refname, 10240)); 383231200Smm 384231200Smm /* Verify regular file1. */ 385231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 386231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 387231200Smm assertEqualString("dir1/file1", archive_entry_pathname(ae)); 388231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 389231200Smm assertEqualInt(13, archive_entry_size(ae)); 390302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 391302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 392231200Smm assertEqualInt(13, archive_read_data(a, buff, sizeof(buff))); 393231200Smm assertEqualMem(buff, "aaaaaaaaaaaa\n", 13); 394231200Smm 395231200Smm /* Verify regular file2. */ 396231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 397231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 398231200Smm assertEqualString("file2", archive_entry_pathname(ae)); 399231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 400231200Smm assertEqualInt(26, archive_entry_size(ae)); 401302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 402302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 403231200Smm assertEqualInt(26, archive_read_data(a, buff, sizeof(buff))); 404231200Smm assertEqualMem(buff, "aaaaaaaaaaaa\nbbbbbbbbbbbb\n", 26); 405231200Smm 406231200Smm /* Verify regular file3. */ 407231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 408231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 409231200Smm assertEqualString("file3", archive_entry_pathname(ae)); 410231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 411231200Smm assertEqualInt(39, archive_entry_size(ae)); 412302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 413302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 414231200Smm assertEqualInt(39, archive_read_data(a, buff, sizeof(buff))); 415231200Smm assertEqualMem(buff, "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\n", 39); 416231200Smm 417231200Smm /* Verify regular file4. */ 418231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 419231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 420231200Smm assertEqualString("file4", archive_entry_pathname(ae)); 421231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 422231200Smm assertEqualInt(52, archive_entry_size(ae)); 423302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 424302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 425231200Smm assertEqualInt(52, archive_read_data(a, buff, sizeof(buff))); 426231200Smm assertEqualMem(buff, 427231200Smm "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\ndddddddddddd\n", 52); 428231200Smm 429231200Smm /* Verify regular zfile1. */ 430231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 431231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 432231200Smm assertEqualString("dir1/zfile1", archive_entry_pathname(ae)); 433231200Smm assertEqualInt(5184001, archive_entry_mtime(ae)); 434231200Smm assertEqualInt(13, archive_entry_size(ae)); 435302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 436302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 437231200Smm assertEqualInt(13, archive_read_data(a, buff, sizeof(buff))); 438231200Smm assertEqualMem(buff, "aaaaaaaaaaaa\n", 13); 439231200Smm 440231200Smm /* Verify regular zfile2. */ 441231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 442231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 443231200Smm assertEqualString("zfile2", archive_entry_pathname(ae)); 444231200Smm assertEqualInt(5184001, archive_entry_mtime(ae)); 445231200Smm assertEqualInt(26, archive_entry_size(ae)); 446302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 447302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 448231200Smm assertEqualInt(26, archive_read_data(a, buff, sizeof(buff))); 449231200Smm assertEqualMem(buff, "aaaaaaaaaaaa\nbbbbbbbbbbbb\n", 26); 450231200Smm 451231200Smm /* Verify regular zfile3. */ 452231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 453231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 454231200Smm assertEqualString("zfile3", archive_entry_pathname(ae)); 455231200Smm assertEqualInt(5184001, archive_entry_mtime(ae)); 456231200Smm assertEqualInt(39, archive_entry_size(ae)); 457302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 458302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 459231200Smm assertEqualInt(39, archive_read_data(a, buff, sizeof(buff))); 460231200Smm assertEqualMem(buff, "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\n", 39); 461231200Smm 462231200Smm /* Verify regular zfile4. */ 463231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 464231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 465231200Smm assertEqualString("zfile4", archive_entry_pathname(ae)); 466231200Smm assertEqualInt(5184001, archive_entry_mtime(ae)); 467231200Smm assertEqualInt(52, archive_entry_size(ae)); 468302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 469302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 470231200Smm assertEqualInt(52, archive_read_data(a, buff, sizeof(buff))); 471231200Smm assertEqualMem(buff, 472231200Smm "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\ndddddddddddd\n", 52); 473231200Smm 474231200Smm /* Verify directory dir1. */ 475231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 476231200Smm assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae)); 477231200Smm assertEqualString("dir1/", archive_entry_pathname(ae)); 478231200Smm assertEqualInt(2764801, archive_entry_mtime(ae)); 479302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 480302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 481231200Smm 482231200Smm assertEqualInt(9, archive_file_count(a)); 483231200Smm 484231200Smm /* End of archive. */ 485231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 486231200Smm 487231200Smm /* Verify archive format. */ 488248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 489231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 490231200Smm 491231200Smm /* Close the archive. */ 492231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 493231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 494231200Smm} 495231200Smm 496231200Smm/* 497231200Smm * Extract a file compressed with DELTA + LZMA[12]. 498231200Smm */ 499231200Smmstatic void 500231200Smmtest_delta_lzma(const char *refname) 501231200Smm{ 502231200Smm struct archive_entry *ae; 503231200Smm struct archive *a; 504231200Smm size_t remaining; 505231200Smm ssize_t bytes; 506231200Smm char buff[1024]; 507231200Smm 508231200Smm extract_reference_file(refname); 509231200Smm assert((a = archive_read_new()) != NULL); 510231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 511231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 512231200Smm assertEqualIntA(a, ARCHIVE_OK, 513231200Smm archive_read_open_filename(a, refname, 10240)); 514231200Smm 515231200Smm /* Verify regular file1. */ 516231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 517231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 518231200Smm assertEqualString("file1", archive_entry_pathname(ae)); 519231200Smm assertEqualInt(172802, archive_entry_mtime(ae)); 520231200Smm assertEqualInt(27627, archive_entry_size(ae)); 521302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 522302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 523231200Smm remaining = (size_t)archive_entry_size(ae); 524231200Smm while (remaining) { 525231200Smm if (remaining < sizeof(buff)) 526231200Smm assertEqualInt(remaining, 527231200Smm bytes = archive_read_data(a, buff, sizeof(buff))); 528231200Smm else 529231200Smm assertEqualInt(sizeof(buff), 530231200Smm bytes = archive_read_data(a, buff, sizeof(buff))); 531231200Smm if (bytes > 0) 532231200Smm remaining -= bytes; 533231200Smm else 534231200Smm break; 535231200Smm } 536231200Smm assertEqualInt(0, remaining); 537231200Smm 538231200Smm assertEqualInt(1, archive_file_count(a)); 539231200Smm 540231200Smm /* End of archive. */ 541231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 542231200Smm 543231200Smm /* Verify archive format. */ 544248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 545231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 546231200Smm 547231200Smm /* Close the archive. */ 548231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 549231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 550231200Smm} 551231200Smm 552231200Smm/* 553231200Smm * Extract a file compressed with BCJ + LZMA2. 554231200Smm */ 555231200Smmstatic void 556231200Smmtest_bcj(const char *refname) 557231200Smm{ 558231200Smm struct archive_entry *ae; 559231200Smm struct archive *a; 560231200Smm size_t remaining; 561231200Smm ssize_t bytes; 562231200Smm char buff[1024]; 563231200Smm 564231200Smm extract_reference_file(refname); 565231200Smm assert((a = archive_read_new()) != NULL); 566231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 567231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 568231200Smm assertEqualIntA(a, ARCHIVE_OK, 569231200Smm archive_read_open_filename(a, refname, 10240)); 570231200Smm 571231200Smm /* Verify regular x86exe. */ 572231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 573238856Smm assertEqualInt((AE_IFREG | 0444), archive_entry_mode(ae) & ~0111); 574231200Smm assertEqualString("x86exe", archive_entry_pathname(ae)); 575231200Smm assertEqualInt(172802, archive_entry_mtime(ae)); 576231200Smm assertEqualInt(27328, archive_entry_size(ae)); 577302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 578302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 579231200Smm remaining = (size_t)archive_entry_size(ae); 580231200Smm while (remaining) { 581231200Smm if (remaining < sizeof(buff)) 582231200Smm assertEqualInt(remaining, 583231200Smm bytes = archive_read_data(a, buff, sizeof(buff))); 584231200Smm else 585231200Smm assertEqualInt(sizeof(buff), 586231200Smm bytes = archive_read_data(a, buff, sizeof(buff))); 587231200Smm if (bytes > 0) 588231200Smm remaining -= bytes; 589231200Smm else 590231200Smm break; 591231200Smm } 592231200Smm assertEqualInt(0, remaining); 593231200Smm 594231200Smm assertEqualInt(1, archive_file_count(a)); 595231200Smm 596231200Smm /* End of archive. */ 597231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 598231200Smm 599231200Smm /* Verify archive format. */ 600248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 601231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 602231200Smm 603231200Smm /* Close the archive. */ 604231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 605231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 606231200Smm} 607231200Smm 608231200Smm/* 609231200Smm * Extract a file compressed with PPMd. 610231200Smm */ 611231200Smmstatic void 612358090Smmtest_ppmd(void) 613231200Smm{ 614231200Smm const char *refname = "test_read_format_7zip_ppmd.7z"; 615231200Smm struct archive_entry *ae; 616231200Smm struct archive *a; 617231200Smm size_t remaining; 618231200Smm ssize_t bytes; 619231200Smm char buff[1024]; 620231200Smm 621231200Smm extract_reference_file(refname); 622231200Smm assert((a = archive_read_new()) != NULL); 623231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 624231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 625231200Smm assertEqualIntA(a, ARCHIVE_OK, 626231200Smm archive_read_open_filename(a, refname, 10240)); 627231200Smm 628231200Smm /* Verify regular file1. */ 629231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 630238856Smm assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae)); 631231200Smm assertEqualString("ppmd_test.txt", archive_entry_pathname(ae)); 632231200Smm assertEqualInt(1322464589, archive_entry_mtime(ae)); 633231200Smm assertEqualInt(102400, archive_entry_size(ae)); 634302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 635302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 636231200Smm remaining = (size_t)archive_entry_size(ae); 637231200Smm while (remaining) { 638231200Smm if (remaining < sizeof(buff)) 639231200Smm assertEqualInt(remaining, 640231200Smm bytes = archive_read_data(a, buff, sizeof(buff))); 641231200Smm else 642231200Smm assertEqualInt(sizeof(buff), 643231200Smm bytes = archive_read_data(a, buff, sizeof(buff))); 644231200Smm if (bytes > 0) 645231200Smm remaining -= bytes; 646231200Smm else 647231200Smm break; 648231200Smm } 649231200Smm assertEqualInt(0, remaining); 650231200Smm 651231200Smm assertEqualInt(1, archive_file_count(a)); 652231200Smm 653231200Smm /* End of archive. */ 654231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 655231200Smm 656231200Smm /* Verify archive format. */ 657248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 658231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 659231200Smm 660231200Smm /* Close the archive. */ 661231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 662231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 663231200Smm} 664231200Smm 665231200Smmstatic void 666358090Smmtest_symname(void) 667231200Smm{ 668231200Smm const char *refname = "test_read_format_7zip_symbolic_name.7z"; 669231200Smm struct archive_entry *ae; 670231200Smm struct archive *a; 671231200Smm char buff[128]; 672231200Smm 673231200Smm extract_reference_file(refname); 674231200Smm assert((a = archive_read_new()) != NULL); 675231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 676231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 677231200Smm assertEqualIntA(a, ARCHIVE_OK, 678231200Smm archive_read_open_filename(a, refname, 10240)); 679231200Smm 680231200Smm /* Verify regular file1. */ 681231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 682231200Smm assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae)); 683231200Smm assertEqualString("file1", archive_entry_pathname(ae)); 684231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 685231200Smm assertEqualInt(32, archive_entry_size(ae)); 686302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 687302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 688231200Smm assertEqualInt(32, archive_read_data(a, buff, sizeof(buff))); 689231200Smm assertEqualMem(buff, "hellohellohello\nhellohellohello\n", 32); 690231200Smm 691313571Smm /* Verify symbolic-link symlinkfile. */ 692231200Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 693231200Smm assertEqualInt((AE_IFLNK | 0755), archive_entry_mode(ae)); 694231200Smm assertEqualString("symlinkfile", archive_entry_pathname(ae)); 695231200Smm assertEqualString("file1", archive_entry_symlink(ae)); 696231200Smm assertEqualInt(86401, archive_entry_mtime(ae)); 697302001Smm assertEqualInt(archive_entry_is_encrypted(ae), 0); 698302001Smm assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0); 699231200Smm 700231200Smm assertEqualInt(2, archive_file_count(a)); 701231200Smm 702231200Smm /* End of archive. */ 703231200Smm assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 704231200Smm 705231200Smm /* Verify archive format. */ 706248616Smm assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0)); 707231200Smm assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a)); 708231200Smm 709231200Smm /* Close the archive. */ 710231200Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 711231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 712231200Smm} 713231200Smm 714231200Smm 715231200SmmDEFINE_TEST(test_read_format_7zip) 716231200Smm{ 717231200Smm struct archive *a; 718231200Smm 719248616Smm assert((a = archive_read_new()) != NULL); 720231200Smm 721248616Smm /* Extracting with liblzma */ 722248616Smm if (ARCHIVE_OK != archive_read_support_filter_xz(a)) { 723358090Smm skipping("7zip:lzma decoding is not supported on this " 724358090Smm "platform"); 725248616Smm } else { 726248616Smm test_symname(); 727248616Smm test_extract_all_files("test_read_format_7zip_copy_2.7z"); 728248616Smm test_extract_last_file("test_read_format_7zip_copy_2.7z"); 729248616Smm test_extract_all_files2("test_read_format_7zip_lzma1_lzma2.7z"); 730248616Smm test_bcj("test_read_format_7zip_bcj2_copy_lzma.7z"); 731248616Smm } 732248616Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 733248616Smm} 734248616Smm 735248616SmmDEFINE_TEST(test_read_format_7zip_bzip2) 736248616Smm{ 737248616Smm struct archive *a; 738248616Smm 739231200Smm assert((a = archive_read_new()) != NULL); 740231200Smm 741231200Smm /* Extracting with libbzip2 */ 742231200Smm if (ARCHIVE_OK != archive_read_support_filter_bzip2(a)) { 743231200Smm skipping("7zip:bzip2 decoding is not supported on this platform"); 744231200Smm } else { 745231200Smm test_plain_header("test_read_format_7zip_bzip2.7z"); 746231200Smm test_bcj("test_read_format_7zip_bcj_bzip2.7z"); 747231200Smm test_bcj("test_read_format_7zip_bcj2_bzip2.7z"); 748231200Smm } 749231200Smm 750248616Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 751248616Smm} 752248616Smm 753302001SmmDEFINE_TEST(test_read_format_7zip_from_fd) 754302001Smm{ 755302001Smm test_copy(1);/* read a 7zip file from a file descriptor. */ 756302001Smm} 757302001Smm 758248616SmmDEFINE_TEST(test_read_format_7zip_copy) 759248616Smm{ 760302001Smm test_copy(0); 761248616Smm test_bcj("test_read_format_7zip_bcj_copy.7z"); 762248616Smm test_bcj("test_read_format_7zip_bcj2_copy_1.7z"); 763248616Smm test_bcj("test_read_format_7zip_bcj2_copy_2.7z"); 764248616Smm} 765248616Smm 766248616SmmDEFINE_TEST(test_read_format_7zip_deflate) 767248616Smm{ 768248616Smm struct archive *a; 769248616Smm 770248616Smm assert((a = archive_read_new()) != NULL); 771248616Smm 772231200Smm /* Extracting with libz */ 773231200Smm if (ARCHIVE_OK != archive_read_support_filter_gzip(a)) { 774248616Smm skipping( 775248616Smm "7zip:deflate decoding is not supported on this platform"); 776231200Smm } else { 777231200Smm test_plain_header("test_read_format_7zip_deflate.7z"); 778231200Smm test_bcj("test_read_format_7zip_bcj_deflate.7z"); 779231200Smm test_bcj("test_read_format_7zip_bcj2_deflate.7z"); 780231200Smm } 781231200Smm 782248616Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 783248616Smm} 784248616Smm 785248616SmmDEFINE_TEST(test_read_format_7zip_empty) 786248616Smm{ 787248616Smm test_empty_archive(); 788248616Smm test_empty_file(); 789248616Smm} 790248616Smm 791248616SmmDEFINE_TEST(test_read_format_7zip_lzma1) 792248616Smm{ 793248616Smm struct archive *a; 794248616Smm 795248616Smm assert((a = archive_read_new()) != NULL); 796248616Smm 797231200Smm /* Extracting with liblzma */ 798231200Smm if (ARCHIVE_OK != archive_read_support_filter_xz(a)) { 799358090Smm skipping("7zip:lzma decoding is not supported on this " 800358090Smm "platform"); 801231200Smm } else { 802231200Smm test_plain_header("test_read_format_7zip_lzma1.7z"); 803231200Smm test_extract_all_files("test_read_format_7zip_lzma1_2.7z"); 804231200Smm test_extract_last_file("test_read_format_7zip_lzma1_2.7z"); 805231200Smm test_bcj("test_read_format_7zip_bcj_lzma1.7z"); 806231200Smm test_bcj("test_read_format_7zip_bcj2_lzma1_1.7z"); 807231200Smm test_bcj("test_read_format_7zip_bcj2_lzma1_2.7z"); 808248616Smm test_delta_lzma("test_read_format_7zip_delta_lzma1.7z"); 809358090Smm test_delta_lzma("test_read_format_7zip_delta4_lzma1.7z"); 810248616Smm } 811248616Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 812248616Smm} 813248616Smm 814248616SmmDEFINE_TEST(test_read_format_7zip_lzma2) 815248616Smm{ 816248616Smm struct archive *a; 817248616Smm 818248616Smm assert((a = archive_read_new()) != NULL); 819248616Smm 820248616Smm /* Extracting with liblzma */ 821248616Smm if (ARCHIVE_OK != archive_read_support_filter_xz(a)) { 822358090Smm skipping("7zip:lzma decoding is not supported on this " 823358090Smm "platform"); 824248616Smm } else { 825248616Smm test_plain_header("test_read_format_7zip_lzma2.7z"); 826248616Smm test_bcj("test_read_format_7zip_bcj_lzma2.7z"); 827231200Smm test_bcj("test_read_format_7zip_bcj2_lzma2_1.7z"); 828231200Smm test_bcj("test_read_format_7zip_bcj2_lzma2_2.7z"); 829231200Smm test_delta_lzma("test_read_format_7zip_delta_lzma2.7z"); 830358090Smm test_delta_lzma("test_read_format_7zip_delta4_lzma2.7z"); 831231200Smm } 832231200Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 833231200Smm} 834231200Smm 835248616SmmDEFINE_TEST(test_read_format_7zip_ppmd) 836248616Smm{ 837248616Smm test_ppmd(); 838248616Smm} 839