From 8864cde3495dbfd6b476c1b77a8bde035e1cf000 Mon Sep 17 00:00:00 2001 From: ngie Date: Fri, 10 Feb 2017 01:13:12 +0000 Subject: MFC r305358,r305449,r305451,r306367,r306397,r309474: This also contains a merge of ^/projects/netbsd-tests-update-12@r304035 . This change never hit ^/head because bin/cat's behavior was changed (on ^/head) to match NetBSD. PR: 210607 r305358: Update contrib/netbsd-tests with new content from NetBSD This updates the snapshot from 09/30/2014 to 08/11/2016 This brings in a number of new testcases from upstream, most notably: - bin/cat - lib/libc - lib/msun - lib/libthr - usr.bin/sort lib/libc/tests/stdio/open_memstream_test.c was moved to lib/libc/tests/stdio/open_memstream2_test.c to accomodate the new open_memstream test from NetBSD. Tested on: amd64 (VMware fusion VM; various bare metal platforms); i386 (VMware fusion VM); make tinderbox r305449: Install h_db to unbreak some of the lib/libc/db testcases after r305358 r305451: Fix lib/libc/rpc test assumptions added in r305358 - Require root in the tcp/udp subtests (it's needed on FreeBSD when registering services). - Skip the tests if service registration fails. r306367 (by br): Allow up to 6 arguments only on MIPS. r306397 (by br): Use right piece of code for FreeBSD. r309474: Don't build :strvis_locale if VIS_NOLOCALE is undefined The copy of contrib/libc-vis on ^/stable/10 doesn't contain all of the features in the ^/stable/11 // ^/head version, including VIS_NOLOCALE. The risk is lower in conditionally running the test instead of backporting the newer version of libc-vis --- .../netbsd-tests/lib/libc/stdio/t_open_memstream.c | 96 ++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c (limited to 'contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c') diff --git a/contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c b/contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c new file mode 100644 index 0000000..950a258 --- /dev/null +++ b/contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c @@ -0,0 +1,96 @@ +/* + * Based on the OpenBSD test + * Copyright (c) 2011 Martin Pieuchot + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +__RCSID("$NetBSD: t_open_memstream.c,v 1.2 2014/10/19 11:17:43 justin Exp $"); + +#include +#include +#include +#include +#include +#include + +ATF_TC(test_open_memstream); +ATF_TC_HEAD(test_open_memstream, tc) +{ + atf_tc_set_md_var(tc, "descr", "Test open_memstream functionality"); +} + +#define OFFSET 16384 + +const char start[] = "start"; +const char hello[] = "hello"; + +ATF_TC_BODY(test_open_memstream, tc) +{ + FILE *fp; + char *buf = (char *)0xff; + size_t size = 0; + off_t off; + int i; + + fp = open_memstream(&buf, &size); + ATF_REQUIRE(fp != NULL); + + off = ftello(fp); + ATF_CHECK(off == 0); + + ATF_CHECK(fflush(fp) == 0); + ATF_CHECK(size == 0); + ATF_CHECK(buf != (char *)0xff); + ATF_CHECK(fseek(fp, -6, SEEK_SET) == -1); + ATF_CHECK(fseek(fp, OFFSET, SEEK_SET) == 0); + ATF_CHECK(fprintf(fp, hello) != EOF); + ATF_CHECK(fflush(fp) != EOF); + ATF_CHECK(size == OFFSET + sizeof(hello)-1); + ATF_CHECK(fseek(fp, 0, SEEK_SET) == 0); + ATF_CHECK(fprintf(fp, start) != EOF); + ATF_CHECK(fflush(fp) != EOF); + ATF_CHECK(size == sizeof(start)-1); + + /* Needed for sparse files */ + ATF_CHECK(strncmp(buf, start, sizeof(start)-1) == 0); + for (i = sizeof(start)-1; i < OFFSET; i++) + ATF_CHECK(buf[i] == '\0'); + + ATF_CHECK(memcmp(buf + OFFSET, hello, sizeof(hello)-1) == 0); + + /* verify that simply seeking past the end doesn't increase the size */ + ATF_CHECK(fseek(fp, 100, SEEK_END) == 0); + ATF_CHECK(fflush(fp) != EOF); + ATF_CHECK(size == OFFSET + sizeof(hello)-1); + ATF_CHECK(fseek(fp, 8, SEEK_SET) == 0); + ATF_CHECK(ftell(fp) == 8); + + /* Try to seek backward */ + ATF_CHECK(fseek(fp, -1, SEEK_CUR) == 0); + ATF_CHECK(ftell(fp) == 7); + ATF_CHECK(fseek(fp, 5, SEEK_CUR) == 0); + ATF_CHECK(fclose(fp) != EOF); + ATF_CHECK(size == 12); + + free(buf); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, test_open_memstream); + + return atf_no_error(); +} -- cgit v1.1