test_write_format_warc.c revision 368707
140024Sgibbs/*- 240024Sgibbs * Copyright (C) 2014 Sebastian Freundt 340024Sgibbs * All rights reserved. 440024Sgibbs * 540024Sgibbs * Redistribution and use in source and binary forms, with or without 640024Sgibbs * modification, are permitted provided that the following conditions 756979Sgibbs * are met: 840024Sgibbs * 1. Redistributions of source code must retain the above copyright 956979Sgibbs * notice, this list of conditions and the following disclaimer. 1040024Sgibbs * 2. Redistributions in binary form must reproduce the above copyright 1140024Sgibbs * notice, this list of conditions and the following disclaimer in the 1240024Sgibbs * documentation and/or other materials provided with the distribution. 1340024Sgibbs * 1440024Sgibbs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 1540024Sgibbs * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1640024Sgibbs * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1756979Sgibbs * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 1840024Sgibbs * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 1940024Sgibbs * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2040024Sgibbs * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2140024Sgibbs * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2240024Sgibbs * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2340024Sgibbs * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2440024Sgibbs */ 2540024Sgibbs 2640024Sgibbs#include "test.h" 2740024Sgibbs__FBSDID("$FreeBSD: stable/11/contrib/libarchive/libarchive/test/test_write_format_warc.c 368707 2020-12-16 22:25:20Z mm $"); 2840024Sgibbs 2940024Sgibbsstatic void test_read(struct archive *a, char *buff, size_t used, char *filedata) 3040024Sgibbs{ 3140024Sgibbs struct archive_entry *ae; 3240024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_none(a)); 3350477Speter assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used)); 3440024Sgibbs 3540024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); 3640024Sgibbs assertEqualIntA(a, 9, archive_read_data(a, filedata, 10)); 3740024Sgibbs assertEqualMem(filedata, "12345678", 9); 3840024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 3940024Sgibbs assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 4040024Sgibbs} 4140024Sgibbs 4240024SgibbsDEFINE_TEST(test_write_format_warc) 4340024Sgibbs{ 4440024Sgibbs char filedata[64]; 4540024Sgibbs struct archive *a; 4640024Sgibbs struct archive_entry *ae; 4740024Sgibbs const size_t bsiz = 2048U; 4840024Sgibbs char *buff; 4940024Sgibbs size_t used; 5040024Sgibbs 5140024Sgibbs buff = malloc(bsiz); 5240024Sgibbs 5356979Sgibbs /* Create a new archive in memory. */ 5440024Sgibbs assert((a = archive_write_new()) != NULL); 5540024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_warc(a)); 5640024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); 5740024Sgibbs assertEqualIntA(a, ARCHIVE_OK, 5840024Sgibbs archive_write_open_memory(a, buff, bsiz, &used)); 5956979Sgibbs 6040024Sgibbs /* 6156979Sgibbs * Write a file to it. 6256979Sgibbs */ 6340024Sgibbs assert((ae = archive_entry_new()) != NULL); 6440024Sgibbs archive_entry_set_pathname(ae, "test"); 6540024Sgibbs archive_entry_set_filetype(ae, AE_IFREG); 6640024Sgibbs archive_entry_set_size(ae, 9); 6740024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 6840024Sgibbs archive_entry_free(ae); 6940024Sgibbs assertEqualIntA(a, 9, archive_write_data(a, "12345678", 9)); 7040024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); 7140024Sgibbs assertEqualInt(ARCHIVE_OK, archive_write_free(a)); 7240024Sgibbs 7340024Sgibbs /* 7440024Sgibbs * Read from it. 7540024Sgibbs */ 7640024Sgibbs assert((a = archive_read_new()) != NULL); 7740024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_warc(a)); 7840024Sgibbs test_read(a, buff, used, filedata); 7940024Sgibbs 8040024Sgibbs assert((a = archive_read_new()) != NULL); 8140024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_by_code(a, ARCHIVE_FORMAT_WARC)); 8240024Sgibbs test_read(a, buff, used, filedata); 8340024Sgibbs 8440024Sgibbs assert((a = archive_read_new()) != NULL); 8540024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_read_set_format(a, ARCHIVE_FORMAT_WARC)); 8640024Sgibbs test_read(a, buff, used, filedata); 8740024Sgibbs 8840024Sgibbs /* Create a new archive */ 8940024Sgibbs assert((a = archive_write_new()) != NULL); 9040024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_warc(a)); 9140024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); 9240024Sgibbs assertEqualIntA(a, ARCHIVE_OK, 9340024Sgibbs archive_write_open_memory(a, buff, bsiz, &used)); 9440024Sgibbs 9540024Sgibbs /* write first file: that should succeed */ 9640024Sgibbs assert((ae = archive_entry_new()) != NULL); 9740024Sgibbs archive_entry_set_pathname(ae, "test"); 9840024Sgibbs archive_entry_set_filetype(ae, AE_IFREG); 9940024Sgibbs archive_entry_set_size(ae, 9); 10040024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 10140024Sgibbs archive_entry_free(ae); 10240024Sgibbs assertEqualIntA(a, 9, archive_write_data(a, "12345678", 9)); 10340024Sgibbs 10440024Sgibbs /* write second file: should succeed as well */ 10540024Sgibbs assert((ae = archive_entry_new()) != NULL); 10640024Sgibbs archive_entry_set_pathname(ae, "test2"); 10740024Sgibbs archive_entry_set_filetype(ae, AE_IFREG); 10840024Sgibbs archive_entry_set_size(ae, 9); 10940024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); 11040024Sgibbs archive_entry_free(ae); 11140024Sgibbs assertEqualIntA(a, 9, archive_write_data(a, "12345678", 9)); 11240024Sgibbs 11340024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); 11440024Sgibbs assertEqualInt(ARCHIVE_OK, archive_write_free(a)); 11540024Sgibbs 11640024Sgibbs /* Create a new archive */ 11740024Sgibbs assert((a = archive_write_new()) != NULL); 11840024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_warc(a)); 11940024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a)); 12040024Sgibbs assertEqualIntA(a, ARCHIVE_OK, 12140024Sgibbs archive_write_open_memory(a, buff, bsiz, &used)); 12240024Sgibbs 12340024Sgibbs /* write a directory: this should fail */ 12440024Sgibbs assert((ae = archive_entry_new()) != NULL); 12540024Sgibbs archive_entry_copy_pathname(ae, "dir"); 12640024Sgibbs archive_entry_set_filetype(ae, AE_IFDIR); 12740024Sgibbs archive_entry_set_size(ae, 512); 12840024Sgibbs assertEqualIntA(a, ARCHIVE_FAILED, archive_write_header(a, ae)); 12940024Sgibbs archive_entry_free(ae); 13040024Sgibbs 13140024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); 13240024Sgibbs assertEqualInt(ARCHIVE_OK, archive_write_free(a)); 13340024Sgibbs 13440024Sgibbs /* test whether last archive is indeed empty */ 13540024Sgibbs assert((a = archive_read_new()) != NULL); 13640024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); 13740024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); 13840024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used)); 13940024Sgibbs 14040024Sgibbs /* Test EOF */ 14140024Sgibbs assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); 14240024Sgibbs assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); 14340024Sgibbs assertEqualInt(ARCHIVE_OK, archive_read_free(a)); 14440024Sgibbs 14540024Sgibbs free(buff); 14640024Sgibbs} 14740024Sgibbs