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