test_read_format_gtar_sparse_skip_entry.c revision 285972
1285970Sbdrewery/*- 2285970Sbdrewery * Copyright (c) 2014 Michihiro NAKAJIMA 3285970Sbdrewery * All rights reserved. 4285970Sbdrewery * 5285970Sbdrewery * Redistribution and use in source and binary forms, with or without 6285970Sbdrewery * modification, are permitted provided that the following conditions 7285970Sbdrewery * are met: 8285970Sbdrewery * 1. Redistributions of source code must retain the above copyright 9285970Sbdrewery * notice, this list of conditions and the following disclaimer. 10285970Sbdrewery * 2. Redistributions in binary form must reproduce the above copyright 11285970Sbdrewery * notice, this list of conditions and the following disclaimer in the 12285970Sbdrewery * documentation and/or other materials provided with the distribution. 13285970Sbdrewery * 14285970Sbdrewery * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 15285970Sbdrewery * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16285970Sbdrewery * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17285970Sbdrewery * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 18285970Sbdrewery * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19285970Sbdrewery * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20285970Sbdrewery * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21285970Sbdrewery * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22285970Sbdrewery * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23285970Sbdrewery * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24285970Sbdrewery */ 25285970Sbdrewery#include "test.h" 26285970Sbdrewery__FBSDID("$FreeBSD"); 27285970Sbdrewery 28285970Sbdrewery/* 29285970Sbdrewery * To test skip a sparse file entry, this test does not read file data. 30285970Sbdrewery */ 31285970SbdreweryDEFINE_TEST(test_read_format_gtar_sparse_skip_entry) 32285970Sbdrewery{ 33285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 34285970Sbdrewery const char *refname = "test_read_format_gtar_sparse_skip_entry.tar.Z.uu"; 35285972Sbdrewery#else 36285972Sbdrewery const char *refname = "test_read_format_gtar_sparse_skip_entry.tar.Z"; 37285972Sbdrewery#endif 38285970Sbdrewery struct archive *a; 39285970Sbdrewery struct archive_entry *ae; 40285970Sbdrewery const void *p; 41285970Sbdrewery size_t s; 42285970Sbdrewery int64_t o; 43285970Sbdrewery 44285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 45285970Sbdrewery copy_reference_file(refname); 46285972Sbdrewery#else 47285972Sbdrewery extract_reference_file(refname); 48285972Sbdrewery#endif 49285970Sbdrewery assert((a = archive_read_new()) != NULL); 50285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 51285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 52285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, 53285970Sbdrewery archive_read_open_filename(a, refname, 10240)); 54285970Sbdrewery 55285970Sbdrewery /* Verify regular first file. */ 56285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 57285970Sbdrewery assertEqualString("a", archive_entry_pathname(ae)); 58285970Sbdrewery assertEqualInt(10737418244, archive_entry_size(ae)); 59285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 60285970Sbdrewery assertEqualInt(archive_entry_is_encrypted(ae), 0); 61285970Sbdrewery assertEqualIntA(a, archive_read_has_encrypted_entries(a), 62285970Sbdrewery ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 63285972Sbdrewery#endif 64285970Sbdrewery 65285970Sbdrewery /* Verify regular second file. */ 66285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 67285970Sbdrewery assertEqualString("b", archive_entry_pathname(ae)); 68285970Sbdrewery assertEqualInt(4, archive_entry_size(ae)); 69285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 70285970Sbdrewery assertEqualInt(archive_entry_is_encrypted(ae), 0); 71285970Sbdrewery assertEqualIntA(a, archive_read_has_encrypted_entries(a), 72285970Sbdrewery ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 73285972Sbdrewery#endif 74285970Sbdrewery 75285970Sbdrewery 76285970Sbdrewery /* End of archive. */ 77285970Sbdrewery assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 78285970Sbdrewery 79285970Sbdrewery /* Verify archive format. */ 80285970Sbdrewery assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 81285970Sbdrewery assertEqualIntA(a, ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE, 82285970Sbdrewery archive_format(a)); 83285970Sbdrewery 84285970Sbdrewery /* Close the archive. */ 85285970Sbdrewery assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 86285970Sbdrewery assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 87285970Sbdrewery 88285970Sbdrewery 89285970Sbdrewery /* 90285970Sbdrewery * Read just one block of a sparse file and skip it. 91285970Sbdrewery */ 92285970Sbdrewery assert((a = archive_read_new()) != NULL); 93285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 94285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 95285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, 96285970Sbdrewery archive_read_open_filename(a, refname, 10240)); 97285970Sbdrewery 98285970Sbdrewery /* Verify regular first file. */ 99285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 100285970Sbdrewery assertEqualString("a", archive_entry_pathname(ae)); 101285970Sbdrewery assertEqualInt(10737418244, archive_entry_size(ae)); 102285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 103285970Sbdrewery assertEqualInt(archive_entry_is_encrypted(ae), 0); 104285970Sbdrewery assertEqualIntA(a, archive_read_has_encrypted_entries(a), 105285970Sbdrewery ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 106285972Sbdrewery#endif 107285970Sbdrewery assertEqualInt(0, archive_read_data_block(a, &p, &s, &o)); 108285970Sbdrewery assertEqualInt(4096, s); 109285970Sbdrewery assertEqualInt(0, o); 110285970Sbdrewery 111285970Sbdrewery 112285970Sbdrewery /* Verify regular second file. */ 113285970Sbdrewery assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 114285970Sbdrewery assertEqualString("b", archive_entry_pathname(ae)); 115285970Sbdrewery assertEqualInt(4, archive_entry_size(ae)); 116285972Sbdrewery#ifndef __FreeBSD__ /* Backport test. */ 117285970Sbdrewery assertEqualInt(archive_entry_is_encrypted(ae), 0); 118285970Sbdrewery assertEqualIntA(a, archive_read_has_encrypted_entries(a), 119285970Sbdrewery ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 120285972Sbdrewery#endif 121285970Sbdrewery 122285970Sbdrewery 123285970Sbdrewery /* End of archive. */ 124285970Sbdrewery assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 125285970Sbdrewery 126285970Sbdrewery /* Verify archive format. */ 127285970Sbdrewery assertEqualIntA(a, ARCHIVE_FILTER_COMPRESS, archive_filter_code(a, 0)); 128285970Sbdrewery assertEqualIntA(a, ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE, 129285970Sbdrewery archive_format(a)); 130285970Sbdrewery 131285970Sbdrewery /* Close the archive. */ 132285970Sbdrewery assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 133285970Sbdrewery assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 134285970Sbdrewery} 135285970Sbdrewery 136