Module Name: src Committed By: jruoho Date: Tue Apr 5 06:15:31 UTC 2011
Modified Files: src/distrib/sets/lists/tests: mi src/tests/lib/libc/gen: Makefile src/tests/lib/libc/stdlib: Makefile Added Files: src/tests/lib/libc/gen: t_getgrent.c t_ttyname.c src/tests/lib/libc/stdlib: t_strtod.c Log Message: Add simple test cases for ttyname(3), strtod(3), and getgrent(3). To generate a diff of this commit: cvs rdiff -u -r1.291 -r1.292 src/distrib/sets/lists/tests/mi cvs rdiff -u -r1.16 -r1.17 src/tests/lib/libc/gen/Makefile cvs rdiff -u -r0 -r1.1 src/tests/lib/libc/gen/t_getgrent.c \ src/tests/lib/libc/gen/t_ttyname.c cvs rdiff -u -r1.9 -r1.10 src/tests/lib/libc/stdlib/Makefile cvs rdiff -u -r0 -r1.1 src/tests/lib/libc/stdlib/t_strtod.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/tests/mi diff -u src/distrib/sets/lists/tests/mi:1.291 src/distrib/sets/lists/tests/mi:1.292 --- src/distrib/sets/lists/tests/mi:1.291 Mon Apr 4 19:08:42 2011 +++ src/distrib/sets/lists/tests/mi Tue Apr 5 06:15:30 2011 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.291 2011/04/04 19:08:42 jruoho Exp $ +# $NetBSD: mi,v 1.292 2011/04/05 06:15:30 jruoho Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -336,6 +336,7 @@ ./usr/libdata/debug/usr/tests/lib/libc/gen/t_basedirname.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/gen/t_dir.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/gen/t_fmtcheck.debug tests-lib-debug debug,atf +./usr/libdata/debug/usr/tests/lib/libc/gen/t_getgrent.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/gen/t_glob_star.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/gen/t_humanize_number.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/gen/t_ldexp.debug tests-lib-debug debug,atf @@ -345,6 +346,7 @@ ./usr/libdata/debug/usr/tests/lib/libc/gen/t_rbstress.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/gen/t_syslog_pthread.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/gen/t_siginfo.debug tests-lib-debug debug,atf +./usr/libdata/debug/usr/tests/lib/libc/gen/t_ttyname.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/gen/t_vis.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/getaddrinfo tests-obsolete obsolete ./usr/libdata/debug/usr/tests/lib/libc/getaddrinfo/data tests-obsolete obsolete @@ -407,6 +409,7 @@ ./usr/libdata/debug/usr/tests/lib/libc/stdlib/t_hsearch.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/stdlib/t_mi_vector_hash.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/stdlib/t_posix_memalign.debug tests-lib-debug debug,atf +./usr/libdata/debug/usr/tests/lib/libc/stdlib/t_strtod.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/stdlib/t_strtox.debug tests-lib-debug debug,atf ./usr/libdata/debug/usr/tests/lib/libc/string tests-lib-debug ./usr/libdata/debug/usr/tests/lib/libc/string/t_memcpy.debug tests-lib-debug debug,atf @@ -1714,6 +1717,7 @@ ./usr/tests/lib/libc/gen/t_basedirname tests-lib-tests atf ./usr/tests/lib/libc/gen/t_dir tests-lib-tests atf ./usr/tests/lib/libc/gen/t_fmtcheck tests-lib-tests atf +./usr/tests/lib/libc/gen/t_getgrent tests-lib-tests atf ./usr/tests/lib/libc/gen/t_glob_star tests-lib-tests atf ./usr/tests/lib/libc/gen/t_humanize_number tests-lib-tests atf ./usr/tests/lib/libc/gen/t_ldexp tests-lib-tests atf @@ -1723,6 +1727,7 @@ ./usr/tests/lib/libc/gen/t_rbstress tests-lib-tests atf ./usr/tests/lib/libc/gen/t_syslog_pthread tests-lib-tests atf ./usr/tests/lib/libc/gen/t_siginfo tests-lib-tests atf +./usr/tests/lib/libc/gen/t_ttyname tests-lib-tests atf ./usr/tests/lib/libc/gen/t_vis tests-lib-tests atf ./usr/tests/lib/libc/getaddrinfo tests-obsolete obsolete ./usr/tests/lib/libc/getaddrinfo/Atffile tests-obsolete obsolete @@ -1860,6 +1865,7 @@ ./usr/tests/lib/libc/stdlib/t_hsearch tests-lib-tests atf ./usr/tests/lib/libc/stdlib/t_mi_vector_hash tests-lib-tests atf ./usr/tests/lib/libc/stdlib/t_posix_memalign tests-lib-tests atf +./usr/tests/lib/libc/stdlib/t_strtod tests-lib-tests atf ./usr/tests/lib/libc/stdlib/t_strtox tests-lib-tests atf ./usr/tests/lib/libc/string tests-lib-tests ./usr/tests/lib/libc/string/Atffile tests-lib-tests atf Index: src/tests/lib/libc/gen/Makefile diff -u src/tests/lib/libc/gen/Makefile:1.16 src/tests/lib/libc/gen/Makefile:1.17 --- src/tests/lib/libc/gen/Makefile:1.16 Mon Apr 4 09:52:18 2011 +++ src/tests/lib/libc/gen/Makefile Tue Apr 5 06:15:31 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.16 2011/04/04 09:52:18 jruoho Exp $ +# $NetBSD: Makefile,v 1.17 2011/04/05 06:15:31 jruoho Exp $ .include <bsd.own.mk> @@ -7,6 +7,7 @@ TESTS_C+= t_basedirname TESTS_C+= t_dir TESTS_C+= t_fmtcheck +TESTS_C+= t_getgrent TESTS_C+= t_glob_star TESTS_C+= t_humanize_number TESTS_C+= t_ldexp @@ -16,6 +17,7 @@ TESTS_C+= t_rbstress TESTS_C+= t_siginfo TESTS_C+= t_syslog_pthread +TESTS_C+= t_ttyname TESTS_C+= t_vis LDADD.t_ldexp+= -lm Index: src/tests/lib/libc/stdlib/Makefile diff -u src/tests/lib/libc/stdlib/Makefile:1.9 src/tests/lib/libc/stdlib/Makefile:1.10 --- src/tests/lib/libc/stdlib/Makefile:1.9 Thu Jan 13 14:32:35 2011 +++ src/tests/lib/libc/stdlib/Makefile Tue Apr 5 06:15:30 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.9 2011/01/13 14:32:35 pgoyette Exp $ +# $NetBSD: Makefile,v 1.10 2011/04/05 06:15:30 jruoho Exp $ .include <bsd.own.mk> @@ -10,10 +10,11 @@ TESTS_C+= t_hsearch TESTS_C+= t_mi_vector_hash TESTS_C+= t_posix_memalign +TESTS_C+= t_strtod TESTS_C+= t_strtox TESTS_SH+= t_atexit -TESTS_SH+= t_getopt +TESTS_SH+= t_getopt MKMAN=no Added files: Index: src/tests/lib/libc/gen/t_getgrent.c diff -u /dev/null src/tests/lib/libc/gen/t_getgrent.c:1.1 --- /dev/null Tue Apr 5 06:15:31 2011 +++ src/tests/lib/libc/gen/t_getgrent.c Tue Apr 5 06:15:31 2011 @@ -0,0 +1,181 @@ +/* $NetBSD: t_getgrent.c,v 1.1 2011/04/05 06:15:31 jruoho Exp $ */ + +/*- + * Copyright (c) 2011 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jukka Ruohonen. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Copyright (c) 2009, Stathis Kamperis + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#include <sys/cdefs.h> +__RCSID("$NetBSD: t_getgrent.c,v 1.1 2011/04/05 06:15:31 jruoho Exp $"); + +#include <sys/wait.h> + +#include <atf-c.h> +#include <grp.h> +#include <stdlib.h> +#include <unistd.h> + +ATF_TC(getgrent_loop); +ATF_TC_HEAD(getgrent_loop, tc) +{ + atf_tc_set_md_var(tc, "descr", "Test sequential getgrent(2)"); +} + +ATF_TC_BODY(getgrent_loop, tc) +{ + struct group *gr; + size_t i, j; + + /* + * Loop over the group database. The first + * call returns the first entry and subsequent + * calls return the rest of the entries. + */ + i = j = 0; + + while((gr = getgrent()) != NULL) + i++; + + /* + * Rewind the database to the beginning + * and loop over again until the end. + */ + setgrent(); + + while((gr = getgrent()) != NULL) + j++; + + if (i != j) + atf_tc_fail("sequantial getgrent(3) failed"); + + /* + * Close the database and reopen it. + * The getgrent(3) call should always + * automatically rewind the database. + */ + endgrent(); + + j = 0; + + while((gr = getgrent()) != NULL) + j++; + + if (i != j) + atf_tc_fail("getgrent(3) did not rewind"); +} + +ATF_TC(getgrent_setgid); +ATF_TC_HEAD(getgrent_setgid, tc) +{ + atf_tc_set_md_var(tc, "descr", "Test consistency of the group db"); + atf_tc_set_md_var(tc, "require.user", "root"); +} + +ATF_TC_BODY(getgrent_setgid, tc) +{ + struct group *gr, *gr1, *gr2; + int rv, sta; + pid_t pid; + + /* + * Verify that the database is consistent. + * + * Note that because of the static buffers + * used by getgrent(3), fork(2) is required, + * even without the setgid(2) check. + */ + while((gr = getgrent()) != NULL) { + + pid = fork(); + ATF_REQUIRE(pid >= 0); + + if (pid == 0) { + + gr1 = getgrgid(gr->gr_gid); + + if (gr1 == NULL) + _exit(EXIT_FAILURE); + + gr2 = getgrnam(gr->gr_name); + + if (gr2 == NULL) + _exit(EXIT_FAILURE); + + rv = setgid(gr->gr_gid); + + if (rv != 0) + _exit(EXIT_FAILURE); + + _exit(EXIT_SUCCESS); + } + + (void)wait(&sta); + + if (WIFEXITED(sta) == 0 || WEXITSTATUS(sta) != EXIT_SUCCESS) + goto fail; + } + + return; + +fail: + atf_tc_fail("group database is inconsistent"); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, getgrent_loop); + ATF_TP_ADD_TC(tp, getgrent_setgid); + + return atf_no_error(); +} Index: src/tests/lib/libc/gen/t_ttyname.c diff -u /dev/null src/tests/lib/libc/gen/t_ttyname.c:1.1 --- /dev/null Tue Apr 5 06:15:31 2011 +++ src/tests/lib/libc/gen/t_ttyname.c Tue Apr 5 06:15:31 2011 @@ -0,0 +1,112 @@ +/* $NetBSD: t_ttyname.c,v 1.1 2011/04/05 06:15:31 jruoho Exp $ */ + +/*- + * Copyright (c) 2011 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jukka Ruohonen. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#include <sys/cdefs.h> +__RCSID("$NetBSD: t_ttyname.c,v 1.1 2011/04/05 06:15:31 jruoho Exp $"); + +#include <atf-c.h> +#include <errno.h> +#include <fcntl.h> +#include <unistd.h> + +ATF_TC(ttyname_err); +ATF_TC_HEAD(ttyname_err, tc) +{ + atf_tc_set_md_var(tc, "descr", "Test errors in ttyname(3)"); +} + +ATF_TC_BODY(ttyname_err, tc) +{ + char buf[0]; + int fd, rv; + + fd = open("XXX", O_RDONLY); + + if (fd < 0) { + + errno = 0; + + ATF_REQUIRE(isatty(fd) != -1); + ATF_REQUIRE(errno == EBADF); + + errno = 0; + + ATF_REQUIRE(ttyname(fd) == NULL); + ATF_REQUIRE(errno == EBADF); + } + + fd = open("/etc/passwd", O_RDONLY); + + if (fd >= 0) { + + errno = 0; + + ATF_REQUIRE(isatty(fd) != -1); + ATF_REQUIRE(errno == ENOTTY); + + errno = 0; + + ATF_REQUIRE(ttyname(fd) == NULL); + ATF_REQUIRE(errno == ENOTTY); + } + + if (isatty(STDIN_FILENO) != 0) { + + rv = ttyname_r(STDIN_FILENO, buf, sizeof(buf)); + ATF_REQUIRE(rv == ERANGE); + } +} + +ATF_TC(ttyname_stdin); +ATF_TC_HEAD(ttyname_stdin, tc) +{ + atf_tc_set_md_var(tc, "descr", "Test ttyname(3) with stdin(3)"); +} + +ATF_TC_BODY(ttyname_stdin, tc) +{ + + ATF_REQUIRE(isatty(STDIN_FILENO) == 1); + ATF_REQUIRE(ttyname(STDIN_FILENO) != NULL); + + ATF_REQUIRE(close(STDIN_FILENO) == 0); + + ATF_REQUIRE(isatty(STDIN_FILENO) != 1); + ATF_REQUIRE(ttyname(STDIN_FILENO) == NULL); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, ttyname_err); + ATF_TP_ADD_TC(tp, ttyname_stdin); + + return atf_no_error(); +} Index: src/tests/lib/libc/stdlib/t_strtod.c diff -u /dev/null src/tests/lib/libc/stdlib/t_strtod.c:1.1 --- /dev/null Tue Apr 5 06:15:31 2011 +++ src/tests/lib/libc/stdlib/t_strtod.c Tue Apr 5 06:15:30 2011 @@ -0,0 +1,104 @@ +/* $NetBSD: t_strtod.c,v 1.1 2011/04/05 06:15:30 jruoho Exp $ */ + +/*- + * Copyright (c) 2011 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jukka Ruohonen. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* Public domain, Otto Moerbeek <o...@drijf.net>, 2006. */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: t_strtod.c,v 1.1 2011/04/05 06:15:30 jruoho Exp $"); + +#include <atf-c.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +ATF_TC(strtod_basic); +ATF_TC_HEAD(strtod_basic, tc) +{ + atf_tc_set_md_var(tc, "descr", "A basic test of strtod(3)"); +} + +ATF_TC_BODY(strtod_basic, tc) +{ + char buf[512]; + size_t i, n; + double d; + + n = 1024 * 1000; + + for (i = 1; i < n; i = i + 1024) { + + (void)snprintf(buf, sizeof(buf), "%zu.%zu", i, i + 1); + + errno = 0; + d = strtod(buf, NULL); + + ATF_REQUIRE(d > 0.0); + ATF_REQUIRE(errno == 0); + } +} + +ATF_TC(strtod_underflow); +ATF_TC_HEAD(strtod_underflow, tc) +{ + atf_tc_set_md_var(tc, "descr", "Test underflow in strtod(3)"); +} + +ATF_TC_BODY(strtod_underflow, tc) +{ + + const char *tmp = + "0.0000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000" + "000000000000000002"; + + double d; + + errno = 0; + d = strtod(tmp, NULL); + + if (errno != ERANGE) + atf_tc_fail("strtod(3) did not detect underflow"); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, strtod_basic); + ATF_TP_ADD_TC(tp, strtod_underflow); + + return atf_no_error(); +}