test_read_disk_entry_from_file.c revision 228763
1129198Scognet/*- 2129198Scognet * Copyright (c) 2003-2009 Tim Kientzle 3139735Simp * All rights reserved. 4129198Scognet * 5129198Scognet * Redistribution and use in source and binary forms, with or without 6129198Scognet * modification, are permitted provided that the following conditions 7129198Scognet * are met: 8129198Scognet * 1. Redistributions of source code must retain the above copyright 9129198Scognet * notice, this list of conditions and the following disclaimer. 10129198Scognet * 2. Redistributions in binary form must reproduce the above copyright 11129198Scognet * notice, this list of conditions and the following disclaimer in the 12129198Scognet * documentation and/or other materials provided with the distribution. 13129198Scognet * 14129198Scognet * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 15129198Scognet * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16129198Scognet * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17129198Scognet * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 18129198Scognet * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19129198Scognet * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20129198Scognet * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21129198Scognet * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22129198Scognet * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23129198Scognet * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24129198Scognet */ 25129198Scognet#include "test.h" 26129198Scognet__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_read_disk_entry_from_file.c 228763 2011-12-21 11:13:29Z mm $"); 27129198Scognet 28129198Scognetstatic const char * 29129198Scognetgname_lookup(void *d, gid_t g) 30129198Scognet{ 31129198Scognet (void)d; /* UNUSED */ 32129198Scognet (void)g; /* UNUSED */ 33129198Scognet return ("FOOGROUP"); 34129198Scognet} 35129198Scognet 36129198Scognetstatic const char * 37129198Scognetuname_lookup(void *d, uid_t u) 38129198Scognet{ 39129198Scognet (void)d; /* UNUSED */ 40129198Scognet (void)u; /* UNUSED */ 41129198Scognet return ("FOO"); 42239033Sandrew} 43129198Scognet 44150864ScognetDEFINE_TEST(test_read_disk_entry_from_file) 45150864Scognet{ 46150864Scognet struct archive *a; 47150864Scognet struct archive_entry *entry; 48150864Scognet FILE *f; 49129198Scognet 50172614Scognet assert((a = archive_read_disk_new()) != NULL); 51135643Scognet 52129198Scognet assertEqualInt(ARCHIVE_OK, archive_read_disk_set_uname_lookup(a, 53129198Scognet NULL, &uname_lookup, NULL)); 54129198Scognet assertEqualInt(ARCHIVE_OK, archive_read_disk_set_gname_lookup(a, 55129198Scognet NULL, &gname_lookup, NULL)); 56129198Scognet assertEqualString(archive_read_disk_uname(a, 0), "FOO"); 57239268Sgonzo assertEqualString(archive_read_disk_gname(a, 0), "FOOGROUP"); 58239268Sgonzo 59239268Sgonzo /* Create a file on disk. */ 60266159Sian f = fopen("foo", "wb"); 61129198Scognet assert(f != NULL); 62129198Scognet assertEqualInt(4, fwrite("1234", 1, 4, f)); 63239268Sgonzo fclose(f); 64239268Sgonzo 65239268Sgonzo /* Use archive_read_disk_entry_from_file to get information about it. */ 66239268Sgonzo entry = archive_entry_new(); 67129198Scognet assert(entry != NULL); 68129198Scognet archive_entry_copy_pathname(entry, "foo"); 69239268Sgonzo assertEqualInt(ARCHIVE_OK, 70129198Scognet archive_read_disk_entry_from_file(a, entry, -1, NULL)); 71129198Scognet 72129198Scognet /* Verify the information we got back. */ 73172614Scognet assertEqualString(archive_entry_uname(entry), "FOO"); 74129198Scognet assertEqualString(archive_entry_gname(entry), "FOOGROUP"); 75129198Scognet assertEqualInt(archive_entry_size(entry), 4); 76129198Scognet 77129198Scognet /* Destroy the archive. */ 78129198Scognet archive_entry_free(entry); 79129198Scognet assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); 80129198Scognet} 81129198Scognet