1228753Smm/*- 2228753Smm * Copyright (c) 2003-2009 Tim Kientzle 3228753Smm * All rights reserved. 4228753Smm * 5228753Smm * Redistribution and use in source and binary forms, with or without 6228753Smm * modification, are permitted provided that the following conditions 7228753Smm * are met: 8228753Smm * 1. Redistributions of source code must retain the above copyright 9228753Smm * notice, this list of conditions and the following disclaimer. 10228753Smm * 2. Redistributions in binary form must reproduce the above copyright 11228753Smm * notice, this list of conditions and the following disclaimer in the 12228753Smm * documentation and/or other materials provided with the distribution. 13228753Smm * 14228753Smm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 15228753Smm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16228753Smm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17228753Smm * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 18228753Smm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19228753Smm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20228753Smm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21228753Smm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22228753Smm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23228753Smm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24228753Smm */ 25228753Smm#include "test.h" 26228763Smm__FBSDID("$FreeBSD$"); 27228753Smm 28228753Smm/* 29228753Smm * Verify our ability to read various sample files. 30228753Smm * It should be easy to add any new sample files sent in by users 31228753Smm * to this collection of tests. 32228753Smm */ 33228753Smm 34228753Smm/* Copy this function for each test file and adjust it accordingly. */ 35228753Smm 36228753Smm/* 37228753Smm * test_compat_cpio_1.cpio checks heuristics for avoiding false 38228753Smm * hardlinks. foo1 and foo2 are files that have nlinks=1 and so 39228753Smm * should not be marked as hardlinks even though they have identical 40228753Smm * ino values. bar1 and bar2 have nlinks=2 so should be marked 41228753Smm * as hardlinks. 42228753Smm */ 43228753Smmstatic void 44228753Smmtest_compat_cpio_1(void) 45228753Smm{ 46228753Smm char name[] = "test_compat_cpio_1.cpio"; 47228753Smm struct archive_entry *ae; 48228753Smm struct archive *a; 49228753Smm 50228753Smm assert((a = archive_read_new()) != NULL); 51232153Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 52228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 53228753Smm extract_reference_file(name); 54228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 17)); 55228753Smm 56228753Smm /* Read first entry. */ 57228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 58228753Smm assertEqualString("foo1", archive_entry_pathname(ae)); 59228753Smm assertEqualString(NULL, archive_entry_hardlink(ae)); 60228753Smm assertEqualInt(1260250228, archive_entry_mtime(ae)); 61228753Smm assertEqualInt(1000, archive_entry_uid(ae)); 62228753Smm assertEqualInt(1000, archive_entry_gid(ae)); 63228753Smm assertEqualInt(0100644, archive_entry_mode(ae)); 64228753Smm 65228753Smm /* Read second entry. */ 66228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 67228753Smm assertEqualString("foo2", archive_entry_pathname(ae)); 68228753Smm assertEqualString(NULL, archive_entry_hardlink(ae)); 69228753Smm assertEqualInt(1260250228, archive_entry_mtime(ae)); 70228753Smm assertEqualInt(1000, archive_entry_uid(ae)); 71228753Smm assertEqualInt(1000, archive_entry_gid(ae)); 72228753Smm assertEqualInt(0100644, archive_entry_mode(ae)); 73228753Smm 74228753Smm /* Read third entry. */ 75228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 76228753Smm assertEqualString("bar1", archive_entry_pathname(ae)); 77228753Smm assertEqualString(NULL, archive_entry_hardlink(ae)); 78228753Smm assertEqualInt(1260250228, archive_entry_mtime(ae)); 79228753Smm assertEqualInt(1000, archive_entry_uid(ae)); 80228753Smm assertEqualInt(1000, archive_entry_gid(ae)); 81228753Smm assertEqualInt(0100644, archive_entry_mode(ae)); 82228753Smm 83228753Smm /* Read fourth entry. */ 84228753Smm assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 85228753Smm assertEqualString("bar2", archive_entry_pathname(ae)); 86228753Smm assertEqualString("bar1", archive_entry_hardlink(ae)); 87228753Smm assertEqualInt(1260250228, archive_entry_mtime(ae)); 88228753Smm assertEqualInt(1000, archive_entry_uid(ae)); 89228753Smm assertEqualInt(1000, archive_entry_gid(ae)); 90228753Smm assertEqualInt(0100644, archive_entry_mode(ae)); 91228753Smm 92228753Smm /* Verify that the format detection worked. */ 93248616Smm assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_NONE); 94228753Smm assertEqualInt(archive_format(a), ARCHIVE_FORMAT_CPIO_SVR4_NOCRC); 95228753Smm 96228753Smm assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 97232153Smm assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 98228753Smm} 99228753Smm 100228753Smm 101228753SmmDEFINE_TEST(test_compat_cpio) 102228753Smm{ 103228753Smm test_compat_cpio_1(); 104228753Smm} 105228753Smm 106228753Smm 107