test_read_format_raw.c revision 368708
11553Srgrimes/*-
21553Srgrimes * Copyright (c) 2007 Kai Wang
31553Srgrimes * Copyright (c) 2007 Tim Kientzle
41553Srgrimes * All rights reserved.
51553Srgrimes *
61553Srgrimes * Redistribution and use in source and binary forms, with or without
71553Srgrimes * modification, are permitted provided that the following conditions
81553Srgrimes * are met:
91553Srgrimes * 1. Redistributions of source code must retain the above copyright
101553Srgrimes *    notice, this list of conditions and the following disclaimer
111553Srgrimes *    in this position and unchanged.
121553Srgrimes * 2. Redistributions in binary form must reproduce the above copyright
131553Srgrimes *    notice, this list of conditions and the following disclaimer in the
141553Srgrimes *    documentation and/or other materials provided with the distribution.
151553Srgrimes *
161553Srgrimes * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
171553Srgrimes * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
181553Srgrimes * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
191553Srgrimes * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
201553Srgrimes * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
211553Srgrimes * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
221553Srgrimes * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
231553Srgrimes * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
241553Srgrimes * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
251553Srgrimes * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
261553Srgrimes */
271553Srgrimes
281553Srgrimes#include "test.h"
291553Srgrimes__FBSDID("$FreeBSD: stable/10/contrib/libarchive/libarchive/test/test_read_format_raw.c 368708 2020-12-16 22:25:40Z mm $");
301553Srgrimes
3130602ScharnierDEFINE_TEST(test_read_format_raw)
321553Srgrimes{
331553Srgrimes	char buff[512];
341553Srgrimes	struct archive_entry *ae;
351553Srgrimes	struct archive *a;
361553Srgrimes	const char *reffile1 = "test_read_format_raw.data";
3730602Scharnier	const char *reffile2 = "test_read_format_raw.data.Z";
3830602Scharnier	const char *reffile3 = "test_read_format_raw.bufr";
3930602Scharnier#ifdef HAVE_ZLIB_H
406284Swollman	const char *reffile4 = "test_read_format_raw.data.gz";
4150476Speter#endif
421553Srgrimes
431553Srgrimes	/* First, try pulling data out of an uninterpretable file. */
4491217Sbde	extract_reference_file(reffile1);
4591217Sbde	assert((a = archive_read_new()) != NULL);
4691217Sbde	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
471553Srgrimes	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
481553Srgrimes	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
49109097Sdillon	assertEqualIntA(a, ARCHIVE_OK,
501553Srgrimes	    archive_read_open_filename(a, reffile1, 512));
51272913Sjhb
52272913Sjhb	/* First (and only!) Entry */
53272913Sjhb	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
54272913Sjhb	assertEqualString("data", archive_entry_pathname(ae));
55272913Sjhb	/* Most fields should be unset (unknown) */
56272913Sjhb	assert(!archive_entry_size_is_set(ae));
57272913Sjhb	assert(!archive_entry_atime_is_set(ae));
58272913Sjhb	assert(!archive_entry_ctime_is_set(ae));
59272913Sjhb	assert(!archive_entry_mtime_is_set(ae));
6030602Scharnier	assertEqualInt(archive_entry_is_encrypted(ae), 0);
6130602Scharnier	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
621553Srgrimes	assertEqualInt(4, archive_read_data(a, buff, 32));
63170287Sdwmalone	assertEqualMem(buff, "foo\n", 4);
64122233Sdes
651553Srgrimes	/* Test EOF */
661553Srgrimes	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
671553Srgrimes	assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
68244198Sdelphij	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
6930602Scharnier
701553Srgrimes
71244198Sdelphij	/* Second, try the same with a compressed file. */
72244198Sdelphij	extract_reference_file(reffile2);
73203310Sgavin	assert((a = archive_read_new()) != NULL);
74244198Sdelphij	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
751553Srgrimes	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_by_code(a, ARCHIVE_FORMAT_RAW));
7612946Sphk	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
77244198Sdelphij	assertEqualIntA(a, ARCHIVE_OK,
78244198Sdelphij	    archive_read_open_filename(a, reffile2, 1));
7912946Sphk
80170512Sdwmalone	/* First (and only!) Entry */
81275485Sdelphij	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
821553Srgrimes	assertEqualString("data", archive_entry_pathname(ae));
83198340Sed	assertEqualInt(archive_entry_is_encrypted(ae), 0);
8488696Sphk	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
8512946Sphk	/* Most fields should be unset (unknown) */
8612946Sphk	assert(!archive_entry_size_is_set(ae));
8712946Sphk	assert(!archive_entry_atime_is_set(ae));
881553Srgrimes	assert(!archive_entry_ctime_is_set(ae));
8977330Sdes	assert(!archive_entry_mtime_is_set(ae));
90244198Sdelphij	assertEqualInt(4, archive_read_data(a, buff, 32));
91244106Salfred	assertEqualMem(buff, "foo\n", 4);
9212946Sphk
9312946Sphk	/* Test EOF */
941553Srgrimes	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
951553Srgrimes	assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
9612946Sphk	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
971553Srgrimes
9812946Sphk
99244198Sdelphij	/* Third, try with file which fooled us in past - appeared to be tar. */
100122233Sdes	extract_reference_file(reffile3);
101122233Sdes	assert((a = archive_read_new()) != NULL);
10212946Sphk	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
10312946Sphk	assertEqualIntA(a, ARCHIVE_OK, archive_read_set_format(a, ARCHIVE_FORMAT_RAW));
1041553Srgrimes	assertEqualIntA(a, ARCHIVE_OK,
105244198Sdelphij	    archive_read_open_filename(a, reffile3, 1));
1061553Srgrimes
10771034Sdes	/* First (and only!) Entry */
10877330Sdes	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
10977330Sdes	assertEqualString("data", archive_entry_pathname(ae));
11071034Sdes	assertEqualInt(archive_entry_is_encrypted(ae), 0);
11171034Sdes	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
11271034Sdes	/* Most fields should be unset (unknown) */
11371034Sdes	assert(!archive_entry_size_is_set(ae));
11471034Sdes	assert(!archive_entry_atime_is_set(ae));
11571034Sdes	assert(!archive_entry_ctime_is_set(ae));
11671034Sdes	assert(!archive_entry_mtime_is_set(ae));
11788006Sluigi
11888006Sluigi	/* Test EOF */
11988006Sluigi	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
12085747Stobez	assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
12185747Stobez	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
12285747Stobez
123244198Sdelphij#ifdef HAVE_ZLIB_H
124244198Sdelphij	/* Fourth, try with gzip which has metadata. */
125244198Sdelphij	extract_reference_file(reffile4);
126122233Sdes	assert((a = archive_read_new()) != NULL);
127122233Sdes	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
128122233Sdes	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
129203310Sgavin	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
130203310Sgavin	assertEqualIntA(a, ARCHIVE_OK,
131203310Sgavin	    archive_read_open_filename(a, reffile4, 1));
13271034Sdes
13371034Sdes	/* First (and only!) Entry */
13471034Sdes	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
13571034Sdes	assertEqualString("test-file-name.data", archive_entry_pathname(ae));
13671034Sdes	assertEqualInt(archive_entry_is_encrypted(ae), 0);
13771034Sdes	assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED);
13877330Sdes	assert(archive_entry_mtime_is_set(ae));
13977330Sdes	assertEqualIntA(a, archive_entry_mtime(ae), 0x5cbafd25);
14077330Sdes	/* Most fields should be unset (unknown) */
141150167Srwatson	assert(!archive_entry_size_is_set(ae));
142150167Srwatson	assert(!archive_entry_atime_is_set(ae));
143150167Srwatson	assert(!archive_entry_ctime_is_set(ae));
144244106Salfred
145244106Salfred	/* Test EOF */
146244106Salfred	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
14771034Sdes	assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
14877330Sdes	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
14977330Sdes#endif
15071034Sdes}
151244106Salfred