1130812Smarcel/*- 2130812Smarcel * Copyright (c) 2003-2007 Tim Kientzle 3130812Smarcel * Copyright (c) 2009 Michihiro NAKAJIMA 4130812Smarcel * All rights reserved. 5130812Smarcel * 6130812Smarcel * Redistribution and use in source and binary forms, with or without 7130812Smarcel * modification, are permitted provided that the following conditions 8130812Smarcel * are met: 9130812Smarcel * 1. Redistributions of source code must retain the above copyright 10130812Smarcel * notice, this list of conditions and the following disclaimer. 11130812Smarcel * 2. Redistributions in binary form must reproduce the above copyright 12130812Smarcel * notice, this list of conditions and the following disclaimer in the 13130812Smarcel * documentation and/or other materials provided with the distribution. 14130812Smarcel * 15130812Smarcel * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16130812Smarcel * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17130812Smarcel * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18130812Smarcel * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19130812Smarcel * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20130812Smarcel * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21130812Smarcel * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22130812Smarcel * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23130812Smarcel * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24130812Smarcel * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25130812Smarcel */ 26130812Smarcel#include "test.h" 27130812Smarcel 28130812Smarcel/* 29130812SmarcelExecute the following command to rebuild the data for this program: 30130812Smarcel tail -n +32 test_read_format_cpio_svr4_gzip_rpm.c | /bin/sh 31130812Smarcel 32130812SmarcelF=test_read_format_cpio_svr4_gzip_rpm.rpm 33130812SmarcelNAME=rpmsample 34130812SmarcelTMPRPM=/tmp/rpm 35130812Smarcelrm -rf ${TMPRPM} 36130812Smarcelmkdir -p ${TMPRPM}/BUILD 37130812Smarcelmkdir -p ${TMPRPM}/RPMS 38130812Smarcelmkdir -p ${TMPRPM}/SOURCES 39130812Smarcelmkdir -p ${TMPRPM}/SPECS 40130812Smarcelmkdir -p ${TMPRPM}/SRPMS 41130812Smarcelecho "hello" > ${TMPRPM}/BUILD/file1 42130812Smarcelecho "hello" > ${TMPRPM}/BUILD/file2 43130812Smarcelecho "hello" > ${TMPRPM}/BUILD/file3 44130812Smarcelcat > ${TMPRPM}/SPECS/${NAME}.spec <<END 45130812Smarcel## 46130812Smarcel%define _topdir ${TMPRPM} 47130812Smarcel%define _binary_payload w9.gzdio 48130812Smarcel 49130812SmarcelSummary: Sample data of RPM filter of libarchive 50130812SmarcelName: ${NAME} 51130812SmarcelVersion: 1.0.0 52130812SmarcelRelease: 1 53130812SmarcelLicense: BSD 54130812SmarcelURL: http://libarchive.github.com/ 55130812SmarcelBuildArch: noarch 56130812SmarcelBuildRoot: %{_tmppath}/%{name}-%{version}-root 57130812Smarcel 58130812Smarcel%install 59130812Smarcelrm -rf \$RPM_BUILD_ROOT 60130812Smarcel 61130812Smarcelmkdir -p \$RPM_BUILD_ROOT%{_sysconfdir} 62130812Smarcelinstall -m 644 file1 \$RPM_BUILD_ROOT%{_sysconfdir}/file1 63130812Smarcelinstall -m 644 file2 \$RPM_BUILD_ROOT%{_sysconfdir}/file2 64130812Smarcelinstall -m 644 file3 \$RPM_BUILD_ROOT%{_sysconfdir}/file3 65130812SmarcelTZ=utc touch -afm -t 197001020000.01 \$RPM_BUILD_ROOT%{_sysconfdir}/file1 66130812SmarcelTZ=utc touch -afm -t 197001020000.01 \$RPM_BUILD_ROOT%{_sysconfdir}/file2 67130812SmarcelTZ=utc touch -afm -t 197001020000.01 \$RPM_BUILD_ROOT%{_sysconfdir}/file3 68130812Smarcel 69130812Smarcel%files 70130812Smarcel%{_sysconfdir}/file1 71130812Smarcel%{_sysconfdir}/file2 72130812Smarcel%{_sysconfdir}/file3 73130812Smarcel 74130812Smarcel%description 75130812SmarcelSample data. 76130812SmarcelEND 77130812Smarcel# 78130812Smarcelrpmbuild -bb ${TMPRPM}/SPECS/${NAME}.spec 79130812Smarceluuencode ${F} < ${TMPRPM}/RPMS/noarch/${NAME}-1.0.0-1.noarch.rpm > ${F}.uu 80130812Smarcel 81130812Smarcelrm -rf ${TMPRPM} 82130812Smarcelexit 1 83130812Smarcel*/ 84130812Smarcel 85130812SmarcelDEFINE_TEST(test_read_format_cpio_svr4_gzip_rpm) 86130812Smarcel{ 87130812Smarcel struct archive_entry *ae; 88130812Smarcel struct archive *a; 89130812Smarcel const char *name = "test_read_format_cpio_svr4_gzip_rpm.rpm"; 90130812Smarcel int r; 91130812Smarcel 92130812Smarcel assert((a = archive_read_new()) != NULL); 93130812Smarcel r = archive_read_support_filter_gzip(a); 94130812Smarcel if (r == ARCHIVE_WARN) { 95130812Smarcel skipping("gzip reading not fully supported on this platform"); 96130812Smarcel assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 97130812Smarcel return; 98130812Smarcel } 99130812Smarcel assertEqualIntA(a, ARCHIVE_OK, r); 100130812Smarcel assertEqualIntA(a, ARCHIVE_OK, 101130812Smarcel archive_read_support_filter_rpm(a)); 102130812Smarcel assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 103130812Smarcel extract_reference_file(name); 104130812Smarcel assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 2)); 105130812Smarcel 106130812Smarcel assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 107130812Smarcel assertEqualString("./etc/file1", archive_entry_pathname(ae)); 108130812Smarcel assertEqualInt(86401, archive_entry_mtime(ae)); 109130812Smarcel assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 110130812Smarcel assertEqualString("./etc/file2", archive_entry_pathname(ae)); 111130812Smarcel assertEqualInt(86401, archive_entry_mtime(ae)); 112130812Smarcel assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 113130812Smarcel assertEqualString("./etc/file3", archive_entry_pathname(ae)); 114130812Smarcel assertEqualInt(86401, archive_entry_mtime(ae)); 115130812Smarcel assertEqualInt(archive_entry_is_encrypted(ae), 0); 116130812Smarcel assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); 117130812Smarcel 118130812Smarcel /* Verify the end-of-archive. */ 119130812Smarcel assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 120130812Smarcel 121130812Smarcel /* Verify that the format detection worked. */ 122130812Smarcel assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_GZIP); 123130812Smarcel assertEqualString(archive_filter_name(a, 0), "gzip"); 124130812Smarcel assertEqualInt(archive_format(a), ARCHIVE_FORMAT_CPIO_SVR4_NOCRC); 125130812Smarcel 126130812Smarcel assertEqualInt(ARCHIVE_OK, archive_read_close(a)); 127130812Smarcel assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 128130812Smarcel} 129130812Smarcel 130130812Smarcel