Index: vendor/NetBSD/atf/dist/tests/atf/atf-report/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/atf/atf-report/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/atf/atf-report/Makefile (nonexistent) @@ -1,23 +0,0 @@ -# $NetBSD: Makefile,v 1.5 2010/10/20 09:20:11 jmmv Exp $ - -.include - -TESTSDIR= ${TESTSBASE}/atf/atf-report -ATFFILE= yes - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-report -.PATH: ${SRCDIR}/atf-c++/detail - -TESTS_CXX= fail_helper -TESTS_CXX+= misc_helpers -TESTS_CXX+= pass_helper -TESTS_CXX+= reader_test -TESTS_SH= integration_test - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${SRCDIR} - -SRCS.reader_test= reader_test.cpp reader.cpp test_helpers.cpp - -.include Index: vendor/NetBSD/atf/dist/tests/atf/atf-c/detail/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/atf/atf-c/detail/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/atf/atf-c/detail/Makefile (nonexistent) @@ -1,35 +0,0 @@ -# $NetBSD: Makefile,v 1.1 2010/10/20 09:20:11 jmmv Exp $ - -.include - -TESTSDIR= ${TESTSBASE}/atf/atf-c/detail -ATFFILE= yes - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-c/detail - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${NETBSDSRCDIR}/external/bsd/atf/lib/libatf-c - -PROGS= process_helpers -SRCS.process_helpers= process_helpers.c -MAN.process_helpers= # defined -BINDIR.process_helpers= ${TESTSDIR} - -TESTS_C= -.for test in dynstr_test \ - env_test \ - fs_test \ - list_test \ - map_test \ - process_test \ - sanity_test \ - test_helpers_test \ - text_test \ - user_test -TESTS_C+= ${test} -SRCS.${test}= ${test}.c test_helpers.c -.endfor -.undef test - -.include Index: vendor/NetBSD/atf/dist/tests/atf/atf-c/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/atf/atf-c/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/atf/atf-c/Makefile (nonexistent) @@ -1,37 +0,0 @@ -# $NetBSD: Makefile,v 1.7 2010/10/20 09:20:10 jmmv Exp $ - -.include - -TESTS_SUBDIRS= detail - -TESTSDIR= ${TESTSBASE}/atf/atf-c -ATFFILE= yes - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-c -.PATH: ${SRCDIR}/atf-c/detail - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${NETBSDSRCDIR}/external/bsd/atf/lib/libatf-c - -FILESDIR= ${TESTSDIR} -FILES= macros_h_test.c - -TESTS_C= -.for test in atf_c_test \ - build_test \ - check_test \ - config_test \ - error_test \ - macros_test \ - tc_test \ - tp_test \ - utils_test -TESTS_C+= ${test} -SRCS.${test}= ${test}.c test_helpers.c -.endfor -.undef test - -TESTS_SH= pkg_config_test - -.include Index: vendor/NetBSD/atf/dist/tests/atf/atf-run/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/atf/atf-run/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/atf/atf-run/Makefile (nonexistent) @@ -1,46 +0,0 @@ -# $NetBSD: Makefile,v 1.6 2010/11/07 17:46:46 jmmv Exp $ - -.include - -TESTSDIR= ${TESTSBASE}/atf/atf-run -ATFFILE= yes - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-run -.PATH: ${SRCDIR}/atf-c++ -.PATH: ${SRCDIR}/atf-c++/detail -.PATH: ${.CURDIR}/../../../lib/libatf-c - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${SRCDIR}/atf-run -CPPFLAGS+= -I${SRCDIR} -CPPFLAGS+= -I${.CURDIR}/../../../lib/libatf-c - -TESTS_CXX= atffile_test -TESTS_CXX+= bad_metadata_helper -TESTS_CXX+= config_test -TESTS_CXX+= expect_helpers -TESTS_CXX+= fs_test -TESTS_CXX+= io_test -TESTS_CXX+= misc_helpers -TESTS_CXX+= pass_helper -TESTS_CXX+= requirements_test -TESTS_CXX+= several_tcs_helper -TESTS_CXX+= signals_test -TESTS_CXX+= test_program_test -TESTS_CXX+= user_test -TESTS_CXX+= zero_tcs_helper -TESTS_SH= integration_test - -SRCS.atffile_test= atffile_test.cpp atffile.cpp test_helpers.cpp -SRCS.config_test= config_test.cpp config.cpp test_helpers.cpp -SRCS.fs_test= fs_test.cpp fs.cpp test_helpers.cpp user.cpp -SRCS.io_test= io_test.cpp io.cpp signals.cpp test_helpers.cpp -SRCS.requirements_test= requirements_test.cpp requirements.cpp user.cpp -SRCS.signals_test= signals_test.cpp signals.cpp -SRCS.test_program_test= fs.cpp io.cpp requirements.cpp signals.cpp \ - test_helpers.cpp test_program_test.cpp \ - test-program.cpp timer.cpp user.cpp -SRCS.user_test= user_test.cpp user.cpp - -.include Index: vendor/NetBSD/atf/dist/tests/atf/atf-c++/detail/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/atf/atf-c++/detail/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/atf/atf-c++/detail/Makefile (nonexistent) @@ -1,30 +0,0 @@ -# $NetBSD: Makefile,v 1.1 2010/10/20 09:20:11 jmmv Exp $ - -.include - -TESTSDIR= ${TESTSBASE}/atf/atf-c++/detail -ATFFILE= yes - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-c++/detail - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${NETBSDSRCDIR}/lib/libatf-c++ - -TESTS_CXX= -.for test in application_test \ - env_test \ - exceptions_test \ - expand_test \ - fs_test \ - parser_test \ - process_test \ - sanity_test \ - text_test \ - ui_test -TESTS_CXX+= ${test} -SRCS.${test}= ${test}.cpp test_helpers.cpp -.endfor -.undef test - -.include Index: vendor/NetBSD/atf/dist/tests/atf/atf-c++/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/atf/atf-c++/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/atf/atf-c++/Makefile (nonexistent) @@ -1,35 +0,0 @@ -# $NetBSD: Makefile,v 1.6 2010/10/20 09:20:11 jmmv Exp $ - -.include - -TESTS_SUBDIRS= detail - -TESTSDIR= ${TESTSBASE}/atf/atf-c++ -ATFFILE= yes - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-c++ -.PATH: ${SRCDIR}/atf-c++/detail - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${NETBSDSRCDIR}/lib/libatf-c++ - -FILESDIR= ${TESTSDIR} -FILES= macros_hpp_test.cpp - -TESTS_CXX= -.for test in atf_c++_test \ - build_test \ - check_test \ - config_test \ - macros_test \ - tests_test \ - utils_test -TESTS_CXX+= ${test} -SRCS.${test}= ${test}.cpp test_helpers.cpp -.endfor -.undef test - -TESTS_SH= pkg_config_test - -.include Index: vendor/NetBSD/atf/dist/tests/atf/test-programs/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/atf/test-programs/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/atf/test-programs/Makefile (nonexistent) @@ -1,25 +0,0 @@ -# $NetBSD: Makefile,v 1.2 2010/07/13 21:12:39 jmmv Exp $ - -.include - -TESTSDIR= ${TESTSBASE}/atf/test-programs -ATFFILE= yes - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/test-programs - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${SRCDIR}/libs -I${SRCDIR} - -TESTS_C= c_helpers - -TESTS_CXX= cpp_helpers - -TESTS_SH= sh_helpers -.for t in config_test expect_test fork_test meta_data_test result_test \ - srcdir_test -TESTS_SH+= ${t} -TESTS_SH_SRC_${t}= common.sh ${t}.sh -.endfor - -.include Index: vendor/NetBSD/atf/dist/tests/atf/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/atf/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/atf/Makefile (nonexistent) @@ -1,19 +0,0 @@ -# $NetBSD: Makefile,v 1.6 2010/10/20 09:20:10 jmmv Exp $ - -.include - -TESTSDIR= ${TESTSBASE}/atf -ATFFILE= yes - -SUBDIR= atf-c \ - atf-c++ \ - atf-config \ - atf-report \ - atf-run \ - atf-sh \ - test-programs - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR} - -.include Index: vendor/NetBSD/atf/dist/tests/atf/atf-config/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/atf/atf-config/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/atf/atf-config/Makefile (nonexistent) @@ -1,15 +0,0 @@ -# $NetBSD: Makefile,v 1.3 2010/07/13 21:12:38 jmmv Exp $ - -.include - -TESTSDIR= ${TESTSBASE}/atf/atf-config -ATFFILE= yes - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-config - -CPPFLAGS+= -DHAVE_CONFIG_H - -TESTS_SH= integration_test - -.include Index: vendor/NetBSD/atf/dist/tests/atf/atf-sh/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/atf/atf-sh/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/atf/atf-sh/Makefile (nonexistent) @@ -1,22 +0,0 @@ -# $NetBSD: Makefile,v 1.5 2010/10/20 09:20:12 jmmv Exp $ - -.include - -TESTSDIR= ${TESTSBASE}/atf/atf-sh -ATFFILE= yes - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-sh - -CPPFLAGS+= -DHAVE_CONFIG_H - -TESTS_SH= atf-check_test -TESTS_SH+= atf_check_test -TESTS_SH+= config_test -TESTS_SH+= integration_test -TESTS_SH+= misc_helpers -TESTS_SH+= normalize_test -TESTS_SH+= tc_test -TESTS_SH+= tp_test - -.include Index: vendor/NetBSD/atf/dist/tests/Makefile =================================================================== --- vendor/NetBSD/atf/dist/tests/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/tests/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.1 2009/01/19 07:13:05 jmmv Exp $ - -SUBDIR= atf - -.include Index: vendor/NetBSD/atf/dist/lib/libatf-c/bconfig.h =================================================================== --- vendor/NetBSD/atf/dist/lib/libatf-c/bconfig.h (revision 240137) +++ vendor/NetBSD/atf/dist/lib/libatf-c/bconfig.h (nonexistent) @@ -1,114 +0,0 @@ -/* bconfig.h. Generated from bconfig.h.in by configure. */ -/* bconfig.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if basename takes a constant pointer */ -/* #undef HAVE_CONST_BASENAME */ - -/* Define to 1 if dirname takes a constant pointer */ -/* #undef HAVE_CONST_DIRNAME */ - -/* Define to 1 if you have the header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if getcwd(NULL, 0) works */ -#define HAVE_GETCWD_DYN 1 - -/* Define to 1 if getopt allows a + sign for POSIX behavior */ -/* #undef HAVE_GNU_GETOPT */ - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if getopt has optreset */ -/* #undef HAVE_OPTRESET */ - -/* Define to 1 if you have the `putenv' function. */ -#define HAVE_PUTENV 1 - -/* Define to 1 if putenv is in std */ -/* #undef HAVE_PUTENV_IN_STD */ - -/* Define to 1 if you have the `setenv' function. */ -#define HAVE_SETENV 1 - -/* Define to 1 if setenv is in std */ -/* #undef HAVE_SETENV_IN_STD */ - -/* Define to 1 if snprintf is in std */ -/* #undef HAVE_SNPRINTF_IN_STD */ - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to 1 if you have the `unmount' function. */ -#define HAVE_UNMOUNT 1 - -/* Define to 1 if you have the `unsetenv' function. */ -#define HAVE_UNSETENV 1 - -/* Define to 1 if unsetenv is in std */ -/* #undef HAVE_UNSETENV_IN_STD */ - -/* Define to 1 if vsnprintf is in std */ -/* #undef HAVE_VSNPRINTF_IN_STD */ - -/* Define to the last valid signal number */ -#define LAST_SIGNO 63 - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#define LT_OBJDIR ".libs/" - -/* Define to 1 if your C compiler doesn't accept -c and -o together. */ -/* #undef NO_MINUS_C_MINUS_O */ - -/* Name of package */ -#define PACKAGE "atf" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "atf-devel@NetBSD.org" - -/* Define to the copyright string applicable to this package. */ -#define PACKAGE_COPYRIGHT "Copyright (c) 2007-2011 The NetBSD Foundation, Inc." - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "Automated Testing Framework" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "Automated Testing Framework 0.13" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "atf" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "http://www.NetBSD.org/~jmmv/atf/" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "0.13" - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Version number of package */ -#define VERSION "0.13" Index: vendor/NetBSD/atf/dist/lib/libatf-c/Makefile =================================================================== --- vendor/NetBSD/atf/dist/lib/libatf-c/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/lib/libatf-c/Makefile (nonexistent) @@ -1,97 +0,0 @@ -# $NetBSD: Makefile,v 1.10 2011/03/31 16:45:44 jmmv Exp $ - -NOLINT= # defined - -.include - -LIB= atf-c -NOPIC= # defined; interface is still too unstable - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR} -.PATH: ${SRCDIR}/atf-c -.PATH: ${SRCDIR}/atf-c/detail - -CPPFLAGS+= -I${.CURDIR} -CPPFLAGS+= -I. - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -DATF_ARCH=\"${MACHINE_ARCH}\" -CPPFLAGS+= -DATF_BUILD_CC=\"/usr/bin/cc\" -CPPFLAGS+= -DATF_BUILD_CFLAGS=\"\" -CPPFLAGS+= -DATF_BUILD_CPP=\"/usr/bin/cpp\" -CPPFLAGS+= -DATF_BUILD_CPPFLAGS=\"\" -CPPFLAGS+= -DATF_BUILD_CXX=\"/usr/bin/c++\" -CPPFLAGS+= -DATF_BUILD_CXXFLAGS=\"\" -CPPFLAGS+= -DATF_CONFDIR=\"/etc/atf\" -CPPFLAGS+= -DATF_INCLUDEDIR=\"/usr/include\" -CPPFLAGS+= -DATF_LIBDIR=\"/usr/lib\" -CPPFLAGS+= -DATF_LIBEXECDIR=\"/usr/libexec\" -CPPFLAGS+= -DATF_MACHINE=\"${MACHINE}\" -CPPFLAGS+= -DATF_M4=\"/usr/bin/m4\" -CPPFLAGS+= -DATF_PKGDATADIR=\"/usr/share/atf\" -CPPFLAGS+= -DATF_SHELL=\"/bin/sh\" -CPPFLAGS+= -DATF_WORKDIR=\"/tmp\" - -config.o: Makefile - -WARNS?= 4 - -SRCS= build.c \ - check.c \ - config.c \ - dynstr.c \ - env.c \ - error.c \ - fs.c \ - list.c \ - map.c \ - process.c \ - sanity.c \ - text.c \ - user.c \ - utils.c \ - tc.c \ - tp.c \ - tp_main.c - -INCS= build.h \ - check.h \ - config.h \ - defs.h \ - error.h \ - error_fwd.h \ - macros.h \ - tc.h \ - tp.h \ - utils.h -INCSDIR= /usr/include/atf-c - -INCS+= atf-c.h -INCSDIR_atf-c.h=/usr/include - -MAN= atf-c-api.3 - -CLEANFILES+= defs.h - -defs.h: defs.h.in - ${TOOL_SED} -e \ - 's,@ATTRIBUTE_NORETURN@,__attribute__((__noreturn__)),g' \ - < ${.ALLSRC} > ${.TARGET}.tmp - mv ${.TARGET}.tmp ${.TARGET} - -.if ${MKSHARE} != "no" -FILES+= atf-c.pc -FILESDIR= /usr/lib/pkgconfig - -realall: atf-c.pc -atf-c.pc: Makefile atf-c.pc.in - ${TOOL_SED} -e 's,__ATF_VERSION__,0.13,g' \ - -e 's,__CC__,gcc,g' \ - -e 's,__INCLUDEDIR__,/usr/include,g' \ - -e 's,__LIBDIR__,/usr/lib,g' \ - <${SRCDIR}/atf-c/atf-c.pc.in >atf-c.pc -CLEANFILES+= atf-c.pc -.endif - -.include Index: vendor/NetBSD/atf/dist/lib/libatf-c++/Makefile =================================================================== --- vendor/NetBSD/atf/dist/lib/libatf-c++/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/lib/libatf-c++/Makefile (nonexistent) @@ -1,66 +0,0 @@ -# $NetBSD: Makefile,v 1.10 2011/04/05 16:37:06 jmmv Exp $ - -NOLINT= # defined - -.include - -LIB= atf-c++ -LIBISCXX= yes -LDADD= -L${.OBJDIR}/../libatf-c -latf-c -DPADD= ${LIBATF_C} -NOPIC= # defined; interface is still too unstable - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR} -.PATH: ${SRCDIR}/atf-c++ -.PATH: ${SRCDIR}/atf-c++/detail - -CPPFLAGS+= -I${.CURDIR}/../libatf-c -CPPFLAGS+= -I. - -CPPFLAGS+= -DHAVE_CONFIG_H - -WARNS?= 2 - -SRCS= application.cpp \ - build.cpp \ - check.cpp \ - config.cpp \ - env.cpp \ - exceptions.cpp \ - expand.cpp \ - fs.cpp \ - parser.cpp \ - process.cpp \ - tests.cpp \ - text.cpp \ - ui.cpp - -INCS= build.hpp \ - check.hpp \ - config.hpp \ - macros.hpp \ - tests.hpp \ - utils.hpp -INCSDIR= /usr/include/atf-c++ - -INCS+= atf-c++.hpp -INCSDIR_atf-c++.hpp=/usr/include - -MAN= atf-c++-api.3 - -.if ${MKSHARE} != "no" -FILES+= atf-c++.pc -FILESDIR= /usr/lib/pkgconfig - -realall: atf-c++.pc -atf-c++.pc: Makefile atf-c++.pc.in - ${TOOL_SED} -e 's,__ATF_VERSION__,0.13,g' \ - -e 's,__CXX__,g++,g' \ - -e 's,__INCLUDEDIR__,/usr/include,g' \ - -e 's,__LIBDIR__,/usr/lib,g' \ - <${SRCDIR}/atf-c++/atf-c++.pc.in >atf-c++.pc -CLEANFILES+= atf-c++.pc -.endif - -.include Index: vendor/NetBSD/atf/dist/lib/Makefile =================================================================== --- vendor/NetBSD/atf/dist/lib/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/lib/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.1 2009/01/19 07:13:04 jmmv Exp $ - -SUBDIR= libatf-c .WAIT libatf-c++ - -.include Index: vendor/NetBSD/atf/dist/prepare-import.sh =================================================================== --- vendor/NetBSD/atf/dist/prepare-import.sh (revision 240137) +++ vendor/NetBSD/atf/dist/prepare-import.sh (nonexistent) @@ -1,105 +0,0 @@ -#!/bin/sh -# $NetBSD: prepare-import.sh,v 1.4 2011/03/31 16:45:44 jmmv Exp $ -# -# Use this script to recreate the 'dist' subdirectory from a newly released -# distfile. The script takes care of unpacking the distfile, removing any -# files that are not relevant to NetBSD and checking if there are any new -# files in the new release that need to be addressed. -# - -set -e - -ProgName=${0##*/} - -CLEAN_PATTERNS= -CLEAN_PATTERNS="${CLEAN_PATTERNS} *.m4" -CLEAN_PATTERNS="${CLEAN_PATTERNS} INSTALL TODO" -CLEAN_PATTERNS="${CLEAN_PATTERNS} Makefile* */Makefile* */*/Makefile*" -CLEAN_PATTERNS="${CLEAN_PATTERNS} admin" -CLEAN_PATTERNS="${CLEAN_PATTERNS} bconfig.h.in" -CLEAN_PATTERNS="${CLEAN_PATTERNS} bootstrap" -CLEAN_PATTERNS="${CLEAN_PATTERNS} configure*" -CLEAN_PATTERNS="${CLEAN_PATTERNS} m4" - -err() { - echo "${ProgName}:" "${@}" 1>&2 - exit 1 -} - -log() { - echo "${ProgName}:" "${@}" -} - -backup_dist() { - if [ -d dist.old ]; then - log "Removing dist; dist.old exists" - rm -rf dist - else - log "Backing up dist as dist.old" - mv dist dist.old - fi -} - -extract_distfile() { - local distfile="${1}"; shift - local distname="${1}"; shift - - log "Extracting ${distfile}" - tar -xzf "${distfile}" - [ -d "${distname}" ] || err "Distfile did not create ${distname}" - log "Renaming ${distname} to dist" - mv "${distname}" dist -} - -get_distname() { - local distfile="${1}"; shift - basename "${distfile}" | sed -e 's,\.tar.*,,' -} - -cleanup_dist() { - log "Removing unnecessary files from dist" - ( cd dist && rm -rf ${CLEAN_PATTERNS} ) -} - -diff_dirs() { - local old_dir="${1}"; shift - local new_dir="${1}"; shift - - local old_list=$(mktemp -t atf-import.XXXXXX) - local new_list=$(mktemp -t atf-import.XXXXXX) - local diff=$(mktemp -t atf-import.XXXXXX) - trap "rm -f '${old_list}' '${new_list}' '${diff}'; exit 1" \ - HUP INT QUIT TERM - - ( cd "${old_dir}" && find . | sort >>"${old_list}" ) - ( cd "${new_dir}" && find . | sort >>"${new_list}" ) - - diff -u "${old_list}" "${new_list}" | grep '^+\.' >>"${diff}" || true - if [ -s "${diff}" ]; then - log "New files found" - diff -u "${old_list}" "${new_list}" | grep '^+\.' - log "Check if any files have to be cleaned up and update" \ - "the prepare-import.sh script accordingly" - else - log "No new files; all good!" - fi - - rm -f "${old_list}" "${new_list}" "${diff}" -} - -main() { - [ ${#} -eq 1 ] || err "Must provide a distfile name" - local distfile="${1}"; shift - - [ -f Makefile -a -f prepare-import.sh ] || \ - err "Must be run from the src/external/bsd/atf subdirectory" - - local distname="$(get_distname ${distfile})" - - backup_dist - extract_distfile "${distfile}" "${distname}" - cleanup_dist - diff_dirs dist.old dist -} - -main "${@}" Property changes on: vendor/NetBSD/atf/dist/prepare-import.sh ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: vendor/NetBSD/atf/dist/usr.bin/atf-report/Makefile =================================================================== --- vendor/NetBSD/atf/dist/usr.bin/atf-report/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/usr.bin/atf-report/Makefile (nonexistent) @@ -1,21 +0,0 @@ -# $NetBSD: Makefile,v 1.5 2011/02/20 20:18:57 jmmv Exp $ - -.include - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-report - -BINDIR= /usr/bin -PROG_CXX= atf-report -SRCS= atf-report.cpp reader.cpp -MAN= atf-report.1 - -LDADD+= -latf-c++ -latf-c -DPADD+= ${LIBATF_CXX} ${LIBATF_C} - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${SRCDIR} - -WARNS?= 2 - -.include Index: vendor/NetBSD/atf/dist/usr.bin/atf-run/Makefile =================================================================== --- vendor/NetBSD/atf/dist/usr.bin/atf-run/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/usr.bin/atf-run/Makefile (nonexistent) @@ -1,33 +0,0 @@ -# $NetBSD: Makefile,v 1.10 2011/03/31 16:45:45 jmmv Exp $ - -.include - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-run -.PATH: ${SRCDIR}/atf-run/share -.PATH: ${.CURDIR}/../../lib/libatf-c - -BINDIR= /usr/bin -PROG_CXX= atf-run -SRCS= atf-run.cpp atffile.cpp config.cpp fs.cpp io.cpp requirements.cpp \ - signals.cpp test-program.cpp timer.cpp user.cpp -MAN= atf-run.1 - -CPPFLAGS+= -DGDB=\"/usr/bin/gdb\" -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${SRCDIR} -CPPFLAGS+= -I${.CURDIR}/../../lib/libatf-c -LDADD+= -latf-c++ -latf-c -DPADD+= ${LIBATF_CXX} ${LIBATF_C} - -COPTS.atf-run.cpp+= -Wno-stack-protector - -WARNS?= 2 - -.if ${MKSHARE} != "no" -FILESDIR= /usr/share/atf -FILESMODE= 444 -FILES= atf-run.hooks -.endif - -.include Index: vendor/NetBSD/atf/dist/usr.bin/atf-version/revision.h =================================================================== --- vendor/NetBSD/atf/dist/usr.bin/atf-version/revision.h (revision 240137) +++ vendor/NetBSD/atf/dist/usr.bin/atf-version/revision.h (nonexistent) @@ -1,3 +0,0 @@ -/* $NetBSD: revision.h,v 1.1 2010/07/03 08:14:13 jmmv Exp $ */ - -#define PACKAGE_REVISION_TYPE_DIST Index: vendor/NetBSD/atf/dist/usr.bin/atf-version/Makefile =================================================================== --- vendor/NetBSD/atf/dist/usr.bin/atf-version/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/usr.bin/atf-version/Makefile (nonexistent) @@ -1,22 +0,0 @@ -# $NetBSD: Makefile,v 1.7 2011/02/20 20:18:57 jmmv Exp $ - -.include - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/admin ${SRCDIR}/atf-version - -BINDIR= /usr/bin -PROG_CXX= atf-version -SRCS= atf-version.cpp -MAN= atf-version.1 - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${SRCDIR} -CPPFLAGS+= -I${.CURDIR}/../../lib/libatf-c -CPPFLAGS+= -I${.CURDIR} -LDADD+= -latf-c++ -latf-c -DPADD+= ${LIBATF_CXX} ${LIBATF_C} - -WARNS?= 2 - -.include Index: vendor/NetBSD/atf/dist/usr.bin/Makefile =================================================================== --- vendor/NetBSD/atf/dist/usr.bin/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/usr.bin/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.3 2010/10/20 09:20:12 jmmv Exp $ - -SUBDIR= atf-config atf-report atf-run atf-sh atf-version - -.include Index: vendor/NetBSD/atf/dist/usr.bin/atf-config/Makefile =================================================================== --- vendor/NetBSD/atf/dist/usr.bin/atf-config/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/usr.bin/atf-config/Makefile (nonexistent) @@ -1,21 +0,0 @@ -# $NetBSD: Makefile,v 1.5 2011/02/20 20:18:57 jmmv Exp $ - -.include - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-config - -BINDIR= /usr/bin -PROG_CXX= atf-config -SRCS= atf-config.cpp -MAN= atf-config.1 - -LDADD+= -latf-c++ -latf-c -DPADD+= ${LIBATF_CXX} ${LIBATF_C} - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${SRCDIR} - -WARNS?= 2 - -.include Index: vendor/NetBSD/atf/dist/usr.bin/atf-sh/Makefile =================================================================== --- vendor/NetBSD/atf/dist/usr.bin/atf-sh/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/usr.bin/atf-sh/Makefile (nonexistent) @@ -1,27 +0,0 @@ -# $NetBSD: Makefile,v 1.4 2011/02/20 20:18:57 jmmv Exp $ - -.include - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-sh - -BINDIR= /usr/bin -PROG_CXX= atf-sh -SRCS= atf-sh.cpp -MAN= atf-sh.1 atf-sh-api.3 - -LDADD+= -latf-c++ -latf-c -DPADD+= ${LIBATF_CXX} ${LIBATF_C} - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${SRCDIR} - -WARNS?= 2 - -.if ${MKSHARE} != "no" -FILESDIR= /usr/share/atf -FILESMODE= 444 -FILES+= libatf-sh.subr -.endif - -.include Index: vendor/NetBSD/atf/dist/share/xml/atf/Makefile =================================================================== --- vendor/NetBSD/atf/dist/share/xml/atf/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/share/xml/atf/Makefile (nonexistent) @@ -1,14 +0,0 @@ -# $NetBSD: Makefile,v 1.3 2010/06/04 08:33:41 jmmv Exp $ - -.include - -.if ${MKSHARE} != "no" -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-report - -FILESDIR= /usr/share/xml/atf -FILESMODE= 444 -FILES= tests-results.dtd -.endif - -.include Index: vendor/NetBSD/atf/dist/share/xml/Makefile =================================================================== --- vendor/NetBSD/atf/dist/share/xml/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/share/xml/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.1 2009/01/19 07:13:05 jmmv Exp $ - -SUBDIR= atf - -.include Index: vendor/NetBSD/atf/dist/share/doc/atf/Makefile =================================================================== --- vendor/NetBSD/atf/dist/share/doc/atf/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/share/doc/atf/Makefile (nonexistent) @@ -1,28 +0,0 @@ -# $NetBSD: Makefile,v 1.4 2010/11/02 14:41:32 njoly Exp $ - -.include - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR} -.PATH: ${SRCDIR}/atf-c -.PATH: ${SRCDIR}/atf-c++ -.PATH: ${SRCDIR}/atf-sh -.PATH: ${SRCDIR}/doc - -.if ${MKDOC} != "no" -FILESDIR= /usr/share/doc/atf -FILES= AUTHORS COPYING NEWS README -.endif - -MAN= atf.7 atf-formats.5 atf-test-case.4 atf-test-program.1 - -CLEANFILES+= atf.7 atf.7.tmp -atf.7: atf.7.in - ${TOOL_SED} \ - -e 's,__DOCDIR__,/usr/share/doc/atf,g' \ - -e 's,__TESTSDIR__,/usr/tests,g' \ - <${SRCDIR}/doc/atf.7.in >atf.7.tmp - mv atf.7.tmp atf.7 - -.include -.include Index: vendor/NetBSD/atf/dist/share/doc/Makefile =================================================================== --- vendor/NetBSD/atf/dist/share/doc/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/share/doc/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.1 2009/01/19 07:13:04 jmmv Exp $ - -SUBDIR= atf - -.include Index: vendor/NetBSD/atf/dist/share/examples/atf/Makefile =================================================================== --- vendor/NetBSD/atf/dist/share/examples/atf/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/share/examples/atf/Makefile (nonexistent) @@ -1,16 +0,0 @@ -# $NetBSD: Makefile,v 1.3 2010/06/04 08:33:41 jmmv Exp $ - -.include - -.if ${MKSHARE} != "no" -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-report -.PATH: ${SRCDIR}/atf-run/sample - -FILESDIR= /usr/share/examples/atf -FILESMODE= 444 -FILES= atf-run.hooks \ - tests-results.css -.endif - -.include Index: vendor/NetBSD/atf/dist/share/examples/Makefile =================================================================== --- vendor/NetBSD/atf/dist/share/examples/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/share/examples/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.1 2009/01/19 07:13:04 jmmv Exp $ - -SUBDIR= atf - -.include Index: vendor/NetBSD/atf/dist/share/xsl/atf/Makefile =================================================================== --- vendor/NetBSD/atf/dist/share/xsl/atf/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/share/xsl/atf/Makefile (nonexistent) @@ -1,14 +0,0 @@ -# $NetBSD: Makefile,v 1.3 2010/06/04 08:33:41 jmmv Exp $ - -.include - -.if ${MKSHARE} != "no" -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-report - -FILESDIR= /usr/share/xsl/atf -FILESMODE= 444 -FILES= tests-results.xsl -.endif - -.include Index: vendor/NetBSD/atf/dist/share/xsl/Makefile =================================================================== --- vendor/NetBSD/atf/dist/share/xsl/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/share/xsl/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.1 2009/01/19 07:13:05 jmmv Exp $ - -SUBDIR= atf - -.include Index: vendor/NetBSD/atf/dist/share/Makefile =================================================================== --- vendor/NetBSD/atf/dist/share/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/share/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.2 2010/06/04 08:33:41 jmmv Exp $ - -SUBDIR= doc examples xml xsl - -.include Index: vendor/NetBSD/atf/dist/etc/atf/common.conf =================================================================== --- vendor/NetBSD/atf/dist/etc/atf/common.conf (revision 240137) +++ vendor/NetBSD/atf/dist/etc/atf/common.conf (nonexistent) @@ -1,11 +0,0 @@ -Content-Type: application/X-atf-config; version="1" - -# -# Sample configuration file for properties affecting all test suites. -# - -# When running the test suite as root, some tests require to switch to -# an unprivileged user to perform extra checks. Set this variable to -# the user you want to use in those cases. If not set, those tests will -# be skipped. -unprivileged-user = "_atf" Index: vendor/NetBSD/atf/dist/etc/atf/NetBSD.conf =================================================================== --- vendor/NetBSD/atf/dist/etc/atf/NetBSD.conf (revision 240137) +++ vendor/NetBSD/atf/dist/etc/atf/NetBSD.conf (nonexistent) @@ -1,11 +0,0 @@ -Content-Type: application/X-atf-config; version="1" - -# -# Configuration file for the NetBSD test suite. -# -# See atf-formats(5) for details on the syntax of this file and tests(7) for -# details on the NetBSD test suite. -# - -#variable1 = value1 -#variable2 = value2 Index: vendor/NetBSD/atf/dist/etc/atf/Makefile =================================================================== --- vendor/NetBSD/atf/dist/etc/atf/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/etc/atf/Makefile (nonexistent) @@ -1,13 +0,0 @@ -# $NetBSD: Makefile,v 1.3 2010/11/07 17:46:45 jmmv Exp $ - -.include - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-run/sample - -CONFIGFILES= NetBSD.conf atf-run.hooks common.conf -FILESDIR= /etc/atf -FILESMODE= 644 - -.include # For clean and cleandir -.include Index: vendor/NetBSD/atf/dist/etc/Makefile =================================================================== --- vendor/NetBSD/atf/dist/etc/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/etc/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.1 2009/01/19 07:13:03 jmmv Exp $ - -SUBDIR= atf - -.include Index: vendor/NetBSD/atf/dist/dist/Kyuafile =================================================================== --- vendor/NetBSD/atf/dist/dist/Kyuafile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/Kyuafile (nonexistent) @@ -1,11 +0,0 @@ -syntax("kyuafile", 1) - -test_suite("atf") - -include("atf-c/Kyuafile") -include("atf-c++/Kyuafile") -include("atf-sh/Kyuafile") -include("test-programs/Kyuafile") -include("atf-config/Kyuafile") -include("atf-report/Kyuafile") -include("atf-run/Kyuafile") Index: vendor/NetBSD/atf/dist/dist/README =================================================================== --- vendor/NetBSD/atf/dist/dist/README (revision 240137) +++ vendor/NetBSD/atf/dist/dist/README (nonexistent) @@ -1,40 +0,0 @@ -Introductory information Automated Testing Framework -=========================================================================== - - -Introduction -************ - -The Automated Testing Framework (ATF) is a collection of libraries and -utilities designed to ease unattended application testing in the hands of -developers and end users of a specific piece of software. - -As regards developers, ATF provides the necessary means to easily create -test suites composed of multiple test programs, which in turn are a -collection of test cases. It also attempts to simplify the debugging of -problems when these test cases detect an error by providing as much -information as possible about the failure. - -As regards users, it simplifies the process of running the test suites and, -in special, encourages end users to run them often: they do not need to -have source trees around nor any other development tools installed to be -able to certify that a given piece of software works on their machine as -advertised. - - -Other documents -*************** - -* AUTHORS: List of authors and contributors for this project. - -* COPYING: License information. - -* INSTALL: Compilation and installation instructions. These is not the - standard document shipped with many packages, so be sure to read it for - things that are specific to ATF's build. - -* NEWS: List of major changes between formal, published releases. - - -=========================================================================== -vim: filetype=text:textwidth=75:expandtab:shiftwidth=2:softtabstop=2 Index: vendor/NetBSD/atf/dist/dist/atf-report/integration_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/integration_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/integration_test.sh (nonexistent) @@ -1,425 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -create_helpers() -{ - mkdir dir1 - cp $(atf_get_srcdir)/pass_helper dir1/tp1 - cp $(atf_get_srcdir)/fail_helper dir1/tp2 - cp $(atf_get_srcdir)/pass_helper tp3 - cp $(atf_get_srcdir)/fail_helper tp4 - - cat >tp5 <Atffile <dir1/Atffile <etc/atf-run.hooks <tps.out 2>/dev/null - rm -rf etc -} - -atf_test_case default -default_head() -{ - atf_set "descr" "Checks that the default output uses the ticker" \ - "format" -} -default_body() -{ - create_helpers - run_helpers - - # Check that the default output uses the ticker format. - atf_check -s eq:0 -o match:'test cases' -o match:'Failed test cases' \ - -o match:'Summary for' -e empty -x 'atf-report Atffile <expout <expout <expout <>'; expected \`:' -EOF -# NO_CHECK_STYLE_END - - atf_check -s eq:0 -o file:expout -e empty -x 'atf-report -o csv:- expout <>'; expected \`:'' - -Failed (bogus) test programs: - tp5 - -Failed test cases: - dir1/tp2:main, tp4:main - -Summary for 5 test programs: - 2 passed test cases. - 2 failed test cases. - 0 expected failed test cases. - 0 skipped test cases. -EOF - - atf_check -s eq:0 -o file:expout -e empty -x 'atf-report -o ticker:- expout < - - - -A value - - - - - - - -This always fails - - - - - - - - - -This always fails - - - -Invalid format for test case list: 1: Unexpected token \`<<NEWLINE>>'; expected \`:' - -Another value - -EOF -# NO_CHECK_STYLE_END - - atf_check -s eq:0 -o file:expout -e empty -x 'atf-report -o xml:- Atffile <expout < - - - -A value - - ---- a 2007-11-04 14:00:41.000000000 +0100 -+++ b 2007-11-04 14:00:48.000000000 +0100 -@@ -1,7 +1,7 @@ - This test is meant to simulate a diff. - Blank space at beginning of context lines must be preserved. - --First original line. --Second original line. -+First modified line. -+Second modified line. - - EOF - - - -Another value - -EOF -# NO_CHECK_STYLE_END - - run_helpers - atf_check -s eq:0 -o file:expout -e empty -x 'atf-report -o xml:- - -#include "atf-c++/macros.hpp" - -// ------------------------------------------------------------------------ -// Helper tests for "t_integration". -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(diff); -ATF_TEST_CASE_HEAD(diff) -{ - set_md_var("descr", "Helper test case for the t_integration program"); -} -ATF_TEST_CASE_BODY(diff) -{ - std::cout << "--- a 2007-11-04 14:00:41.000000000 +0100\n"; - std::cout << "+++ b 2007-11-04 14:00:48.000000000 +0100\n"; - std::cout << "@@ -1,7 +1,7 @@\n"; - std::cout << " This test is meant to simulate a diff.\n"; - std::cout << " Blank space at beginning of context lines must be " - "preserved.\n"; - std::cout << " \n"; - std::cout << "-First original line.\n"; - std::cout << "-Second original line.\n"; - std::cout << "+First modified line.\n"; - std::cout << "+Second modified line.\n"; - std::cout << " \n"; - std::cout << " EOF\n"; -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add helper tests for t_integration. - ATF_ADD_TEST_CASE(tcs, diff); -} Index: vendor/NetBSD/atf/dist/dist/atf-report/pass_helper.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/pass_helper.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/pass_helper.cpp (nonexistent) @@ -1,44 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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 "atf-c++/macros.hpp" - -ATF_TEST_CASE(main); -ATF_TEST_CASE_HEAD(main) -{ - set_md_var("descr", "Helper test case that always passes"); -} -ATF_TEST_CASE_BODY(main) -{ -} - -ATF_INIT_TEST_CASES(tcs) -{ - ATF_ADD_TEST_CASE(tcs, main); -} Index: vendor/NetBSD/atf/dist/dist/atf-report/atf-report.1 =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/atf-report.1 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/atf-report.1 (nonexistent) @@ -1,166 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd October 29, 2007 -.Dt ATF-REPORT 1 -.Os -.Sh NAME -.Nm atf-report -.Nd transforms the output of atf-run to different formats -.Sh SYNOPSIS -.Nm -.Op Fl o Ar fmt1:path1 Op .. Fl o Ar fmtN:pathN -.Nm -.Fl h -.Sh DESCRIPTION -.Nm -reads the output of -.Nm atf-run -and transforms it to different formats. -Some of these are user-friendly and others are machine-parseable, which -opens a wide range of possibilities to analyze the results of a test -suite's execution. -See -.Sx Output formats -below for more details on which these formats are. -.Pp -In the first synopsis form, -.Nm -reads the output of -.Nm atf-run -through its standard input and, if no -.Fl o -options are given, prints a user-friendly report on its standard -output using the -.Sq ticker -format. -If -.Fl o -options are provided (more than one are allowed), they specify the complete -list of reports to generate. -They are all generated simultaneously, and for obvious reasons, two reports -cannot be written to the same file. -Note that the default output is suppressed when -.Fl o -is provided. -.Pp -In the second synopsis form, -.Nm -will print information about all supported options and their purpose. -.Pp -The following options are available: -.Bl -tag -width XoXfmtXpathXX -.It Fl h -Shows a short summary of all available options and their purpose. -.It Fl o Ar fmt:path -Adds a new output format. -.Ar fmt -is one of the formats described later on in -.Sx Output formats . -.Ar path -specifies where the report will be written to. -Depending on the chosen format, this may refer to a single file or to -a directory. -For those formats that write to a single file, specifying a -.Sq - -as the path will redirect the report to the standard output. -.El -.Ss Output formats -The following output formats are allowed: -.Bl -tag -width tickerXX -.It csv -A machine-parseable Comma-Separated Values (CSV) file. -This file contains the results for all test cases and test programs. -Test cases are logged using the following syntax: -.Bd -literal -offset indent -tc, test-program, test-case, result[, reason] -.Ed -.Pp -The -.Sq result -field for test cases is always one of -.Sq passed , -.Sq skipped -or -.Sq failed . -The last two are always followed by a reason. -.Pp -Test programs are logged with the following syntax: -.Bd -literal -offset indent -tp, test-program, result[, reason] -.Ed -.Pp -In this case, the -.Sq result -can be one of: -.Sq passed , -which denotes test programs that ran without any failure; -.Sq failed , -which refers to test programs in which one or more test cases failed; -or -.Sq bogus , -which mentions those test programs that failed to execute by some reason. -The reason file is only available in the last case. -.Pp -You should not rely on the order of the entries in the resulting output. -.It ticker -A user-friendly report that shows the progress of the test suite's -execution as it operates. -This type of report should always be redirected to a virtual terminal, -not a file, as it may use control sequences that will make the output -unreadable in regular files. -.It xml -A report contained in a single XML file. -Ideal for later processing with -.Xr xsltproc 1 -to generate nice HTML reports. -.El -.Sh EXAMPLES -The most simple way of running a test suite is to pipe the output of -.Nm atf-run -through -.Nm -without any additional flags. -This will use the default output format, which is suitable to most users: -.Bd -literal -offset indent -atf-run | atf-report -.Ed -.Pp -In some situations, it may be interesting to get a machine-parseable file -aside from the standard report. -This can be done as follows: -.Bd -literal -offset indent -atf-run | atf-report -o csv:testsuite.csv -o ticker:- -.Ed -.Pp -Or if the standard report is not desired, thus achieving completely silent -operation: -atf-run | atf-report -o csv:testsuite.csv -.Sh SEE ALSO -.Xr atf-run 1 , -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/atf-report/atf-report.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/atf-report.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/atf-report.cpp (nonexistent) @@ -1,671 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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 -#include -#include -#include -#include -#include - -#include "atf-c++/detail/application.hpp" -#include "atf-c++/detail/fs.hpp" -#include "atf-c++/detail/sanity.hpp" -#include "atf-c++/detail/text.hpp" -#include "atf-c++/detail/ui.hpp" - -#include "reader.hpp" - -typedef std::auto_ptr< std::ostream > ostream_ptr; - -ostream_ptr -open_outfile(const atf::fs::path& path) -{ - ostream_ptr osp; - if (path.str() == "-") - osp = ostream_ptr(new std::ofstream("/dev/stdout")); - else - osp = ostream_ptr(new std::ofstream(path.c_str())); - if (!(*osp)) - throw std::runtime_error("Could not create file " + path.str()); - return osp; -} - -// ------------------------------------------------------------------------ -// The "writer" interface. -// ------------------------------------------------------------------------ - -//! -//! \brief A base class that defines an output format. -//! -//! The writer base class defines a generic interface to output formats. -//! This is meant to be subclassed, and each subclass can redefine any -//! method to format the information as it wishes. -//! -//! This class is not tied to a output stream nor a file because, depending -//! on the output format, we will want to write to a single file or to -//! multiple ones. -//! -class writer { -public: - writer(void) {} - virtual ~writer(void) {} - - virtual void write_info(const std::string&, const std::string&) {} - virtual void write_ntps(size_t) {} - virtual void write_tp_start(const std::string&, size_t) {} - virtual void write_tp_end(const std::string&) {} - virtual void write_tc_start(const std::string&) {} - virtual void write_tc_stdout_line(const std::string&) {} - virtual void write_tc_stderr_line(const std::string&) {} - virtual void write_tc_end(const std::string&, const std::string&) {} - virtual void write_eof(void) {} -}; - -// ------------------------------------------------------------------------ -// The "csv_writer" class. -// ------------------------------------------------------------------------ - -//! -//! \brief A very simple plain-text output format. -//! -//! The csv_writer class implements a very simple plain-text output -//! format that summarizes the results of each executed test case. The -//! results are meant to be easily parseable by third-party tools, hence -//! they are formatted as a CSV file. -//! -class csv_writer : public writer { - ostream_ptr m_os; - bool m_failed; - - std::string m_tpname; - std::string m_tcname; - -public: - csv_writer(const atf::fs::path& p) : - m_os(open_outfile(p)) - { - } - - virtual - void - write_tp_start(const std::string& name, size_t ntcs) - { - m_tpname = name; - m_failed = false; - } - - virtual - void - write_tp_end(const std::string& reason) - { - if (!reason.empty()) - (*m_os) << "tp, " << m_tpname << ", bogus, " << reason << "\n"; - else if (m_failed) - (*m_os) << "tp, " << m_tpname << ", failed\n"; - else - (*m_os) << "tp, " << m_tpname << ", passed\n"; - } - - virtual - void - write_tc_start(const std::string& name) - { - m_tcname = name; - } - - virtual - void - write_tc_end(const std::string& state, const std::string& reason) - { - std::string str = "tc, " + m_tpname + ", " + m_tcname + ", " + state; - if (!reason.empty()) - str += ", " + reason; - (*m_os) << str << "\n"; - - if (state == "failed") - m_failed = true; - } -}; - -// ------------------------------------------------------------------------ -// The "ticker_writer" class. -// ------------------------------------------------------------------------ - -//! -//! \brief A console-friendly output format. -//! -//! The ticker_writer class implements a formatter that is user-friendly -//! in the sense that it shows the execution of test cases in an easy to -//! read format. It is not meant to be parseable and its format can -//! freely change across releases. -//! -class ticker_writer : public writer { - ostream_ptr m_os; - - size_t m_curtp, m_ntps; - size_t m_tcs_passed, m_tcs_failed, m_tcs_skipped, m_tcs_expected_failures; - std::string m_tcname, m_tpname; - std::vector< std::string > m_failed_tcs; - std::map< std::string, std::string > m_expected_failures_tcs; - std::vector< std::string > m_failed_tps; - - void - write_info(const std::string& what, const std::string& val) - { - if (what == "tests.root") { - (*m_os) << "Tests root: " << val << "\n\n"; - } - } - - void - write_ntps(size_t ntps) - { - m_curtp = 1; - m_tcs_passed = 0; - m_tcs_failed = 0; - m_tcs_skipped = 0; - m_tcs_expected_failures = 0; - m_ntps = ntps; - } - - void - write_tp_start(const std::string& tp, size_t ntcs) - { - using atf::text::to_string; - using atf::ui::format_text; - - m_tpname = tp; - - (*m_os) << format_text(tp + " (" + to_string(m_curtp) + - "/" + to_string(m_ntps) + "): " + - to_string(ntcs) + " test cases") - << "\n"; - (*m_os).flush(); - } - - void - write_tp_end(const std::string& reason) - { - using atf::ui::format_text_with_tag; - - m_curtp++; - - if (!reason.empty()) { - (*m_os) << format_text_with_tag("BOGUS TEST PROGRAM: Cannot " - "trust its results because " - "of `" + reason + "'", - m_tpname + ": ", false) - << "\n"; - m_failed_tps.push_back(m_tpname); - } - (*m_os) << "\n"; - (*m_os).flush(); - - m_tpname.clear(); - } - - void - write_tc_start(const std::string& tcname) - { - m_tcname = tcname; - - (*m_os) << " " + tcname + ": "; - (*m_os).flush(); - } - - void - write_tc_end(const std::string& state, const std::string& reason) - { - std::string str; - - if (state == "expected_death" || state == "expected_exit" || - state == "expected_failure" || state == "expected_signal" || - state == "expected_timeout") { - str = "Expected failure: " + reason; - m_tcs_expected_failures++; - m_expected_failures_tcs[m_tpname + ":" + m_tcname] = reason; - } else if (state == "failed") { - str = "Failed: " + reason; - m_tcs_failed++; - m_failed_tcs.push_back(m_tpname + ":" + m_tcname); - } else if (state == "passed") { - str = "Passed."; - m_tcs_passed++; - } else if (state == "skipped") { - str = "Skipped: " + reason; - m_tcs_skipped++; - } else - UNREACHABLE; - - // XXX Wrap text. format_text_with_tag does not currently allow - // to specify the current column, which is needed because we have - // already printed the tc's name. - (*m_os) << str << "\n"; - - m_tcname = ""; - } - - static void - write_expected_failures(const std::map< std::string, std::string >& xfails, - std::ostream& os) - { - using atf::ui::format_text; - using atf::ui::format_text_with_tag; - - os << format_text("Test cases for known bugs:") << "\n"; - - for (std::map< std::string, std::string >::const_iterator iter = - xfails.begin(); iter != xfails.end(); iter++) { - const std::string& name = (*iter).first; - const std::string& reason = (*iter).second; - - os << format_text_with_tag(reason, " " + name + ": ", false) - << "\n"; - } - } - - void - write_eof(void) - { - using atf::text::join; - using atf::text::to_string; - using atf::ui::format_text; - using atf::ui::format_text_with_tag; - - if (!m_failed_tps.empty()) { - (*m_os) << format_text("Failed (bogus) test programs:") - << "\n"; - (*m_os) << format_text_with_tag(join(m_failed_tps, ", "), - " ", false) << "\n\n"; - } - - if (!m_expected_failures_tcs.empty()) { - write_expected_failures(m_expected_failures_tcs, *m_os); - (*m_os) << "\n"; - } - - if (!m_failed_tcs.empty()) { - (*m_os) << format_text("Failed test cases:") << "\n"; - (*m_os) << format_text_with_tag(join(m_failed_tcs, ", "), - " ", false) << "\n\n"; - } - - (*m_os) << format_text("Summary for " + to_string(m_ntps) + - " test programs:") << "\n"; - (*m_os) << format_text_with_tag(to_string(m_tcs_passed) + - " passed test cases.", - " ", false) << "\n"; - (*m_os) << format_text_with_tag(to_string(m_tcs_failed) + - " failed test cases.", - " ", false) << "\n"; - (*m_os) << format_text_with_tag(to_string(m_tcs_expected_failures) + - " expected failed test cases.", - " ", false) << "\n"; - (*m_os) << format_text_with_tag(to_string(m_tcs_skipped) + - " skipped test cases.", - " ", false) << "\n"; - } - -public: - ticker_writer(const atf::fs::path& p) : - m_os(open_outfile(p)) - { - } -}; - -// ------------------------------------------------------------------------ -// The "xml" class. -// ------------------------------------------------------------------------ - -//! -//! \brief A single-file XML output format. -//! -//! The xml_writer class implements a formatter that prints the results -//! of test cases in an XML format easily parseable later on by other -//! utilities. -//! -class xml_writer : public writer { - ostream_ptr m_os; - - size_t m_curtp, m_ntps; - std::string m_tcname, m_tpname; - - static - std::string - attrval(const std::string& str) - { - return str; - } - - static - std::string - elemval(const std::string& str) - { - std::string ostr; - for (std::string::const_iterator iter = str.begin(); - iter != str.end(); iter++) { - switch (*iter) { - case '&': ostr += "&"; break; - case '<': ostr += "<"; break; - case '>': ostr += ">"; break; - default: ostr += *iter; - } - } - return ostr; - } - - void - write_info(const std::string& what, const std::string& val) - { - (*m_os) << "" << val << "\n"; - } - - void - write_tp_start(const std::string& tp, size_t ntcs) - { - (*m_os) << "\n"; - } - - void - write_tp_end(const std::string& reason) - { - if (!reason.empty()) - (*m_os) << "" << elemval(reason) << "\n"; - (*m_os) << "\n"; - } - - void - write_tc_start(const std::string& tcname) - { - (*m_os) << "\n"; - } - - void - write_tc_stdout_line(const std::string& line) - { - (*m_os) << "" << elemval(line) << "\n"; - } - - void - write_tc_stderr_line(const std::string& line) - { - (*m_os) << "" << elemval(line) << "\n"; - } - - void - write_tc_end(const std::string& state, const std::string& reason) - { - std::string str; - - if (state == "expected_death" || state == "expected_exit" || - state == "expected_failure" || state == "expected_signal" || - state == "expected_timeout") { - (*m_os) << "<" << state << ">" << elemval(reason) - << "\n"; - } else if (state == "passed") { - (*m_os) << "\n"; - } else if (state == "failed") { - (*m_os) << "" << elemval(reason) << "\n"; - } else if (state == "skipped") { - (*m_os) << "" << elemval(reason) << "\n"; - } else - UNREACHABLE; - (*m_os) << "\n"; - } - - void - write_eof(void) - { - (*m_os) << "\n"; - } - -public: - xml_writer(const atf::fs::path& p) : - m_os(open_outfile(p)) - { - (*m_os) << "\n" - << "\n\n" - "\n"; - } -}; - -// ------------------------------------------------------------------------ -// The "converter" class. -// ------------------------------------------------------------------------ - -//! -//! \brief A reader that redirects events to multiple writers. -//! -//! The converter class implements an atf_tps_reader that, for each event -//! raised by the parser, redirects it to multiple writers so that they -//! can reformat it according to their output rules. -//! -class converter : public atf::atf_report::atf_tps_reader { - typedef std::vector< writer* > outs_vector; - outs_vector m_outs; - - void - got_info(const std::string& what, const std::string& val) - { - for (outs_vector::iterator iter = m_outs.begin(); - iter != m_outs.end(); iter++) - (*iter)->write_info(what, val); - } - - void - got_ntps(size_t ntps) - { - for (outs_vector::iterator iter = m_outs.begin(); - iter != m_outs.end(); iter++) - (*iter)->write_ntps(ntps); - } - - void - got_tp_start(const std::string& tp, size_t ntcs) - { - for (outs_vector::iterator iter = m_outs.begin(); - iter != m_outs.end(); iter++) - (*iter)->write_tp_start(tp, ntcs); - } - - void - got_tp_end(const std::string& reason) - { - for (outs_vector::iterator iter = m_outs.begin(); - iter != m_outs.end(); iter++) - (*iter)->write_tp_end(reason); - } - - void - got_tc_start(const std::string& tcname) - { - for (outs_vector::iterator iter = m_outs.begin(); - iter != m_outs.end(); iter++) - (*iter)->write_tc_start(tcname); - } - - void - got_tc_stdout_line(const std::string& line) - { - for (outs_vector::iterator iter = m_outs.begin(); - iter != m_outs.end(); iter++) - (*iter)->write_tc_stdout_line(line); - } - - void - got_tc_stderr_line(const std::string& line) - { - for (outs_vector::iterator iter = m_outs.begin(); - iter != m_outs.end(); iter++) - (*iter)->write_tc_stderr_line(line); - } - - void - got_tc_end(const std::string& state, const std::string& reason) - { - for (outs_vector::iterator iter = m_outs.begin(); - iter != m_outs.end(); iter++) - (*iter)->write_tc_end(state, reason); - } - - void - got_eof(void) - { - for (outs_vector::iterator iter = m_outs.begin(); - iter != m_outs.end(); iter++) - (*iter)->write_eof(); - } - -public: - converter(std::istream& is) : - atf::atf_report::atf_tps_reader(is) - { - } - - ~converter(void) - { - for (outs_vector::iterator iter = m_outs.begin(); - iter != m_outs.end(); iter++) - delete *iter; - } - - void - add_output(const std::string& fmt, const atf::fs::path& p) - { - if (fmt == "csv") { - m_outs.push_back(new csv_writer(p)); - } else if (fmt == "ticker") { - m_outs.push_back(new ticker_writer(p)); - } else if (fmt == "xml") { - m_outs.push_back(new xml_writer(p)); - } else - throw std::runtime_error("Unknown format `" + fmt + "'"); - } -}; - -// ------------------------------------------------------------------------ -// The "atf_report" class. -// ------------------------------------------------------------------------ - -class atf_report : public atf::application::app { - static const char* m_description; - - typedef std::pair< std::string, atf::fs::path > fmt_path_pair; - std::vector< fmt_path_pair > m_oflags; - - void process_option(int, const char*); - options_set specific_options(void) const; - -public: - atf_report(void); - - int main(void); -}; - -const char* atf_report::m_description = - "atf-report is a tool that parses the output of atf-run and " - "generates user-friendly reports in multiple different formats."; - -atf_report::atf_report(void) : - app(m_description, "atf-report(1)", "atf(7)") -{ -} - -void -atf_report::process_option(int ch, const char* arg) -{ - switch (ch) { - case 'o': - { - std::string str(arg); - std::string::size_type pos = str.find(':'); - if (pos == std::string::npos) - throw std::runtime_error("Syntax error in -o option"); - else { - std::string fmt = str.substr(0, pos); - atf::fs::path path = atf::fs::path(str.substr(pos + 1)); - m_oflags.push_back(fmt_path_pair(fmt, path)); - } - } - break; - - default: - UNREACHABLE; - } -} - -atf_report::options_set -atf_report::specific_options(void) - const -{ - using atf::application::option; - options_set opts; - opts.insert(option('o', "fmt:path", "Adds a new output file; multiple " - "ones can be specified, and a - " - "path means stdout")); - return opts; -} - -int -atf_report::main(void) -{ - if (m_oflags.empty()) - m_oflags.push_back(fmt_path_pair("ticker", atf::fs::path("-"))); - - // Look for path duplicates. - std::set< atf::fs::path > paths; - for (std::vector< fmt_path_pair >::const_iterator iter = m_oflags.begin(); - iter != m_oflags.end(); iter++) { - atf::fs::path p = (*iter).second; - if (p == atf::fs::path("/dev/stdout")) - p = atf::fs::path("-"); - if (paths.find(p) != paths.end()) - throw std::runtime_error("The file `" + p.str() + "' was " - "specified more than once"); - paths.insert((*iter).second); - } - - // Generate the output files. - converter cnv(std::cin); - for (std::vector< fmt_path_pair >::const_iterator iter = m_oflags.begin(); - iter != m_oflags.end(); iter++) - cnv.add_output((*iter).first, (*iter).second); - cnv.read(); - - return EXIT_SUCCESS; -} - -int -main(int argc, char* const* argv) -{ - return atf_report().run(argc, argv); -} Index: vendor/NetBSD/atf/dist/dist/atf-report/fail_helper.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/fail_helper.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/fail_helper.cpp (nonexistent) @@ -1,45 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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 "atf-c++/macros.hpp" - -ATF_TEST_CASE(main); -ATF_TEST_CASE_HEAD(main) -{ - set_md_var("descr", "Helper test case that always fails"); -} -ATF_TEST_CASE_BODY(main) -{ - fail("This always fails"); -} - -ATF_INIT_TEST_CASES(tcs) -{ - ATF_ADD_TEST_CASE(tcs, main); -} Index: vendor/NetBSD/atf/dist/dist/atf-report/reader_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/reader_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/reader_test.cpp (nonexistent) @@ -1,943 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2010 The NetBSD Foundation, Inc. -// 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 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 -#include -#include -#include -#include - -#include "atf-c++/macros.hpp" - -#include "atf-c++/detail/parser.hpp" -#include "atf-c++/detail/sanity.hpp" -#include "atf-c++/detail/test_helpers.hpp" -#include "atf-c++/detail/text.hpp" - -#include "reader.hpp" - -namespace impl = atf::atf_report; - -class tps_reader : protected impl::atf_tps_reader { - void - got_info(const std::string& what, const std::string& val) - { - m_calls.push_back("got_info(" + what + ", " + val + ")"); - } - - void - got_ntps(size_t ntps) - { - m_calls.push_back("got_ntps(" + atf::text::to_string(ntps) + ")"); - } - - void - got_tp_start(const std::string& tpname, size_t ntcs) - { - m_calls.push_back("got_tp_start(" + tpname + ", " + - atf::text::to_string(ntcs) + ")"); - } - - void - got_tp_end(const std::string& reason) - { - m_calls.push_back("got_tp_end(" + reason + ")"); - } - - void - got_tc_start(const std::string& tcname) - { - m_calls.push_back("got_tc_start(" + tcname + ")"); - } - - void - got_tc_end(const std::string& state, const std::string& reason) - { - const std::string r = state + (reason.empty() ? "" : ", " + reason); - m_calls.push_back("got_tc_end(" + r + ")"); - } - - void - got_tc_stdout_line(const std::string& line) - { - m_calls.push_back("got_tc_stdout_line(" + line + ")"); - } - - void - got_tc_stderr_line(const std::string& line) - { - m_calls.push_back("got_tc_stderr_line(" + line + ")"); - } - - void - got_eof(void) - { - m_calls.push_back("got_eof()"); - } - -public: - tps_reader(std::istream& is) : - impl::atf_tps_reader(is) - { - } - - void - read(void) - { - atf_tps_reader::read(); - } - - std::vector< std::string > m_calls; -}; - -ATF_TEST_CASE_WITHOUT_HEAD(tps_1); -ATF_TEST_CASE_BODY(tps_1) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 0\n" - ; - - const char* exp_calls[] = { - "got_ntps(0)", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_2); -ATF_TEST_CASE_BODY(tps_2) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 2\n" - "tp-start: first-prog, 0\n" - "tp-end: first-prog\n" - "tp-start: second-prog, 0\n" - "tp-end: second-prog, This program failed\n" - ; - - const char* exp_calls[] = { - "got_ntps(2)", - "got_tp_start(first-prog, 0)", - "got_tp_end()", - "got_tp_start(second-prog, 0)", - "got_tp_end(This program failed)", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_3); -ATF_TEST_CASE_BODY(tps_3) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 2\n" - "tp-start: first-prog, 3\n" - "tc-start: first-test\n" - "tc-end: first-test, passed\n" - "tc-start: second-test\n" - "tc-end: second-test, skipped, Testing skipped reason\n" - "tc-start: third-test\n" - "tc-end: third-test, failed, Testing failed reason\n" - "tp-end: first-prog\n" - "tp-start: second-prog, 3\n" - "tc-start: first-test\n" - "tc-so:first stdout line for 1st test\n" - "tc-se:first stderr line for 1st test\n" - "tc-so:second stdout line for 1st test\n" - "tc-se:second stderr line for 1st test\n" - "tc-end: first-test, passed\n" - "tc-start: second-test\n" - "tc-so:first stdout line for 2nd test\n" - "tc-se:first stderr line for 2nd test\n" - "tc-so:second stdout line for 2nd test\n" - "tc-se:second stderr line for 2nd test\n" - "tc-end: second-test, skipped, Testing skipped reason\n" - "tc-start: third-test\n" - "tc-so:first stdout line for 3rd test\n" - "tc-se:first stderr line for 3rd test\n" - "tc-so:second stdout line for 3rd test\n" - "tc-se:second stderr line for 3rd test\n" - "tc-end: third-test, failed, Testing failed reason\n" - "tp-end: second-prog, This program failed\n" - ; - - const char* exp_calls[] = { - "got_ntps(2)", - "got_tp_start(first-prog, 3)", - "got_tc_start(first-test)", - "got_tc_end(passed)", - "got_tc_start(second-test)", - "got_tc_end(skipped, Testing skipped reason)", - "got_tc_start(third-test)", - "got_tc_end(failed, Testing failed reason)", - "got_tp_end()", - "got_tp_start(second-prog, 3)", - "got_tc_start(first-test)", - "got_tc_stdout_line(first stdout line for 1st test)", - "got_tc_stderr_line(first stderr line for 1st test)", - "got_tc_stdout_line(second stdout line for 1st test)", - "got_tc_stderr_line(second stderr line for 1st test)", - "got_tc_end(passed)", - "got_tc_start(second-test)", - "got_tc_stdout_line(first stdout line for 2nd test)", - "got_tc_stderr_line(first stderr line for 2nd test)", - "got_tc_stdout_line(second stdout line for 2nd test)", - "got_tc_stderr_line(second stderr line for 2nd test)", - "got_tc_end(skipped, Testing skipped reason)", - "got_tc_start(third-test)", - "got_tc_stdout_line(first stdout line for 3rd test)", - "got_tc_stderr_line(first stderr line for 3rd test)", - "got_tc_stdout_line(second stdout line for 3rd test)", - "got_tc_stderr_line(second stderr line for 3rd test)", - "got_tc_end(failed, Testing failed reason)", - "got_tp_end(This program failed)", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_4); -ATF_TEST_CASE_BODY(tps_4) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "info: a, foo\n" - "info: b, bar\n" - "info: c, baz\n" - "tps-count: 2\n" - "tp-start: first-prog, 3\n" - "tc-start: first-test\n" - "tc-end: first-test, passed\n" - "tc-start: second-test\n" - "tc-end: second-test, skipped, Testing skipped reason\n" - "tc-start: third-test\n" - "tc-end: third-test, failed, Testing failed reason\n" - "tp-end: first-prog\n" - "tp-start: second-prog, 3\n" - "tc-start: first-test\n" - "tc-so:first stdout line for 1st test\n" - "tc-se:first stderr line for 1st test\n" - "tc-so:second stdout line for 1st test\n" - "tc-se:second stderr line for 1st test\n" - "tc-end: first-test, passed\n" - "tc-start: second-test\n" - "tc-so:first stdout line for 2nd test\n" - "tc-se:first stderr line for 2nd test\n" - "tc-so:second stdout line for 2nd test\n" - "tc-se:second stderr line for 2nd test\n" - "tc-end: second-test, skipped, Testing skipped reason\n" - "tc-start: third-test\n" - "tc-so:first stdout line for 3rd test\n" - "tc-se:first stderr line for 3rd test\n" - "tc-so:second stdout line for 3rd test\n" - "tc-se:second stderr line for 3rd test\n" - "tc-end: third-test, failed, Testing failed reason\n" - "tp-end: second-prog, This program failed\n" - "info: d, foo\n" - "info: e, bar\n" - "info: f, baz\n" - ; - - const char* exp_calls[] = { - "got_info(a, foo)", - "got_info(b, bar)", - "got_info(c, baz)", - "got_ntps(2)", - "got_tp_start(first-prog, 3)", - "got_tc_start(first-test)", - "got_tc_end(passed)", - "got_tc_start(second-test)", - "got_tc_end(skipped, Testing skipped reason)", - "got_tc_start(third-test)", - "got_tc_end(failed, Testing failed reason)", - "got_tp_end()", - "got_tp_start(second-prog, 3)", - "got_tc_start(first-test)", - "got_tc_stdout_line(first stdout line for 1st test)", - "got_tc_stderr_line(first stderr line for 1st test)", - "got_tc_stdout_line(second stdout line for 1st test)", - "got_tc_stderr_line(second stderr line for 1st test)", - "got_tc_end(passed)", - "got_tc_start(second-test)", - "got_tc_stdout_line(first stdout line for 2nd test)", - "got_tc_stderr_line(first stderr line for 2nd test)", - "got_tc_stdout_line(second stdout line for 2nd test)", - "got_tc_stderr_line(second stderr line for 2nd test)", - "got_tc_end(skipped, Testing skipped reason)", - "got_tc_start(third-test)", - "got_tc_stdout_line(first stdout line for 3rd test)", - "got_tc_stderr_line(first stderr line for 3rd test)", - "got_tc_stdout_line(second stdout line for 3rd test)", - "got_tc_stderr_line(second stderr line for 3rd test)", - "got_tc_end(failed, Testing failed reason)", - "got_tp_end(This program failed)", - "got_info(d, foo)", - "got_info(e, bar)", - "got_info(f, baz)", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_5); -ATF_TEST_CASE_BODY(tps_5) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 1\n" - "tp-start: the-prog, 1\n" - "tc-start: the-test\n" - "tc-so:--- a 2007-11-04 14:00:41.000000000 +0100\n" - "tc-so:+++ b 2007-11-04 14:00:48.000000000 +0100\n" - "tc-so:@@ -1,7 +1,7 @@\n" - "tc-so: This test is meant to simulate a diff.\n" - "tc-so: Blank space at beginning of context lines must be preserved.\n" - "tc-so: \n" - "tc-so:-First original line.\n" - "tc-so:-Second original line.\n" - "tc-so:+First modified line.\n" - "tc-so:+Second modified line.\n" - "tc-so: \n" - "tc-so: EOF\n" - "tc-end: the-test, passed\n" - "tp-end: the-prog\n" - ; - - // NO_CHECK_STYLE_BEGIN - const char* exp_calls[] = { - "got_ntps(1)", - "got_tp_start(the-prog, 1)", - "got_tc_start(the-test)", - "got_tc_stdout_line(--- a 2007-11-04 14:00:41.000000000 +0100)", - "got_tc_stdout_line(+++ b 2007-11-04 14:00:48.000000000 +0100)", - "got_tc_stdout_line(@@ -1,7 +1,7 @@)", - "got_tc_stdout_line( This test is meant to simulate a diff.)", - "got_tc_stdout_line( Blank space at beginning of context lines must be preserved.)", - "got_tc_stdout_line( )", - "got_tc_stdout_line(-First original line.)", - "got_tc_stdout_line(-Second original line.)", - "got_tc_stdout_line(+First modified line.)", - "got_tc_stdout_line(+Second modified line.)", - "got_tc_stdout_line( )", - "got_tc_stdout_line( EOF)", - "got_tc_end(passed)", - "got_tp_end()", - "got_eof()", - NULL - }; - // NO_CHECK_STYLE_END - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_6); -ATF_TEST_CASE_BODY(tps_6) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 1\n" - "tp-start: the-prog, 8\n" - "tc-start: one\n" - "tc-end: one, expected_death, The reason\n" - "tc-start: two\n" - "tc-end: two, expected_exit, This would be an exit\n" - "tc-start: three\n" - "tc-end: three, expected_failure, And this a failure\n" - "tc-start: four\n" - "tc-end: four, expected_signal, And this a signal\n" - "tc-start: five\n" - "tc-end: five, failed, Another reason\n" - "tc-start: six\n" - "tc-end: six, passed\n" - "tc-start: seven\n" - "tc-end: seven, skipped, Skipping it\n" - "tc-start: eight\n" - "tc-end: eight, expected_timeout, Some hang reason\n" - "tp-end: the-prog\n" - ; - - // NO_CHECK_STYLE_BEGIN - const char* exp_calls[] = { - "got_ntps(1)", - "got_tp_start(the-prog, 8)", - "got_tc_start(one)", - "got_tc_end(expected_death, The reason)", - "got_tc_start(two)", - "got_tc_end(expected_exit, This would be an exit)", - "got_tc_start(three)", - "got_tc_end(expected_failure, And this a failure)", - "got_tc_start(four)", - "got_tc_end(expected_signal, And this a signal)", - "got_tc_start(five)", - "got_tc_end(failed, Another reason)", - "got_tc_start(six)", - "got_tc_end(passed)", - "got_tc_start(seven)", - "got_tc_end(skipped, Skipping it)", - "got_tc_start(eight)", - "got_tc_end(expected_timeout, Some hang reason)", - "got_tp_end()", - "got_eof()", - NULL - }; - // NO_CHECK_STYLE_END - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - - -ATF_TEST_CASE_WITHOUT_HEAD(tps_50); -ATF_TEST_CASE_BODY(tps_50) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "foo\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `foo'; expected tps-count or info field", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_51); -ATF_TEST_CASE_BODY(tps_51) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected `:'", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_52); -ATF_TEST_CASE_BODY(tps_52) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count:\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected number of test programs", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_53); -ATF_TEST_CASE_BODY(tps_53) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 1\n" - "foo\n" - ; - - const char* exp_calls[] = { - "got_ntps(1)", - NULL - }; - - const char* exp_errors[] = { - "4: Unexpected token `foo'; expected start of test program", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_54); -ATF_TEST_CASE_BODY(tps_54) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 1\n" - "foo\n" - "tp-start\n" - "tp-start:\n" - "tp-start: foo\n" - "tp-start: foo,\n" - "tp-start: foo, 0\n" - "bar\n" - "tp-start: foo, 0\n" - "tp-end\n" - "tp-start: foo, 0\n" - "tp-end:\n" - "tp-start: foo, 0\n" - "tp-end: bar\n" - "tp-start: foo, 0\n" - "tp-end: foo,\n" - ; - - const char* exp_calls[] = { - "got_ntps(1)", - NULL - }; - - const char* exp_errors[] = { - "4: Unexpected token `foo'; expected start of test program", - "5: Unexpected token `<>'; expected `:'", - "6: Unexpected token `<>'; expected test program name", - "7: Unexpected token `<>'; expected `,'", - "8: Unexpected token `<>'; expected number of test programs", - "10: Unexpected token `bar'; expected end of test program", - "12: Unexpected token `<>'; expected `:'", - "14: Unexpected token `<>'; expected test program name", - "16: Test program name used in terminator does not match opening", - "18: Empty reason for failed test program", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_55); -ATF_TEST_CASE_BODY(tps_55) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 1\n" - "tp-start: foo, 1\n" - "foo\n" - "tc-start\n" - "tc-start:\n" - "tc-start: foo\n" - "bar\n" - "tc-start: foo\n" - "tc-end\n" - "tc-start: foo\n" - "tc-end:\n" - "tc-start: foo\n" - "tc-end: bar\n" - "tc-start: foo\n" - "tc-end: foo\n" - "tc-start: foo\n" - "tc-end: foo,\n" - "tp-end: foo\n" - ; - - const char* exp_calls[] = { - "got_ntps(1)", - "got_tp_start(foo, 1)", - NULL - }; - - // NO_CHECK_STYLE_BEGIN - const char* exp_errors[] = { - "5: Unexpected token `foo'; expected start of test case", - "6: Unexpected token `<>'; expected `:'", - "7: Unexpected token `<>'; expected test case name", - "9: Unexpected token `bar'; expected end of test case or test case's stdout/stderr line", - "11: Unexpected token `<>'; expected `:'", - "13: Unexpected token `<>'; expected test case name", - "15: Test case name used in terminator does not match opening", - "17: Unexpected token `<>'; expected `,'", - "19: Unexpected token `<>'; expected expected_{death,exit,failure,signal,timeout}, failed, passed or skipped", - "20: Unexpected token `tp-end'; expected start of test case", - NULL - }; - // NO_CHECK_STYLE_END - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_56); -ATF_TEST_CASE_BODY(tps_56) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 1\n" - "tp-start: foo, 1\n" - "tc-start: foo\n" - "tc-end: foo, passe\n" - "tc-start: foo\n" - "tc-end: foo, passed,\n" - "tc-start: bar\n" - "tc-end: bar, failed\n" - "tc-start: bar\n" - "tc-end: bar, failed,\n" - "tc-start: baz\n" - "tc-end: baz, skipped\n" - "tc-start: baz\n" - "tc-end: baz, skipped,\n" - "tp-end: foo\n" - ; - - const char* exp_calls[] = { - "got_ntps(1)", - "got_tp_start(foo, 1)", - "got_tc_start(foo)", - NULL - }; - - // NO_CHECK_STYLE_BEGIN - const char* exp_errors[] = { - "6: Unexpected token `passe'; expected expected_{death,exit,failure,signal,timeout}, failed, passed or skipped", - "8: Unexpected token `,'; expected new line", - "10: Unexpected token `<>'; expected `,'", - "12: Empty reason for failed test case result", - "14: Unexpected token `<>'; expected `,'", - "16: Empty reason for skipped test case result", - "17: Unexpected token `tp-end'; expected start of test case", - NULL - }; - // NO_CHECK_STYLE_END - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_57); -ATF_TEST_CASE_BODY(tps_57) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 2\n" - "tp-start: foo, 0\n" - "tp-end: foo\n" - ; - - const char* exp_calls[] = { - "got_ntps(2)", - "got_tp_start(foo, 0)", - "got_tp_end()", - NULL - }; - - const char* exp_errors[] = { - "6: Unexpected token `<>'; expected start of test program", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_58); -ATF_TEST_CASE_BODY(tps_58) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "tps-count: 1\n" - "tp-start: foo, 0\n" - "tp-end: foo\n" - "tp-start: bar, 0\n" - "tp-end: bar\n" - ; - - const char* exp_calls[] = { - "got_ntps(1)", - "got_tp_start(foo, 0)", - "got_tp_end()", - NULL - }; - - const char* exp_errors[] = { - "6: Unexpected token `tp-start'; expected end of stream or info field", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_59); -ATF_TEST_CASE_BODY(tps_59) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "info\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected `:'", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_60); -ATF_TEST_CASE_BODY(tps_60) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "info:\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected info property name", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_61); -ATF_TEST_CASE_BODY(tps_61) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "info: a\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected `,'", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_62); -ATF_TEST_CASE_BODY(tps_62) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "info: a,\n" - ; - - const char* exp_calls[] = { - "got_info(a, )", - NULL - }; - - const char* exp_errors[] = { - "4: Unexpected token `<>'; expected tps-count or info field", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_63); -ATF_TEST_CASE_BODY(tps_63) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "info: a, b\n" - ; - - const char* exp_calls[] = { - "got_info(a, b)", - NULL - }; - - const char* exp_errors[] = { - "4: Unexpected token `<>'; expected tps-count or info field", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_64); -ATF_TEST_CASE_BODY(tps_64) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "info: a, b\n" - "tps-count\n" - ; - - const char* exp_calls[] = { - "got_info(a, b)", - NULL - }; - - const char* exp_errors[] = { - "4: Unexpected token `<>'; expected `:'", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_65); -ATF_TEST_CASE_BODY(tps_65) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "info: a, b\n" - "tps-count:\n" - ; - - const char* exp_calls[] = { - "got_info(a, b)", - NULL - }; - - const char* exp_errors[] = { - "4: Unexpected token `<>'; expected number of test programs", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tps_66); -ATF_TEST_CASE_BODY(tps_66) -{ - const char* input = - "Content-Type: application/X-atf-tps; version=\"2\"\n" - "\n" - "info: a, b\n" - "tps-count: 0\n" - "info\n" - ; - - const char* exp_calls[] = { - "got_info(a, b)", - "got_ntps(0)", - NULL - }; - - const char* exp_errors[] = { - "5: Unexpected token `<>'; expected `:'", - NULL - }; - - do_parser_test< tps_reader >(input, exp_calls, exp_errors); -} - -ATF_INIT_TEST_CASES(tcs) -{ - ATF_ADD_TEST_CASE(tcs, tps_1); - ATF_ADD_TEST_CASE(tcs, tps_2); - ATF_ADD_TEST_CASE(tcs, tps_3); - ATF_ADD_TEST_CASE(tcs, tps_4); - ATF_ADD_TEST_CASE(tcs, tps_5); - ATF_ADD_TEST_CASE(tcs, tps_6); - ATF_ADD_TEST_CASE(tcs, tps_50); - ATF_ADD_TEST_CASE(tcs, tps_51); - ATF_ADD_TEST_CASE(tcs, tps_52); - ATF_ADD_TEST_CASE(tcs, tps_53); - ATF_ADD_TEST_CASE(tcs, tps_54); - ATF_ADD_TEST_CASE(tcs, tps_55); - ATF_ADD_TEST_CASE(tcs, tps_56); - ATF_ADD_TEST_CASE(tcs, tps_57); - ATF_ADD_TEST_CASE(tcs, tps_58); - ATF_ADD_TEST_CASE(tcs, tps_59); - ATF_ADD_TEST_CASE(tcs, tps_60); - ATF_ADD_TEST_CASE(tcs, tps_61); - ATF_ADD_TEST_CASE(tcs, tps_62); - ATF_ADD_TEST_CASE(tcs, tps_63); - ATF_ADD_TEST_CASE(tcs, tps_64); - ATF_ADD_TEST_CASE(tcs, tps_65); - ATF_ADD_TEST_CASE(tcs, tps_66); -} - Index: vendor/NetBSD/atf/dist/dist/atf-report/tests-results.css =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/tests-results.css (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/tests-results.css (nonexistent) @@ -1,164 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. - * 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 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. - */ - -body { - margin: 0 0 0 0; -} - -h1 { - background: black; - color: white; - font-family: Arial; - font-size: 24pt; - padding: 5pt; -} - -h2 { - background: #eeeeee; - font-family: Arial; - font-size: 16pt; - margin-left: 10pt; - margin-right: 10pt; - padding: 3pt; -} - -h3 { - font-family: Arial; - font-size: 12pt; - margin-left: 20pt; - margin-right: 20pt; - padding: 3pt; -} - -p.term { - margin-left: 40pt; - margin-right: 40pt; -} - -pre.so { - margin-left: 40pt; - margin-right: 40pt; -} - -pre.se { - margin-left: 40pt; - margin-right: 40pt; -} - -table.summary { - border-collapse: collapse; - border-color: black; - border-style: solid; - border-width: 1pt; - margin-left: auto; - margin-right: auto; -} - -table.summary th { - background: #aaaadd; - border-style: solid; - border-width: 1pt; - padding: 3pt 6pt 3pt 6pt; -} - -table.summary td { - border-style: solid; - border-width: 1pt; - padding: 3pt 6pt 3pt 6pt; -} - -table.summary td.numeric p { - text-align: right; -} - -table.summary td.numeric-error p { - text-align: right; - color: red; -} - -table.summary td.numeric-warning p { - text-align: right; - color: #aaaa00; -} - -table.summary tr.group { - background: #dddddd; -} - -table.summary tr.entry td p { - margin-left: 10pt; -} - -table.tcs-summary { - border-collapse: collapse; - border-color: black; - border-style: solid; - border-width: 1pt; - margin-left: auto; - margin-right: auto; - width: 80%; -} - -table.tcs-summary td { - border-style: solid; - border-width: 1pt; - padding: 3pt 6pt 3pt 6pt; -} - -table.tcs-summary th { - background: #aaaadd; - border-style: solid; - border-width: 1pt; - padding: 3pt 6pt 3pt 6pt; -} - -table.tcs-summary td.tp-id { - background: #dddddd; - font-weight: bold; -} - -table.tcs-summary td.tc-id p { - margin-left: 10pt; -} - -table.tcs-summary td.tcr-passed { - background: #aaffaa; -} - -table.tcs-summary td.tcr-failed { - background: #ffaaaa; -} - -table.tcs-summary td.tcr-skipped { - background: #ffffaa; -} - -table.tcs-summary td.tcr-xfail { - background: #ffaaff; -} Index: vendor/NetBSD/atf/dist/dist/atf-report/tests-results.dtd =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/tests-results.dtd (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/tests-results.dtd (nonexistent) @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Index: vendor/NetBSD/atf/dist/dist/atf-report/tests-results.xsl =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/tests-results.xsl (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/tests-results.xsl (nonexistent) @@ -1,545 +0,0 @@ - -]> - - - - - - - tests-results.css - ATF Tests Results - - - - - - - - - - - - - - - - - - - - - - <xsl:value-of select="$global.title" /> - - - -

- - - - - - - - - - - - - - - - - - - - -
- - -

Execution summary

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Item

Value

ATF

Version

Timings

Start time of tests

End time of tests

System information

Host name

Operating system

Operating system release

Operating system version

Platform

Tests results

Root

Test programs

Bogus test - programs

-

-

Bogus test programs

-

-

Test cases

Passed test cases

Failed test - cases

-

-

Failed test cases

-

-

Expected - failures

-

-

Expected failures

-

-

Skipped test - cases

-

-

Skipped test cases

-

-

See more execution - details

-
- - - -

Execution details

- -

Environment variables

- -
    - - - -
-
- - -
  • -

    -
  • -
    - - -

    Test cases summary

    - - - - - - - - - all - -

    Test case

    Result

    Reason

    -
    - - -
    -

    Expected failures summary

    - - - - - - - - - xfail - -

    Test case

    Result

    Reason

    - - - -
    -

    Failed test cases summary

    - - - - - - - - - failed - -

    Test case

    Result

    Reason

    - - - -
    -

    Bogus test programs summary

    - - - - - - - bogus - -
    Test program
    - - - -
    -

    Skipped test cases summary

    - - - - - - - - - skipped - -

    Test case

    Result

    Reason

    - - - - - - - - yes - yes - yes - yes - yes - yes - yes - yes - yes - yes - no - - - - - - -

    - - - - - - - -
    -
    - - - - - - - - - yes - yes - yes - yes - yes - yes - yes - yes - yes - no - - - - - - - - -

    - - -

    -
    - - - - - - - - -

    Passed

    -

    N/A

    -
    - - -

    Expected death

    -

    -
    - - -

    Expected exit

    -

    -
    - - -

    Expected failure

    -

    -
    - - -

    Expected timeout

    -

    -
    - - -

    Expected signal

    -

    -
    - - -

    Failed

    -

    -
    - - -

    Skipped

    -

    -
    - - - - - - -

    FAILED:

    -
    - - -

    XFAIL:

    -
    - - -

    SKIPPED:

    -
    - - - - - -

    Test case: - / -

    - -

    Termination reason

    - - - -

    Standard output stream

    -
    -
    - - -

    Standard error stream

    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    Index: vendor/NetBSD/atf/dist/dist/atf-report/Atffile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/Atffile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/Atffile (nonexistent) @@ -1,5 +0,0 @@ -Content-Type: application/X-atf-atffile; version="1" - -prop: test-suite = atf - -tp-glob: *_test Index: vendor/NetBSD/atf/dist/dist/atf-report/reader.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/reader.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/reader.cpp (nonexistent) @@ -1,383 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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 -#include -#include - -#include "atf-c++/detail/parser.hpp" -#include "atf-c++/detail/sanity.hpp" -#include "atf-c++/detail/text.hpp" - -#include "reader.hpp" - -namespace impl = atf::atf_report; -#define IMPL_NAME "atf::atf_report" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static -size_t -string_to_size_t(const std::string& str) -{ - std::istringstream ss(str); - size_t s; - ss >> s; - - return s; -} - -// ------------------------------------------------------------------------ -// The "atf_tps" auxiliary parser. -// ------------------------------------------------------------------------ - -namespace atf_tps { - -static const atf::parser::token_type eof_type = 0; -static const atf::parser::token_type nl_type = 1; -static const atf::parser::token_type text_type = 2; -static const atf::parser::token_type colon_type = 3; -static const atf::parser::token_type comma_type = 4; -static const atf::parser::token_type tps_count_type = 5; -static const atf::parser::token_type tp_start_type = 6; -static const atf::parser::token_type tp_end_type = 7; -static const atf::parser::token_type tc_start_type = 8; -static const atf::parser::token_type tc_so_type = 9; -static const atf::parser::token_type tc_se_type = 10; -static const atf::parser::token_type tc_end_type = 11; -static const atf::parser::token_type passed_type = 12; -static const atf::parser::token_type failed_type = 13; -static const atf::parser::token_type skipped_type = 14; -static const atf::parser::token_type info_type = 16; -static const atf::parser::token_type expected_death_type = 17; -static const atf::parser::token_type expected_exit_type = 18; -static const atf::parser::token_type expected_failure_type = 19; -static const atf::parser::token_type expected_signal_type = 20; -static const atf::parser::token_type expected_timeout_type = 21; - -class tokenizer : public atf::parser::tokenizer< std::istream > { -public: - tokenizer(std::istream& is, size_t curline) : - atf::parser::tokenizer< std::istream > - (is, true, eof_type, nl_type, text_type, curline) - { - add_delim(':', colon_type); - add_delim(',', comma_type); - add_keyword("tps-count", tps_count_type); - add_keyword("tp-start", tp_start_type); - add_keyword("tp-end", tp_end_type); - add_keyword("tc-start", tc_start_type); - add_keyword("tc-so", tc_so_type); - add_keyword("tc-se", tc_se_type); - add_keyword("tc-end", tc_end_type); - add_keyword("passed", passed_type); - add_keyword("failed", failed_type); - add_keyword("skipped", skipped_type); - add_keyword("info", info_type); - add_keyword("expected_death", expected_death_type); - add_keyword("expected_exit", expected_exit_type); - add_keyword("expected_failure", expected_failure_type); - add_keyword("expected_signal", expected_signal_type); - add_keyword("expected_timeout", expected_timeout_type); - } -}; - -} // namespace atf_tps - -// ------------------------------------------------------------------------ -// The "atf_tps_reader" class. -// ------------------------------------------------------------------------ - -impl::atf_tps_reader::atf_tps_reader(std::istream& is) : - m_is(is) -{ -} - -impl::atf_tps_reader::~atf_tps_reader(void) -{ -} - -void -impl::atf_tps_reader::got_info(const std::string& what, - const std::string& val) -{ -} - -void -impl::atf_tps_reader::got_ntps(size_t ntps) -{ -} - -void -impl::atf_tps_reader::got_tp_start(const std::string& tp, size_t ntcs) -{ -} - -void -impl::atf_tps_reader::got_tp_end(const std::string& reason) -{ -} - -void -impl::atf_tps_reader::got_tc_start(const std::string& tcname) -{ -} - -void -impl::atf_tps_reader::got_tc_stdout_line(const std::string& line) -{ -} - -void -impl::atf_tps_reader::got_tc_stderr_line(const std::string& line) -{ -} - -void -impl::atf_tps_reader::got_tc_end(const std::string& state, - const std::string& reason) -{ -} - -void -impl::atf_tps_reader::got_eof(void) -{ -} - -void -impl::atf_tps_reader::read_info(void* pptr) -{ - using atf::parser::parse_error; - using namespace atf_tps; - - atf::parser::parser< tokenizer >& p = - *reinterpret_cast< atf::parser::parser< tokenizer >* > - (pptr); - - (void)p.expect(colon_type, "`:'"); - - atf::parser::token t = p.expect(text_type, "info property name"); - (void)p.expect(comma_type, "`,'"); - got_info(t.text(), atf::text::trim(p.rest_of_line())); - - (void)p.expect(nl_type, "new line"); -} - -void -impl::atf_tps_reader::read_tp(void* pptr) -{ - using atf::parser::parse_error; - using namespace atf_tps; - - atf::parser::parser< tokenizer >& p = - *reinterpret_cast< atf::parser::parser< tokenizer >* > - (pptr); - - atf::parser::token t = p.expect(tp_start_type, - "start of test program"); - - t = p.expect(colon_type, "`:'"); - - t = p.expect(text_type, "test program name"); - std::string tpname = t.text(); - - t = p.expect(comma_type, "`,'"); - - t = p.expect(text_type, "number of test programs"); - size_t ntcs = string_to_size_t(t.text()); - - t = p.expect(nl_type, "new line"); - - ATF_PARSER_CALLBACK(p, got_tp_start(tpname, ntcs)); - - size_t i = 0; - while (p.good() && i < ntcs) { - try { - read_tc(&p); - i++; - } catch (const parse_error& pe) { - p.add_error(pe); - p.reset(nl_type); - } - } - t = p.expect(tp_end_type, "end of test program"); - - t = p.expect(colon_type, "`:'"); - - t = p.expect(text_type, "test program name"); - if (t.text() != tpname) - throw parse_error(t.lineno(), "Test program name used in " - "terminator does not match " - "opening"); - - t = p.expect(nl_type, comma_type, - "new line or comma_type"); - std::string reason; - if (t.type() == comma_type) { - reason = text::trim(p.rest_of_line()); - if (reason.empty()) - throw parse_error(t.lineno(), - "Empty reason for failed test program"); - t = p.next(); - } - - ATF_PARSER_CALLBACK(p, got_tp_end(reason)); -} - -void -impl::atf_tps_reader::read_tc(void* pptr) -{ - using atf::parser::parse_error; - using namespace atf_tps; - - atf::parser::parser< tokenizer >& p = - *reinterpret_cast< atf::parser::parser< tokenizer >* > - (pptr); - - atf::parser::token t = p.expect(tc_start_type, "start of test case"); - - t = p.expect(colon_type, "`:'"); - - t = p.expect(text_type, "test case name"); - std::string tcname = t.text(); - ATF_PARSER_CALLBACK(p, got_tc_start(tcname)); - - t = p.expect(nl_type, "new line"); - - t = p.expect(tc_end_type, tc_so_type, tc_se_type, - "end of test case or test case's stdout/stderr line"); - while (t.type() != tc_end_type && - (t.type() == tc_so_type || t.type() == tc_se_type)) { - atf::parser::token t2 = t; - - t = p.expect(colon_type, "`:'"); - - std::string line = p.rest_of_line(); - - if (t2.type() == tc_so_type) { - ATF_PARSER_CALLBACK(p, got_tc_stdout_line(line)); - } else { - INV(t2.type() == tc_se_type); - ATF_PARSER_CALLBACK(p, got_tc_stderr_line(line)); - } - - t = p.expect(nl_type, "new line"); - - t = p.expect(tc_end_type, tc_so_type, tc_se_type, - "end of test case or test case's stdout/stderr line"); - } - - t = p.expect(colon_type, "`:'"); - - t = p.expect(text_type, "test case name"); - if (t.text() != tcname) - throw parse_error(t.lineno(), - "Test case name used in terminator does not " - "match opening"); - - t = p.expect(comma_type, "`,'"); - - t = p.expect(expected_death_type, expected_exit_type, expected_failure_type, - expected_signal_type, expected_timeout_type, passed_type, failed_type, - skipped_type, "expected_{death,exit,failure,signal,timeout}, failed, " - "passed or skipped"); - if (t.type() == passed_type) { - ATF_PARSER_CALLBACK(p, got_tc_end("passed", "")); - } else { - std::string state; - if (t.type() == expected_death_type) state = "expected_death"; - else if (t.type() == expected_exit_type) state = "expected_exit"; - else if (t.type() == expected_failure_type) state = "expected_failure"; - else if (t.type() == expected_signal_type) state = "expected_signal"; - else if (t.type() == expected_timeout_type) state = "expected_timeout"; - else if (t.type() == failed_type) state = "failed"; - else if (t.type() == skipped_type) state = "skipped"; - else UNREACHABLE; - - t = p.expect(comma_type, "`,'"); - std::string reason = text::trim(p.rest_of_line()); - if (reason.empty()) - throw parse_error(t.lineno(), "Empty reason for " + state + - " test case result"); - ATF_PARSER_CALLBACK(p, got_tc_end(state, reason)); - } - - t = p.expect(nl_type, "new line"); -} - -void -impl::atf_tps_reader::read(void) -{ - using atf::parser::parse_error; - using namespace atf_tps; - - std::pair< size_t, atf::parser::headers_map > hml = - atf::parser::read_headers(m_is, 1); - atf::parser::validate_content_type(hml.second, "application/X-atf-tps", 2); - - tokenizer tkz(m_is, hml.first); - atf::parser::parser< tokenizer > p(tkz); - - try { - atf::parser::token t; - - while ((t = p.expect(tps_count_type, info_type, "tps-count or info " - "field")).type() == info_type) - read_info(&p); - - t = p.expect(colon_type, "`:'"); - - t = p.expect(text_type, "number of test programs"); - size_t ntps = string_to_size_t(t.text()); - ATF_PARSER_CALLBACK(p, got_ntps(ntps)); - - t = p.expect(nl_type, "new line"); - - size_t i = 0; - while (p.good() && i < ntps) { - try { - read_tp(&p); - i++; - } catch (const parse_error& pe) { - p.add_error(pe); - p.reset(nl_type); - } - } - - while ((t = p.expect(eof_type, info_type, "end of stream or info " - "field")).type() == info_type) - read_info(&p); - ATF_PARSER_CALLBACK(p, got_eof()); - } catch (const parse_error& pe) { - p.add_error(pe); - p.reset(nl_type); - } -} Index: vendor/NetBSD/atf/dist/dist/atf-report/reader.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-report/reader.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-report/reader.hpp (nonexistent) @@ -1,86 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_REPORT_FORMATS_HPP_) -#define _ATF_REPORT_FORMATS_HPP_ - -#include -#include - -#include - -namespace atf { -namespace atf_report { - -struct test_case_result { - enum state_enum { - PASSED, - FAILED, - SKIPPED, - }; - const state_enum state; - const std::string& reason; - - test_case_result(const state_enum p_state, const std::string& p_reason) : - state(p_state), - reason(p_reason) - { - } -}; - -class atf_tps_reader { - std::istream& m_is; - - void read_info(void*); - void read_tp(void*); - void read_tc(void*); - -protected: - virtual void got_info(const std::string&, const std::string&); - virtual void got_ntps(size_t); - virtual void got_tp_start(const std::string&, size_t); - virtual void got_tp_end(const std::string&); - - virtual void got_tc_start(const std::string&); - virtual void got_tc_stdout_line(const std::string&); - virtual void got_tc_stderr_line(const std::string&); - virtual void got_tc_end(const std::string&, const std::string&); - virtual void got_eof(void); - -public: - atf_tps_reader(std::istream&); - virtual ~atf_tps_reader(void); - - void read(void); -}; - -} // namespace atf_report -} // namespace atf - -#endif // !defined(_ATF_REPORT_FORMATS_HPP_) Index: vendor/NetBSD/atf/dist/dist/COPYING =================================================================== --- vendor/NetBSD/atf/dist/dist/COPYING (revision 240137) +++ vendor/NetBSD/atf/dist/dist/COPYING (nonexistent) @@ -1,70 +0,0 @@ -Redistribution terms Automated Testing Framework -=========================================================================== - - -License -******* - -Copyright (c) 2007, 2008, 2009, 2010, 2011 The NetBSD Foundation, Inc. -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 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. - - -Relicensed code -*************** - -The following code snippets have been taken from other projects. Even -though they were not originally licensed under the terms above, the -original authors have agreed to relicense their work so that this project -can be distributed under a single license. This section is put here just to -clarify this fact. - -* configure.ac, Makefile.am: The original versions were derived from the - ones in the XML Catalog Manager project, version 2.2. - - Author: Julio Merino - -* atf-c/ui.c: The format_paragraph and format_text functions were - derived form the ones in the Monotone project, revision - 3a0982da308228d796df35f98d787c5cff2bb5b6. - - Author: Julio Merino - -* atf-c++/detail/io.hpp, atf-c++/detail/io.cpp, atf-c++/detail/io_test.cpp: - These files were derived from the file_handle, systembuf, pipe and pistream - classes and tests found in the Boost.Process library. - - Author: Julio Merino - -* admin/check-style.sh, admin/check-style-common.awk, - admin/check-style-cpp.awk, admin/check-style-shell.awk: These files, - except the first one, were first implemented in the Buildtool project. - They were later adapted to be part of Boost.Process and, during that - process, the shell script was created. - - Author: Julio Merino - - -=========================================================================== -vim: filetype=text:textwidth=75:expandtab:shiftwidth=2:softtabstop=2 Index: vendor/NetBSD/atf/dist/dist/atf-run/timer.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/timer.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/timer.hpp (nonexistent) @@ -1,81 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_RUN_ALARM_HPP_) -#define _ATF_RUN_ALARM_HPP_ - -extern "C" { -#include -#include -} - -#include - -#include "atf-c++/utils.hpp" - -namespace atf { -namespace atf_run { - -class signal_programmer; - -// ------------------------------------------------------------------------ -// The "timer" class. -// ------------------------------------------------------------------------ - -class timer : utils::noncopyable { - ::itimerval m_old_timeval; - std::auto_ptr< signal_programmer > m_sigalrm; - -public: - timer(const unsigned int); - virtual ~timer(void); - - bool fired(void) const; - virtual void timeout_callback(void) = 0; -}; - -// ------------------------------------------------------------------------ -// The "child_timer" class. -// ------------------------------------------------------------------------ - -class child_timer : public timer { - const pid_t m_pid; - volatile bool& m_terminate; - -public: - child_timer(const unsigned int, const pid_t, volatile bool&); - virtual ~child_timer(void); - - void timeout_callback(void); -}; - -} // namespace atf_run -} // namespace atf - -#endif // !defined(_ATF_RUN_ALARM_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-run/zero_tcs_helper.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/zero_tcs_helper.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/zero_tcs_helper.c (nonexistent) @@ -1,35 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2010 The NetBSD Foundation, Inc. - * 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 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 - -ATF_TP_ADD_TCS(tp) -{ - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/atffile_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/atffile_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/atffile_test.cpp (nonexistent) @@ -1,636 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include -} - -#include -#include -#include - -#include "atf-c++/macros.hpp" - -#include "atf-c++/detail/exceptions.hpp" -#include "atf-c++/detail/test_helpers.hpp" - -#include "atffile.hpp" - -namespace detail = atf::atf_run::detail; - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -namespace { - -static -std::auto_ptr< std::ofstream > -new_atffile(void) -{ - std::auto_ptr< std::ofstream > os(new std::ofstream("Atffile")); - ATF_REQUIRE(*os); - - (*os) << "Content-Type: application/X-atf-atffile; version=\"1\"\n\n"; - return os; -} - -static -void -touch_exec(const char* name) -{ - std::ofstream os(name); - ATF_REQUIRE(os); - os.close(); - ATF_REQUIRE(::chmod(name, S_IRWXU) != -1); -} - -static inline -bool -is_in(const std::string& value, const std::vector< std::string >& v) -{ - return std::find(v.begin(), v.end(), value) != v.end(); -} - -} // anonymous namespace - -// ------------------------------------------------------------------------ -// Tests cases for the "atffile" parser. -// ------------------------------------------------------------------------ - -class atffile_reader : protected detail::atf_atffile_reader { - void - got_conf(const std::string& name, const std::string& val) - { - m_calls.push_back("got_conf(" + name + ", " + val + ")"); - } - - void - got_prop(const std::string& name, const std::string& val) - { - m_calls.push_back("got_prop(" + name + ", " + val + ")"); - } - - void - got_tp(const std::string& name, bool isglob) - { - m_calls.push_back("got_tp(" + name + ", " + (isglob ? "true" : "false") - + ")"); - } - - void - got_eof(void) - { - m_calls.push_back("got_eof()"); - } - -public: - atffile_reader(std::istream& is) : - detail::atf_atffile_reader(is) - { - } - - void - read(void) - { - atf_atffile_reader::read(); - } - - std::vector< std::string > m_calls; -}; - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_1); -ATF_TEST_CASE_BODY(atffile_1) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - ; - - const char* exp_calls[] = { - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_2); -ATF_TEST_CASE_BODY(atffile_2) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - "# This is a comment on a line of its own.\n" - "# And this is another one.\n" - "\n" - " # Another after some whitespace.\n" - "\n" - "# The last one after an empty line.\n" - ; - - const char* exp_calls[] = { - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_3); -ATF_TEST_CASE_BODY(atffile_3) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - "conf: var1=value1\n" - "conf: var2 = value2\n" - "conf: var3 = value3\n" - "conf: var4 = value4\n" - "\n" - "conf:var5=value5\n" - " conf:var6=value6\n" - "\n" - "conf: var7 = \"This is a long value.\"\n" - "conf: var8 = \"Single-word\"\n" - "conf: var9 = \" Single-word \"\n" - "conf: var10 = Single-word\n" - ; - - const char* exp_calls[] = { - "got_conf(var1, value1)", - "got_conf(var2, value2)", - "got_conf(var3, value3)", - "got_conf(var4, value4)", - "got_conf(var5, value5)", - "got_conf(var6, value6)", - "got_conf(var7, This is a long value.)", - "got_conf(var8, Single-word)", - "got_conf(var9, Single-word )", - "got_conf(var10, Single-word)", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_4); -ATF_TEST_CASE_BODY(atffile_4) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - "prop: var1=value1\n" - "prop: var2 = value2\n" - "prop: var3 = value3\n" - "prop: var4 = value4\n" - "\n" - "prop:var5=value5\n" - " prop:var6=value6\n" - "\n" - "prop: var7 = \"This is a long value.\"\n" - "prop: var8 = \"Single-word\"\n" - "prop: var9 = \" Single-word \"\n" - "prop: var10 = Single-word\n" - ; - - const char* exp_calls[] = { - "got_prop(var1, value1)", - "got_prop(var2, value2)", - "got_prop(var3, value3)", - "got_prop(var4, value4)", - "got_prop(var5, value5)", - "got_prop(var6, value6)", - "got_prop(var7, This is a long value.)", - "got_prop(var8, Single-word)", - "got_prop(var9, Single-word )", - "got_prop(var10, Single-word)", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_5); -ATF_TEST_CASE_BODY(atffile_5) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - "tp:foo\n" - "tp: foo\n" - "tp: foo\n" - "tp: foo\n" - "tp: foo\n" - "tp: \"name with spaces\"\n" - "tp: \"single-word\"\n" - "tp: single-word\n" - "\n" - "tp-glob:foo*?bar\n" - "tp-glob: foo*?bar\n" - "tp-glob: foo*?bar\n" - "tp-glob: foo*?bar\n" - "tp-glob: foo*?bar\n" - "tp-glob: \"glob * with ? spaces\"\n" - "tp-glob: \"single-*-word\"\n" - "tp-glob: single-*-word\n" - ; - - const char* exp_calls[] = { - "got_tp(foo, false)", - "got_tp(foo, false)", - "got_tp(foo, false)", - "got_tp(foo, false)", - "got_tp(foo, false)", - "got_tp(name with spaces, false)", - "got_tp(single-word, false)", - "got_tp(single-word, false)", - "got_tp(foo*?bar, true)", - "got_tp(foo*?bar, true)", - "got_tp(foo*?bar, true)", - "got_tp(foo*?bar, true)", - "got_tp(foo*?bar, true)", - "got_tp(glob * with ? spaces, true)", - "got_tp(single-*-word, true)", - "got_tp(single-*-word, true)", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_6); -ATF_TEST_CASE_BODY(atffile_6) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - "prop: foo = bar # A comment.\n" - "conf: foo = bar # A comment.\n" - "tp: foo # A comment.\n" - "tp-glob: foo # A comment.\n" - ; - - const char* exp_calls[] = { - "got_prop(foo, bar)", - "got_conf(foo, bar)", - "got_tp(foo, false)", - "got_tp(foo, true)", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_50); -ATF_TEST_CASE_BODY(atffile_50) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - "foo\n" - ; - - const char* exp_calls[] = { - NULL - }; - - // NO_CHECK_STYLE_BEGIN - const char* exp_errors[] = { - "3: Unexpected token `foo'; expected conf, #, prop, tp, tp-glob, a new line or eof", - NULL - }; - // NO_CHECK_STYLE_END - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_51); -ATF_TEST_CASE_BODY(atffile_51) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - "foo bar\n" - "baz\n" - ; - - const char* exp_calls[] = { - NULL - }; - - // NO_CHECK_STYLE_BEGIN - const char* exp_errors[] = { - "3: Unexpected token `foo'; expected conf, #, prop, tp, tp-glob, a new line or eof", - "4: Unexpected token `baz'; expected conf, #, prop, tp, tp-glob, a new line or eof", - NULL - }; - // NO_CHECK_STYLE_END - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_52); -ATF_TEST_CASE_BODY(atffile_52) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - "conf\n" - "conf:\n" - "conf: foo =\n" - "conf: bar = # A comment.\n" - "\n" - "prop\n" - "prop:\n" - "prop: foo =\n" - "prop: bar = # A comment.\n" - "\n" - "tp\n" - "tp:\n" - "tp: # A comment.\n" - "\n" - "tp-glob\n" - "tp-glob:\n" - "tp-glob: # A comment.\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected `:'", - "4: Unexpected token `<>'; expected variable name", - "5: Unexpected token `<>'; expected word or quoted string", - "6: Unexpected token `#'; expected word or quoted string", - "8: Unexpected token `<>'; expected `:'", - "9: Unexpected token `<>'; expected property name", - "10: Unexpected token `<>'; expected word or quoted string", - "11: Unexpected token `#'; expected word or quoted string", - "13: Unexpected token `<>'; expected `:'", - "14: Unexpected token `<>'; expected word or quoted string", - "15: Unexpected token `#'; expected word or quoted string", - "17: Unexpected token `<>'; expected `:'", - "18: Unexpected token `<>'; expected word or quoted string", - "19: Unexpected token `#'; expected word or quoted string", - NULL - }; - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_53); -ATF_TEST_CASE_BODY(atffile_53) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - "prop: foo = \"Correct value\" # With comment.\n" - "\n" - "prop: bar = # A comment.\n" - "\n" - "prop: baz = \"Last variable\"\n" - "\n" - "# End of file.\n" - ; - - const char* exp_calls[] = { - "got_prop(foo, Correct value)", - NULL - }; - - const char* exp_errors[] = { - "5: Unexpected token `#'; expected word or quoted string", - NULL - }; - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(atffile_54); -ATF_TEST_CASE_BODY(atffile_54) -{ - const char* input = - "Content-Type: application/X-atf-atffile; version=\"1\"\n" - "\n" - "prop: foo = \"\n" - "prop: bar = \"text\n" - "prop: baz = \"te\\\"xt\n" - "prop: last = \"\\\"\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Missing double quotes before end of line", - "4: Missing double quotes before end of line", - "5: Missing double quotes before end of line", - "6: Missing double quotes before end of line", - NULL - }; - - do_parser_test< atffile_reader >(input, exp_calls, exp_errors); -} - -// ------------------------------------------------------------------------ -// Tests cases for the "atffile" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(atffile_getters); -ATF_TEST_CASE_HEAD(atffile_getters) {} -ATF_TEST_CASE_BODY(atffile_getters) { - atf::tests::vars_map config_vars; - config_vars["config-var-1"] = "value 1"; - - std::vector< std::string > test_program_names; - test_program_names.push_back("test-program-1"); - - atf::tests::vars_map properties; - properties["test-suite"] = "a test name"; - - const atf::atf_run::atffile atffile(config_vars, test_program_names, - properties); - ATF_REQUIRE(config_vars == atffile.conf()); - ATF_REQUIRE(test_program_names == atffile.tps()); - ATF_REQUIRE(properties == atffile.props()); -} - -// ------------------------------------------------------------------------ -// Tests cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE_WITHOUT_HEAD(read_ok_simple); -ATF_TEST_CASE_BODY(read_ok_simple) { - std::auto_ptr< std::ofstream > os = new_atffile(); - (*os) << "prop: test-suite = foo\n"; - (*os) << "tp: tp-1\n"; - (*os) << "conf: var1 = value1\n"; - (*os) << "tp: tp-2\n"; - (*os) << "tp: tp-3\n"; - (*os) << "prop: prop1 = propvalue1\n"; - (*os) << "conf: var2 = value2\n"; - (*os).close(); - - touch_exec("tp-1"); - touch_exec("tp-2"); - touch_exec("tp-3"); - - const atf::atf_run::atffile atffile = atf::atf_run::read_atffile( - atf::fs::path("Atffile")); - ATF_REQUIRE_EQ(2, atffile.conf().size()); - ATF_REQUIRE_EQ("value1", atffile.conf().find("var1")->second); - ATF_REQUIRE_EQ("value2", atffile.conf().find("var2")->second); - ATF_REQUIRE_EQ(3, atffile.tps().size()); - ATF_REQUIRE(is_in("tp-1", atffile.tps())); - ATF_REQUIRE(is_in("tp-2", atffile.tps())); - ATF_REQUIRE(is_in("tp-3", atffile.tps())); - ATF_REQUIRE_EQ(2, atffile.props().size()); - ATF_REQUIRE_EQ("foo", atffile.props().find("test-suite")->second); - ATF_REQUIRE_EQ("propvalue1", atffile.props().find("prop1")->second); -} - -ATF_TEST_CASE_WITHOUT_HEAD(read_ok_some_globs); -ATF_TEST_CASE_BODY(read_ok_some_globs) { - std::auto_ptr< std::ofstream > os = new_atffile(); - (*os) << "prop: test-suite = foo\n"; - (*os) << "tp: foo\n"; - (*os) << "tp-glob: *K*\n"; - (*os) << "tp: bar\n"; - (*os) << "tp-glob: t_*\n"; - (*os).close(); - - touch_exec("foo"); - touch_exec("bar"); - touch_exec("aK"); - touch_exec("KKKKK"); - touch_exec("t_hello"); - touch_exec("zzzt_hello"); - - const atf::atf_run::atffile atffile = atf::atf_run::read_atffile( - atf::fs::path("Atffile")); - ATF_REQUIRE_EQ(5, atffile.tps().size()); - ATF_REQUIRE(is_in("foo", atffile.tps())); - ATF_REQUIRE(is_in("bar", atffile.tps())); - ATF_REQUIRE(is_in("aK", atffile.tps())); - ATF_REQUIRE(is_in("KKKKK", atffile.tps())); - ATF_REQUIRE(is_in("t_hello", atffile.tps())); -} - -ATF_TEST_CASE_WITHOUT_HEAD(read_missing_test_suite); -ATF_TEST_CASE_BODY(read_missing_test_suite) { - std::auto_ptr< std::ofstream > os = new_atffile(); - (*os).close(); - - try { - (void)atf::atf_run::read_atffile(atf::fs::path("Atffile")); - ATF_FAIL("Missing property 'test-suite' did not raise an error"); - } catch (const atf::not_found_error< std::string >& e) { - ATF_REQUIRE_EQ("test-suite", e.get_value()); - } -} - -ATF_TEST_CASE_WITHOUT_HEAD(read_missing_test_program); -ATF_TEST_CASE_BODY(read_missing_test_program) { - std::auto_ptr< std::ofstream > os = new_atffile(); - (*os) << "tp: foo\n"; - (*os) << "tp: bar\n"; - (*os) << "tp: baz\n"; - (*os).close(); - - touch_exec("foo"); - touch_exec("baz"); - - try { - (void)atf::atf_run::read_atffile(atf::fs::path("Atffile")); - ATF_FAIL("Missing file 'bar' did not raise an error"); - } catch (const atf::not_found_error< atf::fs::path >& e) { - ATF_REQUIRE_EQ("bar", e.get_value().str()); - } -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test cases for the parser class. - ATF_ADD_TEST_CASE(tcs, atffile_1); - ATF_ADD_TEST_CASE(tcs, atffile_2); - ATF_ADD_TEST_CASE(tcs, atffile_3); - ATF_ADD_TEST_CASE(tcs, atffile_4); - ATF_ADD_TEST_CASE(tcs, atffile_5); - ATF_ADD_TEST_CASE(tcs, atffile_6); - ATF_ADD_TEST_CASE(tcs, atffile_50); - ATF_ADD_TEST_CASE(tcs, atffile_51); - ATF_ADD_TEST_CASE(tcs, atffile_52); - ATF_ADD_TEST_CASE(tcs, atffile_53); - ATF_ADD_TEST_CASE(tcs, atffile_54); - - // Add the test cases for the atffile class. - ATF_ADD_TEST_CASE(tcs, atffile_getters); - - // Add the test cases for the free functions. - ATF_ADD_TEST_CASE(tcs, read_ok_simple); - ATF_ADD_TEST_CASE(tcs, read_ok_some_globs); - ATF_ADD_TEST_CASE(tcs, read_missing_test_suite); - ATF_ADD_TEST_CASE(tcs, read_missing_test_program); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/test_program_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/test_program_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/test_program_test.cpp (nonexistent) @@ -1,992 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2010 The NetBSD Foundation, Inc. -// 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 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 -#include - -#include "atf-c++/macros.hpp" - -#include "atf-c++/detail/parser.hpp" -#include "atf-c++/detail/test_helpers.hpp" -#include "atf-c++/detail/text.hpp" - -#include "test-program.hpp" - -namespace impl = atf::atf_run; -namespace detail = atf::atf_run::detail; - -using atf::tests::vars_map; - -// ------------------------------------------------------------------------- -// Auxiliary functions. -// ------------------------------------------------------------------------- - -static -atf::fs::path -get_helper(const atf::tests::tc& tc, const char* name) -{ - return atf::fs::path(tc.get_config_var("srcdir")) / name; -} - -static -void -check_property(const vars_map& props, const char* name, const char* value) -{ - const vars_map::const_iterator iter = props.find(name); - ATF_REQUIRE(iter != props.end()); - ATF_REQUIRE_EQ(value, (*iter).second); -} - -static void -check_result(const char* exp_state, const int exp_value, const char* exp_reason, - const impl::test_case_result& tcr) -{ - ATF_REQUIRE_EQ(exp_state, tcr.state()); - ATF_REQUIRE_EQ(exp_value, tcr.value()); - ATF_REQUIRE_EQ(exp_reason, tcr.reason()); -} - -static -void -write_test_case_result(const char *results_path, const std::string& contents) -{ - std::ofstream results_file(results_path); - ATF_REQUIRE(results_file); - - results_file << contents; -} - -static -void -print_indented(const std::string& str) -{ - std::vector< std::string > ws = atf::text::split(str, "\n"); - for (std::vector< std::string >::const_iterator iter = ws.begin(); - iter != ws.end(); iter++) - std::cout << ">>" << *iter << "<<\n"; -} - -// XXX Should this string handling and verbosity level be part of the -// ATF_REQUIRE_EQ macro? It may be hard to predict sometimes that a -// string can have newlines in it, and so the error message generated -// at the moment will be bogus if there are some. -static -void -check_equal(const atf::tests::tc& tc, const std::string& str, - const std::string& exp) -{ - if (str != exp) { - std::cout << "String equality check failed.\n" - << "Adding >> and << to delimit the string boundaries " - "below.\n"; - std::cout << "GOT:\n"; - print_indented(str); - std::cout << "EXPECTED:\n"; - print_indented(exp); - tc.fail("Constructed string differs from the expected one"); - } -} - -// ------------------------------------------------------------------------- -// Tests for the "tp" reader. -// ------------------------------------------------------------------------- - -class tp_reader : protected detail::atf_tp_reader { - void - got_tc(const std::string& ident, - const std::map< std::string, std::string >& md) - { - std::string call = "got_tc(" + ident + ", {"; - for (std::map< std::string, std::string >::const_iterator iter = - md.begin(); iter != md.end(); iter++) { - if (iter != md.begin()) - call += ", "; - call += (*iter).first + '=' + (*iter).second; - } - call += "})"; - m_calls.push_back(call); - } - - void - got_eof(void) - { - m_calls.push_back("got_eof()"); - } - -public: - tp_reader(std::istream& is) : - detail::atf_tp_reader(is) - { - } - - void - read(void) - { - atf_tp_reader::read(); - } - - std::vector< std::string > m_calls; -}; - -ATF_TEST_CASE_WITHOUT_HEAD(tp_1); -ATF_TEST_CASE_BODY(tp_1) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "ident: test_case_1\n" - "\n" - "ident: test_case_2\n" - "\n" - "ident: test_case_3\n" - ; - - const char* exp_calls[] = { - "got_tc(test_case_1, {ident=test_case_1})", - "got_tc(test_case_2, {ident=test_case_2})", - "got_tc(test_case_3, {ident=test_case_3})", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_2); -ATF_TEST_CASE_BODY(tp_2) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "ident: test_case_1\n" - "descr: This is the description\n" - "timeout: 300\n" - "\n" - "ident: test_case_2\n" - "\n" - "ident: test_case_3\n" - "X-prop1: A custom property\n" - "descr: Third test case\n" - ; - - // NO_CHECK_STYLE_BEGIN - const char* exp_calls[] = { - "got_tc(test_case_1, {descr=This is the description, ident=test_case_1, timeout=300})", - "got_tc(test_case_2, {ident=test_case_2})", - "got_tc(test_case_3, {X-prop1=A custom property, descr=Third test case, ident=test_case_3})", - "got_eof()", - NULL - }; - // NO_CHECK_STYLE_END - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_3); -ATF_TEST_CASE_BODY(tp_3) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "ident: single_test\n" - "descr: Some description\n" - "timeout: 300\n" - "require.arch: thearch\n" - "require.config: foo-bar\n" - "require.machine: themachine\n" - "require.progs: /bin/cp mv\n" - "require.user: root\n" - ; - - // NO_CHECK_STYLE_BEGIN - const char* exp_calls[] = { - "got_tc(single_test, {descr=Some description, ident=single_test, require.arch=thearch, require.config=foo-bar, require.machine=themachine, require.progs=/bin/cp mv, require.user=root, timeout=300})", - "got_eof()", - NULL - }; - // NO_CHECK_STYLE_END - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_4); -ATF_TEST_CASE_BODY(tp_4) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "ident: single_test \n" - "descr: Some description \n" - ; - - const char* exp_calls[] = { - "got_tc(single_test, {descr=Some description, ident=single_test})", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_50); -ATF_TEST_CASE_BODY(tp_50) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected property name", - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_51); -ATF_TEST_CASE_BODY(tp_51) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "\n" - "\n" - "\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected property name", - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_52); -ATF_TEST_CASE_BODY(tp_52) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "ident: test1\n" - "ident: test2\n" - ; - - const char* exp_calls[] = { - "got_tc(test1, {ident=test1})", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_53); -ATF_TEST_CASE_BODY(tp_53) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "descr: Out of order\n" - "ident: test1\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: First property of a test case must be 'ident'", - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_54); -ATF_TEST_CASE_BODY(tp_54) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "ident:\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: The value for 'ident' cannot be empty", - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_55); -ATF_TEST_CASE_BODY(tp_55) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "ident: +*,\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: The identifier must match ^[_A-Za-z0-9]+$; was '+*,'", - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_56); -ATF_TEST_CASE_BODY(tp_56) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "ident: test\n" - "timeout: hello\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "4: The timeout property requires an integer value", - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_57); -ATF_TEST_CASE_BODY(tp_57) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "ident: test\n" - "unknown: property\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "4: Unknown property 'unknown'", - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_58); -ATF_TEST_CASE_BODY(tp_58) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "ident: test\n" - "X-foo:\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "4: The value for 'X-foo' cannot be empty", - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(tp_59); -ATF_TEST_CASE_BODY(tp_59) -{ - const char* input = - "Content-Type: application/X-atf-tp; version=\"1\"\n" - "\n" - "\n" - "ident: test\n" - "timeout: 300\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected property name", - NULL - }; - - do_parser_test< tp_reader >(input, exp_calls, exp_errors); -} - -// ------------------------------------------------------------------------- -// Tests for the "tps" writer. -// ------------------------------------------------------------------------- - -ATF_TEST_CASE(atf_tps_writer); -ATF_TEST_CASE_HEAD(atf_tps_writer) -{ - set_md_var("descr", "Verifies the application/X-atf-tps writer"); -} -ATF_TEST_CASE_BODY(atf_tps_writer) -{ - std::ostringstream expss; - std::ostringstream ss; - -#define RESET \ - expss.str(""); \ - ss.str("") - -#define CHECK \ - check_equal(*this, ss.str(), expss.str()) - - { - RESET; - - impl::atf_tps_writer w(ss); - expss << "Content-Type: application/X-atf-tps; version=\"2\"\n\n"; - CHECK; - } - - { - RESET; - - impl::atf_tps_writer w(ss); - expss << "Content-Type: application/X-atf-tps; version=\"2\"\n\n"; - CHECK; - - w.info("foo", "bar"); - expss << "info: foo, bar\n"; - CHECK; - - w.info("baz", "second info"); - expss << "info: baz, second info\n"; - CHECK; - } - - { - RESET; - - impl::atf_tps_writer w(ss); - expss << "Content-Type: application/X-atf-tps; version=\"2\"\n\n"; - CHECK; - - w.ntps(0); - expss << "tps-count: 0\n"; - CHECK; - } - - { - RESET; - - impl::atf_tps_writer w(ss); - expss << "Content-Type: application/X-atf-tps; version=\"2\"\n\n"; - CHECK; - - w.ntps(123); - expss << "tps-count: 123\n"; - CHECK; - } - - { - RESET; - - impl::atf_tps_writer w(ss); - expss << "Content-Type: application/X-atf-tps; version=\"2\"\n\n"; - CHECK; - - w.ntps(2); - expss << "tps-count: 2\n"; - CHECK; - - w.start_tp("foo", 0); - expss << "tp-start: foo, 0\n"; - CHECK; - - w.end_tp(""); - expss << "tp-end: foo\n"; - CHECK; - - w.start_tp("bar", 0); - expss << "tp-start: bar, 0\n"; - CHECK; - - w.end_tp("failed program"); - expss << "tp-end: bar, failed program\n"; - CHECK; - } - - { - RESET; - - impl::atf_tps_writer w(ss); - expss << "Content-Type: application/X-atf-tps; version=\"2\"\n\n"; - CHECK; - - w.ntps(1); - expss << "tps-count: 1\n"; - CHECK; - - w.start_tp("foo", 1); - expss << "tp-start: foo, 1\n"; - CHECK; - - w.start_tc("brokentc"); - expss << "tc-start: brokentc\n"; - CHECK; - - w.end_tp("aborted"); - expss << "tp-end: foo, aborted\n"; - CHECK; - } - - { - RESET; - - impl::atf_tps_writer w(ss); - expss << "Content-Type: application/X-atf-tps; version=\"2\"\n\n"; - CHECK; - - w.ntps(1); - expss << "tps-count: 1\n"; - CHECK; - - w.start_tp("thetp", 3); - expss << "tp-start: thetp, 3\n"; - CHECK; - - w.start_tc("passtc"); - expss << "tc-start: passtc\n"; - CHECK; - - w.end_tc("passed", ""); - expss << "tc-end: passtc, passed\n"; - CHECK; - - w.start_tc("failtc"); - expss << "tc-start: failtc\n"; - CHECK; - - w.end_tc("failed", "The reason"); - expss << "tc-end: failtc, failed, The reason\n"; - CHECK; - - w.start_tc("skiptc"); - expss << "tc-start: skiptc\n"; - CHECK; - - w.end_tc("skipped", "The reason"); - expss << "tc-end: skiptc, skipped, The reason\n"; - CHECK; - - w.end_tp(""); - expss << "tp-end: thetp\n"; - CHECK; - } - - { - RESET; - - impl::atf_tps_writer w(ss); - expss << "Content-Type: application/X-atf-tps; version=\"2\"\n\n"; - CHECK; - - w.ntps(1); - expss << "tps-count: 1\n"; - CHECK; - - w.start_tp("thetp", 1); - expss << "tp-start: thetp, 1\n"; - CHECK; - - w.start_tc("thetc"); - expss << "tc-start: thetc\n"; - CHECK; - - w.stdout_tc("a line"); - expss << "tc-so:a line\n"; - CHECK; - - w.stdout_tc("another line"); - expss << "tc-so:another line\n"; - CHECK; - - w.stderr_tc("an error message"); - expss << "tc-se:an error message\n"; - CHECK; - - w.end_tc("passed", ""); - expss << "tc-end: thetc, passed\n"; - CHECK; - - w.end_tp(""); - expss << "tp-end: thetp\n"; - CHECK; - } - - { - RESET; - - impl::atf_tps_writer w(ss); - expss << "Content-Type: application/X-atf-tps; version=\"2\"\n\n"; - CHECK; - - w.ntps(1); - expss << "tps-count: 1\n"; - CHECK; - - w.start_tp("thetp", 0); - expss << "tp-start: thetp, 0\n"; - CHECK; - - w.end_tp(""); - expss << "tp-end: thetp\n"; - CHECK; - - w.info("foo", "bar"); - expss << "info: foo, bar\n"; - CHECK; - - w.info("baz", "second value"); - expss << "info: baz, second value\n"; - CHECK; - } - -#undef CHECK -#undef RESET -} - -// ------------------------------------------------------------------------- -// Tests for the free functions. -// ------------------------------------------------------------------------- - -ATF_TEST_CASE(get_metadata_bad); -ATF_TEST_CASE_HEAD(get_metadata_bad) {} -ATF_TEST_CASE_BODY(get_metadata_bad) { - const atf::fs::path executable = get_helper(*this, "bad_metadata_helper"); - ATF_REQUIRE_THROW(atf::parser::parse_errors, - impl::get_metadata(executable, vars_map())); -} - -ATF_TEST_CASE(get_metadata_zero_tcs); -ATF_TEST_CASE_HEAD(get_metadata_zero_tcs) {} -ATF_TEST_CASE_BODY(get_metadata_zero_tcs) { - const atf::fs::path executable = get_helper(*this, "zero_tcs_helper"); - ATF_REQUIRE_THROW(atf::parser::parse_errors, - impl::get_metadata(executable, vars_map())); -} - -ATF_TEST_CASE(get_metadata_several_tcs); -ATF_TEST_CASE_HEAD(get_metadata_several_tcs) {} -ATF_TEST_CASE_BODY(get_metadata_several_tcs) { - const atf::fs::path executable = get_helper(*this, "several_tcs_helper"); - const impl::metadata md = impl::get_metadata(executable, vars_map()); - ATF_REQUIRE_EQ(3, md.test_cases.size()); - - { - const impl::test_cases_map::const_iterator iter = - md.test_cases.find("first"); - ATF_REQUIRE(iter != md.test_cases.end()); - - ATF_REQUIRE_EQ(4, (*iter).second.size()); - check_property((*iter).second, "descr", "Description 1"); - check_property((*iter).second, "has.cleanup", "false"); - check_property((*iter).second, "ident", "first"); - check_property((*iter).second, "timeout", "300"); - } - - { - const impl::test_cases_map::const_iterator iter = - md.test_cases.find("second"); - ATF_REQUIRE(iter != md.test_cases.end()); - - ATF_REQUIRE_EQ(5, (*iter).second.size()); - check_property((*iter).second, "descr", "Description 2"); - check_property((*iter).second, "has.cleanup", "true"); - check_property((*iter).second, "ident", "second"); - check_property((*iter).second, "timeout", "500"); - check_property((*iter).second, "X-property", "Custom property"); - } - - { - const impl::test_cases_map::const_iterator iter = - md.test_cases.find("third"); - ATF_REQUIRE(iter != md.test_cases.end()); - - ATF_REQUIRE_EQ(3, (*iter).second.size()); - check_property((*iter).second, "has.cleanup", "false"); - check_property((*iter).second, "ident", "third"); - check_property((*iter).second, "timeout", "300"); - } -} - -ATF_TEST_CASE_WITHOUT_HEAD(parse_test_case_result_expected_death); -ATF_TEST_CASE_BODY(parse_test_case_result_expected_death) { - check_result("expected_death", -1, "foo bar", - detail::parse_test_case_result("expected_death: foo bar")); - - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("expected_death")); - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("expected_death(3): foo")); -} - -ATF_TEST_CASE_WITHOUT_HEAD(parse_test_case_result_expected_exit); -ATF_TEST_CASE_BODY(parse_test_case_result_expected_exit) { - check_result("expected_exit", -1, "foo bar", - detail::parse_test_case_result("expected_exit: foo bar")); - check_result("expected_exit", -1, "foo bar", - detail::parse_test_case_result("expected_exit(): foo bar")); - check_result("expected_exit", 5, "foo bar", - detail::parse_test_case_result("expected_exit(5): foo bar")); - - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("expected_exit")); - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("expected_exit(")); -} - -ATF_TEST_CASE_WITHOUT_HEAD(parse_test_case_result_expected_failure); -ATF_TEST_CASE_BODY(parse_test_case_result_expected_failure) { - check_result("expected_failure", -1, "foo bar", - detail::parse_test_case_result("expected_failure: foo bar")); - - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("expected_failure")); - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("expected_failure(3): foo")); -} - -ATF_TEST_CASE_WITHOUT_HEAD(parse_test_case_result_expected_signal); -ATF_TEST_CASE_BODY(parse_test_case_result_expected_signal) { - check_result("expected_signal", -1, "foo bar", - detail::parse_test_case_result("expected_signal: foo bar")); - check_result("expected_signal", -1, "foo bar", - detail::parse_test_case_result("expected_signal(): foo bar")); - check_result("expected_signal", 5, "foo bar", - detail::parse_test_case_result("expected_signal(5): foo bar")); - - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("expected_signal")); - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("expected_signal(")); -} - -ATF_TEST_CASE_WITHOUT_HEAD(parse_test_case_result_expected_timeout); -ATF_TEST_CASE_BODY(parse_test_case_result_expected_timeout) { - check_result("expected_timeout", -1, "foo bar", - detail::parse_test_case_result("expected_timeout: foo bar")); - - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("expected_timeout")); - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("expected_timeout(3): foo")); -} - -ATF_TEST_CASE_WITHOUT_HEAD(parse_test_case_result_failed); -ATF_TEST_CASE_BODY(parse_test_case_result_failed) { - check_result("failed", -1, "foo bar", - detail::parse_test_case_result("failed: foo bar")); - - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("failed")); - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("failed(3): foo")); -} - -ATF_TEST_CASE_WITHOUT_HEAD(parse_test_case_result_passed); -ATF_TEST_CASE_BODY(parse_test_case_result_passed) { - check_result("passed", -1, "", - detail::parse_test_case_result("passed")); - - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("passed: foo")); - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("passed(3): foo")); -} - -ATF_TEST_CASE_WITHOUT_HEAD(parse_test_case_result_skipped); -ATF_TEST_CASE_BODY(parse_test_case_result_skipped) { - check_result("skipped", -1, "foo bar", - detail::parse_test_case_result("skipped: foo bar")); - - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("skipped")); - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("skipped(3): foo")); -} - -ATF_TEST_CASE_WITHOUT_HEAD(parse_test_case_result_unknown); -ATF_TEST_CASE_BODY(parse_test_case_result_unknown) { - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("foo")); - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("bar: foo")); - ATF_REQUIRE_THROW(std::runtime_error, - detail::parse_test_case_result("baz: foo")); -} - -ATF_TEST_CASE_WITHOUT_HEAD(read_test_case_result_failed); -ATF_TEST_CASE_BODY(read_test_case_result_failed) { - write_test_case_result("resfile", "failed: foo bar\n"); - const impl::test_case_result tcr = impl::read_test_case_result( - atf::fs::path("resfile")); - ATF_REQUIRE_EQ("failed", tcr.state()); - ATF_REQUIRE_EQ("foo bar", tcr.reason()); -} - -ATF_TEST_CASE_WITHOUT_HEAD(read_test_case_result_skipped); -ATF_TEST_CASE_BODY(read_test_case_result_skipped) { - write_test_case_result("resfile", "skipped: baz bar\n"); - const impl::test_case_result tcr = impl::read_test_case_result( - atf::fs::path("resfile")); - ATF_REQUIRE_EQ("skipped", tcr.state()); - ATF_REQUIRE_EQ("baz bar", tcr.reason()); -} - - -ATF_TEST_CASE(read_test_case_result_no_file); -ATF_TEST_CASE_HEAD(read_test_case_result_no_file) {} -ATF_TEST_CASE_BODY(read_test_case_result_no_file) { - ATF_REQUIRE_THROW(std::runtime_error, - impl::read_test_case_result(atf::fs::path("resfile"))); -} - -ATF_TEST_CASE_WITHOUT_HEAD(read_test_case_result_empty_file); -ATF_TEST_CASE_BODY(read_test_case_result_empty_file) { - write_test_case_result("resfile", ""); - ATF_REQUIRE_THROW(std::runtime_error, - impl::read_test_case_result(atf::fs::path("resfile"))); -} - -ATF_TEST_CASE_WITHOUT_HEAD(read_test_case_result_invalid); -ATF_TEST_CASE_BODY(read_test_case_result_invalid) { - write_test_case_result("resfile", "passed: hello\n"); - ATF_REQUIRE_THROW(std::runtime_error, - impl::read_test_case_result(atf::fs::path("resfile"))); -} - -ATF_TEST_CASE_WITHOUT_HEAD(read_test_case_result_multiline); -ATF_TEST_CASE_BODY(read_test_case_result_multiline) { - write_test_case_result("resfile", "skipped: foo\nbar\n"); - const impl::test_case_result tcr = impl::read_test_case_result( - atf::fs::path("resfile")); - ATF_REQUIRE_EQ("skipped", tcr.state()); - ATF_REQUIRE_EQ("foo<>bar", tcr.reason()); -} - -// ------------------------------------------------------------------------- -// Main. -// ------------------------------------------------------------------------- - -ATF_INIT_TEST_CASES(tcs) -{ - ATF_ADD_TEST_CASE(tcs, tp_1); - ATF_ADD_TEST_CASE(tcs, tp_2); - ATF_ADD_TEST_CASE(tcs, tp_3); - ATF_ADD_TEST_CASE(tcs, tp_4); - ATF_ADD_TEST_CASE(tcs, tp_50); - ATF_ADD_TEST_CASE(tcs, tp_51); - ATF_ADD_TEST_CASE(tcs, tp_52); - ATF_ADD_TEST_CASE(tcs, tp_53); - ATF_ADD_TEST_CASE(tcs, tp_54); - ATF_ADD_TEST_CASE(tcs, tp_55); - ATF_ADD_TEST_CASE(tcs, tp_56); - ATF_ADD_TEST_CASE(tcs, tp_57); - ATF_ADD_TEST_CASE(tcs, tp_58); - ATF_ADD_TEST_CASE(tcs, tp_59); - - ATF_ADD_TEST_CASE(tcs, atf_tps_writer); - - ATF_ADD_TEST_CASE(tcs, get_metadata_bad); - ATF_ADD_TEST_CASE(tcs, get_metadata_zero_tcs); - ATF_ADD_TEST_CASE(tcs, get_metadata_several_tcs); - - ATF_ADD_TEST_CASE(tcs, parse_test_case_result_expected_death); - ATF_ADD_TEST_CASE(tcs, parse_test_case_result_expected_exit); - ATF_ADD_TEST_CASE(tcs, parse_test_case_result_expected_failure); - ATF_ADD_TEST_CASE(tcs, parse_test_case_result_expected_signal); - ATF_ADD_TEST_CASE(tcs, parse_test_case_result_expected_timeout); - ATF_ADD_TEST_CASE(tcs, parse_test_case_result_failed); - ATF_ADD_TEST_CASE(tcs, parse_test_case_result_passed); - ATF_ADD_TEST_CASE(tcs, parse_test_case_result_skipped); - ATF_ADD_TEST_CASE(tcs, parse_test_case_result_unknown); - - ATF_ADD_TEST_CASE(tcs, read_test_case_result_no_file); - ATF_ADD_TEST_CASE(tcs, read_test_case_result_empty_file); - ATF_ADD_TEST_CASE(tcs, read_test_case_result_multiline); - ATF_ADD_TEST_CASE(tcs, read_test_case_result_invalid); - - // TODO: Add tests for run_test_case once all the missing functionality - // is implemented. -} Index: vendor/NetBSD/atf/dist/dist/atf-run/signals.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/signals.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/signals.cpp (nonexistent) @@ -1,147 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -extern "C" { -#include -#include -} - -#include - -#include "atf-c++/detail/exceptions.hpp" -#include "atf-c++/detail/sanity.hpp" - -#include "signals.hpp" - -namespace impl = atf::atf_run; -#define IMPL_NAME "atf::atf_run" - -const int impl::last_signo = LAST_SIGNO; - -// ------------------------------------------------------------------------ -// The "signal_holder" class. -// ------------------------------------------------------------------------ - -namespace { - -static bool happened[LAST_SIGNO + 1]; - -static -void -holder_handler(const int signo) -{ - happened[signo] = true; -} - -} // anonymous namespace - -impl::signal_holder::signal_holder(const int signo) : - m_signo(signo), - m_sp(NULL) -{ - happened[signo] = false; - m_sp = new signal_programmer(m_signo, holder_handler); -} - -impl::signal_holder::~signal_holder(void) -{ - if (m_sp != NULL) - delete m_sp; - - if (happened[m_signo]) - ::kill(::getpid(), m_signo); -} - -void -impl::signal_holder::process(void) -{ - if (happened[m_signo]) { - delete m_sp; - m_sp = NULL; - happened[m_signo] = false; - ::kill(::getpid(), m_signo); - m_sp = new signal_programmer(m_signo, holder_handler); - } -} - -// ------------------------------------------------------------------------ -// The "signal_programmer" class. -// ------------------------------------------------------------------------ - -impl::signal_programmer::signal_programmer(const int signo, const handler h) : - m_signo(signo), - m_handler(h), - m_programmed(false) -{ - struct ::sigaction sa; - - sa.sa_handler = m_handler; - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - - if (::sigaction(m_signo, &sa, &m_oldsa) == -1) - throw atf::system_error(IMPL_NAME, "Could not install handler for " - "signal", errno); - m_programmed = true; -} - -impl::signal_programmer::~signal_programmer(void) -{ - unprogram(); -} - -void -impl::signal_programmer::unprogram(void) -{ - if (m_programmed) { - if (::sigaction(m_signo, &m_oldsa, NULL) == -1) - UNREACHABLE; - m_programmed = false; - } -} - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -void -impl::reset(const int signo) -{ - struct ::sigaction sa; - - sa.sa_handler = SIG_DFL; - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - - (void)::sigaction(signo, &sa, NULL); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/pass_helper.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/pass_helper.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/pass_helper.cpp (nonexistent) @@ -1,44 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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 "atf-c++/macros.hpp" - -ATF_TEST_CASE(main); -ATF_TEST_CASE_HEAD(main) -{ - set_md_var("descr", "Helper test case that always passes"); -} -ATF_TEST_CASE_BODY(main) -{ -} - -ATF_INIT_TEST_CASES(tcs) -{ - ATF_ADD_TEST_CASE(tcs, main); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/misc_helpers.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/misc_helpers.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/misc_helpers.cpp (nonexistent) @@ -1,374 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include - -#include -#include -} - -#include -#include -#include -#include -#include -#include - -#include "atf-c++/macros.hpp" - -#include "atf-c++/detail/env.hpp" -#include "atf-c++/detail/fs.hpp" -#include "atf-c++/detail/process.hpp" -#include "atf-c++/detail/sanity.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static -void -touch(const std::string& path) -{ - std::ofstream os(path.c_str()); - if (!os) - ATF_FAIL("Could not create file " + path); - os.close(); -} - -// ------------------------------------------------------------------------ -// Helper tests for "t_integration". -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(config); -ATF_TEST_CASE_HEAD(config) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(config) -{ - std::cout << "1st: " << get_config_var("1st") << "\n"; - std::cout << "2nd: " << get_config_var("2nd") << "\n"; - std::cout << "3rd: " << get_config_var("3rd") << "\n"; - std::cout << "4th: " << get_config_var("4th") << "\n"; -} - -ATF_TEST_CASE(fds); -ATF_TEST_CASE_HEAD(fds) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(fds) -{ - std::cout << "msg1 to stdout" << "\n"; - std::cout << "msg2 to stdout" << "\n"; - std::cerr << "msg1 to stderr" << "\n"; - std::cerr << "msg2 to stderr" << "\n"; -} - -ATF_TEST_CASE_WITHOUT_HEAD(mux_streams); -ATF_TEST_CASE_BODY(mux_streams) -{ - for (size_t i = 0; i < 10000; i++) { - switch (i % 5) { - case 0: - std::cout << "stdout " << i << "\n"; - break; - case 1: - std::cerr << "stderr " << i << "\n"; - break; - case 2: - std::cout << "stdout " << i << "\n"; - std::cerr << "stderr " << i << "\n"; - break; - case 3: - std::cout << "stdout " << i << "\n"; - std::cout << "stdout " << i << "\n"; - std::cerr << "stderr " << i << "\n"; - break; - case 4: - std::cout << "stdout " << i << "\n"; - std::cerr << "stderr " << i << "\n"; - std::cerr << "stderr " << i << "\n"; - break; - default: - UNREACHABLE; - } - } -} - -ATF_TEST_CASE(testvar); -ATF_TEST_CASE_HEAD(testvar) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(testvar) -{ - if (!has_config_var("testvar")) - fail("testvar variable not defined"); - std::cout << "testvar: " << get_config_var("testvar") << "\n"; -} - -ATF_TEST_CASE(env_list); -ATF_TEST_CASE_HEAD(env_list) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(env_list) -{ - const atf::process::status s = - atf::process::exec(atf::fs::path("env"), - atf::process::argv_array("env", NULL), - atf::process::stream_inherit(), - atf::process::stream_inherit()); - ATF_REQUIRE(s.exited()); - ATF_REQUIRE(s.exitstatus() == EXIT_SUCCESS); -} - -ATF_TEST_CASE(env_home); -ATF_TEST_CASE_HEAD(env_home) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(env_home) -{ - ATF_REQUIRE(atf::env::has("HOME")); - atf::fs::path p(atf::env::get("HOME")); - atf::fs::file_info fi1(p); - atf::fs::file_info fi2(atf::fs::path(".")); - ATF_REQUIRE_EQ(fi1.get_device(), fi2.get_device()); - ATF_REQUIRE_EQ(fi1.get_inode(), fi2.get_inode()); -} - -ATF_TEST_CASE(umask); -ATF_TEST_CASE_HEAD(umask) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(umask) -{ - mode_t m = ::umask(0); - std::cout << "umask: " << std::setw(4) << std::setfill('0') - << std::oct << m << "\n"; - (void)::umask(m); -} - -ATF_TEST_CASE_WITH_CLEANUP(cleanup_states); -ATF_TEST_CASE_HEAD(cleanup_states) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(cleanup_states) -{ - touch(get_config_var("statedir") + "/to-delete"); - touch(get_config_var("statedir") + "/to-stay"); - - if (get_config_var("state") == "fail") - ATF_FAIL("On purpose"); - else if (get_config_var("state") == "skip") - ATF_SKIP("On purpose"); -} -ATF_TEST_CASE_CLEANUP(cleanup_states) -{ - atf::fs::remove(atf::fs::path(get_config_var("statedir") + "/to-delete")); -} - -ATF_TEST_CASE_WITH_CLEANUP(cleanup_curdir); -ATF_TEST_CASE_HEAD(cleanup_curdir) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(cleanup_curdir) -{ - std::ofstream os("oldvalue"); - if (!os) - ATF_FAIL("Failed to create oldvalue file"); - os << 1234; - os.close(); -} -ATF_TEST_CASE_CLEANUP(cleanup_curdir) -{ - std::ifstream is("oldvalue"); - if (is) { - int i; - is >> i; - std::cout << "Old value: " << i << "\n"; - is.close(); - } -} - -ATF_TEST_CASE(require_arch); -ATF_TEST_CASE_HEAD(require_arch) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.arch", get_config_var("arch", "not-set")); -} -ATF_TEST_CASE_BODY(require_arch) -{ -} - -ATF_TEST_CASE(require_config); -ATF_TEST_CASE_HEAD(require_config) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.config", "var1 var2"); -} -ATF_TEST_CASE_BODY(require_config) -{ - std::cout << "var1: " << get_config_var("var1") << "\n"; - std::cout << "var2: " << get_config_var("var2") << "\n"; -} - -ATF_TEST_CASE(require_machine); -ATF_TEST_CASE_HEAD(require_machine) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.machine", get_config_var("machine", "not-set")); -} -ATF_TEST_CASE_BODY(require_machine) -{ -} - -ATF_TEST_CASE(require_progs); -ATF_TEST_CASE_HEAD(require_progs) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.progs", get_config_var("progs", "not-set")); -} -ATF_TEST_CASE_BODY(require_progs) -{ -} - -ATF_TEST_CASE(require_user); -ATF_TEST_CASE_HEAD(require_user) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.user", get_config_var("user", "not-set")); -} -ATF_TEST_CASE_BODY(require_user) -{ -} - -ATF_TEST_CASE(timeout); -ATF_TEST_CASE_HEAD(timeout) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("timeout", "1"); -} -ATF_TEST_CASE_BODY(timeout) -{ - sleep(10); - touch(get_config_var("statedir") + "/finished"); -} - -ATF_TEST_CASE(timeout_forkexit); -ATF_TEST_CASE_HEAD(timeout_forkexit) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(timeout_forkexit) -{ - pid_t pid = fork(); - ATF_REQUIRE(pid != -1); - - if (pid == 0) { - sigset_t mask; - sigemptyset(&mask); - - std::cout << "Waiting in subprocess\n"; - std::cout.flush(); - ::sigsuspend(&mask); - - touch(get_config_var("statedir") + "/child-finished"); - std::cout << "Subprocess exiting\n"; - std::cout.flush(); - exit(EXIT_SUCCESS); - } else { - // Don't wait for the child process and let atf-run deal with it. - touch(get_config_var("statedir") + "/parent-finished"); - std::cout << "Parent process exiting\n"; - ATF_PASS(); - } -} - -ATF_TEST_CASE(use_fs); -ATF_TEST_CASE_HEAD(use_fs) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("use.fs", "this-is-deprecated"); -} -ATF_TEST_CASE_BODY(use_fs) -{ - touch("test-file"); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - std::string which = atf::env::get("TESTCASE"); - - // Add helper tests for t_integration. - if (which == "config") - ATF_ADD_TEST_CASE(tcs, config); - if (which == "fds") - ATF_ADD_TEST_CASE(tcs, fds); - if (which == "mux_streams") - ATF_ADD_TEST_CASE(tcs, mux_streams); - if (which == "testvar") - ATF_ADD_TEST_CASE(tcs, testvar); - if (which == "env_list") - ATF_ADD_TEST_CASE(tcs, env_list); - if (which == "env_home") - ATF_ADD_TEST_CASE(tcs, env_home); - if (which == "umask") - ATF_ADD_TEST_CASE(tcs, umask); - if (which == "cleanup_states") - ATF_ADD_TEST_CASE(tcs, cleanup_states); - if (which == "cleanup_curdir") - ATF_ADD_TEST_CASE(tcs, cleanup_curdir); - if (which == "require_arch") - ATF_ADD_TEST_CASE(tcs, require_arch); - if (which == "require_config") - ATF_ADD_TEST_CASE(tcs, require_config); - if (which == "require_machine") - ATF_ADD_TEST_CASE(tcs, require_machine); - if (which == "require_progs") - ATF_ADD_TEST_CASE(tcs, require_progs); - if (which == "require_user") - ATF_ADD_TEST_CASE(tcs, require_user); - if (which == "timeout") - ATF_ADD_TEST_CASE(tcs, timeout); - if (which == "timeout_forkexit") - ATF_ADD_TEST_CASE(tcs, timeout_forkexit); - if (which == "use_fs") - ATF_ADD_TEST_CASE(tcs, use_fs); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/signals.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/signals.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/signals.hpp (nonexistent) @@ -1,92 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_RUN_SIGNALS_HPP_) -#define _ATF_RUN_SIGNALS_HPP_ - -extern "C" { -#include -} - -namespace atf { -namespace atf_run { - -extern const int last_signo; -typedef void (*handler)(const int); - -class signal_programmer; - -// ------------------------------------------------------------------------ -// The "signal_holder" class. -// ------------------------------------------------------------------------ - -// -// A RAII model to hold a signal while the object is alive. -// -class signal_holder { - const int m_signo; - signal_programmer* m_sp; - -public: - signal_holder(const int); - ~signal_holder(void); - - void process(void); -}; - -// ------------------------------------------------------------------------ -// The "signal_programmer" class. -// ------------------------------------------------------------------------ - -// -// A RAII model to program a signal while the object is alive. -// -class signal_programmer { - const int m_signo; - const handler m_handler; - bool m_programmed; - struct sigaction m_oldsa; - -public: - signal_programmer(const int, const handler); - ~signal_programmer(void); - - void unprogram(void); -}; - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -void reset(const int); - -} // namespace atf_run -} // namespace atf - -#endif // !defined(_ATF_RUN_SIGNALS_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-run/requirements_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/requirements_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/requirements_test.cpp (nonexistent) @@ -1,305 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2010 The NetBSD Foundation, Inc. -// 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 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 "atf-c++/config.hpp" -#include "atf-c++/macros.hpp" - -#include "requirements.hpp" -#include "user.hpp" - -namespace impl = atf::atf_run; - -// ------------------------------------------------------------------------- -// Auxiliary functions. -// ------------------------------------------------------------------------- - -namespace { - -const atf::tests::vars_map no_config; - -void -do_check(const std::string& expected, const atf::tests::vars_map& metadata, - const atf::tests::vars_map& config = no_config) -{ - const std::string actual = impl::check_requirements(metadata, config); - if (actual != expected) - ATF_FAIL("Requirements failure reason \"" + actual + "\" does not " - "match \"" + expected + "\""); -} - -} // anonymous namespace - -// ------------------------------------------------------------------------- -// Tests for the require.arch metadata property. -// ------------------------------------------------------------------------- - -ATF_TEST_CASE(require_arch_one_ok); -ATF_TEST_CASE_HEAD(require_arch_one_ok) {} -ATF_TEST_CASE_BODY(require_arch_one_ok) { - atf::tests::vars_map metadata; - metadata["require.arch"] = atf::config::get("atf_arch"); - do_check("", metadata); -} - -ATF_TEST_CASE(require_arch_one_fail); -ATF_TEST_CASE_HEAD(require_arch_one_fail) {} -ATF_TEST_CASE_BODY(require_arch_one_fail) { - atf::tests::vars_map metadata; - metadata["require.arch"] = "__fake_arch__"; - do_check("Requires the '__fake_arch__' architecture", metadata); -} - -ATF_TEST_CASE(require_arch_many_ok); -ATF_TEST_CASE_HEAD(require_arch_many_ok) {} -ATF_TEST_CASE_BODY(require_arch_many_ok) { - atf::tests::vars_map metadata; - metadata["require.arch"] = "__foo__ " + atf::config::get("atf_arch") + - " __bar__"; - do_check("", metadata); -} - -ATF_TEST_CASE(require_arch_many_fail); -ATF_TEST_CASE_HEAD(require_arch_many_fail) {} -ATF_TEST_CASE_BODY(require_arch_many_fail) { - atf::tests::vars_map metadata; - metadata["require.arch"] = "__foo__ __bar__ __baz__"; - do_check("Requires one of the '__foo__ __bar__ __baz__' architectures", - metadata); -} - -// ------------------------------------------------------------------------- -// Tests for the require.config metadata property. -// ------------------------------------------------------------------------- - -ATF_TEST_CASE(require_config_one_ok); -ATF_TEST_CASE_HEAD(require_config_one_ok) {} -ATF_TEST_CASE_BODY(require_config_one_ok) { - atf::tests::vars_map metadata, config; - metadata["require.config"] = "var1"; - config["var1"] = "some-value"; - do_check("", metadata, config); -} - -ATF_TEST_CASE(require_config_one_fail); -ATF_TEST_CASE_HEAD(require_config_one_fail) {} -ATF_TEST_CASE_BODY(require_config_one_fail) { - atf::tests::vars_map metadata, config; - metadata["require.config"] = "var1"; - do_check("Required configuration variable 'var1' not defined", metadata, - config); -} - -ATF_TEST_CASE(require_config_many_ok); -ATF_TEST_CASE_HEAD(require_config_many_ok) {} -ATF_TEST_CASE_BODY(require_config_many_ok) { - atf::tests::vars_map metadata, config; - metadata["require.config"] = "var1 var2 var3"; - config["var1"] = "first-value"; - config["var2"] = "second-value"; - config["var3"] = "third-value"; - do_check("", metadata, config); -} - -ATF_TEST_CASE(require_config_many_fail); -ATF_TEST_CASE_HEAD(require_config_many_fail) {} -ATF_TEST_CASE_BODY(require_config_many_fail) { - atf::tests::vars_map metadata, config; - metadata["require.config"] = "var1 var2 var3"; - config["var1"] = "first-value"; - config["var3"] = "third-value"; - do_check("Required configuration variable 'var2' not defined", metadata, - config); -} - -// ------------------------------------------------------------------------- -// Tests for the require.machine metadata property. -// ------------------------------------------------------------------------- - -ATF_TEST_CASE(require_machine_one_ok); -ATF_TEST_CASE_HEAD(require_machine_one_ok) {} -ATF_TEST_CASE_BODY(require_machine_one_ok) { - atf::tests::vars_map metadata; - metadata["require.machine"] = atf::config::get("atf_machine"); - do_check("", metadata); -} - -ATF_TEST_CASE(require_machine_one_fail); -ATF_TEST_CASE_HEAD(require_machine_one_fail) {} -ATF_TEST_CASE_BODY(require_machine_one_fail) { - atf::tests::vars_map metadata; - metadata["require.machine"] = "__fake_machine__"; - do_check("Requires the '__fake_machine__' machine type", metadata); -} - -ATF_TEST_CASE(require_machine_many_ok); -ATF_TEST_CASE_HEAD(require_machine_many_ok) {} -ATF_TEST_CASE_BODY(require_machine_many_ok) { - atf::tests::vars_map metadata; - metadata["require.machine"] = "__foo__ " + atf::config::get("atf_machine") + - " __bar__"; - do_check("", metadata); -} - -ATF_TEST_CASE(require_machine_many_fail); -ATF_TEST_CASE_HEAD(require_machine_many_fail) {} -ATF_TEST_CASE_BODY(require_machine_many_fail) { - atf::tests::vars_map metadata; - metadata["require.machine"] = "__foo__ __bar__ __baz__"; - do_check("Requires one of the '__foo__ __bar__ __baz__' machine types", - metadata); -} - -// ------------------------------------------------------------------------- -// Tests for the require.progs metadata property. -// ------------------------------------------------------------------------- - -ATF_TEST_CASE(require_progs_one_ok); -ATF_TEST_CASE_HEAD(require_progs_one_ok) {} -ATF_TEST_CASE_BODY(require_progs_one_ok) { - atf::tests::vars_map metadata; - metadata["require.progs"] = "cp"; - do_check("", metadata); -} - -ATF_TEST_CASE(require_progs_one_missing); -ATF_TEST_CASE_HEAD(require_progs_one_missing) {} -ATF_TEST_CASE_BODY(require_progs_one_missing) { - atf::tests::vars_map metadata; - metadata["require.progs"] = "cp __non-existent__"; - do_check("Required program '__non-existent__' not found in the PATH", - metadata); -} - -ATF_TEST_CASE(require_progs_one_fail); -ATF_TEST_CASE_HEAD(require_progs_one_fail) {} -ATF_TEST_CASE_BODY(require_progs_one_fail) { - atf::tests::vars_map metadata; - metadata["require.progs"] = "bin/cp"; - ATF_REQUIRE_THROW(std::runtime_error, - impl::check_requirements(metadata, no_config)); -} - -ATF_TEST_CASE(require_progs_many_ok); -ATF_TEST_CASE_HEAD(require_progs_many_ok) {} -ATF_TEST_CASE_BODY(require_progs_many_ok) { - atf::tests::vars_map metadata; - metadata["require.progs"] = "cp ls mv"; - do_check("", metadata); -} - -ATF_TEST_CASE(require_progs_many_missing); -ATF_TEST_CASE_HEAD(require_progs_many_missing) {} -ATF_TEST_CASE_BODY(require_progs_many_missing) { - atf::tests::vars_map metadata; - metadata["require.progs"] = "mv ls __foo__ cp"; - do_check("Required program '__foo__' not found in the PATH", metadata); -} - -ATF_TEST_CASE(require_progs_many_fail); -ATF_TEST_CASE_HEAD(require_progs_many_fail) {} -ATF_TEST_CASE_BODY(require_progs_many_fail) { - atf::tests::vars_map metadata; - metadata["require.progs"] = "ls cp ../bin/cp"; - ATF_REQUIRE_THROW(std::runtime_error, - impl::check_requirements(metadata, no_config)); -} - -// ------------------------------------------------------------------------- -// Tests for the require.user metadata property. -// ------------------------------------------------------------------------- - -ATF_TEST_CASE(require_user_root); -ATF_TEST_CASE_HEAD(require_user_root) {} -ATF_TEST_CASE_BODY(require_user_root) { - atf::tests::vars_map metadata; - metadata["require.user"] = "root"; - if (atf::atf_run::is_root()) - do_check("", metadata); - else - do_check("Requires root privileges", metadata); -} - -ATF_TEST_CASE(require_user_unprivileged); -ATF_TEST_CASE_HEAD(require_user_unprivileged) {} -ATF_TEST_CASE_BODY(require_user_unprivileged) { - atf::tests::vars_map metadata; - metadata["require.user"] = "unprivileged"; - if (atf::atf_run::is_root()) - do_check("Requires an unprivileged user and the 'unprivileged-user' " - "configuration variable is not set", metadata); - else - do_check("", metadata); -} - -ATF_TEST_CASE(require_user_fail); -ATF_TEST_CASE_HEAD(require_user_fail) {} -ATF_TEST_CASE_BODY(require_user_fail) { - atf::tests::vars_map metadata; - metadata["require.user"] = "nobody"; - ATF_REQUIRE_THROW(std::runtime_error, - impl::check_requirements(metadata, no_config)); -} - -// ------------------------------------------------------------------------- -// Main. -// ------------------------------------------------------------------------- - -ATF_INIT_TEST_CASES(tcs) -{ - // Add test cases for require.arch. - ATF_ADD_TEST_CASE(tcs, require_arch_one_ok); - ATF_ADD_TEST_CASE(tcs, require_arch_one_fail); - ATF_ADD_TEST_CASE(tcs, require_arch_many_ok); - ATF_ADD_TEST_CASE(tcs, require_arch_many_fail); - - // Add test cases for require.config. - ATF_ADD_TEST_CASE(tcs, require_config_one_ok); - ATF_ADD_TEST_CASE(tcs, require_config_one_fail); - ATF_ADD_TEST_CASE(tcs, require_config_many_ok); - ATF_ADD_TEST_CASE(tcs, require_config_many_fail); - - // Add test cases for require.machine. - ATF_ADD_TEST_CASE(tcs, require_machine_one_ok); - ATF_ADD_TEST_CASE(tcs, require_machine_one_fail); - ATF_ADD_TEST_CASE(tcs, require_machine_many_ok); - ATF_ADD_TEST_CASE(tcs, require_machine_many_fail); - - // Add test cases for require.progs. - ATF_ADD_TEST_CASE(tcs, require_progs_one_ok); - ATF_ADD_TEST_CASE(tcs, require_progs_one_missing); - ATF_ADD_TEST_CASE(tcs, require_progs_one_fail); - ATF_ADD_TEST_CASE(tcs, require_progs_many_ok); - ATF_ADD_TEST_CASE(tcs, require_progs_many_missing); - ATF_ADD_TEST_CASE(tcs, require_progs_many_fail); - - // Add test cases for require.user. - ATF_ADD_TEST_CASE(tcs, require_user_root); - ATF_ADD_TEST_CASE(tcs, require_user_unprivileged); - ATF_ADD_TEST_CASE(tcs, require_user_fail); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/requirements.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/requirements.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/requirements.hpp (nonexistent) @@ -1,44 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2010 The NetBSD Foundation, Inc. -// 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 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 -#include - -#include "atf-c++/tests.hpp" - -namespace atf { -namespace atf_run { - -std::string check_requirements(const atf::tests::vars_map&, - const atf::tests::vars_map&); -std::pair< int, int > get_required_user(const atf::tests::vars_map&, - const atf::tests::vars_map&); - -} // namespace atf_run -} // namespace atf Index: vendor/NetBSD/atf/dist/dist/atf-run/requirements.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/requirements.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/requirements.cpp (nonexistent) @@ -1,229 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -// TODO: We probably don't want to raise std::runtime_error for the errors -// detected in this file. -#include - -#include "atf-c++/config.hpp" - -#include "atf-c++/detail/fs.hpp" -#include "atf-c++/detail/env.hpp" -#include "atf-c++/detail/sanity.hpp" -#include "atf-c++/detail/text.hpp" - -#include "requirements.hpp" -#include "user.hpp" - -namespace impl = atf::atf_run; - -namespace { - -static -bool -has_program(const atf::fs::path& program) -{ - bool found = false; - - if (program.is_absolute()) { - found = atf::fs::is_executable(program); - } else { - if (program.str().find('/') != std::string::npos) - throw std::runtime_error("Relative paths are not allowed " - "when searching for a program (" + - program.str() + ")"); - - const std::vector< std::string > dirs = atf::text::split( - atf::env::get("PATH"), ":"); - for (std::vector< std::string >::const_iterator iter = dirs.begin(); - !found && iter != dirs.end(); iter++) { - const atf::fs::path& p = atf::fs::path(*iter) / program; - if (atf::fs::is_executable(p)) - found = true; - } - } - - return found; -} - -static -std::string -check_arch(const std::string& arches) -{ - const std::vector< std::string > v = atf::text::split(arches, " "); - - for (std::vector< std::string >::const_iterator iter = v.begin(); - iter != v.end(); iter++) { - if ((*iter) == atf::config::get("atf_arch")) - return ""; - } - - if (v.size() == 1) - return "Requires the '" + arches + "' architecture"; - else - return "Requires one of the '" + arches + "' architectures"; -} - -static -std::string -check_config(const std::string& variables, const atf::tests::vars_map& config) -{ - const std::vector< std::string > v = atf::text::split(variables, " "); - for (std::vector< std::string >::const_iterator iter = v.begin(); - iter != v.end(); iter++) { - if (config.find((*iter)) == config.end()) - return "Required configuration variable '" + (*iter) + "' not " - "defined"; - } - return ""; -} - -static -std::string -check_machine(const std::string& machines) -{ - const std::vector< std::string > v = atf::text::split(machines, " "); - - for (std::vector< std::string >::const_iterator iter = v.begin(); - iter != v.end(); iter++) { - if ((*iter) == atf::config::get("atf_machine")) - return ""; - } - - if (v.size() == 1) - return "Requires the '" + machines + "' machine type"; - else - return "Requires one of the '" + machines + "' machine types"; -} - -static -std::string -check_progs(const std::string& progs) -{ - const std::vector< std::string > v = atf::text::split(progs, " "); - for (std::vector< std::string >::const_iterator iter = v.begin(); - iter != v.end(); iter++) { - if (!has_program(atf::fs::path(*iter))) - return "Required program '" + (*iter) + "' not found in the PATH"; - } - return ""; -} - -static -std::string -check_user(const std::string& user, const atf::tests::vars_map& config) -{ - if (user == "root") { - if (!impl::is_root()) - return "Requires root privileges"; - else - return ""; - } else if (user == "unprivileged") { - if (impl::is_root()) { - const atf::tests::vars_map::const_iterator iter = config.find( - "unprivileged-user"); - if (iter == config.end()) - return "Requires an unprivileged user and the " - "'unprivileged-user' configuration variable is not set"; - else { - const std::string& unprivileged_user = (*iter).second; - try { - (void)impl::get_user_ids(unprivileged_user); - return ""; - } catch (const std::runtime_error& e) { - return "Failed to get information for user " + - unprivileged_user; - } - } - } else - return ""; - } else - throw std::runtime_error("Invalid value '" + user + "' for property " - "require.user"); -} - -} // anonymous namespace - -std::string -impl::check_requirements(const atf::tests::vars_map& metadata, - const atf::tests::vars_map& config) -{ - std::string failure_reason = ""; - - for (atf::tests::vars_map::const_iterator iter = metadata.begin(); - failure_reason.empty() && iter != metadata.end(); iter++) { - const std::string& name = (*iter).first; - const std::string& value = (*iter).second; - INV(!value.empty()); // Enforced by application/X-atf-tp parser. - - if (name == "require.arch") - failure_reason = check_arch(value); - else if (name == "require.config") - failure_reason = check_config(value, config); - else if (name == "require.machine") - failure_reason = check_machine(value); - else if (name == "require.progs") - failure_reason = check_progs(value); - else if (name == "require.user") - failure_reason = check_user(value, config); - else { - // Unknown require.* properties are forbidden by the - // application/X-atf-tp parser. - INV(failure_reason.find("require.") != 0); - } - } - - return failure_reason; -} - -std::pair< int, int > -impl::get_required_user(const atf::tests::vars_map& metadata, - const atf::tests::vars_map& config) -{ - const atf::tests::vars_map::const_iterator user = metadata.find( - "require.user"); - if (user == metadata.end()) - return std::make_pair(-1, -1); - - if ((*user).second == "unprivileged") { - if (impl::is_root()) { - const atf::tests::vars_map::const_iterator iter = config.find( - "unprivileged-user"); - try { - return impl::get_user_ids((*iter).second); - } catch (const std::exception& e) { - UNREACHABLE; // This has been validated by check_user. - throw e; - } - } else { - return std::make_pair(-1, -1); - } - } else - return std::make_pair(-1, -1); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/user.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/user.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/user.cpp (nonexistent) @@ -1,89 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include - -#include -#include - -#include "../atf-c/detail/user.h" -} - -#include -#include - -#include "../atf-c++/detail/sanity.hpp" - -#include "user.hpp" - -namespace impl = atf::atf_run; -#define IMPL_NAME "atf::atf_run" - -uid_t -impl::euid(void) -{ - return atf_user_euid(); -} - -void -impl::drop_privileges(const std::pair< int, int > ids) -{ - if (::setgid(ids.second) == -1) - throw std::runtime_error("Failed to drop group privileges"); - if (::setuid(ids.first) == -1) - throw std::runtime_error("Failed to drop user privileges"); -} - -std::pair< int, int > -impl::get_user_ids(const std::string& user) -{ - const struct passwd* pw = ::getpwnam(user.c_str()); - if (pw == NULL) - throw std::runtime_error("Failed to get information for user " + user); - return std::make_pair(pw->pw_uid, pw->pw_gid); -} - -bool -impl::is_member_of_group(gid_t gid) -{ - return atf_user_is_member_of_group(gid); -} - -bool -impl::is_root(void) -{ - return atf_user_is_root(); -} - -bool -impl::is_unprivileged(void) -{ - return atf_user_is_unprivileged(); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/user.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/user.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/user.hpp (nonexistent) @@ -1,52 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_RUN_USER_HPP_) -#define _ATF_RUN_USER_HPP_ - -extern "C" { -#include -} - -#include - -namespace atf { -namespace atf_run { - -uid_t euid(void); -void drop_privileges(const std::pair< int, int >); -std::pair< int, int > get_user_ids(const std::string&); -bool is_member_of_group(gid_t); -bool is_root(void); -bool is_unprivileged(void); - -} // namespace atf_run -} // namespace atf - -#endif // !defined(_ATF_RUN_USER_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-run/atf-run.1 =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/atf-run.1 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/atf-run.1 (nonexistent) @@ -1,202 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd November 1, 2010 -.Dt ATF-RUN 1 -.Os -.Sh NAME -.Nm atf-run -.Nd executes a collection of test programs -.Sh SYNOPSIS -.Nm -.Op Fl v Ar var1=value1 Op .. Fl v Ar varN=valueN -.Op Ar test_program1 Op Ar .. test_programN -.Nm -.Fl h -.Sh DESCRIPTION -.Nm -executes a collection of test programs or, in other words, a complete -test suite. -The results of each test program are collected by the tool, and are then -multiplexed into a single machine-parseable report; see -.Xr atf-formats 5 -for more details. -This report can later be transformed into many different and saner formats -using the -.Nm atf-report -tool. -.Pp -The list of test programs to execute is read from an -.Pa Atffile -present in the current directory. -This file describes the test suite stored in the directory it lives in, -which aside from the list of test programs also includes meta-data and -configuration variables. -.Pp -.Nm -is also in charge of reading the configuration files that tune the behavior -of each test program and passing down the necessary variables to them. -More details on how this is done are given in the -.Sx Configuration -section. -.Pp -In the first synopsis form, -.Nm -parses the -.Pa Atffile -in the current directory and runs all the test programs specified in it. -If any test program names are given as part of the command line, those are -the ones executed instead of the complete list. -.Pp -In the second synopsis form, -.Nm -will print information about all supported options and their purpose. -.Pp -The following options are available: -.Bl -tag -width XvXvarXvalueXX -.It Fl h -Shows a short summary of all available options and their purpose. -.It Fl v Ar var=value -Sets the configuration variable -.Ar var -to the given value -.Ar value . -.El -.Ss Configuration -.Nm -reads configuration data from multiple places. -After all of these places have been analyzed, a list of variable-value -pairs are passed to the test programs to be run. -.Pp -The following locations are scanned for configuration data, in order. -Items down the list override values defined above them: -.Bl -enum -.It -Configuration variables defined in the -.Pa Atffile . -.It -Configuration variables defined in the system-wide configuration file -shared among all test suites. -This lives in -.Pa ${ATF_CONFDIR}/common.conf . -.It -Configuration variables defined in the system-wide test-suite-specific -configuration file. -This lives in -.Pa ${ATF_CONFDIR}/.conf . -.It -Configuration variables defined in the user-specific configuration file -shared among all test suites. -This lives in -.Pa ${HOME}/.atf/common.conf . -.It -Configuration variables defined in the user-specific test-suite-specific -configuration file. -This lives in -.Pa ${HOME}/.atf/.conf . -.It -Configuration variables provided as part of the command line through the -.Fl v -option. -.El -.Pp -The value of -.Va ATF_CONFDIR -in the above list determined as detailed in -.Xr atf-config 1 . -.Pp -The following configuration variables are globally recognized: -.Bl -tag -width XunprivilegedXuserXX -.It Va unprivileged-user -The name of the system user that atf-run will drop root privileges into -for test cases defining -.Sq require.user=unprivileged . -Note that this is -.Em not provided for security purposes ; -this feature is only for the convenience of the user. -.El -.Ss Hooks -.Nm Ns 's -internal behavior can be customized by the system administrator and the -user by means of hooks. -These hooks are written in the shell script language for simplicity and -are stored in the following files, which are read in the order provided -below: -.Bl -enum -.It -${ATF_CONFDIR}/atf-run.hooks -.It -${HOME}/.atf/atf-run.hooks -.El -.Pp -The following hooks are supported: -.Bl -tag -width infoXstartXhookXX -.It info_start_hook -Called before -.Nm -executes any test program. -The purpose of this hook is to write additional -.Sq info -stanzas to the top of the output report; these are defined by the -.Sq application/X-atf-tps format -described in -.Xr atf-formats 5 . -Always use the -.Sq atf_tps_writer_info -function to print these. -.Pp -This takes no parameters. -.It info_end_hook -Similar to -.Sq info_start_hook -but executed after all test programs have been run so that additional -.Sq info -stanzas can be added to the bottom of the output report. -.Pp -This takes no parameters. -.El -.Pp -All hooks are accompanied by a function named -.Sq default_ -that can be executed by them to invoke the default behavior built into -.Nm . -For example, in order to extend the default -.Sq info_start_hook -hook, we could write the following function: -.Bd -literal -offset indent -info_start_hook() -{ - default_info_start_hook "${@}" - - atf_tps_writer_info "uptime" "$(uptime)" -} -.Ed -.Sh SEE ALSO -.Xr atf-report 1 , -.Xr atf-test-program 1 , -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/atf-run/integration_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/integration_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/integration_test.sh (nonexistent) @@ -1,1070 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -create_atffile() -{ - ATF_CONFDIR="$(pwd)"; export ATF_CONFDIR - - cat >Atffile <>Atffile - done -} - -create_helper() -{ - cp $(atf_get_srcdir)/misc_helpers helper - create_atffile helper - TESTCASE=${1}; export TESTCASE -} - -create_helper_stdin() -{ - # TODO: This really, really, really must use real test programs. - cat >${1} <>${1} - [ ${cnt} -lt ${2} ] && echo "echo" >>${1} - cnt=$((${cnt} + 1)) - done -cat >>${1} <>${1} -} - -create_mount_helper() -{ - cat >${1} <>${1} - cat >>${1} <etc/common.conf <.conf." - cat >etc/atf.conf <.atf/common.conf <.conf." - cat >.atf/atf.conf <etc/common.conf <>Atffile - atf_check -s eq:0 -o match:'testvar: a value' -e ignore -x \ - "ATF_CONFDIR=$(pwd)/etc atf-run helper" - - echo "Checking that defining 'testvar' trough the configuration" \ - "file overrides the one in the Atffile." - mkdir etc - cat >etc/common.conf <> Atffile - atf_check -s eq:1 -o ignore -e ignore -x "ATF_CONFDIR=$(pwd)/etc atf-run" - - echo "Checking that defining 'testvar' in the correct Atffile works." - echo 'conf: testvar = "a value"' >>dir/Atffile - atf_check -s eq:0 -o match:'testvar: a value' -e ignore -x \ - "ATF_CONFDIR=$(pwd)/etc atf-run" -} - -atf_test_case fds -fds_head() -{ - atf_set "descr" "Tests that all streams are properly captured" -} -fds_body() -{ - create_helper fds - - atf_check -s eq:0 \ - -o match:'^tc-so:msg1 to stdout$' \ - -o match:'^tc-so:msg2 to stdout$' \ - -o match:'^tc-se:msg1 to stderr$' \ - -o match:'^tc-se:msg2 to stderr$' \ - -e empty atf-run -} - -atf_test_case mux_streams -mux_streams_head() -{ - atf_set "descr" "Tests for a race condition in stream multiplexing" -} -mux_streams_body() -{ - create_helper mux_streams - - for i in 1 2 3 4 5; do - echo "Attempt ${i}" - atf_check -s eq:0 -o match:'stdout 9999' -o match:'stderr 9999' atf-run - done -} - -atf_test_case expect -expect_head() -{ - atf_set "descr" "Tests the processing of test case results and the" \ - "expect features" -} -expect_body() -{ - ln -s "$(atf_get_srcdir)/expect_helpers" . - create_atffile expect_helpers - - atf_check -s eq:1 \ - -o match:'death_and_exit, expected_death' \ - -o match:'death_and_signal, expected_death' \ - -o match:'death_but_pass, failed' \ - -o match:'exit_any_and_exit, expected_exit' \ - -o match:'exit_but_pass, failed' \ - -o match:'exit_code_and_exit, expected_exit' \ - -o match:'fail_and_fail_check, expected_failure' \ - -o match:'fail_and_fail_requirement, expected_failure' \ - -o match:'fail_but_pass, failed' \ - -o match:'pass_and_pass, passed' \ - -o match:'pass_but_fail_check, failed' \ - -o match:'pass_but_fail_requirement, failed' \ - -o match:'signal_any_and_signal, expected_signal' \ - -o match:'signal_but_pass, failed' \ - -o match:'signal_no_and_signal, expected_signal' \ - -o match:'timeout_and_hang, expected_timeout' \ - -o match:'timeout_but_pass, failed' \ - -e empty atf-run -} - -atf_test_case missing_results -missing_results_head() -{ - atf_set "descr" "Ensures that atf-run correctly handles test cases that " \ - "do not create the results file" -} -missing_results_body() -{ - create_helper_stdin helper 1 <\${resfile} -echo 'line 2' >>\${resfile} -exit 0 -EOF - chmod +x helper - - create_atffile helper - - atf_check -s eq:1 -o match:'^tc-end: tc1, .*line 1.*line 2' -e empty atf-run -} - -atf_test_case broken_tp_list -broken_tp_list_head() -{ - atf_set "descr" "Ensures that atf-run reports test programs that" \ - "provide a bogus test case list" -} -broken_tp_list_body() -{ - cat >helper <\${resfile} -exit 0 -EOF - chmod +x helper - - create_atffile helper - - atf_check -s eq:1 \ - -o match:'^tc-end: tc1,.*exited successfully.*reported failure' \ - -e empty atf-run -} - -atf_test_case signaled -signaled_head() -{ - atf_set "descr" "Ensures that atf-run reports test program's crashes" \ - "correctly regardless of their actual results" -} -signaled_body() -{ - create_helper_stdin helper 2 <\${resfile} -case \${testcase} in - tc1) ;; - tc2) echo "Killing myself!" ; kill -9 \$\$ ;; -esac -EOF - chmod +x helper - - create_atffile helper - - atf_check -s eq:1 -o match:'^tc-end: tc2,.*received signal 9' \ - -e empty atf-run -} - -atf_test_case hooks -hooks_head() -{ - atf_set "descr" "Checks that the default hooks work and that they" \ - "can be overriden by the user" -} -hooks_body() -{ - cp $(atf_get_srcdir)/pass_helper helper - create_atffile helper - - mkdir atf - mkdir .atf - - echo "Checking default hooks" - atf_check -s eq:0 -o match:'^info: time.start, ' \ - -o match:'^info: time.end, ' -e empty -x \ - "ATF_CONFDIR=$(pwd)/atf atf-run" - - echo "Checking the system-wide info_start hook" - cat >atf/atf-run.hooks <.atf/atf-run.hooks <atf/atf-run.hooks <.atf/atf-run.hooks <\${ROOT} -mkdir foo -mkdir foo/bar -mkdir foo/bar/mnt -do_mount foo/bar/mnt -mkdir foo/baz -do_mount foo/baz -mkdir foo/baz/foo -mkdir foo/baz/foo/bar -do_mount foo/baz/foo/bar -EOF - create_atffile helper - chmod +x helper - - platform=$(uname) - case ${platform} in - Linux|FreeBSD|NetBSD|SunOS) - ;; - *) - # XXX Possibly specify in meta-data too. - atf_skip "Test unimplemented in this platform (${platform})" - ;; - esac - - atf_check -s eq:0 -o match:"main, passed" -e ignore atf-run helper - mount | grep $(cat root) && atf_fail "Some file systems remain mounted" - atf_check -s eq:1 -o empty -e empty test -d $(cat root)/foo -} - -atf_test_case cleanup_symlink -cleanup_symlink_head() -{ - atf_set "descr" "Tests that the removal algorithm does not follow" \ - "symlinks, which may live in another device and thus" \ - "be treated as mount points" - atf_set "require.user" "root" -} -cleanup_symlink_body() -{ - ROOT="$(pwd)/root"; export ROOT - - create_mount_helper helper <\${ROOT} -atf_check -s eq:0 -o empty -e empty mkdir foo -atf_check -s eq:0 -o empty -e empty mkdir foo/bar -do_mount foo/bar -atf_check -s eq:0 -o empty -e empty touch a -atf_check -s eq:0 -o empty -e empty ln -s "\$(pwd)/a" foo/bar -EOF - create_atffile helper - chmod +x helper - - platform=$(uname) - case ${platform} in - Linux|FreeBSD|NetBSD|SunOS) - ;; - *) - # XXX Possibly specify in meta-data too. - atf_skip "Test unimplemented in this platform (${platform})" - ;; - esac - - atf_check -s eq:0 -o match:"main, passed" -e ignore atf-run helper - mount | grep $(cat root) && atf_fail "Some file systems remain mounted" - atf_check -s eq:1 -o empty -e empty test -d $(cat root)/foo -} - -atf_test_case require_arch -require_arch_head() -{ - atf_set "descr" "Tests that atf-run validates the require.arch property" -} -require_arch_body() -{ - create_helper require_arch - create_atffile helper - - echo "Checking for the real architecture" - arch=$(atf-config -t atf_arch) - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v arch="${arch}" helper - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v arch="foo ${arch}" helper - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v arch="${arch} foo" helper - - echo "Checking for a fictitious architecture" - arch=fictitious - export ATF_ARCH=fictitious - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v arch="${arch}" helper - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v arch="foo ${arch}" helper - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v arch="${arch} foo" helper - - echo "Triggering some failures" - atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*foo.*architecture" \ - -e ignore atf-run -v arch="foo" helper - atf_check -s eq:0 \ - -o match:"${TESTCASE}, skipped, .*foo bar.*architectures" -e ignore \ - atf-run -v arch="foo bar" helper - atf_check -s eq:0 \ - -o match:"${TESTCASE}, skipped, .*fictitiousxxx.*architecture" \ - -e ignore atf-run -v arch="${arch}xxx" helper -} - -atf_test_case require_config -require_config_head() -{ - atf_set "descr" "Tests that atf-run validates the require.config property" -} -require_config_body() -{ - create_helper require_config - create_atffile helper - - atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*var1.*not defined" \ - -e ignore atf-run helper - atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*var2.*not defined" \ - -e ignore atf-run -v var1=foo helper - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v var1=a -v var2=' ' helper -} - -atf_test_case require_machine -require_machine_head() -{ - atf_set "descr" "Tests that atf-run validates the require.machine property" -} -require_machine_body() -{ - create_helper require_machine - create_atffile helper - - echo "Checking for the real machine type" - machine=$(atf-config -t atf_machine) - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v machine="${machine}" helper - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v machine="foo ${machine}" helper - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v machine="${machine} foo" helper - - echo "Checking for a fictitious machine type" - machine=fictitious - export ATF_MACHINE=fictitious - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v machine="${machine}" helper - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v machine="foo ${machine}" helper - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v machine="${machine} foo" helper - - echo "Triggering some failures" - atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*foo.*machine type" \ - -e ignore atf-run -v machine="foo" helper - atf_check -s eq:0 \ - -o match:"${TESTCASE}, skipped, .*foo bar.*machine types" -e ignore \ - atf-run -v machine="foo bar" helper - atf_check -s eq:0 \ - -o match:"${TESTCASE}, skipped, .*fictitiousxxx.*machine type" \ - -e ignore atf-run -v machine="${machine}xxx" helper -} - -atf_test_case require_progs -require_progs_head() -{ - atf_set "descr" "Tests that atf-run validates the require.progs property" -} -require_progs_body() -{ - create_helper require_progs - create_atffile helper - - echo "Checking absolute paths" - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v progs='/bin/cp' helper - atf_check -s eq:0 \ - -o match:"${TESTCASE}, skipped, .*/bin/__non-existent__.*PATH" \ - -e ignore atf-run -v progs='/bin/__non-existent__' helper - - echo "Checking that relative paths are not allowed" - atf_check -s eq:1 \ - -o match:"${TESTCASE}, failed, Relative paths.*not allowed.*bin/cp" \ - -e ignore atf-run -v progs='bin/cp' helper - - echo "Check plain file names, searching them in the PATH." - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v progs='cp' helper - atf_check -s eq:0 \ - -o match:"${TESTCASE}, skipped, .*__non-existent__.*PATH" -e ignore \ - atf-run -v progs='__non-existent__' helper -} - -atf_test_case require_user_root -require_user_root_head() -{ - atf_set "descr" "Tests that atf-run validates the require.user property" \ - "when it is set to 'root'" -} -require_user_root_body() -{ - create_helper require_user - create_atffile helper - - if [ $(id -u) -eq 0 ]; then - exp=passed - else - exp=skipped - fi - atf_check -s eq:0 -o match:"${TESTCASE}, ${exp}" -e ignore atf-run \ - -v user=root helper -} - -atf_test_case require_user_unprivileged -require_user_unprivileged_head() -{ - atf_set "descr" "Tests that atf-run validates the require.user property" \ - "when it is set to 'root'" -} -require_user_unprivileged_body() -{ - create_helper require_user - create_atffile helper - - if [ $(id -u) -eq 0 ]; then - exp=skipped - else - exp=passed - fi - atf_check -s eq:0 -o match:"${TESTCASE}, ${exp}" -e ignore atf-run \ - -v user=unprivileged helper -} - -atf_test_case require_user_bad -require_user_bad_head() -{ - atf_set "descr" "Tests that atf-run validates the require.user property" \ - "when it is set to 'root'" -} -require_user_bad_body() -{ - create_helper require_user - create_atffile helper - - atf_check -s eq:1 -o match:"${TESTCASE}, failed, Invalid value.*foobar" \ - -e ignore atf-run -v user=foobar helper -} - -atf_test_case timeout -timeout_head() -{ - atf_set "descr" "Tests that atf-run kills a test case that times out" -} -timeout_body() -{ - create_helper timeout - create_atffile helper - - atf_check -s eq:1 \ - -o match:"${TESTCASE}, failed, .*timed out after 1 second" -e ignore \ - atf-run -v statedir=$(pwd) helper - if [ -f finished ]; then - atf_fail "Test case was not killed after time out" - fi -} - -atf_test_case timeout_forkexit -timeout_forkexit_head() -{ - atf_set "descr" "Tests that atf-run deals gracefully with a test program" \ - "that forks, exits, but the child process hangs" -} -timeout_forkexit_body() -{ - create_helper timeout_forkexit - create_atffile helper - - atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \ - -v statedir=$(pwd) helper - test -f parent-finished || atf_fail "Parent did not exit as expected" - test -f child-finished && atf_fail "Subprocess exited but it should have" \ - "been forcibly terminated" || true -} - -atf_test_case ignore_deprecated_use_fs -ignore_deprecated_use_fs_head() -{ - atf_set "descr" "Tests that atf-run ignores the deprecated use.fs property" -} -ignore_deprecated_use_fs_body() -{ - create_helper use_fs - create_atffile helper - - atf_check -s eq:0 -o ignore -e ignore atf-run helper -} - -atf_init_test_cases() -{ - atf_add_test_case config - atf_add_test_case vflag - atf_add_test_case atffile - atf_add_test_case atffile_recursive - atf_add_test_case expect - atf_add_test_case fds - atf_add_test_case mux_streams - atf_add_test_case missing_results - atf_add_test_case broken_results - atf_add_test_case broken_tp_list - atf_add_test_case zero_tcs - atf_add_test_case exit_codes - atf_add_test_case signaled - atf_add_test_case hooks - atf_add_test_case isolation_env - atf_add_test_case isolation_home - atf_add_test_case isolation_umask - atf_add_test_case cleanup_pass - atf_add_test_case cleanup_fail - atf_add_test_case cleanup_skip - atf_add_test_case cleanup_curdir - atf_add_test_case cleanup_signal - atf_add_test_case cleanup_mount - atf_add_test_case cleanup_symlink - atf_add_test_case require_arch - atf_add_test_case require_config - atf_add_test_case require_machine - atf_add_test_case require_progs - atf_add_test_case require_user_root - atf_add_test_case require_user_unprivileged - atf_add_test_case require_user_bad - atf_add_test_case timeout - atf_add_test_case timeout_forkexit - atf_add_test_case ignore_deprecated_use_fs -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-run/test-program.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/test-program.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/test-program.hpp (nonexistent) @@ -1,150 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2010 The NetBSD Foundation, Inc. -// 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 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 - -#include "atf-c++/tests.hpp" - -#include "atf-c++/detail/fs.hpp" -#include "atf-c++/detail/process.hpp" - -namespace atf { -namespace atf_run { - -struct test_case_result { - std::string m_state; - int m_value; - std::string m_reason; - -public: - test_case_result(void) : - m_state("UNINITIALIZED"), - m_value(-1), - m_reason("") - { - } - - test_case_result(const std::string& p_state, const int p_value, - const std::string& p_reason) : - m_state(p_state), - m_value(p_value), - m_reason(p_reason) - { - } - - const std::string& - state(void) const - { - return m_state; - } - - int - value(void) const - { - return m_value; - } - - const std::string& - reason(void) const - { - return m_reason; - } -}; - -namespace detail { - -class atf_tp_reader { - std::istream& m_is; - - void validate_and_insert(const std::string&, const std::string&, - const size_t, - std::map< std::string, std::string >&); - -protected: - virtual void got_tc(const std::string&, - const std::map< std::string, std::string >&); - virtual void got_eof(void); - -public: - atf_tp_reader(std::istream&); - virtual ~atf_tp_reader(void); - - void read(void); -}; - -test_case_result parse_test_case_result(const std::string&); - -} // namespace detail - -class atf_tps_writer { - std::ostream& m_os; - - std::string m_tpname, m_tcname; - -public: - atf_tps_writer(std::ostream&); - - void info(const std::string&, const std::string&); - void ntps(size_t); - - void start_tp(const std::string&, size_t); - void end_tp(const std::string&); - - void start_tc(const std::string&); - void stdout_tc(const std::string&); - void stderr_tc(const std::string&); - void end_tc(const std::string&, const std::string&); -}; - -typedef std::map< std::string, atf::tests::vars_map > test_cases_map; - -struct metadata { - test_cases_map test_cases; - - metadata(void) - { - } - - metadata(const test_cases_map& p_test_cases) : - test_cases(p_test_cases) - { - } -}; - -class atf_tps_writer; - -metadata get_metadata(const atf::fs::path&, const atf::tests::vars_map&); -test_case_result read_test_case_result(const atf::fs::path&); -std::pair< std::string, atf::process::status > run_test_case( - const atf::fs::path&, const std::string&, const std::string&, - const atf::tests::vars_map&, const atf::tests::vars_map&, - const atf::fs::path&, const atf::fs::path&, atf_tps_writer&); - -} // namespace atf_run -} // namespace atf Index: vendor/NetBSD/atf/dist/dist/atf-run/test-program.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/test-program.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/test-program.cpp (nonexistent) @@ -1,742 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010, 2011 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include - -#include -#include -} - -#include -#include -#include -#include -#include - -#include "atf-c++/detail/env.hpp" -#include "atf-c++/detail/parser.hpp" -#include "atf-c++/detail/process.hpp" -#include "atf-c++/detail/sanity.hpp" -#include "atf-c++/detail/text.hpp" - -#include "config.hpp" -#include "fs.hpp" -#include "io.hpp" -#include "requirements.hpp" -#include "signals.hpp" -#include "test-program.hpp" -#include "timer.hpp" -#include "user.hpp" - -namespace impl = atf::atf_run; -namespace detail = atf::atf_run::detail; - -namespace { - -static void -check_stream(std::ostream& os) -{ - // If we receive a signal while writing to the stream, the bad bit gets set. - // Things seem to behave fine afterwards if we clear such error condition. - // However, I'm not sure if it's safe to query errno at this point. - if (os.bad()) { - if (errno == EINTR) - os.clear(); - else - throw std::runtime_error("Failed"); - } -} - -namespace atf_tp { - -static const atf::parser::token_type eof_type = 0; -static const atf::parser::token_type nl_type = 1; -static const atf::parser::token_type text_type = 2; -static const atf::parser::token_type colon_type = 3; -static const atf::parser::token_type dblquote_type = 4; - -class tokenizer : public atf::parser::tokenizer< std::istream > { -public: - tokenizer(std::istream& is, size_t curline) : - atf::parser::tokenizer< std::istream > - (is, true, eof_type, nl_type, text_type, curline) - { - add_delim(':', colon_type); - add_quote('"', dblquote_type); - } -}; - -} // namespace atf_tp - -class metadata_reader : public detail::atf_tp_reader { - impl::test_cases_map m_tcs; - - void got_tc(const std::string& ident, const atf::tests::vars_map& props) - { - if (m_tcs.find(ident) != m_tcs.end()) - throw(std::runtime_error("Duplicate test case " + ident + - " in test program")); - m_tcs[ident] = props; - - if (m_tcs[ident].find("has.cleanup") == m_tcs[ident].end()) - m_tcs[ident].insert(std::make_pair("has.cleanup", "false")); - - if (m_tcs[ident].find("timeout") == m_tcs[ident].end()) - m_tcs[ident].insert(std::make_pair("timeout", "300")); - } - -public: - metadata_reader(std::istream& is) : - detail::atf_tp_reader(is) - { - } - - const impl::test_cases_map& - get_tcs(void) - const - { - return m_tcs; - } -}; - -struct get_metadata_params { - const atf::fs::path& executable; - const atf::tests::vars_map& config; - - get_metadata_params(const atf::fs::path& p_executable, - const atf::tests::vars_map& p_config) : - executable(p_executable), - config(p_config) - { - } -}; - -struct test_case_params { - const atf::fs::path& executable; - const std::string& test_case_name; - const std::string& test_case_part; - const atf::tests::vars_map& metadata; - const atf::tests::vars_map& config; - const atf::fs::path& resfile; - const atf::fs::path& workdir; - - test_case_params(const atf::fs::path& p_executable, - const std::string& p_test_case_name, - const std::string& p_test_case_part, - const atf::tests::vars_map& p_metadata, - const atf::tests::vars_map& p_config, - const atf::fs::path& p_resfile, - const atf::fs::path& p_workdir) : - executable(p_executable), - test_case_name(p_test_case_name), - test_case_part(p_test_case_part), - metadata(p_metadata), - config(p_config), - resfile(p_resfile), - workdir(p_workdir) - { - } -}; - -static -void -append_to_vector(std::vector< std::string >& v1, - const std::vector< std::string >& v2) -{ - std::copy(v2.begin(), v2.end(), - std::back_insert_iterator< std::vector< std::string > >(v1)); -} - -static -char** -vector_to_argv(const std::vector< std::string >& v) -{ - char** argv = new char*[v.size() + 1]; - for (std::vector< std::string >::size_type i = 0; i < v.size(); i++) { - argv[i] = strdup(v[i].c_str()); - } - argv[v.size()] = NULL; - return argv; -} - -static -void -exec_or_exit(const atf::fs::path& executable, - const std::vector< std::string >& argv) -{ - // This leaks memory in case of a failure, but it is OK. Exiting will - // do the necessary cleanup. - char* const* native_argv = vector_to_argv(argv); - - ::execv(executable.c_str(), native_argv); - - const std::string message = "Failed to execute '" + executable.str() + - "': " + std::strerror(errno) + "\n"; - if (::write(STDERR_FILENO, message.c_str(), message.length()) == -1) - std::abort(); - std::exit(EXIT_FAILURE); -} - -static -std::vector< std::string > -config_to_args(const atf::tests::vars_map& config) -{ - std::vector< std::string > args; - - for (atf::tests::vars_map::const_iterator iter = config.begin(); - iter != config.end(); iter++) - args.push_back("-v" + (*iter).first + "=" + (*iter).second); - - return args; -} - -static -void -prepare_child(const atf::fs::path& workdir) -{ - const int ret = ::setpgid(::getpid(), 0); - INV(ret != -1); - - ::umask(S_IWGRP | S_IWOTH); - - for (int i = 1; i <= impl::last_signo; i++) - impl::reset(i); - - atf::env::set("HOME", workdir.str()); - atf::env::unset("LANG"); - atf::env::unset("LC_ALL"); - atf::env::unset("LC_COLLATE"); - atf::env::unset("LC_CTYPE"); - atf::env::unset("LC_MESSAGES"); - atf::env::unset("LC_MONETARY"); - atf::env::unset("LC_NUMERIC"); - atf::env::unset("LC_TIME"); - atf::env::unset("TZ"); - - impl::change_directory(workdir); -} - -static -void -get_metadata_child(void* raw_params) -{ - const get_metadata_params* params = - static_cast< const get_metadata_params* >(raw_params); - - std::vector< std::string > argv; - argv.push_back(params->executable.leaf_name()); - argv.push_back("-l"); - argv.push_back("-s" + params->executable.branch_path().str()); - append_to_vector(argv, config_to_args(params->config)); - - exec_or_exit(params->executable, argv); -} - -void -run_test_case_child(void* raw_params) -{ - const test_case_params* params = - static_cast< const test_case_params* >(raw_params); - - const std::pair< int, int > user = impl::get_required_user( - params->metadata, params->config); - if (user.first != -1 && user.second != -1) - impl::drop_privileges(user); - - // The input 'tp' parameter may be relative and become invalid once - // we change the current working directory. - const atf::fs::path absolute_executable = params->executable.to_absolute(); - - // Prepare the test program's arguments. We use dynamic memory and - // do not care to release it. We are going to die anyway very soon, - // either due to exec(2) or to exit(3). - std::vector< std::string > argv; - argv.push_back(absolute_executable.leaf_name()); - argv.push_back("-r" + params->resfile.str()); - argv.push_back("-s" + absolute_executable.branch_path().str()); - append_to_vector(argv, config_to_args(params->config)); - argv.push_back(params->test_case_name + ":" + params->test_case_part); - - prepare_child(params->workdir); - exec_or_exit(absolute_executable, argv); -} - -static void -tokenize_result(const std::string& line, std::string& out_state, - std::string& out_arg, std::string& out_reason) -{ - const std::string::size_type pos = line.find_first_of(":("); - if (pos == std::string::npos) { - out_state = line; - out_arg = ""; - out_reason = ""; - } else if (line[pos] == ':') { - out_state = line.substr(0, pos); - out_arg = ""; - out_reason = atf::text::trim(line.substr(pos + 1)); - } else if (line[pos] == '(') { - const std::string::size_type pos2 = line.find("):", pos); - if (pos2 == std::string::npos) - throw std::runtime_error("Invalid test case result '" + line + - "': unclosed optional argument"); - out_state = line.substr(0, pos); - out_arg = line.substr(pos + 1, pos2 - pos - 1); - out_reason = atf::text::trim(line.substr(pos2 + 2)); - } else - UNREACHABLE; -} - -static impl::test_case_result -handle_result(const std::string& state, const std::string& arg, - const std::string& reason) -{ - PRE(state == "passed"); - - if (!arg.empty() || !reason.empty()) - throw std::runtime_error("The test case result '" + state + "' cannot " - "be accompanied by a reason nor an expected value"); - - return impl::test_case_result(state, -1, reason); -} - -static impl::test_case_result -handle_result_with_reason(const std::string& state, const std::string& arg, - const std::string& reason) -{ - PRE(state == "expected_death" || state == "expected_failure" || - state == "expected_timeout" || state == "failed" || state == "skipped"); - - if (!arg.empty() || reason.empty()) - throw std::runtime_error("The test case result '" + state + "' must " - "be accompanied by a reason but not by an expected value"); - - return impl::test_case_result(state, -1, reason); -} - -static impl::test_case_result -handle_result_with_reason_and_arg(const std::string& state, - const std::string& arg, - const std::string& reason) -{ - PRE(state == "expected_exit" || state == "expected_signal"); - - if (reason.empty()) - throw std::runtime_error("The test case result '" + state + "' must " - "be accompanied by a reason"); - - int value; - if (arg.empty()) { - value = -1; - } else { - try { - value = atf::text::to_type< int >(arg); - } catch (const std::runtime_error&) { - throw std::runtime_error("The value '" + arg + "' passed to the '" + - state + "' state must be an integer"); - } - } - - return impl::test_case_result(state, value, reason); -} - -} // anonymous namespace - -detail::atf_tp_reader::atf_tp_reader(std::istream& is) : - m_is(is) -{ -} - -detail::atf_tp_reader::~atf_tp_reader(void) -{ -} - -void -detail::atf_tp_reader::got_tc(const std::string& ident, - const std::map< std::string, std::string >& md) -{ -} - -void -detail::atf_tp_reader::got_eof(void) -{ -} - -void -detail::atf_tp_reader::validate_and_insert(const std::string& name, - const std::string& value, const size_t lineno, - std::map< std::string, std::string >& md) -{ - using atf::parser::parse_error; - - if (value.empty()) - throw parse_error(lineno, "The value for '" + name +"' cannot be " - "empty"); - - const std::string ident_regex = "^[_A-Za-z0-9]+$"; - const std::string integer_regex = "^[0-9]+$"; - - if (name == "descr") { - // Any non-empty value is valid. - } else if (name == "has.cleanup") { - try { - (void)atf::text::to_bool(value); - } catch (const std::runtime_error&) { - throw parse_error(lineno, "The has.cleanup property requires a" - " boolean value"); - } - } else if (name == "ident") { - if (!atf::text::match(value, ident_regex)) - throw parse_error(lineno, "The identifier must match " + - ident_regex + "; was '" + value + "'"); - } else if (name == "require.arch") { - } else if (name == "require.config") { - } else if (name == "require.machine") { - } else if (name == "require.progs") { - } else if (name == "require.user") { - } else if (name == "timeout") { - if (!atf::text::match(value, integer_regex)) - throw parse_error(lineno, "The timeout property requires an integer" - " value"); - } else if (name == "use.fs") { - // Deprecated; ignore it. - } else if (name.size() > 2 && name[0] == 'X' && name[1] == '-') { - // Any non-empty value is valid. - } else { - throw parse_error(lineno, "Unknown property '" + name + "'"); - } - - md.insert(std::make_pair(name, value)); -} - -void -detail::atf_tp_reader::read(void) -{ - using atf::parser::parse_error; - using namespace atf_tp; - - std::pair< size_t, atf::parser::headers_map > hml = - atf::parser::read_headers(m_is, 1); - atf::parser::validate_content_type(hml.second, - "application/X-atf-tp", 1); - - tokenizer tkz(m_is, hml.first); - atf::parser::parser< tokenizer > p(tkz); - - try { - atf::parser::token t = p.expect(text_type, "property name"); - if (t.text() != "ident") - throw parse_error(t.lineno(), "First property of a test case " - "must be 'ident'"); - - std::map< std::string, std::string > props; - do { - const std::string name = t.text(); - t = p.expect(colon_type, "`:'"); - const std::string value = atf::text::trim(p.rest_of_line()); - t = p.expect(nl_type, "new line"); - validate_and_insert(name, value, t.lineno(), props); - - t = p.expect(eof_type, nl_type, text_type, "property name, new " - "line or eof"); - if (t.type() == nl_type || t.type() == eof_type) { - const std::map< std::string, std::string >::const_iterator - iter = props.find("ident"); - if (iter == props.end()) - throw parse_error(t.lineno(), "Test case definition did " - "not define an 'ident' property"); - ATF_PARSER_CALLBACK(p, got_tc((*iter).second, props)); - props.clear(); - - if (t.type() == nl_type) { - t = p.expect(text_type, "property name"); - if (t.text() != "ident") - throw parse_error(t.lineno(), "First property of a " - "test case must be 'ident'"); - } - } - } while (t.type() != eof_type); - ATF_PARSER_CALLBACK(p, got_eof()); - } catch (const parse_error& pe) { - p.add_error(pe); - p.reset(nl_type); - } -} - -impl::test_case_result -detail::parse_test_case_result(const std::string& line) -{ - std::string state, arg, reason; - tokenize_result(line, state, arg, reason); - - if (state == "expected_death") - return handle_result_with_reason(state, arg, reason); - else if (state.compare(0, 13, "expected_exit") == 0) - return handle_result_with_reason_and_arg(state, arg, reason); - else if (state.compare(0, 16, "expected_failure") == 0) - return handle_result_with_reason(state, arg, reason); - else if (state.compare(0, 15, "expected_signal") == 0) - return handle_result_with_reason_and_arg(state, arg, reason); - else if (state.compare(0, 16, "expected_timeout") == 0) - return handle_result_with_reason(state, arg, reason); - else if (state == "failed") - return handle_result_with_reason(state, arg, reason); - else if (state == "passed") - return handle_result(state, arg, reason); - else if (state == "skipped") - return handle_result_with_reason(state, arg, reason); - else - throw std::runtime_error("Unknown test case result type in: " + line); -} - -impl::atf_tps_writer::atf_tps_writer(std::ostream& os) : - m_os(os) -{ - atf::parser::headers_map hm; - atf::parser::attrs_map ct_attrs; - ct_attrs["version"] = "2"; - hm["Content-Type"] = - atf::parser::header_entry("Content-Type", "application/X-atf-tps", - ct_attrs); - atf::parser::write_headers(hm, m_os); -} - -void -impl::atf_tps_writer::info(const std::string& what, const std::string& val) -{ - m_os << "info: " << what << ", " << val << "\n"; - m_os.flush(); -} - -void -impl::atf_tps_writer::ntps(size_t p_ntps) -{ - m_os << "tps-count: " << p_ntps << "\n"; - m_os.flush(); -} - -void -impl::atf_tps_writer::start_tp(const std::string& tp, size_t ntcs) -{ - m_tpname = tp; - m_os << "tp-start: " << tp << ", " << ntcs << "\n"; - m_os.flush(); -} - -void -impl::atf_tps_writer::end_tp(const std::string& reason) -{ - PRE(reason.find('\n') == std::string::npos); - if (reason.empty()) - m_os << "tp-end: " << m_tpname << "\n"; - else - m_os << "tp-end: " << m_tpname << ", " << reason << "\n"; - m_os.flush(); -} - -void -impl::atf_tps_writer::start_tc(const std::string& tcname) -{ - m_tcname = tcname; - m_os << "tc-start: " << tcname << "\n"; - m_os.flush(); -} - -void -impl::atf_tps_writer::stdout_tc(const std::string& line) -{ - m_os << "tc-so:" << line << "\n"; - check_stream(m_os); - m_os.flush(); - check_stream(m_os); -} - -void -impl::atf_tps_writer::stderr_tc(const std::string& line) -{ - m_os << "tc-se:" << line << "\n"; - check_stream(m_os); - m_os.flush(); - check_stream(m_os); -} - -void -impl::atf_tps_writer::end_tc(const std::string& state, - const std::string& reason) -{ - std::string str = "tc-end: " + m_tcname + ", " + state; - if (!reason.empty()) - str += ", " + reason; - m_os << str << "\n"; - m_os.flush(); -} - -impl::metadata -impl::get_metadata(const atf::fs::path& executable, - const atf::tests::vars_map& config) -{ - get_metadata_params params(executable, config); - atf::process::child child = - atf::process::fork(get_metadata_child, - atf::process::stream_capture(), - atf::process::stream_inherit(), - static_cast< void * >(¶ms)); - - impl::pistream outin(child.stdout_fd()); - - metadata_reader parser(outin); - parser.read(); - - const atf::process::status status = child.wait(); - if (!status.exited() || status.exitstatus() != EXIT_SUCCESS) - throw atf::parser::format_error("Test program returned failure " - "exit status for test case list"); - - return metadata(parser.get_tcs()); -} - -impl::test_case_result -impl::read_test_case_result(const atf::fs::path& results_path) -{ - std::ifstream results_file(results_path.c_str()); - if (!results_file) - throw std::runtime_error("Failed to open " + results_path.str()); - - std::string line, extra_line; - std::getline(results_file, line); - if (!results_file.good()) - throw std::runtime_error("Results file is empty"); - - while (std::getline(results_file, extra_line).good()) - line += "<>" + extra_line; - - results_file.close(); - - return detail::parse_test_case_result(line); -} - -namespace { - -static volatile bool terminate_poll; - -static void -sigchld_handler(const int signo) -{ - terminate_poll = true; -} - -class child_muxer : public impl::muxer { - impl::atf_tps_writer& m_writer; - - void - line_callback(const size_t index, const std::string& line) - { - switch (index) { - case 0: m_writer.stdout_tc(line); break; - case 1: m_writer.stderr_tc(line); break; - default: UNREACHABLE; - } - } - -public: - child_muxer(const int* fds, const size_t nfds, - impl::atf_tps_writer& writer) : - muxer(fds, nfds), - m_writer(writer) - { - } -}; - -} // anonymous namespace - -std::pair< std::string, atf::process::status > -impl::run_test_case(const atf::fs::path& executable, - const std::string& test_case_name, - const std::string& test_case_part, - const atf::tests::vars_map& metadata, - const atf::tests::vars_map& config, - const atf::fs::path& resfile, - const atf::fs::path& workdir, - atf_tps_writer& writer) -{ - // TODO: Capture termination signals and deliver them to the subprocess - // instead. Or maybe do something else; think about it. - - test_case_params params(executable, test_case_name, test_case_part, - metadata, config, resfile, workdir); - atf::process::child child = - atf::process::fork(run_test_case_child, - atf::process::stream_capture(), - atf::process::stream_capture(), - static_cast< void * >(¶ms)); - - terminate_poll = false; - - const atf::tests::vars_map::const_iterator iter = metadata.find("timeout"); - INV(iter != metadata.end()); - const unsigned int timeout = - atf::text::to_type< unsigned int >((*iter).second); - const pid_t child_pid = child.pid(); - - // Get the input stream of stdout and stderr. - impl::file_handle outfh = child.stdout_fd(); - impl::file_handle errfh = child.stderr_fd(); - - bool timed_out = false; - - // Process the test case's output and multiplex it into our output - // stream as we read it. - int fds[2] = {outfh.get(), errfh.get()}; - child_muxer mux(fds, 2, writer); - try { - child_timer timeout_timer(timeout, child_pid, terminate_poll); - signal_programmer sigchld(SIGCHLD, sigchld_handler); - mux.mux(terminate_poll); - timed_out = timeout_timer.fired(); - } catch (...) { - UNREACHABLE; - } - - ::killpg(child_pid, SIGKILL); - mux.flush(); - atf::process::status status = child.wait(); - - std::string reason; - - if (timed_out) { - // Don't assume the child process has been signaled due to the timeout - // expiration as older versions did. The child process may have exited - // but we may have timed out due to a subchild process getting stuck. - reason = "Test case timed out after " + atf::text::to_string(timeout) + - " " + (timeout == 1 ? "second" : "seconds"); - } - - return std::make_pair(reason, status); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/atffile.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/atffile.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/atffile.cpp (nonexistent) @@ -1,337 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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 - -#include "atf-c++/detail/exceptions.hpp" -#include "atf-c++/detail/expand.hpp" -#include "atf-c++/detail/parser.hpp" -#include "atf-c++/detail/sanity.hpp" - -#include "atffile.hpp" - -namespace impl = atf::atf_run; -namespace detail = atf::atf_run::detail; - -// ------------------------------------------------------------------------ -// The "atf_atffile" auxiliary parser. -// ------------------------------------------------------------------------ - -namespace atf_atffile { - -static const atf::parser::token_type eof_type = 0; -static const atf::parser::token_type nl_type = 1; -static const atf::parser::token_type text_type = 2; -static const atf::parser::token_type colon_type = 3; -static const atf::parser::token_type conf_type = 4; -static const atf::parser::token_type dblquote_type = 5; -static const atf::parser::token_type equal_type = 6; -static const atf::parser::token_type hash_type = 7; -static const atf::parser::token_type prop_type = 8; -static const atf::parser::token_type tp_type = 9; -static const atf::parser::token_type tp_glob_type = 10; - -class tokenizer : public atf::parser::tokenizer< std::istream > { -public: - tokenizer(std::istream& is, size_t curline) : - atf::parser::tokenizer< std::istream > - (is, true, eof_type, nl_type, text_type, curline) - { - add_delim(':', colon_type); - add_delim('=', equal_type); - add_delim('#', hash_type); - add_quote('"', dblquote_type); - add_keyword("conf", conf_type); - add_keyword("prop", prop_type); - add_keyword("tp", tp_type); - add_keyword("tp-glob", tp_glob_type); - } -}; - -} // namespace atf_atffile - -// ------------------------------------------------------------------------ -// The "atf_atffile_reader" class. -// ------------------------------------------------------------------------ - -detail::atf_atffile_reader::atf_atffile_reader(std::istream& is) : - m_is(is) -{ -} - -detail::atf_atffile_reader::~atf_atffile_reader(void) -{ -} - -void -detail::atf_atffile_reader::got_conf(const std::string& name, - const std::string& val) -{ -} - -void -detail::atf_atffile_reader::got_prop(const std::string& name, - const std::string& val) -{ -} - -void -detail::atf_atffile_reader::got_tp(const std::string& name, bool isglob) -{ -} - -void -detail::atf_atffile_reader::got_eof(void) -{ -} - -void -detail::atf_atffile_reader::read(void) -{ - using atf::parser::parse_error; - using namespace atf_atffile; - - std::pair< size_t, atf::parser::headers_map > hml = - atf::parser::read_headers(m_is, 1); - atf::parser::validate_content_type(hml.second, - "application/X-atf-atffile", 1); - - tokenizer tkz(m_is, hml.first); - atf::parser::parser< tokenizer > p(tkz); - - for (;;) { - try { - atf::parser::token t = - p.expect(conf_type, hash_type, prop_type, tp_type, - tp_glob_type, nl_type, eof_type, - "conf, #, prop, tp, tp-glob, a new line or eof"); - if (t.type() == eof_type) - break; - - if (t.type() == conf_type) { - t = p.expect(colon_type, "`:'"); - - t = p.expect(text_type, "variable name"); - std::string var = t.text(); - - t = p.expect(equal_type, "equal sign"); - - t = p.expect(text_type, "word or quoted string"); - ATF_PARSER_CALLBACK(p, got_conf(var, t.text())); - } else if (t.type() == hash_type) { - (void)p.rest_of_line(); - } else if (t.type() == prop_type) { - t = p.expect(colon_type, "`:'"); - - t = p.expect(text_type, "property name"); - std::string name = t.text(); - - t = p.expect(equal_type, "equale sign"); - - t = p.expect(text_type, "word or quoted string"); - ATF_PARSER_CALLBACK(p, got_prop(name, t.text())); - } else if (t.type() == tp_type) { - t = p.expect(colon_type, "`:'"); - - t = p.expect(text_type, "word or quoted string"); - ATF_PARSER_CALLBACK(p, got_tp(t.text(), false)); - } else if (t.type() == tp_glob_type) { - t = p.expect(colon_type, "`:'"); - - t = p.expect(text_type, "word or quoted string"); - ATF_PARSER_CALLBACK(p, got_tp(t.text(), true)); - } else if (t.type() == nl_type) { - continue; - } else - UNREACHABLE; - - t = p.expect(nl_type, hash_type, eof_type, - "new line or comment"); - if (t.type() == hash_type) { - (void)p.rest_of_line(); - t = p.next(); - } else if (t.type() == eof_type) - break; - } catch (const parse_error& pe) { - p.add_error(pe); - p.reset(nl_type); - } - } - - ATF_PARSER_CALLBACK(p, got_eof()); -} - -// ------------------------------------------------------------------------ -// The "reader" helper class. -// ------------------------------------------------------------------------ - -class reader : public detail::atf_atffile_reader { - const atf::fs::directory& m_dir; - atf::tests::vars_map m_conf, m_props; - std::vector< std::string > m_tps; - - void - got_tp(const std::string& name, bool isglob) - { - if (isglob) { - std::vector< std::string > ms = - atf::expand::expand_glob(name, m_dir.names()); - // Cannot use m_tps.insert(iterator, begin, end) here because it - // does not work under Solaris. - for (std::vector< std::string >::const_iterator iter = ms.begin(); - iter != ms.end(); iter++) - m_tps.push_back(*iter); - } else { - if (m_dir.find(name) == m_dir.end()) - throw atf::not_found_error< atf::fs::path > - ("Cannot locate the " + name + " file", - atf::fs::path(name)); - m_tps.push_back(name); - } - } - - void - got_prop(const std::string& name, const std::string& val) - { - m_props[name] = val; - } - - void - got_conf(const std::string& var, const std::string& val) - { - m_conf[var] = val; - } - -public: - reader(std::istream& is, const atf::fs::directory& dir) : - detail::atf_atffile_reader(is), - m_dir(dir) - { - } - - const atf::tests::vars_map& - conf(void) - const - { - return m_conf; - } - - const atf::tests::vars_map& - props(void) - const - { - return m_props; - } - - const std::vector< std::string >& - tps(void) - const - { - return m_tps; - } -}; - -// ------------------------------------------------------------------------ -// The "atffile" class. -// ------------------------------------------------------------------------ - -impl::atffile::atffile(const atf::tests::vars_map& config_vars, - const std::vector< std::string >& test_program_names, - const atf::tests::vars_map& properties) : - m_conf(config_vars), - m_tps(test_program_names), - m_props(properties) -{ - PRE(properties.find("test-suite") != properties.end()); -} - -const std::vector< std::string >& -impl::atffile::tps(void) - const -{ - return m_tps; -} - -const atf::tests::vars_map& -impl::atffile::conf(void) - const -{ - return m_conf; -} - -const atf::tests::vars_map& -impl::atffile::props(void) - const -{ - return m_props; -} - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -// XXX Glob expansion and file existance checks certainly do not belong in -// a *parser*. This needs to be taken out... -impl::atffile -impl::read_atffile(const atf::fs::path& filename) -{ - // Scan the directory where the atffile lives in to gather a list of - // all possible test programs in it. - fs::directory dir(filename.branch_path()); - dir.erase(filename.leaf_name()); - fs::directory::iterator iter = dir.begin(); - while (iter != dir.end()) { - const std::string& name = (*iter).first; - const fs::file_info& fi = (*iter).second; - - // Discard hidden files and non-executable ones so that they are - // not candidates for glob matching. - if (name[0] == '.' || (!fi.is_owner_executable() && - !fi.is_group_executable())) - dir.erase(iter++); - else - iter++; - } - - // Parse the atffile. - std::ifstream is(filename.c_str()); - if (!is) - throw atf::not_found_error< fs::path > - ("Cannot open Atffile", filename); - reader r(is, dir); - r.read(); - is.close(); - - // Sanity checks. - if (r.props().find("test-suite") == r.props().end()) - throw atf::not_found_error< std::string > - ("Undefined property `test-suite'", "test-suite"); - - return atffile(r.conf(), r.tps(), r.props()); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/signals_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/signals_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/signals_test.cpp (nonexistent) @@ -1,275 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include -#include -} - -#include -#include -#include - -#include "atf-c++/macros.hpp" - -#include "atf-c++/detail/exceptions.hpp" -#include "atf-c++/detail/process.hpp" - -#include "signals.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -namespace sigusr1 { - static bool happened = false; - - static - void - handler(int signo) - { - happened = true; - } - - static - void - program(void) - { - struct sigaction sa; - sa.sa_handler = handler; - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - if (::sigaction(SIGUSR1, &sa, NULL) == -1) - throw atf::system_error("sigusr1::program", - "sigaction(2) failed", errno); - } -} // namespace sigusr1 - -namespace sigusr1_2 { - static bool happened = false; - - static - void - handler(int signo) - { - happened = true; - } -} // namespace sigusr1_2 - -// ------------------------------------------------------------------------ -// Tests for the "signal_holder" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(signal_holder_preserve); -ATF_TEST_CASE_HEAD(signal_holder_preserve) -{ - set_md_var("descr", "Tests that signal_holder preserves the original " - "signal handler and restores it upon destruction"); -} -ATF_TEST_CASE_BODY(signal_holder_preserve) -{ - using atf::atf_run::signal_holder; - - sigusr1::program(); - - sigusr1::happened = false; - ::kill(::getpid(), SIGUSR1); - ATF_REQUIRE(sigusr1::happened); - - { - signal_holder hld(SIGUSR1); - ::kill(::getpid(), SIGUSR1); - } - - sigusr1::happened = false; - ::kill(::getpid(), SIGUSR1); - ATF_REQUIRE(sigusr1::happened); -} - -ATF_TEST_CASE(signal_holder_destructor); -ATF_TEST_CASE_HEAD(signal_holder_destructor) -{ - set_md_var("descr", "Tests that signal_holder processes a pending " - "signal upon destruction"); -} -ATF_TEST_CASE_BODY(signal_holder_destructor) -{ - using atf::atf_run::signal_holder; - - sigusr1::program(); - - sigusr1::happened = false; - ::kill(::getpid(), SIGUSR1); - ATF_REQUIRE(sigusr1::happened); - - { - signal_holder hld(SIGUSR1); - - sigusr1::happened = false; - ::kill(::getpid(), SIGUSR1); - ATF_REQUIRE(!sigusr1::happened); - } - ATF_REQUIRE(sigusr1::happened); -} - -ATF_TEST_CASE(signal_holder_process); -ATF_TEST_CASE_HEAD(signal_holder_process) -{ - set_md_var("descr", "Tests that signal_holder's process method works " - "to process a delayed signal explicitly"); -} -ATF_TEST_CASE_BODY(signal_holder_process) -{ - using atf::atf_run::signal_holder; - - sigusr1::program(); - - sigusr1::happened = false; - ::kill(::getpid(), SIGUSR1); - ATF_REQUIRE(sigusr1::happened); - - { - signal_holder hld(SIGUSR1); - - sigusr1::happened = false; - ::kill(::getpid(), SIGUSR1); - ATF_REQUIRE(!sigusr1::happened); - - hld.process(); - ATF_REQUIRE(sigusr1::happened); - - sigusr1::happened = false; - } - ATF_REQUIRE(!sigusr1::happened); -} - -// ------------------------------------------------------------------------ -// Tests for the "signal_programmer" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(signal_programmer_program); -ATF_TEST_CASE_HEAD(signal_programmer_program) -{ - set_md_var("descr", "Tests that signal_programmer correctly installs a " - "handler"); -} -ATF_TEST_CASE_BODY(signal_programmer_program) -{ - using atf::atf_run::signal_programmer; - - signal_programmer sp(SIGUSR1, sigusr1_2::handler); - - sigusr1_2::happened = false; - ::kill(::getpid(), SIGUSR1); - ATF_REQUIRE(sigusr1_2::happened); -} - -ATF_TEST_CASE(signal_programmer_preserve); -ATF_TEST_CASE_HEAD(signal_programmer_preserve) -{ - set_md_var("descr", "Tests that signal_programmer uninstalls the " - "handler during destruction"); -} -ATF_TEST_CASE_BODY(signal_programmer_preserve) -{ - using atf::atf_run::signal_programmer; - - sigusr1::program(); - sigusr1::happened = false; - - { - signal_programmer sp(SIGUSR1, sigusr1_2::handler); - - sigusr1_2::happened = false; - ::kill(::getpid(), SIGUSR1); - ATF_REQUIRE(sigusr1_2::happened); - } - - ATF_REQUIRE(!sigusr1::happened); - ::kill(::getpid(), SIGUSR1); - ATF_REQUIRE(sigusr1::happened); -} - -// ------------------------------------------------------------------------ -// Tests cases for the free functions. -// ------------------------------------------------------------------------ - -static -void -reset_child(void *v) -{ - sigusr1::program(); - - sigusr1::happened = false; - atf::atf_run::reset(SIGUSR1); - kill(::getpid(), SIGUSR1); - - if (sigusr1::happened) { - std::cerr << "Signal was not resetted correctly\n"; - std::abort(); - } else { - std::exit(EXIT_SUCCESS); - } -} - -ATF_TEST_CASE(reset); -ATF_TEST_CASE_HEAD(reset) -{ - set_md_var("descr", "Tests the reset function"); -} -ATF_TEST_CASE_BODY(reset) -{ - atf::process::child c = - atf::process::fork(reset_child, atf::process::stream_inherit(), - atf::process::stream_inherit(), NULL); - - const atf::process::status s = c.wait(); - ATF_REQUIRE(s.exited() || s.signaled()); - ATF_REQUIRE(!s.signaled() || s.termsig() == SIGUSR1); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the tests for the "signal_holder" class. - ATF_ADD_TEST_CASE(tcs, signal_holder_preserve); - ATF_ADD_TEST_CASE(tcs, signal_holder_destructor); - ATF_ADD_TEST_CASE(tcs, signal_holder_process); - - // Add the tests for the "signal_programmer" class. - ATF_ADD_TEST_CASE(tcs, signal_programmer_program); - ATF_ADD_TEST_CASE(tcs, signal_programmer_preserve); - - // Add the test cases for the free functions. - ATF_ADD_TEST_CASE(tcs, reset); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/expect_helpers.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/expect_helpers.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/expect_helpers.c (nonexistent) @@ -1,193 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include - -#include - -ATF_TC_WITHOUT_HEAD(pass_and_pass); -ATF_TC_BODY(pass_and_pass, tc) -{ - atf_tc_expect_pass(); -} - -ATF_TC_WITHOUT_HEAD(pass_but_fail_requirement); -ATF_TC_BODY(pass_but_fail_requirement, tc) -{ - atf_tc_expect_pass(); - atf_tc_fail("Some reason"); -} - -ATF_TC_WITHOUT_HEAD(pass_but_fail_check); -ATF_TC_BODY(pass_but_fail_check, tc) -{ - atf_tc_expect_pass(); - atf_tc_fail_nonfatal("Some reason"); -} - -ATF_TC_WITHOUT_HEAD(fail_and_fail_requirement); -ATF_TC_BODY(fail_and_fail_requirement, tc) -{ - atf_tc_expect_fail("Fail %s", "reason"); - atf_tc_fail("The failure"); - atf_tc_expect_pass(); -} - -ATF_TC_WITHOUT_HEAD(fail_and_fail_check); -ATF_TC_BODY(fail_and_fail_check, tc) -{ - atf_tc_expect_fail("Fail first"); - atf_tc_fail_nonfatal("abc"); - atf_tc_expect_pass(); - - atf_tc_expect_fail("And fail again"); - atf_tc_fail_nonfatal("def"); - atf_tc_expect_pass(); -} - -ATF_TC_WITHOUT_HEAD(fail_but_pass); -ATF_TC_BODY(fail_but_pass, tc) -{ - atf_tc_expect_fail("Fail first"); - atf_tc_fail_nonfatal("abc"); - atf_tc_expect_pass(); - - atf_tc_expect_fail("Will not fail"); - atf_tc_expect_pass(); - - atf_tc_expect_fail("And fail again"); - atf_tc_fail_nonfatal("def"); - atf_tc_expect_pass(); -} - -ATF_TC_WITHOUT_HEAD(exit_any_and_exit); -ATF_TC_BODY(exit_any_and_exit, tc) -{ - atf_tc_expect_exit(-1, "Call will exit"); - exit(EXIT_SUCCESS); -} - -ATF_TC_WITHOUT_HEAD(exit_code_and_exit); -ATF_TC_BODY(exit_code_and_exit, tc) -{ - atf_tc_expect_exit(123, "Call will exit"); - exit(123); -} - -ATF_TC_WITHOUT_HEAD(exit_but_pass); -ATF_TC_BODY(exit_but_pass, tc) -{ - atf_tc_expect_exit(-1, "Call won't exit"); -} - -ATF_TC_WITHOUT_HEAD(signal_any_and_signal); -ATF_TC_BODY(signal_any_and_signal, tc) -{ - atf_tc_expect_signal(-1, "Call will signal"); - kill(getpid(), SIGKILL); -} - -ATF_TC_WITHOUT_HEAD(signal_no_and_signal); -ATF_TC_BODY(signal_no_and_signal, tc) -{ - atf_tc_expect_signal(SIGHUP, "Call will signal"); - kill(getpid(), SIGHUP); -} - -ATF_TC_WITHOUT_HEAD(signal_but_pass); -ATF_TC_BODY(signal_but_pass, tc) -{ - atf_tc_expect_signal(-1, "Call won't signal"); -} - -ATF_TC_WITHOUT_HEAD(death_and_exit); -ATF_TC_BODY(death_and_exit, tc) -{ - atf_tc_expect_death("Exit case"); - exit(123); -} - -ATF_TC_WITHOUT_HEAD(death_and_signal); -ATF_TC_BODY(death_and_signal, tc) -{ - atf_tc_expect_death("Signal case"); - kill(getpid(), SIGKILL); -} - -ATF_TC_WITHOUT_HEAD(death_but_pass); -ATF_TC_BODY(death_but_pass, tc) -{ - atf_tc_expect_death("Call won't die"); -} - -ATF_TC(timeout_and_hang); -ATF_TC_HEAD(timeout_and_hang, tc) -{ - atf_tc_set_md_var(tc, "timeout", "1"); -} -ATF_TC_BODY(timeout_and_hang, tc) -{ - atf_tc_expect_timeout("Will overrun"); - sleep(5); -} - -ATF_TC(timeout_but_pass); -ATF_TC_HEAD(timeout_but_pass, tc) -{ - atf_tc_set_md_var(tc, "timeout", "1"); -} -ATF_TC_BODY(timeout_but_pass, tc) -{ - atf_tc_expect_timeout("Will just exit"); -} - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, pass_and_pass); - ATF_TP_ADD_TC(tp, pass_but_fail_requirement); - ATF_TP_ADD_TC(tp, pass_but_fail_check); - ATF_TP_ADD_TC(tp, fail_and_fail_requirement); - ATF_TP_ADD_TC(tp, fail_and_fail_check); - ATF_TP_ADD_TC(tp, fail_but_pass); - ATF_TP_ADD_TC(tp, exit_any_and_exit); - ATF_TP_ADD_TC(tp, exit_code_and_exit); - ATF_TP_ADD_TC(tp, exit_but_pass); - ATF_TP_ADD_TC(tp, signal_any_and_signal); - ATF_TP_ADD_TC(tp, signal_no_and_signal); - ATF_TP_ADD_TC(tp, signal_but_pass); - ATF_TP_ADD_TC(tp, death_and_exit); - ATF_TP_ADD_TC(tp, death_and_signal); - ATF_TP_ADD_TC(tp, death_but_pass); - ATF_TP_ADD_TC(tp, timeout_and_hang); - ATF_TP_ADD_TC(tp, timeout_but_pass); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/bad_metadata_helper.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/bad_metadata_helper.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/bad_metadata_helper.c (nonexistent) @@ -1,38 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2010 The NetBSD Foundation, Inc. - * 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 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 -#include - -int -main(void) -{ - printf("incorrectly formatted metadata\n"); - return EXIT_SUCCESS; -} Index: vendor/NetBSD/atf/dist/dist/atf-run/atffile.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/atffile.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/atffile.hpp (nonexistent) @@ -1,95 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_RUN_ATFFILE_HPP_) -#define _ATF_RUN_ATFFILE_HPP_ - -#include -#include - -#include "atf-c++/tests.hpp" - -#include "atf-c++/detail/fs.hpp" - -namespace atf { -namespace atf_run { - -// ------------------------------------------------------------------------ -// The "atf_atffile_reader" class. -// ------------------------------------------------------------------------ - -namespace detail { - -class atf_atffile_reader { - std::istream& m_is; - -protected: - virtual void got_conf(const std::string&, const std::string &); - virtual void got_prop(const std::string&, const std::string &); - virtual void got_tp(const std::string&, bool); - virtual void got_eof(void); - -public: - atf_atffile_reader(std::istream&); - virtual ~atf_atffile_reader(void); - - void read(void); -}; - -} // namespace detail - -// ------------------------------------------------------------------------ -// The "atffile" class. -// ------------------------------------------------------------------------ - -class atffile { - atf::tests::vars_map m_conf; - std::vector< std::string > m_tps; - atf::tests::vars_map m_props; - -public: - atffile(const atf::tests::vars_map&, - const std::vector< std::string >&, - const atf::tests::vars_map&); - - const atf::tests::vars_map& conf(void) const; - const std::vector< std::string >& tps(void) const; - const atf::tests::vars_map& props(void) const; -}; - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -atffile read_atffile(const fs::path&); - -} // namespace atf_run -} // namespace atf - -#endif // !defined(_ATF_RUN_ATFFILE_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-run/io_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/io_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/io_test.cpp (nonexistent) @@ -1,470 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include - -#include -#include -} - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "../atf-c++/detail/sanity.hpp" -#include "../atf-c++/macros.hpp" - -#include "io.hpp" -#include "signals.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static -void -systembuf_check_data(std::istream& is, std::size_t length) -{ - char ch = 'A', chr; - std::size_t cnt = 0; - while (is >> chr) { - ATF_REQUIRE_EQ(ch, chr); - if (ch == 'Z') - ch = 'A'; - else - ch++; - cnt++; - } - ATF_REQUIRE_EQ(cnt, length); -} - -static -void -systembuf_write_data(std::ostream& os, std::size_t length) -{ - char ch = 'A'; - for (std::size_t i = 0; i < length; i++) { - os << ch; - if (ch == 'Z') - ch = 'A'; - else - ch++; - } - os.flush(); -} - -static -void -systembuf_test_read(std::size_t length, std::size_t bufsize) -{ - using atf::atf_run::systembuf; - - std::ofstream f("test_read.txt"); - systembuf_write_data(f, length); - f.close(); - - int fd = ::open("test_read.txt", O_RDONLY); - ATF_REQUIRE(fd != -1); - systembuf sb(fd, bufsize); - std::istream is(&sb); - systembuf_check_data(is, length); - ::close(fd); - ::unlink("test_read.txt"); -} - -static -void -systembuf_test_write(std::size_t length, std::size_t bufsize) -{ - using atf::atf_run::systembuf; - - int fd = ::open("test_write.txt", O_WRONLY | O_CREAT | O_TRUNC, - S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - ATF_REQUIRE(fd != -1); - systembuf sb(fd, bufsize); - std::ostream os(&sb); - systembuf_write_data(os, length); - ::close(fd); - - std::ifstream is("test_write.txt"); - systembuf_check_data(is, length); - is.close(); - ::unlink("test_write.txt"); -} - -// ------------------------------------------------------------------------ -// Test cases for the "file_handle" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(file_handle_ctor); -ATF_TEST_CASE_HEAD(file_handle_ctor) -{ - set_md_var("descr", "Tests file_handle's constructors"); -} -ATF_TEST_CASE_BODY(file_handle_ctor) -{ - using atf::atf_run::file_handle; - - file_handle fh1; - ATF_REQUIRE(!fh1.is_valid()); - - file_handle fh2(STDOUT_FILENO); - ATF_REQUIRE(fh2.is_valid()); - fh2.disown(); -} - -ATF_TEST_CASE(file_handle_copy); -ATF_TEST_CASE_HEAD(file_handle_copy) -{ - set_md_var("descr", "Tests file_handle's copy constructor"); -} -ATF_TEST_CASE_BODY(file_handle_copy) -{ - using atf::atf_run::file_handle; - - file_handle fh1; - file_handle fh2(STDOUT_FILENO); - - file_handle fh3(fh2); - ATF_REQUIRE(!fh2.is_valid()); - ATF_REQUIRE(fh3.is_valid()); - - fh1 = fh3; - ATF_REQUIRE(!fh3.is_valid()); - ATF_REQUIRE(fh1.is_valid()); - - fh1.disown(); -} - -ATF_TEST_CASE(file_handle_get); -ATF_TEST_CASE_HEAD(file_handle_get) -{ - set_md_var("descr", "Tests the file_handle::get method"); -} -ATF_TEST_CASE_BODY(file_handle_get) -{ - using atf::atf_run::file_handle; - - file_handle fh1(STDOUT_FILENO); - ATF_REQUIRE_EQ(fh1.get(), STDOUT_FILENO); -} - -ATF_TEST_CASE(file_handle_posix_remap); -ATF_TEST_CASE_HEAD(file_handle_posix_remap) -{ - set_md_var("descr", "Tests the file_handle::posix_remap method"); -} -ATF_TEST_CASE_BODY(file_handle_posix_remap) -{ - using atf::atf_run::file_handle; - - int pfd[2]; - - ATF_REQUIRE(::pipe(pfd) != -1); - file_handle rend(pfd[0]); - file_handle wend(pfd[1]); - - ATF_REQUIRE(rend.get() != 10); - ATF_REQUIRE(wend.get() != 10); - wend.posix_remap(10); - ATF_REQUIRE_EQ(wend.get(), 10); - ATF_REQUIRE(::write(wend.get(), "test-posix-remap", 16) != -1); - { - char buf[17]; - ATF_REQUIRE_EQ(::read(rend.get(), buf, sizeof(buf)), 16); - buf[16] = '\0'; - ATF_REQUIRE(std::strcmp(buf, "test-posix-remap") == 0); - } - - // Redo previous to ensure that remapping over the same descriptor - // has no side-effects. - ATF_REQUIRE_EQ(wend.get(), 10); - wend.posix_remap(10); - ATF_REQUIRE_EQ(wend.get(), 10); - ATF_REQUIRE(::write(wend.get(), "test-posix-remap", 16) != -1); - { - char buf[17]; - ATF_REQUIRE_EQ(::read(rend.get(), buf, sizeof(buf)), 16); - buf[16] = '\0'; - ATF_REQUIRE(std::strcmp(buf, "test-posix-remap") == 0); - } -} - -// ------------------------------------------------------------------------ -// Test cases for the "systembuf" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(systembuf_short_read); -ATF_TEST_CASE_HEAD(systembuf_short_read) -{ - set_md_var("descr", "Tests that a short read (one that fits in the " - "internal buffer) works when using systembuf"); -} -ATF_TEST_CASE_BODY(systembuf_short_read) -{ - systembuf_test_read(64, 1024); -} - -ATF_TEST_CASE(systembuf_long_read); -ATF_TEST_CASE_HEAD(systembuf_long_read) -{ - set_md_var("descr", "Tests that a long read (one that does not fit in " - "the internal buffer) works when using systembuf"); -} -ATF_TEST_CASE_BODY(systembuf_long_read) -{ - systembuf_test_read(64 * 1024, 1024); -} - -ATF_TEST_CASE(systembuf_short_write); -ATF_TEST_CASE_HEAD(systembuf_short_write) -{ - set_md_var("descr", "Tests that a short write (one that fits in the " - "internal buffer) works when using systembuf"); -} -ATF_TEST_CASE_BODY(systembuf_short_write) -{ - systembuf_test_write(64, 1024); -} - -ATF_TEST_CASE(systembuf_long_write); -ATF_TEST_CASE_HEAD(systembuf_long_write) -{ - set_md_var("descr", "Tests that a long write (one that does not fit " - "in the internal buffer) works when using systembuf"); -} -ATF_TEST_CASE_BODY(systembuf_long_write) -{ - systembuf_test_write(64 * 1024, 1024); -} - -// ------------------------------------------------------------------------ -// Test cases for the "pistream" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(pistream); -ATF_TEST_CASE_HEAD(pistream) -{ - set_md_var("descr", "Tests the pistream class"); -} -ATF_TEST_CASE_BODY(pistream) -{ - using atf::atf_run::file_handle; - using atf::atf_run::pistream; - using atf::atf_run::systembuf; - - int fds[2]; - ATF_REQUIRE(::pipe(fds) != -1); - - pistream rend(fds[0]); - - systembuf wbuf(fds[1]); - std::ostream wend(&wbuf); - - // XXX This assumes that the pipe's buffer is big enough to accept - // the data written without blocking! - wend << "1Test 1message\n"; - wend.flush(); - std::string tmp; - rend >> tmp; - ATF_REQUIRE_EQ(tmp, "1Test"); - rend >> tmp; - ATF_REQUIRE_EQ(tmp, "1message"); -} - -// ------------------------------------------------------------------------ -// Tests for the "muxer" class. -// ------------------------------------------------------------------------ - -namespace { - -static void -check_stream(std::ostream& os) -{ - // If we receive a signal while writing to the stream, the bad bit gets set. - // Things seem to behave fine afterwards if we clear such error condition. - // However, I'm not sure if it's safe to query errno at this point. - ATF_REQUIRE(os.good() || (os.bad() && errno == EINTR)); - os.clear(); -} - -class mock_muxer : public atf::atf_run::muxer { - void line_callback(const size_t index, const std::string& line) - { - // The following should be enabled but causes the output to be so big - // that it is annoying. Reenable at some point if we make atf store - // the output of the test cases in some other way (e.g. only if a test - // failes), because this message is the only help in seeing how the - // test fails. - //std::cout << "line_callback(" << index << ", " << line << ")\n"; - check_stream(std::cout); - switch (index) { - case 0: lines0.push_back(line); break; - case 1: lines1.push_back(line); break; - default: ATF_REQUIRE(false); - } - } - -public: - mock_muxer(const int* fds, const size_t nfds, const size_t bufsize) : - muxer(fds, nfds, bufsize) {} - - std::vector< std::string > lines0; - std::vector< std::string > lines1; -}; - -static bool child_finished = false; -static void sigchld_handler(int signo) -{ - INV(signo == SIGCHLD); - child_finished = true; -} - -static void -child_printer(const int pipeout[2], const int pipeerr[2], - const size_t iterations) -{ - ::close(pipeout[0]); - ::close(pipeerr[0]); - ATF_REQUIRE(::dup2(pipeout[1], STDOUT_FILENO) != -1); - ATF_REQUIRE(::dup2(pipeerr[1], STDERR_FILENO) != -1); - ::close(pipeout[1]); - ::close(pipeerr[1]); - - for (size_t i = 0; i < iterations; i++) { - std::cout << "stdout " << i << "\n"; - std::cerr << "stderr " << i << "\n"; - } - - std::cout << "stdout eof\n"; - std::cerr << "stderr eof\n"; - std::exit(EXIT_SUCCESS); -} - -static void -muxer_test(const size_t bufsize, const size_t iterations) -{ - int pipeout[2], pipeerr[2]; - ATF_REQUIRE(pipe(pipeout) != -1); - ATF_REQUIRE(pipe(pipeerr) != -1); - - atf::atf_run::signal_programmer sigchld(SIGCHLD, sigchld_handler); - - std::cout.flush(); - std::cerr.flush(); - - pid_t pid = ::fork(); - ATF_REQUIRE(pid != -1); - if (pid == 0) { - sigchld.unprogram(); - child_printer(pipeout, pipeerr, iterations); - UNREACHABLE; - } - ::close(pipeout[1]); - ::close(pipeerr[1]); - - int fds[2] = {pipeout[0], pipeerr[0]}; - mock_muxer mux(fds, 2, bufsize); - - mux.mux(child_finished); - check_stream(std::cout); - std::cout << "mux done\n"; - - mux.flush(); - std::cout << "flush done\n"; - check_stream(std::cout); - - int status; - ::wait(&status); - ATF_REQUIRE(WIFEXITED(status)); - ATF_REQUIRE(WEXITSTATUS(status) == EXIT_SUCCESS); - - ATF_REQUIRE(std::cout.good()); - ATF_REQUIRE(std::cerr.good()); - for (size_t i = 0; i < iterations; i++) { - std::ostringstream exp0, exp1; - exp0 << "stdout " << i; - exp1 << "stderr " << i; - - ATF_REQUIRE(mux.lines0.size() > i); - ATF_REQUIRE_EQ(exp0.str(), mux.lines0[i]); - ATF_REQUIRE(mux.lines1.size() > i); - ATF_REQUIRE_EQ(exp1.str(), mux.lines1[i]); - } - ATF_REQUIRE_EQ("stdout eof", mux.lines0[iterations]); - ATF_REQUIRE_EQ("stderr eof", mux.lines1[iterations]); - std::cout << "all done\n"; -} - -} // anonymous namespace - -ATF_TEST_CASE_WITHOUT_HEAD(muxer_small_buffer); -ATF_TEST_CASE_BODY(muxer_small_buffer) -{ - muxer_test(4, 20000); -} - -ATF_TEST_CASE_WITHOUT_HEAD(muxer_large_buffer); -ATF_TEST_CASE_BODY(muxer_large_buffer) -{ - muxer_test(1024, 50000); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the tests for the "file_handle" class. - ATF_ADD_TEST_CASE(tcs, file_handle_ctor); - ATF_ADD_TEST_CASE(tcs, file_handle_copy); - ATF_ADD_TEST_CASE(tcs, file_handle_get); - ATF_ADD_TEST_CASE(tcs, file_handle_posix_remap); - - // Add the tests for the "systembuf" class. - ATF_ADD_TEST_CASE(tcs, systembuf_short_read); - ATF_ADD_TEST_CASE(tcs, systembuf_long_read); - ATF_ADD_TEST_CASE(tcs, systembuf_short_write); - ATF_ADD_TEST_CASE(tcs, systembuf_long_write); - - // Add the tests for the "pistream" class. - ATF_ADD_TEST_CASE(tcs, pistream); - - // Add the tests for the "muxer" class. - ATF_ADD_TEST_CASE(tcs, muxer_small_buffer); - ATF_ADD_TEST_CASE(tcs, muxer_large_buffer); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/timer.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/timer.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/timer.cpp (nonexistent) @@ -1,125 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -} - -#include - -#include "atf-c++/detail/exceptions.hpp" -#include "atf-c++/detail/sanity.hpp" - -#include "signals.hpp" -#include "timer.hpp" - -namespace impl = atf::atf_run; -#define IMPL_NAME "atf::atf_run" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -namespace sigalrm { - -bool m_fired = false; -impl::timer* m_timer = NULL; - -void -handler(const int signo) -{ - PRE(signo == SIGALRM); - - m_fired = true; - m_timer->timeout_callback(); -} - -} // anonymous namespace - -// ------------------------------------------------------------------------ -// The "timer" class. -// ------------------------------------------------------------------------ - -impl::timer::timer(const unsigned int seconds) -{ - sigalrm::m_fired = false; - sigalrm::m_timer = this; - m_sigalrm.reset(new signal_programmer(SIGALRM, sigalrm::handler)); - - ::itimerval timeval; - timeval.it_interval.tv_sec = 0; - timeval.it_interval.tv_usec = 0; - timeval.it_value.tv_sec = seconds; - timeval.it_value.tv_usec = 0; - - if (::setitimer(ITIMER_REAL, &timeval, &m_old_timeval) == -1) - throw system_error(IMPL_NAME "::timer::timer", - "Failed to program timer", errno); -} - -impl::timer::~timer(void) -{ - const int ret = ::setitimer(ITIMER_REAL, &m_old_timeval, NULL); - INV(ret != -1); - sigalrm::m_timer = NULL; - sigalrm::m_fired = false; -} - -bool -impl::timer::fired(void) - const -{ - return sigalrm::m_fired; -} - -// ------------------------------------------------------------------------ -// The "child_timer" class. -// ------------------------------------------------------------------------ - -impl::child_timer::child_timer(const unsigned int seconds, const pid_t pid, - volatile bool& terminate) : - timer(seconds), - m_pid(pid), - m_terminate(terminate) -{ -} - -impl::child_timer::~child_timer(void) -{ -} - -void -impl::child_timer::timeout_callback(void) -{ - m_terminate = true; - - // Should use killpg(2) but, according to signal(7), using this system - // call in a signal handler context is not safe. - ::kill(m_pid, SIGKILL); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/fs.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/fs.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/fs.hpp (nonexistent) @@ -1,57 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_RUN_FS_HPP_) -#define _ATF_RUN_FS_HPP_ - -#include - -#include "atf-c++/detail/fs.hpp" - -namespace atf { -namespace atf_run { - -class temp_dir { - std::auto_ptr< atf::fs::path > m_path; - -public: - temp_dir(const atf::fs::path&); - ~temp_dir(void); - - const atf::fs::path& get_path(void) const; -}; - -atf::fs::path change_directory(const atf::fs::path&); -void cleanup(const atf::fs::path&); -atf::fs::path get_current_dir(void); - -} // namespace atf_run -} // namespace atf - -#endif // !defined(_ATF_RUN_FS_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-run/fs.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/fs.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/fs.cpp (nonexistent) @@ -1,264 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2011 The NetBSD Foundation, Inc. -// 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 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. -// - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -extern "C" { -#include -#include -#include -#include - -#include -} - -#include -#include -#include - -#include "atf-c++/detail/process.hpp" -#include "atf-c++/detail/sanity.hpp" - -#include "fs.hpp" -#include "user.hpp" - -namespace impl = atf::atf_run; -#define IMPL_NAME "atf::atf_run" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static void cleanup_aux(const atf::fs::path&, dev_t, bool); -static void cleanup_aux_dir(const atf::fs::path&, const atf::fs::file_info&, - bool); -static void do_unmount(const atf::fs::path&); - -// The cleanup routines below are tricky: they are executed immediately after -// a test case's death, and after we have forcibly killed any stale processes. -// However, even if the processes are dead, this does not mean that the file -// system we are scanning is stable. In particular, if the test case has -// mounted file systems through fuse/puffs, the fact that the processes died -// does not mean that the file system is truly unmounted. -// -// The code below attempts to cope with this by catching errors and either -// ignoring them or retrying the actions on the same file/directory a few times -// before giving up. -static const int max_retries = 5; -static const int retry_delay_in_seconds = 1; - -// The erase parameter in this routine is to control nested mount points. -// We want to descend into a mount point to unmount anything that is -// mounted under it, but we do not want to delete any files while doing -// this traversal. In other words, we erase files until we cross the -// first mount point, and after that point we only scan and unmount. -static -void -cleanup_aux(const atf::fs::path& p, dev_t parent_device, bool erase) -{ - try { - atf::fs::file_info fi(p); - - if (fi.get_type() == atf::fs::file_info::dir_type) - cleanup_aux_dir(p, fi, fi.get_device() == parent_device); - - if (fi.get_device() != parent_device) - do_unmount(p); - - if (erase) { - if (fi.get_type() == atf::fs::file_info::dir_type) - atf::fs::rmdir(p); - else - atf::fs::remove(p); - } - } catch (const atf::system_error& e) { - if (e.code() != ENOENT && e.code() != ENOTDIR) - throw e; - } -} - -static -void -cleanup_aux_dir(const atf::fs::path& p, const atf::fs::file_info& fi, - bool erase) -{ - if (erase && ((fi.get_mode() & S_IRWXU) != S_IRWXU)) { - int retries = max_retries; -retry_chmod: - if (chmod(p.c_str(), fi.get_mode() | S_IRWXU) == -1) { - if (retries > 0) { - retries--; - ::sleep(retry_delay_in_seconds); - goto retry_chmod; - } else { - throw atf::system_error(IMPL_NAME "::cleanup(" + - p.str() + ")", "chmod(2) failed", - errno); - } - } - } - - std::set< std::string > subdirs; - { - bool ok = false; - int retries = max_retries; - while (!ok) { - INV(retries > 0); - try { - const atf::fs::directory d(p); - subdirs = d.names(); - ok = true; - } catch (const atf::system_error& e) { - if (retries == 0) - throw e; - retries--; - ::sleep(retry_delay_in_seconds); - } - } - INV(ok); - } - - for (std::set< std::string >::const_iterator iter = subdirs.begin(); - iter != subdirs.end(); iter++) { - const std::string& name = *iter; - if (name != "." && name != "..") - cleanup_aux(p / name, fi.get_device(), erase); - } -} - -static -void -do_unmount(const atf::fs::path& in_path) -{ - // At least, FreeBSD's unmount(2) requires the path to be absolute. - // Let's make it absolute in all cases just to be safe that this does - // not affect other systems. - const atf::fs::path& abs_path = in_path.is_absolute() ? - in_path : in_path.to_absolute(); - -#if defined(HAVE_UNMOUNT) - int retries = max_retries; -retry_unmount: - if (unmount(abs_path.c_str(), 0) == -1) { - if (errno == EBUSY && retries > 0) { - retries--; - ::sleep(retry_delay_in_seconds); - goto retry_unmount; - } else { - throw atf::system_error(IMPL_NAME "::cleanup(" + in_path.str() + - ")", "unmount(2) failed", errno); - } - } -#else - // We could use umount(2) instead if it was available... but - // trying to do so under, e.g. Linux, is a nightmare because we - // also have to update /etc/mtab to match what we did. It is - // satf::fser to just leave the system-specific umount(8) tool deal - // with it, at least for now. - - const atf::fs::path prog("umount"); - atf::process::argv_array argv("umount", abs_path.c_str(), NULL); - - atf::process::status s = atf::process::exec(prog, argv, - atf::process::stream_inherit(), atf::process::stream_inherit()); - if (!s.exited() || s.exitstatus() != EXIT_SUCCESS) - throw std::runtime_error("Call to unmount failed"); -#endif -} - -// ------------------------------------------------------------------------ -// The "temp_dir" class. -// ------------------------------------------------------------------------ - -impl::temp_dir::temp_dir(const atf::fs::path& p) -{ - atf::utils::auto_array< char > buf(new char[p.str().length() + 1]); - std::strcpy(buf.get(), p.c_str()); - if (::mkdtemp(buf.get()) == NULL) - throw system_error(IMPL_NAME "::temp_dir::temp_dir(" + - p.str() + ")", "mkdtemp(3) failed", - errno); - - m_path.reset(new atf::fs::path(buf.get())); -} - -impl::temp_dir::~temp_dir(void) -{ - cleanup(*m_path); -} - -const atf::fs::path& -impl::temp_dir::get_path(void) - const -{ - return *m_path; -} - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -atf::fs::path -impl::change_directory(const atf::fs::path& dir) -{ - atf::fs::path olddir = get_current_dir(); - - if (olddir != dir) { - if (::chdir(dir.c_str()) == -1) - throw system_error(IMPL_NAME "::chdir(" + dir.str() + ")", - "chdir(2) failed", errno); - } - - return olddir; -} - -void -impl::cleanup(const atf::fs::path& p) -{ - atf::fs::file_info fi(p); - cleanup_aux(p, fi.get_device(), true); -} - -atf::fs::path -impl::get_current_dir(void) -{ - std::auto_ptr< char > cwd; -#if defined(HAVE_GETCWD_DYN) - cwd.reset(getcwd(NULL, 0)); -#else - cwd.reset(getcwd(NULL, MAXPATHLEN)); -#endif - if (cwd.get() == NULL) - throw atf::system_error(IMPL_NAME "::get_current_dir()", - "getcwd() failed", errno); - - return atf::fs::path(cwd.get()); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/several_tcs_helper.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/several_tcs_helper.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/several_tcs_helper.c (nonexistent) @@ -1,70 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2010 The NetBSD Foundation, Inc. - * 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 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 - -ATF_TC(first); -ATF_TC_HEAD(first, tc) -{ - atf_tc_set_md_var(tc, "descr", "Description 1"); -} -ATF_TC_BODY(first, tc) -{ -} - -ATF_TC_WITH_CLEANUP(second); -ATF_TC_HEAD(second, tc) -{ - atf_tc_set_md_var(tc, "descr", "Description 2"); - atf_tc_set_md_var(tc, "timeout", "500"); - atf_tc_set_md_var(tc, "X-property", "Custom property"); -} -ATF_TC_BODY(second, tc) -{ -} -ATF_TC_CLEANUP(second, tc) -{ -} - -ATF_TC(third); -ATF_TC_HEAD(third, tc) -{ -} -ATF_TC_BODY(third, tc) -{ -} - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, first); - ATF_TP_ADD_TC(tp, second); - ATF_TP_ADD_TC(tp, third); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/atf-run.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/atf-run.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/atf-run.cpp (nonexistent) @@ -1,555 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010, 2011 The NetBSD Foundation, Inc. -// 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 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. -// - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -extern "C" { -#include -#include -#include -#include -} - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "atf-c++/detail/application.hpp" -#include "atf-c++/config.hpp" -#include "atf-c++/tests.hpp" - -#include "atf-c++/detail/env.hpp" -#include "atf-c++/detail/exceptions.hpp" -#include "atf-c++/detail/fs.hpp" -#include "atf-c++/detail/parser.hpp" -#include "atf-c++/detail/process.hpp" -#include "atf-c++/detail/sanity.hpp" -#include "atf-c++/detail/text.hpp" - -#include "atffile.hpp" -#include "config.hpp" -#include "fs.hpp" -#include "requirements.hpp" -#include "test-program.hpp" - -namespace impl = atf::atf_run; - -class atf_run : public atf::application::app { - static const char* m_description; - - atf::tests::vars_map m_cmdline_vars; - - static atf::tests::vars_map::value_type parse_var(const std::string&); - - void process_option(int, const char*); - std::string specific_args(void) const; - options_set specific_options(void) const; - - void parse_vflag(const std::string&); - - std::vector< std::string > conf_args(void) const; - - size_t count_tps(std::vector< std::string >) const; - - int run_test(const atf::fs::path&, impl::atf_tps_writer&, - const atf::tests::vars_map&); - int run_test_directory(const atf::fs::path&, impl::atf_tps_writer&); - int run_test_program(const atf::fs::path&, impl::atf_tps_writer&, - const atf::tests::vars_map&); - - impl::test_case_result get_test_case_result(const std::string&, - const atf::process::status&, const atf::fs::path&) const; - -public: - atf_run(void); - - int main(void); -}; - -static void -sanitize_gdb_env(void) -{ - try { - atf::env::unset("TERM"); - } catch (...) { - // Just swallow exceptions here; they cannot propagate into C, which - // is where this function is called from, and even if these exceptions - // appear they are benign. - } -} - -static void -dump_stacktrace(const atf::fs::path& tp, const atf::process::status& s, - const atf::fs::path& workdir, impl::atf_tps_writer& w) -{ - PRE(s.signaled() && s.coredump()); - - w.stderr_tc("Test program crashed; attempting to get stack trace"); - - const atf::fs::path corename = workdir / (tp.leaf_name() + ".core"); - if (!atf::fs::exists(corename)) { - w.stderr_tc("Expected file " + corename.str() + " not found"); - return; - } - - const atf::fs::path gdb(GDB); - const atf::fs::path gdbout = workdir / "gdb.out"; - const atf::process::argv_array args(gdb.leaf_name().c_str(), "-batch", - "-q", "-ex", "bt", tp.c_str(), - corename.c_str(), NULL); - atf::process::status status = atf::process::exec( - gdb, args, - atf::process::stream_redirect_path(gdbout), - atf::process::stream_redirect_path(atf::fs::path("/dev/null")), - sanitize_gdb_env); - if (!status.exited() || status.exitstatus() != EXIT_SUCCESS) { - w.stderr_tc("Execution of " GDB " failed"); - return; - } - - std::ifstream input(gdbout.c_str()); - if (input) { - std::string line; - while (std::getline(input, line).good()) - w.stderr_tc(line); - input.close(); - } - - w.stderr_tc("Stack trace complete"); -} - -const char* atf_run::m_description = - "atf-run is a tool that runs tests programs and collects their " - "results."; - -atf_run::atf_run(void) : - app(m_description, "atf-run(1)", "atf(7)") -{ -} - -void -atf_run::process_option(int ch, const char* arg) -{ - switch (ch) { - case 'v': - parse_vflag(arg); - break; - - default: - UNREACHABLE; - } -} - -std::string -atf_run::specific_args(void) - const -{ - return "[test-program1 .. test-programN]"; -} - -atf_run::options_set -atf_run::specific_options(void) - const -{ - using atf::application::option; - options_set opts; - opts.insert(option('v', "var=value", "Sets the configuration variable " - "`var' to `value'; overrides " - "values in configuration files")); - return opts; -} - -void -atf_run::parse_vflag(const std::string& str) -{ - if (str.empty()) - throw std::runtime_error("-v requires a non-empty argument"); - - std::vector< std::string > ws = atf::text::split(str, "="); - if (ws.size() == 1 && str[str.length() - 1] == '=') { - m_cmdline_vars[ws[0]] = ""; - } else { - if (ws.size() != 2) - throw std::runtime_error("-v requires an argument of the form " - "var=value"); - - m_cmdline_vars[ws[0]] = ws[1]; - } -} - -int -atf_run::run_test(const atf::fs::path& tp, - impl::atf_tps_writer& w, - const atf::tests::vars_map& config) -{ - atf::fs::file_info fi(tp); - - int errcode; - if (fi.get_type() == atf::fs::file_info::dir_type) - errcode = run_test_directory(tp, w); - else { - const atf::tests::vars_map effective_config = - impl::merge_configs(config, m_cmdline_vars); - - errcode = run_test_program(tp, w, effective_config); - } - return errcode; -} - -int -atf_run::run_test_directory(const atf::fs::path& tp, - impl::atf_tps_writer& w) -{ - impl::atffile af = impl::read_atffile(tp / "Atffile"); - - atf::tests::vars_map test_suite_vars; - { - atf::tests::vars_map::const_iterator iter = - af.props().find("test-suite"); - INV(iter != af.props().end()); - test_suite_vars = impl::read_config_files((*iter).second); - } - - bool ok = true; - for (std::vector< std::string >::const_iterator iter = af.tps().begin(); - iter != af.tps().end(); iter++) { - const bool result = run_test(tp / *iter, w, - impl::merge_configs(af.conf(), test_suite_vars)); - ok &= (result == EXIT_SUCCESS); - } - - return ok ? EXIT_SUCCESS : EXIT_FAILURE; -} - -impl::test_case_result -atf_run::get_test_case_result(const std::string& broken_reason, - const atf::process::status& s, - const atf::fs::path& resfile) - const -{ - using atf::text::to_string; - using impl::read_test_case_result; - using impl::test_case_result; - - if (!broken_reason.empty()) { - test_case_result tcr; - - try { - tcr = read_test_case_result(resfile); - - if (tcr.state() == "expected_timeout") { - return tcr; - } else { - return test_case_result("failed", -1, broken_reason); - } - } catch (const std::runtime_error&) { - return test_case_result("failed", -1, broken_reason); - } - } - - if (s.exited()) { - test_case_result tcr; - - try { - tcr = read_test_case_result(resfile); - } catch (const std::runtime_error& e) { - return test_case_result("failed", -1, "Test case exited " - "normally but failed to create the results file: " + - std::string(e.what())); - } - - if (tcr.state() == "expected_death") { - return tcr; - } else if (tcr.state() == "expected_exit") { - if (tcr.value() == -1 || s.exitstatus() == tcr.value()) - return tcr; - else - return test_case_result("failed", -1, "Test case was " - "expected to exit with a " + to_string(tcr.value()) + - " error code but returned " + to_string(s.exitstatus())); - } else if (tcr.state() == "expected_failure") { - if (s.exitstatus() == EXIT_SUCCESS) - return tcr; - else - return test_case_result("failed", -1, "Test case returned an " - "error in expected_failure mode but it should not have"); - } else if (tcr.state() == "expected_signal") { - return test_case_result("failed", -1, "Test case exited cleanly " - "but was expected to receive a signal"); - } else if (tcr.state() == "failed") { - if (s.exitstatus() == EXIT_SUCCESS) - return test_case_result("failed", -1, "Test case " - "exited successfully but reported failure"); - else - return tcr; - } else if (tcr.state() == "passed") { - if (s.exitstatus() == EXIT_SUCCESS) - return tcr; - else - return test_case_result("failed", -1, "Test case exited as " - "passed but reported an error"); - } else if (tcr.state() == "skipped") { - if (s.exitstatus() == EXIT_SUCCESS) - return tcr; - else - return test_case_result("failed", -1, "Test case exited as " - "skipped but reported an error"); - } - } else if (s.signaled()) { - test_case_result tcr; - - try { - tcr = read_test_case_result(resfile); - } catch (const std::runtime_error&) { - return test_case_result("failed", -1, "Test program received " - "signal " + atf::text::to_string(s.termsig()) + - (s.coredump() ? " (core dumped)" : "")); - } - - if (tcr.state() == "expected_death") { - return tcr; - } else if (tcr.state() == "expected_signal") { - if (tcr.value() == -1 || s.termsig() == tcr.value()) - return tcr; - else - return test_case_result("failed", -1, "Test case was " - "expected to exit due to a " + to_string(tcr.value()) + - " signal but got " + to_string(s.termsig())); - } else { - return test_case_result("failed", -1, "Test program received " - "signal " + atf::text::to_string(s.termsig()) + - (s.coredump() ? " (core dumped)" : "") + " and created a " - "bogus results file"); - } - } - UNREACHABLE; - return test_case_result(); -} - -int -atf_run::run_test_program(const atf::fs::path& tp, - impl::atf_tps_writer& w, - const atf::tests::vars_map& config) -{ - int errcode = EXIT_SUCCESS; - - impl::metadata md; - try { - md = impl::get_metadata(tp, config); - } catch (const atf::parser::format_error& e) { - w.start_tp(tp.str(), 0); - w.end_tp("Invalid format for test case list: " + std::string(e.what())); - return EXIT_FAILURE; - } catch (const atf::parser::parse_errors& e) { - const std::string reason = atf::text::join(e, "; "); - w.start_tp(tp.str(), 0); - w.end_tp("Invalid format for test case list: " + reason); - return EXIT_FAILURE; - } - - impl::temp_dir resdir(atf::fs::path(atf::config::get("atf_workdir")) / - "atf-run.XXXXXX"); - - w.start_tp(tp.str(), md.test_cases.size()); - if (md.test_cases.empty()) { - w.end_tp("Bogus test program: reported 0 test cases"); - errcode = EXIT_FAILURE; - } else { - for (std::map< std::string, atf::tests::vars_map >::const_iterator iter - = md.test_cases.begin(); iter != md.test_cases.end(); iter++) { - const std::string& tcname = (*iter).first; - const atf::tests::vars_map& tcmd = (*iter).second; - - w.start_tc(tcname); - - try { - const std::string& reqfail = impl::check_requirements( - tcmd, config); - if (!reqfail.empty()) { - w.end_tc("skipped", reqfail); - continue; - } - } catch (const std::runtime_error& e) { - w.end_tc("failed", e.what()); - errcode = EXIT_FAILURE; - continue; - } - - const std::pair< int, int > user = impl::get_required_user( - tcmd, config); - - atf::fs::path resfile = resdir.get_path() / "tcr"; - INV(!atf::fs::exists(resfile)); - try { - const bool has_cleanup = atf::text::to_bool( - (*tcmd.find("has.cleanup")).second); - - impl::temp_dir workdir(atf::fs::path(atf::config::get( - "atf_workdir")) / "atf-run.XXXXXX"); - if (user.first != -1 && user.second != -1) { - if (::chown(workdir.get_path().c_str(), user.first, - user.second) == -1) { - throw atf::system_error("chown(" + - workdir.get_path().str() + ")", "chown(2) failed", - errno); - } - resfile = workdir.get_path() / "tcr"; - } - - std::pair< std::string, const atf::process::status > s = - impl::run_test_case(tp, tcname, "body", tcmd, config, - resfile, workdir.get_path(), w); - if (s.second.signaled() && s.second.coredump()) - dump_stacktrace(tp, s.second, workdir.get_path(), w); - if (has_cleanup) - (void)impl::run_test_case(tp, tcname, "cleanup", tcmd, - config, resfile, workdir.get_path(), w); - - // TODO: Force deletion of workdir. - - impl::test_case_result tcr = get_test_case_result(s.first, - s.second, resfile); - - w.end_tc(tcr.state(), tcr.reason()); - if (tcr.state() == "failed") - errcode = EXIT_FAILURE; - } catch (...) { - if (atf::fs::exists(resfile)) - atf::fs::remove(resfile); - throw; - } - if (atf::fs::exists(resfile)) - atf::fs::remove(resfile); - - } - w.end_tp(""); - } - - return errcode; -} - -size_t -atf_run::count_tps(std::vector< std::string > tps) - const -{ - size_t ntps = 0; - - for (std::vector< std::string >::const_iterator iter = tps.begin(); - iter != tps.end(); iter++) { - atf::fs::path tp(*iter); - atf::fs::file_info fi(tp); - - if (fi.get_type() == atf::fs::file_info::dir_type) { - impl::atffile af = impl::read_atffile(tp / "Atffile"); - std::vector< std::string > aux = af.tps(); - for (std::vector< std::string >::iterator i2 = aux.begin(); - i2 != aux.end(); i2++) - *i2 = (tp / *i2).str(); - ntps += count_tps(aux); - } else - ntps++; - } - - return ntps; -} - -static -void -call_hook(const std::string& tool, const std::string& hook) -{ - const atf::fs::path sh(atf::config::get("atf_shell")); - const atf::fs::path hooks = - atf::fs::path(atf::config::get("atf_pkgdatadir")) / (tool + ".hooks"); - - const atf::process::status s = - atf::process::exec(sh, - atf::process::argv_array(sh.c_str(), hooks.c_str(), - hook.c_str(), NULL), - atf::process::stream_inherit(), - atf::process::stream_inherit()); - - - if (!s.exited() || s.exitstatus() != EXIT_SUCCESS) - throw std::runtime_error("Failed to run the '" + hook + "' hook " - "for '" + tool + "'"); -} - -int -atf_run::main(void) -{ - impl::atffile af = impl::read_atffile(atf::fs::path("Atffile")); - - std::vector< std::string > tps; - tps = af.tps(); - if (m_argc >= 1) { - // TODO: Ensure that the given test names are listed in the - // Atffile. Take into account that the file can be using globs. - tps.clear(); - for (int i = 0; i < m_argc; i++) - tps.push_back(m_argv[i]); - } - - // Read configuration data for this test suite. - atf::tests::vars_map test_suite_vars; - { - atf::tests::vars_map::const_iterator iter = - af.props().find("test-suite"); - INV(iter != af.props().end()); - test_suite_vars = impl::read_config_files((*iter).second); - } - - impl::atf_tps_writer w(std::cout); - call_hook("atf-run", "info_start_hook"); - w.ntps(count_tps(tps)); - - bool ok = true; - for (std::vector< std::string >::const_iterator iter = tps.begin(); - iter != tps.end(); iter++) { - const bool result = run_test(atf::fs::path(*iter), w, - impl::merge_configs(af.conf(), test_suite_vars)); - ok &= (result == EXIT_SUCCESS); - } - - call_hook("atf-run", "info_end_hook"); - - return ok ? EXIT_SUCCESS : EXIT_FAILURE; -} - -int -main(int argc, char* const* argv) -{ - return atf_run().run(argc, argv); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/io.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/io.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/io.cpp (nonexistent) @@ -1,361 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include -#include -#include -} - -#include -#include - -extern "C" { -#include "../atf-c/error.h" -} - -#include "../atf-c++/detail/exceptions.hpp" -#include "../atf-c++/detail/sanity.hpp" -#include "../atf-c++/utils.hpp" - -#include "io.hpp" - -namespace impl = atf::atf_run; -#define IMPL_NAME "atf::atf_run" - -// ------------------------------------------------------------------------ -// The "file_handle" class. -// ------------------------------------------------------------------------ - -impl::file_handle::file_handle(void) : - m_handle(invalid_value()) -{ -} - -impl::file_handle::file_handle(handle_type h) : - m_handle(h) -{ - PRE(m_handle != invalid_value()); -} - -impl::file_handle::file_handle(const file_handle& fh) : - m_handle(fh.m_handle) -{ - fh.m_handle = invalid_value(); -} - -impl::file_handle::~file_handle(void) -{ - if (is_valid()) - close(); -} - -impl::file_handle& -impl::file_handle::operator=(const file_handle& fh) -{ - m_handle = fh.m_handle; - fh.m_handle = invalid_value(); - - return *this; -} - -bool -impl::file_handle::is_valid(void) - const -{ - return m_handle != invalid_value(); -} - -void -impl::file_handle::close(void) -{ - PRE(is_valid()); - - ::close(m_handle); - - m_handle = invalid_value(); -} - -impl::file_handle::handle_type -impl::file_handle::disown(void) -{ - PRE(is_valid()); - - handle_type h = m_handle; - m_handle = invalid_value(); - return h; -} - -impl::file_handle::handle_type -impl::file_handle::get(void) - const -{ - PRE(is_valid()); - - return m_handle; -} - -void -impl::file_handle::posix_remap(handle_type h) -{ - PRE(is_valid()); - - if (m_handle == h) - return; - - if (::dup2(m_handle, h) == -1) - throw system_error(IMPL_NAME "::file_handle::posix_remap", - "dup2(2) failed", errno); - - if (::close(m_handle) == -1) { - ::close(h); - throw system_error(IMPL_NAME "::file_handle::posix_remap", - "close(2) failed", errno); - } - - m_handle = h; -} - -impl::file_handle::handle_type -impl::file_handle::invalid_value(void) -{ - return -1; -} - -// ------------------------------------------------------------------------ -// The "systembuf" class. -// ------------------------------------------------------------------------ - -impl::systembuf::systembuf(handle_type h, std::size_t bufsize) : - m_handle(h), - m_bufsize(bufsize), - m_read_buf(NULL), - m_write_buf(NULL) -{ - PRE(m_handle >= 0); - PRE(m_bufsize > 0); - - try { - m_read_buf = new char[bufsize]; - m_write_buf = new char[bufsize]; - } catch (...) { - if (m_read_buf != NULL) - delete [] m_read_buf; - if (m_write_buf != NULL) - delete [] m_write_buf; - throw; - } - - setp(m_write_buf, m_write_buf + m_bufsize); -} - -impl::systembuf::~systembuf(void) -{ - delete [] m_read_buf; - delete [] m_write_buf; -} - -impl::systembuf::int_type -impl::systembuf::underflow(void) -{ - PRE(gptr() >= egptr()); - - bool ok; - ssize_t cnt = ::read(m_handle, m_read_buf, m_bufsize); - ok = (cnt != -1 && cnt != 0); - - if (!ok) - return traits_type::eof(); - else { - setg(m_read_buf, m_read_buf, m_read_buf + cnt); - return traits_type::to_int_type(*gptr()); - } -} - -impl::systembuf::int_type -impl::systembuf::overflow(int c) -{ - PRE(pptr() >= epptr()); - if (sync() == -1) - return traits_type::eof(); - if (!traits_type::eq_int_type(c, traits_type::eof())) { - traits_type::assign(*pptr(), c); - pbump(1); - } - return traits_type::not_eof(c); -} - -int -impl::systembuf::sync(void) -{ - ssize_t cnt = pptr() - pbase(); - - bool ok; - ok = ::write(m_handle, pbase(), cnt) == cnt; - - if (ok) - pbump(-cnt); - return ok ? 0 : -1; -} - -// ------------------------------------------------------------------------ -// The "pistream" class. -// ------------------------------------------------------------------------ - -impl::pistream::pistream(const int fd) : - std::istream(NULL), - m_systembuf(fd) -{ - rdbuf(&m_systembuf); -} - -// ------------------------------------------------------------------------ -// The "muxer" class. -// ------------------------------------------------------------------------ - -static int -safe_poll(struct pollfd fds[], nfds_t nfds, int timeout) -{ - int ret = ::poll(fds, nfds, timeout); - if (ret == -1) { - if (errno == EINTR) - ret = 0; - else - throw atf::system_error(IMPL_NAME "::safe_poll", "poll(2) failed", - errno); - } - INV(ret >= 0); - return ret; -} - -static size_t -safe_read(const int fd, void* buffer, const size_t nbytes, - const bool report_errors) -{ - int ret; - while ((ret = ::read(fd, buffer, nbytes)) == -1 && errno == EINTR) {} - if (ret == -1) { - INV(errno != EINTR); - - if (report_errors) - throw atf::system_error(IMPL_NAME "::safe_read", "read(2) failed", - errno); - else - ret = 0; - } - INV(ret >= 0); - return static_cast< size_t >(ret); -} - -impl::muxer::muxer(const int* fds, const size_t nfds, const size_t bufsize) : - m_fds(fds), - m_nfds(nfds), - m_bufsize(bufsize), - m_buffers(new std::string[nfds]) -{ -} - -impl::muxer::~muxer(void) -{ -} - -size_t -impl::muxer::read_one(const size_t index, const int fd, std::string& accum, - const bool report_errors) -{ - atf::utils::auto_array< char > buffer(new char[m_bufsize]); - const size_t nbytes = safe_read(fd, buffer.get(), m_bufsize - 1, - report_errors); - INV(nbytes < m_bufsize); - buffer[nbytes] = '\0'; - - std::string line(accum); - - size_t line_start = 0; - for (size_t i = 0; i < nbytes; i++) { - if (buffer[i] == '\n') { - line_callback(index, line); - line.clear(); - accum.clear(); - line_start = i + 1; - } else if (buffer[i] == '\r') { - // Do nothing. - } else { - line.append(1, buffer[i]); - } - } - accum.append(&buffer[line_start]); - - return nbytes; -} - -void -impl::muxer::mux(volatile const bool& terminate) -{ - atf::utils::auto_array< struct pollfd > poll_fds(new struct pollfd[m_nfds]); - for (size_t i = 0; i < m_nfds; i++) { - poll_fds[i].fd = m_fds[i]; - poll_fds[i].events = POLLIN; - } - - size_t nactive = m_nfds; - while (nactive > 0 && !terminate) { - int ret; - while (!terminate && (ret = safe_poll(poll_fds.get(), 2, 250)) == 0) {} - - for (size_t i = 0; !terminate && i < m_nfds; i++) { - if (poll_fds[i].events == 0) - continue; - - if (poll_fds[i].revents & POLLHUP) { - // Any data still available at this point will be processed by - // a call to the flush method. - poll_fds[i].events = 0; - - INV(nactive >= 1); - nactive--; - } else if (poll_fds[i].revents & (POLLIN | POLLRDNORM | POLLRDBAND | - POLLPRI)) { - (void)read_one(i, poll_fds[i].fd, m_buffers[i], true); - } - } - } -} - -void -impl::muxer::flush(void) -{ - for (size_t i = 0; i < m_nfds; i++) { - while (read_one(i, m_fds[i], m_buffers[i], false) > 0) {} - - if (!m_buffers[i].empty()) - line_callback(i, m_buffers[i]); - } -} Index: vendor/NetBSD/atf/dist/dist/atf-run/io.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/io.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/io.hpp (nonexistent) @@ -1,432 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_RUN_IO_HPP_) -#define _ATF_RUN_IO_HPP_ - -#include -#include -#include - -#include "fs.hpp" - -#include "../atf-c++/utils.hpp" - -namespace atf { -namespace atf_run { - -// ------------------------------------------------------------------------ -// The "file_handle" class. -// ------------------------------------------------------------------------ - -//! -//! \brief Simple RAII model for system file handles. -//! -//! The \a file_handle class is a simple RAII model for native system file -//! handles. This class wraps one of such handles grabbing its ownership, -//! and automaticaly closes it upon destruction. It is basically used -//! inside the library to avoid leaking open file handles, shall an -//! unexpected execution trace occur. -//! -//! A \a file_handle object can be copied but doing so invalidates the -//! source object. There can only be a single valid \a file_handle object -//! for a given system file handle. This is similar to std::auto_ptr\<\>'s -//! semantics. -//! -//! This class also provides some convenience methods to issue special file -//! operations under their respective platforms. -//! -class file_handle -{ -public: - //! - //! \brief Opaque name for the native handle type. - //! - //! Each operating system identifies file handles using a specific type. - //! The \a handle_type type is used to transparently refer to file - //! handles regarless of the operating system in which this class is - //! used. - //! - //! If this class is used in a POSIX system, \a NativeSystemHandle is - //! an integer type while it is a \a HANDLE in a Win32 system. - //! - typedef int handle_type; - - //! - //! \brief Constructs an invalid file handle. - //! - //! This constructor creates a new \a file_handle object that represents - //! an invalid file handle. An invalid file handle can be copied but - //! cannot be manipulated in any way (except checking for its validity). - //! - //! \see is_valid() - //! - file_handle(void); - - //! - //! \brief Constructs a new file handle from a native file handle. - //! - //! This constructor creates a new \a file_handle object that takes - //! ownership of the given \a h native file handle. The user must not - //! close \a h on his own during the lifetime of the new object. - //! Ownership can be reclaimed using disown(). - //! - //! \pre The native file handle must be valid; a close operation must - //! succeed on it. - //! - //! \see disown() - //! - file_handle(handle_type h); - - //! - //! \brief Copy constructor; invalidates the source handle. - //! - //! This copy constructor creates a new file handle from a given one. - //! Ownership of the native file handle is transferred to the new - //! object, effectively invalidating the source file handle. This - //! avoids having two live \a file_handle objects referring to the - //! same native file handle. The source file handle need not be - //! valid in the name of simplicity. - //! - //! \post The source file handle is invalid. - //! \post The new file handle owns the source's native file handle. - //! - file_handle(const file_handle& fh); - - //! - //! \brief Releases resources if the handle is valid. - //! - //! If the file handle is valid, the destructor closes it. - //! - //! \see is_valid() - //! - ~file_handle(void); - - //! - //! \brief Assignment operator; invalidates the source handle. - //! - //! This assignment operator transfers ownership of the RHS file - //! handle to the LHS one, effectively invalidating the source file - //! handle. This avoids having two live \a file_handle objects - //! referring to the same native file handle. The source file - //! handle need not be valid in the name of simplicity. - //! - //! \post The RHS file handle is invalid. - //! \post The LHS file handle owns RHS' native file handle. - //! \return A reference to the LHS file handle. - //! - file_handle& operator=(const file_handle& fh); - - //! - //! \brief Checks whether the file handle is valid or not. - //! - //! Returns a boolean indicating whether the file handle is valid or - //! not. If the file handle is invalid, no other applications can be - //! executed other than the destructor. - //! - //! \return True if the file handle is valid; false otherwise. - //! - bool is_valid(void) const; - - //! - //! \brief Closes the file handle. - //! - //! Explicitly closes the file handle, which must be valid. Upon - //! exit, the handle is not valid any more. - //! - //! \pre The file handle is valid. - //! \post The file handle is invalid. - //! \post The native file handle is closed. - //! - void close(void); - - //! - //! \brief Reclaims ownership of the native file handle. - //! - //! Explicitly reclaims ownership of the native file handle contained - //! in the \a file_handle object, returning the native file handle. - //! The caller is responsible of closing it later on. - //! - //! \pre The file handle is valid. - //! \post The file handle is invalid. - //! \return The native file handle. - //! - handle_type disown(void); - - //! - //! \brief Gets the native file handle. - //! - //! Returns the native file handle for the \a file_handle object. - //! The caller can issue any operation on it except closing it. - //! If closing is required, disown() shall be used. - //! - //! \pre The file handle is valid. - //! \return The native file handle. - //! - handle_type get(void) const; - - //! - //! \brief Changes the native file handle to the given one. - //! - //! Given a new native file handle \a h, this operation assigns this - //! handle to the current object, closing its old native file handle. - //! In other words, it first calls dup2() to remap the old handle to - //! the new one and then closes the old handle. - //! - //! If \a h matches the current value of the handle, this is a no-op. - //! This is done for simplicity, to avoid the caller having to check - //! this condition on its own. - //! - //! If \a h is open, it is automatically closed by dup2(). - //! - //! This operation is only available in POSIX systems. - //! - //! \pre The file handle is valid. - //! \pre The native file handle \a h is valid; i.e., it must be - //! closeable. - //! \post The file handle's native file handle is \a h. - //! \throw system_error If the internal remapping operation fails. - //! - void posix_remap(handle_type h); - -private: - //! - //! \brief Internal handle value. - //! - //! This variable holds the native handle value for the file handle - //! hold by this object. It is interesting to note that this needs - //! to be mutable because the copy constructor and the assignment - //! operator invalidate the source object. - //! - mutable handle_type m_handle; - - //! - //! \brief Constant function representing an invalid handle value. - //! - //! Returns the platform-specific handle value that represents an - //! invalid handle. This is a constant function rather than a regular - //! constant because, in the latter case, we cannot define it under - //! Win32 due to the value being of a complex type. - //! - static handle_type invalid_value(void); -}; - -// ------------------------------------------------------------------------ -// The "systembuf" class. -// ------------------------------------------------------------------------ - -//! -//! \brief std::streambuf implementation for system file handles. -//! -//! systembuf provides a std::streambuf implementation for system file -//! handles. Contrarywise to file_handle, this class does \b not take -//! ownership of the native file handle; this should be taken care of -//! somewhere else. -//! -//! This class follows the expected semantics of a std::streambuf object. -//! However, it is not copyable to avoid introducing inconsistences with -//! the on-disk file and the in-memory buffers. -//! -class systembuf : - public std::streambuf, atf::utils::noncopyable -{ -public: - typedef int handle_type; - - //! - //! \brief Constructs a new systembuf for the given file handle. - //! - //! This constructor creates a new systembuf object that reads or - //! writes data from/to the \a h native file handle. This handle - //! is \b not owned by the created systembuf object; the code - //! should take care of it externally. - //! - //! This class buffers input and output; the buffer size may be - //! tuned through the \a bufsize parameter, which defaults to 8192 - //! bytes. - //! - //! \see pistream. - //! - explicit systembuf(handle_type h, std::size_t bufsize = 8192); - ~systembuf(void); - -private: - //! - //! \brief Native file handle used by the systembuf object. - //! - handle_type m_handle; - - //! - //! \brief Internal buffer size used during read and write operations. - //! - std::size_t m_bufsize; - - //! - //! \brief Internal buffer used during read operations. - //! - char* m_read_buf; - - //! - //! \brief Internal buffer used during write operations. - //! - char* m_write_buf; - -protected: - //! - //! \brief Reads new data from the native file handle. - //! - //! This operation is called by input methods when there are no more - //! data in the input buffer. The function fills the buffer with new - //! data, if available. - //! - //! \pre All input positions are exhausted (gptr() >= egptr()). - //! \post The input buffer has new data, if available. - //! \returns traits_type::eof() if a read error occurrs or there are - //! no more data to be read. Otherwise returns - //! traits_type::to_int_type(*gptr()). - //! - virtual int_type underflow(void); - - //! - //! \brief Makes room in the write buffer for additional data. - //! - //! This operation is called by output methods when there is no more - //! space in the output buffer to hold a new element. The function - //! first flushes the buffer's contents to disk and then clears it to - //! leave room for more characters. The given \a c character is - //! stored at the beginning of the new space. - //! - //! \pre All output positions are exhausted (pptr() >= epptr()). - //! \post The output buffer has more space if no errors occurred - //! during the write to disk. - //! \post *(pptr() - 1) is \a c. - //! \returns traits_type::eof() if a write error occurrs. Otherwise - //! returns traits_type::not_eof(c). - //! - virtual int_type overflow(int c); - - //! - //! \brief Flushes the output buffer to disk. - //! - //! Synchronizes the systembuf buffers with the contents of the file - //! associated to this object through the native file handle. The - //! output buffer is flushed to disk and cleared to leave new room - //! for more data. - //! - //! \returns 0 on success, -1 if an error occurred. - //! - virtual int sync(void); -}; - -// ------------------------------------------------------------------------ -// The "pistream" class. -// ------------------------------------------------------------------------ - -//! -//! \brief Child process' output stream. -//! -//! The pistream class represents an output communication channel with the -//! child process. The child process writes data to this stream and the -//! parent process can read it through the pistream object. In other -//! words, from the child's point of view, the communication channel is an -//! output one, but from the parent's point of view it is an input one; -//! hence the confusing pistream name. -//! -//! pistream objects cannot be copied because they own the file handle -//! they use to communicate with the child and because they buffer data -//! that flows through the communication channel. -//! -//! A pistream object behaves as a std::istream stream in all senses. -//! The class is only provided because it must provide a method to let -//! the caller explicitly close the communication channel. -//! -//! \remark Blocking remarks: Functions that read data from this -//! stream can block if the associated file handle blocks during the read. -//! As this class is used to communicate with child processes through -//! anonymous pipes, the most typical blocking condition happens when the -//! child has no more data to send to the pipe's system buffer. When -//! this happens, the buffer eventually empties and the system blocks -//! until the writer generates some data. -//! -class pistream : - public std::istream, utils::noncopyable -{ - //! - //! \brief The file handle managed by this stream. - //! - int m_fd; - - //! - //! \brief The systembuf object used to manage this stream's data. - //! - systembuf m_systembuf; - -public: - //! - //! \brief Creates a new process' output stream. - //! - //! Given a file handle, this constructor creates a new pistream - //! object that owns the given file handle \a fh. Ownership of - //! \a fh is transferred to the created pistream object. - //! - //! \pre \a fh is valid. - //! \post \a fh is invalid. - //! \post The new pistream object owns \a fh. - //! - explicit pistream(const int); -}; - -// ------------------------------------------------------------------------ -// The "muxer" class. -// ------------------------------------------------------------------------ - -class muxer : utils::noncopyable { - const int* m_fds; - const size_t m_nfds; - - const size_t m_bufsize; - atf::utils::auto_array< std::string > m_buffers; - -protected: - virtual void line_callback(const size_t, const std::string&) = 0; - - size_t read_one(const size_t, const int, std::string&, const bool); - -public: - muxer(const int*, const size_t, const size_t bufsize = 1024); - virtual ~muxer(void); - - void mux(volatile const bool&); - void flush(void); -}; - -} // namespace atf_run -} // namespace atf - -#endif // !defined(_ATF_RUN_IO_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-run/Kyuafile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/Kyuafile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/Kyuafile (nonexistent) @@ -1,13 +0,0 @@ -syntax("kyuafile", 1) - -test_suite("atf") - -atf_test_program{name="atffile_test"} -atf_test_program{name="config_test"} -atf_test_program{name="fs_test"} -atf_test_program{name="integration_test"} -atf_test_program{name="io_test"} -atf_test_program{name="requirements_test"} -atf_test_program{name="signals_test"} -atf_test_program{name="test_program_test"} -atf_test_program{name="user_test"} Index: vendor/NetBSD/atf/dist/dist/atf-run/share/atf-run.hooks =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/share/atf-run.hooks (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/share/atf-run.hooks (nonexistent) @@ -1,94 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2011 The NetBSD Foundation, Inc. -# 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 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. -# - -atf_tps_writer_info() -{ - class=${1}; shift - echo "info: ${class}, $*" -} - -info_start_hook() -{ - default_info_start_hook "${@}" -} - -default_info_start_hook() -{ - atf_tps_writer_info "atf.version" $(atf-version | head -n 1) - - atf_tps_writer_info "tests.root" $(pwd) - - atf_tps_writer_info "time.start" $(date) - - atf_tps_writer_info "uname.sysname" $(uname -s) - atf_tps_writer_info "uname.nodename" $(uname -n) - atf_tps_writer_info "uname.release" $(uname -r) - atf_tps_writer_info "uname.version" $(uname -v) - atf_tps_writer_info "uname.machine" $(uname -m) - - # Add all the environment variables to the report. We have to be - # careful with those that span over multiple lines; otherwise their - # values could be printed as multiple different variables (one per - # line), which is incorrect. - oldifs="${IFS}" - IFS=' -' - set -- $(env) - val=${1}; shift - while [ ${#} -gt 0 ]; do - if echo "${1}" | grep '^[a-zA-Z0-0_][a-zA-Z0-9_]*=' >/dev/null; then - atf_tps_writer_info "env" "${val}" - val="${1}" - else - val="${val} ${1}" - fi - shift - done - atf_tps_writer_info "env" "${val}" - IFS="${oldifs}" -} - -info_end_hook() -{ - default_info_end_hook "${@}" -} - -default_info_end_hook() -{ - atf_tps_writer_info "time.end" $(date) -} - -sitehooks=$(atf-config -t atf_confdir)/atf-run.hooks -userhooks=${HOME}/.atf/atf-run.hooks -[ -f ${sitehooks} ] && . ${sitehooks} -[ -f ${userhooks} ] && . ${userhooks} - -eval ${1} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-run/user_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/user_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/user_test.cpp (nonexistent) @@ -1,140 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include -#include -#include -} - -#include -#include - -#include "../atf-c++/macros.hpp" - -#include "user.hpp" - -// ------------------------------------------------------------------------ -// Test cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(euid); -ATF_TEST_CASE_HEAD(euid) -{ - set_md_var("descr", "Tests the euid function"); -} -ATF_TEST_CASE_BODY(euid) -{ - using atf::atf_run::euid; - - ATF_REQUIRE_EQ(euid(), ::geteuid()); -} - -ATF_TEST_CASE(is_member_of_group); -ATF_TEST_CASE_HEAD(is_member_of_group) -{ - set_md_var("descr", "Tests the is_member_of_group function"); -} -ATF_TEST_CASE_BODY(is_member_of_group) -{ - using atf::atf_run::is_member_of_group; - - std::set< gid_t > groups; - gid_t maxgid = 0; - { - gid_t gids[NGROUPS_MAX]; - int ngids = ::getgroups(NGROUPS_MAX, gids); - if (ngids == -1) - ATF_FAIL("Call to ::getgroups failed"); - for (int i = 0; i < ngids; i++) { - groups.insert(gids[i]); - if (gids[i] > maxgid) - maxgid = gids[i]; - } - std::cout << "User belongs to " << ngids << " groups\n"; - std::cout << "Last GID is " << maxgid << "\n"; - } - - for (gid_t g = 0; g <= maxgid; g++) { - if (groups.find(g) == groups.end()) { - std::cout << "Checking if user does not belong to group " - << g << "\n"; - ATF_REQUIRE(!is_member_of_group(g)); - } else { - std::cout << "Checking if user belongs to group " << g << "\n"; - ATF_REQUIRE(is_member_of_group(g)); - } - } -} - -ATF_TEST_CASE(is_root); -ATF_TEST_CASE_HEAD(is_root) -{ - set_md_var("descr", "Tests the is_root function"); -} -ATF_TEST_CASE_BODY(is_root) -{ - using atf::atf_run::is_root; - - if (::geteuid() == 0) { - ATF_REQUIRE(is_root()); - } else { - ATF_REQUIRE(!is_root()); - } -} - -ATF_TEST_CASE(is_unprivileged); -ATF_TEST_CASE_HEAD(is_unprivileged) -{ - set_md_var("descr", "Tests the is_unprivileged function"); -} -ATF_TEST_CASE_BODY(is_unprivileged) -{ - using atf::atf_run::is_unprivileged; - - if (::geteuid() != 0) { - ATF_REQUIRE(is_unprivileged()); - } else { - ATF_REQUIRE(!is_unprivileged()); - } -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the tests for the free functions. - ATF_ADD_TEST_CASE(tcs, euid); - ATF_ADD_TEST_CASE(tcs, is_member_of_group); - ATF_ADD_TEST_CASE(tcs, is_root); - ATF_ADD_TEST_CASE(tcs, is_unprivileged); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/Atffile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/Atffile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/Atffile (nonexistent) @@ -1,5 +0,0 @@ -Content-Type: application/X-atf-atffile; version="1" - -prop: test-suite = atf - -tp-glob: *_test Index: vendor/NetBSD/atf/dist/dist/atf-run/config_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/config_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/config_test.cpp (nonexistent) @@ -1,391 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2010 The NetBSD Foundation, Inc. -// 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 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 "atf-c++/detail/env.hpp" -#include "atf-c++/detail/test_helpers.hpp" -#include "atf-c++/config.hpp" -#include "atf-c++/macros.hpp" - -#include "config.hpp" - -namespace impl = atf::atf_run; -namespace detail = atf::atf_run::detail; - -using atf::tests::vars_map; - -namespace atf { -namespace config { - -void __reinit(void); - -} // namespace config -} // namespace atf - -// ------------------------------------------------------------------------- -// Tests for the "config" parser. -// ------------------------------------------------------------------------- - -class config_reader : protected detail::atf_config_reader { - void - got_var(const std::string& name, const std::string& val) - { - m_calls.push_back("got_var(" + name + ", " + val + ")"); - } - - void - got_eof(void) - { - m_calls.push_back("got_eof()"); - } - -public: - config_reader(std::istream& is) : - detail::atf_config_reader(is) - { - } - - void - read(void) - { - atf_config_reader::read(); - } - - std::vector< std::string > m_calls; -}; - -ATF_TEST_CASE_WITHOUT_HEAD(config_1); -ATF_TEST_CASE_BODY(config_1) -{ - const char* input = - "Content-Type: application/X-atf-config; version=\"1\"\n" - "\n" - ; - - const char* exp_calls[] = { - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< config_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(config_2); -ATF_TEST_CASE_BODY(config_2) -{ - const char* input = - "Content-Type: application/X-atf-config; version=\"1\"\n" - "\n" - "# This is a comment on a line of its own.\n" - "# And this is another one.\n" - "\n" - " # Another after some whitespace.\n" - "\n" - "# The last one after an empty line.\n" - ; - - const char* exp_calls[] = { - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< config_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(config_3); -ATF_TEST_CASE_BODY(config_3) -{ - const char* input = - "Content-Type: application/X-atf-config; version=\"1\"\n" - "\n" - "var1=value1\n" - "var2 = value2\n" - "var3 = value3\n" - "var4 = value4\n" - "\n" - "var5=value5\n" - " var6=value6\n" - "\n" - "var7 = \"This is a long value.\"\n" - "var8 = \"Single-word\"\n" - "var9 = \" Single-word \"\n" - "var10 = Single-word\n" - ; - - const char* exp_calls[] = { - "got_var(var1, value1)", - "got_var(var2, value2)", - "got_var(var3, value3)", - "got_var(var4, value4)", - "got_var(var5, value5)", - "got_var(var6, value6)", - "got_var(var7, This is a long value.)", - "got_var(var8, Single-word)", - "got_var(var9, Single-word )", - "got_var(var10, Single-word)", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< config_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(config_4); -ATF_TEST_CASE_BODY(config_4) -{ - const char* input = - "Content-Type: application/X-atf-config; version=\"1\"\n" - "\n" - "foo = bar # A comment.\n" - ; - - const char* exp_calls[] = { - "got_var(foo, bar)", - "got_eof()", - NULL - }; - - const char* exp_errors[] = { - NULL - }; - - do_parser_test< config_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(config_50); -ATF_TEST_CASE_BODY(config_50) -{ - const char* input = - "Content-Type: application/X-atf-config; version=\"1\"\n" - "\n" - "foo\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected equal sign", - NULL - }; - - do_parser_test< config_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(config_51); -ATF_TEST_CASE_BODY(config_51) -{ - const char* input = - "Content-Type: application/X-atf-config; version=\"1\"\n" - "\n" - "foo bar\n" - "baz\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `bar'; expected equal sign", - "4: Unexpected token `<>'; expected equal sign", - NULL - }; - - do_parser_test< config_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(config_52); -ATF_TEST_CASE_BODY(config_52) -{ - const char* input = - "Content-Type: application/X-atf-config; version=\"1\"\n" - "\n" - "foo =\n" - "bar = # A comment.\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Unexpected token `<>'; expected word or quoted string", - "4: Unexpected token `#'; expected word or quoted string", - NULL - }; - - do_parser_test< config_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(config_53); -ATF_TEST_CASE_BODY(config_53) -{ - const char* input = - "Content-Type: application/X-atf-config; version=\"1\"\n" - "\n" - "foo = \"Correct value\" # With comment.\n" - "\n" - "bar = # A comment.\n" - "\n" - "baz = \"Last variable\"\n" - "\n" - "# End of file.\n" - ; - - const char* exp_calls[] = { - "got_var(foo, Correct value)", - NULL - }; - - const char* exp_errors[] = { - "5: Unexpected token `#'; expected word or quoted string", - NULL - }; - - do_parser_test< config_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(config_54); -ATF_TEST_CASE_BODY(config_54) -{ - const char* input = - "Content-Type: application/X-atf-config; version=\"1\"\n" - "\n" - "foo = \"\n" - "bar = \"text\n" - "baz = \"te\\\"xt\n" - "last = \"\\\"\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "3: Missing double quotes before end of line", - "4: Missing double quotes before end of line", - "5: Missing double quotes before end of line", - "6: Missing double quotes before end of line", - NULL - }; - - do_parser_test< config_reader >(input, exp_calls, exp_errors); -} - -// ------------------------------------------------------------------------- -// Tests for the free functions. -// ------------------------------------------------------------------------- - -ATF_TEST_CASE(merge_configs_both_empty); -ATF_TEST_CASE_HEAD(merge_configs_both_empty) {} -ATF_TEST_CASE_BODY(merge_configs_both_empty) { - vars_map lower, upper; - - ATF_REQUIRE(impl::merge_configs(lower, upper).empty()); -} - -ATF_TEST_CASE(merge_configs_lower_empty); -ATF_TEST_CASE_HEAD(merge_configs_lower_empty) {} -ATF_TEST_CASE_BODY(merge_configs_lower_empty) { - vars_map lower, upper; - upper["var"] = "value"; - - vars_map merged = impl::merge_configs(lower, upper); - ATF_REQUIRE_EQ("value", merged["var"]); -} - -ATF_TEST_CASE(merge_configs_upper_empty); -ATF_TEST_CASE_HEAD(merge_configs_upper_empty) {} -ATF_TEST_CASE_BODY(merge_configs_upper_empty) { - vars_map lower, upper; - lower["var"] = "value"; - - vars_map merged = impl::merge_configs(lower, upper); - ATF_REQUIRE_EQ("value", merged["var"]); -} - -ATF_TEST_CASE(merge_configs_mixed); -ATF_TEST_CASE_HEAD(merge_configs_mixed) {} -ATF_TEST_CASE_BODY(merge_configs_mixed) { - vars_map lower, upper; - lower["var1"] = "value1"; - lower["var2"] = "value2-l"; - upper["var2"] = "value2-u"; - upper["var3"] = "value3"; - - vars_map merged = impl::merge_configs(lower, upper); - ATF_REQUIRE_EQ("value1", merged["var1"]); - ATF_REQUIRE_EQ("value2-u", merged["var2"]); - ATF_REQUIRE_EQ("value3", merged["var3"]); -} - -ATF_TEST_CASE(read_config_files_none); -ATF_TEST_CASE_HEAD(read_config_files_none) {} -ATF_TEST_CASE_BODY(read_config_files_none) { - atf::env::set("ATF_CONFDIR", "."); - atf::config::__reinit(); - ATF_REQUIRE(vars_map() == impl::read_config_files("test-suite")); -} - -// ------------------------------------------------------------------------- -// Main. -// ------------------------------------------------------------------------- - -ATF_INIT_TEST_CASES(tcs) -{ - ATF_ADD_TEST_CASE(tcs, config_1); - ATF_ADD_TEST_CASE(tcs, config_2); - ATF_ADD_TEST_CASE(tcs, config_3); - ATF_ADD_TEST_CASE(tcs, config_4); - ATF_ADD_TEST_CASE(tcs, config_50); - ATF_ADD_TEST_CASE(tcs, config_51); - ATF_ADD_TEST_CASE(tcs, config_52); - ATF_ADD_TEST_CASE(tcs, config_53); - ATF_ADD_TEST_CASE(tcs, config_54); - - ATF_ADD_TEST_CASE(tcs, merge_configs_both_empty); - ATF_ADD_TEST_CASE(tcs, merge_configs_lower_empty); - ATF_ADD_TEST_CASE(tcs, merge_configs_upper_empty); - ATF_ADD_TEST_CASE(tcs, merge_configs_mixed); - - ATF_ADD_TEST_CASE(tcs, read_config_files_none); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/fs_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/fs_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/fs_test.cpp (nonexistent) @@ -1,260 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include -} - -#include -#include - -#include "atf-c++/macros.hpp" - -#include "atf-c++/detail/exceptions.hpp" -#include "atf-c++/detail/fs.hpp" - -#include "fs.hpp" -#include "user.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static -void -create_file(const char *name) -{ - std::ofstream os(name); - os.close(); -} - -// ------------------------------------------------------------------------ -// Test cases for the "temp_dir" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(temp_dir_raii); -ATF_TEST_CASE_HEAD(temp_dir_raii) -{ - set_md_var("descr", "Tests the RAII behavior of the temp_dir class"); -} -ATF_TEST_CASE_BODY(temp_dir_raii) -{ - using atf::atf_run::temp_dir; - - atf::fs::path t1("non-existent"); - atf::fs::path t2("non-existent"); - - { - atf::fs::path tmpl("testdir.XXXXXX"); - temp_dir td1(tmpl); - temp_dir td2(tmpl); - t1 = td1.get_path(); - t2 = td2.get_path(); - ATF_REQUIRE(t1.str().find("XXXXXX") == std::string::npos); - ATF_REQUIRE(t2.str().find("XXXXXX") == std::string::npos); - ATF_REQUIRE(t1 != t2); - ATF_REQUIRE(!atf::fs::exists(tmpl)); - ATF_REQUIRE( atf::fs::exists(t1)); - ATF_REQUIRE( atf::fs::exists(t2)); - - atf::fs::file_info fi1(t1); - ATF_REQUIRE( fi1.is_owner_readable()); - ATF_REQUIRE( fi1.is_owner_writable()); - ATF_REQUIRE( fi1.is_owner_executable()); - ATF_REQUIRE(!fi1.is_group_readable()); - ATF_REQUIRE(!fi1.is_group_writable()); - ATF_REQUIRE(!fi1.is_group_executable()); - ATF_REQUIRE(!fi1.is_other_readable()); - ATF_REQUIRE(!fi1.is_other_writable()); - ATF_REQUIRE(!fi1.is_other_executable()); - - atf::fs::file_info fi2(t2); - ATF_REQUIRE( fi2.is_owner_readable()); - ATF_REQUIRE( fi2.is_owner_writable()); - ATF_REQUIRE( fi2.is_owner_executable()); - ATF_REQUIRE(!fi2.is_group_readable()); - ATF_REQUIRE(!fi2.is_group_writable()); - ATF_REQUIRE(!fi2.is_group_executable()); - ATF_REQUIRE(!fi2.is_other_readable()); - ATF_REQUIRE(!fi2.is_other_writable()); - ATF_REQUIRE(!fi2.is_other_executable()); - } - - ATF_REQUIRE(t1.str() != "non-existent"); - ATF_REQUIRE(!atf::fs::exists(t1)); - ATF_REQUIRE(t2.str() != "non-existent"); - ATF_REQUIRE(!atf::fs::exists(t2)); -} - - -// ------------------------------------------------------------------------ -// Test cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(cleanup); -ATF_TEST_CASE_HEAD(cleanup) -{ - set_md_var("descr", "Tests the cleanup function"); -} -ATF_TEST_CASE_BODY(cleanup) -{ - using atf::atf_run::cleanup; - - ::mkdir("root", 0755); - ::mkdir("root/dir", 0755); - ::mkdir("root/dir/1", 0100); - ::mkdir("root/dir/2", 0644); - create_file("root/reg"); - - atf::fs::path p("root"); - ATF_REQUIRE(atf::fs::exists(p)); - ATF_REQUIRE(atf::fs::exists(p / "dir")); - ATF_REQUIRE(atf::fs::exists(p / "dir/1")); - ATF_REQUIRE(atf::fs::exists(p / "dir/2")); - ATF_REQUIRE(atf::fs::exists(p / "reg")); - cleanup(p); - ATF_REQUIRE(!atf::fs::exists(p)); -} - -ATF_TEST_CASE(cleanup_eacces_on_root); -ATF_TEST_CASE_HEAD(cleanup_eacces_on_root) -{ - set_md_var("descr", "Tests the cleanup function"); -} -ATF_TEST_CASE_BODY(cleanup_eacces_on_root) -{ - using atf::atf_run::cleanup; - - ::mkdir("aux", 0755); - ::mkdir("aux/root", 0755); - ATF_REQUIRE(::chmod("aux", 0555) != -1); - - try { - cleanup(atf::fs::path("aux/root")); - ATF_REQUIRE(atf::atf_run::is_root()); - } catch (const atf::system_error& e) { - ATF_REQUIRE(!atf::atf_run::is_root()); - ATF_REQUIRE_EQ(EACCES, e.code()); - } -} - -ATF_TEST_CASE(cleanup_eacces_on_subdir); -ATF_TEST_CASE_HEAD(cleanup_eacces_on_subdir) -{ - set_md_var("descr", "Tests the cleanup function"); -} -ATF_TEST_CASE_BODY(cleanup_eacces_on_subdir) -{ - using atf::atf_run::cleanup; - - ::mkdir("root", 0755); - ::mkdir("root/1", 0755); - ::mkdir("root/1/2", 0755); - ::mkdir("root/1/2/3", 0755); - ATF_REQUIRE(::chmod("root/1/2", 0555) != -1); - ATF_REQUIRE(::chmod("root/1", 0555) != -1); - - const atf::fs::path p("root"); - cleanup(p); - ATF_REQUIRE(!atf::fs::exists(p)); -} - -ATF_TEST_CASE(change_directory); -ATF_TEST_CASE_HEAD(change_directory) -{ - set_md_var("descr", "Tests the change_directory function"); -} -ATF_TEST_CASE_BODY(change_directory) -{ - using atf::atf_run::change_directory; - using atf::atf_run::get_current_dir; - - ::mkdir("files", 0755); - ::mkdir("files/dir", 0755); - create_file("files/reg"); - - const atf::fs::path old = get_current_dir(); - - ATF_REQUIRE_THROW(atf::system_error, - change_directory(atf::fs::path("files/reg"))); - ATF_REQUIRE(get_current_dir() == old); - - atf::fs::path old2 = change_directory(atf::fs::path("files")); - ATF_REQUIRE(old2 == old); - atf::fs::path old3 = change_directory(atf::fs::path("dir")); - ATF_REQUIRE(old3 == old2 / "files"); - atf::fs::path old4 = change_directory(atf::fs::path("../..")); - ATF_REQUIRE(old4 == old3 / "dir"); - ATF_REQUIRE(get_current_dir() == old); -} - -ATF_TEST_CASE(get_current_dir); -ATF_TEST_CASE_HEAD(get_current_dir) -{ - set_md_var("descr", "Tests the get_current_dir function"); -} -ATF_TEST_CASE_BODY(get_current_dir) -{ - using atf::atf_run::change_directory; - using atf::atf_run::get_current_dir; - - ::mkdir("files", 0755); - ::mkdir("files/dir", 0755); - create_file("files/reg"); - - atf::fs::path curdir = get_current_dir(); - change_directory(atf::fs::path(".")); - ATF_REQUIRE(get_current_dir() == curdir); - change_directory(atf::fs::path("files")); - ATF_REQUIRE(get_current_dir() == curdir / "files"); - change_directory(atf::fs::path("dir")); - ATF_REQUIRE(get_current_dir() == curdir / "files/dir"); - change_directory(atf::fs::path("..")); - ATF_REQUIRE(get_current_dir() == curdir / "files"); - change_directory(atf::fs::path("..")); - ATF_REQUIRE(get_current_dir() == curdir); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the tests for the "temp_dir" class. - ATF_ADD_TEST_CASE(tcs, temp_dir_raii); - - // Add the tests for the free functions. - ATF_ADD_TEST_CASE(tcs, cleanup); - ATF_ADD_TEST_CASE(tcs, cleanup_eacces_on_root); - ATF_ADD_TEST_CASE(tcs, cleanup_eacces_on_subdir); - ATF_ADD_TEST_CASE(tcs, change_directory); - ATF_ADD_TEST_CASE(tcs, get_current_dir); -} Index: vendor/NetBSD/atf/dist/dist/atf-run/sample/common.conf =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/sample/common.conf (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/sample/common.conf (nonexistent) @@ -1,11 +0,0 @@ -Content-Type: application/X-atf-config; version="1" - -# -# Sample configuration file for properties affecting all test suites. -# - -# When running the test suite as root, some tests require to switch to -# an unprivileged user to perform extra checks. Set this variable to -# the user you want to use in those cases. If not set, those tests will -# be skipped. -#unprivileged-user = "_atf" Index: vendor/NetBSD/atf/dist/dist/atf-run/sample/atf-run.hooks =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/sample/atf-run.hooks (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/sample/atf-run.hooks (nonexistent) @@ -1,23 +0,0 @@ -# -# Definition of custom hooks for atf-run. -# -# Uncomment any hooks that you want to override and add your own code -# to them. Some sample calls are included in them. Be very careful -# with what you print from here. -# -# See atf-run(1) for more details. -# - -#info_start_hook() -#{ -# default_info_start_hook "${@}" -# -# atf_tps_writer_info "extra.info" "An example" -#} - -#info_end_hook() -#{ -# default_info_end_hook "${@}" -# -# atf_tps_writer_info "extra.info" "An example" -#} Index: vendor/NetBSD/atf/dist/dist/atf-run/config.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/config.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/config.cpp (nonexistent) @@ -1,221 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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 -#include - -#include "atf-c++/config.hpp" - -#include "atf-c++/detail/env.hpp" -#include "atf-c++/detail/fs.hpp" -#include "atf-c++/detail/sanity.hpp" -#include "atf-c++/detail/parser.hpp" - -#include "config.hpp" - -namespace impl = atf::atf_run; -namespace detail = atf::atf_run::detail; - -namespace { - -namespace atf_config { - -static const atf::parser::token_type eof_type = 0; -static const atf::parser::token_type nl_type = 1; -static const atf::parser::token_type text_type = 2; -static const atf::parser::token_type dblquote_type = 3; -static const atf::parser::token_type equal_type = 4; -static const atf::parser::token_type hash_type = 5; - -class tokenizer : public atf::parser::tokenizer< std::istream > { -public: - tokenizer(std::istream& is, size_t curline) : - atf::parser::tokenizer< std::istream > - (is, true, eof_type, nl_type, text_type, curline) - { - add_delim('=', equal_type); - add_delim('#', hash_type); - add_quote('"', dblquote_type); - } -}; - -} // namespace atf_config - -class config_reader : public detail::atf_config_reader { - atf::tests::vars_map m_vars; - - void - got_var(const std::string& var, const std::string& name) - { - m_vars[var] = name; - } - -public: - config_reader(std::istream& is) : - atf_config_reader(is) - { - } - - const atf::tests::vars_map& - get_vars(void) - const - { - return m_vars; - } -}; - -template< class K, class V > -static -void -merge_maps(std::map< K, V >& dest, const std::map< K, V >& src) -{ - for (typename std::map< K, V >::const_iterator iter = src.begin(); - iter != src.end(); iter++) - dest[(*iter).first] = (*iter).second; -} - -static -void -merge_config_file(const atf::fs::path& config_path, - atf::tests::vars_map& config) -{ - std::ifstream is(config_path.c_str()); - if (is) { - config_reader reader(is); - reader.read(); - merge_maps(config, reader.get_vars()); - } -} - -static -std::vector< atf::fs::path > -get_config_dirs(void) -{ - std::vector< atf::fs::path > dirs; - dirs.push_back(atf::fs::path(atf::config::get("atf_confdir"))); - if (atf::env::has("HOME")) - dirs.push_back(atf::fs::path(atf::env::get("HOME")) / ".atf"); - return dirs; -} - -} // anonymous namespace - -detail::atf_config_reader::atf_config_reader(std::istream& is) : - m_is(is) -{ -} - -detail::atf_config_reader::~atf_config_reader(void) -{ -} - -void -detail::atf_config_reader::got_var(const std::string& var, - const std::string& val) -{ -} - -void -detail::atf_config_reader::got_eof(void) -{ -} - -void -detail::atf_config_reader::read(void) -{ - using atf::parser::parse_error; - using namespace atf_config; - - std::pair< size_t, atf::parser::headers_map > hml = - atf::parser::read_headers(m_is, 1); - atf::parser::validate_content_type(hml.second, - "application/X-atf-config", 1); - - tokenizer tkz(m_is, hml.first); - atf::parser::parser< tokenizer > p(tkz); - - for (;;) { - try { - atf::parser::token t = p.expect(eof_type, hash_type, text_type, - nl_type, - "eof, #, new line or text"); - if (t.type() == eof_type) - break; - - if (t.type() == hash_type) { - (void)p.rest_of_line(); - t = p.expect(nl_type, "new line"); - } else if (t.type() == text_type) { - std::string name = t.text(); - - t = p.expect(equal_type, "equal sign"); - - t = p.expect(text_type, "word or quoted string"); - ATF_PARSER_CALLBACK(p, got_var(name, t.text())); - - t = p.expect(nl_type, hash_type, "new line or comment"); - if (t.type() == hash_type) { - (void)p.rest_of_line(); - t = p.expect(nl_type, "new line"); - } - } else if (t.type() == nl_type) { - } else - UNREACHABLE; - } catch (const parse_error& pe) { - p.add_error(pe); - p.reset(nl_type); - } - } - - ATF_PARSER_CALLBACK(p, got_eof()); -} - -atf::tests::vars_map -impl::merge_configs(const atf::tests::vars_map& lower, - const atf::tests::vars_map& upper) -{ - atf::tests::vars_map merged = lower; - merge_maps(merged, upper); - return merged; -} - -atf::tests::vars_map -impl::read_config_files(const std::string& test_suite_name) -{ - atf::tests::vars_map config; - - const std::vector< atf::fs::path > dirs = get_config_dirs(); - for (std::vector< atf::fs::path >::const_iterator iter = dirs.begin(); - iter != dirs.end(); iter++) { - merge_config_file((*iter) / "common.conf", config); - merge_config_file((*iter) / (test_suite_name + ".conf"), config); - } - - return config; -} Index: vendor/NetBSD/atf/dist/dist/atf-run/config.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-run/config.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-run/config.hpp (nonexistent) @@ -1,61 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2010 The NetBSD Foundation, Inc. -// 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 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 -#include - -#include "atf-c++/tests.hpp" - -namespace atf { -namespace atf_run { - -namespace detail { - -class atf_config_reader { - std::istream& m_is; - -protected: - virtual void got_var(const std::string&, const std::string &); - virtual void got_eof(void); - -public: - atf_config_reader(std::istream&); - virtual ~atf_config_reader(void); - - void read(void); -}; - -} // namespace detail - -atf::tests::vars_map merge_configs(const atf::tests::vars_map&, - const atf::tests::vars_map&); -atf::tests::vars_map read_config_files(const std::string&); - -} // namespace atf_run -} // namespace atf Index: vendor/NetBSD/atf/dist/dist/atf-version/atf-version.1 =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-version/atf-version.1 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-version/atf-version.1 (nonexistent) @@ -1,56 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd September 16, 2007 -.Dt ATF-VERSION 1 -.Os -.Sh NAME -.Nm atf-version -.Nd shows information about the installed ATF version -.Sh SYNOPSIS -.Nm -.Nm -.Fl h -.Sh DESCRIPTION -.Nm -is a utility that prints information about the version of ATF currently -installed in the system. -.Pp -In the first synopsis form, -.Nm -shows the release version of the ATF package installed in the system (the -installation that corresponds to the instance of -.Nm -being executed) and also shows information related to the repository -revision used to build that package. -.Pp -In the second synopsis form, -.Nm -will print information about all supported options and their purpose. -.Sh SEE ALSO -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/atf-version/atf-version.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-version/atf-version.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-version/atf-version.cpp (nonexistent) @@ -1,92 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -#include -#include - -#include "atf-c++/detail/application.hpp" -#include "atf-c++/detail/ui.hpp" - -#include "revision.h" - -class atf_version : public atf::application::app { - static const char* m_description; - -public: - atf_version(void); - - int main(void); -}; - -const char* atf_version::m_description = - "atf-version is a tool that shows information about the currently " - "installed version of ATF."; - -atf_version::atf_version(void) : - app(m_description, "atf-version(1)", "atf(7)") -{ -} - -int -atf_version::main(void) -{ - using atf::ui::format_text; - using atf::ui::format_text_with_tag; - - std::cout << PACKAGE_STRING " (" PACKAGE_TARNAME "-" PACKAGE_VERSION - ")\n" PACKAGE_COPYRIGHT "\n\n"; - -#if defined(PACKAGE_REVISION_TYPE_DIST) - std::cout << format_text("Built from a distribution file; no revision " - "information available.") << "\n"; -#elif defined(PACKAGE_REVISION_TYPE_MTN) - std::cout << format_text_with_tag(PACKAGE_REVISION_BRANCH, "Branch: ", - false) << "\n"; - std::cout << format_text_with_tag(PACKAGE_REVISION_BASE -# if PACKAGE_REVISION_MODIFIED - " (locally modified)" -# endif - " " PACKAGE_REVISION_DATE, - "Base revision: ", false) << "\n"; -#else -# error "Unknown PACKAGE_REVISION_TYPE value" -#endif - - return EXIT_SUCCESS; -} - -int -main(int argc, char* const* argv) -{ - return atf_version().run(argc, argv); -} Index: vendor/NetBSD/atf/dist/dist/atf-version/generate-revision.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-version/generate-revision.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-version/generate-revision.sh (nonexistent) @@ -1,182 +0,0 @@ -#! /bin/sh -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -# -# Generates a header file with information about the revision used to -# build ATF. -# - -set -e - -Prog_Name=${0##*/} - -MTN= -ROOT= - -# -# err message -# -err() { - echo "${Prog_Name}: ${@}" 1>&2 - exit 1 -} - -# -# call_mtn args -# -call_mtn() { - ${MTN} --root=${ROOT} "${@}" -} - -# extract_certs rev -# -extract_certs() { - call_mtn automate certs ${1} | awk ' -BEGIN { - current_cert = "" -} - -/^[ \t]*name "([^"]*)"[ \t]*$/ { - current_cert = substr($2, 2, length($2) - 2) - next -} - -/^[ \t]*value "([^"]*)"[ \t]*$/ { - value = substr($2, 2, length($2) - 2) - if (current_cert == "branch") { - print "rev_branch=\"" value "\"" - } else if (current_cert == "date") { - print "rev_date=\"" value "\"" - } - next -} -' -} - -# -# get_rev_info_into_vars -# -# Sets the following variables to describe the current revision of the tree: -# rev_base_id: The base revision identifier. -# rev_branch: The branch name. -# rev_modified: true if the tree has been locally modified. -# rev_date: The date of the revision. -# -get_rev_info_into_vars() { - rev_base_id=$(call_mtn automate get_base_revision_id) - - if call_mtn status | grep "no changes" >/dev/null; then - rev_modified=false - else - rev_modified=true - fi - - # The following defines several rev_* variables. - eval $(extract_certs ${rev_base_id}) -} - -# -# generate_from_dist revfile version -# -generate_from_dist() { - revfile=${1}; shift - version=${1}; shift - - >${revfile} - - echo "#define PACKAGE_REVISION_TYPE_DIST" >>${revfile} -} - -# -# generate_from_mtn revfile -# -generate_from_mtn() { - revfile=${1} - - get_rev_info_into_vars - - >${revfile} - - echo "#define PACKAGE_REVISION_TYPE_MTN" >>${revfile} - - echo "#define PACKAGE_REVISION_BRANCH \"${rev_branch}\"" >>${revfile} - echo "#define PACKAGE_REVISION_BASE \"${rev_base_id}\"" >>${revfile} - - if [ ${rev_modified} = true ]; then - echo "#define PACKAGE_REVISION_MODIFIED 1" >>${revfile} - fi - - echo "#define PACKAGE_REVISION_DATE \"${rev_date}\"" >>${revfile} -} - -# -# main -# -# Entry point. -# -main() { - outfile= - version= - while getopts :m:r:o:v: arg; do - case ${arg} in - m) - MTN=${OPTARG} - ;; - o) - outfile=${OPTARG} - ;; - r) - ROOT=${OPTARG} - ;; - v) - version=${OPTARG} - ;; - *) - err "Unknown option ${arg}" - ;; - esac - done - [ -n "${ROOT}" ] || \ - err "Must specify the top-level source directory with -r" - [ -n "${outfile}" ] || \ - err "Must specify an output file with -o" - [ -n "${version}" ] || \ - err "Must specify a version number with -v" - - if [ -n "${MTN}" -a -d ${ROOT}/_MTN ]; then - generate_from_mtn ${outfile} - else - generate_from_dist ${outfile} ${version} - fi -} - -main "${@}" - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Property changes on: vendor/NetBSD/atf/dist/dist/atf-version/generate-revision.sh ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: vendor/NetBSD/atf/dist/dist/atf-c++/utils_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/utils_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/utils_test.cpp (nonexistent) @@ -1,308 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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 - -#include "macros.hpp" -#include "utils.hpp" - -#include "detail/test_helpers.hpp" - -// ------------------------------------------------------------------------ -// Tests for the "auto_array" class. -// ------------------------------------------------------------------------ - -class test_array { -public: - int m_value; - - static ssize_t m_nblocks; - - static - atf::utils::auto_array< test_array > - do_copy(atf::utils::auto_array< test_array >& ta) - { - return atf::utils::auto_array< test_array >(ta); - } - - void* operator new(size_t size) - { - ATF_FAIL("New called but should have been new[]"); - return new int(5); - } - - void* operator new[](size_t size) - { - m_nblocks++; - void* mem = ::operator new(size); - std::cout << "Allocated 'test_array' object " << mem << "\n"; - return mem; - } - - void operator delete(void* mem) - { - ATF_FAIL("Delete called but should have been delete[]"); - } - - void operator delete[](void* mem) - { - std::cout << "Releasing 'test_array' object " << mem << "\n"; - if (m_nblocks == 0) - ATF_FAIL("Unbalanced delete[]"); - m_nblocks--; - ::operator delete(mem); - } -}; - -ssize_t test_array::m_nblocks = 0; - -ATF_TEST_CASE(auto_array_scope); -ATF_TEST_CASE_HEAD(auto_array_scope) -{ - set_md_var("descr", "Tests the automatic scope handling in the " - "auto_array smart pointer class"); -} -ATF_TEST_CASE_BODY(auto_array_scope) -{ - using atf::utils::auto_array; - - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); - { - auto_array< test_array > t(new test_array[10]); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); -} - -ATF_TEST_CASE(auto_array_copy); -ATF_TEST_CASE_HEAD(auto_array_copy) -{ - set_md_var("descr", "Tests the auto_array smart pointer class' copy " - "constructor"); -} -ATF_TEST_CASE_BODY(auto_array_copy) -{ - using atf::utils::auto_array; - - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); - { - auto_array< test_array > t1(new test_array[10]); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - - { - auto_array< test_array > t2(t1); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); -} - -ATF_TEST_CASE(auto_array_copy_ref); -ATF_TEST_CASE_HEAD(auto_array_copy_ref) -{ - set_md_var("descr", "Tests the auto_array smart pointer class' copy " - "constructor through the auxiliary auto_array_ref object"); -} -ATF_TEST_CASE_BODY(auto_array_copy_ref) -{ - using atf::utils::auto_array; - - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); - { - auto_array< test_array > t1(new test_array[10]); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - - { - auto_array< test_array > t2 = test_array::do_copy(t1); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); -} - -ATF_TEST_CASE(auto_array_get); -ATF_TEST_CASE_HEAD(auto_array_get) -{ - set_md_var("descr", "Tests the auto_array smart pointer class' get " - "method"); -} -ATF_TEST_CASE_BODY(auto_array_get) -{ - using atf::utils::auto_array; - - test_array* ta = new test_array[10]; - auto_array< test_array > t(ta); - ATF_REQUIRE_EQ(t.get(), ta); -} - -ATF_TEST_CASE(auto_array_release); -ATF_TEST_CASE_HEAD(auto_array_release) -{ - set_md_var("descr", "Tests the auto_array smart pointer class' release " - "method"); -} -ATF_TEST_CASE_BODY(auto_array_release) -{ - using atf::utils::auto_array; - - test_array* ta1 = new test_array[10]; - { - auto_array< test_array > t(ta1); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - test_array* ta2 = t.release(); - ATF_REQUIRE_EQ(ta2, ta1); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - delete [] ta1; -} - -ATF_TEST_CASE(auto_array_reset); -ATF_TEST_CASE_HEAD(auto_array_reset) -{ - set_md_var("descr", "Tests the auto_array smart pointer class' reset " - "method"); -} -ATF_TEST_CASE_BODY(auto_array_reset) -{ - using atf::utils::auto_array; - - test_array* ta1 = new test_array[10]; - test_array* ta2 = new test_array[10]; - ATF_REQUIRE_EQ(test_array::m_nblocks, 2); - - { - auto_array< test_array > t(ta1); - ATF_REQUIRE_EQ(test_array::m_nblocks, 2); - t.reset(ta2); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - t.reset(); - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); -} - -ATF_TEST_CASE(auto_array_assign); -ATF_TEST_CASE_HEAD(auto_array_assign) -{ - set_md_var("descr", "Tests the auto_array smart pointer class' " - "assignment operator"); -} -ATF_TEST_CASE_BODY(auto_array_assign) -{ - using atf::utils::auto_array; - - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); - { - auto_array< test_array > t1(new test_array[10]); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - - { - auto_array< test_array > t2; - t2 = t1; - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); -} - -ATF_TEST_CASE(auto_array_assign_ref); -ATF_TEST_CASE_HEAD(auto_array_assign_ref) -{ - set_md_var("descr", "Tests the auto_array smart pointer class' " - "assignment operator through the auxiliary auto_array_ref " - "object"); -} -ATF_TEST_CASE_BODY(auto_array_assign_ref) -{ - using atf::utils::auto_array; - - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); - { - auto_array< test_array > t1(new test_array[10]); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - - { - auto_array< test_array > t2; - t2 = test_array::do_copy(t1); - ATF_REQUIRE_EQ(test_array::m_nblocks, 1); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); - } - ATF_REQUIRE_EQ(test_array::m_nblocks, 0); -} - -ATF_TEST_CASE(auto_array_access); -ATF_TEST_CASE_HEAD(auto_array_access) -{ - set_md_var("descr", "Tests the auto_array smart pointer class' access " - "operator"); -} -ATF_TEST_CASE_BODY(auto_array_access) -{ - using atf::utils::auto_array; - - auto_array< test_array > t(new test_array[10]); - - for (int i = 0; i < 10; i++) - t[i].m_value = i * 2; - - for (int i = 0; i < 10; i++) - ATF_REQUIRE_EQ(t[i].m_value, i * 2); -} - -// ------------------------------------------------------------------------ -// Tests cases for the header file. -// ------------------------------------------------------------------------ - -HEADER_TC(include, "atf-c++/utils.hpp"); - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test for the "auto_array" class. - ATF_ADD_TEST_CASE(tcs, auto_array_scope); - ATF_ADD_TEST_CASE(tcs, auto_array_copy); - ATF_ADD_TEST_CASE(tcs, auto_array_copy_ref); - ATF_ADD_TEST_CASE(tcs, auto_array_get); - ATF_ADD_TEST_CASE(tcs, auto_array_release); - ATF_ADD_TEST_CASE(tcs, auto_array_reset); - ATF_ADD_TEST_CASE(tcs, auto_array_assign); - ATF_ADD_TEST_CASE(tcs, auto_array_assign_ref); - ATF_ADD_TEST_CASE(tcs, auto_array_access); - - // Add the test cases for the header file. - ATF_ADD_TEST_CASE(tcs, include); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/utils.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/utils.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/utils.hpp (nonexistent) @@ -1,200 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_UTILS_HPP_) -#define _ATF_CXX_UTILS_HPP_ - -#include - -namespace atf { -namespace utils { - -// ------------------------------------------------------------------------ -// The "auto_array" class. -// ------------------------------------------------------------------------ - -template< class T > -struct auto_array_ref { - T* m_ptr; - - explicit auto_array_ref(T*); -}; - -template< class T > -auto_array_ref< T >::auto_array_ref(T* ptr) : - m_ptr(ptr) -{ -} - -template< class T > -class auto_array { - T* m_ptr; - -public: - auto_array(T* = NULL) throw(); - auto_array(auto_array< T >&) throw(); - auto_array(auto_array_ref< T >) throw(); - ~auto_array(void) throw(); - - T* get(void) throw(); - const T* get(void) const throw(); - T* release(void) throw(); - void reset(T* = NULL) throw(); - - auto_array< T >& operator=(auto_array< T >&) throw(); - auto_array< T >& operator=(auto_array_ref< T >) throw(); - - T& operator[](int) throw(); - operator auto_array_ref< T >(void) throw(); -}; - -template< class T > -auto_array< T >::auto_array(T* ptr) - throw() : - m_ptr(ptr) -{ -} - -template< class T > -auto_array< T >::auto_array(auto_array< T >& ptr) - throw() : - m_ptr(ptr.release()) -{ -} - -template< class T > -auto_array< T >::auto_array(auto_array_ref< T > ref) - throw() : - m_ptr(ref.m_ptr) -{ -} - -template< class T > -auto_array< T >::~auto_array(void) - throw() -{ - if (m_ptr != NULL) - delete [] m_ptr; -} - -template< class T > -T* -auto_array< T >::get(void) - throw() -{ - return m_ptr; -} - -template< class T > -const T* -auto_array< T >::get(void) - const throw() -{ - return m_ptr; -} - -template< class T > -T* -auto_array< T >::release(void) - throw() -{ - T* ptr = m_ptr; - m_ptr = NULL; - return ptr; -} - -template< class T > -void -auto_array< T >::reset(T* ptr) - throw() -{ - if (m_ptr != NULL) - delete [] m_ptr; - m_ptr = ptr; -} - -template< class T > -auto_array< T >& -auto_array< T >::operator=(auto_array< T >& ptr) - throw() -{ - reset(ptr.release()); - return *this; -} - -template< class T > -auto_array< T >& -auto_array< T >::operator=(auto_array_ref< T > ref) - throw() -{ - if (m_ptr != ref.m_ptr) { - delete [] m_ptr; - m_ptr = ref.m_ptr; - } - return *this; -} - -template< class T > -T& -auto_array< T >::operator[](int pos) - throw() -{ - return m_ptr[pos]; -} - -template< class T > -auto_array< T >::operator auto_array_ref< T >(void) - throw() -{ - return auto_array_ref< T >(release()); -} - -// ------------------------------------------------------------------------ -// The "noncopyable" class. -// ------------------------------------------------------------------------ - -class noncopyable { - // The class cannot be empty; otherwise we get ABI-stability warnings - // during the build, which will break it due to strict checking. - int m_noncopyable_dummy; - - noncopyable(const noncopyable& nc); - noncopyable& operator=(const noncopyable& nc); - -protected: - // Explicitly needed to provide some non-private functions. Otherwise - // we also get some warnings during the build. - noncopyable(void) {} - ~noncopyable(void) {} -}; - -} // namespace utils -} // namespace atf - -#endif // !defined(_ATF_CXX_UTILS_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/tests.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/tests.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/tests.cpp (nonexistent) @@ -1,700 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include -#include -#include -#include -#include -} - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -extern "C" { -#include "atf-c/error.h" -#include "atf-c/tc.h" -#include "atf-c/utils.h" -} - -#include "tests.hpp" - -#include "detail/application.hpp" -#include "detail/env.hpp" -#include "detail/exceptions.hpp" -#include "detail/fs.hpp" -#include "detail/parser.hpp" -#include "detail/sanity.hpp" -#include "detail/text.hpp" - -namespace impl = atf::tests; -namespace detail = atf::tests::detail; -#define IMPL_NAME "atf::tests" - -// ------------------------------------------------------------------------ -// The "atf_tp_writer" class. -// ------------------------------------------------------------------------ - -detail::atf_tp_writer::atf_tp_writer(std::ostream& os) : - m_os(os), - m_is_first(true) -{ - atf::parser::headers_map hm; - atf::parser::attrs_map ct_attrs; - ct_attrs["version"] = "1"; - hm["Content-Type"] = atf::parser::header_entry("Content-Type", - "application/X-atf-tp", ct_attrs); - atf::parser::write_headers(hm, m_os); -} - -void -detail::atf_tp_writer::start_tc(const std::string& ident) -{ - if (!m_is_first) - m_os << "\n"; - m_os << "ident: " << ident << "\n"; - m_os.flush(); -} - -void -detail::atf_tp_writer::end_tc(void) -{ - if (m_is_first) - m_is_first = false; -} - -void -detail::atf_tp_writer::tc_meta_data(const std::string& name, - const std::string& value) -{ - PRE(name != "ident"); - m_os << name << ": " << value << "\n"; - m_os.flush(); -} - -// ------------------------------------------------------------------------ -// Free helper functions. -// ------------------------------------------------------------------------ - -bool -detail::match(const std::string& regexp, const std::string& str) -{ - return atf::text::match(str, regexp); -} - -// ------------------------------------------------------------------------ -// The "tc" class. -// ------------------------------------------------------------------------ - -static std::map< atf_tc_t*, impl::tc* > wraps; -static std::map< const atf_tc_t*, const impl::tc* > cwraps; - -struct impl::tc_impl : atf::utils::noncopyable { - std::string m_ident; - atf_tc_t m_tc; - bool m_has_cleanup; - - tc_impl(const std::string& ident, const bool has_cleanup) : - m_ident(ident), - m_has_cleanup(has_cleanup) - { - } - - static void - wrap_head(atf_tc_t *tc) - { - std::map< atf_tc_t*, impl::tc* >::iterator iter = wraps.find(tc); - INV(iter != wraps.end()); - (*iter).second->head(); - } - - static void - wrap_body(const atf_tc_t *tc) - { - std::map< const atf_tc_t*, const impl::tc* >::const_iterator iter = - cwraps.find(tc); - INV(iter != cwraps.end()); - try { - (*iter).second->body(); - } catch (const std::exception& e) { - (*iter).second->fail("Caught unhandled exception: " + std::string( - e.what())); - } catch (...) { - (*iter).second->fail("Caught unknown exception"); - } - } - - static void - wrap_cleanup(const atf_tc_t *tc) - { - std::map< const atf_tc_t*, const impl::tc* >::const_iterator iter = - cwraps.find(tc); - INV(iter != cwraps.end()); - (*iter).second->cleanup(); - } -}; - -impl::tc::tc(const std::string& ident, const bool has_cleanup) : - pimpl(new tc_impl(ident, has_cleanup)) -{ -} - -impl::tc::~tc(void) -{ - cwraps.erase(&pimpl->m_tc); - wraps.erase(&pimpl->m_tc); - - atf_tc_fini(&pimpl->m_tc); -} - -void -impl::tc::init(const vars_map& config) -{ - atf_error_t err; - - utils::auto_array< const char * > array( - new const char*[(config.size() * 2) + 1]); - const char **ptr = array.get(); - for (vars_map::const_iterator iter = config.begin(); - iter != config.end(); iter++) { - *ptr = (*iter).first.c_str(); - *(ptr + 1) = (*iter).second.c_str(); - ptr += 2; - } - *ptr = NULL; - - wraps[&pimpl->m_tc] = this; - cwraps[&pimpl->m_tc] = this; - - err = atf_tc_init(&pimpl->m_tc, pimpl->m_ident.c_str(), pimpl->wrap_head, - pimpl->wrap_body, pimpl->m_has_cleanup ? pimpl->wrap_cleanup : NULL, - array.get()); - if (atf_is_error(err)) - throw_atf_error(err); -} - -bool -impl::tc::has_config_var(const std::string& var) - const -{ - return atf_tc_has_config_var(&pimpl->m_tc, var.c_str()); -} - -bool -impl::tc::has_md_var(const std::string& var) - const -{ - return atf_tc_has_md_var(&pimpl->m_tc, var.c_str()); -} - -const std::string -impl::tc::get_config_var(const std::string& var) - const -{ - return atf_tc_get_config_var(&pimpl->m_tc, var.c_str()); -} - -const std::string -impl::tc::get_config_var(const std::string& var, const std::string& defval) - const -{ - return atf_tc_get_config_var_wd(&pimpl->m_tc, var.c_str(), defval.c_str()); -} - -const std::string -impl::tc::get_md_var(const std::string& var) - const -{ - return atf_tc_get_md_var(&pimpl->m_tc, var.c_str()); -} - -const impl::vars_map -impl::tc::get_md_vars(void) - const -{ - vars_map vars; - - char **array = atf_tc_get_md_vars(&pimpl->m_tc); - try { - char **ptr; - for (ptr = array; *ptr != NULL; ptr += 2) - vars[*ptr] = *(ptr + 1); - } catch (...) { - atf_utils_free_charpp(array); - throw; - } - - return vars; -} - -void -impl::tc::set_md_var(const std::string& var, const std::string& val) -{ - atf_error_t err = atf_tc_set_md_var(&pimpl->m_tc, var.c_str(), val.c_str()); - if (atf_is_error(err)) - throw_atf_error(err); -} - -void -impl::tc::run(const std::string& resfile) - const -{ - atf_error_t err = atf_tc_run(&pimpl->m_tc, resfile.c_str()); - if (atf_is_error(err)) - throw_atf_error(err); -} - -void -impl::tc::run_cleanup(void) - const -{ - atf_error_t err = atf_tc_cleanup(&pimpl->m_tc); - if (atf_is_error(err)) - throw_atf_error(err); -} - -void -impl::tc::head(void) -{ -} - -void -impl::tc::cleanup(void) - const -{ -} - -void -impl::tc::require_prog(const std::string& prog) - const -{ - atf_tc_require_prog(prog.c_str()); -} - -void -impl::tc::pass(void) -{ - atf_tc_pass(); -} - -void -impl::tc::fail(const std::string& reason) -{ - atf_tc_fail("%s", reason.c_str()); -} - -void -impl::tc::fail_nonfatal(const std::string& reason) -{ - atf_tc_fail_nonfatal("%s", reason.c_str()); -} - -void -impl::tc::skip(const std::string& reason) -{ - atf_tc_skip("%s", reason.c_str()); -} - -void -impl::tc::check_errno(const char* file, const int line, const int exp_errno, - const char* expr_str, const bool result) -{ - atf_tc_check_errno(file, line, exp_errno, expr_str, result); -} - -void -impl::tc::require_errno(const char* file, const int line, const int exp_errno, - const char* expr_str, const bool result) -{ - atf_tc_require_errno(file, line, exp_errno, expr_str, result); -} - -void -impl::tc::expect_pass(void) -{ - atf_tc_expect_pass(); -} - -void -impl::tc::expect_fail(const std::string& reason) -{ - atf_tc_expect_fail("%s", reason.c_str()); -} - -void -impl::tc::expect_exit(const int exitcode, const std::string& reason) -{ - atf_tc_expect_exit(exitcode, "%s", reason.c_str()); -} - -void -impl::tc::expect_signal(const int signo, const std::string& reason) -{ - atf_tc_expect_signal(signo, "%s", reason.c_str()); -} - -void -impl::tc::expect_death(const std::string& reason) -{ - atf_tc_expect_death("%s", reason.c_str()); -} - -void -impl::tc::expect_timeout(const std::string& reason) -{ - atf_tc_expect_timeout("%s", reason.c_str()); -} - -// ------------------------------------------------------------------------ -// The "tp" class. -// ------------------------------------------------------------------------ - -class tp : public atf::application::app { -public: - typedef std::vector< impl::tc * > tc_vector; - -private: - static const char* m_description; - - bool m_lflag; - atf::fs::path m_resfile; - std::string m_srcdir_arg; - atf::fs::path m_srcdir; - - atf::tests::vars_map m_vars; - - std::string specific_args(void) const; - options_set specific_options(void) const; - void process_option(int, const char*); - - void (*m_add_tcs)(tc_vector&); - tc_vector m_tcs; - - void parse_vflag(const std::string&); - void handle_srcdir(void); - - tc_vector init_tcs(void); - - enum tc_part { - BODY, - CLEANUP, - }; - - void list_tcs(void); - impl::tc* find_tc(tc_vector, const std::string&); - static std::pair< std::string, tc_part > process_tcarg(const std::string&); - int run_tc(const std::string&); - -public: - tp(void (*)(tc_vector&)); - ~tp(void); - - int main(void); -}; - -const char* tp::m_description = - "This is an independent atf test program."; - -tp::tp(void (*add_tcs)(tc_vector&)) : - app(m_description, "atf-test-program(1)", "atf(7)", false), - m_lflag(false), - m_resfile("/dev/stdout"), - m_srcdir("."), - m_add_tcs(add_tcs) -{ -} - -tp::~tp(void) -{ - for (tc_vector::iterator iter = m_tcs.begin(); - iter != m_tcs.end(); iter++) { - impl::tc* tc = *iter; - - delete tc; - } -} - -std::string -tp::specific_args(void) - const -{ - return "test_case"; -} - -tp::options_set -tp::specific_options(void) - const -{ - using atf::application::option; - options_set opts; - opts.insert(option('l', "", "List test cases and their purpose")); - opts.insert(option('r', "resfile", "The file to which the test program " - "will write the results of the " - "executed test case")); - opts.insert(option('s', "srcdir", "Directory where the test's data " - "files are located")); - opts.insert(option('v', "var=value", "Sets the configuration variable " - "`var' to `value'")); - return opts; -} - -void -tp::process_option(int ch, const char* arg) -{ - switch (ch) { - case 'l': - m_lflag = true; - break; - - case 'r': - m_resfile = atf::fs::path(arg); - break; - - case 's': - m_srcdir_arg = arg; - break; - - case 'v': - parse_vflag(arg); - break; - - default: - UNREACHABLE; - } -} - -void -tp::parse_vflag(const std::string& str) -{ - if (str.empty()) - throw std::runtime_error("-v requires a non-empty argument"); - - std::vector< std::string > ws = atf::text::split(str, "="); - if (ws.size() == 1 && str[str.length() - 1] == '=') { - m_vars[ws[0]] = ""; - } else { - if (ws.size() != 2) - throw std::runtime_error("-v requires an argument of the form " - "var=value"); - - m_vars[ws[0]] = ws[1]; - } -} - -void -tp::handle_srcdir(void) -{ - if (m_srcdir_arg.empty()) { - m_srcdir = atf::fs::path(m_argv0).branch_path(); - if (m_srcdir.leaf_name() == ".libs") - m_srcdir = m_srcdir.branch_path(); - } else - m_srcdir = atf::fs::path(m_srcdir_arg); - - if (!atf::fs::exists(m_srcdir / m_prog_name)) - throw std::runtime_error("Cannot find the test program in the " - "source directory `" + m_srcdir.str() + "'"); - - if (!m_srcdir.is_absolute()) - m_srcdir = m_srcdir.to_absolute(); - - m_vars["srcdir"] = m_srcdir.str(); -} - -tp::tc_vector -tp::init_tcs(void) -{ - m_add_tcs(m_tcs); - for (tc_vector::iterator iter = m_tcs.begin(); - iter != m_tcs.end(); iter++) { - impl::tc* tc = *iter; - - tc->init(m_vars); - } - return m_tcs; -} - -// -// An auxiliary unary predicate that compares the given test case's -// identifier to the identifier stored in it. -// -class tc_equal_to_ident { - const std::string& m_ident; - -public: - tc_equal_to_ident(const std::string& i) : - m_ident(i) - { - } - - bool operator()(const impl::tc* tc) - { - return tc->get_md_var("ident") == m_ident; - } -}; - -void -tp::list_tcs(void) -{ - tc_vector tcs = init_tcs(); - detail::atf_tp_writer writer(std::cout); - - for (tc_vector::const_iterator iter = tcs.begin(); - iter != tcs.end(); iter++) { - const impl::vars_map vars = (*iter)->get_md_vars(); - - { - impl::vars_map::const_iterator iter2 = vars.find("ident"); - INV(iter2 != vars.end()); - writer.start_tc((*iter2).second); - } - - for (impl::vars_map::const_iterator iter2 = vars.begin(); - iter2 != vars.end(); iter2++) { - const std::string& key = (*iter2).first; - if (key != "ident") - writer.tc_meta_data(key, (*iter2).second); - } - - writer.end_tc(); - } -} - -impl::tc* -tp::find_tc(tc_vector tcs, const std::string& name) -{ - std::vector< std::string > ids; - for (tc_vector::iterator iter = tcs.begin(); - iter != tcs.end(); iter++) { - impl::tc* tc = *iter; - - if (tc->get_md_var("ident") == name) - return tc; - } - throw atf::application::usage_error("Unknown test case `%s'", - name.c_str()); -} - -std::pair< std::string, tp::tc_part > -tp::process_tcarg(const std::string& tcarg) -{ - const std::string::size_type pos = tcarg.find(':'); - if (pos == std::string::npos) { - return std::make_pair(tcarg, BODY); - } else { - const std::string tcname = tcarg.substr(0, pos); - - const std::string partname = tcarg.substr(pos + 1); - if (partname == "body") - return std::make_pair(tcname, BODY); - else if (partname == "cleanup") - return std::make_pair(tcname, CLEANUP); - else { - using atf::application::usage_error; - throw usage_error("Invalid test case part `%s'", partname.c_str()); - } - } -} - -int -tp::run_tc(const std::string& tcarg) -{ - const std::pair< std::string, tc_part > fields = process_tcarg(tcarg); - - impl::tc* tc = find_tc(init_tcs(), fields.first); - - try { - switch (fields.second) { - case BODY: - tc->run(m_resfile.str()); - break; - case CLEANUP: - tc->run_cleanup(); - break; - default: - UNREACHABLE; - } - return EXIT_SUCCESS; - } catch (const std::runtime_error& e) { - std::cerr << "ERROR: " << e.what() << "\n"; - return EXIT_FAILURE; - } -} - -int -tp::main(void) -{ - using atf::application::usage_error; - - int errcode; - - handle_srcdir(); - - if (m_lflag) { - if (m_argc > 0) - throw usage_error("Cannot provide test case names with -l"); - - list_tcs(); - errcode = EXIT_SUCCESS; - } else { - if (m_argc == 0) - throw usage_error("Must provide a test case name"); - else if (m_argc > 1) - throw usage_error("Cannot provide more than one test case name"); - INV(m_argc == 1); - - errcode = run_tc(m_argv[0]); - } - - return errcode; -} - -namespace atf { - namespace tests { - int run_tp(int, char* const*, void (*)(tp::tc_vector&)); - } -} - -int -impl::run_tp(int argc, char* const* argv, void (*add_tcs)(tp::tc_vector&)) -{ - return tp(add_tcs).run(argc, argv); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/Kyuafile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/Kyuafile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/Kyuafile (nonexistent) @@ -1,14 +0,0 @@ -syntax("kyuafile", 1) - -test_suite("atf") - -atf_test_program{name="atf_c++_test"} -atf_test_program{name="build_test"} -atf_test_program{name="check_test"} -atf_test_program{name="config_test"} -atf_test_program{name="macros_test"} -atf_test_program{name="pkg_config_test"} -atf_test_program{name="tests_test"} -atf_test_program{name="utils_test"} - -include("detail/Kyuafile") Index: vendor/NetBSD/atf/dist/dist/atf-c++/atf-c++.pc.in =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/atf-c++.pc.in (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/atf-c++.pc.in (nonexistent) @@ -1,11 +0,0 @@ -# ATF pkg-config file - -cxx=__CXX__ -includedir=__INCLUDEDIR__ -libdir=__LIBDIR__ - -Name: atf-c++ -Description: Automated Testing Framework (C++ binding) -Version: __ATF_VERSION__ -Cflags: -I${includedir} -Libs: -L${libdir} -latf-c++ -latf-c Index: vendor/NetBSD/atf/dist/dist/atf-c++/check.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/check.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/check.cpp (nonexistent) @@ -1,158 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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 - -extern "C" { -#include "atf-c/build.h" -#include "atf-c/error.h" -} - -#include "check.hpp" - -#include "detail/exceptions.hpp" -#include "detail/process.hpp" -#include "detail/sanity.hpp" - -namespace impl = atf::check; -#define IMPL_NAME "atf::check" - -// ------------------------------------------------------------------------ -// The "check_result" class. -// ------------------------------------------------------------------------ - -impl::check_result::check_result(const atf_check_result_t* result) -{ - std::memcpy(&m_result, result, sizeof(m_result)); -} - -impl::check_result::~check_result(void) -{ - atf_check_result_fini(&m_result); -} - -bool -impl::check_result::exited(void) - const -{ - return atf_check_result_exited(&m_result); -} - -int -impl::check_result::exitcode(void) - const -{ - PRE(exited()); - return atf_check_result_exitcode(&m_result); -} - -bool -impl::check_result::signaled(void) - const -{ - return atf_check_result_signaled(&m_result); -} - -int -impl::check_result::termsig(void) - const -{ - PRE(signaled()); - return atf_check_result_termsig(&m_result); -} - -const std::string -impl::check_result::stdout_path(void) const -{ - return atf_check_result_stdout(&m_result); -} - -const std::string -impl::check_result::stderr_path(void) const -{ - return atf_check_result_stderr(&m_result); -} - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -bool -impl::build_c_o(const std::string& sfile, const std::string& ofile, - const atf::process::argv_array& optargs) -{ - bool success; - - atf_error_t err = atf_check_build_c_o(sfile.c_str(), ofile.c_str(), - optargs.exec_argv(), &success); - if (atf_is_error(err)) - throw_atf_error(err); - - return success; -} - -bool -impl::build_cpp(const std::string& sfile, const std::string& ofile, - const atf::process::argv_array& optargs) -{ - bool success; - - atf_error_t err = atf_check_build_cpp(sfile.c_str(), ofile.c_str(), - optargs.exec_argv(), &success); - if (atf_is_error(err)) - throw_atf_error(err); - - return success; -} - -bool -impl::build_cxx_o(const std::string& sfile, const std::string& ofile, - const atf::process::argv_array& optargs) -{ - bool success; - - atf_error_t err = atf_check_build_cxx_o(sfile.c_str(), ofile.c_str(), - optargs.exec_argv(), &success); - if (atf_is_error(err)) - throw_atf_error(err); - - return success; -} - -std::auto_ptr< impl::check_result > -impl::exec(const atf::process::argv_array& argva) -{ - atf_check_result_t result; - - atf_error_t err = atf_check_exec_array(argva.exec_argv(), &result); - if (atf_is_error(err)) - throw_atf_error(err); - - return std::auto_ptr< impl::check_result >(new impl::check_result(&result)); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/tests_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/tests_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/tests_test.cpp (nonexistent) @@ -1,201 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include - -#include -#include -} - -#include -#include - -#include "macros.hpp" - -#include "detail/parser.hpp" -#include "detail/test_helpers.hpp" - -// ------------------------------------------------------------------------ -// Tests for the "atf_tp_writer" class. -// ------------------------------------------------------------------------ - -static -void -print_indented(const std::string& str) -{ - std::vector< std::string > ws = atf::text::split(str, "\n"); - for (std::vector< std::string >::const_iterator iter = ws.begin(); - iter != ws.end(); iter++) - std::cout << ">>" << *iter << "<<\n"; -} - -// XXX Should this string handling and verbosity level be part of the -// ATF_REQUIRE_EQ macro? It may be hard to predict sometimes that a -// string can have newlines in it, and so the error message generated -// at the moment will be bogus if there are some. -static -void -check_equal(const atf::tests::tc& tc, const std::string& str, - const std::string& exp) -{ - if (str != exp) { - std::cout << "String equality check failed.\n" - "Adding >> and << to delimit the string boundaries below.\n"; - std::cout << "GOT:\n"; - print_indented(str); - std::cout << "EXPECTED:\n"; - print_indented(exp); - tc.fail("Constructed string differs from the expected one"); - } -} - -ATF_TEST_CASE(atf_tp_writer); -ATF_TEST_CASE_HEAD(atf_tp_writer) -{ - set_md_var("descr", "Verifies the application/X-atf-tp writer"); -} -ATF_TEST_CASE_BODY(atf_tp_writer) -{ - std::ostringstream expss; - std::ostringstream ss; - -#define RESET \ - expss.str(""); \ - ss.str("") - -#define CHECK \ - check_equal(*this, ss.str(), expss.str()) - - { - RESET; - - atf::tests::detail::atf_tp_writer w(ss); - expss << "Content-Type: application/X-atf-tp; version=\"1\"\n\n"; - CHECK; - } - - { - RESET; - - atf::tests::detail::atf_tp_writer w(ss); - expss << "Content-Type: application/X-atf-tp; version=\"1\"\n\n"; - CHECK; - - w.start_tc("test1"); - expss << "ident: test1\n"; - CHECK; - - w.end_tc(); - CHECK; - } - - { - RESET; - - atf::tests::detail::atf_tp_writer w(ss); - expss << "Content-Type: application/X-atf-tp; version=\"1\"\n\n"; - CHECK; - - w.start_tc("test1"); - expss << "ident: test1\n"; - CHECK; - - w.end_tc(); - CHECK; - - w.start_tc("test2"); - expss << "\nident: test2\n"; - CHECK; - - w.end_tc(); - CHECK; - } - - { - RESET; - - atf::tests::detail::atf_tp_writer w(ss); - expss << "Content-Type: application/X-atf-tp; version=\"1\"\n\n"; - CHECK; - - w.start_tc("test1"); - expss << "ident: test1\n"; - CHECK; - - w.tc_meta_data("descr", "the description"); - expss << "descr: the description\n"; - CHECK; - - w.end_tc(); - CHECK; - - w.start_tc("test2"); - expss << "\nident: test2\n"; - CHECK; - - w.tc_meta_data("descr", "second test case"); - expss << "descr: second test case\n"; - CHECK; - - w.tc_meta_data("require.progs", "/bin/cp"); - expss << "require.progs: /bin/cp\n"; - CHECK; - - w.tc_meta_data("X-custom", "foo bar baz"); - expss << "X-custom: foo bar baz\n"; - CHECK; - - w.end_tc(); - CHECK; - } - -#undef CHECK -#undef RESET -} - -// ------------------------------------------------------------------------ -// Tests cases for the header file. -// ------------------------------------------------------------------------ - -HEADER_TC(include, "atf-c++/tests.hpp"); - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add tests for the "atf_tp_writer" class. - ATF_ADD_TEST_CASE(tcs, atf_tp_writer); - - // Add the test cases for the header file. - ATF_ADD_TEST_CASE(tcs, include); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/tests.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/tests.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/tests.hpp (nonexistent) @@ -1,127 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_TESTS_HPP_) -#define _ATF_CXX_TESTS_HPP_ - -#include -#include -#include - -extern "C" { -#include -} - -#include - -namespace atf { -namespace tests { - -namespace detail { - -class atf_tp_writer { - std::ostream& m_os; - - bool m_is_first; - -public: - atf_tp_writer(std::ostream&); - - void start_tc(const std::string&); - void end_tc(void); - void tc_meta_data(const std::string&, const std::string&); -}; - -bool match(const std::string&, const std::string&); - -} // namespace - -// ------------------------------------------------------------------------ -// The "vars_map" class. -// ------------------------------------------------------------------------ - -typedef std::map< std::string, std::string > vars_map; - -// ------------------------------------------------------------------------ -// The "tc" class. -// ------------------------------------------------------------------------ - -struct tc_impl; - -class tc : utils::noncopyable { - std::auto_ptr< tc_impl > pimpl; - -protected: - virtual void head(void); - virtual void body(void) const = 0; - virtual void cleanup(void) const; - - void require_prog(const std::string&) const; - - friend struct tc_impl; - -public: - tc(const std::string&, const bool); - virtual ~tc(void); - - void init(const vars_map&); - - const std::string get_config_var(const std::string&) const; - const std::string get_config_var(const std::string&, const std::string&) - const; - const std::string get_md_var(const std::string&) const; - const vars_map get_md_vars(void) const; - bool has_config_var(const std::string&) const; - bool has_md_var(const std::string&) const; - void set_md_var(const std::string&, const std::string&); - - void run(const std::string&) const; - void run_cleanup(void) const; - - // To be called from the child process only. - static void pass(void) ATF_DEFS_ATTRIBUTE_NORETURN; - static void fail(const std::string&) ATF_DEFS_ATTRIBUTE_NORETURN; - static void fail_nonfatal(const std::string&); - static void skip(const std::string&) ATF_DEFS_ATTRIBUTE_NORETURN; - static void check_errno(const char*, const int, const int, const char*, - const bool); - static void require_errno(const char*, const int, const int, const char*, - const bool); - static void expect_pass(void); - static void expect_fail(const std::string&); - static void expect_exit(const int, const std::string&); - static void expect_signal(const int, const std::string&); - static void expect_death(const std::string&); - static void expect_timeout(const std::string&); -}; - -} // namespace tests -} // namespace atf - -#endif // !defined(_ATF_CXX_TESTS_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/check.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/check.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/check.hpp (nonexistent) @@ -1,133 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_CHECK_HPP_) -#define _ATF_CXX_CHECK_HPP_ - -extern "C" { -#include -} - -#include -#include -#include -#include - -#include - -namespace atf { - -namespace process { -class argv_array; -} // namespace process - -namespace check { - -// ------------------------------------------------------------------------ -// The "check_result" class. -// ------------------------------------------------------------------------ - -//! -//! \brief A class that contains results of executed command. -//! -//! The check_result class holds information about results -//! of executing arbitrary command and manages files containing -//! its output. -//! -class check_result : utils::noncopyable { - //! - //! \brief Internal representation of a result. - //! - atf_check_result_t m_result; - - //! - //! \brief Constructs a results object and grabs ownership of the - //! parameter passed in. - //! - check_result(const atf_check_result_t* result); - - friend check_result test_constructor(const char* const*); - friend std::auto_ptr< check_result > exec(const atf::process::argv_array&); - -public: - //! - //! \brief Destroys object and removes all managed files. - //! - ~check_result(void); - - //! - //! \brief Returns whether the command exited correctly or not. - //! - bool exited(void) const; - - //! - //! \brief Returns command's exit status. - //! - int exitcode(void) const; - - //! - //! \brief Returns whether the command received a signal or not. - //! - bool signaled(void) const; - - //! - //! \brief Returns the signal that terminated the command. - //! - int termsig(void) const; - - //! - //! \brief Returns the path to file contaning command's stdout. - //! - const std::string stdout_path(void) const; - - //! - //! \brief Returns the path to file contaning command's stderr. - //! - const std::string stderr_path(void) const; -}; - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -bool build_c_o(const std::string&, const std::string&, - const atf::process::argv_array&); -bool build_cpp(const std::string&, const std::string&, - const atf::process::argv_array&); -bool build_cxx_o(const std::string&, const std::string&, - const atf::process::argv_array&); -std::auto_ptr< check_result > exec(const atf::process::argv_array&); - -// Useful for testing only. -check_result test_constructor(void); - -} // namespace check -} // namespace atf - -#endif // !defined(_ATF_CXX_CHECK_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/check_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/check_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/check_test.cpp (nonexistent) @@ -1,402 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include -#include -} - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "check.hpp" -#include "config.hpp" -#include "utils.hpp" - -#include "detail/fs.hpp" -#include "detail/process.hpp" -#include "detail/test_helpers.hpp" -#include "detail/text.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static -std::auto_ptr< atf::check::check_result > -do_exec(const atf::tests::tc* tc, const char* helper_name) -{ - std::vector< std::string > argv; - argv.push_back(get_process_helpers_path(*tc).str()); - argv.push_back(helper_name); - std::cout << "Executing " << argv[0] << " " << argv[1] << "\n"; - - atf::process::argv_array argva(argv); - return atf::check::exec(argva); -} - -static -std::auto_ptr< atf::check::check_result > -do_exec(const atf::tests::tc* tc, const char* helper_name, const char *carg2) -{ - std::vector< std::string > argv; - argv.push_back(get_process_helpers_path(*tc).str()); - argv.push_back(helper_name); - argv.push_back(carg2); - std::cout << "Executing " << argv[0] << " " << argv[1] << " " - << argv[2] << "\n"; - - atf::process::argv_array argva(argv); - return atf::check::exec(argva); -} - -// ------------------------------------------------------------------------ -// Helper test cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(h_build_c_o_ok); -ATF_TEST_CASE_HEAD(h_build_c_o_ok) -{ - set_md_var("descr", "Helper test case for build_c_o"); -} -ATF_TEST_CASE_BODY(h_build_c_o_ok) -{ - std::ofstream sfile("test.c"); - sfile << "#include \n"; - sfile.close(); - - ATF_REQUIRE(atf::check::build_c_o("test.c", "test.o", - atf::process::argv_array())); -} - -ATF_TEST_CASE(h_build_c_o_fail); -ATF_TEST_CASE_HEAD(h_build_c_o_fail) -{ - set_md_var("descr", "Helper test case for build_c_o"); -} -ATF_TEST_CASE_BODY(h_build_c_o_fail) -{ - std::ofstream sfile("test.c"); - sfile << "void foo(void) { int a = UNDEFINED_SYMBOL; }\n"; - sfile.close(); - - ATF_REQUIRE(!atf::check::build_c_o("test.c", "test.o", - atf::process::argv_array())); -} - -ATF_TEST_CASE(h_build_cpp_ok); -ATF_TEST_CASE_HEAD(h_build_cpp_ok) -{ - set_md_var("descr", "Helper test case for build_cpp"); -} -ATF_TEST_CASE_BODY(h_build_cpp_ok) -{ - std::ofstream sfile("test.c"); - sfile << "#define A foo\n"; - sfile << "#define B bar\n"; - sfile << "A B\n"; - sfile.close(); - - ATF_REQUIRE(atf::check::build_cpp("test.c", "test.p", - atf::process::argv_array())); -} - -ATF_TEST_CASE(h_build_cpp_fail); -ATF_TEST_CASE_HEAD(h_build_cpp_fail) -{ - set_md_var("descr", "Helper test case for build_cpp"); -} -ATF_TEST_CASE_BODY(h_build_cpp_fail) -{ - std::ofstream sfile("test.c"); - sfile << "#include \"./non-existent.h\"\n"; - sfile.close(); - - ATF_REQUIRE(!atf::check::build_cpp("test.c", "test.p", - atf::process::argv_array())); -} - -ATF_TEST_CASE(h_build_cxx_o_ok); -ATF_TEST_CASE_HEAD(h_build_cxx_o_ok) -{ - set_md_var("descr", "Helper test case for build_cxx_o"); -} -ATF_TEST_CASE_BODY(h_build_cxx_o_ok) -{ - std::ofstream sfile("test.cpp"); - sfile << "#include \n"; - sfile.close(); - - ATF_REQUIRE(atf::check::build_cxx_o("test.cpp", "test.o", - atf::process::argv_array())); -} - -ATF_TEST_CASE(h_build_cxx_o_fail); -ATF_TEST_CASE_HEAD(h_build_cxx_o_fail) -{ - set_md_var("descr", "Helper test case for build_cxx_o"); -} -ATF_TEST_CASE_BODY(h_build_cxx_o_fail) -{ - std::ofstream sfile("test.cpp"); - sfile << "void foo(void) { int a = UNDEFINED_SYMBOL; }\n"; - sfile.close(); - - ATF_REQUIRE(!atf::check::build_cxx_o("test.cpp", "test.o", - atf::process::argv_array())); -} - -// ------------------------------------------------------------------------ -// Test cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(build_c_o); -ATF_TEST_CASE_HEAD(build_c_o) -{ - set_md_var("descr", "Tests the build_c_o function"); -} -ATF_TEST_CASE_BODY(build_c_o) -{ - run_h_tc< ATF_TEST_CASE_NAME(h_build_c_o_ok) >(); - ATF_REQUIRE(grep_file("stdout", "-o test.o")); - ATF_REQUIRE(grep_file("stdout", "-c test.c")); - - run_h_tc< ATF_TEST_CASE_NAME(h_build_c_o_fail) >(); - ATF_REQUIRE(grep_file("stdout", "-o test.o")); - ATF_REQUIRE(grep_file("stdout", "-c test.c")); - ATF_REQUIRE(grep_file("stderr", "test.c")); - ATF_REQUIRE(grep_file("stderr", "UNDEFINED_SYMBOL")); -} - -ATF_TEST_CASE(build_cpp); -ATF_TEST_CASE_HEAD(build_cpp) -{ - set_md_var("descr", "Tests the build_cpp function"); -} -ATF_TEST_CASE_BODY(build_cpp) -{ - run_h_tc< ATF_TEST_CASE_NAME(h_build_cpp_ok) >(); - ATF_REQUIRE(grep_file("stdout", "-o.*test.p")); - ATF_REQUIRE(grep_file("stdout", "test.c")); - ATF_REQUIRE(grep_file("test.p", "foo bar")); - - run_h_tc< ATF_TEST_CASE_NAME(h_build_cpp_fail) >(); - ATF_REQUIRE(grep_file("stdout", "-o test.p")); - ATF_REQUIRE(grep_file("stdout", "test.c")); - ATF_REQUIRE(grep_file("stderr", "test.c")); - ATF_REQUIRE(grep_file("stderr", "non-existent.h")); -} - -ATF_TEST_CASE(build_cxx_o); -ATF_TEST_CASE_HEAD(build_cxx_o) -{ - set_md_var("descr", "Tests the build_cxx_o function"); -} -ATF_TEST_CASE_BODY(build_cxx_o) -{ - run_h_tc< ATF_TEST_CASE_NAME(h_build_cxx_o_ok) >(); - ATF_REQUIRE(grep_file("stdout", "-o test.o")); - ATF_REQUIRE(grep_file("stdout", "-c test.cpp")); - - run_h_tc< ATF_TEST_CASE_NAME(h_build_cxx_o_fail) >(); - ATF_REQUIRE(grep_file("stdout", "-o test.o")); - ATF_REQUIRE(grep_file("stdout", "-c test.cpp")); - ATF_REQUIRE(grep_file("stderr", "test.cpp")); - ATF_REQUIRE(grep_file("stderr", "UNDEFINED_SYMBOL")); -} - -ATF_TEST_CASE(exec_cleanup); -ATF_TEST_CASE_HEAD(exec_cleanup) -{ - set_md_var("descr", "Tests that exec properly cleans up the temporary " - "files it creates"); -} -ATF_TEST_CASE_BODY(exec_cleanup) -{ - std::auto_ptr< atf::fs::path > out; - std::auto_ptr< atf::fs::path > err; - - { - std::auto_ptr< atf::check::check_result > r = - do_exec(this, "exit-success"); - out.reset(new atf::fs::path(r->stdout_path())); - err.reset(new atf::fs::path(r->stderr_path())); - ATF_REQUIRE(atf::fs::exists(*out.get())); - ATF_REQUIRE(atf::fs::exists(*err.get())); - } - ATF_REQUIRE(!atf::fs::exists(*out.get())); - ATF_REQUIRE(!atf::fs::exists(*err.get())); -} - -ATF_TEST_CASE(exec_exitstatus); -ATF_TEST_CASE_HEAD(exec_exitstatus) -{ - set_md_var("descr", "Tests that exec properly captures the exit " - "status of the executed command"); -} -ATF_TEST_CASE_BODY(exec_exitstatus) -{ - { - std::auto_ptr< atf::check::check_result > r = - do_exec(this, "exit-success"); - ATF_REQUIRE(r->exited()); - ATF_REQUIRE(!r->signaled()); - ATF_REQUIRE_EQ(r->exitcode(), EXIT_SUCCESS); - } - - { - std::auto_ptr< atf::check::check_result > r = - do_exec(this, "exit-failure"); - ATF_REQUIRE(r->exited()); - ATF_REQUIRE(!r->signaled()); - ATF_REQUIRE_EQ(r->exitcode(), EXIT_FAILURE); - } - - { - std::auto_ptr< atf::check::check_result > r = - do_exec(this, "exit-signal"); - ATF_REQUIRE(!r->exited()); - ATF_REQUIRE(r->signaled()); - ATF_REQUIRE_EQ(r->termsig(), SIGKILL); - } -} - -static -void -check_lines(const std::string& path, const char* outname, - const char* resname) -{ - std::ifstream f(path.c_str()); - ATF_REQUIRE(f); - - std::string line; - std::getline(f, line); - ATF_REQUIRE_EQ(line, std::string("Line 1 to ") + outname + " for " + - resname); - std::getline(f, line); - ATF_REQUIRE_EQ(line, std::string("Line 2 to ") + outname + " for " + - resname); -} - -ATF_TEST_CASE(exec_stdout_stderr); -ATF_TEST_CASE_HEAD(exec_stdout_stderr) -{ - set_md_var("descr", "Tests that exec properly captures the stdout " - "and stderr streams of the child process"); -} -ATF_TEST_CASE_BODY(exec_stdout_stderr) -{ - std::auto_ptr< atf::check::check_result > r1 = - do_exec(this, "stdout-stderr", "result1"); - ATF_REQUIRE(r1->exited()); - ATF_REQUIRE_EQ(r1->exitcode(), EXIT_SUCCESS); - - std::auto_ptr< atf::check::check_result > r2 = - do_exec(this, "stdout-stderr", "result2"); - ATF_REQUIRE(r2->exited()); - ATF_REQUIRE_EQ(r2->exitcode(), EXIT_SUCCESS); - - const std::string out1 = r1->stdout_path(); - const std::string out2 = r2->stdout_path(); - const std::string err1 = r1->stderr_path(); - const std::string err2 = r2->stderr_path(); - - ATF_REQUIRE(out1.find("check.XXXXXX") == std::string::npos); - ATF_REQUIRE(out2.find("check.XXXXXX") == std::string::npos); - ATF_REQUIRE(err1.find("check.XXXXXX") == std::string::npos); - ATF_REQUIRE(err2.find("check.XXXXXX") == std::string::npos); - - ATF_REQUIRE(out1.find("/check") != std::string::npos); - ATF_REQUIRE(out2.find("/check") != std::string::npos); - ATF_REQUIRE(err1.find("/check") != std::string::npos); - ATF_REQUIRE(err2.find("/check") != std::string::npos); - - ATF_REQUIRE(out1.find("/stdout") != std::string::npos); - ATF_REQUIRE(out2.find("/stdout") != std::string::npos); - ATF_REQUIRE(err1.find("/stderr") != std::string::npos); - ATF_REQUIRE(err2.find("/stderr") != std::string::npos); - - ATF_REQUIRE(out1 != out2); - ATF_REQUIRE(err1 != err2); - - check_lines(out1, "stdout", "result1"); - check_lines(out2, "stdout", "result2"); - check_lines(err1, "stderr", "result1"); - check_lines(err2, "stderr", "result2"); -} - -ATF_TEST_CASE(exec_unknown); -ATF_TEST_CASE_HEAD(exec_unknown) -{ - set_md_var("descr", "Tests that running a non-existing binary " - "is handled correctly"); -} -ATF_TEST_CASE_BODY(exec_unknown) -{ - std::vector< std::string > argv; - argv.push_back(atf::config::get("atf_workdir") + "/non-existent"); - - atf::process::argv_array argva(argv); - std::auto_ptr< atf::check::check_result > r = atf::check::exec(argva); - ATF_REQUIRE(r->exited()); - ATF_REQUIRE_EQ(r->exitcode(), 127); -} - -// ------------------------------------------------------------------------ -// Tests cases for the header file. -// ------------------------------------------------------------------------ - -HEADER_TC(include, "atf-c++/check.hpp"); - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test cases for the free functions. - ATF_ADD_TEST_CASE(tcs, build_c_o); - ATF_ADD_TEST_CASE(tcs, build_cpp); - ATF_ADD_TEST_CASE(tcs, build_cxx_o); - ATF_ADD_TEST_CASE(tcs, exec_cleanup); - ATF_ADD_TEST_CASE(tcs, exec_exitstatus); - ATF_ADD_TEST_CASE(tcs, exec_stdout_stderr); - ATF_ADD_TEST_CASE(tcs, exec_unknown); - - // Add the test cases for the header file. - ATF_ADD_TEST_CASE(tcs, include); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/macros.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/macros.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/macros.hpp (nonexistent) @@ -1,205 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_MACROS_HPP_) -#define _ATF_CXX_MACROS_HPP_ - -#include -#include -#include - -#include - -#define ATF_TEST_CASE_WITHOUT_HEAD(name) \ - class atfu_tc_ ## name : public atf::tests::tc { \ - void body(void) const; \ - public: \ - atfu_tc_ ## name(void) : atf::tests::tc(#name, false) {} \ - }; - -#define ATF_TEST_CASE(name) \ - class atfu_tc_ ## name : public atf::tests::tc { \ - void head(void); \ - void body(void) const; \ - public: \ - atfu_tc_ ## name(void) : atf::tests::tc(#name, false) {} \ - }; - -#define ATF_TEST_CASE_WITH_CLEANUP(name) \ - class atfu_tc_ ## name : public atf::tests::tc { \ - void head(void); \ - void body(void) const; \ - void cleanup(void) const; \ - public: \ - atfu_tc_ ## name(void) : atf::tests::tc(#name, true) {} \ - }; - -#define ATF_TEST_CASE_NAME(name) atfu_tc_ ## name - -#define ATF_TEST_CASE_HEAD(name) \ - void \ - atfu_tc_ ## name::head(void) - -#define ATF_TEST_CASE_BODY(name) \ - void \ - atfu_tc_ ## name::body(void) \ - const - -#define ATF_TEST_CASE_CLEANUP(name) \ - void \ - atfu_tc_ ## name::cleanup(void) \ - const - -#define ATF_FAIL(reason) atf::tests::tc::fail(reason) - -#define ATF_SKIP(reason) atf::tests::tc::skip(reason) - -#define ATF_PASS() atf::tests::tc::pass() - -#define ATF_REQUIRE(x) \ - do { \ - if (!(x)) { \ - std::ostringstream atfu_ss; \ - atfu_ss << "Line " << __LINE__ << ": " << #x << " not met"; \ - atf::tests::tc::fail(atfu_ss.str()); \ - } \ - } while (false) - -#define ATF_REQUIRE_EQ(x, y) \ - do { \ - if ((x) != (y)) { \ - std::ostringstream atfu_ss; \ - atfu_ss << "Line " << __LINE__ << ": " << #x << " != " << #y \ - << " (" << (x) << " != " << (y) << ")"; \ - atf::tests::tc::fail(atfu_ss.str()); \ - } \ - } while (false) - -#define ATF_REQUIRE_IN(element, collection) \ - ATF_REQUIRE((collection).find(element) != (collection).end()) - -#define ATF_REQUIRE_NOT_IN(element, collection) \ - ATF_REQUIRE((collection).find(element) == (collection).end()) - -#define ATF_REQUIRE_MATCH(regexp, string) \ - do { \ - if (!atf::tests::detail::match(regexp, string)) { \ - std::ostringstream atfu_ss; \ - atfu_ss << "Line " << __LINE__ << ": '" << string << "' does not " \ - << "match regexp '" << regexp << "'"; \ - atf::tests::tc::fail(atfu_ss.str()); \ - } \ - } while (false) - -#define ATF_REQUIRE_THROW(e, x) \ - do { \ - try { \ - x; \ - std::ostringstream atfu_ss; \ - atfu_ss << "Line " << __LINE__ << ": " #x " did not throw " \ - #e " as expected"; \ - atf::tests::tc::fail(atfu_ss.str()); \ - } catch (const e&) { \ - } catch (const std::exception& atfu_e) { \ - std::ostringstream atfu_ss; \ - atfu_ss << "Line " << __LINE__ << ": " #x " threw an " \ - "unexpected error (not " #e "): " << atfu_e.what(); \ - atf::tests::tc::fail(atfu_ss.str()); \ - } catch (...) { \ - std::ostringstream atfu_ss; \ - atfu_ss << "Line " << __LINE__ << ": " #x " threw an " \ - "unexpected error (not " #e ")"; \ - atf::tests::tc::fail(atfu_ss.str()); \ - } \ - } while (false) - -#define ATF_REQUIRE_THROW_RE(type, regexp, x) \ - do { \ - try { \ - x; \ - std::ostringstream atfu_ss; \ - atfu_ss << "Line " << __LINE__ << ": " #x " did not throw " \ - #type " as expected"; \ - atf::tests::tc::fail(atfu_ss.str()); \ - } catch (const type& e) { \ - if (!atf::tests::detail::match(regexp, e.what())) { \ - std::ostringstream atfu_ss; \ - atfu_ss << "Line " << __LINE__ << ": " #x " threw " #type "(" \ - << e.what() << "), but does not match '" << regexp \ - << "'"; \ - atf::tests::tc::fail(atfu_ss.str()); \ - } \ - } catch (const std::exception& atfu_e) { \ - std::ostringstream atfu_ss; \ - atfu_ss << "Line " << __LINE__ << ": " #x " threw an " \ - "unexpected error (not " #type "): " << atfu_e.what(); \ - atf::tests::tc::fail(atfu_ss.str()); \ - } catch (...) { \ - std::ostringstream atfu_ss; \ - atfu_ss << "Line " << __LINE__ << ": " #x " threw an " \ - "unexpected error (not " #type ")"; \ - atf::tests::tc::fail(atfu_ss.str()); \ - } \ - } while (false) - -#define ATF_CHECK_ERRNO(exp_errno, bool_expr) \ - atf::tests::tc::check_errno(__FILE__, __LINE__, exp_errno, #bool_expr, \ - bool_expr) - -#define ATF_REQUIRE_ERRNO(exp_errno, bool_expr) \ - atf::tests::tc::require_errno(__FILE__, __LINE__, exp_errno, #bool_expr, \ - bool_expr) - -#define ATF_INIT_TEST_CASES(tcs) \ - namespace atf { \ - namespace tests { \ - int run_tp(int, char* const*, \ - void (*)(std::vector< atf::tests::tc * >&)); \ - } \ - } \ - \ - static void atfu_init_tcs(std::vector< atf::tests::tc * >&); \ - \ - int \ - main(int argc, char* const* argv) \ - { \ - return atf::tests::run_tp(argc, argv, atfu_init_tcs); \ - } \ - \ - static \ - void \ - atfu_init_tcs(std::vector< atf::tests::tc * >& tcs) - -#define ATF_ADD_TEST_CASE(tcs, tcname) \ - do { \ - atf::tests::tc* tcptr = new atfu_tc_ ## tcname(); \ - (tcs).push_back(tcptr); \ - } while (0); - -#endif // !defined(_ATF_CXX_MACROS_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/Atffile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/Atffile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/Atffile (nonexistent) @@ -1,14 +0,0 @@ -Content-Type: application/X-atf-atffile; version="1" - -prop: test-suite = atf - -tp: detail - -tp: atf_c++_test -tp: build_test -tp: check_test -tp: config_test -tp: macros_test -tp: pkg_config_test -tp: tests_test -tp: utils_test Index: vendor/NetBSD/atf/dist/dist/atf-c++/pkg_config_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/pkg_config_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/pkg_config_test.sh (nonexistent) @@ -1,149 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -# The following tests assume that the atfc++.pc file is installed in a -# directory that is known by pkg-config. Otherwise they will fail, -# and you will be required to adjust PKG_CONFIG_PATH accordingly. -# -# It would be possible to bypass this requirement by setting the path -# explicitly during the tests, but then this would not do a real check -# to ensure that the installation is working. - -require_pc() -{ - pkg-config ${1} || atf_fail "pkg-config could not locate ${1}.pc;" \ - "maybe need to set PKG_CONFIG_PATH?" -} - -check_version() -{ - atf_check -s eq:0 -o save:stdout -e empty -x \ - "atf-version | head -n 1 | cut -d ' ' -f 4" - ver1=$(cat stdout) - echo "Version reported by atf-version: ${ver1}" - - atf_check -s eq:0 -o save:stdout -e empty pkg-config --modversion "${1}" - ver2=$(cat stdout) - echo "Version reported by pkg-config: ${ver2}" - - atf_check_equal ${ver1} ${ver2} -} - -atf_test_case version -version_head() -{ - atf_set "descr" "Checks that the version in atf-c++ is correct" - atf_set "require.progs" "pkg-config" -} -version_body() -{ - require_pc "atf-c++" - - check_version "atf-c++" -} - -atf_test_case build -build_head() -{ - atf_set "descr" "Checks that a test program can be built against" \ - "the C++ library based on the pkg-config information" - atf_set "require.progs" "pkg-config" -} -build_body() -{ - require_pc "atf-c++" - - atf_check -s eq:0 -o save:stdout -e empty \ - pkg-config --variable=cxx atf-c++ - cxx=$(cat stdout) - echo "Compiler is: ${cxx}" - atf_require_prog ${cxx} - - cat >tp.cpp < - -#include - -ATF_TEST_CASE(tc); -ATF_TEST_CASE_HEAD(tc) { - set_md_var("descr", "A test case"); -} -ATF_TEST_CASE_BODY(tc) { - std::cout << "Running\n"; -} - -ATF_INIT_TEST_CASES(tcs) { - ATF_ADD_TEST_CASE(tcs, tc); -} -EOF - - atf_check -s eq:0 -o save:stdout -e empty pkg-config --cflags atf-c++ - cxxflags=$(cat stdout) - echo "CXXFLAGS are: ${cxxflags}" - - atf_check -s eq:0 -o save:stdout -e empty \ - pkg-config --libs-only-L --libs-only-other atf-c++ - ldflags=$(cat stdout) - atf_check -s eq:0 -o save:stdout -e empty \ - pkg-config --libs-only-l atf-c++ - libs=$(cat stdout) - echo "LDFLAGS are: ${ldflags}" - echo "LIBS are: ${libs}" - - atf_check -s eq:0 -o empty -e empty ${cxx} ${cxxflags} -o tp.o -c tp.cpp - atf_check -s eq:0 -o empty -e empty ${cxx} ${ldflags} -o tp tp.o ${libs} - - libpath= - for f in ${ldflags}; do - case ${f} in - -L*) - dir=$(echo ${f} | sed -e 's,^-L,,') - if [ -z "${libpath}" ]; then - libpath="${dir}" - else - libpath="${libpath}:${dir}" - fi - ;; - *) - ;; - esac - done - - atf_check -s eq:0 -o empty -e empty test -x tp - atf_check -s eq:0 -o match:'Running' -e empty -x \ - "LD_LIBRARY_PATH=${libpath} ./tp tc" -} - -atf_init_test_cases() -{ - atf_add_test_case version - atf_add_test_case build -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/expand.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/expand.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/expand.cpp (nonexistent) @@ -1,81 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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 - -#include "expand.hpp" -#include "text.hpp" - -namespace impl = atf::expand; -#define IMPL_NAME "atf::expand" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -namespace { - -std::string -glob_to_regex(const std::string& glob) -{ - std::string regex; - regex.reserve(glob.length() * 2); - - regex += '^'; - for (std::string::const_iterator iter = glob.begin(); iter != glob.end(); - iter++) { - switch (*iter) { - case '*': regex += ".*"; break; - case '?': regex += "."; break; - default: regex += *iter; - } - } - regex += '$'; - - return regex; -} - -} // anonymous namespace - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -bool -impl::is_glob(const std::string& glob) -{ - // NOTE: Keep this in sync with glob_to_regex! - return glob.find_first_of("*?") != std::string::npos; -} - -bool -impl::matches_glob(const std::string& glob, const std::string& candidate) -{ - return atf::text::match(candidate, glob_to_regex(glob)); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/expand.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/expand.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/expand.hpp (nonexistent) @@ -1,82 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_EXPAND_HPP_) -#define _ATF_CXX_EXPAND_HPP_ - -#include -#include - -namespace atf { -namespace expand { - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -//! -//! \brief Checks if the given string is a glob pattern. -//! -//! Returns true if the given string is a glob pattern; i.e. if it contains -//! any character that will be expanded by expand_glob. -//! -bool is_glob(const std::string&); - -//! -//! \brief Checks if a given string matches a glob pattern. -//! -//! Given a glob pattern and a string, checks whether the former matches -//! the latter. Returns a boolean indicating this condition. -//! -bool matches_glob(const std::string&, const std::string&); - -//! -//! \brief Expands a glob pattern among multiple candidates. -//! -//! Given a glob pattern and a set of candidate strings, checks which of -//! those strings match the glob pattern and returns them. -//! -template< class T > -std::vector< std::string > expand_glob(const std::string& glob, - const T& candidates) -{ - std::vector< std::string > exps; - - for (typename T::const_iterator iter = candidates.begin(); - iter != candidates.end(); iter++) - if (matches_glob(glob, *iter)) - exps.push_back(*iter); - - return exps; -} - -} // namespace expand -} // namespace atf - -#endif // !defined(_ATF_CXX_EXPAND_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/parser.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/parser.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/parser.hpp (nonexistent) @@ -1,607 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_PARSER_HPP_) -#define _ATF_CXX_PARSER_HPP_ - -#include -#include -#include -#include -#include -#include -#include - -namespace atf { -namespace parser { - -// ------------------------------------------------------------------------ -// The "parse_error" class. -// ------------------------------------------------------------------------ - -class parse_error : public std::runtime_error, - public std::pair< size_t, std::string > { - mutable std::string m_msg; - -public: - parse_error(size_t, std::string); - ~parse_error(void) throw(); - - const char* what(void) const throw(); - - operator std::string(void) const; -}; - -// ------------------------------------------------------------------------ -// The "parse_errors" class. -// ------------------------------------------------------------------------ - -class parse_errors : public std::runtime_error, - public std::vector< parse_error > { - std::vector< parse_error > m_errors; - mutable std::string m_msg; - -public: - parse_errors(void); - ~parse_errors(void) throw(); - - const char* what(void) const throw(); -}; - -// ------------------------------------------------------------------------ -// The "format_error" class. -// ------------------------------------------------------------------------ - -class format_error : public std::runtime_error { -public: - format_error(const std::string&); -}; - -// ------------------------------------------------------------------------ -// The "token" class. -// ------------------------------------------------------------------------ - -typedef int token_type; - -//! -//! \brief Representation of a read token. -//! -//! A pair that contains the information of a token read from a stream. -//! It contains the token's type and its associated data, if any. -//! -struct token { - bool m_inited; - size_t m_line; - token_type m_type; - std::string m_text; - -public: - token(void); - token(size_t, const token_type&, const std::string& = ""); - - size_t lineno(void) const; - const token_type& type(void) const; - const std::string& text(void) const; - - operator bool(void) const; - bool operator!(void) const; -}; - -// ------------------------------------------------------------------------ -// The "tokenizer" class. -// ------------------------------------------------------------------------ - -//! -//! \brief A stream tokenizer. -//! -//! This template implements an extremely simple, line-oriented stream -//! tokenizer. It is only able to recognize one character-long delimiters, -//! random-length keywords, skip whitespace and, anything that does not -//! match these rules is supposed to be a word. -//! -//! Parameter IS: The input stream's type. -//! -template< class IS > -class tokenizer { - IS& m_is; - size_t m_lineno; - token m_la; - - bool m_skipws; - token_type m_eof_type, m_nl_type, m_text_type; - - std::map< char, token_type > m_delims_map; - std::string m_delims_str; - - char m_quotech; - token_type m_quotetype; - - std::map< std::string, token_type > m_keywords_map; - - token_type alloc_type(void); - - template< class TKZ > - friend - class parser; - -public: - tokenizer(IS&, bool, const token_type&, const token_type&, - const token_type&, size_t = 1); - - size_t lineno(void) const; - - void add_delim(char, const token_type&); - void add_keyword(const std::string&, const token_type&); - void add_quote(char, const token_type&); - - token next(void); - std::string rest_of_line(void); -}; - -template< class IS > -tokenizer< IS >::tokenizer(IS& p_is, - bool p_skipws, - const token_type& p_eof_type, - const token_type& p_nl_type, - const token_type& p_text_type, - size_t p_lineno) : - m_is(p_is), - m_lineno(p_lineno), - m_skipws(p_skipws), - m_eof_type(p_eof_type), - m_nl_type(p_nl_type), - m_text_type(p_text_type), - m_quotech(-1) -{ -} - -template< class IS > -size_t -tokenizer< IS >::lineno(void) - const -{ - return m_lineno; -} - -template< class IS > -void -tokenizer< IS >::add_delim(char delim, const token_type& type) -{ - m_delims_map[delim] = type; - m_delims_str += delim; -} - -template< class IS > -void -tokenizer< IS >::add_keyword(const std::string& keyword, - const token_type& type) -{ - m_keywords_map[keyword] = type; -} - -template< class IS > -void -tokenizer< IS >::add_quote(char ch, const token_type& type) -{ - m_quotech = ch; - m_quotetype = type; -} - -template< class IS > -token -tokenizer< IS >::next(void) -{ - if (m_la) { - token t = m_la; - m_la = token(); - if (t.type() == m_nl_type) - m_lineno++; - return t; - } - - char ch; - std::string text; - - bool done = false, quoted = false; - token t(m_lineno, m_eof_type, "<>"); - while (!done && m_is.get(ch).good()) { - if (ch == m_quotech) { - if (text.empty()) { - bool escaped = false; - while (!done && m_is.get(ch).good()) { - if (!escaped) { - if (ch == '\\') - escaped = true; - else if (ch == '\n') { - m_la = token(m_lineno, m_nl_type, "<>"); - throw parse_error(t.lineno(), - "Missing double quotes before " - "end of line"); - } else if (ch == m_quotech) - done = true; - else - text += ch; - } else { - text += ch; - escaped = false; - } - } - if (!m_is.good()) - throw parse_error(t.lineno(), - "Missing double quotes before " - "end of file"); - t = token(m_lineno, m_text_type, text); - quoted = true; - } else { - m_is.unget(); - done = true; - } - } else { - typename std::map< char, token_type >::const_iterator idelim; - idelim = m_delims_map.find(ch); - if (idelim != m_delims_map.end()) { - done = true; - if (text.empty()) - t = token(m_lineno, (*idelim).second, - std::string("") + ch); - else - m_is.unget(); - } else if (ch == '\n') { - done = true; - if (text.empty()) - t = token(m_lineno, m_nl_type, "<>"); - else - m_is.unget(); - } else if (m_skipws && (ch == ' ' || ch == '\t')) { - if (!text.empty()) - done = true; - } else - text += ch; - } - } - - if (!quoted && !text.empty()) { - typename std::map< std::string, token_type >::const_iterator ikw; - ikw = m_keywords_map.find(text); - if (ikw != m_keywords_map.end()) - t = token(m_lineno, (*ikw).second, text); - else - t = token(m_lineno, m_text_type, text); - } - - if (t.type() == m_nl_type) - m_lineno++; - - return t; -} - -template< class IS > -std::string -tokenizer< IS >::rest_of_line(void) -{ - std::string str; - while (m_is.good() && m_is.peek() != '\n') - str += m_is.get(); - return str; -} - -// ------------------------------------------------------------------------ -// The "parser" class. -// ------------------------------------------------------------------------ - -template< class TKZ > -class parser { - TKZ& m_tkz; - token m_last; - parse_errors m_errors; - bool m_thrown; - -public: - parser(TKZ& tkz); - ~parser(void); - - bool good(void) const; - void add_error(const parse_error&); - bool has_errors(void) const; - - token next(void); - std::string rest_of_line(void); - token reset(const token_type&); - - token - expect(const token_type&, - const std::string&); - - token - expect(const token_type&, - const token_type&, - const std::string&); - - token - expect(const token_type&, - const token_type&, - const token_type&, - const std::string&); - - token - expect(const token_type&, - const token_type&, - const token_type&, - const token_type&, - const std::string&); - - token - expect(const token_type&, - const token_type&, - const token_type&, - const token_type&, - const token_type&, - const token_type&, - const token_type&, - const std::string&); - - token - expect(const token_type&, - const token_type&, - const token_type&, - const token_type&, - const token_type&, - const token_type&, - const token_type&, - const token_type&, - const std::string&); -}; - -template< class TKZ > -parser< TKZ >::parser(TKZ& tkz) : - m_tkz(tkz), - m_thrown(false) -{ -} - -template< class TKZ > -parser< TKZ >::~parser(void) -{ - if (!m_errors.empty() && !m_thrown) - throw m_errors; -} - -template< class TKZ > -bool -parser< TKZ >::good(void) - const -{ - return m_tkz.m_is.good(); -} - -template< class TKZ > -void -parser< TKZ >::add_error(const parse_error& pe) -{ - m_errors.push_back(pe); -} - -template< class TKZ > -bool -parser< TKZ >::has_errors(void) - const -{ - return !m_errors.empty(); -} - -template< class TKZ > -token -parser< TKZ >::next(void) -{ - token t = m_tkz.next(); - - m_last = t; - - if (t.type() == m_tkz.m_eof_type) { - if (!m_errors.empty()) { - m_thrown = true; - throw m_errors; - } - } - - return t; -} - -template< class TKZ > -std::string -parser< TKZ >::rest_of_line(void) -{ - return m_tkz.rest_of_line(); -} - -template< class TKZ > -token -parser< TKZ >::reset(const token_type& stop) -{ - token t = m_last; - - while (t.type() != m_tkz.m_eof_type && t.type() != stop) - t = next(); - - return t; -} - -template< class TKZ > -token -parser< TKZ >::expect(const token_type& t1, - const std::string& textual) -{ - token t = next(); - - if (t.type() != t1) - throw parse_error(t.lineno(), - "Unexpected token `" + t.text() + - "'; expected " + textual); - - return t; -} - -template< class TKZ > -token -parser< TKZ >::expect(const token_type& t1, - const token_type& t2, - const std::string& textual) -{ - token t = next(); - - if (t.type() != t1 && t.type() != t2) - throw parse_error(t.lineno(), - "Unexpected token `" + t.text() + - "'; expected " + textual); - - return t; -} - -template< class TKZ > -token -parser< TKZ >::expect(const token_type& t1, - const token_type& t2, - const token_type& t3, - const std::string& textual) -{ - token t = next(); - - if (t.type() != t1 && t.type() != t2 && t.type() != t3) - throw parse_error(t.lineno(), - "Unexpected token `" + t.text() + - "'; expected " + textual); - - return t; -} - -template< class TKZ > -token -parser< TKZ >::expect(const token_type& t1, - const token_type& t2, - const token_type& t3, - const token_type& t4, - const std::string& textual) -{ - token t = next(); - - if (t.type() != t1 && t.type() != t2 && t.type() != t3 && - t.type() != t4) - throw parse_error(t.lineno(), - "Unexpected token `" + t.text() + - "'; expected " + textual); - - return t; -} - -template< class TKZ > -token -parser< TKZ >::expect(const token_type& t1, - const token_type& t2, - const token_type& t3, - const token_type& t4, - const token_type& t5, - const token_type& t6, - const token_type& t7, - const std::string& textual) -{ - token t = next(); - - if (t.type() != t1 && t.type() != t2 && t.type() != t3 && - t.type() != t4 && t.type() != t5 && t.type() != t6 && - t.type() != t7) - throw parse_error(t.lineno(), - "Unexpected token `" + t.text() + - "'; expected " + textual); - - return t; -} - -template< class TKZ > -token -parser< TKZ >::expect(const token_type& t1, - const token_type& t2, - const token_type& t3, - const token_type& t4, - const token_type& t5, - const token_type& t6, - const token_type& t7, - const token_type& t8, - const std::string& textual) -{ - token t = next(); - - if (t.type() != t1 && t.type() != t2 && t.type() != t3 && - t.type() != t4 && t.type() != t5 && t.type() != t6 && - t.type() != t7 && t.type() != t8) - throw parse_error(t.lineno(), - "Unexpected token `" + t.text() + - "'; expected " + textual); - - return t; -} - -#define ATF_PARSER_CALLBACK(parser, func) \ - do { \ - if (!(parser).has_errors()) \ - func; \ - } while (false) - -// ------------------------------------------------------------------------ -// Header parsing. -// ------------------------------------------------------------------------ - -typedef std::map< std::string, std::string > attrs_map; - -class header_entry { - std::string m_name; - std::string m_value; - attrs_map m_attrs; - -public: - header_entry(void); - header_entry(const std::string&, const std::string&, - attrs_map = attrs_map()); - - const std::string& name(void) const; - const std::string& value(void) const; - const attrs_map& attrs(void) const; - bool has_attr(const std::string&) const; - const std::string& get_attr(const std::string&) const; -}; - -typedef std::map< std::string, header_entry > headers_map; - -std::pair< size_t, headers_map > read_headers(std::istream&, size_t); -void write_headers(const headers_map&, std::ostream&); -void validate_content_type(const headers_map&, const std::string&, int); - -} // namespace parser -} // namespace atf - -#endif // !defined(_ATF_CXX_PARSER_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/parser.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/parser.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/parser.cpp (nonexistent) @@ -1,384 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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 - -#include "parser.hpp" -#include "sanity.hpp" -#include "text.hpp" - -namespace impl = atf::parser; -#define IMPL_NAME "atf::parser" - -// ------------------------------------------------------------------------ -// The "parse_error" class. -// ------------------------------------------------------------------------ - -impl::parse_error::parse_error(size_t line, std::string msg) : - std::runtime_error(msg), - std::pair< size_t, std::string >(line, msg) -{ -} - -impl::parse_error::~parse_error(void) - throw() -{ -} - -const char* -impl::parse_error::what(void) - const throw() -{ - try { - std::ostringstream oss; - oss << "LONELY PARSE ERROR: " << first << ": " << second; - m_msg = oss.str(); - return m_msg.c_str(); - } catch (...) { - return "Could not format message for parsing error."; - } -} - -impl::parse_error::operator std::string(void) - const -{ - return atf::text::to_string(first) + ": " + second; -} - -// ------------------------------------------------------------------------ -// The "parse_errors" class. -// ------------------------------------------------------------------------ - -impl::parse_errors::parse_errors(void) : - std::runtime_error("No parsing errors yet") -{ - m_msg.clear(); -} - -impl::parse_errors::~parse_errors(void) - throw() -{ -} - -const char* -impl::parse_errors::what(void) - const throw() -{ - try { - m_msg = atf::text::join(*this, "\n"); - return m_msg.c_str(); - } catch (...) { - return "Could not format messages for parsing errors."; - } -} - -// ------------------------------------------------------------------------ -// The "format_error" class. -// ------------------------------------------------------------------------ - -impl::format_error::format_error(const std::string& w) : - std::runtime_error(w.c_str()) -{ -} - -// ------------------------------------------------------------------------ -// The "token" class. -// ------------------------------------------------------------------------ - -impl::token::token(void) : - m_inited(false) -{ -} - -impl::token::token(size_t p_line, - const token_type& p_type, - const std::string& p_text) : - m_inited(true), - m_line(p_line), - m_type(p_type), - m_text(p_text) -{ -} - -size_t -impl::token::lineno(void) - const -{ - return m_line; -} - -const impl::token_type& -impl::token::type(void) - const -{ - return m_type; -} - -const std::string& -impl::token::text(void) - const -{ - return m_text; -} - -impl::token::operator bool(void) - const -{ - return m_inited; -} - -bool -impl::token::operator!(void) - const -{ - return !m_inited; -} - -// ------------------------------------------------------------------------ -// The "header_entry" class. -// ------------------------------------------------------------------------ - -impl::header_entry::header_entry(void) -{ -} - -impl::header_entry::header_entry(const std::string& n, const std::string& v, - attrs_map as) : - m_name(n), - m_value(v), - m_attrs(as) -{ -} - -const std::string& -impl::header_entry::name(void) const -{ - return m_name; -} - -const std::string& -impl::header_entry::value(void) const -{ - return m_value; -} - -const impl::attrs_map& -impl::header_entry::attrs(void) const -{ - return m_attrs; -} - -bool -impl::header_entry::has_attr(const std::string& n) const -{ - return m_attrs.find(n) != m_attrs.end(); -} - -const std::string& -impl::header_entry::get_attr(const std::string& n) const -{ - attrs_map::const_iterator iter = m_attrs.find(n); - PRE(iter != m_attrs.end()); - return (*iter).second; -} - -// ------------------------------------------------------------------------ -// The header tokenizer. -// ------------------------------------------------------------------------ - -namespace header { - -static const impl::token_type eof_type = 0; -static const impl::token_type nl_type = 1; -static const impl::token_type text_type = 2; -static const impl::token_type colon_type = 3; -static const impl::token_type semicolon_type = 4; -static const impl::token_type dblquote_type = 5; -static const impl::token_type equal_type = 6; - -class tokenizer : public impl::tokenizer< std::istream > { -public: - tokenizer(std::istream& is, size_t curline) : - impl::tokenizer< std::istream > - (is, true, eof_type, nl_type, text_type, curline) - { - add_delim(';', semicolon_type); - add_delim(':', colon_type); - add_delim('=', equal_type); - add_quote('"', dblquote_type); - } -}; - -static -impl::parser< header::tokenizer >& -read(impl::parser< header::tokenizer >& p, impl::header_entry& he) -{ - using namespace header; - - impl::token t = p.expect(text_type, nl_type, "a header name"); - if (t.type() == nl_type) { - he = impl::header_entry(); - return p; - } - std::string hdr_name = t.text(); - - t = p.expect(colon_type, "`:'"); - - t = p.expect(text_type, "a textual value"); - std::string hdr_value = t.text(); - - impl::attrs_map attrs; - - for (;;) { - t = p.expect(eof_type, semicolon_type, nl_type, - "eof, `;' or new line"); - if (t.type() == eof_type || t.type() == nl_type) - break; - - t = p.expect(text_type, "an attribute name"); - std::string attr_name = t.text(); - - t = p.expect(equal_type, "`='"); - - t = p.expect(text_type, "word or quoted string"); - std::string attr_value = t.text(); - attrs[attr_name] = attr_value; - } - - he = impl::header_entry(hdr_name, hdr_value, attrs); - - return p; -} - -static -std::ostream& -write(std::ostream& os, const impl::header_entry& he) -{ - std::string line = he.name() + ": " + he.value(); - impl::attrs_map as = he.attrs(); - for (impl::attrs_map::const_iterator iter = as.begin(); iter != as.end(); - iter++) { - PRE((*iter).second.find('\"') == std::string::npos); - line += "; " + (*iter).first + "=\"" + (*iter).second + "\""; - } - - os << line << "\n"; - - return os; -} - -} // namespace header - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -std::pair< size_t, impl::headers_map > -impl::read_headers(std::istream& is, size_t curline) -{ - using impl::format_error; - - headers_map hm; - - // - // Grammar - // - // header = entry+ nl - // entry = line nl - // line = text colon text - // (semicolon (text equal (text | dblquote string dblquote)))* - // string = quoted_string - // - - header::tokenizer tkz(is, curline); - impl::parser< header::tokenizer > p(tkz); - - bool first = true; - for (;;) { - try { - header_entry he; - if (!header::read(p, he).good() || he.name().empty()) - break; - - if (first && he.name() != "Content-Type") - throw format_error("Could not determine content type"); - else - first = false; - - hm[he.name()] = he; - } catch (const impl::parse_error& pe) { - p.add_error(pe); - p.reset(header::nl_type); - } - } - - if (!is.good()) - throw format_error("Unexpected end of stream"); - - return std::pair< size_t, headers_map >(tkz.lineno(), hm); -} - -void -impl::write_headers(const impl::headers_map& hm, std::ostream& os) -{ - PRE(!hm.empty()); - headers_map::const_iterator ct = hm.find("Content-Type"); - PRE(ct != hm.end()); - header::write(os, (*ct).second); - for (headers_map::const_iterator iter = hm.begin(); iter != hm.end(); - iter++) { - if ((*iter).first != "Content-Type") - header::write(os, (*iter).second); - } - os << "\n"; -} - -void -impl::validate_content_type(const impl::headers_map& hm, const std::string& fmt, - int version) -{ - using impl::format_error; - - headers_map::const_iterator iter = hm.find("Content-Type"); - if (iter == hm.end()) - throw format_error("Could not determine content type"); - - const header_entry& he = (*iter).second; - if (he.value() != fmt) - throw format_error("Mismatched content type: expected `" + fmt + - "' but got `" + he.value() + "'"); - - if (!he.has_attr("version")) - throw format_error("Could not determine version"); - const std::string& vstr = atf::text::to_string(version); - if (he.get_attr("version") != vstr) - throw format_error("Mismatched version: expected `" + - vstr + "' but got `" + - he.get_attr("version") + "'"); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/test_helpers.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/test_helpers.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/test_helpers.hpp (nonexistent) @@ -1,155 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if defined(TESTS_ATF_ATF_CXX_TEST_HELPERS_H) -# error "Cannot include test_helpers.hpp more than once." -#else -# define TESTS_ATF_ATF_CXX_TEST_HELPERS_H -#endif - -#include -#include -#include -#include - -#include "../macros.hpp" -#include "../tests.hpp" -#include "parser.hpp" -#include "process.hpp" -#include "text.hpp" - -#define HEADER_TC(name, hdrname) \ - ATF_TEST_CASE(name); \ - ATF_TEST_CASE_HEAD(name) \ - { \ - set_md_var("descr", "Tests that the " hdrname " file can be " \ - "included on its own, without any prerequisites"); \ - } \ - ATF_TEST_CASE_BODY(name) \ - { \ - header_check(*this, hdrname); \ - } - -#define BUILD_TC(name, sfile, descr, failmsg) \ - ATF_TEST_CASE(name); \ - ATF_TEST_CASE_HEAD(name) \ - { \ - set_md_var("descr", descr); \ - } \ - ATF_TEST_CASE_BODY(name) \ - { \ - build_check_cxx_o(*this, sfile, failmsg); \ - } - -namespace atf { -namespace tests { -class tc; -} -} - -void header_check(const atf::tests::tc&, const char*); -void build_check_cxx_o(const atf::tests::tc&, const char*, const char*); -atf::fs::path get_process_helpers_path(const atf::tests::tc&); -bool grep_file(const char*, const char*); -bool grep_string(const std::string&, const char*); - -struct run_h_tc_data { - const atf::tests::vars_map& m_config; - - run_h_tc_data(const atf::tests::vars_map& config) : - m_config(config) {} -}; - -template< class TestCase > -void -run_h_tc_child(void* v) -{ - run_h_tc_data* data = static_cast< run_h_tc_data* >(v); - - TestCase tc; - tc.init(data->m_config); - tc.run("result"); - std::exit(EXIT_SUCCESS); -} - -template< class TestCase > -void -run_h_tc(atf::tests::vars_map config = atf::tests::vars_map()) -{ - run_h_tc_data data(config); - atf::process::child c = atf::process::fork( - run_h_tc_child< TestCase >, - atf::process::stream_redirect_path(atf::fs::path("stdout")), - atf::process::stream_redirect_path(atf::fs::path("stderr")), - &data); - const atf::process::status s = c.wait(); - ATF_REQUIRE(s.exited()); -} - -namespace test_helpers_detail { - -typedef std::vector< std::string > string_vector; - -template< class Reader > -std::pair< string_vector, string_vector > -do_read(const char* input) -{ - string_vector errors; - - std::istringstream is(input); - Reader reader(is); - try { - reader.read(); - } catch (const atf::parser::parse_errors& pes) { - for (std::vector< atf::parser::parse_error >::const_iterator iter = - pes.begin(); iter != pes.end(); iter++) - errors.push_back(*iter); - } catch (const atf::parser::parse_error& pe) { - ATF_FAIL("Raised a lonely parse error: " + - atf::text::to_string(pe.first) + ": " + pe.second); - } - - return std::make_pair(reader.m_calls, errors); -} - -void check_equal(const char*[], const string_vector&); - -} // namespace test_helpers_detail - -template< class Reader > -void -do_parser_test(const char* input, const char* exp_calls[], - const char* exp_errors[]) -{ - const std::pair< test_helpers_detail::string_vector, - test_helpers_detail::string_vector > - actual = test_helpers_detail::do_read< Reader >(input); - test_helpers_detail::check_equal(exp_calls, actual.first); - test_helpers_detail::check_equal(exp_errors, actual.second); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/test_helpers.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/test_helpers.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/test_helpers.cpp (nonexistent) @@ -1,156 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -} - -#include -#include -#include -#include - -#include "../check.hpp" -#include "../config.hpp" -#include "../macros.hpp" - -#include "fs.hpp" -#include "process.hpp" -#include "test_helpers.hpp" - -void -build_check_cxx_o_aux(const atf::fs::path& sfile, const char* failmsg) -{ - std::vector< std::string > optargs; - optargs.push_back("-I" + atf::config::get("atf_includedir")); - - if (!atf::check::build_cxx_o(sfile.str(), "test.o", - atf::process::argv_array(optargs))) - ATF_FAIL(failmsg); -} - -void -build_check_cxx_o(const atf::tests::tc& tc, const char* sfile, - const char* failmsg) -{ - const atf::fs::path sfilepath = - atf::fs::path(tc.get_config_var("srcdir")) / sfile; - build_check_cxx_o_aux(sfilepath, failmsg); -} - -void -header_check(const atf::tests::tc& tc, const char *hdrname) -{ - std::ofstream srcfile("test.c"); - ATF_REQUIRE(srcfile); - srcfile << "#include <" << hdrname << ">\n"; - srcfile.close(); - - const std::string failmsg = std::string("Header check failed; ") + - hdrname + " is not self-contained"; - build_check_cxx_o_aux(atf::fs::path("test.c"), failmsg.c_str()); -} - -atf::fs::path -get_process_helpers_path(const atf::tests::tc& tc) -{ - return atf::fs::path(tc.get_config_var("srcdir")) / - ".." / "atf-c" / "detail" / "process_helpers"; -} - -bool -grep_file(const char* name, const char* regex) -{ - std::ifstream is(name); - ATF_REQUIRE(is); - - bool found = false; - - std::string line; - std::getline(is, line); - while (!found && is.good()) { - if (grep_string(line, regex)) - found = true; - else - std::getline(is, line); - } - - return found; -} - -bool -grep_string(const std::string& str, const char* regex) -{ - int res; - regex_t preg; - - std::cout << "Looking for '" << regex << "' in '" << str << "'\n"; - ATF_REQUIRE(::regcomp(&preg, regex, REG_EXTENDED) == 0); - - res = ::regexec(&preg, str.c_str(), 0, NULL, 0); - ATF_REQUIRE(res == 0 || res == REG_NOMATCH); - - ::regfree(&preg); - - return res == 0; -} - -void -test_helpers_detail::check_equal(const char* expected[], - const string_vector& actual) -{ - const char** expected_iter = expected; - string_vector::const_iterator actual_iter = actual.begin(); - - bool equals = true; - while (equals && *expected_iter != NULL && actual_iter != actual.end()) { - if (*expected_iter != *actual_iter) { - equals = false; - } else { - expected_iter++; - actual_iter++; - } - } - if (equals && ((*expected_iter == NULL && actual_iter != actual.end()) || - (*expected_iter != NULL && actual_iter == actual.end()))) - equals = false; - - if (!equals) { - std::cerr << "EXPECTED:\n"; - for (expected_iter = expected; *expected_iter != NULL; expected_iter++) - std::cerr << *expected_iter << "\n"; - - std::cerr << "ACTUAL:\n"; - for (actual_iter = actual.begin(); actual_iter != actual.end(); - actual_iter++) - std::cerr << *actual_iter << "\n"; - - ATF_FAIL("Expected results differ to actual values"); - } -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/sanity.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/sanity.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/sanity.hpp (nonexistent) @@ -1,37 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_SANITY_HPP_) -#define _ATF_CXX_SANITY_HPP_ - -extern "C" { -#include "../../atf-c/detail/sanity.h" -} - -#endif // !defined(_ATF_CXX_SANITY_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/application.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/application.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/application.cpp (nonexistent) @@ -1,340 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010, 2011 The NetBSD Foundation, Inc. -// 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 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. -// - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -extern "C" { -#include -} - -#include -#include -#include -#include -#include - -#include "application.hpp" -#include "sanity.hpp" -#include "ui.hpp" - -#if !defined(HAVE_VSNPRINTF_IN_STD) -namespace std { -using ::vsnprintf; -} -#endif // !defined(HAVE_VSNPRINTF_IN_STD) - -namespace impl = atf::application; -#define IMPL_NAME "atf::application" - -// ------------------------------------------------------------------------ -// The "usage_error" class. -// ------------------------------------------------------------------------ - -impl::usage_error::usage_error(const char *fmt, ...) - throw() : - std::runtime_error("usage_error; message unformatted") -{ - va_list ap; - - va_start(ap, fmt); - std::vsnprintf(m_text, sizeof(m_text), fmt, ap); - va_end(ap); -} - -impl::usage_error::~usage_error(void) - throw() -{ -} - -const char* -impl::usage_error::what(void) - const throw() -{ - return m_text; -} - -// ------------------------------------------------------------------------ -// The "application" class. -// ------------------------------------------------------------------------ - -impl::option::option(char ch, - const std::string& a, - const std::string& desc) : - m_character(ch), - m_argument(a), - m_description(desc) -{ -} - -bool -impl::option::operator<(const impl::option& o) - const -{ - return m_character < o.m_character; -} - -impl::app::app(const std::string& description, - const std::string& manpage, - const std::string& global_manpage, - const bool use_ui) : - m_hflag(false), - m_argc(-1), - m_argv(NULL), - m_prog_name(NULL), - m_description(description), - m_manpage(manpage), - m_global_manpage(global_manpage), - m_use_ui(use_ui) -{ -} - -impl::app::~app(void) -{ -} - -bool -impl::app::inited(void) -{ - return m_argc != -1; -} - -impl::app::options_set -impl::app::options(void) -{ - options_set opts = specific_options(); - if (m_use_ui) { - opts.insert(option('h', "", "Shows this help message")); - } - return opts; -} - -std::string -impl::app::specific_args(void) - const -{ - return ""; -} - -impl::app::options_set -impl::app::specific_options(void) - const -{ - return options_set(); -} - -void -impl::app::process_option(int ch, const char* arg) -{ -} - -void -impl::app::process_options(void) -{ - PRE(inited()); - - std::string optstr; -#if defined(HAVE_GNU_GETOPT) - optstr += '+'; // Turn on POSIX behavior. -#endif - optstr += ':'; - { - options_set opts = options(); - for (options_set::const_iterator iter = opts.begin(); - iter != opts.end(); iter++) { - const option& opt = (*iter); - - optstr += opt.m_character; - if (!opt.m_argument.empty()) - optstr += ':'; - } - } - - int ch; - const int old_opterr = ::opterr; - ::opterr = 0; - while ((ch = ::getopt(m_argc, m_argv, optstr.c_str())) != -1) { - switch (ch) { - case 'h': - INV(m_use_ui); - m_hflag = true; - break; - - case ':': - throw usage_error("Option -%c requires an argument.", - ::optopt); - - case '?': - throw usage_error("Unknown option -%c.", ::optopt); - - default: - process_option(ch, ::optarg); - } - } - m_argc -= ::optind; - m_argv += ::optind; - - // Clear getopt state just in case the test wants to use it. - opterr = old_opterr; - optind = 1; -#if defined(HAVE_OPTRESET) - optreset = 1; -#endif -} - -void -impl::app::usage(std::ostream& os) -{ - PRE(inited()); - - std::string args = specific_args(); - if (!args.empty()) - args = " " + args; - os << ui::format_text_with_tag(std::string(m_prog_name) + " [options]" + - args, "Usage: ", false) << "\n\n" - << ui::format_text(m_description) << "\n\n"; - - options_set opts = options(); - INV(!opts.empty()); - os << "Available options:\n"; - size_t coldesc = 0; - for (options_set::const_iterator iter = opts.begin(); - iter != opts.end(); iter++) { - const option& opt = (*iter); - - if (opt.m_argument.length() + 1 > coldesc) - coldesc = opt.m_argument.length() + 1; - } - for (options_set::const_iterator iter = opts.begin(); - iter != opts.end(); iter++) { - const option& opt = (*iter); - - std::string tag = std::string(" -") + opt.m_character; - if (opt.m_argument.empty()) - tag += " "; - else - tag += " " + opt.m_argument + " "; - os << ui::format_text_with_tag(opt.m_description, tag, false, - coldesc + 10) << "\n"; - } - os << "\n"; - - std::string gmp; - if (!m_global_manpage.empty()) - gmp = " and " + m_global_manpage; - os << ui::format_text("For more details please see " + m_manpage + - gmp + ".") - << "\n"; -} - -int -impl::app::run(int argc, char* const* argv) -{ - PRE(argc > 0); - PRE(argv != NULL); - - m_argc = argc; - m_argv = argv; - - m_argv0 = m_argv[0]; - - m_prog_name = std::strrchr(m_argv[0], '/'); - if (m_prog_name == NULL) - m_prog_name = m_argv[0]; - else - m_prog_name++; - - // Libtool workaround: if running from within the source tree (binaries - // that are not installed yet), skip the "lt-" prefix added to files in - // the ".libs" directory to show the real (not temporary) name. - if (std::strncmp(m_prog_name, "lt-", 3) == 0) - m_prog_name += 3; - - const std::string bug = - std::string("This is probably a bug in ") + m_prog_name + - " or one of the libraries it uses. Please report this problem to " - PACKAGE_BUGREPORT " and provide as many details as possible " - "describing how you got to this condition."; - - int errcode; - try { - int oldargc = m_argc; - - process_options(); - - if (m_hflag) { - INV(m_use_ui); - if (oldargc != 2) - throw usage_error("-h must be given alone."); - - usage(std::cout); - errcode = EXIT_SUCCESS; - } else - errcode = main(); - } catch (const usage_error& e) { - if (m_use_ui) { - std::cerr << ui::format_error(m_prog_name, e.what()) << "\n" - << ui::format_info(m_prog_name, std::string("Type `") + - m_prog_name + " -h' for more details.") - << "\n"; - } else { - std::cerr << m_prog_name << ": ERROR: " << e.what() << "\n"; - std::cerr << m_prog_name << ": See " << m_manpage << " for usage " - "details.\n"; - } - errcode = EXIT_FAILURE; - } catch (const std::runtime_error& e) { - if (m_use_ui) { - std::cerr << ui::format_error(m_prog_name, std::string(e.what())) - << "\n"; - } else { - std::cerr << m_prog_name << ": ERROR: " << e.what() << "\n"; - } - errcode = EXIT_FAILURE; - } catch (const std::exception& e) { - if (m_use_ui) { - std::cerr << ui::format_error(m_prog_name, std::string("Caught " - "unexpected error: ") + e.what() + "\n" + bug) << "\n"; - } else { - std::cerr << m_prog_name << ": ERROR: Caught unexpected error: " - << e.what() << "\n"; - } - errcode = EXIT_FAILURE; - } catch (...) { - if (m_use_ui) { - std::cerr << ui::format_error(m_prog_name, std::string("Caught " - "unknown error\n") + bug) << "\n"; - } else { - std::cerr << m_prog_name << ": ERROR: Caught unknown error\n"; - } - errcode = EXIT_FAILURE; - } - return errcode; -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/text_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/text_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/text_test.cpp (nonexistent) @@ -1,365 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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 -#include -#include - -#include "../macros.hpp" - -#include "text.hpp" - -// ------------------------------------------------------------------------ -// Test cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(duplicate); -ATF_TEST_CASE_HEAD(duplicate) -{ - set_md_var("descr", "Tests the duplicate function"); -} -ATF_TEST_CASE_BODY(duplicate) -{ - using atf::text::duplicate; - - const char* orig = "foo"; - - char* copy = duplicate(orig); - ATF_REQUIRE_EQ(std::strlen(copy), 3); - ATF_REQUIRE(std::strcmp(copy, "foo") == 0); - - std::strcpy(copy, "bar"); - ATF_REQUIRE(std::strcmp(copy, "bar") == 0); - ATF_REQUIRE(std::strcmp(orig, "foo") == 0); -} - -ATF_TEST_CASE(join); -ATF_TEST_CASE_HEAD(join) -{ - set_md_var("descr", "Tests the join function"); -} -ATF_TEST_CASE_BODY(join) -{ - using atf::text::join; - - // First set of tests using a non-sorted collection, std::vector. - { - std::vector< std::string > words; - std::string str; - - words.clear(); - str = join(words, ","); - ATF_REQUIRE_EQ(str, ""); - - words.clear(); - words.push_back(""); - str = join(words, ","); - ATF_REQUIRE_EQ(str, ""); - - words.clear(); - words.push_back(""); - words.push_back(""); - str = join(words, ","); - ATF_REQUIRE_EQ(str, ","); - - words.clear(); - words.push_back("foo"); - words.push_back(""); - words.push_back("baz"); - str = join(words, ","); - ATF_REQUIRE_EQ(str, "foo,,baz"); - - words.clear(); - words.push_back("foo"); - words.push_back("bar"); - words.push_back("baz"); - str = join(words, ","); - ATF_REQUIRE_EQ(str, "foo,bar,baz"); - } - - // Second set of tests using a sorted collection, std::set. - { - std::set< std::string > words; - std::string str; - - words.clear(); - str = join(words, ","); - ATF_REQUIRE_EQ(str, ""); - - words.clear(); - words.insert(""); - str = join(words, ","); - ATF_REQUIRE_EQ(str, ""); - - words.clear(); - words.insert("foo"); - words.insert(""); - words.insert("baz"); - str = join(words, ","); - ATF_REQUIRE_EQ(str, ",baz,foo"); - - words.clear(); - words.insert("foo"); - words.insert("bar"); - words.insert("baz"); - str = join(words, ","); - ATF_REQUIRE_EQ(str, "bar,baz,foo"); - } -} - -ATF_TEST_CASE(match); -ATF_TEST_CASE_HEAD(match) -{ - set_md_var("descr", "Tests the match function"); -} -ATF_TEST_CASE_BODY(match) -{ - using atf::text::match; - - ATF_REQUIRE_THROW(std::runtime_error, match("", "[")); - - ATF_REQUIRE(match("", "")); - ATF_REQUIRE(!match("foo", "")); - - ATF_REQUIRE(match("", ".*")); - ATF_REQUIRE(match("", "[a-z]*")); - - ATF_REQUIRE(match("hello", "hello")); - ATF_REQUIRE(match("hello", "[a-z]+")); - ATF_REQUIRE(match("hello", "^[a-z]+$")); - - ATF_REQUIRE(!match("hello", "helooo")); - ATF_REQUIRE(!match("hello", "[a-z]+5")); - ATF_REQUIRE(!match("hello", "^ [a-z]+$")); -} - -ATF_TEST_CASE(split); -ATF_TEST_CASE_HEAD(split) -{ - set_md_var("descr", "Tests the split function"); -} -ATF_TEST_CASE_BODY(split) -{ - using atf::text::split; - - std::vector< std::string > words; - - words = split("", " "); - ATF_REQUIRE_EQ(words.size(), 0); - - words = split(" ", " "); - ATF_REQUIRE_EQ(words.size(), 0); - - words = split(" ", " "); - ATF_REQUIRE_EQ(words.size(), 0); - - words = split("a b", " "); - ATF_REQUIRE_EQ(words.size(), 2); - ATF_REQUIRE_EQ(words[0], "a"); - ATF_REQUIRE_EQ(words[1], "b"); - - words = split("a b c d", " "); - ATF_REQUIRE_EQ(words.size(), 4); - ATF_REQUIRE_EQ(words[0], "a"); - ATF_REQUIRE_EQ(words[1], "b"); - ATF_REQUIRE_EQ(words[2], "c"); - ATF_REQUIRE_EQ(words[3], "d"); - - words = split("foo bar", " "); - ATF_REQUIRE_EQ(words.size(), 2); - ATF_REQUIRE_EQ(words[0], "foo"); - ATF_REQUIRE_EQ(words[1], "bar"); - - words = split("foo bar baz foobar", " "); - ATF_REQUIRE_EQ(words.size(), 4); - ATF_REQUIRE_EQ(words[0], "foo"); - ATF_REQUIRE_EQ(words[1], "bar"); - ATF_REQUIRE_EQ(words[2], "baz"); - ATF_REQUIRE_EQ(words[3], "foobar"); - - words = split(" foo bar", " "); - ATF_REQUIRE_EQ(words.size(), 2); - ATF_REQUIRE_EQ(words[0], "foo"); - ATF_REQUIRE_EQ(words[1], "bar"); - - words = split("foo bar", " "); - ATF_REQUIRE_EQ(words.size(), 2); - ATF_REQUIRE_EQ(words[0], "foo"); - ATF_REQUIRE_EQ(words[1], "bar"); - - words = split("foo bar ", " "); - ATF_REQUIRE_EQ(words.size(), 2); - ATF_REQUIRE_EQ(words[0], "foo"); - ATF_REQUIRE_EQ(words[1], "bar"); - - words = split(" foo bar ", " "); - ATF_REQUIRE_EQ(words.size(), 2); - ATF_REQUIRE_EQ(words[0], "foo"); - ATF_REQUIRE_EQ(words[1], "bar"); -} - -ATF_TEST_CASE(split_delims); -ATF_TEST_CASE_HEAD(split_delims) -{ - set_md_var("descr", "Tests the split function using different delimiters"); -} -ATF_TEST_CASE_BODY(split_delims) -{ - using atf::text::split; - - std::vector< std::string > words; - - words = split("", "/"); - ATF_REQUIRE_EQ(words.size(), 0); - - words = split(" ", "/"); - ATF_REQUIRE_EQ(words.size(), 1); - ATF_REQUIRE_EQ(words[0], " "); - - words = split(" ", "/"); - ATF_REQUIRE_EQ(words.size(), 1); - ATF_REQUIRE_EQ(words[0], " "); - - words = split("a/b", "/"); - ATF_REQUIRE_EQ(words.size(), 2); - ATF_REQUIRE_EQ(words[0], "a"); - ATF_REQUIRE_EQ(words[1], "b"); - - words = split("aLONGDELIMbcdLONGDELIMef", "LONGDELIM"); - ATF_REQUIRE_EQ(words.size(), 3); - ATF_REQUIRE_EQ(words[0], "a"); - ATF_REQUIRE_EQ(words[1], "bcd"); - ATF_REQUIRE_EQ(words[2], "ef"); -} - -ATF_TEST_CASE(trim); -ATF_TEST_CASE_HEAD(trim) -{ - set_md_var("descr", "Tests the trim function"); -} -ATF_TEST_CASE_BODY(trim) -{ - using atf::text::trim; - - ATF_REQUIRE_EQ(trim(""), ""); - ATF_REQUIRE_EQ(trim(" "), ""); - ATF_REQUIRE_EQ(trim("\t"), ""); - - ATF_REQUIRE_EQ(trim(" foo"), "foo"); - ATF_REQUIRE_EQ(trim("\t foo"), "foo"); - ATF_REQUIRE_EQ(trim(" \tfoo"), "foo"); - ATF_REQUIRE_EQ(trim("foo\t "), "foo"); - ATF_REQUIRE_EQ(trim("foo \t"), "foo"); - - ATF_REQUIRE_EQ(trim("foo bar"), "foo bar"); - ATF_REQUIRE_EQ(trim("\t foo bar"), "foo bar"); - ATF_REQUIRE_EQ(trim(" \tfoo bar"), "foo bar"); - ATF_REQUIRE_EQ(trim("foo bar\t "), "foo bar"); - ATF_REQUIRE_EQ(trim("foo bar \t"), "foo bar"); -} - -ATF_TEST_CASE(to_bool); -ATF_TEST_CASE_HEAD(to_bool) -{ - set_md_var("descr", "Tests the to_string function"); -} -ATF_TEST_CASE_BODY(to_bool) -{ - using atf::text::to_bool; - - ATF_REQUIRE(to_bool("true")); - ATF_REQUIRE(to_bool("TRUE")); - ATF_REQUIRE(to_bool("yes")); - ATF_REQUIRE(to_bool("YES")); - - ATF_REQUIRE(!to_bool("false")); - ATF_REQUIRE(!to_bool("FALSE")); - ATF_REQUIRE(!to_bool("no")); - ATF_REQUIRE(!to_bool("NO")); - - ATF_REQUIRE_THROW(std::runtime_error, to_bool("")); - ATF_REQUIRE_THROW(std::runtime_error, to_bool("tru")); - ATF_REQUIRE_THROW(std::runtime_error, to_bool("true2")); - ATF_REQUIRE_THROW(std::runtime_error, to_bool("fals")); - ATF_REQUIRE_THROW(std::runtime_error, to_bool("false2")); -} - -ATF_TEST_CASE(to_string); -ATF_TEST_CASE_HEAD(to_string) -{ - set_md_var("descr", "Tests the to_string function"); -} -ATF_TEST_CASE_BODY(to_string) -{ - using atf::text::to_string; - - ATF_REQUIRE_EQ(to_string('a'), "a"); - ATF_REQUIRE_EQ(to_string("a"), "a"); - ATF_REQUIRE_EQ(to_string(5), "5"); -} - -ATF_TEST_CASE(to_type); -ATF_TEST_CASE_HEAD(to_type) -{ - set_md_var("descr", "Tests the to_type function"); -} -ATF_TEST_CASE_BODY(to_type) -{ - using atf::text::to_type; - - ATF_REQUIRE_EQ(to_type< int >("0"), 0); - ATF_REQUIRE_EQ(to_type< int >("1234"), 1234); - ATF_REQUIRE_THROW(std::runtime_error, to_type< int >("0 a")); - ATF_REQUIRE_THROW(std::runtime_error, to_type< int >("a")); - - ATF_REQUIRE_EQ(to_type< float >("0.5"), 0.5); - ATF_REQUIRE_EQ(to_type< float >("1234.5"), 1234.5); - ATF_REQUIRE_THROW(std::runtime_error, to_type< float >("0.5 a")); - ATF_REQUIRE_THROW(std::runtime_error, to_type< float >("a")); - - ATF_REQUIRE_EQ(to_type< std::string >("a"), "a"); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test cases for the free functions. - ATF_ADD_TEST_CASE(tcs, duplicate); - ATF_ADD_TEST_CASE(tcs, join); - ATF_ADD_TEST_CASE(tcs, match); - ATF_ADD_TEST_CASE(tcs, split); - ATF_ADD_TEST_CASE(tcs, split_delims); - ATF_ADD_TEST_CASE(tcs, trim); - ATF_ADD_TEST_CASE(tcs, to_bool); - ATF_ADD_TEST_CASE(tcs, to_string); - ATF_ADD_TEST_CASE(tcs, to_type); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/text.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/text.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/text.hpp (nonexistent) @@ -1,144 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_TEXT_HPP_) -#define _ATF_CXX_TEXT_HPP_ - -#include -#include -#include -#include - -namespace atf { -namespace text { - -//! -//! \brief Duplicates a C string using the new[] allocator. -//! -//! Replaces the functionality of strdup by using the new[] allocator and -//! thus allowing the resulting memory to be managed by utils::auto_array. -//! -char* duplicate(const char*); - -//! -//! \brief Joins multiple words into a string. -//! -//! Joins a list of words into a string, separating them using the provided -//! separator. Empty words are not omitted. -//! -template< class T > -std::string -join(const T& words, const std::string& separator) -{ - std::string str; - - typename T::const_iterator iter = words.begin(); - bool done = iter == words.end(); - while (!done) { - str += *iter; - iter++; - if (iter != words.end()) - str += separator; - else - done = true; - } - - return str; -} - -//! -//! \brief Checks if the string matches a regular expression. -//! -bool match(const std::string&, const std::string&); - -//! -//! \brief Splits a string into words. -//! -//! Splits the given string into multiple words, all separated by the -//! given delimiter. Multiple occurrences of the same delimiter are -//! not condensed so that rejoining the words later on using the same -//! delimiter results in the original string. -//! -std::vector< std::string > split(const std::string&, const std::string&); - -//! -//! \brief Removes whitespace from the beginning and end of a string. -//! -std::string trim(const std::string&); - -//! -//! \brief Converts a string to a boolean value. -//! -bool to_bool(const std::string&); - -//! -//! \brief Changes the case of a string to lowercase. -//! -//! Returns a new string that is a lowercased version of the original -//! one. -//! -std::string to_lower(const std::string&); - -//! -//! \brief Converts the given object to a string. -//! -//! Returns a string with the representation of the given object. There -//! must exist an operator<< method for that object. -//! -template< class T > -std::string -to_string(const T& ob) -{ - std::ostringstream ss; - ss << ob; - return ss.str(); -} - -//! -//! \brief Converts the given string to another type. -//! -//! Attempts to convert the given string to the requested type. Throws -//! an exception if the conversion failed. -//! -template< class T > -T -to_type(const std::string& str) -{ - std::istringstream ss(str); - T value; - ss >> value; - if (!ss.eof() || (!ss.eof() && !ss.good())) - throw std::runtime_error("Cannot convert string to requested type"); - return value; -} - -} // namespace text -} // namespace atf - -#endif // !defined(_ATF_CXX_TEXT_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/text.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/text.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/text.cpp (nonexistent) @@ -1,135 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -} - -#include -#include - -extern "C" { -#include "../../atf-c/error.h" - -#include "../../atf-c/detail/text.h" -} - -#include "exceptions.hpp" -#include "text.hpp" - -namespace impl = atf::text; -#define IMPL_NAME "atf::text" - -char* -impl::duplicate(const char* str) -{ - char* copy = new char[std::strlen(str) + 1]; - std::strcpy(copy, str); - return copy; -} - -bool -impl::match(const std::string& str, const std::string& regex) -{ - bool found; - - // Special case: regcomp does not like empty regular expressions. - if (regex.empty()) { - found = str.empty(); - } else { - ::regex_t preg; - - if (::regcomp(&preg, regex.c_str(), REG_EXTENDED) != 0) - throw std::runtime_error("Invalid regular expression '" + regex + - "'"); - - const int res = ::regexec(&preg, str.c_str(), 0, NULL, 0); - regfree(&preg); - if (res != 0 && res != REG_NOMATCH) - throw std::runtime_error("Invalid regular expression " + regex); - - found = res == 0; - } - - return found; -} - -std::string -impl::to_lower(const std::string& str) -{ - std::string lc; - for (std::string::const_iterator iter = str.begin(); iter != str.end(); - iter++) - lc += std::tolower(*iter); - return lc; -} - -std::vector< std::string > -impl::split(const std::string& str, const std::string& delim) -{ - std::vector< std::string > words; - - std::string::size_type pos = 0, newpos = 0; - while (pos < str.length() && newpos != std::string::npos) { - newpos = str.find(delim, pos); - if (newpos != pos) - words.push_back(str.substr(pos, newpos - pos)); - pos = newpos + delim.length(); - } - - return words; -} - -std::string -impl::trim(const std::string& str) -{ - std::string::size_type pos1 = str.find_first_not_of(" \t"); - std::string::size_type pos2 = str.find_last_not_of(" \t"); - - if (pos1 == std::string::npos && pos2 == std::string::npos) - return ""; - else if (pos1 == std::string::npos) - return str.substr(0, str.length() - pos2); - else if (pos2 == std::string::npos) - return str.substr(pos1); - else - return str.substr(pos1, pos2 - pos1 + 1); -} - -bool -impl::to_bool(const std::string& str) -{ - bool b; - - atf_error_t err = atf_text_to_bool(str.c_str(), &b); - if (atf_is_error(err)) - throw_atf_error(err); - - return b; -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/process_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/process_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/process_test.cpp (nonexistent) @@ -1,357 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. -// 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 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 -#include - -#include "../macros.hpp" - -#include "process.hpp" -#include "test_helpers.hpp" - -// TODO: Testing the fork function is a huge task and I'm afraid of -// copy/pasting tons of stuff from the C version. I'd rather not do that -// until some code can be shared, which cannot happen until the C++ binding -// is cleaned by a fair amount. Instead... just rely (at the moment) on -// the system tests for the tools using this module. - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static -std::size_t -array_size(const char* const* array) -{ - std::size_t size = 0; - - for (const char* const* ptr = array; *ptr != NULL; ptr++) - size++; - - return size; -} - -static -atf::process::status -exec_process_helpers(const atf::tests::tc& tc, const char* helper_name) -{ - using atf::process::exec; - - std::vector< std::string > argv; - argv.push_back(get_process_helpers_path(tc).leaf_name()); - argv.push_back(helper_name); - - return exec(get_process_helpers_path(tc), - atf::process::argv_array(argv), - atf::process::stream_inherit(), - atf::process::stream_inherit()); -} - -// ------------------------------------------------------------------------ -// Tests for the "argv_array" type. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(argv_array_init_carray); -ATF_TEST_CASE_HEAD(argv_array_init_carray) -{ - set_md_var("descr", "Tests that argv_array is correctly constructed " - "from a C-style array of strings"); -} -ATF_TEST_CASE_BODY(argv_array_init_carray) -{ - { - const char* const carray[] = { NULL }; - atf::process::argv_array argv(carray); - - ATF_REQUIRE_EQ(argv.size(), 0); - } - - { - const char* const carray[] = { "arg0", NULL }; - atf::process::argv_array argv(carray); - - ATF_REQUIRE_EQ(argv.size(), 1); - ATF_REQUIRE(std::strcmp(argv[0], carray[0]) == 0); - } - - { - const char* const carray[] = { "arg0", "arg1", "arg2", NULL }; - atf::process::argv_array argv(carray); - - ATF_REQUIRE_EQ(argv.size(), 3); - ATF_REQUIRE(std::strcmp(argv[0], carray[0]) == 0); - ATF_REQUIRE(std::strcmp(argv[1], carray[1]) == 0); - ATF_REQUIRE(std::strcmp(argv[2], carray[2]) == 0); - } -} - -ATF_TEST_CASE(argv_array_init_col); -ATF_TEST_CASE_HEAD(argv_array_init_col) -{ - set_md_var("descr", "Tests that argv_array is correctly constructed " - "from a string collection"); -} -ATF_TEST_CASE_BODY(argv_array_init_col) -{ - { - std::vector< std::string > col; - atf::process::argv_array argv(col); - - ATF_REQUIRE_EQ(argv.size(), 0); - } - - { - std::vector< std::string > col; - col.push_back("arg0"); - atf::process::argv_array argv(col); - - ATF_REQUIRE_EQ(argv.size(), 1); - ATF_REQUIRE_EQ(argv[0], col[0]); - } - - { - std::vector< std::string > col; - col.push_back("arg0"); - col.push_back("arg1"); - col.push_back("arg2"); - atf::process::argv_array argv(col); - - ATF_REQUIRE_EQ(argv.size(), 3); - ATF_REQUIRE_EQ(argv[0], col[0]); - ATF_REQUIRE_EQ(argv[1], col[1]); - ATF_REQUIRE_EQ(argv[2], col[2]); - } -} - -ATF_TEST_CASE(argv_array_init_empty); -ATF_TEST_CASE_HEAD(argv_array_init_empty) -{ - set_md_var("descr", "Tests that argv_array is correctly constructed " - "by the default constructor"); -} -ATF_TEST_CASE_BODY(argv_array_init_empty) -{ - atf::process::argv_array argv; - - ATF_REQUIRE_EQ(argv.size(), 0); -} - -ATF_TEST_CASE(argv_array_init_varargs); -ATF_TEST_CASE_HEAD(argv_array_init_varargs) -{ - set_md_var("descr", "Tests that argv_array is correctly constructed " - "from a variable list of arguments"); -} -ATF_TEST_CASE_BODY(argv_array_init_varargs) -{ - { - atf::process::argv_array argv("arg0", NULL); - - ATF_REQUIRE_EQ(argv.size(), 1); - ATF_REQUIRE_EQ(argv[0], std::string("arg0")); - } - - { - atf::process::argv_array argv("arg0", "arg1", "arg2", NULL); - - ATF_REQUIRE_EQ(argv.size(), 3); - ATF_REQUIRE_EQ(argv[0], std::string("arg0")); - ATF_REQUIRE_EQ(argv[1], std::string("arg1")); - ATF_REQUIRE_EQ(argv[2], std::string("arg2")); - } -} - -ATF_TEST_CASE(argv_array_assign); -ATF_TEST_CASE_HEAD(argv_array_assign) -{ - set_md_var("descr", "Tests that assigning an argv_array works"); -} -ATF_TEST_CASE_BODY(argv_array_assign) -{ - using atf::process::argv_array; - - const char* const carray1[] = { "arg1", NULL }; - const char* const carray2[] = { "arg1", "arg2", NULL }; - - std::auto_ptr< argv_array > argv1(new argv_array(carray1)); - std::auto_ptr< argv_array > argv2(new argv_array(carray2)); - - *argv2 = *argv1; - ATF_REQUIRE_EQ(argv2->size(), argv1->size()); - ATF_REQUIRE(std::strcmp((*argv2)[0], (*argv1)[0]) == 0); - - ATF_REQUIRE(argv2->exec_argv() != argv1->exec_argv()); - argv1.release(); - { - const char* const* eargv2 = argv2->exec_argv(); - ATF_REQUIRE(std::strcmp(eargv2[0], carray1[0]) == 0); - ATF_REQUIRE_EQ(eargv2[1], static_cast< const char* >(NULL)); - } - - argv2.release(); -} - -ATF_TEST_CASE(argv_array_copy); -ATF_TEST_CASE_HEAD(argv_array_copy) -{ - set_md_var("descr", "Tests that copying an argv_array constructed from " - "a C-style array of strings works"); -} -ATF_TEST_CASE_BODY(argv_array_copy) -{ - using atf::process::argv_array; - - const char* const carray[] = { "arg0", NULL }; - - std::auto_ptr< argv_array > argv1(new argv_array(carray)); - std::auto_ptr< argv_array > argv2(new argv_array(*argv1)); - - ATF_REQUIRE_EQ(argv2->size(), argv1->size()); - ATF_REQUIRE(std::strcmp((*argv2)[0], (*argv1)[0]) == 0); - - ATF_REQUIRE(argv2->exec_argv() != argv1->exec_argv()); - argv1.release(); - { - const char* const* eargv2 = argv2->exec_argv(); - ATF_REQUIRE(std::strcmp(eargv2[0], carray[0]) == 0); - ATF_REQUIRE_EQ(eargv2[1], static_cast< const char* >(NULL)); - } - - argv2.release(); -} - -ATF_TEST_CASE(argv_array_exec_argv); -ATF_TEST_CASE_HEAD(argv_array_exec_argv) -{ - set_md_var("descr", "Tests that the exec argv provided by an argv_array " - "is correct"); -} -ATF_TEST_CASE_BODY(argv_array_exec_argv) -{ - using atf::process::argv_array; - - { - argv_array argv; - const char* const* eargv = argv.exec_argv(); - ATF_REQUIRE_EQ(array_size(eargv), 0); - ATF_REQUIRE_EQ(eargv[0], static_cast< const char* >(NULL)); - } - - { - const char* const carray[] = { "arg0", NULL }; - argv_array argv(carray); - const char* const* eargv = argv.exec_argv(); - ATF_REQUIRE_EQ(array_size(eargv), 1); - ATF_REQUIRE(std::strcmp(eargv[0], "arg0") == 0); - ATF_REQUIRE_EQ(eargv[1], static_cast< const char* >(NULL)); - } - - { - std::vector< std::string > col; - col.push_back("arg0"); - argv_array argv(col); - const char* const* eargv = argv.exec_argv(); - ATF_REQUIRE_EQ(array_size(eargv), 1); - ATF_REQUIRE(std::strcmp(eargv[0], "arg0") == 0); - ATF_REQUIRE_EQ(eargv[1], static_cast< const char* >(NULL)); - } -} - -ATF_TEST_CASE(argv_array_iter); -ATF_TEST_CASE_HEAD(argv_array_iter) -{ - set_md_var("descr", "Tests that an argv_array can be iterated"); -} -ATF_TEST_CASE_BODY(argv_array_iter) -{ - using atf::process::argv_array; - - std::vector< std::string > vector; - vector.push_back("arg0"); - vector.push_back("arg1"); - vector.push_back("arg2"); - - argv_array argv(vector); - ATF_REQUIRE_EQ(argv.size(), 3); - std::vector< std::string >::size_type pos = 0; - for (argv_array::const_iterator iter = argv.begin(); iter != argv.end(); - iter++) { - ATF_REQUIRE_EQ(*iter, vector[pos]); - pos++; - } -} - -// ------------------------------------------------------------------------ -// Tests cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(exec_failure); -ATF_TEST_CASE_HEAD(exec_failure) -{ - set_md_var("descr", "Tests execing a command that reports failure"); -} -ATF_TEST_CASE_BODY(exec_failure) -{ - const atf::process::status s = exec_process_helpers(*this, "exit-failure"); - ATF_REQUIRE(s.exited()); - ATF_REQUIRE_EQ(s.exitstatus(), EXIT_FAILURE); -} - -ATF_TEST_CASE(exec_success); -ATF_TEST_CASE_HEAD(exec_success) -{ - set_md_var("descr", "Tests execing a command that reports success"); -} -ATF_TEST_CASE_BODY(exec_success) -{ - const atf::process::status s = exec_process_helpers(*this, "exit-success"); - ATF_REQUIRE(s.exited()); - ATF_REQUIRE_EQ(s.exitstatus(), EXIT_SUCCESS); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test cases for the "argv_array" type. - ATF_ADD_TEST_CASE(tcs, argv_array_assign); - ATF_ADD_TEST_CASE(tcs, argv_array_copy); - ATF_ADD_TEST_CASE(tcs, argv_array_exec_argv); - ATF_ADD_TEST_CASE(tcs, argv_array_init_carray); - ATF_ADD_TEST_CASE(tcs, argv_array_init_col); - ATF_ADD_TEST_CASE(tcs, argv_array_init_empty); - ATF_ADD_TEST_CASE(tcs, argv_array_init_varargs); - ATF_ADD_TEST_CASE(tcs, argv_array_iter); - - // Add the test cases for the free functions. - ATF_ADD_TEST_CASE(tcs, exec_failure); - ATF_ADD_TEST_CASE(tcs, exec_success); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/application.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/application.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/application.hpp (nonexistent) @@ -1,115 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_APPLICATION_HPP_) -#define _ATF_CXX_APPLICATION_HPP_ - -#include -#include -#include -#include - -namespace atf { -namespace application { - -// ------------------------------------------------------------------------ -// The "usage_error" class. -// ------------------------------------------------------------------------ - -class usage_error : public std::runtime_error { - char m_text[4096]; - -public: - usage_error(const char*, ...) throw(); - ~usage_error(void) throw(); - - const char* what(void) const throw(); -}; - -// ------------------------------------------------------------------------ -// The "option" class. -// ------------------------------------------------------------------------ - -class option { - char m_character; - std::string m_argument; - std::string m_description; - - friend class app; - -public: - option(char, const std::string&, const std::string&); - - bool operator<(const option&) const; -}; - -// ------------------------------------------------------------------------ -// The "app" class. -// ------------------------------------------------------------------------ - -class app { - bool m_hflag; - - void process_options(void); - void usage(std::ostream&); - - bool inited(void); - -protected: - typedef std::set< option > options_set; - - int m_argc; - char* const* m_argv; - - const char* m_argv0; - const char* m_prog_name; - std::string m_description; - std::string m_manpage, m_global_manpage; - const bool m_use_ui; - - options_set options(void); - - // To be redefined. - virtual std::string specific_args(void) const; - virtual options_set specific_options(void) const; - virtual void process_option(int, const char*); - virtual int main(void) = 0; - -public: - app(const std::string&, const std::string&, const std::string&, - bool = true); - virtual ~app(void); - - int run(int, char* const*); -}; - -} // namespace application -} // namespace atf - -#endif // !defined(_ATF_CXX_APPLICATION_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/fs.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/fs.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/fs.cpp (nonexistent) @@ -1,517 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -extern "C" { -#include -#include -#include -#include -#include -#include -#include -#include -} - -#include -#include -#include - -extern "C" { -#include "../../atf-c/error.h" -} - -#include "../utils.hpp" - -#include "exceptions.hpp" -#include "env.hpp" -#include "fs.hpp" -#include "process.hpp" -#include "sanity.hpp" -#include "text.hpp" - -namespace impl = atf::fs; -#define IMPL_NAME "atf::fs" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static bool safe_access(const impl::path&, int, int); - -//! -//! \brief A controlled version of access(2). -//! -//! This function reimplements the standard access(2) system call to -//! safely control its exit status and raise an exception in case of -//! failure. -//! -static -bool -safe_access(const impl::path& p, int mode, int experr) -{ - bool ok; - - atf_error_t err = atf_fs_eaccess(p.c_path(), mode); - if (atf_is_error(err)) { - if (atf_error_is(err, "libc")) { - if (atf_libc_error_code(err) == experr) { - atf_error_free(err); - ok = false; - } else { - atf::throw_atf_error(err); - // XXX Silence warning; maybe throw_atf_error should be - // an exception and not a function. - ok = false; - } - } else { - atf::throw_atf_error(err); - // XXX Silence warning; maybe throw_atf_error should be - // an exception and not a function. - ok = false; - } - } else - ok = true; - - return ok; -} - -// ------------------------------------------------------------------------ -// The "path" class. -// ------------------------------------------------------------------------ - -impl::path::path(const std::string& s) -{ - atf_error_t err = atf_fs_path_init_fmt(&m_path, "%s", s.c_str()); - if (atf_is_error(err)) - throw_atf_error(err); -} - -impl::path::path(const path& p) -{ - atf_error_t err = atf_fs_path_copy(&m_path, &p.m_path); - if (atf_is_error(err)) - throw_atf_error(err); -} - -impl::path::path(const atf_fs_path_t *p) -{ - atf_error_t err = atf_fs_path_copy(&m_path, p); - if (atf_is_error(err)) - throw_atf_error(err); -} - -impl::path::~path(void) -{ - atf_fs_path_fini(&m_path); -} - -const char* -impl::path::c_str(void) - const -{ - return atf_fs_path_cstring(&m_path); -} - -const atf_fs_path_t* -impl::path::c_path(void) - const -{ - return &m_path; -} - -std::string -impl::path::str(void) - const -{ - return c_str(); -} - -bool -impl::path::is_absolute(void) - const -{ - return atf_fs_path_is_absolute(&m_path); -} - -bool -impl::path::is_root(void) - const -{ - return atf_fs_path_is_root(&m_path); -} - -impl::path -impl::path::branch_path(void) - const -{ - atf_fs_path_t bp; - atf_error_t err; - - err = atf_fs_path_branch_path(&m_path, &bp); - if (atf_is_error(err)) - throw_atf_error(err); - - path p(atf_fs_path_cstring(&bp)); - atf_fs_path_fini(&bp); - return p; -} - -std::string -impl::path::leaf_name(void) - const -{ - atf_dynstr_t ln; - atf_error_t err; - - err = atf_fs_path_leaf_name(&m_path, &ln); - if (atf_is_error(err)) - throw_atf_error(err); - - std::string s(atf_dynstr_cstring(&ln)); - atf_dynstr_fini(&ln); - return s; -} - -impl::path -impl::path::to_absolute(void) - const -{ - atf_fs_path_t pa; - - atf_error_t err = atf_fs_path_to_absolute(&m_path, &pa); - if (atf_is_error(err)) - throw_atf_error(err); - - path p(atf_fs_path_cstring(&pa)); - atf_fs_path_fini(&pa); - return p; -} - -impl::path& -impl::path::operator=(const path& p) -{ - atf_fs_path_t tmp; - - atf_error_t err = atf_fs_path_init_fmt(&tmp, "%s", p.c_str()); - if (atf_is_error(err)) - throw_atf_error(err); - else { - atf_fs_path_fini(&m_path); - m_path = tmp; - } - - return *this; -} - -bool -impl::path::operator==(const path& p) - const -{ - return atf_equal_fs_path_fs_path(&m_path, &p.m_path); -} - -bool -impl::path::operator!=(const path& p) - const -{ - return !atf_equal_fs_path_fs_path(&m_path, &p.m_path); -} - -impl::path -impl::path::operator/(const std::string& p) - const -{ - path p2 = *this; - - atf_error_t err = atf_fs_path_append_fmt(&p2.m_path, "%s", p.c_str()); - if (atf_is_error(err)) - throw_atf_error(err); - - return p2; -} - -impl::path -impl::path::operator/(const path& p) - const -{ - path p2 = *this; - - atf_error_t err = atf_fs_path_append_fmt(&p2.m_path, "%s", - atf_fs_path_cstring(&p.m_path)); - if (atf_is_error(err)) - throw_atf_error(err); - - return p2; -} - -bool -impl::path::operator<(const path& p) - const -{ - const char *s1 = atf_fs_path_cstring(&m_path); - const char *s2 = atf_fs_path_cstring(&p.m_path); - return std::strcmp(s1, s2) < 0; -} - -// ------------------------------------------------------------------------ -// The "file_info" class. -// ------------------------------------------------------------------------ - -const int impl::file_info::blk_type = atf_fs_stat_blk_type; -const int impl::file_info::chr_type = atf_fs_stat_chr_type; -const int impl::file_info::dir_type = atf_fs_stat_dir_type; -const int impl::file_info::fifo_type = atf_fs_stat_fifo_type; -const int impl::file_info::lnk_type = atf_fs_stat_lnk_type; -const int impl::file_info::reg_type = atf_fs_stat_reg_type; -const int impl::file_info::sock_type = atf_fs_stat_sock_type; -const int impl::file_info::wht_type = atf_fs_stat_wht_type; - -impl::file_info::file_info(const path& p) -{ - atf_error_t err; - - err = atf_fs_stat_init(&m_stat, p.c_path()); - if (atf_is_error(err)) - throw_atf_error(err); -} - -impl::file_info::file_info(const file_info& fi) -{ - atf_fs_stat_copy(&m_stat, &fi.m_stat); -} - -impl::file_info::~file_info(void) -{ - atf_fs_stat_fini(&m_stat); -} - -dev_t -impl::file_info::get_device(void) - const -{ - return atf_fs_stat_get_device(&m_stat); -} - -ino_t -impl::file_info::get_inode(void) - const -{ - return atf_fs_stat_get_inode(&m_stat); -} - -mode_t -impl::file_info::get_mode(void) - const -{ - return atf_fs_stat_get_mode(&m_stat); -} - -off_t -impl::file_info::get_size(void) - const -{ - return atf_fs_stat_get_size(&m_stat); -} - -int -impl::file_info::get_type(void) - const -{ - return atf_fs_stat_get_type(&m_stat); -} - -bool -impl::file_info::is_owner_readable(void) - const -{ - return atf_fs_stat_is_owner_readable(&m_stat); -} - -bool -impl::file_info::is_owner_writable(void) - const -{ - return atf_fs_stat_is_owner_writable(&m_stat); -} - -bool -impl::file_info::is_owner_executable(void) - const -{ - return atf_fs_stat_is_owner_executable(&m_stat); -} - -bool -impl::file_info::is_group_readable(void) - const -{ - return atf_fs_stat_is_group_readable(&m_stat); -} - -bool -impl::file_info::is_group_writable(void) - const -{ - return atf_fs_stat_is_group_writable(&m_stat); -} - -bool -impl::file_info::is_group_executable(void) - const -{ - return atf_fs_stat_is_group_executable(&m_stat); -} - -bool -impl::file_info::is_other_readable(void) - const -{ - return atf_fs_stat_is_other_readable(&m_stat); -} - -bool -impl::file_info::is_other_writable(void) - const -{ - return atf_fs_stat_is_other_writable(&m_stat); -} - -bool -impl::file_info::is_other_executable(void) - const -{ - return atf_fs_stat_is_other_executable(&m_stat); -} - -// ------------------------------------------------------------------------ -// The "directory" class. -// ------------------------------------------------------------------------ - -impl::directory::directory(const path& p) -{ - DIR* dp = ::opendir(p.c_str()); - if (dp == NULL) - throw system_error(IMPL_NAME "::directory::directory(" + - p.str() + ")", "opendir(3) failed", errno); - - struct dirent* dep; - while ((dep = ::readdir(dp)) != NULL) { - path entryp = p / dep->d_name; - insert(value_type(dep->d_name, file_info(entryp))); - } - - if (::closedir(dp) == -1) - throw system_error(IMPL_NAME "::directory::directory(" + - p.str() + ")", "closedir(3) failed", errno); -} - -std::set< std::string > -impl::directory::names(void) - const -{ - std::set< std::string > ns; - - for (const_iterator iter = begin(); iter != end(); iter++) - ns.insert((*iter).first); - - return ns; -} - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -bool -impl::exists(const path& p) -{ - atf_error_t err; - bool b; - - err = atf_fs_exists(p.c_path(), &b); - if (atf_is_error(err)) - throw_atf_error(err); - - return b; -} - -bool -impl::have_prog_in_path(const std::string& prog) -{ - PRE(prog.find('/') == std::string::npos); - - // Do not bother to provide a default value for PATH. If it is not - // there something is broken in the user's environment. - if (!atf::env::has("PATH")) - throw std::runtime_error("PATH not defined in the environment"); - std::vector< std::string > dirs = - atf::text::split(atf::env::get("PATH"), ":"); - - bool found = false; - for (std::vector< std::string >::const_iterator iter = dirs.begin(); - !found && iter != dirs.end(); iter++) { - const path& dir = path(*iter); - - if (is_executable(dir / prog)) - found = true; - } - return found; -} - -bool -impl::is_executable(const path& p) -{ - if (!exists(p)) - return false; - return safe_access(p, atf_fs_access_x, EACCES); -} - -void -impl::remove(const path& p) -{ - if (file_info(p).get_type() == file_info::dir_type) - throw atf::system_error(IMPL_NAME "::remove(" + p.str() + ")", - "Is a directory", - EPERM); - if (::unlink(p.c_str()) == -1) - throw atf::system_error(IMPL_NAME "::remove(" + p.str() + ")", - "unlink(" + p.str() + ") failed", - errno); -} - -void -impl::rmdir(const path& p) -{ - atf_error_t err = atf_fs_rmdir(p.c_path()); - if (atf_is_error(err)) - throw_atf_error(err); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/fs.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/fs.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/fs.hpp (nonexistent) @@ -1,391 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_FS_HPP_) -#define _ATF_CXX_FS_HPP_ - -extern "C" { -#include -} - -#include -#include -#include -#include -#include -#include - -extern "C" { -#include "../../atf-c/detail/fs.h" -} - -namespace atf { - -namespace io { -class systembuf; -} // namespace io - -namespace fs { - -// ------------------------------------------------------------------------ -// The "path" class. -// ------------------------------------------------------------------------ - -//! -//! \brief A class to represent a path to a file. -//! -//! The path class represents the route to a file or directory in the -//! file system. All file manipulation operations use this class to -//! represent their arguments as it takes care of normalizing user-provided -//! strings and ensures they are valid. -//! -//! It is important to note that the file pointed to by a path need not -//! exist. -//! -class path { - //! - //! \brief Internal representation of a path. - //! - atf_fs_path_t m_path; - -public: - //! \brief Constructs a new path from a user-provided string. - //! - //! This constructor takes a string, either provided by the program's - //! code or by the user and constructs a new path object. The string - //! is normalized to not contain multiple delimiters together and to - //! remove any trailing one. - //! - //! The input string cannot be empty. - //! - explicit path(const std::string&); - - //! - //! \brief Copy constructor. - //! - path(const path&); - - //! - //! \brief Copy constructor. - //! - path(const atf_fs_path_t *); - - //! - //! \brief Destructor for the path class. - //! - ~path(void); - - //! - //! \brief Returns a pointer to a C-style string representing this path. - //! - const char* c_str(void) const; - - //! - //! \brief Returns a pointer to the implementation data. - //! - const atf_fs_path_t* c_path(void) const; - - //! - //! \brief Returns a string representing this path. - //! XXX Really needed? - //! - std::string str(void) const; - - //! - //! \brief Returns the branch path of this path. - //! - //! Calculates and returns the branch path of this path. In other - //! words, it returns what the standard ::dirname function would return. - //! - path branch_path(void) const; - - //! - //! \brief Returns the leaf name of this path. - //! - //! Calculates and returns the leaf name of this path. In other words, - //! it returns what the standard ::basename function would return. - //! - std::string leaf_name(void) const; - - //! - //! \brief Checks whether this path is absolute or not. - //! - //! Returns a boolean indicating if this is an absolute path or not; - //! i.e. if it starts with a slash. - //! - bool is_absolute(void) const; - - //! - //! \brief Checks whether this path points to the root directory or not. - //! - //! Returns a boolean indicating if this is path points to the root - //! directory or not. The checks made by this are extremely simple (so - //! the results cannot always be trusted) but they are enough for our - //! modest sanity-checking needs. I.e. "/../" could return false. - //! - bool is_root(void) const; - - //! - //! \brief Converts the path to be absolute. - //! - //! \pre The path was not absolute. - //! - path to_absolute(void) const; - - //! - //! \brief Assignment operator. - //! - path& operator=(const path&); - - //! - //! \brief Checks if two paths are equal. - //! - bool operator==(const path&) const; - - //! - //! \brief Checks if two paths are different. - //! - bool operator!=(const path&) const; - - //! - //! \brief Concatenates a path with a string. - //! - //! Constructs a new path object that is the concatenation of the - //! left-hand path with the right-hand string. The string is normalized - //! before the concatenation, and a path delimiter is introduced between - //! the two components if needed. - //! - path operator/(const std::string&) const; - - //! - //! \brief Concatenates a path with another path. - //! - //! Constructs a new path object that is the concatenation of the - //! left-hand path with the right-hand one. A path delimiter is - //! introduced between the two components if needed. - //! - path operator/(const path&) const; - - //! - //! \brief Checks if a path has to be sorted before another one - //! lexicographically. - //! - bool operator<(const path&) const; -}; - -// ------------------------------------------------------------------------ -// The "file_info" class. -// ------------------------------------------------------------------------ - -class directory; - -//! -//! \brief A class that contains information about a file. -//! -//! The file_info class holds information about an specific file that -//! exists in the file system. -//! -class file_info { - atf_fs_stat_t m_stat; - -public: - //! - //! \brief The file's type. - //! - static const int blk_type; - static const int chr_type; - static const int dir_type; - static const int fifo_type; - static const int lnk_type; - static const int reg_type; - static const int sock_type; - static const int wht_type; - - //! - //! \brief Constructs a new file_info based on a given file. - //! - //! This constructor creates a new file_info object and fills it with - //! the data returned by ::stat when run on the given file, which must - //! exist. - //! - explicit file_info(const path&); - - //! - //! \brief The copy constructor. - //! - file_info(const file_info&); - - //! - //! \brief The destructor. - //! - ~file_info(void); - - //! - //! \brief Returns the device containing the file. - //! - dev_t get_device(void) const; - - //! - //! \brief Returns the file's inode. - //! - ino_t get_inode(void) const; - - //! - //! \brief Returns the file's permissions. - //! - mode_t get_mode(void) const; - - //! - //! \brief Returns the file's size. - //! - off_t get_size(void) const; - - //! - //! \brief Returns the file's type. - //! - int get_type(void) const; - - //! - //! \brief Returns whether the file is readable by its owner or not. - //! - bool is_owner_readable(void) const; - - //! - //! \brief Returns whether the file is writable by its owner or not. - //! - bool is_owner_writable(void) const; - - //! - //! \brief Returns whether the file is executable by its owner or not. - //! - bool is_owner_executable(void) const; - - //! - //! \brief Returns whether the file is readable by the users belonging - //! to its group or not. - //! - bool is_group_readable(void) const; - - //! - //! \brief Returns whether the file is writable the users belonging to - //! its group or not. - //! - bool is_group_writable(void) const; - - //! - //! \brief Returns whether the file is executable by the users - //! belonging to its group or not. - //! - bool is_group_executable(void) const; - - //! - //! \brief Returns whether the file is readable by people different - //! than the owner and those belonging to the group or not. - //! - bool is_other_readable(void) const; - - //! - //! \brief Returns whether the file is write by people different - //! than the owner and those belonging to the group or not. - //! - bool is_other_writable(void) const; - - //! - //! \brief Returns whether the file is executable by people different - //! than the owner and those belonging to the group or not. - //! - bool is_other_executable(void) const; -}; - -// ------------------------------------------------------------------------ -// The "directory" class. -// ------------------------------------------------------------------------ - -//! -//! \brief A class representing a file system directory. -//! -//! The directory class represents a group of files in the file system and -//! corresponds to exactly one directory. -//! -class directory : public std::map< std::string, file_info > { -public: - //! - //! \brief Constructs a new directory. - //! - //! Constructs a new directory object representing the given path. - //! The directory must exist at creation time as the contents of the - //! class are gathered from it. - //! - directory(const path&); - - //! - //! \brief Returns the file names of the files in the directory. - //! - //! Returns the leaf names of all files contained in the directory. - //! I.e. the keys of the directory map. - //! - std::set< std::string > names(void) const; -}; - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -//! -//! \brief Checks if the given path exists. -//! -bool exists(const path&); - -//! -//! \brief Looks for the given program in the PATH. -//! -//! Given a program name (without slashes) looks for it in the path and -//! returns its full path name if found, otherwise an empty path. -//! -bool have_prog_in_path(const std::string&); - -//! -//! \brief Checks if the given path exists, is accessible and is executable. -//! -bool is_executable(const path&); - -//! -//! \brief Removes a given file. -//! -void remove(const path&); - -//! -//! \brief Removes an empty directory. -//! -void rmdir(const path&); - -} // namespace fs -} // namespace atf - -#endif // !defined(_ATF_CXX_FS_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/exceptions.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/exceptions.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/exceptions.hpp (nonexistent) @@ -1,99 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_EXCEPTIONS_HPP_) -#define _ATF_CXX_EXCEPTIONS_HPP_ - -#include -#include - -extern "C" { -struct atf_error; -} - -namespace atf { - -template< class T > -class not_found_error : - public std::runtime_error -{ - T m_value; - -public: - not_found_error(const std::string& message, const T& value) throw(); - - virtual ~not_found_error(void) throw(); - - const T& get_value(void) const throw(); -}; - -template< class T > -inline -not_found_error< T >::not_found_error(const std::string& message, - const T& value) - throw() : - std::runtime_error(message), - m_value(value) -{ -} - -template< class T > -inline -not_found_error< T >::~not_found_error(void) - throw() -{ -} - -template< class T > -inline -const T& -not_found_error< T >::get_value(void) - const - throw() -{ - return m_value; -} - -class system_error : public std::runtime_error { - int m_sys_err; - mutable std::string m_message; - -public: - system_error(const std::string&, const std::string&, int); - ~system_error(void) throw(); - - int code(void) const throw(); - const char* what(void) const throw(); -}; - -void throw_atf_error(struct atf_error *); - -} // namespace atf - -#endif // !defined(_ATF_CXX_EXCEPTIONS_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/exceptions.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/exceptions.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/exceptions.cpp (nonexistent) @@ -1,157 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -#include -#include -#include -#include - -extern "C" { -#include "../../atf-c/error.h" -}; - -#include "exceptions.hpp" -#include "sanity.hpp" - -// ------------------------------------------------------------------------ -// The "system_error" type. -// ------------------------------------------------------------------------ - -atf::system_error::system_error(const std::string& who, - const std::string& message, - int sys_err) : - std::runtime_error(who + ": " + message), - m_sys_err(sys_err) -{ -} - -atf::system_error::~system_error(void) - throw() -{ -} - -int -atf::system_error::code(void) - const - throw() -{ - return m_sys_err; -} - -const char* -atf::system_error::what(void) - const - throw() -{ - try { - if (m_message.length() == 0) { - m_message = std::string(std::runtime_error::what()) + ": "; - m_message += ::strerror(m_sys_err); - } - - return m_message.c_str(); - } catch (...) { - return "Unable to format system_error message"; - } -} - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -static -void -throw_libc_error(atf_error_t err) -{ - PRE(atf_error_is(err, "libc")); - - const int ecode = atf_libc_error_code(err); - const std::string msg = atf_libc_error_msg(err); - atf_error_free(err); - throw atf::system_error("XXX", msg, ecode); -} - -static -void -throw_no_memory_error(atf_error_t err) -{ - PRE(atf_error_is(err, "no_memory")); - - atf_error_free(err); - throw std::bad_alloc(); -} - -static -void -throw_unknown_error(atf_error_t err) -{ - PRE(atf_is_error(err)); - - static char buf[4096]; - atf_error_format(err, buf, sizeof(buf)); - atf_error_free(err); - throw std::runtime_error(buf); -} - -void -atf::throw_atf_error(atf_error_t err) -{ - static struct handler { - const char* m_name; - void (*m_func)(atf_error_t); - } handlers[] = { - { "libc", throw_libc_error }, - { "no_memory", throw_no_memory_error }, - { NULL, throw_unknown_error }, - }; - - PRE(atf_is_error(err)); - - handler* h = handlers; - while (h->m_name != NULL) { - if (atf_error_is(err, h->m_name)) { - h->m_func(err); - UNREACHABLE; - } else - h++; - } - // XXX: I'm not sure that raising an "unknown" error is a wise thing - // to do here. The C++ binding is supposed to have feature parity - // with the C one, so all possible errors raised by the C library - // should have their counterpart in the C++ library. Still, removing - // this will require some code auditing that I can't afford at the - // moment. - INV(h->m_name == NULL && h->m_func != NULL); - h->m_func(err); - UNREACHABLE; -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/parser_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/parser_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/parser_test.cpp (nonexistent) @@ -1,1043 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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 - -#include "../macros.hpp" - -#include "parser.hpp" -#include "test_helpers.hpp" - -// ------------------------------------------------------------------------ -// Tests for the "parse_error" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(parse_error_to_string); -ATF_TEST_CASE_HEAD(parse_error_to_string) -{ - set_md_var("descr", "Tests the parse_error conversion to strings"); -} -ATF_TEST_CASE_BODY(parse_error_to_string) -{ - using atf::parser::parse_error; - - const parse_error e(123, "This is the message"); - ATF_REQUIRE_EQ("123: This is the message", std::string(e)); -} - -// ------------------------------------------------------------------------ -// Tests for the "parse_errors" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(parse_errors_what); -ATF_TEST_CASE_HEAD(parse_errors_what) -{ - set_md_var("descr", "Tests the parse_errors description"); -} -ATF_TEST_CASE_BODY(parse_errors_what) -{ - using atf::parser::parse_error; - using atf::parser::parse_errors; - - parse_errors es; - es.push_back(parse_error(2, "Second error")); - es.push_back(parse_error(1, "First error")); - - ATF_REQUIRE_EQ("2: Second error\n1: First error", std::string(es.what())); -} - -// ------------------------------------------------------------------------ -// Tests for the "token" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(token_getters); -ATF_TEST_CASE_HEAD(token_getters) -{ - set_md_var("descr", "Tests the token getters"); -} -ATF_TEST_CASE_BODY(token_getters) -{ - using atf::parser::token; - - { - token t(10, 0); - ATF_REQUIRE_EQ(t.lineno(), 10); - ATF_REQUIRE_EQ(t.type(), 0); - ATF_REQUIRE(t.text().empty()); - } - - { - token t(10, 0, "foo"); - ATF_REQUIRE_EQ(t.lineno(), 10); - ATF_REQUIRE_EQ(t.type(), 0); - ATF_REQUIRE_EQ(t.text(), "foo"); - } - - { - token t(20, 1); - ATF_REQUIRE_EQ(t.lineno(), 20); - ATF_REQUIRE_EQ(t.type(), 1); - ATF_REQUIRE(t.text().empty()); - } - - { - token t(20, 1, "bar"); - ATF_REQUIRE_EQ(t.lineno(), 20); - ATF_REQUIRE_EQ(t.type(), 1); - ATF_REQUIRE_EQ(t.text(), "bar"); - } -} - -// ------------------------------------------------------------------------ -// Tests for the "tokenizer" class. -// ------------------------------------------------------------------------ - -#define EXPECT(tkz, ttype, ttext) \ - do { \ - atf::parser::token t = tkz.next(); \ - ATF_REQUIRE(t.type() == ttype); \ - ATF_REQUIRE_EQ(t.text(), ttext); \ - } while (false); - -namespace minimal { - - static const atf::parser::token_type eof_type = 0; - static const atf::parser::token_type nl_type = 1; - static const atf::parser::token_type word_type = 2; - - class tokenizer : public atf::parser::tokenizer< std::istream > { - public: - tokenizer(std::istream& is, bool skipws) : - atf::parser::tokenizer< std::istream > - (is, skipws, eof_type, nl_type, word_type) - { - } - }; - -} - -namespace delims { - - static const atf::parser::token_type eof_type = 0; - static const atf::parser::token_type nl_type = 1; - static const atf::parser::token_type word_type = 2; - static const atf::parser::token_type plus_type = 3; - static const atf::parser::token_type minus_type = 4; - static const atf::parser::token_type equal_type = 5; - - class tokenizer : public atf::parser::tokenizer< std::istream > { - public: - tokenizer(std::istream& is, bool skipws) : - atf::parser::tokenizer< std::istream > - (is, skipws, eof_type, nl_type, word_type) - { - add_delim('+', plus_type); - add_delim('-', minus_type); - add_delim('=', equal_type); - } - }; - -} - -namespace keywords { - - static const atf::parser::token_type eof_type = 0; - static const atf::parser::token_type nl_type = 1; - static const atf::parser::token_type word_type = 2; - static const atf::parser::token_type var_type = 3; - static const atf::parser::token_type loop_type = 4; - static const atf::parser::token_type endloop_type = 5; - - class tokenizer : public atf::parser::tokenizer< std::istream > { - public: - tokenizer(std::istream& is, bool skipws) : - atf::parser::tokenizer< std::istream > - (is, skipws, eof_type, nl_type, word_type) - { - add_keyword("var", var_type); - add_keyword("loop", loop_type); - add_keyword("endloop", endloop_type); - } - }; - -} - -namespace quotes { - - static const atf::parser::token_type eof_type = 0; - static const atf::parser::token_type nl_type = 1; - static const atf::parser::token_type word_type = 2; - static const atf::parser::token_type dblquote_type = 3; - - class tokenizer : public atf::parser::tokenizer< std::istream > { - public: - tokenizer(std::istream& is, bool skipws) : - atf::parser::tokenizer< std::istream > - (is, skipws, eof_type, nl_type, word_type) - { - add_quote('"', dblquote_type); - } - }; - -} - -ATF_TEST_CASE(tokenizer_minimal_nows); -ATF_TEST_CASE_HEAD(tokenizer_minimal_nows) -{ - set_md_var("descr", "Tests the tokenizer class using a minimal parser " - "and not skipping whitespace"); -} -ATF_TEST_CASE_BODY(tokenizer_minimal_nows) -{ - using namespace minimal; - - { - std::istringstream iss(""); - tokenizer mt(iss, false); - - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("\n"); - tokenizer mt(iss, false); - - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("\n\n\n"); - tokenizer mt(iss, false); - - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("line 1"); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "line 1"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("line 1\n"); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "line 1"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("line 1\nline 2"); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "line 1"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, word_type, "line 2"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("line 1\nline 2\nline 3\n"); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "line 1"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, word_type, "line 2"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, word_type, "line 3"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } -} - -ATF_TEST_CASE(tokenizer_minimal_ws); -ATF_TEST_CASE_HEAD(tokenizer_minimal_ws) -{ - set_md_var("descr", "Tests the tokenizer class using a minimal parser " - "and skipping whitespace"); -} -ATF_TEST_CASE_BODY(tokenizer_minimal_ws) -{ - using namespace minimal; - - { - std::istringstream iss(""); - minimal::tokenizer mt(iss, true); - - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss(" \t "); - tokenizer mt(iss, true); - - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("\n"); - tokenizer mt(iss, true); - - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss(" \t \n \t "); - tokenizer mt(iss, true); - - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("\n\n\n"); - tokenizer mt(iss, true); - - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("line 1"); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "1"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss(" \tline\t 1\t"); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "1"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("line 1\n"); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "1"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("line 1\nline 2"); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "1"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "2"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("line 1\nline 2\nline 3\n"); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "1"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "2"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "3"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss(" \t line \t 1\n\tline\t2\n line 3 \n"); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "1"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "2"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, word_type, "line"); - EXPECT(mt, word_type, "3"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } -} - -ATF_TEST_CASE(tokenizer_delims_nows); -ATF_TEST_CASE_HEAD(tokenizer_delims_nows) -{ - set_md_var("descr", "Tests the tokenizer class using a parser with some " - "additional delimiters and not skipping whitespace"); -} -ATF_TEST_CASE_BODY(tokenizer_delims_nows) -{ - using namespace delims; - - { - std::istringstream iss("+-="); - tokenizer mt(iss, false); - - EXPECT(mt, plus_type, "+"); - EXPECT(mt, minus_type, "-"); - EXPECT(mt, equal_type, "="); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("+++"); - tokenizer mt(iss, false); - - EXPECT(mt, plus_type, "+"); - EXPECT(mt, plus_type, "+"); - EXPECT(mt, plus_type, "+"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("\n+\n++\n"); - tokenizer mt(iss, false); - - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, plus_type, "+"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, plus_type, "+"); - EXPECT(mt, plus_type, "+"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("foo+bar=baz"); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "foo"); - EXPECT(mt, plus_type, "+"); - EXPECT(mt, word_type, "bar"); - EXPECT(mt, equal_type, "="); - EXPECT(mt, word_type, "baz"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss(" foo\t+\tbar = baz "); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, " foo\t"); - EXPECT(mt, plus_type, "+"); - EXPECT(mt, word_type, "\tbar "); - EXPECT(mt, equal_type, "="); - EXPECT(mt, word_type, " baz "); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } -} - -ATF_TEST_CASE(tokenizer_delims_ws); -ATF_TEST_CASE_HEAD(tokenizer_delims_ws) -{ - set_md_var("descr", "Tests the tokenizer class using a parser with some " - "additional delimiters and skipping whitespace"); -} -ATF_TEST_CASE_BODY(tokenizer_delims_ws) -{ - using namespace delims; - - { - std::istringstream iss(" foo\t+\tbar = baz "); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "foo"); - EXPECT(mt, plus_type, "+"); - EXPECT(mt, word_type, "bar"); - EXPECT(mt, equal_type, "="); - EXPECT(mt, word_type, "baz"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } -} - -ATF_TEST_CASE(tokenizer_keywords_nows); -ATF_TEST_CASE_HEAD(tokenizer_keywords_nows) -{ - set_md_var("descr", "Tests the tokenizer class using a parser with some " - "additional keywords and not skipping whitespace"); -} -ATF_TEST_CASE_BODY(tokenizer_keywords_nows) -{ - using namespace keywords; - - { - std::istringstream iss("var"); - tokenizer mt(iss, false); - - EXPECT(mt, var_type, "var"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("va"); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "va"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("vara"); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "vara"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("var "); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "var "); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("var\nloop\nendloop"); - tokenizer mt(iss, false); - - EXPECT(mt, var_type, "var"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, loop_type, "loop"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, endloop_type, "endloop"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } -} - -ATF_TEST_CASE(tokenizer_keywords_ws); -ATF_TEST_CASE_HEAD(tokenizer_keywords_ws) -{ - set_md_var("descr", "Tests the tokenizer class using a parser with some " - "additional keywords and not skipping whitespace"); -} -ATF_TEST_CASE_BODY(tokenizer_keywords_ws) -{ - using namespace keywords; - - { - std::istringstream iss("var "); - tokenizer mt(iss, true); - - EXPECT(mt, var_type, "var"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss(" var \n\tloop\t\n \tendloop \t"); - tokenizer mt(iss, true); - - EXPECT(mt, var_type, "var"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, loop_type, "loop"); - EXPECT(mt, nl_type, "<>"); - EXPECT(mt, endloop_type, "endloop"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("var loop endloop"); - tokenizer mt(iss, true); - - EXPECT(mt, var_type, "var"); - EXPECT(mt, loop_type, "loop"); - EXPECT(mt, endloop_type, "endloop"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } -} - -ATF_TEST_CASE(tokenizer_quotes_nows); -ATF_TEST_CASE_HEAD(tokenizer_quotes_nows) -{ - set_md_var("descr", "Tests the tokenizer class using a parser with " - "quoted strings and not skipping whitespace"); -} -ATF_TEST_CASE_BODY(tokenizer_quotes_nows) -{ - using namespace quotes; - - { - std::istringstream iss("var"); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "var"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("\"var\""); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "var"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("var1\"var2\""); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "var1"); - EXPECT(mt, word_type, "var2"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss("var1\" var2 \""); - tokenizer mt(iss, false); - - EXPECT(mt, word_type, "var1"); - EXPECT(mt, word_type, " var2 "); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } -} - -ATF_TEST_CASE(tokenizer_quotes_ws); -ATF_TEST_CASE_HEAD(tokenizer_quotes_ws) -{ - set_md_var("descr", "Tests the tokenizer class using a parser with " - "quoted strings and skipping whitespace"); -} -ATF_TEST_CASE_BODY(tokenizer_quotes_ws) -{ - using namespace quotes; - - { - std::istringstream iss(" var "); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "var"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss(" \"var\" "); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "var"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss(" var1 \"var2\" "); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "var1"); - EXPECT(mt, word_type, "var2"); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } - - { - std::istringstream iss(" var1 \" var2 \" "); - tokenizer mt(iss, true); - - EXPECT(mt, word_type, "var1"); - EXPECT(mt, word_type, " var2 "); - EXPECT(mt, eof_type, "<>"); - EXPECT(mt, eof_type, "<>"); - } -} - -// ------------------------------------------------------------------------ -// Tests for the headers parser. -// ------------------------------------------------------------------------ - -class header_reader { - std::istream& m_is; - -public: - header_reader(std::istream& is) : - m_is(is) - { - } - - void - read(void) - { - std::pair< size_t, atf::parser::headers_map > hml = - atf::parser::read_headers(m_is, 1); - atf::parser::validate_content_type(hml.second, - "application/X-atf-headers-test", 1234); - } - - std::vector< std::string > m_calls; -}; - -ATF_TEST_CASE_WITHOUT_HEAD(headers_1); -ATF_TEST_CASE_BODY(headers_1) -{ - const char* input = - "" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "1: Unexpected token `<>'; expected a header name", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_2); -ATF_TEST_CASE_BODY(headers_2) -{ - const char* input = - "Content-Type\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "1: Unexpected token `<>'; expected `:'", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_3); -ATF_TEST_CASE_BODY(headers_3) -{ - const char* input = - "Content-Type:\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "1: Unexpected token `<>'; expected a textual value", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_4); -ATF_TEST_CASE_BODY(headers_4) -{ - const char* input = - "Content-Type: application/X-atf-headers-test\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "2: Unexpected token `<>'; expected a header name", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_5); -ATF_TEST_CASE_BODY(headers_5) -{ - const char* input = - "Content-Type: application/X-atf-headers-test;\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "1: Unexpected token `<>'; expected an attribute name", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_6); -ATF_TEST_CASE_BODY(headers_6) -{ - const char* input = - "Content-Type: application/X-atf-headers-test; version\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "1: Unexpected token `<>'; expected `='", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_7); -ATF_TEST_CASE_BODY(headers_7) -{ - const char* input = - "Content-Type: application/X-atf-headers-test; version=\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "1: Unexpected token `<>'; expected word or quoted string", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_8); -ATF_TEST_CASE_BODY(headers_8) -{ - const char* input = - "Content-Type: application/X-atf-headers-test; version=\"1234\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "1: Missing double quotes before end of line", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_9); -ATF_TEST_CASE_BODY(headers_9) -{ - const char* input = - "Content-Type: application/X-atf-headers-test; version=1234\"\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "1: Missing double quotes before end of line", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_10); -ATF_TEST_CASE_BODY(headers_10) -{ - const char* input = - "Content-Type: application/X-atf-headers-test; version=1234\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "2: Unexpected token `<>'; expected a header name", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_11); -ATF_TEST_CASE_BODY(headers_11) -{ - const char* input = - "Content-Type: application/X-atf-headers-test; version=\"1234\"\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "2: Unexpected token `<>'; expected a header name", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -ATF_TEST_CASE_WITHOUT_HEAD(headers_12); -ATF_TEST_CASE_BODY(headers_12) -{ - const char* input = - "Content-Type: application/X-atf-headers-test; version=\"1234\"\n" - "a b\n" - "a-b:\n" - "a-b: foo;\n" - "a-b: foo; var\n" - "a-b: foo; var=\n" - "a-b: foo; var=\"a\n" - "a-b: foo; var=a\"\n" - "a-b: foo; var=\"a\";\n" - "a-b: foo; var=\"a\"; second\n" - "a-b: foo; var=\"a\"; second=\n" - "a-b: foo; var=\"a\"; second=\"b\n" - "a-b: foo; var=\"a\"; second=b\"\n" - "a-b: foo; var=\"a\"; second=\"b\"\n" - ; - - const char* exp_calls[] = { - NULL - }; - - const char* exp_errors[] = { - "2: Unexpected token `b'; expected `:'", - "3: Unexpected token `<>'; expected a textual value", - "4: Unexpected token `<>'; expected an attribute name", - "5: Unexpected token `<>'; expected `='", - "6: Unexpected token `<>'; expected word or quoted string", - "7: Missing double quotes before end of line", - "8: Missing double quotes before end of line", - "9: Unexpected token `<>'; expected an attribute name", - "10: Unexpected token `<>'; expected `='", - "11: Unexpected token `<>'; expected word or quoted string", - "12: Missing double quotes before end of line", - "13: Missing double quotes before end of line", - NULL - }; - - do_parser_test< header_reader >(input, exp_calls, exp_errors); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add test cases for the "parse_error" class. - ATF_ADD_TEST_CASE(tcs, parse_error_to_string); - - // Add test cases for the "parse_errors" class. - ATF_ADD_TEST_CASE(tcs, parse_errors_what); - - // Add test cases for the "token" class. - ATF_ADD_TEST_CASE(tcs, token_getters); - - // Add test cases for the "tokenizer" class. - ATF_ADD_TEST_CASE(tcs, tokenizer_minimal_nows); - ATF_ADD_TEST_CASE(tcs, tokenizer_minimal_ws); - ATF_ADD_TEST_CASE(tcs, tokenizer_delims_nows); - ATF_ADD_TEST_CASE(tcs, tokenizer_delims_ws); - ATF_ADD_TEST_CASE(tcs, tokenizer_keywords_nows); - ATF_ADD_TEST_CASE(tcs, tokenizer_keywords_ws); - ATF_ADD_TEST_CASE(tcs, tokenizer_quotes_nows); - ATF_ADD_TEST_CASE(tcs, tokenizer_quotes_ws); - - // Add the tests for the headers parser. - - // Add the test cases for the header file. - ATF_ADD_TEST_CASE(tcs, headers_1); - ATF_ADD_TEST_CASE(tcs, headers_2); - ATF_ADD_TEST_CASE(tcs, headers_3); - ATF_ADD_TEST_CASE(tcs, headers_4); - ATF_ADD_TEST_CASE(tcs, headers_5); - ATF_ADD_TEST_CASE(tcs, headers_6); - ATF_ADD_TEST_CASE(tcs, headers_7); - ATF_ADD_TEST_CASE(tcs, headers_8); - ATF_ADD_TEST_CASE(tcs, headers_9); - ATF_ADD_TEST_CASE(tcs, headers_10); - ATF_ADD_TEST_CASE(tcs, headers_11); - ATF_ADD_TEST_CASE(tcs, headers_12); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/Kyuafile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/Kyuafile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/Kyuafile (nonexistent) @@ -1,13 +0,0 @@ -syntax("kyuafile", 1) - -test_suite("atf") - -atf_test_program{name="application_test"} -atf_test_program{name="env_test"} -atf_test_program{name="exceptions_test"} -atf_test_program{name="expand_test"} -atf_test_program{name="fs_test"} -atf_test_program{name="parser_test"} -atf_test_program{name="sanity_test"} -atf_test_program{name="text_test"} -atf_test_program{name="ui_test"} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/env.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/env.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/env.cpp (nonexistent) @@ -1,73 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include "../../atf-c/error.h" - -#include "../../atf-c/detail/env.h" -} - -#include "env.hpp" -#include "exceptions.hpp" -#include "sanity.hpp" - -namespace impl = atf::env; -#define IMPL_NAME "atf::env" - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -std::string -impl::get(const std::string& name) -{ - return atf_env_get(name.c_str()); -} - -bool -impl::has(const std::string& name) -{ - return atf_env_has(name.c_str()); -} - -void -impl::set(const std::string& name, const std::string& val) -{ - atf_error_t err = atf_env_set(name.c_str(), val.c_str()); - if (atf_is_error(err)) - throw_atf_error(err); -} - -void -impl::unset(const std::string& name) -{ - atf_error_t err = atf_env_unset(name.c_str()); - if (atf_is_error(err)) - throw_atf_error(err); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/application_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/application_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/application_test.cpp (nonexistent) @@ -1,93 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -} - -#include "application.hpp" - -#include "../macros.hpp" - -class getopt_app : public atf::application::app { -public: - getopt_app(void) : app("description", "manpage", "other") {} - - int main(void) - { - // Provide an option that is unknown to the application driver and - // one that is, together with an argument that would be swallowed by - // the test program option if it were recognized. - int argc = 4; - char arg1[] = "progname"; - char arg2[] = "-Z"; - char arg3[] = "-s"; - char arg4[] = "foo"; - char *const argv[] = { arg1, arg2, arg3, arg4, NULL }; - - int ch; - bool zflag; - - // Given that this obviously is an application, and that we used the - // same driver to start, we can test getopt(3) right here without doing - // any fancy stuff. - zflag = false; - while ((ch = ::getopt(argc, argv, ":Z")) != -1) { - switch (ch) { - case 'Z': - zflag = true; - break; - - case '?': - default: - if (optopt != 's') - ATF_FAIL("Unexpected unknown option found"); - } - } - - ATF_REQUIRE_EQ(1, argc - optind); - ATF_REQUIRE_EQ(std::string("foo"), argv[optind]); - - return 0; - } -}; - -ATF_TEST_CASE_WITHOUT_HEAD(getopt); -ATF_TEST_CASE_BODY(getopt) -{ - int argc = 1; - char arg1[] = "progname"; - char *const argv[] = { arg1, NULL }; - ATF_REQUIRE_EQ(0, getopt_app().run(argc, argv)); -} - -ATF_INIT_TEST_CASES(tcs) -{ - ATF_ADD_TEST_CASE(tcs, getopt); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/ui_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/ui_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/ui_test.cpp (nonexistent) @@ -1,462 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009 The NetBSD Foundation, Inc. -// 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 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 -#include - -#include "../macros.hpp" - -#include "env.hpp" -#include "ui.hpp" - -// ------------------------------------------------------------------------ -// Test cases for the free functions. -// ------------------------------------------------------------------------ - -struct test { - const char *tc; - const char *tag; - bool repeat; - size_t col; - const char *fmt; - const char *result; -} tests[] = { - // - // wo_tag - // - - { - "wo_tag", - "", - false, - 0, - "12345", - "12345", - }, - - { - "wo_tag", - "", - false, - 0, - "12345 ", - "12345", - }, - - { - "wo_tag", - "", - false, - 0, - "12345 7890", - "12345 7890", - }, - - { - "wo_tag", - "", - false, - 0, - "12345 789012 45", - "12345 789012 45", - }, - - { - "wo_tag", - "", - false, - 0, - "12345 789012 456", - "12345 789012\n456", - }, - - { - "wo_tag", - "", - false, - 0, - "1234567890123456", - "1234567890123456", - }, - - // TODO(jmmv): Fix the code to pass this test... -// { -// "wo_tag", -// "", -// false, -// 0, -// " 2345678901234567", -// "\n2345678901234567", -// }, - - { - "wo_tag", - "", - false, - 0, - "12345 789012345 78", - "12345 789012345\n78", - }, - - // - // wo_tag_col - // - - { - "wo_tag_col", - "", - false, - 10, - "12345", - " 12345", - }, - - { - "wo_tag_col", - "", - false, - 10, - "12345 7890", - " 12345\n" - " 7890", - }, - - { - "wo_tag_col", - "", - false, - 10, - "1 3 5 7 9", - " 1 3 5\n" - " 7 9", - }, - - // - // w_tag_no_repeat - // - - { - "w_tag_no_repeat", - "1234: ", - false, - 0, - "789012345", - "1234: 789012345", - }, - - { - "w_tag_no_repeat", - "1234: ", - false, - 0, - "789 1234 56789", - "1234: 789 1234\n" - " 56789", - }, - - { - "w_tag_no_repeat", - "1234: ", - false, - 0, - "789012345", - "1234: 789012345", - }, - - { - "w_tag_no_repeat", - "1234: ", - false, - 0, - "789012345 7890", - "1234: 789012345\n" - " 7890", - }, - - // - // w_tag_repeat - // - - { - "w_tag_repeat", - "1234: ", - true, - 0, - "789012345", - "1234: 789012345", - }, - - { - "w_tag_repeat", - "1234: ", - true, - 0, - "789 1234 56789", - "1234: 789 1234\n" - "1234: 56789", - }, - - { - "w_tag_repeat", - "1234: ", - true, - 0, - "789012345", - "1234: 789012345", - }, - - { - "w_tag_no_repeat", - "1234: ", - true, - 0, - "789012345 7890", - "1234: 789012345\n" - "1234: 7890", - }, - - // - // w_tag_col - // - - { - "w_tag_col", - "1234:", - false, - 10, - "1 3 5", - "1234: 1 3 5", - }, - - { - "w_tag_col", - "1234:", - false, - 10, - "1 3 5 7 9", - "1234: 1 3 5\n" - " 7 9", - }, - - { - "w_tag_col", - "1234:", - true, - 10, - "1 3 5 7 9", - "1234: 1 3 5\n" - "1234: 7 9", - }, - - // - // paragraphs - // - - { - "paragraphs", - "", - false, - 0, - "1 3 5\n\n", - "1 3 5" - }, - - { - "paragraphs", - "", - false, - 0, - "1 3 5\n2 4 6", - "1 3 5\n\n2 4 6" - }, - - { - "paragraphs", - "", - false, - 0, - "1234 6789 123456\n2 4 6", - "1234 6789\n123456\n\n2 4 6" - }, - - { - "paragraphs", - "12: ", - false, - 0, - "56789 123456\n2 4 6", - "12: 56789\n 123456\n\n 2 4 6" - }, - - { - "paragraphs", - "12: ", - true, - 0, - "56789 123456\n2 4 6", - "12: 56789\n12: 123456\n12: \n12: 2 4 6" - }, - - { - "paragraphs", - "12:", - false, - 4, - "56789 123456\n2 4 6", - "12: 56789\n 123456\n\n 2 4 6" - }, - - { - "paragraphs", - "12:", - true, - 4, - "56789 123456\n2 4 6", - "12: 56789\n12: 123456\n12:\n12: 2 4 6" - }, - - // - // end - // - - { - NULL, - NULL, - false, - 0, - NULL, - NULL, - }, -}; - -static -void -run_tests(const char *tc) -{ - struct test *t; - - std::cout << "Running tests for " << tc << "\n"; - - atf::env::set("COLUMNS", "15"); - - for (t = &tests[0]; t->tc != NULL; t++) { - if (std::strcmp(t->tc, tc) == 0) { - std::cout << "\n"; - std::cout << "Testing with tag '" << t->tag << "', '" - << (t->repeat ? "repeat" : "no repeat") << "', col " - << t->col << "\n"; - std::cout << "Input: >>>" << t->fmt << "<<<\n"; - std::cout << "Expected output: >>>" << t->result << "<<<\n"; - - std::string result = atf::ui::format_text_with_tag(t->fmt, t->tag, - t->repeat, t->col); - std::cout << "Output : >>>" << result << "<<<\n"; - ATF_REQUIRE_EQ(t->result, result); - } - } -} - -ATF_TEST_CASE(wo_tag); -ATF_TEST_CASE_HEAD(wo_tag) -{ - set_md_var("descr", "Checks formatting without tags"); -} -ATF_TEST_CASE_BODY(wo_tag) -{ - run_tests("wo_tag"); -} - -ATF_TEST_CASE(wo_tag_col); -ATF_TEST_CASE_HEAD(wo_tag_col) -{ - set_md_var("descr", "Checks formatting without tags and with a non-zero " - "starting column"); -} -ATF_TEST_CASE_BODY(wo_tag_col) -{ - run_tests("wo_tag_col"); -} - -ATF_TEST_CASE(w_tag_no_repeat); -ATF_TEST_CASE_HEAD(w_tag_no_repeat) -{ - set_md_var("descr", "Checks formatting with a tag"); -} -ATF_TEST_CASE_BODY(w_tag_no_repeat) -{ - run_tests("w_tag_no_repeat"); -} - -ATF_TEST_CASE(w_tag_repeat); -ATF_TEST_CASE_HEAD(w_tag_repeat) -{ - set_md_var("descr", "Checks formatting with a tag and repeating it on " - "each line"); -} -ATF_TEST_CASE_BODY(w_tag_repeat) -{ - run_tests("w_tag_repeat"); -} - -ATF_TEST_CASE(w_tag_col); -ATF_TEST_CASE_HEAD(w_tag_col) -{ - set_md_var("descr", "Checks formatting with a tag and starting at a " - "column greater than its length"); -} -ATF_TEST_CASE_BODY(w_tag_col) -{ - run_tests("w_tag_col"); -} - -ATF_TEST_CASE(paragraphs); -ATF_TEST_CASE_HEAD(paragraphs) -{ - set_md_var("descr", "Checks formatting a string that contains multiple " - "paragraphs"); -} -ATF_TEST_CASE_BODY(paragraphs) -{ - run_tests("paragraphs"); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test cases for the free functions. - ATF_ADD_TEST_CASE(tcs, wo_tag); - ATF_ADD_TEST_CASE(tcs, wo_tag_col); - ATF_ADD_TEST_CASE(tcs, w_tag_no_repeat); - ATF_ADD_TEST_CASE(tcs, w_tag_repeat); - ATF_ADD_TEST_CASE(tcs, w_tag_col); - ATF_ADD_TEST_CASE(tcs, paragraphs); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/env.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/env.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/env.hpp (nonexistent) @@ -1,84 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_ENV_HPP_) -#define _ATF_CXX_ENV_HPP_ - -#include - -namespace atf { -namespace env { - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -//! -//! \brief Returns the value of an environment variable. -//! -//! Returns the value of the specified environment variable. The variable -//! must be defined. -//! -std::string get(const std::string&); - -//! -//! \brief Checks if the environment has a variable. -//! -//! Checks if the environment has a given variable. -//! -bool has(const std::string&); - -//! -//! \brief Sets an environment variable to a given value. -//! -//! Sets the specified environment variable to the given value. Note that -//! variables set to the empty string are different to undefined ones. -//! -//! Be aware that this alters the program's global status, which in general -//! is a bad thing to do due to the side-effects it may have. There are -//! some legitimate usages for this function, though. -//! -void set(const std::string&, const std::string&); - -//! -//! \brief Unsets an environment variable. -//! -//! Unsets the specified environment variable Note that undefined -//! variables are different to those defined but set to an empty value. -//! -//! Be aware that this alters the program's global status, which in general -//! is a bad thing to do due to the side-effects it may have. There are -//! some legitimate usages for this function, though. -//! -void unset(const std::string&); - -} // namespace env -} // namespace atf - -#endif // !defined(_ATF_CXX_ENV_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/process.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/process.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/process.cpp (nonexistent) @@ -1,355 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include - -#include "../../atf-c/error.h" - -#include "../../atf-c/detail/process.h" -} - -#include - -#include "exceptions.hpp" -#include "process.hpp" -#include "sanity.hpp" - -namespace detail = atf::process::detail; -namespace impl = atf::process; -#define IMPL_NAME "atf::process" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -template< class C > -atf::utils::auto_array< const char* > -collection_to_argv(const C& c) -{ - atf::utils::auto_array< const char* > argv(new const char*[c.size() + 1]); - - std::size_t pos = 0; - for (typename C::const_iterator iter = c.begin(); iter != c.end(); - iter++) { - argv[pos] = (*iter).c_str(); - pos++; - } - INV(pos == c.size()); - argv[pos] = NULL; - - return argv; -} - -template< class C > -C -argv_to_collection(const char* const* argv) -{ - C c; - - for (const char* const* iter = argv; *iter != NULL; iter++) - c.push_back(std::string(*iter)); - - return c; -} - -// ------------------------------------------------------------------------ -// The "argv_array" type. -// ------------------------------------------------------------------------ - -impl::argv_array::argv_array(void) : - m_exec_argv(collection_to_argv(m_args)) -{ -} - -impl::argv_array::argv_array(const char* arg1, ...) -{ - m_args.push_back(arg1); - - { - va_list ap; - const char* nextarg; - - va_start(ap, arg1); - while ((nextarg = va_arg(ap, const char*)) != NULL) - m_args.push_back(nextarg); - va_end(ap); - } - - ctor_init_exec_argv(); -} - -impl::argv_array::argv_array(const char* const* ca) : - m_args(argv_to_collection< args_vector >(ca)), - m_exec_argv(collection_to_argv(m_args)) -{ -} - -impl::argv_array::argv_array(const argv_array& a) : - m_args(a.m_args), - m_exec_argv(collection_to_argv(m_args)) -{ -} - -void -impl::argv_array::ctor_init_exec_argv(void) -{ - m_exec_argv = collection_to_argv(m_args); -} - -const char* const* -impl::argv_array::exec_argv(void) - const -{ - return m_exec_argv.get(); -} - -impl::argv_array::size_type -impl::argv_array::size(void) - const -{ - return m_args.size(); -} - -const char* -impl::argv_array::operator[](int idx) - const -{ - return m_args[idx].c_str(); -} - -impl::argv_array::const_iterator -impl::argv_array::begin(void) - const -{ - return m_args.begin(); -} - -impl::argv_array::const_iterator -impl::argv_array::end(void) - const -{ - return m_args.end(); -} - -impl::argv_array& -impl::argv_array::operator=(const argv_array& a) -{ - if (this != &a) { - m_args = a.m_args; - m_exec_argv = collection_to_argv(m_args); - } - return *this; -} - -// ------------------------------------------------------------------------ -// The "stream" types. -// ------------------------------------------------------------------------ - -impl::basic_stream::basic_stream(void) : - m_inited(false) -{ -} - -impl::basic_stream::~basic_stream(void) -{ - if (m_inited) - atf_process_stream_fini(&m_sb); -} - -const atf_process_stream_t* -impl::basic_stream::get_sb(void) - const -{ - INV(m_inited); - return &m_sb; -} - -impl::stream_capture::stream_capture(void) -{ - atf_error_t err = atf_process_stream_init_capture(&m_sb); - if (atf_is_error(err)) - throw_atf_error(err); - m_inited = true; -} - -impl::stream_connect::stream_connect(const int src_fd, const int tgt_fd) -{ - atf_error_t err = atf_process_stream_init_connect(&m_sb, src_fd, tgt_fd); - if (atf_is_error(err)) - throw_atf_error(err); - m_inited = true; -} - -impl::stream_inherit::stream_inherit(void) -{ - atf_error_t err = atf_process_stream_init_inherit(&m_sb); - if (atf_is_error(err)) - throw_atf_error(err); - m_inited = true; -} - -impl::stream_redirect_fd::stream_redirect_fd(const int fd) -{ - atf_error_t err = atf_process_stream_init_redirect_fd(&m_sb, fd); - if (atf_is_error(err)) - throw_atf_error(err); - m_inited = true; -} - -impl::stream_redirect_path::stream_redirect_path(const fs::path& p) -{ - atf_error_t err = atf_process_stream_init_redirect_path(&m_sb, p.c_path()); - if (atf_is_error(err)) - throw_atf_error(err); - m_inited = true; -} - -// ------------------------------------------------------------------------ -// The "status" type. -// ------------------------------------------------------------------------ - -impl::status::status(atf_process_status_t& s) : - m_status(s) -{ -} - -impl::status::~status(void) -{ - atf_process_status_fini(&m_status); -} - -bool -impl::status::exited(void) - const -{ - return atf_process_status_exited(&m_status); -} - -int -impl::status::exitstatus(void) - const -{ - return atf_process_status_exitstatus(&m_status); -} - -bool -impl::status::signaled(void) - const -{ - return atf_process_status_signaled(&m_status); -} - -int -impl::status::termsig(void) - const -{ - return atf_process_status_termsig(&m_status); -} - -bool -impl::status::coredump(void) - const -{ - return atf_process_status_coredump(&m_status); -} - -// ------------------------------------------------------------------------ -// The "child" type. -// ------------------------------------------------------------------------ - -impl::child::child(atf_process_child_t& c) : - m_child(c), - m_waited(false) -{ -} - -impl::child::~child(void) -{ - if (!m_waited) { - ::kill(atf_process_child_pid(&m_child), SIGTERM); - - atf_process_status_t s; - atf_error_t err = atf_process_child_wait(&m_child, &s); - INV(!atf_is_error(err)); - atf_process_status_fini(&s); - } -} - -impl::status -impl::child::wait(void) -{ - atf_process_status_t s; - - atf_error_t err = atf_process_child_wait(&m_child, &s); - if (atf_is_error(err)) - throw_atf_error(err); - - m_waited = true; - return status(s); -} - -pid_t -impl::child::pid(void) - const -{ - return atf_process_child_pid(&m_child); -} - -int -impl::child::stdout_fd(void) -{ - return atf_process_child_stdout(&m_child); -} - -int -impl::child::stderr_fd(void) -{ - return atf_process_child_stderr(&m_child); -} - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -void -detail::flush_streams(void) -{ - // This is a weird hack to ensure that the output of the parent process - // is flushed before executing a child which prevents, for example, the - // output of the atf-run hooks to appear before the output of atf-run - // itself. - // - // TODO: This should only be executed when inheriting the stdout or - // stderr file descriptors. However, the flushing is specific to the - // iostreams, so we cannot do it from the C library where all the process - // logic is performed. Come up with a better design. - std::cout.flush(); - std::cerr.flush(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/ui.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/ui.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/ui.cpp (nonexistent) @@ -1,173 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include - -#include -#include -} - -#include - -#include "env.hpp" -#include "text.hpp" -#include "sanity.hpp" -#include "text.hpp" -#include "ui.hpp" - -namespace impl = atf::ui; -#define IMPL_NAME "atf::ui" - -static -size_t -terminal_width(void) -{ - static bool done = false; - static size_t width = 0; - - if (!done) { - if (atf::env::has("COLUMNS")) { - const std::string cols = atf::env::get("COLUMNS"); - if (cols.length() > 0) { - width = atf::text::to_type< size_t >(cols); - } - } else { - struct winsize ws; - if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) != -1) - width = ws.ws_col; - } - - if (width >= 80) - width -= 5; - - done = true; - } - - return width; -} - -static -std::string -format_paragraph(const std::string& text, - const std::string& tag, - const bool first, - const bool repeat, - const size_t col) -{ - PRE(text.find('\n') == std::string::npos); - - const std::string pad(col - tag.length(), ' '); - const std::string fullpad(col, ' '); - - std::string formatted; - if (first || repeat) - formatted = tag + pad; - else - formatted = fullpad; - INV(formatted.length() == col); - size_t curcol = col; - - const size_t maxcol = terminal_width(); - - std::vector< std::string > words = atf::text::split(text, " "); - for (std::vector< std::string >::const_iterator iter = words.begin(); - iter != words.end(); iter++) { - const std::string& word = *iter; - - if (iter != words.begin() && maxcol > 0 && - curcol + word.length() + 1 > maxcol) { - if (repeat) - formatted += '\n' + tag + pad; - else - formatted += '\n' + fullpad; - curcol = col; - } else if (iter != words.begin()) { - formatted += ' '; - curcol++; - } - - formatted += word; - curcol += word.length(); - } - - return formatted; -} - -std::string -impl::format_error(const std::string& prog_name, const std::string& error) -{ - return format_text_with_tag("ERROR: " + error, prog_name + ": ", true); -} - -std::string -impl::format_info(const std::string& prog_name, const std::string& msg) -{ - return format_text_with_tag(msg, prog_name + ": ", true); -} - -std::string -impl::format_text(const std::string& text) -{ - return format_text_with_tag(text, "", false, 0); -} - -std::string -impl::format_text_with_tag(const std::string& text, const std::string& tag, - bool repeat, size_t col) -{ - PRE(col == 0 || col >= tag.length()); - if (col == 0) - col = tag.length(); - - std::string formatted; - - std::vector< std::string > lines = atf::text::split(text, "\n"); - for (std::vector< std::string >::const_iterator iter = lines.begin(); - iter != lines.end(); iter++) { - const std::string& line = *iter; - - formatted += format_paragraph(line, tag, iter == lines.begin(), - repeat, col); - if (iter + 1 != lines.end()) { - if (repeat) - formatted += "\n" + tag + "\n"; - else - formatted += "\n\n"; - } - } - - return formatted; -} - -std::string -impl::format_warning(const std::string& prog_name, const std::string& error) -{ - return format_text_with_tag("WARNING: " + error, prog_name + ": ", true); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/ui.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/ui.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/ui.hpp (nonexistent) @@ -1,105 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_UI_HPP_) -#define _ATF_CXX_UI_HPP_ - -#include - -namespace atf { -namespace ui { - -//! -//! \brief Formats an error message to fit on screen. -//! -//! Given the program's name and an error message, properly formats it to -//! fit on screen. -//! -//! The program's name is not stored globally to prevent the usage of this -//! function from inside the library. Making it a explicit parameter -//! restricts its usage to the frontend. -//! -std::string format_error(const std::string&, const std::string&); - -//! -//! \brief Formats an informational message to fit on screen. -//! -//! Given the program's name and an informational message, properly formats -//! it to fit on screen. -//! -//! The program's name is not stored globally to prevent the usage of this -//! function from inside the library. Making it a explicit parameter -//! restricts its usage to the frontend. -//! -std::string format_info(const std::string&, const std::string&); - -//! -//! \brief Formats a block of text to fit nicely on screen. -//! -//! Given a text, which is composed of multiple paragraphs separated by -//! a single '\n' character, reformats it to fill on the current screen's -//! width with proper line wrapping. -//! -//! This is just a special case of format_text_with_tag, provided for -//! simplicity. -//! -std::string format_text(const std::string&); - -//! -//! \brief Formats a block of text to fit nicely on screen, prepending a -//! tag to it. -//! -//! Given a text, which is composed of multiple paragraphs separated by -//! a single '\n' character, reformats it to fill on the current screen's -//! width with proper line wrapping. The text is prepended with a tag; -//! i.e. a word that is printed at the beginning of the first paragraph and -//! optionally repeated at the beginning of each word. The last parameter -//! specifies the column on which the text should start, and that position -//! must be greater than the tag's length or 0, in which case it -//! automatically takes the correct value. -//! -std::string format_text_with_tag(const std::string&, const std::string&, - bool, size_t = 0); - -//! -//! \brief Formats a warning message to fit on screen. -//! -//! Given the program's name and a warning message, properly formats it to -//! fit on screen. -//! -//! The program's name is not stored globally to prevent the usage of this -//! function from inside the library. Making it a explicit parameter -//! restricts its usage to the frontend. -//! -std::string format_warning(const std::string&, const std::string&); - -} // namespace ui -} // namespace atf - -#endif // !defined(_ATF_CXX_UI_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/process.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/process.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/process.hpp (nonexistent) @@ -1,280 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2008, 2009, 2010, 2011 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_PROCESS_HPP_) -#define _ATF_CXX_PROCESS_HPP_ - -extern "C" { -#include - -#include "../../atf-c/error.h" - -#include "../../atf-c/detail/process.h" -} - -#include -#include - -#include "exceptions.hpp" -#include "fs.hpp" - -#include "../utils.hpp" - -namespace atf { -namespace process { - -class child; -class status; - -// ------------------------------------------------------------------------ -// The "argv_array" type. -// ------------------------------------------------------------------------ - -class argv_array { - typedef std::vector< std::string > args_vector; - args_vector m_args; - - // TODO: This is immutable, so we should be able to use - // std::tr1::shared_array instead when it becomes widely available. - // The reason would be to remove all copy constructors and assignment - // operators from this class. - utils::auto_array< const char* > m_exec_argv; - void ctor_init_exec_argv(void); - -public: - typedef args_vector::const_iterator const_iterator; - typedef args_vector::size_type size_type; - - argv_array(void); - argv_array(const char*, ...); - explicit argv_array(const char* const*); - template< class C > explicit argv_array(const C&); - argv_array(const argv_array&); - - const char* const* exec_argv(void) const; - size_type size(void) const; - const char* operator[](int) const; - - const_iterator begin(void) const; - const_iterator end(void) const; - - argv_array& operator=(const argv_array&); -}; - -template< class C > -argv_array::argv_array(const C& c) -{ - for (typename C::const_iterator iter = c.begin(); iter != c.end(); - iter++) - m_args.push_back(*iter); - ctor_init_exec_argv(); -} - -// ------------------------------------------------------------------------ -// The "stream" types. -// ------------------------------------------------------------------------ - -class basic_stream { -protected: - atf_process_stream_t m_sb; - bool m_inited; - - const atf_process_stream_t* get_sb(void) const; - -public: - basic_stream(void); - ~basic_stream(void); -}; - -class stream_capture : basic_stream { - // Allow access to the getters. - template< class OutStream, class ErrStream > friend - child fork(void (*)(void*), const OutStream&, const ErrStream&, void*); - template< class OutStream, class ErrStream > friend - status exec(const atf::fs::path&, const argv_array&, - const OutStream&, const ErrStream&, void (*)(void)); - -public: - stream_capture(void); -}; - -class stream_connect : basic_stream { - // Allow access to the getters. - template< class OutStream, class ErrStream > friend - child fork(void (*)(void*), const OutStream&, const ErrStream&, void*); - template< class OutStream, class ErrStream > friend - status exec(const atf::fs::path&, const argv_array&, - const OutStream&, const ErrStream&, void (*)(void)); - -public: - stream_connect(const int, const int); -}; - -class stream_inherit : basic_stream { - // Allow access to the getters. - template< class OutStream, class ErrStream > friend - child fork(void (*)(void*), const OutStream&, const ErrStream&, void*); - template< class OutStream, class ErrStream > friend - status exec(const atf::fs::path&, const argv_array&, - const OutStream&, const ErrStream&, void (*)(void)); - -public: - stream_inherit(void); -}; - -class stream_redirect_fd : basic_stream { - // Allow access to the getters. - template< class OutStream, class ErrStream > friend - child fork(void (*)(void*), const OutStream&, const ErrStream&, void*); - template< class OutStream, class ErrStream > friend - status exec(const atf::fs::path&, const argv_array&, - const OutStream&, const ErrStream&, void (*)(void)); - -public: - stream_redirect_fd(const int); -}; - -class stream_redirect_path : basic_stream { - // Allow access to the getters. - template< class OutStream, class ErrStream > friend - child fork(void (*)(void*), const OutStream&, const ErrStream&, void*); - template< class OutStream, class ErrStream > friend - status exec(const atf::fs::path&, const argv_array&, - const OutStream&, const ErrStream&, void (*)(void)); - -public: - stream_redirect_path(const fs::path&); -}; - -// ------------------------------------------------------------------------ -// The "status" type. -// ------------------------------------------------------------------------ - -class status { - atf_process_status_t m_status; - - friend class child; - template< class OutStream, class ErrStream > friend - status exec(const atf::fs::path&, const argv_array&, - const OutStream&, const ErrStream&, void (*)(void)); - - status(atf_process_status_t&); - -public: - ~status(void); - - bool exited(void) const; - int exitstatus(void) const; - - bool signaled(void) const; - int termsig(void) const; - bool coredump(void) const; -}; - -// ------------------------------------------------------------------------ -// The "child" type. -// ------------------------------------------------------------------------ - -class child { - atf_process_child_t m_child; - bool m_waited; - - template< class OutStream, class ErrStream > friend - child fork(void (*)(void*), const OutStream&, const ErrStream&, void*); - - child(atf_process_child_t& c); - -public: - ~child(void); - - status wait(void); - - pid_t pid(void) const; - int stdout_fd(void); - int stderr_fd(void); -}; - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -namespace detail { -void flush_streams(void); -} // namespace detail - -// TODO: The void* cookie can probably be templatized, thus also allowing -// const data structures. -template< class OutStream, class ErrStream > -child -fork(void (*start)(void*), const OutStream& outsb, - const ErrStream& errsb, void* v) -{ - atf_process_child_t c; - - detail::flush_streams(); - atf_error_t err = atf_process_fork(&c, start, outsb.get_sb(), - errsb.get_sb(), v); - if (atf_is_error(err)) - throw_atf_error(err); - - return child(c); -} - -template< class OutStream, class ErrStream > -status -exec(const atf::fs::path& prog, const argv_array& argv, - const OutStream& outsb, const ErrStream& errsb, - void (*prehook)(void)) -{ - atf_process_status_t s; - - detail::flush_streams(); - atf_error_t err = atf_process_exec_array(&s, prog.c_path(), - argv.exec_argv(), - outsb.get_sb(), - errsb.get_sb(), - prehook); - if (atf_is_error(err)) - throw_atf_error(err); - - return status(s); -} - -template< class OutStream, class ErrStream > -status -exec(const atf::fs::path& prog, const argv_array& argv, - const OutStream& outsb, const ErrStream& errsb) -{ - return exec(prog, argv, outsb, errsb, NULL); -} - -} // namespace process -} // namespace atf - -#endif // !defined(_ATF_CXX_PROCESS_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/Atffile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/Atffile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/Atffile (nonexistent) @@ -1,13 +0,0 @@ -Content-Type: application/X-atf-atffile; version="1" - -prop: test-suite = atf - -tp: application_test -tp: env_test -tp: exceptions_test -tp: expand_test -tp: fs_test -tp: parser_test -tp: sanity_test -tp: text_test -tp: ui_test Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/sanity_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/sanity_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/sanity_test.cpp (nonexistent) @@ -1,41 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009 The NetBSD Foundation, Inc. -// 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 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 "../macros.hpp" - -ATF_TEST_CASE_WITHOUT_HEAD(nothing); -ATF_TEST_CASE_BODY(nothing) -{ - // TODO -} - -ATF_INIT_TEST_CASES(tcs) -{ - ATF_ADD_TEST_CASE(tcs, nothing); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/env_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/env_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/env_test.cpp (nonexistent) @@ -1,91 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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 "../macros.hpp" - -#include "env.hpp" - -// ------------------------------------------------------------------------ -// Test cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(has_get); -ATF_TEST_CASE_HEAD(has_get) -{ - set_md_var("descr", "Tests the has and get functions"); -} -ATF_TEST_CASE_BODY(has_get) -{ - ATF_REQUIRE(atf::env::has("PATH")); - ATF_REQUIRE(!atf::env::get("PATH").empty()); - - ATF_REQUIRE(!atf::env::has("_UNDEFINED_VARIABLE_")); -} - -ATF_TEST_CASE(set); -ATF_TEST_CASE_HEAD(set) -{ - set_md_var("descr", "Tests the set function"); -} -ATF_TEST_CASE_BODY(set) -{ - ATF_REQUIRE(atf::env::has("PATH")); - const std::string& oldval = atf::env::get("PATH"); - atf::env::set("PATH", "foo-bar"); - ATF_REQUIRE(atf::env::get("PATH") != oldval); - ATF_REQUIRE_EQ(atf::env::get("PATH"), "foo-bar"); - - ATF_REQUIRE(!atf::env::has("_UNDEFINED_VARIABLE_")); - atf::env::set("_UNDEFINED_VARIABLE_", "foo2-bar2"); - ATF_REQUIRE_EQ(atf::env::get("_UNDEFINED_VARIABLE_"), "foo2-bar2"); -} - -ATF_TEST_CASE(unset); -ATF_TEST_CASE_HEAD(unset) -{ - set_md_var("descr", "Tests the unset function"); -} -ATF_TEST_CASE_BODY(unset) -{ - ATF_REQUIRE(atf::env::has("PATH")); - atf::env::unset("PATH"); - ATF_REQUIRE(!atf::env::has("PATH")); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test cases for the free functions. - ATF_ADD_TEST_CASE(tcs, has_get); - ATF_ADD_TEST_CASE(tcs, set); - ATF_ADD_TEST_CASE(tcs, unset); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/fs_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/fs_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/fs_test.cpp (nonexistent) @@ -1,545 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include -} - -#include -#include -#include - -#include "../macros.hpp" - -#include "exceptions.hpp" -#include "fs.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static -void -create_files(void) -{ - ::mkdir("files", 0755); - ::mkdir("files/dir", 0755); - - std::ofstream os("files/reg"); - os.close(); - - // TODO: Should create all other file types (blk, chr, fifo, lnk, sock) - // and test for them... but the underlying file system may not support - // most of these. Specially as we are working on /tmp, which can be - // mounted with flags such as "nodev". See how to deal with this - // situation. -} - -// ------------------------------------------------------------------------ -// Test cases for the "path" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(path_normalize); -ATF_TEST_CASE_HEAD(path_normalize) -{ - set_md_var("descr", "Tests the path's normalization"); -} -ATF_TEST_CASE_BODY(path_normalize) -{ - using atf::fs::path; - - ATF_REQUIRE_EQ(path(".").str(), "."); - ATF_REQUIRE_EQ(path("..").str(), ".."); - - ATF_REQUIRE_EQ(path("foo").str(), "foo"); - ATF_REQUIRE_EQ(path("foo/bar").str(), "foo/bar"); - ATF_REQUIRE_EQ(path("foo/bar/").str(), "foo/bar"); - - ATF_REQUIRE_EQ(path("/foo").str(), "/foo"); - ATF_REQUIRE_EQ(path("/foo/bar").str(), "/foo/bar"); - ATF_REQUIRE_EQ(path("/foo/bar/").str(), "/foo/bar"); - - ATF_REQUIRE_EQ(path("///foo").str(), "/foo"); - ATF_REQUIRE_EQ(path("///foo///bar").str(), "/foo/bar"); - ATF_REQUIRE_EQ(path("///foo///bar///").str(), "/foo/bar"); -} - -ATF_TEST_CASE(path_is_absolute); -ATF_TEST_CASE_HEAD(path_is_absolute) -{ - set_md_var("descr", "Tests the path::is_absolute function"); -} -ATF_TEST_CASE_BODY(path_is_absolute) -{ - using atf::fs::path; - - ATF_REQUIRE( path("/").is_absolute()); - ATF_REQUIRE( path("////").is_absolute()); - ATF_REQUIRE( path("////a").is_absolute()); - ATF_REQUIRE( path("//a//").is_absolute()); - ATF_REQUIRE(!path("a////").is_absolute()); - ATF_REQUIRE(!path("../foo").is_absolute()); -} - -ATF_TEST_CASE(path_is_root); -ATF_TEST_CASE_HEAD(path_is_root) -{ - set_md_var("descr", "Tests the path::is_root function"); -} -ATF_TEST_CASE_BODY(path_is_root) -{ - using atf::fs::path; - - ATF_REQUIRE( path("/").is_root()); - ATF_REQUIRE( path("////").is_root()); - ATF_REQUIRE(!path("////a").is_root()); - ATF_REQUIRE(!path("//a//").is_root()); - ATF_REQUIRE(!path("a////").is_root()); - ATF_REQUIRE(!path("../foo").is_root()); -} - -ATF_TEST_CASE(path_branch_path); -ATF_TEST_CASE_HEAD(path_branch_path) -{ - set_md_var("descr", "Tests the path::branch_path function"); -} -ATF_TEST_CASE_BODY(path_branch_path) -{ - using atf::fs::path; - - ATF_REQUIRE_EQ(path(".").branch_path().str(), "."); - ATF_REQUIRE_EQ(path("foo").branch_path().str(), "."); - ATF_REQUIRE_EQ(path("foo/bar").branch_path().str(), "foo"); - ATF_REQUIRE_EQ(path("/foo").branch_path().str(), "/"); - ATF_REQUIRE_EQ(path("/foo/bar").branch_path().str(), "/foo"); -} - -ATF_TEST_CASE(path_leaf_name); -ATF_TEST_CASE_HEAD(path_leaf_name) -{ - set_md_var("descr", "Tests the path::leaf_name function"); -} -ATF_TEST_CASE_BODY(path_leaf_name) -{ - using atf::fs::path; - - ATF_REQUIRE_EQ(path(".").leaf_name(), "."); - ATF_REQUIRE_EQ(path("foo").leaf_name(), "foo"); - ATF_REQUIRE_EQ(path("foo/bar").leaf_name(), "bar"); - ATF_REQUIRE_EQ(path("/foo").leaf_name(), "foo"); - ATF_REQUIRE_EQ(path("/foo/bar").leaf_name(), "bar"); -} - -ATF_TEST_CASE(path_compare_equal); -ATF_TEST_CASE_HEAD(path_compare_equal) -{ - set_md_var("descr", "Tests the comparison for equality between paths"); -} -ATF_TEST_CASE_BODY(path_compare_equal) -{ - using atf::fs::path; - - ATF_REQUIRE(path("/") == path("///")); - ATF_REQUIRE(path("/a") == path("///a")); - ATF_REQUIRE(path("/a") == path("///a///")); - - ATF_REQUIRE(path("a/b/c") == path("a//b//c")); - ATF_REQUIRE(path("a/b/c") == path("a//b//c///")); -} - -ATF_TEST_CASE(path_compare_different); -ATF_TEST_CASE_HEAD(path_compare_different) -{ - set_md_var("descr", "Tests the comparison for difference between paths"); -} -ATF_TEST_CASE_BODY(path_compare_different) -{ - using atf::fs::path; - - ATF_REQUIRE(path("/") != path("//a/")); - ATF_REQUIRE(path("/a") != path("a///")); - - ATF_REQUIRE(path("a/b/c") != path("a/b")); - ATF_REQUIRE(path("a/b/c") != path("a//b")); - ATF_REQUIRE(path("a/b/c") != path("/a/b/c")); - ATF_REQUIRE(path("a/b/c") != path("/a//b//c")); -} - -ATF_TEST_CASE(path_concat); -ATF_TEST_CASE_HEAD(path_concat) -{ - set_md_var("descr", "Tests the concatenation of multiple paths"); -} -ATF_TEST_CASE_BODY(path_concat) -{ - using atf::fs::path; - - ATF_REQUIRE_EQ((path("foo") / "bar").str(), "foo/bar"); - ATF_REQUIRE_EQ((path("foo/") / "/bar").str(), "foo/bar"); - ATF_REQUIRE_EQ((path("foo/") / "/bar/baz").str(), "foo/bar/baz"); - ATF_REQUIRE_EQ((path("foo/") / "///bar///baz").str(), "foo/bar/baz"); -} - -ATF_TEST_CASE(path_to_absolute); -ATF_TEST_CASE_HEAD(path_to_absolute) -{ - set_md_var("descr", "Tests the conversion of a relative path to an " - "absolute one"); -} -ATF_TEST_CASE_BODY(path_to_absolute) -{ - using atf::fs::file_info; - using atf::fs::path; - - create_files(); - - { - const path p("."); - path pa = p.to_absolute(); - ATF_REQUIRE(pa.is_absolute()); - - file_info fi(p); - file_info fia(pa); - ATF_REQUIRE_EQ(fi.get_device(), fia.get_device()); - ATF_REQUIRE_EQ(fi.get_inode(), fia.get_inode()); - } - - { - const path p("files/reg"); - path pa = p.to_absolute(); - ATF_REQUIRE(pa.is_absolute()); - - file_info fi(p); - file_info fia(pa); - ATF_REQUIRE_EQ(fi.get_device(), fia.get_device()); - ATF_REQUIRE_EQ(fi.get_inode(), fia.get_inode()); - } -} - -ATF_TEST_CASE(path_op_less); -ATF_TEST_CASE_HEAD(path_op_less) -{ - set_md_var("descr", "Tests that the path's less-than operator works"); -} -ATF_TEST_CASE_BODY(path_op_less) -{ - using atf::fs::path; - - create_files(); - - ATF_REQUIRE(!(path("aaa") < path("aaa"))); - - ATF_REQUIRE( path("aab") < path("abc")); - ATF_REQUIRE(!(path("abc") < path("aab"))); -} - -// ------------------------------------------------------------------------ -// Test cases for the "directory" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(directory_read); -ATF_TEST_CASE_HEAD(directory_read) -{ - set_md_var("descr", "Tests the directory class creation, which reads " - "the contents of a directory"); -} -ATF_TEST_CASE_BODY(directory_read) -{ - using atf::fs::directory; - using atf::fs::path; - - create_files(); - - directory d(path("files")); - ATF_REQUIRE_EQ(d.size(), 4); - ATF_REQUIRE(d.find(".") != d.end()); - ATF_REQUIRE(d.find("..") != d.end()); - ATF_REQUIRE(d.find("dir") != d.end()); - ATF_REQUIRE(d.find("reg") != d.end()); -} - -ATF_TEST_CASE(directory_file_info); -ATF_TEST_CASE_HEAD(directory_file_info) -{ - set_md_var("descr", "Tests that the file_info objects attached to the " - "directory are valid"); -} -ATF_TEST_CASE_BODY(directory_file_info) -{ - using atf::fs::directory; - using atf::fs::file_info; - using atf::fs::path; - - create_files(); - - directory d(path("files")); - - { - directory::const_iterator iter = d.find("dir"); - ATF_REQUIRE(iter != d.end()); - const file_info& fi = (*iter).second; - ATF_REQUIRE(fi.get_type() == file_info::dir_type); - } - - { - directory::const_iterator iter = d.find("reg"); - ATF_REQUIRE(iter != d.end()); - const file_info& fi = (*iter).second; - ATF_REQUIRE(fi.get_type() == file_info::reg_type); - } -} - -ATF_TEST_CASE(directory_names); -ATF_TEST_CASE_HEAD(directory_names) -{ - set_md_var("descr", "Tests the directory's names method"); -} -ATF_TEST_CASE_BODY(directory_names) -{ - using atf::fs::directory; - using atf::fs::path; - - create_files(); - - directory d(path("files")); - std::set< std::string > ns = d.names(); - ATF_REQUIRE_EQ(ns.size(), 4); - ATF_REQUIRE(ns.find(".") != ns.end()); - ATF_REQUIRE(ns.find("..") != ns.end()); - ATF_REQUIRE(ns.find("dir") != ns.end()); - ATF_REQUIRE(ns.find("reg") != ns.end()); -} - -// ------------------------------------------------------------------------ -// Test cases for the "file_info" class. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(file_info_stat); -ATF_TEST_CASE_HEAD(file_info_stat) -{ - set_md_var("descr", "Tests the file_info creation and its basic contents"); -} -ATF_TEST_CASE_BODY(file_info_stat) -{ - using atf::fs::file_info; - using atf::fs::path; - - create_files(); - - { - path p("files/dir"); - file_info fi(p); - ATF_REQUIRE(fi.get_type() == file_info::dir_type); - } - - { - path p("files/reg"); - file_info fi(p); - ATF_REQUIRE(fi.get_type() == file_info::reg_type); - } -} - -ATF_TEST_CASE(file_info_perms); -ATF_TEST_CASE_HEAD(file_info_perms) -{ - set_md_var("descr", "Tests the file_info methods to get the file's " - "permissions"); -} -ATF_TEST_CASE_BODY(file_info_perms) -{ - using atf::fs::file_info; - using atf::fs::path; - - path p("file"); - - std::ofstream os(p.c_str()); - os.close(); - -#define perms(ur, uw, ux, gr, gw, gx, othr, othw, othx) \ - { \ - file_info fi(p); \ - ATF_REQUIRE(fi.is_owner_readable() == ur); \ - ATF_REQUIRE(fi.is_owner_writable() == uw); \ - ATF_REQUIRE(fi.is_owner_executable() == ux); \ - ATF_REQUIRE(fi.is_group_readable() == gr); \ - ATF_REQUIRE(fi.is_group_writable() == gw); \ - ATF_REQUIRE(fi.is_group_executable() == gx); \ - ATF_REQUIRE(fi.is_other_readable() == othr); \ - ATF_REQUIRE(fi.is_other_writable() == othw); \ - ATF_REQUIRE(fi.is_other_executable() == othx); \ - } - - ::chmod(p.c_str(), 0000); - perms(false, false, false, false, false, false, false, false, false); - - ::chmod(p.c_str(), 0001); - perms(false, false, false, false, false, false, false, false, true); - - ::chmod(p.c_str(), 0010); - perms(false, false, false, false, false, true, false, false, false); - - ::chmod(p.c_str(), 0100); - perms(false, false, true, false, false, false, false, false, false); - - ::chmod(p.c_str(), 0002); - perms(false, false, false, false, false, false, false, true, false); - - ::chmod(p.c_str(), 0020); - perms(false, false, false, false, true, false, false, false, false); - - ::chmod(p.c_str(), 0200); - perms(false, true, false, false, false, false, false, false, false); - - ::chmod(p.c_str(), 0004); - perms(false, false, false, false, false, false, true, false, false); - - ::chmod(p.c_str(), 0040); - perms(false, false, false, true, false, false, false, false, false); - - ::chmod(p.c_str(), 0400); - perms(true, false, false, false, false, false, false, false, false); - - ::chmod(p.c_str(), 0644); - perms(true, true, false, true, false, false, true, false, false); - - ::chmod(p.c_str(), 0755); - perms(true, true, true, true, false, true, true, false, true); - - ::chmod(p.c_str(), 0777); - perms(true, true, true, true, true, true, true, true, true); - -#undef perms -} - -// ------------------------------------------------------------------------ -// Test cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(exists); -ATF_TEST_CASE_HEAD(exists) -{ - set_md_var("descr", "Tests the exists function"); -} -ATF_TEST_CASE_BODY(exists) -{ - using atf::fs::exists; - using atf::fs::path; - - create_files(); - - ATF_REQUIRE( exists(path("files"))); - ATF_REQUIRE(!exists(path("file"))); - ATF_REQUIRE(!exists(path("files2"))); - - ATF_REQUIRE( exists(path("files/."))); - ATF_REQUIRE( exists(path("files/.."))); - ATF_REQUIRE( exists(path("files/dir"))); - ATF_REQUIRE( exists(path("files/reg"))); - ATF_REQUIRE(!exists(path("files/foo"))); -} - -ATF_TEST_CASE(is_executable); -ATF_TEST_CASE_HEAD(is_executable) -{ - set_md_var("descr", "Tests the is_executable function"); -} -ATF_TEST_CASE_BODY(is_executable) -{ - using atf::fs::is_executable; - using atf::fs::path; - - create_files(); - - ATF_REQUIRE( is_executable(path("files"))); - ATF_REQUIRE( is_executable(path("files/."))); - ATF_REQUIRE( is_executable(path("files/.."))); - ATF_REQUIRE( is_executable(path("files/dir"))); - - ATF_REQUIRE(!is_executable(path("non-existent"))); - - ATF_REQUIRE(!is_executable(path("files/reg"))); - ATF_REQUIRE(::chmod("files/reg", 0755) != -1); - ATF_REQUIRE( is_executable(path("files/reg"))); -} - -ATF_TEST_CASE(remove); -ATF_TEST_CASE_HEAD(remove) -{ - set_md_var("descr", "Tests the remove function"); -} -ATF_TEST_CASE_BODY(remove) -{ - using atf::fs::exists; - using atf::fs::path; - using atf::fs::remove; - - create_files(); - - ATF_REQUIRE( exists(path("files/reg"))); - remove(path("files/reg")); - ATF_REQUIRE(!exists(path("files/reg"))); - - ATF_REQUIRE( exists(path("files/dir"))); - ATF_REQUIRE_THROW(atf::system_error, remove(path("files/dir"))); - ATF_REQUIRE( exists(path("files/dir"))); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the tests for the "path" class. - ATF_ADD_TEST_CASE(tcs, path_normalize); - ATF_ADD_TEST_CASE(tcs, path_is_absolute); - ATF_ADD_TEST_CASE(tcs, path_is_root); - ATF_ADD_TEST_CASE(tcs, path_branch_path); - ATF_ADD_TEST_CASE(tcs, path_leaf_name); - ATF_ADD_TEST_CASE(tcs, path_compare_equal); - ATF_ADD_TEST_CASE(tcs, path_compare_different); - ATF_ADD_TEST_CASE(tcs, path_concat); - ATF_ADD_TEST_CASE(tcs, path_to_absolute); - ATF_ADD_TEST_CASE(tcs, path_op_less); - - // Add the tests for the "file_info" class. - ATF_ADD_TEST_CASE(tcs, file_info_stat); - ATF_ADD_TEST_CASE(tcs, file_info_perms); - - // Add the tests for the "directory" class. - ATF_ADD_TEST_CASE(tcs, directory_read); - ATF_ADD_TEST_CASE(tcs, directory_names); - ATF_ADD_TEST_CASE(tcs, directory_file_info); - - // Add the tests for the free functions. - ATF_ADD_TEST_CASE(tcs, exists); - ATF_ADD_TEST_CASE(tcs, is_executable); - ATF_ADD_TEST_CASE(tcs, remove); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/exceptions_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/exceptions_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/exceptions_test.cpp (nonexistent) @@ -1,148 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include "../../atf-c/error.h" -} - -#include -#include - -#include "../macros.hpp" - -#include "exceptions.hpp" -#include "sanity.hpp" - -// ------------------------------------------------------------------------ -// The "test" error. -// ------------------------------------------------------------------------ - -extern "C" { - -struct test_error_data { - const char* m_msg; -}; -typedef struct test_error_data test_error_data_t; - -static -void -test_format(const atf_error_t err, char *buf, size_t buflen) -{ - const test_error_data_t* data; - - PRE(atf_error_is(err, "test")); - - data = static_cast< const test_error_data_t * >(atf_error_data(err)); - snprintf(buf, buflen, "Message: %s", data->m_msg); -} - -static -atf_error_t -test_error(const char* msg) -{ - atf_error_t err; - test_error_data_t data; - - data.m_msg = msg; - - err = atf_error_new("test", &data, sizeof(data), test_format); - - return err; -} - -} // extern - -// ------------------------------------------------------------------------ -// Tests cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(throw_atf_error_libc); -ATF_TEST_CASE_HEAD(throw_atf_error_libc) -{ - set_md_var("descr", "Tests the throw_atf_error function when raising " - "a libc error"); -} -ATF_TEST_CASE_BODY(throw_atf_error_libc) -{ - try { - atf::throw_atf_error(atf_libc_error(1, "System error 1")); - } catch (const atf::system_error& e) { - ATF_REQUIRE(e.code() == 1); - ATF_REQUIRE(std::string(e.what()).find("System error 1") != - std::string::npos); - } catch (const std::exception& e) { - ATF_FAIL(std::string("Got unexpected exception: ") + e.what()); - } -} - -ATF_TEST_CASE(throw_atf_error_no_memory); -ATF_TEST_CASE_HEAD(throw_atf_error_no_memory) -{ - set_md_var("descr", "Tests the throw_atf_error function when raising " - "a no_memory error"); -} -ATF_TEST_CASE_BODY(throw_atf_error_no_memory) -{ - try { - atf::throw_atf_error(atf_no_memory_error()); - } catch (const std::bad_alloc&) { - } catch (const std::exception& e) { - ATF_FAIL(std::string("Got unexpected exception: ") + e.what()); - } -} - -ATF_TEST_CASE(throw_atf_error_unknown); -ATF_TEST_CASE_HEAD(throw_atf_error_unknown) -{ - set_md_var("descr", "Tests the throw_atf_error function when raising " - "an unknown error"); -} -ATF_TEST_CASE_BODY(throw_atf_error_unknown) -{ - try { - atf::throw_atf_error(test_error("The message")); - } catch (const std::runtime_error& e) { - const std::string msg = e.what(); - ATF_REQUIRE(msg.find("The message") != std::string::npos); - } catch (const std::exception& e) { - ATF_FAIL(std::string("Got unexpected exception: ") + e.what()); - } -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test cases for the free functions. - ATF_ADD_TEST_CASE(tcs, throw_atf_error_libc); - ATF_ADD_TEST_CASE(tcs, throw_atf_error_no_memory); - ATF_ADD_TEST_CASE(tcs, throw_atf_error_unknown); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/detail/expand_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/detail/expand_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/detail/expand_test.cpp (nonexistent) @@ -1,272 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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 - -#include "../macros.hpp" - -#include "expand.hpp" - -// XXX Many of the tests here are duplicated in atf-c/t_expand. Should -// find a way to easily share them, or maybe remove the ones here. - -// ------------------------------------------------------------------------ -// Test cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(is_glob); -ATF_TEST_CASE_HEAD(is_glob) -{ - set_md_var("descr", "Tests the is_glob function."); -} -ATF_TEST_CASE_BODY(is_glob) -{ - using atf::expand::is_glob; - - ATF_REQUIRE(!is_glob("")); - ATF_REQUIRE(!is_glob("a")); - ATF_REQUIRE(!is_glob("foo")); - - ATF_REQUIRE( is_glob("*")); - ATF_REQUIRE( is_glob("a*")); - ATF_REQUIRE( is_glob("*a")); - ATF_REQUIRE( is_glob("a*b")); - - ATF_REQUIRE( is_glob("?")); - ATF_REQUIRE( is_glob("a?")); - ATF_REQUIRE( is_glob("?a")); - ATF_REQUIRE( is_glob("a?b")); -} - -ATF_TEST_CASE(matches_glob_plain); -ATF_TEST_CASE_HEAD(matches_glob_plain) -{ - set_md_var("descr", "Tests the matches_glob function by using plain " - "text strings as patterns only."); -} -ATF_TEST_CASE_BODY(matches_glob_plain) -{ - using atf::expand::matches_glob; - - ATF_REQUIRE( matches_glob("", "")); - ATF_REQUIRE(!matches_glob("a", "")); - ATF_REQUIRE(!matches_glob("", "a")); - - ATF_REQUIRE( matches_glob("ab", "ab")); - ATF_REQUIRE(!matches_glob("abc", "ab")); - ATF_REQUIRE(!matches_glob("ab", "abc")); -} - -ATF_TEST_CASE(matches_glob_star); -ATF_TEST_CASE_HEAD(matches_glob_star) -{ - set_md_var("descr", "Tests the matches_glob function by using the '*' " - "meta-character as part of the pattern."); -} -ATF_TEST_CASE_BODY(matches_glob_star) -{ - using atf::expand::matches_glob; - - ATF_REQUIRE( matches_glob("*", "")); - ATF_REQUIRE( matches_glob("*", "a")); - ATF_REQUIRE( matches_glob("*", "ab")); - - ATF_REQUIRE(!matches_glob("a*", "")); - ATF_REQUIRE( matches_glob("a*", "a")); - ATF_REQUIRE( matches_glob("a*", "aa")); - ATF_REQUIRE( matches_glob("a*", "ab")); - ATF_REQUIRE( matches_glob("a*", "abc")); - ATF_REQUIRE(!matches_glob("a*", "ba")); - - ATF_REQUIRE( matches_glob("*a", "a")); - ATF_REQUIRE( matches_glob("*a", "ba")); - ATF_REQUIRE(!matches_glob("*a", "bc")); - ATF_REQUIRE(!matches_glob("*a", "bac")); - - ATF_REQUIRE( matches_glob("*ab", "ab")); - ATF_REQUIRE( matches_glob("*ab", "aab")); - ATF_REQUIRE( matches_glob("*ab", "aaab")); - ATF_REQUIRE( matches_glob("*ab", "bab")); - ATF_REQUIRE(!matches_glob("*ab", "bcb")); - ATF_REQUIRE(!matches_glob("*ab", "bacb")); - - ATF_REQUIRE( matches_glob("a*b", "ab")); - ATF_REQUIRE( matches_glob("a*b", "acb")); - ATF_REQUIRE( matches_glob("a*b", "acdeb")); - ATF_REQUIRE(!matches_glob("a*b", "acdebz")); - ATF_REQUIRE(!matches_glob("a*b", "zacdeb")); -} - -ATF_TEST_CASE(matches_glob_question); -ATF_TEST_CASE_HEAD(matches_glob_question) -{ - set_md_var("descr", "Tests the matches_glob function by using the '?' " - "meta-character as part of the pattern."); -} -ATF_TEST_CASE_BODY(matches_glob_question) -{ - using atf::expand::matches_glob; - - ATF_REQUIRE(!matches_glob("?", "")); - ATF_REQUIRE( matches_glob("?", "a")); - ATF_REQUIRE(!matches_glob("?", "ab")); - - ATF_REQUIRE( matches_glob("?", "b")); - ATF_REQUIRE( matches_glob("?", "c")); - - ATF_REQUIRE( matches_glob("a?", "ab")); - ATF_REQUIRE( matches_glob("a?", "ac")); - ATF_REQUIRE(!matches_glob("a?", "ca")); - - ATF_REQUIRE( matches_glob("???", "abc")); - ATF_REQUIRE( matches_glob("???", "def")); - ATF_REQUIRE(!matches_glob("???", "a")); - ATF_REQUIRE(!matches_glob("???", "ab")); - ATF_REQUIRE(!matches_glob("???", "abcd")); -} - -ATF_TEST_CASE(expand_glob_base); -ATF_TEST_CASE_HEAD(expand_glob_base) -{ - set_md_var("descr", "Tests the expand_glob function with random " - "patterns."); -} -ATF_TEST_CASE_BODY(expand_glob_base) -{ - using atf::expand::expand_glob; - - std::vector< std::string > candidates; - candidates.push_back("foo"); - candidates.push_back("bar"); - candidates.push_back("baz"); - candidates.push_back("foobar"); - candidates.push_back("foobarbaz"); - candidates.push_back("foobarbazfoo"); - - std::vector< std::string > exps; - - exps = expand_glob("foo", candidates); - ATF_REQUIRE_EQ(exps.size(), 1); - ATF_REQUIRE(exps[0] == "foo"); - - exps = expand_glob("bar", candidates); - ATF_REQUIRE_EQ(exps.size(), 1); - ATF_REQUIRE(exps[0] == "bar"); - - exps = expand_glob("foo*", candidates); - ATF_REQUIRE_EQ(exps.size(), 4); - ATF_REQUIRE(exps[0] == "foo"); - ATF_REQUIRE(exps[1] == "foobar"); - ATF_REQUIRE(exps[2] == "foobarbaz"); - ATF_REQUIRE(exps[3] == "foobarbazfoo"); - - exps = expand_glob("*foo", candidates); - ATF_REQUIRE_EQ(exps.size(), 2); - ATF_REQUIRE(exps[0] == "foo"); - ATF_REQUIRE(exps[1] == "foobarbazfoo"); - - exps = expand_glob("*foo*", candidates); - ATF_REQUIRE_EQ(exps.size(), 4); - ATF_REQUIRE(exps[0] == "foo"); - ATF_REQUIRE(exps[1] == "foobar"); - ATF_REQUIRE(exps[2] == "foobarbaz"); - ATF_REQUIRE(exps[3] == "foobarbazfoo"); - - exps = expand_glob("ba", candidates); - ATF_REQUIRE_EQ(exps.size(), 0); - - exps = expand_glob("ba*", candidates); - ATF_REQUIRE_EQ(exps.size(), 2); - ATF_REQUIRE(exps[0] == "bar"); - ATF_REQUIRE(exps[1] == "baz"); - - exps = expand_glob("*ba", candidates); - ATF_REQUIRE_EQ(exps.size(), 0); - - exps = expand_glob("*ba*", candidates); - ATF_REQUIRE_EQ(exps.size(), 5); - ATF_REQUIRE(exps[0] == "bar"); - ATF_REQUIRE(exps[1] == "baz"); - ATF_REQUIRE(exps[2] == "foobar"); - ATF_REQUIRE(exps[3] == "foobarbaz"); - ATF_REQUIRE(exps[4] == "foobarbazfoo"); -} - -ATF_TEST_CASE(expand_glob_tps); -ATF_TEST_CASE_HEAD(expand_glob_tps) -{ - set_md_var("descr", "Tests the expand_glob function with patterns that " - "match typical test program names. This is just a subcase " - "of expand_base, but it is nice to make sure that it really " - "works."); -} -ATF_TEST_CASE_BODY(expand_glob_tps) -{ - using atf::expand::expand_glob; - - std::vector< std::string > candidates; - candidates.push_back("Atffile"); - candidates.push_back("h_foo"); - candidates.push_back("t_foo"); - candidates.push_back("t_bar"); - candidates.push_back("t_baz"); - candidates.push_back("foo_helper"); - candidates.push_back("foo_test"); - candidates.push_back("bar_test"); - candidates.push_back("baz_test"); - - std::vector< std::string > exps; - - exps = expand_glob("t_*", candidates); - ATF_REQUIRE_EQ(exps.size(), 3); - ATF_REQUIRE(exps[0] == "t_foo"); - ATF_REQUIRE(exps[1] == "t_bar"); - ATF_REQUIRE(exps[2] == "t_baz"); - - exps = expand_glob("*_test", candidates); - ATF_REQUIRE_EQ(exps.size(), 3); - ATF_REQUIRE(exps[0] == "foo_test"); - ATF_REQUIRE(exps[1] == "bar_test"); - ATF_REQUIRE(exps[2] == "baz_test"); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the tests for the free functions. - ATF_ADD_TEST_CASE(tcs, is_glob); - ATF_ADD_TEST_CASE(tcs, matches_glob_plain); - ATF_ADD_TEST_CASE(tcs, matches_glob_star); - ATF_ADD_TEST_CASE(tcs, matches_glob_question); - ATF_ADD_TEST_CASE(tcs, expand_glob_base); - ATF_ADD_TEST_CASE(tcs, expand_glob_tps); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/atf-c++-api.3 =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/atf-c++-api.3 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/atf-c++-api.3 (nonexistent) @@ -1,404 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd December 10, 2010 -.Dt ATF-C++-API 3 -.Os -.Sh NAME -.Nm ATF_ADD_TEST_CASE , -.Nm ATF_CHECK_ERRNO , -.Nm ATF_FAIL , -.Nm ATF_INIT_TEST_CASES , -.Nm ATF_PASS , -.Nm ATF_REQUIRE , -.Nm ATF_REQUIRE_EQ , -.Nm ATF_REQUIRE_ERRNO , -.Nm ATF_REQUIRE_IN , -.Nm ATF_REQUIRE_MATCH , -.Nm ATF_REQUIRE_NOT_IN , -.Nm ATF_REQUIRE_THROW , -.Nm ATF_REQUIRE_THROW_RE , -.Nm ATF_SKIP , -.Nm ATF_TEST_CASE , -.Nm ATF_TEST_CASE_BODY , -.Nm ATF_TEST_CASE_CLEANUP , -.Nm ATF_TEST_CASE_HEAD , -.Nm ATF_TEST_CASE_WITH_CLEANUP , -.Nm ATF_TEST_CASE_WITHOUT_HEAD , -.Nd C++ API to write ATF-based test programs -.Sh SYNOPSIS -.In atf-c++.hpp -.Fn ATF_ADD_TEST_CASE "tcs" "name" -.Fn ATF_CHECK_ERRNO "exp_errno" "bool_expression" -.Fn ATF_FAIL "reason" -.Fn ATF_INIT_TEST_CASES "tcs" -.Fn ATF_PASS -.Fn ATF_REQUIRE "expression" -.Fn ATF_REQUIRE_EQ "expression_1" "expression_2" -.Fn ATF_REQUIRE_ERRNO "exp_errno" "bool_expression" -.Fn ATF_REQUIRE_IN "element" "collection" -.Fn ATF_REQUIRE_MATCH "regexp" "string_expression" -.Fn ATF_REQUIRE_NOT_IN "element" "collection" -.Fn ATF_REQUIRE_THROW "expected_exception" "statement" -.Fn ATF_REQUIRE_THROW_RE "expected_exception" "regexp" "statement" -.Fn ATF_SKIP "reason" -.Fn ATF_TEST_CASE "name" -.Fn ATF_TEST_CASE_BODY "name" -.Fn ATF_TEST_CASE_CLEANUP "name" -.Fn ATF_TEST_CASE_HEAD "name" -.Fn ATF_TEST_CASE_WITH_CLEANUP "name" -.Fn ATF_TEST_CASE_WITHOUT_HEAD "name" -.Sh DESCRIPTION -ATF provides a mostly-macro-based programming interface to implement test -programs in C or C++. -This interface is backed by a C++ implementation, but this fact is -hidden from the developer as much as possible through the use of -macros to simplify programming. -However, the use of C++ is not hidden everywhere and while you can -implement test cases without knowing anything at all about the object model -underneath the provided calls, you might need some minimum notions of the -language in very specific circumstances. -.Pp -C++-based test programs always follow this template: -.Bd -literal -offset indent -extern "C" { -.Ns ... C-specific includes go here ... -} - -.Ns ... C++-specific includes go here ... - -#include - -ATF_TEST_CASE(tc1); -ATF_TEST_CASE_HEAD(tc1) -{ - ... first test case's header ... -} -ATF_TEST_CASE_BODY(tc1) -{ - ... first test case's body ... -} - -ATF_TEST_CASE_WITH_CLEANUP(tc2); -ATF_TEST_CASE_HEAD(tc2) -{ - ... second test case's header ... -} -ATF_TEST_CASE_BODY(tc2) -{ - ... second test case's body ... -} -ATF_TEST_CASE_CLEANUP(tc2) -{ - ... second test case's cleanup ... -} - -ATF_TEST_CASE(tc3); -ATF_TEST_CASE_BODY(tc3) -{ - ... third test case's body ... -} - -.Ns ... additional test cases ... - -ATF_INIT_TEST_CASES(tcs) -{ - ATF_ADD_TEST_CASE(tcs, tc1); - ATF_ADD_TEST_CASE(tcs, tc2); - ATF_ADD_TEST_CASE(tcs, tc3); - ... add additional test cases ... -} -.Ed -.Ss Definition of test cases -Test cases have an identifier and are composed of three different parts: -the header, the body and an optional cleanup routine, all of which are -described in -.Xr atf-test-case 4 . -To define test cases, one can use the -.Fn ATF_TEST_CASE , -.Fn ATF_TEST_CASE_WITH_CLEANUP -or the -.Fn ATF_TEST_CASE_WITHOUT_HEAD -macros, which take a single parameter specifiying the test case's -name. -.Fn ATF_TEST_CASE , -requires to define a head and a body for the test case, -.Fn ATF_TEST_CASE_WITH_CLEANUP -requires to define a head, a body and a cleanup for the test case and -.Fn ATF_TEST_CASE_WITHOUT_HEAD -requires only a body for the test case. -It is important to note that these -.Em do not -set the test case up for execution when the program is run. -In order to do so, a later registration is needed through the -.Fn ATF_ADD_TEST_CASE -macro detailed in -.Sx Program initialization . -.Pp -Later on, one must define the three parts of the body by means of three -functions. -Their headers are given by the -.Fn ATF_TEST_CASE_HEAD , -.Fn ATF_TEST_CASE_BODY -and -.Fn ATF_TEST_CASE_CLEANUP -macros, all of which take the test case's name. -Following each of these, a block of code is expected, surrounded by the -opening and closing brackets. -.Ss Program initialization -The library provides a way to easily define the test program's -.Fn main -function. -You should never define one on your own, but rely on the -library to do it for you. -This is done by using the -.Fn ATF_INIT_TEST_CASES -macro, which is passed the name of the list that will hold the test cases. -This name can be whatever you want as long as it is a valid variable value. -.Pp -After the macro, you are supposed to provide the body of a function, which -should only use the -.Fn ATF_ADD_TEST_CASE -macro to register the test cases the test program will execute. -The first parameter of this macro matches the name you provided in the -former call. -.Ss Header definitions -The test case's header can define the meta-data by using the -.Fn set -method, which takes two parameters: the first one specifies the -meta-data variable to be set and the second one specifies its value. -Both of them are strings. -.Ss Configuration variables -The test case has read-only access to the current configuration variables -by means of the -.Ft bool -.Fn has_config_var -and the -.Ft std::string -.Fn get_config_var -methods, which can be called in any of the three parts of a test case. -.Ss Access to the source directory -It is possible to get the path to the test case's source directory from any -of its three components by querying the -.Sq srcdir -configuration variable. -.Ss Requiring programs -Aside from the -.Va require.progs -meta-data variable available in the header only, one can also check for -additional programs in the test case's body by using the -.Fn require_prog -function, which takes the base name or full path of a single binary. -Relative paths are forbidden. -If it is not found, the test case will be automatically skipped. -.Ss Test case finalization -The test case finalizes either when the body reaches its end, at which -point the test is assumed to have -.Em passed , -or at any explicit call to -.Fn ATF_PASS , -.Fn ATF_FAIL -or -.Fn ATF_SKIP . -These three macros terminate the execution of the test case immediately. -The cleanup routine will be processed afterwards in a completely automated -way, regardless of the test case's termination reason. -.Pp -.Fn ATF_PASS -does not take any parameters. -.Fn ATF_FAIL -and -.Fn ATF_SKIP -take a single string that describes why the test case failed or -was skipped, respectively. -It is very important to provide a clear error message in both cases so that -the user can quickly know why the test did not pass. -.Ss Expectations -Everything explained in the previous section changes when the test case -expectations are redefined by the programmer. -.Pp -Each test case has an internal state called -.Sq expect -that describes what the test case expectations are at any point in time. -The value of this property can change during execution by any of: -.Bl -tag -width indent -.It Fn expect_death "reason" -Expects the test case to exit prematurely regardless of the nature of the -exit. -.It Fn expect_exit "exitcode" "reason" -Expects the test case to exit cleanly. -If -.Va exitcode -is not -.Sq -1 , -.Xr atf-run 1 -will validate that the exit code of the test case matches the one provided -in this call. -Otherwise, the exact value will be ignored. -.It Fn expect_fail "reason" -Any failure (be it fatal or non-fatal) raised in this mode is recorded. -However, such failures do not report the test case as failed; instead, the -test case finalizes cleanly and is reported as -.Sq expected failure ; -this report includes the provided -.Fa reason -as part of it. -If no error is raised while running in this mode, then the test case is -reported as -.Sq failed . -.Pp -This mode is useful to reproduce actual known bugs in tests. -Whenever the developer fixes the bug later on, the test case will start -reporting a failure, signaling the developer that the test case must be -adjusted to the new conditions. -In this situation, it is useful, for example, to set -.Fa reason -as the bug number for tracking purposes. -.It Fn expect_pass -This is the normal mode of execution. -In this mode, any failure is reported as such to the user and the test case -is marked as -.Sq failed . -.It Fn expect_race "reason" -Any failure or timeout during the execution of the test case will be -considered as if a race condition has been triggered and reported as such. -If no problems arise, the test will continue execution as usual. -.It Fn expect_signal "signo" "reason" -Expects the test case to terminate due to the reception of a signal. -If -.Va signo -is not -.Sq -1 , -.Xr atf-run 1 -will validate that the signal that terminated the test case matches the one -provided in this call. -Otherwise, the exact value will be ignored. -.It Fn expect_timeout "reason" -Expects the test case to execute for longer than its timeout. -.El -.Ss Helper macros for common checks -The library provides several macros that are very handy in multiple -situations. -These basically check some condition after executing a given statement or -processing a given expression and, if the condition is not met, they -automatically call -.Fn ATF_FAIL -with an appropriate error message. -.Pp -.Fn ATF_REQUIRE -takes an expression and raises a failure if it evaluates to false. -.Pp -.Fn ATF_REQUIRE_EQ -takes two expressions and raises a failure if the two do not evaluate to -the same exact value. -.Pp -.Fn ATF_REQUIRE_IN -takes an element and a collection and validates that the element is present in -the collection. -.Pp -.Fn ATF_REQUIRE_MATCH -takes a regular expression and a string and raises a failure if the regular -expression does not match the string. -.Pp -.Fn ATF_REQUIRE_NOT_IN -takes an element and a collection and validates that the element is not present -in the collection. -.Pp -.Fn ATF_REQUIRE_THROW -takes the name of an exception and a statement and raises a failure if -the statement does not throw the specified exception. -.Fn ATF_REQUIRE_THROW_EQ -takes the name of an exception, a regular expresion and a statement and raises a -failure if the statement does not throw the specified exception and if the -message of the exception does not match the regular expression. -.Pp -.Fn ATF_CHECK_ERRNO -and -.Fn ATF_REQUIRE_ERRNO -take, first, the error code that the check is expecting to find in the -.Va errno -variable and, second, a boolean expression that, if evaluates to true, -means that a call failed and -.Va errno -has to be checked against the first value. -.Sh EXAMPLES -The following shows a complete test program with a single test case that -validates the addition operator: -.Bd -literal -offset indent -#include - -ATF_TEST_CASE(addition); -ATF_TEST_CASE_HEAD(addition) -{ - set("descr", "Sample tests for the addition operator"); -} -ATF_TEST_CASE_BODY(addition) -{ - ATF_REQUIRE_EQ(0 + 0, 0); - ATF_REQUIRE_EQ(0 + 1, 1); - ATF_REQUIRE_EQ(1 + 0, 1); - - ATF_REQUIRE_EQ(1 + 1, 2); - - ATF_REQUIRE_EQ(100 + 200, 300); -} - -ATF_TEST_CASE(open_failure); -ATF_TEST_CASE_HEAD(open_failure) -{ - set("descr", "Sample tests for the open function"); -} -ATF_TEST_CASE_BODY(open_failure) -{ - ATF_REQUIRE_ERRNO(ENOENT, open("non-existent", O_RDONLY) == -1); -} - -ATF_TEST_CASE(known_bug); -ATF_TEST_CASE_HEAD(known_bug) -{ - set("descr", "Reproduces a known bug"); -} -ATF_TEST_CASE_BODY(known_bug) -{ - expect_fail("See bug number foo/bar"); - ATF_REQUIRE_EQ(3, 1 + 1); - expect_pass(); - ATF_REQUIRE_EQ(3, 1 + 2); -} - -ATF_INIT_TEST_CASES(tcs) -{ - ATF_ADD_TEST_CASE(tcs, addition); - ATF_ADD_TEST_CASE(tcs, open_failure); - ATF_ADD_TEST_CASE(tcs, known_bug); -} -.Ed -.Sh SEE ALSO -.Xr atf-test-program 1 , -.Xr atf-test-case 4 , -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/atf-c++/config_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/config_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/config_test.cpp (nonexistent) @@ -1,231 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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 -#include - -#include "config.hpp" -#include "macros.hpp" - -#include "detail/env.hpp" -#include "detail/exceptions.hpp" -#include "detail/test_helpers.hpp" - -static const char *test_value = "env-value"; - -static struct varnames { - const char *lc; - const char *uc; - bool can_be_empty; -} all_vars[] = { - { "atf_arch", "ATF_ARCH", false }, - { "atf_build_cc", "ATF_BUILD_CC", false }, - { "atf_build_cflags", "ATF_BUILD_CFLAGS", true }, - { "atf_build_cpp", "ATF_BUILD_CPP", false }, - { "atf_build_cppflags", "ATF_BUILD_CPPFLAGS", true }, - { "atf_build_cxx", "ATF_BUILD_CXX", false }, - { "atf_build_cxxflags", "ATF_BUILD_CXXFLAGS", true }, - { "atf_confdir", "ATF_CONFDIR", false }, - { "atf_includedir", "ATF_INCLUDEDIR", false }, - { "atf_libdir", "ATF_LIBDIR", false }, - { "atf_libexecdir", "ATF_LIBEXECDIR", false }, - { "atf_machine", "ATF_MACHINE", false }, - { "atf_pkgdatadir", "ATF_PKGDATADIR", false }, - { "atf_shell", "ATF_SHELL", false }, - { "atf_workdir", "ATF_WORKDIR", false }, - { NULL, NULL, false } -}; - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -namespace atf { - namespace config { - void __reinit(void); - } -} - -static -void -set_env_var(const char* name, const char* val) -{ - try { - atf::env::set(name, val); - } catch (const atf::system_error&) { - ATF_FAIL(std::string("set_env_var(") + name + ", " + val + - ") failed"); - } -} - -static -void -unset_env_var(const char* name) -{ - try { - atf::env::unset(name); - } catch (const atf::system_error&) { - ATF_FAIL(std::string("unset_env_var(") + name + ") failed"); - } -} - -static -size_t -all_vars_count(void) -{ - size_t count = 0; - for (const struct varnames* v = all_vars; v->lc != NULL; v++) - count++; - return count; -} - -static -void -unset_all(void) -{ - for (const struct varnames* v = all_vars; v->lc != NULL; v++) - unset_env_var(v->uc); -} - -static -void -compare_one(const char* var, const char* expvalue) -{ - std::cout << "Checking that " << var << " is set to " << expvalue << "\n"; - - for (const struct varnames* v = all_vars; v->lc != NULL; v++) { - if (std::strcmp(v->lc, var) == 0) - ATF_REQUIRE_EQ(atf::config::get(v->lc), test_value); - else - ATF_REQUIRE(atf::config::get(v->lc) != test_value); - } -} - -// ------------------------------------------------------------------------ -// Test cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(get); -ATF_TEST_CASE_HEAD(get) -{ - set_md_var("descr", "Tests the config::get function"); -} -ATF_TEST_CASE_BODY(get) -{ - // Unset all known environment variables and make sure the built-in - // values do not match the bogus value we will use for testing. - unset_all(); - atf::config::__reinit(); - for (const struct varnames* v = all_vars; v->lc != NULL; v++) - ATF_REQUIRE(atf::config::get(v->lc) != test_value); - - // Test the behavior of empty values. - for (const struct varnames* v = all_vars; v->lc != NULL; v++) { - unset_all(); - if (!atf::config::get(v->lc).empty()) { - set_env_var(v->uc, ""); - atf::config::__reinit(); - if (v->can_be_empty) - ATF_REQUIRE(atf::config::get(v->lc).empty()); - else - ATF_REQUIRE(!atf::config::get(v->lc).empty()); - } - } - - // Check if the ATF_ARCH variable is recognized. - for (const struct varnames* v = all_vars; v->lc != NULL; v++) { - unset_all(); - set_env_var(v->uc, test_value); - atf::config::__reinit(); - compare_one(v->lc, test_value); - } -} - -ATF_TEST_CASE(get_all); -ATF_TEST_CASE_HEAD(get_all) -{ - set_md_var("descr", "Tests the config::get_all function"); -} -ATF_TEST_CASE_BODY(get_all) -{ - atf::config::__reinit(); - - // Check that the valid variables, and only those, are returned. - std::map< std::string, std::string > vars = atf::config::get_all(); - ATF_REQUIRE_EQ(vars.size(), all_vars_count()); - for (const struct varnames* v = all_vars; v->lc != NULL; v++) - ATF_REQUIRE(vars.find(v->lc) != vars.end()); -} - -ATF_TEST_CASE(has); -ATF_TEST_CASE_HEAD(has) -{ - set_md_var("descr", "Tests the config::has function"); -} -ATF_TEST_CASE_BODY(has) -{ - atf::config::__reinit(); - - // Check for all the variables that must exist. - for (const struct varnames* v = all_vars; v->lc != NULL; v++) - ATF_REQUIRE(atf::config::has(v->lc)); - - // Same as above, but using uppercase (which is incorrect). - for (const struct varnames* v = all_vars; v->lc != NULL; v++) - ATF_REQUIRE(!atf::config::has(v->uc)); - - // Check for some other variables that cannot exist. - ATF_REQUIRE(!atf::config::has("foo")); - ATF_REQUIRE(!atf::config::has("BAR")); - ATF_REQUIRE(!atf::config::has("atf_foo")); - ATF_REQUIRE(!atf::config::has("ATF_BAR")); - ATF_REQUIRE(!atf::config::has("atf_shel")); - ATF_REQUIRE(!atf::config::has("atf_shells")); -} - -// ------------------------------------------------------------------------ -// Tests cases for the header file. -// ------------------------------------------------------------------------ - -HEADER_TC(include, "atf-c++/config.hpp"); - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test cases for the free functions. - ATF_ADD_TEST_CASE(tcs, has); - ATF_ADD_TEST_CASE(tcs, get); - ATF_ADD_TEST_CASE(tcs, get_all); - - // Add the test cases for the header file. - ATF_ADD_TEST_CASE(tcs, include); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/config.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/config.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/config.hpp (nonexistent) @@ -1,75 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_CONFIG_HPP_) -#define _ATF_CXX_CONFIG_HPP_ - -#include -#include - -namespace atf { - -namespace config { - -//! -//! \brief Gets a build-time configuration variable's value. -//! -//! Given the name of a build-time configuration variable, returns its -//! textual value. The user is free to override these by setting their -//! corresponding environment variables. Therefore always use this -//! interface to get the value of these variables. -//! -//! \pre The variable must exist. -//! -const std::string& get(const std::string&); - -//! -//! \brief Returns all the build-time configuration variables. -//! -//! Returns a name to value map containing all build-time configuration -//! variables. -//! -const std::map< std::string, std::string >& get_all(void); - -//! -//! \brief Checks whether a build-time configuration variable exists. -//! -//! Given the name of a build-time configuration variable, checks -//! whether it is defined and returns a boolean indicating this -//! condition. The program only has to use this function to sanity-check -//! a variable name provided by the user. Otherwise it can assume that -//! the variables are defined. -//! -bool has(const std::string&); - -} // namespace config - -} // namespace atf - -#endif // !defined(_ATF_CXX_CONFIG_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/config.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/config.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/config.cpp (nonexistent) @@ -1,123 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -// 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 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 - -extern "C" { -#include "atf-c/config.h" -} - -#include "config.hpp" - -#include "detail/env.hpp" -#include "detail/sanity.hpp" - -static std::map< std::string, std::string > m_variables; - -// -// Adds all predefined standard build-time variables to the m_variables -// map, considering the values a user may have provided in the environment. -// -// Can only be called once during the program's lifetime. -// -static -void -init_variables(void) -{ - PRE(m_variables.empty()); - - m_variables["atf_arch"] = atf_config_get("atf_arch"); - m_variables["atf_build_cc"] = atf_config_get("atf_build_cc"); - m_variables["atf_build_cflags"] = atf_config_get("atf_build_cflags"); - m_variables["atf_build_cpp"] = atf_config_get("atf_build_cpp"); - m_variables["atf_build_cppflags"] = atf_config_get("atf_build_cppflags"); - m_variables["atf_build_cxx"] = atf_config_get("atf_build_cxx"); - m_variables["atf_build_cxxflags"] = atf_config_get("atf_build_cxxflags"); - m_variables["atf_confdir"] = atf_config_get("atf_confdir"); - m_variables["atf_includedir"] = atf_config_get("atf_includedir"); - m_variables["atf_libdir"] = atf_config_get("atf_libdir"); - m_variables["atf_libexecdir"] = atf_config_get("atf_libexecdir"); - m_variables["atf_machine"] = atf_config_get("atf_machine"); - m_variables["atf_pkgdatadir"] = atf_config_get("atf_pkgdatadir"); - m_variables["atf_shell"] = atf_config_get("atf_shell"); - m_variables["atf_workdir"] = atf_config_get("atf_workdir"); - - POST(!m_variables.empty()); -} - -const std::string& -atf::config::get(const std::string& varname) -{ - if (m_variables.empty()) - init_variables(); - - PRE(has(varname)); - return m_variables[varname]; -} - -const std::map< std::string, std::string >& -atf::config::get_all(void) -{ - if (m_variables.empty()) - init_variables(); - - return m_variables; -} - -bool -atf::config::has(const std::string& varname) -{ - if (m_variables.empty()) - init_variables(); - - return m_variables.find(varname) != m_variables.end(); -} - -extern "C" { -void __atf_config_reinit(void); -} - -namespace atf { -namespace config { -// -// Auxiliary function for the t_config test program so that it can -// revert the configuration's global status to an empty state and -// do new tests from there on. -// -// Ideally this shouldn't be part of the production library... but -// this is so small that it does not matter. -// -void -__reinit(void) -{ - __atf_config_reinit(); - m_variables.clear(); -} -} // namespace config -} // namespace atf Index: vendor/NetBSD/atf/dist/dist/atf-c++/build.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/build.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/build.cpp (nonexistent) @@ -1,119 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include "atf-c/build.h" -#include "atf-c/error.h" -#include "atf-c/utils.h" -} - -#include "build.hpp" - -#include "detail/exceptions.hpp" -#include "detail/process.hpp" - -namespace impl = atf::build; -#define IMPL_NAME "atf::build" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -inline -atf::process::argv_array -cargv_to_argv(const atf_list_t* l) -{ - std::vector< const char* > aux; - - atf_list_citer_t iter; - atf_list_for_each_c(iter, l) - aux.push_back(static_cast< const char* >(atf_list_citer_data(iter))); - - return atf::process::argv_array(aux); -} - -inline -atf::process::argv_array -cargv_to_argv_and_free(char** l) -{ - try { - atf::process::argv_array argv((const char* const*)l); - atf_utils_free_charpp(l); - return argv; - } catch (...) { - atf_utils_free_charpp(l); - throw; - } -} - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -atf::process::argv_array -impl::c_o(const std::string& sfile, const std::string& ofile, - const atf::process::argv_array& optargs) -{ - char** l; - - atf_error_t err = atf_build_c_o(sfile.c_str(), ofile.c_str(), - optargs.exec_argv(), &l); - if (atf_is_error(err)) - throw_atf_error(err); - - return cargv_to_argv_and_free(l); -} - -atf::process::argv_array -impl::cpp(const std::string& sfile, const std::string& ofile, - const atf::process::argv_array& optargs) -{ - char** l; - - atf_error_t err = atf_build_cpp(sfile.c_str(), ofile.c_str(), - optargs.exec_argv(), &l); - if (atf_is_error(err)) - throw_atf_error(err); - - return cargv_to_argv_and_free(l); -} - -atf::process::argv_array -impl::cxx_o(const std::string& sfile, const std::string& ofile, - const atf::process::argv_array& optargs) -{ - char** l; - - atf_error_t err = atf_build_cxx_o(sfile.c_str(), ofile.c_str(), - optargs.exec_argv(), &l); - if (atf_is_error(err)) - throw_atf_error(err); - - return cargv_to_argv_and_free(l); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/macros_hpp_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/macros_hpp_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/macros_hpp_test.cpp (nonexistent) @@ -1,125 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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 - -#include - -void -atf_check_errno_semicolons(void) -{ - // Check that ATF_CHECK_ERRNO does not contain a semicolon that would - // cause an empty-statement that confuses some compilers. - ATF_CHECK_ERRNO(1, 1 == 1); - ATF_CHECK_ERRNO(2, 2 == 2); -} - -void -atf_require_inside_if(void) -{ - // Make sure that ATF_REQUIRE can be used inside an if statement that - // does not have braces. Earlier versions of it generated an error - // if there was an else clause because they confused the compiler - // by defining an unprotected nested if. - if (true) - ATF_REQUIRE(true); - else - ATF_REQUIRE(true); -} - -void -atf_require_eq_inside_if(void) -{ - // Make sure that ATF_REQUIRE_EQ can be used inside an if statement - // that does not have braces. Earlier versions of it generated an - // error if there was an else clause because they confused the - // compiler by defining an unprotected nested if. - if (true) - ATF_REQUIRE_EQ(true, true); - else - ATF_REQUIRE_EQ(true, true); -} - -void -atf_require_throw_runtime_error(void) -{ - // Check that we can pass std::runtime_error to ATF_REQUIRE_THROW. - // Earlier versions generated a warning because the macro's code also - // attempted to capture this exception, and thus we had a duplicate - // catch clause. - ATF_REQUIRE_THROW(std::runtime_error, (void)0); -} - -void -atf_require_throw_inside_if(void) -{ - // Make sure that ATF_REQUIRE_THROW can be used inside an if statement - // that does not have braces. Earlier versions of it generated an - // error because a trailing ; after a catch block was not allowed. - if (true) - ATF_REQUIRE_THROW(std::runtime_error, (void)0); - else - ATF_REQUIRE_THROW(std::runtime_error, (void)1); -} - -void -atf_require_errno_semicolons(void) -{ - // Check that ATF_REQUIRE_ERRNO does not contain a semicolon that would - // cause an empty-statement that confuses some compilers. - ATF_REQUIRE_ERRNO(1, 1 == 1); - ATF_REQUIRE_ERRNO(2, 2 == 2); -} - -// Test case names should not be expanded during instatiation so that they -// can have the exact same name as macros. -#define TEST_MACRO_1 invalid + name -#define TEST_MACRO_2 invalid + name -#define TEST_MACRO_3 invalid + name -ATF_TEST_CASE(TEST_MACRO_1); -ATF_TEST_CASE_HEAD(TEST_MACRO_1) { } -ATF_TEST_CASE_BODY(TEST_MACRO_1) { } -void instantiate_1(void) { - atf::tests::tc* the_test = new ATF_TEST_CASE_NAME(TEST_MACRO_1)(); - delete the_test; -} -ATF_TEST_CASE_WITH_CLEANUP(TEST_MACRO_2); -ATF_TEST_CASE_HEAD(TEST_MACRO_2) { } -ATF_TEST_CASE_BODY(TEST_MACRO_2) { } -ATF_TEST_CASE_CLEANUP(TEST_MACRO_2) { } -void instatiate_2(void) { - atf::tests::tc* the_test = new ATF_TEST_CASE_NAME(TEST_MACRO_2)(); - delete the_test; -} -ATF_TEST_CASE_WITH_CLEANUP(TEST_MACRO_3); -ATF_TEST_CASE_BODY(TEST_MACRO_3) { } -void instatiate_3(void) { - atf::tests::tc* the_test = new ATF_TEST_CASE_NAME(TEST_MACRO_3)(); - delete the_test; -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/build_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/build_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/build_test.cpp (nonexistent) @@ -1,247 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009 The NetBSD Foundation, Inc. -// 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 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 -#include - -#include "../atf-c/h_build.h" - -#include "build.hpp" -#include "config.hpp" -#include "macros.hpp" - -#include "detail/env.hpp" -#include "detail/process.hpp" -#include "detail/test_helpers.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -namespace atf { - namespace config { - void __reinit(void); - } -} - -template< class C > -void -print_col(const char* prefix, const C& c) -{ - std::cout << prefix << ":"; - for (typename C::const_iterator iter = c.begin(); iter != c.end(); - iter++) - std::cout << " '" << *iter << "'"; - std::cout << "\n"; -} - -static -void -print_array(const char* prefix, const char* const* a) -{ - std::cout << prefix << ":"; - for (; *a != NULL; a++) - std::cout << " '" << *a << "'"; - std::cout << "\n"; -} - -static -void -verbose_set_env(const char *var, const char *val) -{ - std::cout << "Setting " << var << " to '" << val << "'\n"; - atf::env::set(var, val); -} - -static -bool -equal_argvs(const atf::process::argv_array& aa, const char* const* array) -{ - bool equal = true; - - atf::process::argv_array::size_type i = 0; - while (equal && (i < aa.size() && array[i] != NULL)) { - if (std::strcmp(aa[i], array[i]) != 0) - equal = false; - else - i++; - } - - if (equal && (i < aa.size() || array[i] != NULL)) - equal = false; - - return equal; -} - -static -void -check_equal_argvs(const atf::process::argv_array& aa, const char* const* array) -{ - print_array("Expected arguments", array); - print_col("Arguments returned", aa); - - if (!equal_argvs(aa, array)) - ATF_FAIL("The constructed argv differs from the expected values"); -} - -// ------------------------------------------------------------------------ -// Internal test cases. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(equal_argvs); -ATF_TEST_CASE_HEAD(equal_argvs) -{ - set_md_var("descr", "Tests the test case internal equal_argvs function"); -} -ATF_TEST_CASE_BODY(equal_argvs) -{ - { - const char* const array[] = { NULL }; - const char* const argv[] = { NULL }; - - ATF_REQUIRE(equal_argvs(atf::process::argv_array(argv), array)); - } - - { - const char* const array[] = { NULL }; - const char* const argv[] = { "foo", NULL }; - - ATF_REQUIRE(!equal_argvs(atf::process::argv_array(argv), array)); - } - - { - const char* const array[] = { "foo", NULL }; - const char* const argv[] = { NULL }; - - ATF_REQUIRE(!equal_argvs(atf::process::argv_array(argv), array)); - } - - { - const char* const array[] = { "foo", NULL }; - const char* const argv[] = { "foo", NULL }; - - ATF_REQUIRE(equal_argvs(atf::process::argv_array(argv), array)); - } -} - -// ------------------------------------------------------------------------ -// Test cases for the free functions. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(c_o); -ATF_TEST_CASE_HEAD(c_o) -{ - set_md_var("descr", "Tests the c_o function"); -} -ATF_TEST_CASE_BODY(c_o) -{ - for (struct c_o_test* test = c_o_tests; test->expargv[0] != NULL; - test++) { - std::cout << "> Test: " << test->msg << "\n"; - - verbose_set_env("ATF_BUILD_CC", test->cc); - verbose_set_env("ATF_BUILD_CFLAGS", test->cflags); - verbose_set_env("ATF_BUILD_CPPFLAGS", test->cppflags); - atf::config::__reinit(); - - atf::process::argv_array argv = - atf::build::c_o(test->sfile, test->ofile, - atf::process::argv_array(test->optargs)); - check_equal_argvs(argv, test->expargv); - } -} - -ATF_TEST_CASE(cpp); -ATF_TEST_CASE_HEAD(cpp) -{ - set_md_var("descr", "Tests the cpp function"); -} -ATF_TEST_CASE_BODY(cpp) -{ - for (struct cpp_test* test = cpp_tests; test->expargv[0] != NULL; - test++) { - std::cout << "> Test: " << test->msg << "\n"; - - verbose_set_env("ATF_BUILD_CPP", test->cpp); - verbose_set_env("ATF_BUILD_CPPFLAGS", test->cppflags); - atf::config::__reinit(); - - atf::process::argv_array argv = - atf::build::cpp(test->sfile, test->ofile, - atf::process::argv_array(test->optargs)); - check_equal_argvs(argv, test->expargv); - } -} - -ATF_TEST_CASE(cxx_o); -ATF_TEST_CASE_HEAD(cxx_o) -{ - set_md_var("descr", "Tests the cxx_o function"); -} -ATF_TEST_CASE_BODY(cxx_o) -{ - for (struct cxx_o_test* test = cxx_o_tests; test->expargv[0] != NULL; - test++) { - std::cout << "> Test: " << test->msg << "\n"; - - verbose_set_env("ATF_BUILD_CXX", test->cxx); - verbose_set_env("ATF_BUILD_CXXFLAGS", test->cxxflags); - verbose_set_env("ATF_BUILD_CPPFLAGS", test->cppflags); - atf::config::__reinit(); - - atf::process::argv_array argv = - atf::build::cxx_o(test->sfile, test->ofile, - atf::process::argv_array(test->optargs)); - check_equal_argvs(argv, test->expargv); - } -} - -// ------------------------------------------------------------------------ -// Tests cases for the header file. -// ------------------------------------------------------------------------ - -HEADER_TC(include, "atf-c++/build.hpp"); - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the internal test cases. - ATF_ADD_TEST_CASE(tcs, equal_argvs); - - // Add the test cases for the free functions. - ATF_ADD_TEST_CASE(tcs, c_o); - ATF_ADD_TEST_CASE(tcs, cpp); - ATF_ADD_TEST_CASE(tcs, cxx_o); - - // Add the test cases for the header file. - ATF_ADD_TEST_CASE(tcs, include); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/build.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/build.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/build.hpp (nonexistent) @@ -1,57 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_BUILD_HPP_) -#define _ATF_CXX_BUILD_HPP_ - -#include - -namespace atf { - -namespace process { -class argv_array; -} // namespace process - -namespace build { - -// ------------------------------------------------------------------------ -// Free functions. -// ------------------------------------------------------------------------ - -process::argv_array c_o(const std::string&, const std::string&, - const process::argv_array&); -process::argv_array cpp(const std::string&, const std::string&, - const process::argv_array&); -process::argv_array cxx_o(const std::string&, const std::string&, - const process::argv_array&); - -} // namespace build -} // namespace atf - -#endif // !defined(_ATF_CXX_BUILD_HPP_) Index: vendor/NetBSD/atf/dist/dist/atf-c++/macros_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/macros_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/macros_test.cpp (nonexistent) @@ -1,774 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include -} - -#include -#include -#include -#include - -#include "macros.hpp" - -#include "detail/fs.hpp" -#include "detail/process.hpp" -#include "detail/sanity.hpp" -#include "detail/test_helpers.hpp" -#include "detail/text.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static -void -create_ctl_file(const atf::tests::tc& tc, const char *name) -{ - ATF_REQUIRE(open(name, O_CREAT | O_WRONLY | O_TRUNC, 0644) != -1); -} - -// ------------------------------------------------------------------------ -// Auxiliary test cases. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(h_pass); -ATF_TEST_CASE_HEAD(h_pass) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_pass) -{ - create_ctl_file(*this, "before"); - ATF_PASS(); - create_ctl_file(*this, "after"); -} - -ATF_TEST_CASE(h_fail); -ATF_TEST_CASE_HEAD(h_fail) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_fail) -{ - create_ctl_file(*this, "before"); - ATF_FAIL("Failed on purpose"); - create_ctl_file(*this, "after"); -} - -ATF_TEST_CASE(h_skip); -ATF_TEST_CASE_HEAD(h_skip) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_skip) -{ - create_ctl_file(*this, "before"); - ATF_SKIP("Skipped on purpose"); - create_ctl_file(*this, "after"); -} - -ATF_TEST_CASE(h_require); -ATF_TEST_CASE_HEAD(h_require) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_require) -{ - bool condition = atf::text::to_bool(get_config_var("condition")); - - create_ctl_file(*this, "before"); - ATF_REQUIRE(condition); - create_ctl_file(*this, "after"); -} - -ATF_TEST_CASE(h_require_eq); -ATF_TEST_CASE_HEAD(h_require_eq) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_require_eq) -{ - long v1 = atf::text::to_type< long >(get_config_var("v1")); - long v2 = atf::text::to_type< long >(get_config_var("v2")); - - create_ctl_file(*this, "before"); - ATF_REQUIRE_EQ(v1, v2); - create_ctl_file(*this, "after"); -} - -ATF_TEST_CASE(h_require_in); -ATF_TEST_CASE_HEAD(h_require_in) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_require_in) -{ - const std::string element = get_config_var("value"); - - std::set< std::string > collection; - collection.insert("foo"); - collection.insert("bar"); - collection.insert("baz"); - - create_ctl_file(*this, "before"); - ATF_REQUIRE_IN(element, collection); - create_ctl_file(*this, "after"); -} - -ATF_TEST_CASE(h_require_match); -ATF_TEST_CASE_HEAD(h_require_match) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_require_match) -{ - const std::string regexp = get_config_var("regexp"); - const std::string string = get_config_var("string"); - - create_ctl_file(*this, "before"); - ATF_REQUIRE_MATCH(regexp, string); - create_ctl_file(*this, "after"); -} - -ATF_TEST_CASE(h_require_not_in); -ATF_TEST_CASE_HEAD(h_require_not_in) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_require_not_in) -{ - const std::string element = get_config_var("value"); - - std::set< std::string > collection; - collection.insert("foo"); - collection.insert("bar"); - collection.insert("baz"); - - create_ctl_file(*this, "before"); - ATF_REQUIRE_NOT_IN(element, collection); - create_ctl_file(*this, "after"); -} - -ATF_TEST_CASE(h_require_throw); -ATF_TEST_CASE_HEAD(h_require_throw) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_require_throw) -{ - create_ctl_file(*this, "before"); - - if (get_config_var("what") == "throw_int") - ATF_REQUIRE_THROW(std::runtime_error, if (1) throw int(5)); - else if (get_config_var("what") == "throw_rt") - ATF_REQUIRE_THROW(std::runtime_error, - if (1) throw std::runtime_error("e")); - else if (get_config_var("what") == "no_throw_rt") - ATF_REQUIRE_THROW(std::runtime_error, - if (0) throw std::runtime_error("e")); - - create_ctl_file(*this, "after"); -} - -ATF_TEST_CASE(h_require_throw_re); -ATF_TEST_CASE_HEAD(h_require_throw_re) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_require_throw_re) -{ - create_ctl_file(*this, "before"); - - if (get_config_var("what") == "throw_int") - ATF_REQUIRE_THROW_RE(std::runtime_error, "5", if (1) throw int(5)); - else if (get_config_var("what") == "throw_rt_match") - ATF_REQUIRE_THROW_RE(std::runtime_error, "foo.*baz", - if (1) throw std::runtime_error("a foo bar baz")); - else if (get_config_var("what") == "throw_rt_no_match") - ATF_REQUIRE_THROW_RE(std::runtime_error, "foo.*baz", - if (1) throw std::runtime_error("baz foo bar a")); - else if (get_config_var("what") == "no_throw_rt") - ATF_REQUIRE_THROW_RE(std::runtime_error, "e", - if (0) throw std::runtime_error("e")); - - create_ctl_file(*this, "after"); -} - -static int -errno_fail_stub(const int raised_errno) -{ - errno = raised_errno; - return -1; -} - -static int -errno_ok_stub(void) -{ - return 0; -} - -ATF_TEST_CASE(h_check_errno); -ATF_TEST_CASE_HEAD(h_check_errno) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_check_errno) -{ - create_ctl_file(*this, "before"); - - if (get_config_var("what") == "no_error") - ATF_CHECK_ERRNO(-1, errno_ok_stub() == -1); - else if (get_config_var("what") == "errno_ok") - ATF_CHECK_ERRNO(2, errno_fail_stub(2) == -1); - else if (get_config_var("what") == "errno_fail") - ATF_CHECK_ERRNO(3, errno_fail_stub(4) == -1); - else - UNREACHABLE; - - create_ctl_file(*this, "after"); -} - -ATF_TEST_CASE(h_require_errno); -ATF_TEST_CASE_HEAD(h_require_errno) -{ - set_md_var("descr", "Helper test case"); -} -ATF_TEST_CASE_BODY(h_require_errno) -{ - create_ctl_file(*this, "before"); - - if (get_config_var("what") == "no_error") - ATF_REQUIRE_ERRNO(-1, errno_ok_stub() == -1); - else if (get_config_var("what") == "errno_ok") - ATF_REQUIRE_ERRNO(2, errno_fail_stub(2) == -1); - else if (get_config_var("what") == "errno_fail") - ATF_REQUIRE_ERRNO(3, errno_fail_stub(4) == -1); - else - UNREACHABLE; - - create_ctl_file(*this, "after"); -} - -// ------------------------------------------------------------------------ -// Test cases for the macros. -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(pass); -ATF_TEST_CASE_HEAD(pass) -{ - set_md_var("descr", "Tests the ATF_PASS macro"); -} -ATF_TEST_CASE_BODY(pass) -{ - run_h_tc< ATF_TEST_CASE_NAME(h_pass) >(); - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(atf::fs::exists(atf::fs::path("before"))); - ATF_REQUIRE(!atf::fs::exists(atf::fs::path("after"))); -} - -ATF_TEST_CASE(fail); -ATF_TEST_CASE_HEAD(fail) -{ - set_md_var("descr", "Tests the ATF_FAIL macro"); -} -ATF_TEST_CASE_BODY(fail) -{ - run_h_tc< ATF_TEST_CASE_NAME(h_fail) >(); - ATF_REQUIRE(grep_file("result", "^failed: Failed on purpose")); - ATF_REQUIRE(atf::fs::exists(atf::fs::path("before"))); - ATF_REQUIRE(!atf::fs::exists(atf::fs::path("after"))); -} - -ATF_TEST_CASE(skip); -ATF_TEST_CASE_HEAD(skip) -{ - set_md_var("descr", "Tests the ATF_SKIP macro"); -} -ATF_TEST_CASE_BODY(skip) -{ - run_h_tc< ATF_TEST_CASE_NAME(h_skip) >(); - ATF_REQUIRE(grep_file("result", "^skipped: Skipped on purpose")); - ATF_REQUIRE(atf::fs::exists(atf::fs::path("before"))); - ATF_REQUIRE(!atf::fs::exists(atf::fs::path("after"))); -} - -ATF_TEST_CASE(require); -ATF_TEST_CASE_HEAD(require) -{ - set_md_var("descr", "Tests the ATF_REQUIRE macro"); -} -ATF_TEST_CASE_BODY(require) -{ - struct test { - const char *cond; - bool ok; - } *t, tests[] = { - { "false", false }, - { "true", true }, - { NULL, false } - }; - - const atf::fs::path before("before"); - const atf::fs::path after("after"); - - for (t = &tests[0]; t->cond != NULL; t++) { - atf::tests::vars_map config; - config["condition"] = t->cond; - - std::cout << "Checking with a " << t->cond << " value\n"; - - run_h_tc< ATF_TEST_CASE_NAME(h_require) >(config); - - ATF_REQUIRE(atf::fs::exists(before)); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(atf::fs::exists(after)); - } else { - ATF_REQUIRE(grep_file("result", "^failed: .*condition not met")); - ATF_REQUIRE(!atf::fs::exists(after)); - } - - atf::fs::remove(before); - if (t->ok) - atf::fs::remove(after); - } -} - -ATF_TEST_CASE(require_eq); -ATF_TEST_CASE_HEAD(require_eq) -{ - set_md_var("descr", "Tests the ATF_REQUIRE_EQ macro"); -} -ATF_TEST_CASE_BODY(require_eq) -{ - struct test { - const char *v1; - const char *v2; - bool ok; - } *t, tests[] = { - { "1", "1", true }, - { "1", "2", false }, - { "2", "1", false }, - { "2", "2", true }, - { NULL, NULL, false } - }; - - const atf::fs::path before("before"); - const atf::fs::path after("after"); - - for (t = &tests[0]; t->v1 != NULL; t++) { - atf::tests::vars_map config; - config["v1"] = t->v1; - config["v2"] = t->v2; - - std::cout << "Checking with " << t->v1 << ", " << t->v2 - << " and expecting " << (t->ok ? "true" : "false") - << "\n"; - - run_h_tc< ATF_TEST_CASE_NAME(h_require_eq) >(config); - - ATF_REQUIRE(atf::fs::exists(before)); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(atf::fs::exists(after)); - } else { - ATF_REQUIRE(grep_file("result", "^failed: .*v1 != v2")); - ATF_REQUIRE(!atf::fs::exists(after)); - } - - atf::fs::remove(before); - if (t->ok) - atf::fs::remove(after); - } -} - -ATF_TEST_CASE(require_in); -ATF_TEST_CASE_HEAD(require_in) -{ - set_md_var("descr", "Tests the ATF_REQUIRE_IN macro"); -} -ATF_TEST_CASE_BODY(require_in) -{ - struct test { - const char *value; - bool ok; - } *t, tests[] = { - { "foo", true }, - { "bar", true }, - { "baz", true }, - { "xxx", false }, - { "fooa", false }, - { "foo ", false }, - { NULL, false } - }; - - const atf::fs::path before("before"); - const atf::fs::path after("after"); - - for (t = &tests[0]; t->value != NULL; t++) { - atf::tests::vars_map config; - config["value"] = t->value; - - run_h_tc< ATF_TEST_CASE_NAME(h_require_in) >(config); - - ATF_REQUIRE(atf::fs::exists(before)); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(atf::fs::exists(after)); - } else { - ATF_REQUIRE(grep_file("result", "^failed: ")); - ATF_REQUIRE(!atf::fs::exists(after)); - } - - atf::fs::remove(before); - if (t->ok) - atf::fs::remove(after); - } -} - -ATF_TEST_CASE(require_match); -ATF_TEST_CASE_HEAD(require_match) -{ - set_md_var("descr", "Tests the ATF_REQUIRE_MATCH macro"); -} -ATF_TEST_CASE_BODY(require_match) -{ - struct test { - const char *regexp; - const char *string; - bool ok; - } *t, tests[] = { - { "foo.*bar", "this is a foo, bar, baz", true }, - { "bar.*baz", "this is a baz, bar, foo", false }, - { NULL, NULL, false } - }; - - const atf::fs::path before("before"); - const atf::fs::path after("after"); - - for (t = &tests[0]; t->regexp != NULL; t++) { - atf::tests::vars_map config; - config["regexp"] = t->regexp; - config["string"] = t->string; - - std::cout << "Checking with " << t->regexp << ", " << t->string - << " and expecting " << (t->ok ? "true" : "false") - << "\n"; - - run_h_tc< ATF_TEST_CASE_NAME(h_require_match) >(config); - - ATF_REQUIRE(atf::fs::exists(before)); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(atf::fs::exists(after)); - } else { - ATF_REQUIRE(grep_file("result", "^failed: ")); - ATF_REQUIRE(!atf::fs::exists(after)); - } - - atf::fs::remove(before); - if (t->ok) - atf::fs::remove(after); - } -} - -ATF_TEST_CASE(require_not_in); -ATF_TEST_CASE_HEAD(require_not_in) -{ - set_md_var("descr", "Tests the ATF_REQUIRE_NOT_IN macro"); -} -ATF_TEST_CASE_BODY(require_not_in) -{ - struct test { - const char *value; - bool ok; - } *t, tests[] = { - { "foo", false }, - { "bar", false }, - { "baz", false }, - { "xxx", true }, - { "fooa", true }, - { "foo ", true }, - { NULL, false } - }; - - const atf::fs::path before("before"); - const atf::fs::path after("after"); - - for (t = &tests[0]; t->value != NULL; t++) { - atf::tests::vars_map config; - config["value"] = t->value; - - run_h_tc< ATF_TEST_CASE_NAME(h_require_not_in) >(config); - - ATF_REQUIRE(atf::fs::exists(before)); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(atf::fs::exists(after)); - } else { - ATF_REQUIRE(grep_file("result", "^failed: ")); - ATF_REQUIRE(!atf::fs::exists(after)); - } - - atf::fs::remove(before); - if (t->ok) - atf::fs::remove(after); - } -} - -ATF_TEST_CASE(require_throw); -ATF_TEST_CASE_HEAD(require_throw) -{ - set_md_var("descr", "Tests the ATF_REQUIRE_THROW macro"); -} -ATF_TEST_CASE_BODY(require_throw) -{ - struct test { - const char *what; - bool ok; - const char *msg; - } *t, tests[] = { - { "throw_int", false, "unexpected error" }, - { "throw_rt", true, NULL }, - { "no_throw_rt", false, "did not throw" }, - { NULL, false, NULL } - }; - - const atf::fs::path before("before"); - const atf::fs::path after("after"); - - for (t = &tests[0]; t->what != NULL; t++) { - atf::tests::vars_map config; - config["what"] = t->what; - - std::cout << "Checking with " << t->what << " and expecting " - << (t->ok ? "true" : "false") << "\n"; - - run_h_tc< ATF_TEST_CASE_NAME(h_require_throw) >(config); - - ATF_REQUIRE(atf::fs::exists(before)); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(atf::fs::exists(after)); - } else { - std::cout << "Checking that message contains '" << t->msg - << "'\n"; - std::string exp_result = std::string("^failed: .*") + t->msg; - ATF_REQUIRE(grep_file("result", exp_result.c_str())); - ATF_REQUIRE(!atf::fs::exists(after)); - } - - atf::fs::remove(before); - if (t->ok) - atf::fs::remove(after); - } -} - -ATF_TEST_CASE(require_throw_re); -ATF_TEST_CASE_HEAD(require_throw_re) -{ - set_md_var("descr", "Tests the ATF_REQUIRE_THROW_RE macro"); -} -ATF_TEST_CASE_BODY(require_throw_re) -{ - struct test { - const char *what; - bool ok; - const char *msg; - } *t, tests[] = { - { "throw_int", false, "unexpected error" }, - { "throw_rt_match", true, NULL }, - { "throw_rt_no_match", true, "threw.*runtime_error(baz foo bar a).*" - "does not match 'a foo bar baz'" }, - { "no_throw_rt", false, "did not throw" }, - { NULL, false, NULL } - }; - - const atf::fs::path before("before"); - const atf::fs::path after("after"); - - for (t = &tests[0]; t->what != NULL; t++) { - atf::tests::vars_map config; - config["what"] = t->what; - - std::cout << "Checking with " << t->what << " and expecting " - << (t->ok ? "true" : "false") << "\n"; - - run_h_tc< ATF_TEST_CASE_NAME(h_require_throw) >(config); - - ATF_REQUIRE(atf::fs::exists(before)); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(atf::fs::exists(after)); - } else { - std::cout << "Checking that message contains '" << t->msg - << "'\n"; - std::string exp_result = std::string("^failed: .*") + t->msg; - ATF_REQUIRE(grep_file("result", exp_result.c_str())); - ATF_REQUIRE(!atf::fs::exists(after)); - } - - atf::fs::remove(before); - if (t->ok) - atf::fs::remove(after); - } -} - -ATF_TEST_CASE(check_errno); -ATF_TEST_CASE_HEAD(check_errno) -{ - set_md_var("descr", "Tests the ATF_CHECK_ERRNO macro"); -} -ATF_TEST_CASE_BODY(check_errno) -{ - struct test { - const char *what; - bool ok; - const char *msg; - } *t, tests[] = { - { "no_error", false, - "Expected true value in errno_ok_stub\\(\\) == -1" }, - { "errno_ok", true, NULL }, - { "errno_fail", false, - "Expected errno 3, got 4, in errno_fail_stub\\(4\\) == -1" }, - { NULL, false, NULL } - }; - - const atf::fs::path before("before"); - const atf::fs::path after("after"); - - for (t = &tests[0]; t->what != NULL; t++) { - atf::tests::vars_map config; - config["what"] = t->what; - - run_h_tc< ATF_TEST_CASE_NAME(h_check_errno) >(config); - - ATF_REQUIRE(atf::fs::exists(before)); - ATF_REQUIRE(atf::fs::exists(after)); - - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - } else { - ATF_REQUIRE(grep_file("result", "^failed")); - - std::string exp_result = "macros_test.cpp:[0-9]+: " + - std::string(t->msg) + "$"; - ATF_REQUIRE(grep_file("stderr", exp_result.c_str())); - } - - atf::fs::remove(before); - atf::fs::remove(after); - } -} - -ATF_TEST_CASE(require_errno); -ATF_TEST_CASE_HEAD(require_errno) -{ - set_md_var("descr", "Tests the ATF_REQUIRE_ERRNO macro"); -} -ATF_TEST_CASE_BODY(require_errno) -{ - struct test { - const char *what; - bool ok; - const char *msg; - } *t, tests[] = { - { "no_error", false, - "Expected true value in errno_ok_stub\\(\\) == -1" }, - { "errno_ok", true, NULL }, - { "errno_fail", false, - "Expected errno 3, got 4, in errno_fail_stub\\(4\\) == -1" }, - { NULL, false, NULL } - }; - - const atf::fs::path before("before"); - const atf::fs::path after("after"); - - for (t = &tests[0]; t->what != NULL; t++) { - atf::tests::vars_map config; - config["what"] = t->what; - - run_h_tc< ATF_TEST_CASE_NAME(h_require_errno) >(config); - - ATF_REQUIRE(atf::fs::exists(before)); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(atf::fs::exists(after)); - } else { - std::string exp_result = "^failed: .*macros_test.cpp:[0-9]+: " + - std::string(t->msg) + "$"; - ATF_REQUIRE(grep_file("result", exp_result.c_str())); - - ATF_REQUIRE(!atf::fs::exists(after)); - } - - atf::fs::remove(before); - if (t->ok) - atf::fs::remove(after); - } -} - -// ------------------------------------------------------------------------ -// Tests cases for the header file. -// ------------------------------------------------------------------------ - -HEADER_TC(include, "atf-c++/macros.hpp"); -BUILD_TC(use, "macros_hpp_test.cpp", - "Tests that the macros provided by the atf-c++/macros.hpp file " - "do not cause syntax errors when used", - "Build of macros_hpp_test.cpp failed; some macros in " - "atf-c++/macros.hpp are broken"); - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test cases for the macros. - ATF_ADD_TEST_CASE(tcs, pass); - ATF_ADD_TEST_CASE(tcs, fail); - ATF_ADD_TEST_CASE(tcs, skip); - ATF_ADD_TEST_CASE(tcs, check_errno); - ATF_ADD_TEST_CASE(tcs, require); - ATF_ADD_TEST_CASE(tcs, require_eq); - ATF_ADD_TEST_CASE(tcs, require_in); - ATF_ADD_TEST_CASE(tcs, require_match); - ATF_ADD_TEST_CASE(tcs, require_not_in); - ATF_ADD_TEST_CASE(tcs, require_throw); - ATF_ADD_TEST_CASE(tcs, require_throw_re); - ATF_ADD_TEST_CASE(tcs, require_errno); - - // Add the test cases for the header file. - ATF_ADD_TEST_CASE(tcs, include); - ATF_ADD_TEST_CASE(tcs, use); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++/atf_c++_test.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++/atf_c++_test.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++/atf_c++_test.cpp (nonexistent) @@ -1,48 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2009 The NetBSD Foundation, Inc. -// 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 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 "macros.hpp" - -#include "detail/test_helpers.hpp" - -// ------------------------------------------------------------------------ -// Tests cases for the header file. -// ------------------------------------------------------------------------ - -HEADER_TC(include, "atf-c++.hpp"); - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add the test cases for the header file. - ATF_ADD_TEST_CASE(tcs, include); -} Index: vendor/NetBSD/atf/dist/dist/atf-c.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c.h (nonexistent) @@ -1,36 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_H) -#define ATF_C_H - -#include -#include - -#endif /* !defined(ATF_C_H) */ Index: vendor/NetBSD/atf/dist/dist/Atffile =================================================================== --- vendor/NetBSD/atf/dist/dist/Atffile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/Atffile (nonexistent) @@ -1,11 +0,0 @@ -Content-Type: application/X-atf-atffile; version="1" - -prop: test-suite = atf - -tp: atf-c -tp: atf-c++ -tp: atf-sh -tp: test-programs -tp: atf-config -tp: atf-report -tp: atf-run Index: vendor/NetBSD/atf/dist/dist/atf-sh/atf-check_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/atf-check_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/atf-check_test.sh (nonexistent) @@ -1,450 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -# The Atf_Check and Atf-Shell variables are set by atf-sh. - -h_pass() -{ - cmd="$1"; shift - - echo "Running [atf-check $*] against [${cmd}]" - - cat >script.sh <tmp; then - cat tmp - atf_fail "atf-check failed" - fi -} - -h_fail() -{ - cmd="$1"; shift - - echo "Running [atf-check $*] against [${cmd}]" - - cat >script.sh <tmp; then - cat tmp - atf_fail "atf-check succeeded but should fail" - fi -} - -atf_test_case sflag_eq_ne -sflag_eq_ne_head() -{ - atf_set "descr" "Tests for the -s option using the 'eq' and 'ne' qualifiers" -} -sflag_eq_ne_body() -{ - h_pass "true" -s eq:0 - h_pass "false" -s ne:0 - h_pass "exit 255" -s eq:255 - h_pass "exit 0" -s ne:255 - - h_fail "exit 256" -s eq:256 - h_fail "exit -1" -s eq:-1 - h_fail "true" -s ne:256 - h_fail "true" -s ne:-1 -} - -atf_test_case sflag_exit -sflag_exit_head() -{ - atf_set "descr" "Tests for the -s option using the 'exit' qualifier" -} -sflag_exit_body() -{ - h_pass 'true' -s exit:0 - h_pass 'false' -s not-exit:0 - h_pass 'exit 255' -s exit:255 - h_pass 'exit 0' -s not-exit:255 - - h_fail 'exit 256' -s exit:256 - h_fail 'exit -1' -s exit:-1 - h_fail 'true' -s not-exit:256 - h_fail 'true' -s not-exit:-1 - - h_pass 'true' -s exit - h_pass 'false' -s exit - if ${Atf_Check} -s exit -x 'kill $$'; then - atf_fail "Signal detected as clean exit" - fi -} - -atf_test_case sflag_ignore -sflag_ignore_head() -{ - atf_set "descr" "Tests for the -s option using the 'ignore' qualifier" -} -sflag_ignore_body() -{ - h_pass 'true' -s ignore - h_pass 'false' -s ignore - if ${Atf_Check} -s ignored -x 'kill $$'; then - atf_fail "Signal not ignored" - fi -} - -atf_test_case sflag_signal -sflag_signal_head() -{ - atf_set "descr" "Tests for the -s option using the 'signal' qualifier" -} -sflag_signal_body() -{ - ${Atf_Check} -s signal:hup -x 'kill -1 $$' || atf_fail "Signal not detected" - ${Atf_Check} -s signal:sighup -x 'kill -1 $$' || atf_fail "Signal not" \ - "detected" - ${Atf_Check} -s signal:1 -x 'kill -1 $$' || atf_fail "Signal not detected" - ${Atf_Check} -s signal -x 'kill -1 $$' || atf_fail "Signal not detected" - - ${Atf_Check} -s not-signal:kill -x 'kill -9 $$' && \ - atf_fail "not-signal:kill matched kill -9" - ${Atf_Check} -s not-signal:kill -x 'kill -1 $$' || \ - atf_fail "not-signal:kill did not match kill -1" - - h_fail 'true' -s signal - h_fail 'false' -s signal -} - -atf_test_case xflag -xflag_head() -{ - atf_set "descr" "Tests for the -x option" -} -xflag_body() -{ - ${Atf_Check} -s ne:0 -o ignore -e ignore "echo foo 2>&1" || \ - atf_fail "Shell command succeeded without -x" - - ${Atf_Check} -e inline:"foo\n" -x "echo foo 1>&2" || \ - atf_fail "Cannot run command with -x" - - ${Atf_Check} -o inline:"foo\n" -x echo foo || \ - atf_fail "Using -x does not respect all provided arguments" -} - -atf_test_case oflag_empty -oflag_empty_head() -{ - atf_set "descr" "Tests for the -o option using the 'empty' argument" -} -oflag_empty_body() -{ - h_pass "true" -o empty - h_fail "echo foo" -o empty -} - -atf_test_case oflag_ignore -oflag_ignore_head() -{ - atf_set "descr" "Tests for the -o option using the 'ignore' argument" -} -oflag_ignore_body() -{ - h_pass "true" -o ignore - h_pass "echo foo" -o ignore -} - -atf_test_case oflag_file -oflag_file_head() -{ - atf_set "descr" "Tests for the -o option using the 'file:' argument" -} -oflag_file_body() -{ - touch empty - h_pass "true" -o file:empty - - echo foo >text - h_pass "echo foo" -o file:text - h_fail "echo bar" -o file:text - - dd if=/dev/urandom of=bin bs=1k count=10 - h_pass "cat bin" -o file:bin -} - -atf_test_case oflag_inline -oflag_inline_head() -{ - atf_set "descr" "Tests for the -o option using the 'inline:' argument" -} -oflag_inline_body() -{ - h_pass "true" -o inline: - h_pass "echo foo bar" -o inline:"foo bar\n" - h_pass "printf 'foo bar'" -o inline:"foo bar" - h_pass "printf '\t\n\t\n'" -o inline:"\t\n\t\n" - # XXX Ugly hack to workaround the lack of \e in FreeBSD. Look for a - # nicer solution... - case $(uname) in - FreeBSD) - h_pass "printf '\a\b\f\n\r\t\v'" -o inline:"\a\b\f\n\r\t\v" - ;; - *) - h_pass "printf '\a\b\e\f\n\r\t\v'" -o inline:"\a\b\e\f\n\r\t\v" - ;; - esac - h_pass "printf '\011\022\033\012'" -o inline:"\011\022\033\012" - - h_fail "echo foo bar" -o inline:"foo bar" - h_fail "echo -n foo bar" -o inline:"foo bar\n" -} - -atf_test_case oflag_match -oflag_match_head() -{ - atf_set "descr" "Tests for the -o option using the 'match:' argument" -} -oflag_match_body() -{ - h_pass "printf no-newline" -o "match:^no-newline" - h_pass "echo line1; echo foo bar" -o "match:^foo" - h_pass "echo foo bar" -o "match:o b" - h_fail "echo foo bar" -o "match:baz" - h_fail "echo foo bar" -o "match:^bar" -} - -atf_test_case oflag_save -oflag_save_head() -{ - atf_set "descr" "Tests for the -o option using the 'save:' argument" -} -oflag_save_body() -{ - h_pass "echo foo" -o save:out - echo foo >exp - cmp -s out exp || atf_fail "Saved output does not match expected results" -} - -atf_test_case oflag_multiple -oflag_multiple_head() -{ - atf_set "descr" "Tests for multiple occurrences of the -o option" -} -oflag_multiple_body() -{ - h_pass "echo foo bar" -o match:foo -o match:bar - h_pass "echo foo; echo bar" -o match:foo -o match:bar - h_fail "echo foo baz" -o match:bar -o match:foo - h_fail "echo foo; echo baz" -o match:bar -o match:foo -} - -atf_test_case oflag_negated -oflag_negated_head() -{ - atf_set "descr" "Tests for negated occurrences of the -o option" -} -oflag_negated_body() -{ - h_fail "echo foo" -o empty - h_pass "echo foo" -o not-empty - - h_pass "echo foo bar" -o match:foo - h_fail "echo foo bar" -o not-match:foo -} - -atf_test_case eflag_empty -eflag_empty_head() -{ - atf_set "descr" "Tests for the -e option using the 'empty' argument" -} -eflag_empty_body() -{ - h_pass "true 1>&2" -e empty - h_fail "echo foo 1>&2" -e empty -} - -atf_test_case eflag_ignore -eflag_ignore_head() -{ - atf_set "descr" "Tests for the -e option using the 'ignore' argument" -} -eflag_ignore_body() -{ - h_pass "true 1>&2" -e ignore - h_pass "echo foo 1>&2" -e ignore -} - -atf_test_case eflag_file -eflag_file_head() -{ - atf_set "descr" "Tests for the -e option using the 'file:' argument" -} -eflag_file_body() -{ - touch empty - h_pass "true 1>&2" -e file:empty - - echo foo >text - h_pass "echo foo 1>&2" -e file:text - h_fail "echo bar 1>&2" -e file:text - - dd if=/dev/urandom of=bin bs=1k count=10 - h_pass "cat bin 1>&2" -e file:bin -} - -atf_test_case eflag_inline -eflag_inline_head() -{ - atf_set "descr" "Tests for the -e option using the 'inline:' argument" -} -eflag_inline_body() -{ - h_pass "true 1>&2" -e inline: - h_pass "echo foo bar 1>&2" -e inline:"foo bar\n" - h_pass "printf 'foo bar' 1>&2" -e inline:"foo bar" - h_pass "printf '\t\n\t\n' 1>&2" -e inline:"\t\n\t\n" - # XXX Ugly hack to workaround the lack of \e in FreeBSD. Look for a - # nicer solution... - case $(uname) in - FreeBSD) - h_pass "printf '\a\b\f\n\r\t\v' 1>&2" -e inline:"\a\b\f\n\r\t\v" - ;; - *) - h_pass "printf '\a\b\e\f\n\r\t\v' 1>&2" -e inline:"\a\b\e\f\n\r\t\v" - ;; - esac - h_pass "printf '\011\022\033\012' 1>&2" -e inline:"\011\022\033\012" - - h_fail "echo foo bar 1>&2" -e inline:"foo bar" - h_fail "echo -n foo bar 1>&2" -e inline:"foo bar\n" -} - -atf_test_case eflag_save -eflag_save_head() -{ - atf_set "descr" "Tests for the -e option using the 'save:' argument" -} -eflag_save_body() -{ - h_pass "echo foo 1>&2" -e save:out - echo foo >exp - cmp -s out exp || atf_fail "Saved output does not match expected results" -} - -atf_test_case eflag_match -eflag_match_head() -{ - atf_set "descr" "Tests for the -e option using the 'match:' argument" -} -eflag_match_body() -{ - h_pass "printf no-newline 1>&2" -e "match:^no-newline" - h_pass "echo line1 1>&2; echo foo bar 1>&2" -e "match:^foo" - h_pass "echo foo bar 1>&2" -e "match:o b" - h_fail "echo foo bar 1>&2" -e "match:baz" - h_fail "echo foo bar 1>&2" -e "match:^bar" -} - -atf_test_case eflag_multiple -eflag_multiple_head() -{ - atf_set "descr" "Tests for multiple occurrences of the -e option" -} -eflag_multiple_body() -{ - h_pass "echo foo bar 1>&2" -e match:foo -e match:bar - h_pass "echo foo 1>&2; echo bar 1>&2" -e match:foo -e match:bar - h_fail "echo foo baz 1>&2" -e match:bar -e match:foo - h_fail "echo foo 1>&2; echo baz 1>&2" -e match:bar -e match:foo -} - -atf_test_case eflag_negated -eflag_negated_head() -{ - atf_set "descr" "Tests for negated occurrences of the -e option" -} -eflag_negated_body() -{ - h_fail "echo foo 1>&2" -e empty - h_pass "echo foo 1>&2" -e not-empty - - h_pass "echo foo bar 1>&2" -e match:foo - h_fail "echo foo bar 1>&2" -e not-match:foo -} - -atf_test_case invalid_umask -invalid_umask_head() -{ - atf_set "descr" "Tests for a correct error condition if the umask is" \ - "too restrictive" -} -invalid_umask_body() -{ - umask 0222 - ${Atf_Check} false 2>stderr && \ - atf_fail "atf-check returned 0 but it should have failed" - cat stderr - grep 'temporary.*current umask.*0222' stderr >/dev/null || \ - atf_fail "atf-check did not report an error related to the" \ - "current umask" -} - -atf_init_test_cases() -{ - atf_add_test_case sflag_eq_ne - atf_add_test_case sflag_exit - atf_add_test_case sflag_ignore - atf_add_test_case sflag_signal - - atf_add_test_case xflag - - atf_add_test_case oflag_empty - atf_add_test_case oflag_ignore - atf_add_test_case oflag_file - atf_add_test_case oflag_inline - atf_add_test_case oflag_match - atf_add_test_case oflag_save - atf_add_test_case oflag_multiple - atf_add_test_case oflag_negated - - atf_add_test_case eflag_empty - atf_add_test_case eflag_ignore - atf_add_test_case eflag_file - atf_add_test_case eflag_inline - atf_add_test_case eflag_match - atf_add_test_case eflag_save - atf_add_test_case eflag_multiple - atf_add_test_case eflag_negated - - atf_add_test_case invalid_umask -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-sh/atf_check_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/atf_check_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/atf_check_test.sh (nonexistent) @@ -1,181 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -# TODO: Bring in the checks in the bootstrap testsuite for atf_check. - -atf_test_case info_ok -info_ok_head() -{ - atf_set "descr" "Verifies that atf_check prints an informative" \ - "message even when the command is successful" -} -info_ok_body() -{ - h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" - - atf_check -s eq:0 -o save:stdout -e save:stderr -x \ - "${h} atf_check_info_ok" - grep 'Executing command.*true' stdout >/dev/null || \ - atf_fail "atf_check does not print an informative message" - - atf_check -s eq:0 -o save:stdout -e save:stderr -x \ - "${h} atf_check_info_fail" - grep 'Executing command.*false' stdout >/dev/null || \ - atf_fail "atf_check does not print an informative message" -} - -atf_test_case expout_mismatch -expout_mismatch_head() -{ - atf_set "descr" "Verifies that atf_check prints a diff of the" \ - "stdout and the expected stdout if the two do no" \ - "match" -} -expout_mismatch_body() -{ - h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" - - atf_check -s eq:1 -o save:stdout -e save:stderr -x \ - "${h} atf_check_expout_mismatch" - grep 'Executing command.*echo bar' stdout >/dev/null || \ - atf_fail "atf_check does not print an informative message" - grep 'stdout does not match golden output' stderr >/dev/null || \ - atf_fail "atf_check does not print the stdout header" - grep 'stderr' stderr >/dev/null && \ - atf_fail "atf_check prints the stderr header" - grep '^-foo' stderr >/dev/null || \ - atf_fail "atf_check does not print the stdout's diff" - grep '^+bar' stderr >/dev/null || \ - atf_fail "atf_check does not print the stdout's diff" -} - -atf_test_case experr_mismatch -experr_mismatch_head() -{ - atf_set "descr" "Verifies that atf_check prints a diff of the" \ - "stderr and the expected stderr if the two do no" \ - "match" -} -experr_mismatch_body() -{ - h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" - - atf_check -s eq:1 -o save:stdout -e save:stderr -x \ - "${h} atf_check_experr_mismatch" - grep 'Executing command.*echo bar' stdout >/dev/null || \ - atf_fail "atf_check does not print an informative message" - grep 'stdout' stderr >/dev/null && \ - atf_fail "atf_check prints the stdout header" - grep 'stderr does not match golden output' stderr >/dev/null || \ - atf_fail "atf_check does not print the stderr header" - grep '^-foo' stderr >/dev/null || \ - atf_fail "atf_check does not print the stderr's diff" - grep '^+bar' stderr >/dev/null || \ - atf_fail "atf_check does not print the stderr's diff" -} - -atf_test_case null_stdout -null_stdout_head() -{ - atf_set "descr" "Verifies that atf_check prints a the stdout it got" \ - "when it was supposed to be null" -} -null_stdout_body() -{ - h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" - - atf_check -s eq:1 -o save:stdout -e save:stderr -x \ - "${h} atf_check_null_stdout" - grep 'Executing command.*echo.*These.*contents' stdout >/dev/null || \ - atf_fail "atf_check does not print an informative message" - grep 'stdout not empty' stderr >/dev/null || \ - atf_fail "atf_check does not print the stdout header" - grep 'stderr' stderr >/dev/null && \ - atf_fail "atf_check prints the stderr header" - grep 'These are the contents' stderr >/dev/null || \ - atf_fail "atf_check does not print stdout's contents" -} - -atf_test_case null_stderr -null_stderr_head() -{ - atf_set "descr" "Verifies that atf_check prints a the stderr it got" \ - "when it was supposed to be null" -} -null_stderr_body() -{ - h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" - - atf_check -s eq:1 -o save:stdout -e save:stderr -x \ - "${h} atf_check_null_stderr" - grep 'Executing command.*echo.*These.*contents' stdout >/dev/null || \ - atf_fail "atf_check does not print an informative message" - grep 'stdout' stderr >/dev/null && \ - atf_fail "atf_check prints the stdout header" - grep 'stderr not empty' stderr >/dev/null || \ - atf_fail "atf_check does not print the stderr header" - grep 'These are the contents' stderr >/dev/null || \ - atf_fail "atf_check does not print stderr's contents" -} - -atf_test_case equal -equal_head() -{ - atf_set "descr" "Verifies that atf_check_equal works" -} -equal_body() -{ - h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" - - atf_check -s eq:0 -o ignore -e ignore -x "${h} atf_check_equal_ok" - - atf_check -s eq:1 -o ignore -e ignore -x \ - "${h} -r resfile atf_check_equal_fail" - atf_check -s eq:0 -o ignore -e empty grep '^failed: a != b (a != b)$' \ - resfile - - atf_check -s eq:0 -o ignore -e ignore -x "${h} atf_check_equal_eval_ok" - - atf_check -s eq:1 -o ignore -e ignore -x \ - "${h} -r resfile atf_check_equal_eval_fail" - atf_check -s eq:0 -o ignore -e empty \ - grep '^failed: \${x} != \${y} (a != b)$' resfile -} - -atf_init_test_cases() -{ - atf_add_test_case info_ok - atf_add_test_case expout_mismatch - atf_add_test_case experr_mismatch - atf_add_test_case null_stdout - atf_add_test_case null_stderr - atf_add_test_case equal -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-sh/Kyuafile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/Kyuafile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/Kyuafile (nonexistent) @@ -1,11 +0,0 @@ -syntax("kyuafile", 1) - -test_suite("atf") - -atf_test_program{name="tc_test"} -atf_test_program{name="tp_test"} -atf_test_program{name="normalize_test"} -atf_test_program{name="config_test"} -atf_test_program{name="atf-check_test"} -atf_test_program{name="atf_check_test"} -atf_test_program{name="integration_test"} Index: vendor/NetBSD/atf/dist/dist/atf-sh/atf-sh-api.3 =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/atf-sh-api.3 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/atf-sh-api.3 (nonexistent) @@ -1,340 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd June 28, 2010 -.Dt ATF-SH-API 3 -.Os -.Sh NAME -.Nm atf_add_test_case , -.Nm atf_check , -.Nm atf_check_equal , -.Nm atf_config_get , -.Nm atf_config_has , -.Nm atf_expect_death , -.Nm atf_expect_exit , -.Nm atf_expect_fail , -.Nm atf_expect_pass , -.Nm atf_expect_signal , -.Nm atf_expect_timeout , -.Nm atf_fail , -.Nm atf_get , -.Nm atf_get_srcdir , -.Nm atf_pass , -.Nm atf_require_prog , -.Nm atf_set , -.Nm atf_skip , -.Nm atf_test_case -.Nd POSIX shell API to write ATF-based test programs -.Sh SYNOPSIS -.Fn atf_add_test_case "name" -.Fn atf_check "command" -.Fn atf_check_equal "expr1" "expr2" -.Fn atf_config_get "var_name" -.Fn atf_config_has "var_name" -.Fn atf_expect_death "reason" "..." -.Fn atf_expect_exit "exitcode" "reason" "..." -.Fn atf_expect_fail "reason" "..." -.Fn atf_expect_pass -.Fn atf_expect_signal "signo" "reason" "..." -.Fn atf_expect_timeout "reason" "..." -.Fn atf_fail "reason" -.Fn atf_get "var_name" -.Fn atf_get_srcdir -.Fn atf_pass -.Fn atf_require_prog "prog_name" -.Fn atf_set "var_name" "value" -.Fn atf_skip "reason" -.Fn atf_test_case "name" "cleanup" -.Sh DESCRIPTION -ATF -provides a simple but powerful interface to easily write test programs in -the POSIX shell language. -These are extremely helpful given that they are trivial to write due to the -language simplicity and the great deal of available external tools, so they -are often ideal to test other applications at the user level. -.Pp -Test programs written using this library must be run using the -.Xr atf-sh 1 -interpreter by putting the following on their very first line: -.Bd -literal -offset indent -#! /usr/bin/env atf-sh -.Ed -.Pp -Shell-based test programs always follow this template: -.Bd -literal -offset indent -atf_test_case tc1 -tc1_head() { - ... first test case's header ... -} -tc1_body() { - ... first test case's body ... -} - -atf_test_case tc2 cleanup -tc2_head() { - ... second test case's header ... -} -tc2_body() { - ... second test case's body ... -} -tc2_cleanup() { - ... second test case's cleanup ... -} - -.Ns ... additional test cases ... - -atf_init_test_cases() { - atf_add_test_case tc1 - atf_add_test_case tc2 - ... add additional test cases ... -} -.Ed -.Ss Definition of test cases -Test cases have an identifier and are composed of three different parts: -the header, the body and an optional cleanup routine, all of which are -described in -.Xr atf-test-case 4 . -To define test cases, one can use the -.Fn atf_test_case -function, which takes a first parameter specifiying the test case's -name and instructs the library to set things up to accept it as a valid -test case. -The second parameter is optional and, if provided, must be -.Sq cleanup ; -providing this parameter allows defining a cleanup routine for the test -case. -It is important to note that this function -.Em does not -set the test case up for execution when the program is run. -In order to do so, a later registration is needed through the -.Fn atf_add_test_case -function detailed in -.Sx Program initialization . -.Pp -Later on, one must define the three parts of the body by providing two -or three functions (remember that the cleanup routine is optional). -These functions are named after the test case's identifier, and are -.Fn _head , -.Fn _body -and -.Fn _cleanup. -None of these take parameters when executed. -.Ss Program initialization -The test program must define an -.Fn atf_init_test_cases -function, which is in charge of registering the test cases that will be -executed at run time by using the -.Fn atf_add_test_case -function, which takes the name of a test case as its single parameter. -This main function should not do anything else, except maybe sourcing -auxiliary source files that define extra variables and functions. -.Ss Configuration variables -The test case has read-only access to the current configuration variables -through the -.Fn atf_config_has -and -.Fn atf_config_get -methods. -The former takes a single parameter specifying a variable name and returns -a boolean indicating whether the variable is defined or not. -The latter can take one or two parameters. -If it takes only one, it specifies the variable from which to get the -value, and this variable must be defined. -If it takes two, the second one specifies a default value to be returned -if the variable is not available. -.Ss Access to the source directory -It is possible to get the path to the test case's source directory from -anywhere in the test program by using the -.Fn atf_get_srcdir -function. -It is interesting to note that this can be used inside -.Fn atf_init_test_cases -to silently include additional helper files from the source directory. -.Ss Requiring programs -Aside from the -.Va require.progs -meta-data variable available in the header only, one can also check for -additional programs in the test case's body by using the -.Fn atf_require_prog -function, which takes the base name or full path of a single binary. -Relative paths are forbidden. -If it is not found, the test case will be automatically skipped. -.Ss Test case finalization -The test case finalizes either when the body reaches its end, at which -point the test is assumed to have -.Em passed , -or at any explicit call to -.Fn atf_pass , -.Fn atf_fail -or -.Fn atf_skip . -These three functions terminate the execution of the test case immediately. -The cleanup routine will be processed afterwards in a completely automated -way, regardless of the test case's termination reason. -.Pp -.Fn atf_pass -does not take any parameters. -.Fn atf_fail -and -.Fn atf_skip -take a single string parameter that describes why the test case failed or -was skipped, respectively. -It is very important to provide a clear error message in both cases so that -the user can quickly know why the test did not pass. -.Ss Expectations -Everything explained in the previous section changes when the test case -expectations are redefined by the programmer. -.Pp -Each test case has an internal state called -.Sq expect -that describes what the test case expectations are at any point in time. -The value of this property can change during execution by any of: -.Bl -tag -width indent -.It Fn atf_expect_death "reason" "..." -Expects the test case to exit prematurely regardless of the nature of the -exit. -.It Fn atf_expect_exit "exitcode" "reason" "..." -Expects the test case to exit cleanly. -If -.Va exitcode -is not -.Sq -1 , -.Xr atf-run 1 -will validate that the exit code of the test case matches the one provided -in this call. -Otherwise, the exact value will be ignored. -.It Fn atf_expect_fail "reason" -Any failure raised in this mode is recorded, but such failures do not report -the test case as failed; instead, the test case finalizes cleanly and is -reported as -.Sq expected failure ; -this report includes the provided -.Fa reason -as part of it. -If no error is raised while running in this mode, then the test case is -reported as -.Sq failed . -.Pp -This mode is useful to reproduce actual known bugs in tests. -Whenever the developer fixes the bug later on, the test case will start -reporting a failure, signaling the developer that the test case must be -adjusted to the new conditions. -In this situation, it is useful, for example, to set -.Fa reason -as the bug number for tracking purposes. -.It Fn atf_expect_pass -This is the normal mode of execution. -In this mode, any failure is reported as such to the user and the test case -is marked as -.Sq failed . -.It Fn atf_expect_signal "signo" "reason" "..." -Expects the test case to terminate due to the reception of a signal. -If -.Va signo -is not -.Sq -1 , -.Xr atf-run 1 -will validate that the signal that terminated the test case matches the one -provided in this call. -Otherwise, the exact value will be ignored. -.It Fn atf_expect_timeout "reason" "..." -Expects the test case to execute for longer than its timeout. -.El -.Ss Helper functions for common checks -.Fn atf_check [options] command [args] -.Pp -This function wraps the execution of the -.Nm atf-check -tool and makes the test case fail if the tool reports failure. -You should always use this function instead of the tool in your scripts. -For more details on the parameters of this function, refer to -.Xr atf-check 1 . -.Pp -.Fn atf_check_equal expr1 expr2 -.Pp -This function takes two expressions, evaluates them and, if their -results differ, aborts the test case with an appropriate failure message. -.Sh EXAMPLES -The following shows a complete test program with a single test case that -validates the addition operator: -.Bd -literal -offset indent -atf_test_case addition -addition_head() { - atf_set "descr" "Sample tests for the addition operator" -} -addition_body() { - atf_check_equal $((0 + 0)) 0 - atf_check_equal $((0 + 1)) 1 - atf_check_equal $((1 + 0)) 0 - - atf_check_equal $((1 + 1)) 2 - - atf_check_equal $((100 + 200)) 300 -} - -atf_init_test_cases() { - atf_add_test_case addition -} -.Ed -.Pp -This other example shows how to include a file with extra helper functions -in the test program: -.Bd -literal -offset indent -.Ns ... definition of test cases ... - -atf_init_test_cases() { - . $(atf_get_srcdir)/helper_functions.sh - - atf_add_test_case foo1 - atf_add_test_case foo2 -} -.Ed -.Pp -This example demonstrates the use of the very useful -.Fn atf_check -function: -.Bd -literal -offset indent -# Check for silent output -atf_check 'true' 0 null null - -# Check for silent output and failure -atf_check 'false' 1 null null - -# Check for known stdout and silent stderr -echo foo >expout -atf_check 'echo foo' 0 expout null - -# Generate a file for later inspection -atf_check 'ls' 0 stdout null -grep foo ls || atf_fail "foo file not found in listing" -.Ed -.Sh SEE ALSO -.Xr atf-sh 1 , -.Xr atf-test-program 1 , -.Xr atf-test-case 4 , -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/atf-sh/misc_helpers.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/misc_helpers.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/misc_helpers.sh (nonexistent) @@ -1,289 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -# 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 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. -# - -# ------------------------------------------------------------------------- -# Helper tests for "t_atf_check". -# ------------------------------------------------------------------------- - -atf_test_case atf_check_info_ok -atf_check_info_ok_head() -{ - atf_set "descr" "Helper test case for the t_atf_check test program" -} -atf_check_info_ok_body() -{ - atf_check -s eq:0 -o empty -e empty true -} - -atf_test_case atf_check_info_fail -atf_check_info_fail_head() -{ - atf_set "descr" "Helper test case for the t_atf_check test program" -} -atf_check_info_fail_body() -{ - # In Solaris, /usr/bin/false returns 255 rather than 1. Use the - # built-in version for the check. - atf_check -s eq:1 -o empty -e empty sh -c "false" -} - -atf_test_case atf_check_expout_mismatch -atf_check_expout_mismatch_head() -{ - atf_set "descr" "Helper test case for the t_atf_check test program" -} -atf_check_expout_mismatch_body() -{ - cat >expout <experr <&2' -} - -atf_test_case atf_check_null_stdout -atf_check_null_stdout_head() -{ - atf_set "descr" "Helper test case for the t_atf_check test program" -} -atf_check_null_stdout_body() -{ - atf_check -s eq:0 -o empty -e empty echo "These are the contents" -} - -atf_test_case atf_check_null_stderr -atf_check_null_stderr_head() -{ - atf_set "descr" "Helper test case for the t_atf_check test program" -} -atf_check_null_stderr_body() -{ - atf_check -s eq:0 -o empty -e empty -x 'echo "These are the contents" 1>&2' -} - -atf_test_case atf_check_equal_ok -atf_check_equal_ok_head() -{ - atf_set "descr" "Helper test case for the t_atf_check test program" -} -atf_check_equal_ok_body() -{ - atf_check_equal a a -} - -atf_test_case atf_check_equal_fail -atf_check_equal_fail_head() -{ - atf_set "descr" "Helper test case for the t_atf_check test program" -} -atf_check_equal_fail_body() -{ - atf_check_equal a b -} - -atf_test_case atf_check_equal_eval_ok -atf_check_equal_eval_ok_head() -{ - atf_set "descr" "Helper test case for the t_atf_check test program" -} -atf_check_equal_eval_ok_body() -{ - x=a - y=a - atf_check_equal '${x}' '${y}' -} - -atf_test_case atf_check_equal_eval_fail -atf_check_equal_eval_fail_head() -{ - atf_set "descr" "Helper test case for the t_atf_check test program" -} -atf_check_equal_eval_fail_body() -{ - x=a - y=b - atf_check_equal '${x}' '${y}' -} - -# ------------------------------------------------------------------------- -# Helper tests for "t_config". -# ------------------------------------------------------------------------- - -atf_test_case config_get -config_get_head() -{ - atf_set "descr" "Helper test case for the t_config test program" -} -config_get_body() -{ - if atf_config_has ${TEST_VARIABLE}; then - echo "${TEST_VARIABLE} = $(atf_config_get ${TEST_VARIABLE})" - fi -} - -atf_test_case config_has -config_has_head() -{ - atf_set "descr" "Helper test case for the t_config test program" -} -config_has_body() -{ - if atf_config_has ${TEST_VARIABLE}; then - echo "${TEST_VARIABLE} found" - else - echo "${TEST_VARIABLE} not found" - fi -} - -# ------------------------------------------------------------------------- -# Helper tests for "t_normalize". -# ------------------------------------------------------------------------- - -atf_test_case normalize -normalize_head() -{ - atf_set "descr" "Helper test case for the t_normalize test program" - atf_set "a.b" "test value 1" - atf_set "c-d" "test value 2" -} -normalize_body() -{ - echo "a.b: $(atf_get a.b)" - echo "c-d: $(atf_get c-d)" -} - -# ------------------------------------------------------------------------- -# Helper tests for "t_tc". -# ------------------------------------------------------------------------- - -atf_test_case tc_pass_true -tc_pass_true_head() -{ - atf_set "descr" "Helper test case for the t_tc test program" -} -tc_pass_true_body() -{ - true -} - -atf_test_case tc_pass_false -tc_pass_false_head() -{ - atf_set "descr" "Helper test case for the t_tc test program" -} -tc_pass_false_body() -{ - false -} - -atf_test_case tc_pass_return_error -tc_pass_return_error_head() -{ - atf_set "descr" "Helper test case for the t_tc test program" -} -tc_pass_return_error_body() -{ - return 1 -} - -atf_test_case tc_fail -tc_fail_head() -{ - atf_set "descr" "Helper test case for the t_tc test program" -} -tc_fail_body() -{ - echo "An error" 1>&2 - exit 1 -} - -# ------------------------------------------------------------------------- -# Helper tests for "t_tp". -# ------------------------------------------------------------------------- - -atf_test_case tp_srcdir -tp_srcdir_head() -{ - atf_set "descr" "Helper test case for the t_tp test program" -} -tp_srcdir_body() -{ - echo "Calling helper" - helper_subr || atf_fail "Could not call helper subroutine" -} - -# ------------------------------------------------------------------------- -# Main. -# ------------------------------------------------------------------------- - -atf_init_test_cases() -{ - # Add helper tests for t_atf_check. - atf_add_test_case atf_check_info_ok - atf_add_test_case atf_check_info_fail - atf_add_test_case atf_check_expout_mismatch - atf_add_test_case atf_check_experr_mismatch - atf_add_test_case atf_check_null_stdout - atf_add_test_case atf_check_null_stderr - atf_add_test_case atf_check_equal_ok - atf_add_test_case atf_check_equal_fail - atf_add_test_case atf_check_equal_eval_ok - atf_add_test_case atf_check_equal_eval_fail - - # Add helper tests for t_config. - atf_add_test_case config_get - atf_add_test_case config_has - - # Add helper tests for t_normalize. - atf_add_test_case normalize - - # Add helper tests for t_tc. - atf_add_test_case tc_pass_true - atf_add_test_case tc_pass_false - atf_add_test_case tc_pass_return_error - atf_add_test_case tc_fail - - # Add helper tests for t_tp. - [ -f $(atf_get_srcdir)/subrs ] && . $(atf_get_srcdir)/subrs - atf_add_test_case tp_srcdir -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-sh/config_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/config_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/config_test.sh (nonexistent) @@ -1,83 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -atf_test_case has -has_head() -{ - atf_set "descr" "Verifies that atf_config_has works" -} -has_body() -{ - h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" - - atf_check -s eq:0 -o match:'foo not found' -e empty -x \ - "TEST_VARIABLE=foo ${h} config_has" - - atf_check -s eq:0 -o match:'foo found' -e empty -x \ - "TEST_VARIABLE=foo ${h} -v foo=bar config_has" - - echo "Checking for deprecated variables" - atf_check -s eq:0 -o match:'workdir not found' -e empty -x \ - "TEST_VARIABLE=workdir ${h} config_has" -} - -atf_test_case get -get_head() -{ - atf_set "descr" "Verifies that atf_config_get works" -} -get_body() -{ - h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" - - echo "Querying an undefined variable" - ( atf_config_get "undefined" ) >out 2>err && \ - atf_fail "Getting an undefined variable succeeded" - grep 'not find' err || \ - atf_fail "Getting an undefined variable did not report an error" - - echo "Querying an undefined variable using a default value" - v=$(atf_config_get "undefined" "the default value") - [ "${v}" = "the default value" ] || \ - atf_fail "Default value does not work" - - atf_check -s eq:0 -o match:'foo = bar' -e empty -x \ - "TEST_VARIABLE=foo ${h} -v foo=bar config_get" - - atf_check -s eq:0 -o match:'foo = baz' -e empty -x \ - "TEST_VARIABLE=foo ${h} -v foo=baz config_get" -} - -atf_init_test_cases() -{ - atf_add_test_case has - atf_add_test_case get -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-sh/normalize_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/normalize_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/normalize_test.sh (nonexistent) @@ -1,48 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -atf_test_case main -main_head() -{ - atf_set "descr" "Verifies that variable names with symbols not" \ - "allowed as part of shell variable names work" -} -main_body() -{ - h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" - atf_check -s eq:0 -o match:'a.b: test value 1' \ - -o match:'c-d: test value 2' -e ignore ${h} normalize -} - -atf_init_test_cases() -{ - atf_add_test_case main -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-sh/Atffile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/Atffile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/Atffile (nonexistent) @@ -1,11 +0,0 @@ -Content-Type: application/X-atf-atffile; version="1" - -prop: test-suite = atf - -tp: tc_test -tp: tp_test -tp: normalize_test -tp: config_test -tp: atf-check_test -tp: atf_check_test -tp: integration_test Index: vendor/NetBSD/atf/dist/dist/atf-sh/integration_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/integration_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/integration_test.sh (nonexistent) @@ -1,91 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -create_test_program() { - echo '#! /usr/bin/env atf-sh' >"${1}" - cat >>"${1}" - chmod +x "${1}" -} - -atf_test_case no_args -no_args_body() -{ - cat >experr <experr <>>\${0}<<<" - while test \${#} -gt 0; do - echo ">>>\${1}<<<" - shift - done - true -} -EOF - - cat >expout <>>./tp<<< ->>> a b <<< ->>>foo<<< -EOF - atf_check -s eq:0 -o file:expout -e empty ./tp ' a b ' foo - - cat >expout <>>tp<<< ->>> hello bye <<< ->>>foo bar<<< -EOF - atf_check -s eq:0 -o file:expout -e empty atf-sh tp ' hello bye ' 'foo bar' -} - -atf_init_test_cases() -{ - atf_add_test_case no_args - atf_add_test_case missing_script - atf_add_test_case arguments -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-sh/atf-check.1 =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/atf-check.1 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/atf-check.1 (nonexistent) @@ -1,151 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd June 27, 2010 -.Dt ATF-CHECK 1 -.Os -.Sh NAME -.Nm atf-check -.Nd executes a command and analyzes its results -.Sh SYNOPSIS -.Nm -.Op Fl s Ar qual:value -.Op Fl o Ar action:arg ... -.Op Fl e Ar action:arg ... -.Op Fl x -.Ar command -.Nm -.Fl h -.Sh DESCRIPTION -.Nm -executes a given command and analyzes its results, including -exit code, stdout and stderr. -.Pp -In the first synopsis form, -.Nm -will execute the provided command and apply checks specified -by arguments. -By default it will act as if it was run with -.Fl s -.Ar exit:0 -.Fl o -.Ar empty -.Fl e -.Ar empty . -Multiple checks for the same output channel are allowed and, if specified, -their results will be combined as a logical and (meaning that the output must -match all the provided checks). -.Pp -In the second synopsis form, -.Nm -will print information about all supported options and their purpose. -.Pp -The following options are available: -.Bl -tag -width XqualXvalueXX -.It Fl h -Shows a short summary of all available options and their purpose. -.It Fl s Ar qual:value -Analyzes termination status. -Must be one of: -.Bl -tag -width signal: -compact -.It Ar exit: -checks that the program exited cleanly and that its exit status is equal to -.Va value . -The exit code can be omitted altogether, in which case any clean exit is -accepted. -.It Ar ignore -ignores the exit check. -.It Ar signal: -checks that the program exited due to a signal and that the signal that -terminated it is -.Va value . -The signal can be specified both as a number or as a name, or it can also -be omitted altogether, in which case any signal is accepted. -.El -.Pp -Most of these checkers can be prefixed by the -.Sq not- -string, which effectively reverses the check. -.It Fl o Ar action:arg -Analyzes standard output. -Must be one of: -.Bl -tag -width inline: -compact -.It Ar empty -checks that stdout is empty -.It Ar ignore -ignores stdout -.It Ar file: -compares stdout with given file -.It Ar inline: -compares stdout with inline value -.It Ar match: -looks for a regular expression in stdout -.It Ar save: -saves stdout to given file -.El -.Pp -Most of these checkers can be prefixed by the -.Sq not- -string, which effectively reverses the check. -.It Fl e Ar action:arg -Analyzes standard error (syntax identical to above) -.It Fl x -Executes -.Ar command -as a shell command line, executing it with the system shell defined by -.Va ATF_SHELL -in -.Xr atf-config 1 . -You should avoid using this flag if at all possible to prevent shell quoting -issues. -.El -.Sh EXIT STATUS -.Nm -exits 0 on success, and other (unspecified) value on failure. -.Sh EXAMPLES -.Bd -literal -offset indent -# Exit code 0, nothing on stdout/stderr -atf-check 'true' - -# Typical usage if failure is expected -atf-check -s not-exit:0 'false' - -# Checking stdout/stderr -echo foobar >expout -atf-check -o file:expout -e inline:"xx\etyy\en" \e - 'echo foobar ; printf "xx\etyy\en" >&2' - -# Checking for a crash -atf-check -s signal:sigsegv my_program - -# Combined checks -atf-check -o match:foo -o not-match:bar echo foo baz -.Ed -.Sh SEE ALSO -.Xr atf-config 1 , -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/atf-sh/atf-check.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/atf-check.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/atf-check.cpp (nonexistent) @@ -1,835 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include - -#include -#include -#include -} - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "atf-c++/check.hpp" -#include "atf-c++/config.hpp" -#include "atf-c++/utils.hpp" - -#include "atf-c++/detail/application.hpp" -#include "atf-c++/detail/exceptions.hpp" -#include "atf-c++/detail/fs.hpp" -#include "atf-c++/detail/process.hpp" -#include "atf-c++/detail/sanity.hpp" -#include "atf-c++/detail/text.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -namespace { - -enum status_check_t { - sc_exit, - sc_ignore, - sc_signal, -}; - -struct status_check { - status_check_t type; - bool negated; - int value; - - status_check(const status_check_t& p_type, const bool p_negated, - const int p_value) : - type(p_type), - negated(p_negated), - value(p_value) - { - } -}; - -enum output_check_t { - oc_ignore, - oc_inline, - oc_file, - oc_empty, - oc_match, - oc_save -}; - -struct output_check { - output_check_t type; - bool negated; - std::string value; - - output_check(const output_check_t& p_type, const bool p_negated, - const std::string& p_value) : - type(p_type), - negated(p_negated), - value(p_value) - { - } -}; - -class temp_file : public std::ostream { - std::auto_ptr< atf::fs::path > m_path; - int m_fd; - -public: - temp_file(const atf::fs::path& p) : - std::ostream(NULL), - m_fd(-1) - { - atf::utils::auto_array< char > buf(new char[p.str().length() + 1]); - std::strcpy(buf.get(), p.c_str()); - - m_fd = ::mkstemp(buf.get()); - if (m_fd == -1) - throw atf::system_error("atf_check::temp_file::temp_file(" + - p.str() + ")", "mkstemp(3) failed", - errno); - - m_path.reset(new atf::fs::path(buf.get())); - } - - ~temp_file(void) - { - close(); - try { - remove(*m_path); - } catch (const atf::system_error&) { - // Ignore deletion errors. - } - } - - const atf::fs::path& - get_path(void) const - { - return *m_path; - } - - void - write(const std::string& text) - { - if (::write(m_fd, text.c_str(), text.size()) == -1) - throw atf::system_error("atf_check", "write(2) failed", errno); - } - - void - close(void) - { - if (m_fd != -1) { - flush(); - ::close(m_fd); - m_fd = -1; - } - } -}; - -} // anonymous namespace - -static int -parse_exit_code(const std::string& str) -{ - try { - const int value = atf::text::to_type< int >(str); - if (value < 0 || value > 255) - throw std::runtime_error("Unused reason"); - return value; - } catch (const std::runtime_error&) { - throw atf::application::usage_error("Invalid exit code for -s option; " - "must be an integer in range 0-255"); - } -} - -static struct name_number { - const char *name; - int signo; -} signal_names_to_numbers[] = { - { "hup", SIGHUP }, - { "int", SIGINT }, - { "quit", SIGQUIT }, - { "trap", SIGTRAP }, - { "abrt", SIGABRT }, - { "kill", SIGKILL }, - { "segv", SIGSEGV }, - { "pipe", SIGPIPE }, - { "alrm", SIGALRM }, - { "term", SIGTERM }, - { "usr1", SIGUSR1 }, - { "usr2", SIGUSR2 }, - { NULL, INT_MIN }, -}; - -static int -signal_name_to_number(const std::string& str) -{ - struct name_number* iter = signal_names_to_numbers; - int signo = INT_MIN; - while (signo == INT_MIN && iter->name != NULL) { - if (str == iter->name || str == std::string("sig") + iter->name) - signo = iter->signo; - else - iter++; - } - return signo; -} - -static int -parse_signal(const std::string& str) -{ - const int signo = signal_name_to_number(str); - if (signo == INT_MIN) { - try { - return atf::text::to_type< int >(str); - } catch (std::runtime_error) { - throw atf::application::usage_error("Invalid signal name or number " - "in -s option"); - } - } - INV(signo != INT_MIN); - return signo; -} - -static status_check -parse_status_check_arg(const std::string& arg) -{ - const std::string::size_type delimiter = arg.find(':'); - bool negated = (arg.compare(0, 4, "not-") == 0); - const std::string action_str = arg.substr(0, delimiter); - const std::string action = negated ? action_str.substr(4) : action_str; - const std::string value_str = ( - delimiter == std::string::npos ? "" : arg.substr(delimiter + 1)); - int value; - - status_check_t type; - if (action == "eq") { - // Deprecated; use exit instead. TODO: Remove after 0.10. - type = sc_exit; - if (negated) - throw atf::application::usage_error("Cannot negate eq checker"); - negated = false; - value = parse_exit_code(value_str); - } else if (action == "exit") { - type = sc_exit; - if (value_str.empty()) - value = INT_MIN; - else - value = parse_exit_code(value_str); - } else if (action == "ignore") { - if (negated) - throw atf::application::usage_error("Cannot negate ignore checker"); - type = sc_ignore; - value = INT_MIN; - } else if (action == "ne") { - // Deprecated; use not-exit instead. TODO: Remove after 0.10. - type = sc_exit; - if (negated) - throw atf::application::usage_error("Cannot negate ne checker"); - negated = true; - value = parse_exit_code(value_str); - } else if (action == "signal") { - type = sc_signal; - if (value_str.empty()) - value = INT_MIN; - else - value = parse_signal(value_str); - } else - throw atf::application::usage_error("Invalid output checker"); - - return status_check(type, negated, value); -} - -static -output_check -parse_output_check_arg(const std::string& arg) -{ - const std::string::size_type delimiter = arg.find(':'); - const bool negated = (arg.compare(0, 4, "not-") == 0); - const std::string action_str = arg.substr(0, delimiter); - const std::string action = negated ? action_str.substr(4) : action_str; - - output_check_t type; - if (action == "empty") - type = oc_empty; - else if (action == "file") - type = oc_file; - else if (action == "ignore") { - if (negated) - throw atf::application::usage_error("Cannot negate ignore checker"); - type = oc_ignore; - } else if (action == "inline") - type = oc_inline; - else if (action == "match") - type = oc_match; - else if (action == "save") { - if (negated) - throw atf::application::usage_error("Cannot negate save checker"); - type = oc_save; - } else - throw atf::application::usage_error("Invalid output checker"); - - return output_check(type, negated, arg.substr(delimiter + 1)); -} - -static -std::string -flatten_argv(char* const* argv) -{ - std::string cmdline; - - char* const* arg = &argv[0]; - while (*arg != NULL) { - if (arg != &argv[0]) - cmdline += ' '; - - cmdline += *arg; - - arg++; - } - - return cmdline; -} - -static -std::auto_ptr< atf::check::check_result > -execute(const char* const* argv) -{ - std::cout << "Executing command [ "; - for (int i = 0; argv[i] != NULL; ++i) - std::cout << argv[i] << " "; - std::cout << "]\n"; - - atf::process::argv_array argva(argv); - return atf::check::exec(argva); -} - -static -std::auto_ptr< atf::check::check_result > -execute_with_shell(char* const* argv) -{ - const std::string cmd = flatten_argv(argv); - - const char* sh_argv[4]; - sh_argv[0] = atf::config::get("atf_shell").c_str(); - sh_argv[1] = "-c"; - sh_argv[2] = cmd.c_str(); - sh_argv[3] = NULL; - return execute(sh_argv); -} - -static -void -cat_file(const atf::fs::path& path) -{ - std::ifstream stream(path.c_str()); - if (!stream) - throw std::runtime_error("Failed to open " + path.str()); - - stream >> std::noskipws; - std::istream_iterator< char > begin(stream), end; - std::ostream_iterator< char > out(std::cerr); - std::copy(begin, end, out); - - stream.close(); -} - -static -bool -grep_file(const atf::fs::path& path, const std::string& regexp) -{ - std::ifstream stream(path.c_str()); - if (!stream) - throw std::runtime_error("Failed to open " + path.str()); - - bool found = false; - - std::string line; - while (!found && !std::getline(stream, line).fail()) { - if (atf::text::match(line, regexp)) - found = true; - } - - stream.close(); - - return found; -} - -static -bool -file_empty(const atf::fs::path& p) -{ - atf::fs::file_info f(p); - - return (f.get_size() == 0); -} - -static bool -compare_files(const atf::fs::path& p1, const atf::fs::path& p2) -{ - bool equal = false; - - std::ifstream f1(p1.c_str()); - if (!f1) - throw std::runtime_error("Failed to open " + p1.str()); - - std::ifstream f2(p2.c_str()); - if (!f2) - throw std::runtime_error("Failed to open " + p1.str()); - - for (;;) { - char buf1[512], buf2[512]; - - f1.read(buf1, sizeof(buf1)); - if (f1.bad()) - throw std::runtime_error("Failed to read from " + p1.str()); - - f2.read(buf2, sizeof(buf2)); - if (f2.bad()) - throw std::runtime_error("Failed to read from " + p1.str()); - - if ((f1.gcount() == 0) && (f2.gcount() == 0)) { - equal = true; - break; - } - - if ((f1.gcount() != f2.gcount()) || - (std::memcmp(buf1, buf2, f1.gcount()) != 0)) { - break; - } - } - - return equal; -} - -static -void -print_diff(const atf::fs::path& p1, const atf::fs::path& p2) -{ - const atf::process::status s = - atf::process::exec(atf::fs::path("diff"), - atf::process::argv_array("diff", "-u", p1.c_str(), - p2.c_str(), NULL), - atf::process::stream_connect(STDOUT_FILENO, - STDERR_FILENO), - atf::process::stream_inherit()); - - if (!s.exited()) - std::cerr << "Failed to run diff(3)\n"; - - if (s.exitstatus() != 1) - std::cerr << "Error while running diff(3)\n"; -} - -static -std::string -decode(const std::string& s) -{ - size_t i; - std::string res; - - res.reserve(s.length()); - - i = 0; - while (i < s.length()) { - char c = s[i++]; - - if (c == '\\') { - switch (s[i++]) { - case 'a': c = '\a'; break; - case 'b': c = '\b'; break; - case 'c': break; - case 'e': c = 033; break; - case 'f': c = '\f'; break; - case 'n': c = '\n'; break; - case 'r': c = '\r'; break; - case 't': c = '\t'; break; - case 'v': c = '\v'; break; - case '\\': break; - case '0': - { - int count = 3; - c = 0; - while (--count >= 0 && (unsigned)(s[i] - '0') < 8) - c = (c << 3) + (s[i++] - '0'); - break; - } - default: - --i; - break; - } - } - - res.push_back(c); - } - - return res; -} - -static -bool -run_status_check(const status_check& sc, const atf::check::check_result& cr) -{ - bool result; - - if (sc.type == sc_exit) { - if (cr.exited() && sc.value != INT_MIN) { - const int status = cr.exitcode(); - - if (!sc.negated && sc.value != status) { - std::cerr << "Fail: incorrect exit status: " - << status << ", expected: " - << sc.value << "\n"; - result = false; - } else if (sc.negated && sc.value == status) { - std::cerr << "Fail: incorrect exit status: " - << status << ", expected: " - << "anything else\n"; - result = false; - } else - result = true; - } else if (cr.exited() && sc.value == INT_MIN) { - result = true; - } else { - std::cerr << "Fail: program did not exit cleanly\n"; - result = false; - } - } else if (sc.type == sc_ignore) { - result = true; - } else if (sc.type == sc_signal) { - if (cr.signaled() && sc.value != INT_MIN) { - const int status = cr.termsig(); - - if (!sc.negated && sc.value != status) { - std::cerr << "Fail: incorrect signal received: " - << status << ", expected: " << sc.value << "\n"; - result = false; - } else if (sc.negated && sc.value == status) { - std::cerr << "Fail: incorrect signal received: " - << status << ", expected: " - << "anything else\n"; - result = false; - } else - result = true; - } else if (cr.signaled() && sc.value == INT_MIN) { - result = true; - } else { - std::cerr << "Fail: program did not receive a signal\n"; - result = false; - } - } else { - UNREACHABLE; - result = false; - } - - if (result == false) { - std::cerr << "stdout:\n"; - cat_file(atf::fs::path(cr.stdout_path())); - std::cerr << "\n"; - - std::cerr << "stderr:\n"; - cat_file(atf::fs::path(cr.stderr_path())); - std::cerr << "\n"; - } - - return result; -} - -static -bool -run_status_checks(const std::vector< status_check >& checks, - const atf::check::check_result& result) -{ - bool ok = false; - - for (std::vector< status_check >::const_iterator iter = checks.begin(); - !ok && iter != checks.end(); iter++) { - ok |= run_status_check(*iter, result); - } - - return ok; -} - -static -bool -run_output_check(const output_check oc, const atf::fs::path& path, - const std::string& stdxxx) -{ - bool result; - - if (oc.type == oc_empty) { - const bool is_empty = file_empty(path); - if (!oc.negated && !is_empty) { - std::cerr << "Fail: " << stdxxx << " not empty\n"; - print_diff(atf::fs::path("/dev/null"), path); - result = false; - } else if (oc.negated && is_empty) { - std::cerr << "Fail: " << stdxxx << " is empty\n"; - result = false; - } else - result = true; - } else if (oc.type == oc_file) { - const bool equals = compare_files(path, atf::fs::path(oc.value)); - if (!oc.negated && !equals) { - std::cerr << "Fail: " << stdxxx << " does not match golden " - "output\n"; - print_diff(atf::fs::path(oc.value), path); - result = false; - } else if (oc.negated && equals) { - std::cerr << "Fail: " << stdxxx << " matches golden output\n"; - cat_file(atf::fs::path(oc.value)); - result = false; - } else - result = true; - } else if (oc.type == oc_ignore) { - result = true; - } else if (oc.type == oc_inline) { - atf::fs::path path2 = atf::fs::path(atf::config::get("atf_workdir")) - / "inline.XXXXXX"; - temp_file temp(path2); - temp.write(decode(oc.value)); - temp.close(); - - const bool equals = compare_files(path, temp.get_path()); - if (!oc.negated && !equals) { - std::cerr << "Fail: " << stdxxx << " does not match expected " - "value\n"; - print_diff(temp.get_path(), path); - result = false; - } else if (oc.negated && equals) { - std::cerr << "Fail: " << stdxxx << " matches expected value\n"; - cat_file(temp.get_path()); - result = false; - } else - result = true; - } else if (oc.type == oc_match) { - const bool matches = grep_file(path, oc.value); - if (!oc.negated && !matches) { - std::cerr << "Fail: regexp " + oc.value + " not in " << stdxxx - << "\n"; - cat_file(path); - result = false; - } else if (oc.negated && matches) { - std::cerr << "Fail: regexp " + oc.value + " is in " << stdxxx - << "\n"; - cat_file(path); - result = false; - } else - result = true; - } else if (oc.type == oc_save) { - INV(!oc.negated); - std::ifstream ifs(path.c_str(), std::fstream::binary); - ifs >> std::noskipws; - std::istream_iterator< char > begin(ifs), end; - - std::ofstream ofs(oc.value.c_str(), std::fstream::binary - | std::fstream::trunc); - std::ostream_iterator obegin(ofs); - - std::copy(begin, end, obegin); - result = true; - } else { - UNREACHABLE; - result = false; - } - - return result; -} - -static -bool -run_output_checks(const std::vector< output_check >& checks, - const atf::fs::path& path, const std::string& stdxxx) -{ - bool ok = true; - - for (std::vector< output_check >::const_iterator iter = checks.begin(); - iter != checks.end(); iter++) { - ok &= run_output_check(*iter, path, stdxxx); - } - - return ok; -} - -// ------------------------------------------------------------------------ -// The "atf_check" application. -// ------------------------------------------------------------------------ - -namespace { - -class atf_check : public atf::application::app { - bool m_xflag; - - std::vector< status_check > m_status_checks; - std::vector< output_check > m_stdout_checks; - std::vector< output_check > m_stderr_checks; - - static const char* m_description; - - bool run_output_checks(const atf::check::check_result&, - const std::string&) const; - - std::string specific_args(void) const; - options_set specific_options(void) const; - void process_option(int, const char*); - void process_option_s(const std::string&); - -public: - atf_check(void); - int main(void); -}; - -} // anonymous namespace - -const char* atf_check::m_description = - "atf-check executes given command and analyzes its results."; - -atf_check::atf_check(void) : - app(m_description, "atf-check(1)", "atf(7)"), - m_xflag(false) -{ -} - -bool -atf_check::run_output_checks(const atf::check::check_result& r, - const std::string& stdxxx) - const -{ - if (stdxxx == "stdout") { - return ::run_output_checks(m_stdout_checks, - atf::fs::path(r.stdout_path()), "stdout"); - } else if (stdxxx == "stderr") { - return ::run_output_checks(m_stderr_checks, - atf::fs::path(r.stderr_path()), "stderr"); - } else { - UNREACHABLE; - return false; - } -} - -std::string -atf_check::specific_args(void) - const -{ - return ""; -} - -atf_check::options_set -atf_check::specific_options(void) - const -{ - using atf::application::option; - options_set opts; - - opts.insert(option('s', "qual:value", "Handle status. Qualifier " - "must be one of: ignore exit: signal:")); - opts.insert(option('o', "action:arg", "Handle stdout. Action must be " - "one of: empty ignore file: inline: match:regexp " - "save:")); - opts.insert(option('e', "action:arg", "Handle stderr. Action must be " - "one of: empty ignore file: inline: match:regexp " - "save:")); - opts.insert(option('x', "", "Execute command as a shell command")); - - return opts; -} - -void -atf_check::process_option(int ch, const char* arg) -{ - switch (ch) { - case 's': - m_status_checks.push_back(parse_status_check_arg(arg)); - break; - - case 'o': - m_stdout_checks.push_back(parse_output_check_arg(arg)); - break; - - case 'e': - m_stderr_checks.push_back(parse_output_check_arg(arg)); - break; - - case 'x': - m_xflag = true; - break; - - default: - UNREACHABLE; - } -} - -int -atf_check::main(void) -{ - if (m_argc < 1) - throw atf::application::usage_error("No command specified"); - - int status = EXIT_FAILURE; - - std::auto_ptr< atf::check::check_result > r = - m_xflag ? execute_with_shell(m_argv) : execute(m_argv); - - if (m_status_checks.empty()) - m_status_checks.push_back(status_check(sc_exit, false, EXIT_SUCCESS)); - else if (m_status_checks.size() > 1) { - // TODO: Remove this restriction. - throw atf::application::usage_error("Cannot specify -s more than once"); - } - - if (m_stdout_checks.empty()) - m_stdout_checks.push_back(output_check(oc_empty, false, "")); - if (m_stderr_checks.empty()) - m_stderr_checks.push_back(output_check(oc_empty, false, "")); - - if ((run_status_checks(m_status_checks, *r) == false) || - (run_output_checks(*r, "stderr") == false) || - (run_output_checks(*r, "stdout") == false)) - status = EXIT_FAILURE; - else - status = EXIT_SUCCESS; - - return status; -} - -int -main(int argc, char* const* argv) -{ - return atf_check().run(argc, argv); -} Index: vendor/NetBSD/atf/dist/dist/atf-sh/libatf-sh.subr =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/libatf-sh.subr (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/libatf-sh.subr (nonexistent) @@ -1,932 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -set -e - -# ------------------------------------------------------------------------ -# GLOBAL VARIABLES -# ------------------------------------------------------------------------ - -# The list of all test cases defined by the test program. -Defined_Test_Cases= - -# Values for the expect property. -Expect=pass -Expect_Reason= - -# A boolean variable that indicates whether we are parsing a test case's -# head or not. -Parsing_Head=false - -# The program name. -Prog_Name=${0##*/} - -# The file to which the test case will print its result. -Results_File= - -# The test program's source directory: i.e. where its auxiliary data files -# and helper utilities can be found. Can be overriden through the '-s' flag. -Source_Dir="$(dirname ${0})" - -# Indicates the test case we are currently processing. -Test_Case= - -# List of meta-data variables for the current test case. -Test_Case_Vars= - -# The list of all test cases provided by the test program. -# Subset of ${Defined_Test_Cases}. -Test_Cases= -Test_Cases_With_Cleanup= - -# ------------------------------------------------------------------------ -# PUBLIC INTERFACE -# ------------------------------------------------------------------------ - -# -# atf_add_test_case tc-name -# -# Adds the given test case to the list of test cases that form the test -# program. The name provided here must be accompanied by two functions -# named after it: _head and _body, and optionally by -# a _cleanup function. -# -atf_add_test_case() -{ - _atf_is_tc_defined "${1}" || \ - _atf_error 128 "Test case ${1} was not correctly defined by" \ - "this test program" - Test_Cases="${Test_Cases} ${1}" -} - -# -# atf_check cmd expcode expout experr -# -# Executes atf-check with given arguments and automatically calls -# atf_fail in case of failure. -# -atf_check() -{ - ${Atf_Check} "${@}" || \ - atf_fail "atf-check failed; see the output of the test for details" -} - -# -# atf_check_equal expr1 expr2 -# -# Checks that expr1's value matches expr2's and, if not, raises an -# error. Ideally expr1 and expr2 should be provided quoted (not -# expanded) so that the error message is helpful; otherwise it will -# only show the values, not the expressions themselves. -# -atf_check_equal() -{ - eval _val1=\"${1}\" - eval _val2=\"${2}\" - test "${_val1}" = "${_val2}" || \ - atf_fail "${1} != ${2} (${_val1} != ${_val2})" -} - -# -# atf_config_get varname [defvalue] -# -# Prints the value of a configuration variable. If it is not -# defined, prints the given default value. -# -atf_config_get() -{ - _varname="__tc_config_var_$(_atf_normalize ${1})" - if [ ${#} -eq 1 ]; then - eval _value=\"\${${_varname}-__unset__}\" - [ "${_value}" = __unset__ ] && \ - _atf_error 1 "Could not find configuration variable \`${1}'" - echo ${_value} - elif [ ${#} -eq 2 ]; then - eval echo \${${_varname}-${2}} - else - _atf_error 1 "Incorrect number of parameters for atf_config_get" - fi -} - -# -# atf_config_has varname -# -# Returns a boolean indicating if the given configuration variable is -# defined or not. -# -atf_config_has() -{ - _varname="__tc_config_var_$(_atf_normalize ${1})" - eval _value=\"\${${_varname}-__unset__}\" - [ "${_value}" != __unset__ ] -} - -# -# atf_expect_death reason -# -# Sets the expectations to 'death'. -# -atf_expect_death() -{ - _atf_validate_expect - - Expect=death - _atf_create_resfile expected_death -1 "${@}" -} - -# -# atf_expect_timeout reason -# -# Sets the expectations to 'timeout'. -# -atf_expect_timeout() -{ - _atf_validate_expect - - Expect=timeout - _atf_create_resfile expected_timeout -1 "${@}" -} - -# -# atf_expect_exit exitcode reason -# -# Sets the expectations to 'exit'. -# -atf_expect_exit() -{ - _exitcode="${1}"; shift - - _atf_validate_expect - - Expect=exit - _atf_create_resfile expected_exit "${_exitcode}" "${@}" -} - -# -# atf_expect_fail reason -# -# Sets the expectations to 'fail'. -# -atf_expect_fail() -{ - _atf_validate_expect - - Expect=fail - Expect_Reason="${*}" -} - -# -# atf_expect_pass -# -# Sets the expectations to 'pass'. -# -atf_expect_pass() -{ - _atf_validate_expect - - Expect=pass - Expect_Reason= -} - -# -# atf_expect_signal signo reason -# -# Sets the expectations to 'signal'. -# -atf_expect_signal() -{ - _signo="${1}"; shift - - _atf_validate_expect - - Expect=signal - _atf_create_resfile expected_signal "${_signo}" "${@}" -} - -# -# atf_expected_failure msg1 [.. msgN] -# -# Makes the test case report an expected failure with the given error -# message. Multiple words can be provided, which are concatenated with -# a single blank space. -# -atf_expected_failure() -{ - _atf_create_resfile expected_failure -1 "${Expect_Reason}:" "${@}" - exit 0 -} - -# -# atf_fail msg1 [.. msgN] -# -# Makes the test case fail with the given error message. Multiple -# words can be provided, in which case they are joined by a single -# blank space. -# -atf_fail() -{ - case "${Expect}" in - fail) - atf_expected_failure "${@}" - ;; - pass) - _atf_create_resfile failed -1 "${@}" - exit 1 - ;; - *) - _atf_error 128 "Unreachable" - ;; - esac -} - -# -# atf_get varname -# -# Prints the value of a test case-specific variable. Given that one -# should not get the value of non-existent variables, it is fine to -# always use this function as 'val=$(atf_get var)'. -# -atf_get() -{ - eval echo \${__tc_var_${Test_Case}_$(_atf_normalize ${1})} -} - -# -# atf_get_srcdir -# -# Prints the value of the test case's source directory. -# -atf_get_srcdir() -{ - _atf_internal_get srcdir -} - -# -# atf_init_test_cases -# -# The function in charge of registering the test cases that have to -# be made available to the user. Must be redefined. -# -atf_init_test_cases() -{ - _atf_error 128 "No test cases defined" -} - -# -# atf_pass -# -# Makes the test case pass. Shouldn't be used in general, as a test -# case that does not explicitly fail is assumed to pass. -# -atf_pass() -{ - case "${Expect}" in - fail) - Expect=pass - atf_fail "Test case was expecting a failure but got a pass instead" - ;; - pass) - _atf_create_resfile passed -1 - exit 0 - ;; - *) - _atf_error 128 "Unreachable" - ;; - esac -} - -# -# atf_require_prog prog -# -# Checks that the given program name (either provided as an absolute -# path or as a plain file name) can be found. If it is not available, -# automatically skips the test case with an appropriate message. -# -# Relative paths are not allowed because the test case cannot predict -# where it will be executed from. -# -atf_require_prog() -{ - _prog= - case ${1} in - /*) - _prog="${1}" - [ -x ${_prog} ] || \ - atf_skip "The required program ${1} could not be found" - ;; - */*) - atf_fail "atf_require_prog does not accept relative path names \`${1}'" - ;; - *) - _prog=$(_atf_find_in_path "${1}") - [ -n "${_prog}" ] || \ - atf_skip "The required program ${1} could not be found" \ - "in the PATH" - ;; - esac -} - -# -# atf_set varname val1 [.. valN] -# -# Sets the test case's variable 'varname' to the specified values -# which are concatenated using a single blank space. This function -# is supposed to be called form the test case's head only. -# -atf_set() -{ - ${Parsing_Head} || \ - _atf_error 128 "atf_set called from the test case's body" - - Test_Case_Vars="${Test_Case_Vars} ${1}" - _var=$(_atf_normalize ${1}); shift - eval __tc_var_${Test_Case}_${_var}=\"\${*}\" -} - -# -# atf_skip msg1 [.. msgN] -# -# Skips the test case because of the reason provided. Multiple words -# can be given, in which case they are joined by a single blank space. -# -atf_skip() -{ - _atf_create_resfile skipped -1 "${@}" - exit 0 -} - -# -# atf_test_case tc-name cleanup -# -# Defines a new test case named tc-name. The name provided here must be -# accompanied by two functions named after it: _head and -# _body. If cleanup is set to 'cleanup', then this also expects -# a _cleanup function to be defined. -# -atf_test_case() -{ - Defined_Test_Cases="${Defined_Test_Cases} ${1}" - - eval "${1}_head() { :; }" - eval "${1}_body() { :; }" - if [ "${2}" = cleanup ]; then - Test_Cases_With_Cleanup="${Test_Cases_With_Cleanup} ${1}" - eval "${1}_cleanup() { :; }" - else - eval "${1}_cleanup() { - _atf_error 1 'Test case ${1} declared without a cleanup routine'; }" - fi -} - -# ------------------------------------------------------------------------ -# PRIVATE INTERFACE -# ------------------------------------------------------------------------ - -# -# _atf_config_set varname val1 [.. valN] -# -# Sets the test case's private variable 'varname' to the specified -# values which are concatenated using a single blank space. -# -_atf_config_set() -{ - _var=$(_atf_normalize ${1}); shift - eval __tc_config_var_${_var}=\"\${*}\" - Config_Vars="${Config_Vars} __tc_config_var_${_var}" -} - -# -# _atf_config_set_str varname=val -# -# Sets the test case's private variable 'varname' to the specified -# value. The parameter is of the form 'varname=val'. -# -_atf_config_set_from_str() -{ - _oldifs=${IFS} - IFS='=' - set -- ${*} - _var=${1} - shift - _val="${@}" - IFS=${_oldifs} - _atf_config_set "${_var}" "${_val}" -} - -# -# _atf_create_resfile result arg [reason ...] -# -# Creates the results file. -# -_atf_create_resfile() -{ - _result="${1}"; shift - if [ "${1}" -eq -1 ]; then - _arg="" - shift - else - _arg="(${1})" - shift - fi - if [ ${#} -gt 0 ]; then - _reason=": ${*}" - else - _reason="" - fi - - if [ -n "${Results_File}" ]; then - echo "${_result}${_arg}${_reason}" >"${Results_File}" || \ - _atf_error 128 "Cannot create results file '${Results_File}'" - else - echo "${_result}${_arg}${_reason}" - fi -} - -# -# _atf_ensure_boolean var -# -# Ensures that the test case defined the variable 'var' to a boolean -# value. -# -_atf_ensure_boolean() -{ - _atf_ensure_not_empty ${1} - - case $(atf_get ${1}) in - [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]) - atf_set ${1} true - ;; - [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]) - atf_set ${1} false - ;; - *) - _atf_error 128 "Invalid value for boolean variable \`${1}'" - ;; - esac -} - -# -# _atf_ensure_not_empty var -# -# Ensures that the test case defined the variable 'var' to a non-empty -# value. -# -_atf_ensure_not_empty() -{ - [ -n "$(atf_get ${1})" ] || \ - _atf_error 128 "Undefined or empty variable \`${1}'" -} - -# -# _atf_error error_code [msg1 [.. msgN]] -# -# Prints the given error message (which can be composed of multiple -# arguments, in which case are joined by a single space) and exits -# with the specified error code. -# -# This must not be used by test programs themselves (hence making -# the function private) to indicate a test case's failure. They -# have to use the atf_fail function. -# -_atf_error() -{ - _error_code="${1}"; shift - - echo "${Prog_Name}: ERROR:" "$@" 1>&2 - exit ${_error_code} -} - -# -# _atf_find_in_path program -# -# Looks for a program in the path and prints the full path to it or -# nothing if it could not be found. It also returns true in case of -# success. -# -_atf_find_in_path() -{ - _prog="${1}" - - _oldifs=${IFS} - IFS=: - for _dir in ${PATH} - do - if [ -x ${_dir}/${_prog} ]; then - IFS=${_oldifs} - echo ${_dir}/${_prog} - return 0 - fi - done - IFS=${_oldifs} - - return 1 -} - -# -# _atf_has_tc name -# -# Returns true if the given test case exists. -# -_atf_has_tc() -{ - for _tc in ${Test_Cases}; do - if [ ${_tc} = ${1} ]; then - return 0 - fi - done - return 1 -} - -# -# _atf_get_bool varname -# -# Evaluates a test case-specific variable as a boolean and returns its -# value. -# -_atf_get_bool() -{ - eval $(atf_get ${1}) -} - -# -# _atf_internal_get varname -# -# Prints the value of a test case-specific internal variable. Given -# that one should not get the value of non-existent variables, it is -# fine to always use this function as 'val=$(_atf_internal_get var)'. -# -_atf_internal_get() -{ - eval echo \${__tc_internal_var_${Test_Case}_${1}} -} - -# -# _atf_internal_set varname val1 [.. valN] -# -# Sets the test case's private variable 'varname' to the specified -# values which are concatenated using a single blank space. -# -_atf_internal_set() -{ - _var=${1}; shift - eval __tc_internal_var_${Test_Case}_${_var}=\"\${*}\" -} - -# -# _atf_list_tcs -# -# Describes all test cases and prints the list to the standard output. -# -_atf_list_tcs() -{ - echo 'Content-Type: application/X-atf-tp; version="1"' - echo - - set -- ${Test_Cases} - while [ ${#} -gt 0 ]; do - _atf_parse_head ${1} - - echo "ident: $(atf_get ident)" - for _var in ${Test_Case_Vars}; do - [ "${_var}" != "ident" ] && echo "${_var}: $(atf_get ${_var})" - done - - [ ${#} -gt 1 ] && echo - shift - done -} - -# -# _atf_normalize str -# -# Normalizes a string so that it is a valid shell variable name. -# -_atf_normalize() -{ - echo ${1} | tr .- __ -} - -# -# _atf_parse_head tcname -# -# Evaluates a test case's head to gather its variables and prepares the -# test program to run it. -# -_atf_parse_head() -{ - ${Parsing_Head} && _atf_error 128 "_atf_parse_head called recursively" - Parsing_Head=true - - Test_Case="${1}" - Test_Case_Vars= - - if _atf_has_cleanup "${1}"; then - atf_set has.cleanup "true" - fi - - atf_set ident "${1}" - ${1}_head - _atf_ensure_not_empty ident - test $(atf_get ident) = "${1}" || \ - _atf_error 128 "Test case redefined ident" - - Parsing_Head=false -} - -# -# _atf_run_tc tc -# -# Runs the specified test case. Prints its exit status to the -# standard output and returns a boolean indicating if the test was -# successful or not. -# -_atf_run_tc() -{ - case ${1} in - *:*) - _tcname=${1%%:*} - _tcpart=${1#*:} - - if [ "${_tcpart}" != body -a "${_tcpart}" != cleanup ]; then - _atf_syntax_error "Unknown test case part \`${_tcpart}'" - fi - ;; - - *) - _tcname=${1} - _tcpart=body - ;; - esac - - if _atf_has_tc ${_tcname}; then - _atf_parse_head ${_tcname} - - _atf_internal_set srcdir "${Source_Dir}" - - case ${_tcpart} in - body) - if ${_tcname}_body; then - _atf_validate_expect - _atf_create_resfile passed -1 - else - Expect=pass - atf_fail "Test case body returned a non-ok exit code, but" \ - "this is not allowed" - fi - ;; - cleanup) - if _atf_has_cleanup "${_tcname}"; then - if ${_tcname}_cleanup; then - : - else - _atf_error 128 "The test case cleanup returned a non-ok" \ - "exit code, but this is not allowed" - fi - fi - ;; - *) - _atf_error 128 "Unknown test case part" - ;; - esac - else - _atf_syntax_error "Unknown test case \`${1}'" - fi -} - -# -# _atf_sighup_handler -# -# Handler for the SIGHUP signal that registers its occurrence so that -# it can be processed at a later stage. -# -_atf_sighup_handler() -{ - Held_Signals="${Held_Signals} SIGHUP" -} - -# -# _atf_sigint_handler -# -# Handler for the SIGINT signal that registers its occurrence so that -# it can be processed at a later stage. -# -_atf_sigint_handler() -{ - Held_Signals="${Held_Signals} SIGINT" -} - -# -# _atf_sigterm_handler -# -# Handler for the SIGTERM signal that registers its occurrence so that -# it can be processed at a later stage. -# -_atf_sigterm_handler() -{ - Held_Signals="${Held_Signals} SIGTERM" -} - -# -# _atf_syntax_error msg1 [.. msgN] -# -# Formats and prints a syntax error message and terminates the -# program prematurely. -# -_atf_syntax_error() -{ - echo "${Prog_Name}: ERROR: ${@}" 1>&2 - echo "${Prog_Name}: See atf-test-program(1) for usage details." 1>&2 - exit 1 -} - -# -# _atf_is_tc_defined tc-name -# -# Returns a boolean indicating if the given test case was defined by the -# test program or not. -# -_atf_is_tc_defined() -{ - for _tc in ${Defined_Test_Cases}; do - [ ${_tc} = ${1} ] && return 0 - done - return 1 -} - -# -# _atf_has_cleanup tc-name -# -# Returns a boolean indicating if the given test case has a cleanup -# routine or not. -# -_atf_has_cleanup() -{ - for _tc in ${Test_Cases_With_Cleanup}; do - [ ${_tc} = ${1} ] && return 0 - done - return 1 -} - -# -# _atf_validate_expect -# -# Ensures that the current test case state is correct regarding the expect -# status. -# -_atf_validate_expect() -{ - case "${Expect}" in - death) - Expect=pass - atf_fail "Test case was expected to terminate abruptly but it" \ - "continued execution" - ;; - exit) - Expect=pass - atf_fail "Test case was expected to exit cleanly but it continued" \ - "execution" - ;; - fail) - Expect=pass - atf_fail "Test case was expecting a failure but none were raised" - ;; - pass) - ;; - signal) - Expect=pass - atf_fail "Test case was expected to receive a termination signal" \ - "but it continued execution" - ;; - timeout) - Expect=pass - atf_fail "Test case was expected to hang but it continued execution" - ;; - *) - _atf_error 128 "Unreachable" - ;; - esac -} - -# -# _atf_warning [msg1 [.. msgN]] -# -# Prints the given warning message (which can be composed of multiple -# arguments, in which case are joined by a single space). -# -# This must not be used by test programs themselves (hence making -# the function private). -# -_atf_warning() -{ - echo "${Prog_Name}: WARNING:" "$@" 1>&2 -} - -# -# main [options] test_case -# -# Test program's entry point. -# -main() -{ - # Process command-line options first. - _numargs=${#} - _lflag=false - while getopts :lr:s:v: arg; do - case ${arg} in - l) - _lflag=true - ;; - - r) - Results_File=${OPTARG} - ;; - - s) - Source_Dir=${OPTARG} - ;; - - v) - _atf_config_set_from_str "${OPTARG}" - ;; - - \?) - _atf_syntax_error "Unknown option -${OPTARG}." - # NOTREACHED - ;; - esac - done - shift `expr ${OPTIND} - 1` - - # First of all, make sure that the source directory is correct. It - # doesn't matter if the user did not change it, because the default - # value may not work. (TODO: It possibly should, even though it is - # not a big deal because atf-run deals with this.) - case ${Source_Dir} in - /*) - ;; - *) - Source_Dir=$(pwd)/${Source_Dir} - ;; - esac - [ -f ${Source_Dir}/${Prog_Name} ] || \ - _atf_error 1 "Cannot find the test program in the source" \ - "directory \`${Source_Dir}'" - - # Set some global variables useful to the user. Not specific to the - # test case because they may be needed during initialization too. - # XXX I'm not too fond on this though. Sure, it is very useful in some - # situations -- such as in NetBSD's fs/tmpfs/* tests where each test - # program includes a helper subroutines file -- but there are also - # other, maybe better ways to achieve the same. Because, for example, - # at the moment it is not possible to detect failures in the inclusion - # and report them nicely. Plus this change is difficult to implement - # in the current C++ API. - _atf_internal_set srcdir "${Source_Dir}" - - # Call the test program's hook to register all available test cases. - atf_init_test_cases - - # Run or list test cases. - if `${_lflag}`; then - if [ ${#} -gt 0 ]; then - _atf_syntax_error "Cannot provide test case names with -l" - fi - _atf_list_tcs - else - if [ ${#} -eq 0 ]; then - _atf_syntax_error "Must provide a test case name" - elif [ ${#} -gt 1 ]; then - _atf_syntax_error "Cannot provide more than one test case name" - else - _atf_run_tc "${1}" - fi - fi -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-sh/tc_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/tc_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/tc_test.sh (nonexistent) @@ -1,51 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -atf_test_case default_status -default_status_head() -{ - atf_set "descr" "Verifies that test cases get the correct default" \ - "status if they did not provide any" -} -default_status_body() -{ - h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" - atf_check -s eq:0 -o ignore -e ignore ${h} tc_pass_true - atf_check -s eq:1 -o ignore -e ignore ${h} tc_pass_false - atf_check -s eq:1 -o match:'failed:.*body.*non-ok exit code' -e ignore \ - ${h} tc_pass_return_error - atf_check -s eq:1 -o ignore -e match:'An error' ${h} tc_fail -} - -atf_init_test_cases() -{ - atf_add_test_case default_status -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-sh/tp_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-sh/tp_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-sh/tp_test.sh (nonexistent) @@ -1,56 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -atf_test_case srcdir -srcdir_head() -{ - atf_set "descr" "Verifies that the source directory can be queried" \ - "from the initialization function" -} -srcdir_body() -{ - mkdir work - atf_check -s eq:0 -o empty -e empty cp "$(atf_get_srcdir)/misc_helpers" work - cat >work/subrs < -} - -#include -#include -#include -#include - -#include "atf-c++/config.hpp" - -#include "atf-c++/detail/application.hpp" -#include "atf-c++/detail/fs.hpp" -#include "atf-c++/detail/sanity.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -namespace { - -static -std::string -fix_plain_name(const char *filename) -{ - const atf::fs::path filepath(filename); - if (filepath.branch_path().str() == ".") - return std::string("./") + filename; - else - return std::string(filename); -} - -static -std::string* -construct_script(const char* filename) -{ - const std::string libexecdir = atf::config::get("atf_libexecdir"); - const std::string pkgdatadir = atf::config::get("atf_pkgdatadir"); - const std::string shell = atf::config::get("atf_shell"); - - std::string* command = new std::string(); - command->reserve(512); - (*command) += ("Atf_Check='" + libexecdir + "/atf-check' ; " + - "Atf_Shell='" + shell + "' ; " + - ". " + pkgdatadir + "/libatf-sh.subr ; " + - ". " + fix_plain_name(filename) + " ; " + - "main \"${@}\""); - return command; -} - -static -const char** -construct_argv(const std::string& shell, const int interpreter_argc, - const char* const* interpreter_argv) -{ - PRE(interpreter_argc >= 1); - PRE(interpreter_argv[0] != NULL); - - const std::string* script = construct_script(interpreter_argv[0]); - - const int count = 4 + (interpreter_argc - 1) + 1; - const char** argv = new const char*[count]; - argv[0] = shell.c_str(); - argv[1] = "-c"; - argv[2] = script->c_str(); - argv[3] = interpreter_argv[0]; - - for (int i = 1; i < interpreter_argc; i++) - argv[4 + i - 1] = interpreter_argv[i]; - - argv[count - 1] = NULL; - - return argv; -} - -} // anonymous namespace - -// ------------------------------------------------------------------------ -// The "atf_sh" class. -// ------------------------------------------------------------------------ - -class atf_sh : public atf::application::app { - static const char* m_description; - -public: - atf_sh(void); - - int main(void); -}; - -const char* atf_sh::m_description = - "atf-sh is a shell interpreter that extends the functionality of the " - "system sh(1) with the atf-sh library."; - -atf_sh::atf_sh(void) : - app(m_description, "atf-sh(1)", "atf(7)") -{ -} - -int -atf_sh::main(void) -{ - if (m_argc < 1) - throw atf::application::usage_error("No test program provided"); - - const atf::fs::path script(m_argv[0]); - if (!atf::fs::exists(script)) - throw std::runtime_error("The test program '" + script.str() + "' " - "does not exist"); - - const std::string shell = atf::config::get("atf_shell"); - const char** argv = construct_argv(shell, m_argc, m_argv); - // Don't bother keeping track of the memory allocated by construct_argv: - // we are going to exec or die immediately. - - const int ret = execv(shell.c_str(), const_cast< char** >(argv)); - INV(ret == -1); - std::cerr << "Failed to execute " << shell << ": " << std::strerror(errno) - << "\n"; - return EXIT_FAILURE; -} - -int -main(int argc, char* const* argv) -{ - return atf_sh().run(argc, argv); -} Index: vendor/NetBSD/atf/dist/dist/atf-c++.hpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c++.hpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c++.hpp (nonexistent) @@ -1,35 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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. -// - -#if !defined(_ATF_CXX_HPP_) -#define _ATF_CXX_HPP_ - -#include - -#endif // !defined(_ATF_CXX_HPP_) Index: vendor/NetBSD/atf/dist/dist/doc/atf-formats.5 =================================================================== --- vendor/NetBSD/atf/dist/dist/doc/atf-formats.5 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/doc/atf-formats.5 (nonexistent) @@ -1,229 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd June 7, 2010 -.Dt ATF-FORMATS 5 -.Os -.Sh NAME -.Nm atf-formats -.Nd machine-parseable data formats used by ATF -.Sh DESCRIPTION -This manual page describes the multiple data formats used in ATF. -These formats affect configuration files, control files and any data that -is externalized or internalized by the tools. -.Pp -Data files are always organized as follows: -.Bd -literal -offset indent -Header1: Value1 \\ - ... | head -HeaderN: ValueN / - mandatory blank line -Free-form text contents \\ - ... | body - ... / -.Ed -.Pp -A file must always contain a -.Sq Content-Type -header and must always separate that header from the body with a blank -line, even if the body is empty. -.Pp -The -.Sq Content-Type -is always of the form: -.Bd -literal -offset indent -Content-Type: application/X-atf-; version="" -.Ed -.Pp -where -.Sq subtype -indicates the specific file format and -.Sq version -its format version. -This header must be the first one of the file. -.Pp -The main purpose of the -.Sq Content-Type -header, aside from determining the format used in the file, is to allow -future changes to a given format. -Whenever an incompatible change is made, the version is bumped by one. -By keeping the header in the first line, future versions may even remove -the need for such a header -- e.g. if some format was replaced by XML -files, which have their own mandatory header. -.Pp -The rest of this document details the different format types. -.Ss Format: application/X-atf-atffile, version: 1 -Atffiles are logically divided into three sections: -.Bl -bullet -.It -Test programs: the list of test programs that define the test suite -described by the Atffile. -.It -Meta-data properties: these define some constant values applicable to -all the test programs defined in the file. -In some sense they define the properties that describe the test suite. -.It -Configuration variables: defaults for configuration variables that -can be overridden through configuration files or the command line. -.El -.Pp -The grammar for Atffiles is the following: -.Bd -literal -offset indent -DATA ::= ( ( CONF | PROP | TP )? COMMENT? NEWLINE )* EOF -CONF ::= 'conf:' WORD EQUAL STRING -PROP ::= 'prop:' WORD EQUAL STRING -TP ::= TPFILE | TPGLOB -TPFILE ::= 'tp: ' STRING -TPGLOB ::= 'tp-glob: ' STRING -STRING ::= WORD | '"' WORD* '"' -.Ed -.Pp -The meaning of the constructions above is: -.Bl -tag -width TPGLOBXX -.It CONF -Definition of a configuration variable. -.It PROP -Definition of a meta-data property. -.It TPFILE -Addition of a test program into the test suite. -The string is taken literally as the program's name, and this program -must exist. -.It TPGLOB -Addition of multiple test programs into the test suite. -The string is taken as a glob pattern, which may have or not have any -matches in the current directory. -.El -.Pp -An example: -.Bd -literal -offset indent -prop: test-suite = utilities - -conf: unprivileged-user = nobody - -tp: t_cp -tp: t_mv -tp: t_df -tp-glob: t_dir_* -.Ed -.Ss Format: application/X-atf-config, version: 1 -Configuration files are very simple: they only contain a list of variable -name/variable value pairs. -Their grammar is: -.Bd -literal -offset indent -DATA ::= ( VAR? COMMENT? NEWLINE )* EOF -VAR ::= WORD EQUAL STRING -COMMENT ::= HASH WORD* -STRING ::= WORD | '"' WORD* '"' -.Ed -.Pp -An example: -.Bd -literal -offset indent -# This is the system-wide configuration file for ATF. -# The above and this line are comments placed on their own line. - -var1 = this is a variable value -var2 = this is another one # Optional comment at the end. -.Ed -.Ss Format: application/X-atf-tps, version: 2 -The -.Sq application/X-atf-tps -format multiplexes the standard output, standard error and results output -streams from multiple test programs into a single data file. -This format is used by -.Xr atf-run 1 -to report the execution of several test programs and is later parsed by -.Xr atf-report 1 -to inform the user of this process. -It has the following grammar: -.Bd -literal -offset indent -DATA ::= INFO* TPS-COUNT TP-STANZA* INFO* EOF -INFO ::= 'info' COLON STRING COMMA STRING NEWLINE -TPS-COUNT ::= 'tps-count' COLON POSITIVE-NUMBER NEWLINE -TP-STANZA ::= TP-START TC-STANZA* TC-END -TP-START ::= 'tp-start' COLON STRING COMMA POSITIVE-NUMBER NEWLINE -TP-END ::= 'tc-end' COLON STRING (COMMA STRING)? -TC-STANZA ::= TC-START (TC-SO | TC-SE)* TC-END -TC-START ::= 'tc-start' COLON STRING NEWLINE -TC-SO ::= 'tc-so' COLON STRING NEWLINE -TC-SE ::= 'tc-se' COLON STRING NEWLINE -TC-END ::= 'tc-end' COLON STRING COMMA TCR NEWLINE -TCR ::= 'passed' | ('failed' | 'skipped') COMMA STRING -.Ed -.Pp -The meaning of the constructions above is: -.Bl -tag -width TPSXCOUNTXX -.It TPS-COUNT -Indicates the number of test programs that will be executed. -There will be this exact amount of -.Sq TP-STANZA -constructions following it. -.It TP-START -Indicates the beginning of a test program. -This includes the program's name and the amount of test cases that -will follow. -.It TP-END -Indicates the completion of a test program. -This is followed by the program's name and, if the program ended -prematurely, an error message indicating the reason of its failure. -A successful execution of a test program (regardless of the status of its -test cases) must not be accompanied by any reason. -.It TC-START -Indicates the beginning of a test case. -This is accompanied by the test case's name. -.It TC-SO -Contains a text line sent to the standard output stream during the -execution of the test case. -Leading and trailing space is preserved. -.It TC-SE -Contains a text line sent to the standard error stream during the -execution of the test case. -Leading and trailing space is preserved. -.It TC-END -Indicates the completion of a test case. -This is accompanied by the test case's name, its result and the reason -associated with this result (if applicable). -.El -.Pp -An example: -.Bd -literal -offset indent -tps-count: 2 -tp-start: calculator, 2 -tc-start: add -tc-end: add, passed -tc-start: subtract -tc-so: 3-2 expected to return 1 but got 0 -tc-end: subtract, failed, Calculated an unexpected value -tp-end: calculator -tp-start: files, 1 -tc-start: copy -tc-se: could not find the cp(1) utility -tc-end: copy, skipped -tp-end: files -.Ed -.Sh SEE ALSO -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/doc/atf-test-case.4 =================================================================== --- vendor/NetBSD/atf/dist/dist/doc/atf-test-case.4 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/doc/atf-test-case.4 (nonexistent) @@ -1,289 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd December 13, 2010 -.Dt ATF-TEST-CASE 4 -.Os -.Sh NAME -.Nm atf-test-case -.Nd generic description of test cases -.Sh DESCRIPTION -A -.Em test case -is a piece of code that stress-tests a specific feature of the software. -This feature is typically self-contained enough, either in the amount of -code that implements it or in the general idea that describes it, to -warrant its independent testing. -Given this, test cases are very fine-grained, but they attempt to group -similar smaller tests which are semantically related. -.Pp -A test case is defined by three components regardless of the language it is -implemented in: a header, a body and a cleanup routine. -The -.Em header -is, basically, a declarative piece of code that defines several -properties to describe what the test case does and how it behaves. -In other words: it defines the test case's -.Em meta-data , -further described in the -.Sx Meta-data -section. -The -.Em body -is the test case itself. -It executes all actions needed to reproduce the test, and checks for -failures. -This body is only executed if the abstract conditions specified by the -header are met. -The -.Em cleanup routine -routine is a piece of code always executed after the body, regardless of -the exit status of the test case. -It can be used to undo side-effects of the test case. -Note that almost all side-effects of a test case are automatically cleaned -up by the library; this is explained in more detail in the rest of this -document. -.Pp -It is extremely important to keep the separation between a test case's -header and body well-defined, because the header is -.Em always -parsed, whereas the body is only executed when the conditions defined in -the header are met and when the user specifies that test case. -.Pp -At last, test cases are always contained into test programs. -The test programs act as a front-end to them, providing a consistent -interface to the user and several APIs to ease their implementation. -.Ss Results -Upon termination, a test case reports a status and, optionally, a textual -reason describing why the test reported such status. -The caller must ensure that the test case really performed the task that its -status describes, as the test program may be bogus and therefore providing a -misleading result (e.g. providing a result that indicates success but the -error code of the program says otherwise). -.Pp -The possible exit status of a test case are one of the following: -.Bl -tag -width expectedXfailureXX -.It expected_death -The test case expects to terminate abruptly. -.It expected_exit -The test case expects to exit cleanly. -.It expected_failure -The test case expects to exit with a controller fatal/non-fatal failure. -If this happens, the test program exits with a success error code. -.It expected_signal -The test case expects to receive a signal that makes it terminate. -.It expected_timeout -The test case expects to execute for longer than its timeout. -.It passed -The test case was executed successfully. -The test program exits with a success error code. -.It skipped -The test case could not be executed because some preconditions were not -met. -This is not a failure because it can typically be resolved by adjusting -the system to meet the necessary conditions. -This is always accompanied by a -.Em reason , -a message describing why the test was skipped. -The test program exits with a success error code. -.It failed -An error appeared during the execution of the test case. -This is always accompanied by a -.Em reason , -a message describing why the test failed. -The test program exits with a failure error code. -.El -.Pp -The usefulness of the -.Sq expected_* -results comes when writing test cases that verify known failures caused, -in general, due to programming errors (aka bugs). -Whenever the faulty condition that the expectation is trying to convery is -fixed, then the test case will be reported as -.Sq failed -and the developer will have to adjust it to match its new condition. -.Pp -It is important to note that all -.Sq expected_* -results are only provided as a -.Em hint -to the caller; the caller must verify that the test case did actually terminate -as the expected condition says. -.Ss Input/output -Test cases are free to print whatever they want to their -.Xr stdout 4 -and -.Xr stderr 4 -file descriptors. -They are, in fact, encouraged to print status information as they execute -to keep the user informed of their actions. -This is specially important for long test cases. -.Pp -Test cases will log their results to an auxiliary file, which is then -collected by the test program they are contained in. -The developer need not care about this as long as he uses the correct -APIs to implement the test cases. -.Ss Meta-data -The following list describes all meta-data properties interpreted -internally by ATF. -You are free to define new properties in your test cases and use them as -you wish, but non-standard properties must be prefixed by -.Sq X- . -.Bl -tag -width requireXmachineXX -.It descr -Type: textual. -Required. -.Pp -A brief textual description of the test case's purpose. -Will be shown to the user in reports. -Also good for documentation purposes. -.It has.cleanup -Type: boolean. -Optional. -.Pp -If set to true, specifies that the test case has a cleanup routine that has -to be executed by -.Xr atf-run 1 -during the cleanup phase of the execution. -This property is automatically set by the framework when defining a test case -with a cleanup routine, so it should never be set by hand. -.It ident -Type: textual. -Required. -.Pp -The test case's identifier. -Must be unique inside the test program and should be short but descriptive. -.It require.arch -Type textual. -Optional. -.Pp -A whitespace separated list of architectures that the test case can be run -under without causing errors due to an architecture mismatch. -.It require.config -Type: textual. -Optional. -.Pp -A whitespace separated list of configuration variables that must be defined -to execute the test case. -If any of the required variables is not defined, the test case is -.Em skipped . -.It require.machine -Type textual. -Optional. -.Pp -A whitespace separated list of machine types that the test case can be run -under without causing errors due to a machine type mismatch. -.It require.progs -Type: textual. -Optional. -.Pp -A whitespace separated list of programs that must be present to execute -the test case. -These can be given as plain names, in which case they are looked in the -user's -.Ev PATH , -or as absolute paths. -If any of the required programs is not found, the test case is -.Em skipped . -.It require.user -Type: textual. -Optional. -.Pp -The required privileges to execute the test case. -Can be one of -.Sq root -or -.Sq unprivileged . -If the requested privileges do not match the current user, the test case is -.Em skipped . -.Pp -.Em NOTE : -In the future, it is expected that the test case will attempt to gain the -necessary privileges on its own before failing. -At the very least, lowering the privileges from the super-user to an -unprivileged user will be supported. -.It timeout -Type: integral. -Optional; defaults to -.Sq 300 . -.Pp -Specifies the maximum amount of time the test case can run. -This is particularly useful because some tests can stall either because they -are incorrectly coded or because they trigger an anomalous behavior of the -program. -It is not acceptable for these tests to stall the whole execution of the -test program. -.Pp -Can optionally be set to zero, in which case the test case has no run-time -limit. -This is discouraged. -.El -.Ss Environment -Every time a test case is executed, several environment variables are -cleared or reseted to sane values to ensure they do not make the test fail -due to unexpected conditions. -These variables are: -.Bl -tag -width LCXMESSAGESXX -.It Ev HOME -Set to the work directory's path. -.It Ev LANG -Undefined. -.It Ev LC_ALL -Undefined. -.It Ev LC_COLLATE -Undefined. -.It Ev LC_CTYPE -Undefined. -.It Ev LC_MESSAGES -Undefined. -.It Ev LC_MONETARY -Undefined. -.It Ev LC_NUMERIC -Undefined. -.It Ev LC_TIME -Undefined. -.It Ev TZ -Undefined. -.El -.Ss Work directories -The test program always creates a temporary directory -and switches to it before running the test case's body. -This way the test case is free to modify its current directory as it -wishes, and the runtime engine will be able to clean it up later on in a -safe way, removing any traces of its execution from the system. -To do so, the runtime engine will perform a recursive removal of the work -directory without crossing mount points; if a mount point is found, the -file system will be unmounted (if possible). -.Ss File creation mode mask (umask) -Test cases are always executed with a file creation mode mask (umask) of -.Sq 0022 . -The test case's code is free to change this during execution. -.Sh SEE ALSO -.Xr atf-test-program 1 , -.Xr atf-formats 5 , -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/doc/atf-test-program.1 =================================================================== --- vendor/NetBSD/atf/dist/dist/doc/atf-test-program.1 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/doc/atf-test-program.1 (nonexistent) @@ -1,103 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2007, 2008, 2010, 2011 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd February 6, 2011 -.Dt ATF-TEST-PROGRAM 1 -.Os -.Sh NAME -.Nm atf-test-program -.Nd common interface to ATF test programs -.Sh SYNOPSIS -.Nm -.Op Fl r Ar resfile -.Op Fl s Ar srcdir -.Op Fl v Ar var1=value1 Op .. Fl v Ar varN=valueN -.Ar test_case -.Nm -.Fl l -.Sh DESCRIPTION -Test programs written using the ATF libraries all share a common user -interface, which is what this manual page describes. -.Em NOTE: There is no binary known as -.Nm ; -.Em what is described in this manual page is the command-line interface -.Em exposed by the atf-c, atf-c++ and atf-sh bindings . -.Pp -In the first synopsis form, the test program will execute the provided -test case and print its results to the standard output, unless otherwise -stated by the -.Fl r -flag. -Optionally, the test case name can be suffixed by -.Sq :cleanup , -in which case the cleanup routine of the test case will be executed -instead of the test case body; see -.Xr atf-test-case 4 . -Note that the test case is -.Em executed without isolation , -so it can and probably will create and modify files in the current directory. -To execute test cases in a controller manner, refer to -.Xr atf-run 1 , -which is the preferred way to run test cases. -You should only execute test cases by hand for debugging purposes. -.Pp -In the second synopsis form, the test program will list all available -test cases alongside their meta-data properties in a format that is -machine parseable. -This list is processed by -.Xr atf-run 1 -to know how to execute the test cases of a given test program. -.Pp -The following options are available: -.Bl -tag -width XvXvarXvalueXX -.It Fl l -Lists available test cases alongside a brief description for each of them. -.It Fl r Ar resfile -Specifies the file that will receive the test case result. -If not specified, the test case prints its results to stdout. -If the result of a test case needs to be parsed by another program, you must -use this option to redirect the result to a file and then read the resulting -file from the other program. -Note: -.Em do not try to process the stdout of the test case -because your program may break in the future. -.It Fl s Ar srcdir -The path to the directory where the test program is located. -This is needed in all cases, except when the test program is being executed -from the current directory. -The test program will use this path to locate any helper data files or -utilities. -.It Fl v Ar var=value -Sets the configuration variable -.Ar var -to the value -.Ar value . -.El -.Sh SEE ALSO -.Xr atf-run 1 , -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/doc/atf.7.in =================================================================== --- vendor/NetBSD/atf/dist/dist/doc/atf.7.in (revision 240137) +++ vendor/NetBSD/atf/dist/dist/doc/atf.7.in (nonexistent) @@ -1,192 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd August 28, 2010 -.Dt ATF 7 -.Os -.Sh NAME -.Nm ATF -.Nd introduction to the Automated Testing Framework -.Sh DESCRIPTION -.Em IMPORTANT: If you are here because you want to know how to run the tests in -.Em Pa __TESTSDIR__ , -.Em you most likely want to read the -.Em Xr tests 7 -.Em manual page instead. -.Pp -The Automated Testing Framework -.Pf ( Nm ) -is a collection of libraries and utilities designed to ease unattended -application testing in the hands of developers and end users of a specific -piece of software. -.Pp -As regards developers, -.Nm -provides the necessary means to easily create -test suites composed of multiple test programs, which in turn are a -collection of test cases. -It also attempts to simplify the debugging of problems when these test -cases detect an error by providing as much information as possible -about the failure. -.Pp -As regards users, it simplifies the process of running the test suites and, -in special, encourages end users to run them often: they do not need to -have source trees around nor any other development tools installed to be -able to certify that a given piece of software works on their machine as -advertised. -.Pp -If your operating systems distributes -.Nm , -it is possible that it provides an introductory -.Xr tests 7 -manual page. -You are encouraged to read it now. -.Ss License -.Nm -is distributed under the terms of the TNF License, a 2-clause BSD license. -For more details please see: -.Bd -literal -offset indent -.Pa __DOCDIR__/COPYING -.Ed -.Ss Components -.Nm -is a highly modular piece of software. -It provides a couple of libraries to ease the implementation of test -programs: one for the C and C++ languages and another one for shell -scripts. -It also includes multiple small utilities that follow the principle of -doing a single thing but doing it right. -This section outlines which these components are. -.Pp -Public utilities: -.Bl -tag -width atfXtestXprogramXXXXX -.It Xr atf-check 1 -Executes a command and checks that its exit code, its standard output -and its standard error output match pre-specified expected values. -.It Xr atf-config 1 -Queries static configuration information. -.It Xr atf-report 1 -Converts the output of -.Nm atf-run -to user-friendly and/or machine-parseable reports. -.It Xr atf-run 1 -Automates the execution of a series of test programs and collects their -results in a unified report. -.It Xr atf-sh 1 -Shell interpreter for shell-based test programs. -.El -.Pp -Programming interfaces: -.Bl -tag -width atfXtestXprogramXXXXX -.It Xr atf-c-api 3 -C programming interface for test programs. -.It Xr atf-c++-api 3 -C++ programming interface for test programs. -.It Xr atf-sh-api 3 -POSIX shell programming interface for test programs. -.El -.Pp -Other: -.Bl -tag -width atfXtestXprogramXXXXX -.It Xr atf-formats 5 -Description of the machine-parseable data formats used by the tools. -.It Xr atf-test-case 4 -Generic description of test cases, independent of the language they are -implemented in. -.It Xr atf-test-program 1 -Common interface provided by the test programs written using the -.Nm -libraries. -.El -.Ss Recommended reading order -For end users wishing to run tests: -.Bl -enum -compact -.It -.Xr tests 7 -(only if provided by your operating system). -.It -.Xr atf-test-program 1 -.It -.Xr atf-run 1 -.It -.Xr atf-report 1 -.It -.Xr atf-config 1 -.El -.Pp -For developers wanting to write their own tests: -.Bl -enum -compact -.It -Everything recommended to users. -.It -.Xr atf-test-case 4 -.It -.Xr atf-c-api 3 -.It -.Xr atf-c++-api 3 -.It -.Xr atf-sh-api 3 -.It -.Xr atf-sh 1 -.It -.Xr atf-check 1 -.El -.Pp -For those interested in -.Nm -internals: -.Bl -enum -compact -.It -Everything recommended to users. -.It -Everything recommended to developers. -.It -.Xr atf-formats 5 -.El -.Sh SEE ALSO -.Xr tests 7 -.Sh HISTORY -.Nm -started as a Google Summer of Code 2007 project mentored by The NetBSD -Foundation. -Its original goal was to provide a testing framework for The NetBSD -Operating System, but it grew as an independent project because the -framework itself did not need to be tied to a specific operating system. -.Pp -For more details on this subject, please see: -.Bd -literal -offset indent -.Pa __DOCDIR__/NEWS -.Pa __DOCDIR__/ROADMAP -.Ed -.Sh AUTHORS -For more details on the people that made -.Nm -possible, please see: -.Bd -literal -offset indent -.Pa __DOCDIR__/AUTHORS -.Ed Index: vendor/NetBSD/atf/dist/dist/atf-c/check_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/check_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/check_test.c (nonexistent) @@ -1,543 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include -#include -#include - -#include - -#include "atf-c/check.h" -#include "atf-c/config.h" - -#include "detail/fs.h" -#include "detail/map.h" -#include "detail/process.h" -#include "detail/test_helpers.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -void -do_exec(const atf_tc_t *tc, const char *helper_name, atf_check_result_t *r) -{ - atf_fs_path_t process_helpers; - const char *argv[3]; - - get_process_helpers_path(tc, false, &process_helpers); - - argv[0] = atf_fs_path_cstring(&process_helpers); - argv[1] = helper_name; - argv[2] = NULL; - printf("Executing %s %s\n", argv[0], argv[1]); - RE(atf_check_exec_array(argv, r)); - - atf_fs_path_fini(&process_helpers); -} - -static -void -do_exec_with_arg(const atf_tc_t *tc, const char *helper_name, const char *arg, - atf_check_result_t *r) -{ - atf_fs_path_t process_helpers; - const char *argv[4]; - - get_process_helpers_path(tc, false, &process_helpers); - - argv[0] = atf_fs_path_cstring(&process_helpers); - argv[1] = helper_name; - argv[2] = arg; - argv[3] = NULL; - printf("Executing %s %s %s\n", argv[0], argv[1], argv[2]); - RE(atf_check_exec_array(argv, r)); - - atf_fs_path_fini(&process_helpers); -} - -static -void -check_line(int fd, const char *exp) -{ - atf_dynstr_t line; - - atf_dynstr_init(&line); - ATF_CHECK(!read_line(fd, &line)); - ATF_CHECK_MSG(atf_equal_dynstr_cstring(&line, exp), - "read: '%s', expected: '%s'", - atf_dynstr_cstring(&line), exp); - atf_dynstr_fini(&line); -} - -/* --------------------------------------------------------------------- - * Helper test cases for the free functions. - * --------------------------------------------------------------------- */ - -ATF_TC(h_build_c_o_ok); -ATF_TC_HEAD(h_build_c_o_ok, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for build_c_o"); -} -ATF_TC_BODY(h_build_c_o_ok, tc) -{ - FILE *sfile; - bool success; - - ATF_REQUIRE((sfile = fopen("test.c", "w")) != NULL); - fprintf(sfile, "#include \n"); - fclose(sfile); - - RE(atf_check_build_c_o("test.c", "test.o", NULL, &success)); - ATF_REQUIRE(success); -} - -ATF_TC(h_build_c_o_fail); -ATF_TC_HEAD(h_build_c_o_fail, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for build_c_o"); -} -ATF_TC_BODY(h_build_c_o_fail, tc) -{ - FILE *sfile; - bool success; - - ATF_REQUIRE((sfile = fopen("test.c", "w")) != NULL); - fprintf(sfile, "void foo(void) { int a = UNDEFINED_SYMBOL; }\n"); - fclose(sfile); - - RE(atf_check_build_c_o("test.c", "test.o", NULL, &success)); - ATF_REQUIRE(!success); -} - -ATF_TC(h_build_cpp_ok); -ATF_TC_HEAD(h_build_cpp_ok, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for build_cpp"); -} -ATF_TC_BODY(h_build_cpp_ok, tc) -{ - FILE *sfile; - bool success; - atf_fs_path_t test_p; - - RE(atf_fs_path_init_fmt(&test_p, "test.p")); - - ATF_REQUIRE((sfile = fopen("test.c", "w")) != NULL); - fprintf(sfile, "#define A foo\n"); - fprintf(sfile, "#define B bar\n"); - fprintf(sfile, "A B\n"); - fclose(sfile); - - RE(atf_check_build_cpp("test.c", atf_fs_path_cstring(&test_p), NULL, - &success)); - ATF_REQUIRE(success); - - atf_fs_path_fini(&test_p); -} - -ATF_TC(h_build_cpp_fail); -ATF_TC_HEAD(h_build_cpp_fail, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for build_cpp"); -} -ATF_TC_BODY(h_build_cpp_fail, tc) -{ - FILE *sfile; - bool success; - - ATF_REQUIRE((sfile = fopen("test.c", "w")) != NULL); - fprintf(sfile, "#include \"./non-existent.h\"\n"); - fclose(sfile); - - RE(atf_check_build_cpp("test.c", "test.p", NULL, &success)); - ATF_REQUIRE(!success); -} - -ATF_TC(h_build_cxx_o_ok); -ATF_TC_HEAD(h_build_cxx_o_ok, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for build_cxx_o"); -} -ATF_TC_BODY(h_build_cxx_o_ok, tc) -{ - FILE *sfile; - bool success; - - ATF_REQUIRE((sfile = fopen("test.cpp", "w")) != NULL); - fprintf(sfile, "#include \n"); - fclose(sfile); - - RE(atf_check_build_cxx_o("test.cpp", "test.o", NULL, &success)); - ATF_REQUIRE(success); -} - -ATF_TC(h_build_cxx_o_fail); -ATF_TC_HEAD(h_build_cxx_o_fail, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for build_cxx_o"); -} -ATF_TC_BODY(h_build_cxx_o_fail, tc) -{ - FILE *sfile; - bool success; - - ATF_REQUIRE((sfile = fopen("test.cpp", "w")) != NULL); - fprintf(sfile, "void foo(void) { int a = UNDEFINED_SYMBOL; }\n"); - fclose(sfile); - - RE(atf_check_build_cxx_o("test.cpp", "test.o", NULL, &success)); - ATF_REQUIRE(!success); -} - -/* --------------------------------------------------------------------- - * Test cases for the free functions. - * --------------------------------------------------------------------- */ - -static -void -init_and_run_h_tc(atf_tc_t *tc, const atf_tc_pack_t *tcpack, - const char *outname, const char *errname) -{ - const char *const config[] = { NULL }; - - RE(atf_tc_init_pack(tc, tcpack, config)); - run_h_tc(tc, outname, errname, "result"); - atf_tc_fini(tc); -} - -ATF_TC(build_c_o); -ATF_TC_HEAD(build_c_o, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_check_build_c_o " - "function"); -} -ATF_TC_BODY(build_c_o, tc) -{ - init_and_run_h_tc(&ATF_TC_NAME(h_build_c_o_ok), - &ATF_TC_PACK_NAME(h_build_c_o_ok), "stdout", "stderr"); - ATF_CHECK(grep_file("stdout", "-o test.o")); - ATF_CHECK(grep_file("stdout", "-c test.c")); - - init_and_run_h_tc(&ATF_TC_NAME(h_build_c_o_fail), - &ATF_TC_PACK_NAME(h_build_c_o_fail), "stdout", "stderr"); - ATF_CHECK(grep_file("stdout", "-o test.o")); - ATF_CHECK(grep_file("stdout", "-c test.c")); - ATF_CHECK(grep_file("stderr", "test.c")); - ATF_CHECK(grep_file("stderr", "UNDEFINED_SYMBOL")); -} - -ATF_TC(build_cpp); -ATF_TC_HEAD(build_cpp, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_check_build_cpp " - "function"); -} -ATF_TC_BODY(build_cpp, tc) -{ - init_and_run_h_tc(&ATF_TC_NAME(h_build_cpp_ok), - &ATF_TC_PACK_NAME(h_build_cpp_ok), "stdout", "stderr"); - ATF_CHECK(grep_file("stdout", "-o.*test.p")); - ATF_CHECK(grep_file("stdout", "test.c")); - ATF_CHECK(grep_file("test.p", "foo bar")); - - init_and_run_h_tc(&ATF_TC_NAME(h_build_cpp_fail), - &ATF_TC_PACK_NAME(h_build_cpp_fail), "stdout", "stderr"); - ATF_CHECK(grep_file("stdout", "-o test.p")); - ATF_CHECK(grep_file("stdout", "test.c")); - ATF_CHECK(grep_file("stderr", "test.c")); - ATF_CHECK(grep_file("stderr", "non-existent.h")); -} - -ATF_TC(build_cxx_o); -ATF_TC_HEAD(build_cxx_o, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_check_build_cxx_o " - "function"); -} -ATF_TC_BODY(build_cxx_o, tc) -{ - init_and_run_h_tc(&ATF_TC_NAME(h_build_cxx_o_ok), - &ATF_TC_PACK_NAME(h_build_cxx_o_ok), "stdout", "stderr"); - ATF_CHECK(grep_file("stdout", "-o test.o")); - ATF_CHECK(grep_file("stdout", "-c test.cpp")); - - init_and_run_h_tc(&ATF_TC_NAME(h_build_cxx_o_fail), - &ATF_TC_PACK_NAME(h_build_cxx_o_fail), "stdout", "stderr"); - ATF_CHECK(grep_file("stdout", "-o test.o")); - ATF_CHECK(grep_file("stdout", "-c test.cpp")); - ATF_CHECK(grep_file("stderr", "test.cpp")); - ATF_CHECK(grep_file("stderr", "UNDEFINED_SYMBOL")); -} - -ATF_TC(exec_array); -ATF_TC_HEAD(exec_array, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that atf_check_exec_array " - "works properly"); -} -ATF_TC_BODY(exec_array, tc) -{ - atf_fs_path_t process_helpers; - atf_check_result_t result; - - get_process_helpers_path(tc, false, &process_helpers); - - const char *argv[4]; - argv[0] = atf_fs_path_cstring(&process_helpers); - argv[1] = "echo"; - argv[2] = "test-message"; - argv[3] = NULL; - - RE(atf_check_exec_array(argv, &result)); - - ATF_CHECK(atf_check_result_exited(&result)); - ATF_CHECK(atf_check_result_exitcode(&result) == EXIT_SUCCESS); - - { - const char *path = atf_check_result_stdout(&result); - int fd = open(path, O_RDONLY); - ATF_CHECK(fd != -1); - check_line(fd, "test-message"); - close(fd); - } - - atf_check_result_fini(&result); - atf_fs_path_fini(&process_helpers); -} - -ATF_TC(exec_cleanup); -ATF_TC_HEAD(exec_cleanup, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that atf_check_exec_array " - "properly cleans up the temporary files it creates"); -} -ATF_TC_BODY(exec_cleanup, tc) -{ - atf_fs_path_t out, err; - atf_check_result_t result; - bool exists; - - do_exec(tc, "exit-success", &result); - RE(atf_fs_path_init_fmt(&out, "%s", atf_check_result_stdout(&result))); - RE(atf_fs_path_init_fmt(&err, "%s", atf_check_result_stderr(&result))); - - RE(atf_fs_exists(&out, &exists)); ATF_CHECK(exists); - RE(atf_fs_exists(&err, &exists)); ATF_CHECK(exists); - atf_check_result_fini(&result); - RE(atf_fs_exists(&out, &exists)); ATF_CHECK(!exists); - RE(atf_fs_exists(&err, &exists)); ATF_CHECK(!exists); - - atf_fs_path_fini(&err); - atf_fs_path_fini(&out); -} - -ATF_TC(exec_exitstatus); -ATF_TC_HEAD(exec_exitstatus, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that atf_check_exec_array " - "properly captures the exit status of the executed " - "command"); -} -ATF_TC_BODY(exec_exitstatus, tc) -{ - { - atf_check_result_t result; - do_exec(tc, "exit-success", &result); - ATF_CHECK(atf_check_result_exited(&result)); - ATF_CHECK(!atf_check_result_signaled(&result)); - ATF_CHECK(atf_check_result_exitcode(&result) == EXIT_SUCCESS); - atf_check_result_fini(&result); - } - - { - atf_check_result_t result; - do_exec(tc, "exit-failure", &result); - ATF_CHECK(atf_check_result_exited(&result)); - ATF_CHECK(!atf_check_result_signaled(&result)); - ATF_CHECK(atf_check_result_exitcode(&result) == EXIT_FAILURE); - atf_check_result_fini(&result); - } - - { - atf_check_result_t result; - do_exec(tc, "exit-signal", &result); - ATF_CHECK(!atf_check_result_exited(&result)); - ATF_CHECK(atf_check_result_signaled(&result)); - ATF_CHECK(atf_check_result_termsig(&result) == SIGKILL); - atf_check_result_fini(&result); - } -} - -ATF_TC(exec_stdout_stderr); -ATF_TC_HEAD(exec_stdout_stderr, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that atf_check_exec_array " - "properly captures the stdout and stderr streams " - "of the child process"); -} -ATF_TC_BODY(exec_stdout_stderr, tc) -{ - atf_check_result_t result1, result2; - const char *out1, *out2; - const char *err1, *err2; - - do_exec_with_arg(tc, "stdout-stderr", "result1", &result1); - ATF_CHECK(atf_check_result_exited(&result1)); - ATF_CHECK(atf_check_result_exitcode(&result1) == EXIT_SUCCESS); - - do_exec_with_arg(tc, "stdout-stderr", "result2", &result2); - ATF_CHECK(atf_check_result_exited(&result2)); - ATF_CHECK(atf_check_result_exitcode(&result2) == EXIT_SUCCESS); - - out1 = atf_check_result_stdout(&result1); - out2 = atf_check_result_stdout(&result2); - err1 = atf_check_result_stderr(&result1); - err2 = atf_check_result_stderr(&result2); - - ATF_CHECK(strstr(out1, "check.XXXXXX") == NULL); - ATF_CHECK(strstr(out2, "check.XXXXXX") == NULL); - ATF_CHECK(strstr(err1, "check.XXXXXX") == NULL); - ATF_CHECK(strstr(err2, "check.XXXXXX") == NULL); - - ATF_CHECK(strstr(out1, "/check") != NULL); - ATF_CHECK(strstr(out2, "/check") != NULL); - ATF_CHECK(strstr(err1, "/check") != NULL); - ATF_CHECK(strstr(err2, "/check") != NULL); - - ATF_CHECK(strstr(out1, "/stdout") != NULL); - ATF_CHECK(strstr(out2, "/stdout") != NULL); - ATF_CHECK(strstr(err1, "/stderr") != NULL); - ATF_CHECK(strstr(err2, "/stderr") != NULL); - - ATF_CHECK(strcmp(out1, out2) != 0); - ATF_CHECK(strcmp(err1, err2) != 0); - -#define CHECK_LINES(path, outname, resname) \ - do { \ - int fd = open(path, O_RDONLY); \ - ATF_CHECK(fd != -1); \ - check_line(fd, "Line 1 to " outname " for " resname); \ - check_line(fd, "Line 2 to " outname " for " resname); \ - close(fd); \ - } while (false) - - CHECK_LINES(out1, "stdout", "result1"); - CHECK_LINES(out2, "stdout", "result2"); - CHECK_LINES(err1, "stderr", "result1"); - CHECK_LINES(err2, "stderr", "result2"); - -#undef CHECK_LINES - - atf_check_result_fini(&result2); - atf_check_result_fini(&result1); -} - -ATF_TC(exec_umask); -ATF_TC_HEAD(exec_umask, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that atf_check_exec_array " - "correctly reports an error if the umask is too " - "restrictive to create temporary files"); -} -ATF_TC_BODY(exec_umask, tc) -{ - atf_check_result_t result; - atf_fs_path_t process_helpers; - const char *argv[3]; - - get_process_helpers_path(tc, false, &process_helpers); - argv[0] = atf_fs_path_cstring(&process_helpers); - argv[1] = "exit-success"; - argv[2] = NULL; - - umask(0222); - atf_error_t err = atf_check_exec_array(argv, &result); - ATF_CHECK(atf_is_error(err)); - ATF_CHECK(atf_error_is(err, "invalid_umask")); - atf_error_free(err); - - atf_fs_path_fini(&process_helpers); -} - -ATF_TC(exec_unknown); -ATF_TC_HEAD(exec_unknown, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that running a non-existing " - "binary is handled correctly"); -} -ATF_TC_BODY(exec_unknown, tc) -{ - char buf[1024]; - snprintf(buf, sizeof(buf), "%s/non-existent", - atf_config_get("atf_workdir")); - - const char *argv[2]; - argv[0] = buf; - argv[1] = NULL; - - atf_check_result_t result; - RE(atf_check_exec_array(argv, &result)); - ATF_CHECK(atf_check_result_exited(&result)); - ATF_CHECK(atf_check_result_exitcode(&result) == 127); - atf_check_result_fini(&result); -} - -/* --------------------------------------------------------------------- - * Tests cases for the header file. - * --------------------------------------------------------------------- */ - -HEADER_TC(include, "atf-c/check.h"); - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Add the test cases for the free functions. */ - ATF_TP_ADD_TC(tp, build_c_o); - ATF_TP_ADD_TC(tp, build_cpp); - ATF_TP_ADD_TC(tp, build_cxx_o); - ATF_TP_ADD_TC(tp, exec_array); - ATF_TP_ADD_TC(tp, exec_cleanup); - ATF_TP_ADD_TC(tp, exec_exitstatus); - ATF_TP_ADD_TC(tp, exec_stdout_stderr); - ATF_TP_ADD_TC(tp, exec_umask); - ATF_TP_ADD_TC(tp, exec_unknown); - - /* Add the test cases for the header file. */ - ATF_TP_ADD_TC(tp, include); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/defs.h.in =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/defs.h.in (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/defs.h.in (nonexistent) @@ -1,35 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_DEFS_H) -#define ATF_C_DEFS_H - -#define ATF_DEFS_ATTRIBUTE_NORETURN @ATTRIBUTE_NORETURN@ - -#endif /* !defined(ATF_C_DEFS_H) */ Index: vendor/NetBSD/atf/dist/dist/atf-c/tp.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/tp.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/tp.h (nonexistent) @@ -1,69 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_TP_H) -#define ATF_C_TP_H - -#include - -#include - -struct atf_tc; - -/* --------------------------------------------------------------------- - * The "atf_tp" type. - * --------------------------------------------------------------------- */ - -struct atf_tp_impl; -struct atf_tp { - struct atf_tp_impl *pimpl; -}; -typedef struct atf_tp atf_tp_t; - -/* Constructors/destructors. */ -atf_error_t atf_tp_init(atf_tp_t *, const char *const *); -void atf_tp_fini(atf_tp_t *); - -/* Getters. */ -char **atf_tp_get_config(const atf_tp_t *); -bool atf_tp_has_tc(const atf_tp_t *, const char *); -const struct atf_tc *atf_tp_get_tc(const atf_tp_t *, const char *); -const struct atf_tc *const *atf_tp_get_tcs(const atf_tp_t *); - -/* Modifiers. */ -atf_error_t atf_tp_add_tc(atf_tp_t *, struct atf_tc *); - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -atf_error_t atf_tp_run(const atf_tp_t *, const char *, const char *); -atf_error_t atf_tp_cleanup(const atf_tp_t *, const char *); - -#endif /* ATF_C_TP_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/tp.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/tp.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/tp.c (nonexistent) @@ -1,217 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include - -#include "atf-c/error.h" -#include "atf-c/tc.h" -#include "atf-c/tp.h" - -#include "detail/fs.h" -#include "detail/map.h" -#include "detail/sanity.h" - -struct atf_tp_impl { - atf_list_t m_tcs; - atf_map_t m_config; -}; - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -const atf_tc_t * -find_tc(const atf_tp_t *tp, const char *ident) -{ - const atf_tc_t *tc; - atf_list_citer_t iter; - - tc = NULL; - atf_list_for_each_c(iter, &tp->pimpl->m_tcs) { - const atf_tc_t *tc2; - tc2 = atf_list_citer_data(iter); - if (strcmp(atf_tc_get_ident(tc2), ident) == 0) { - tc = tc2; - break; - } - } - return tc; -} - -/* --------------------------------------------------------------------- - * The "atf_tp" type. - * --------------------------------------------------------------------- */ - -/* - * Constructors/destructors. - */ - -atf_error_t -atf_tp_init(atf_tp_t *tp, const char *const *config) -{ - atf_error_t err; - - PRE(config != NULL); - - tp->pimpl = malloc(sizeof(struct atf_tp_impl)); - if (tp->pimpl == NULL) - return atf_no_memory_error(); - - err = atf_list_init(&tp->pimpl->m_tcs); - if (atf_is_error(err)) - goto out; - - err = atf_map_init_charpp(&tp->pimpl->m_config, config); - if (atf_is_error(err)) { - atf_list_fini(&tp->pimpl->m_tcs); - goto out; - } - - INV(!atf_is_error(err)); -out: - return err; -} - -void -atf_tp_fini(atf_tp_t *tp) -{ - atf_list_iter_t iter; - - atf_map_fini(&tp->pimpl->m_config); - - atf_list_for_each(iter, &tp->pimpl->m_tcs) { - atf_tc_t *tc = atf_list_iter_data(iter); - atf_tc_fini(tc); - } - atf_list_fini(&tp->pimpl->m_tcs); - - free(tp->pimpl); -} - -/* - * Getters. - */ - -char ** -atf_tp_get_config(const atf_tp_t *tp) -{ - return atf_map_to_charpp(&tp->pimpl->m_config); -} - -bool -atf_tp_has_tc(const atf_tp_t *tp, const char *id) -{ - const atf_tc_t *tc = find_tc(tp, id); - return tc != NULL; -} - -const atf_tc_t * -atf_tp_get_tc(const atf_tp_t *tp, const char *id) -{ - const atf_tc_t *tc = find_tc(tp, id); - PRE(tc != NULL); - return tc; -} - -const atf_tc_t *const * -atf_tp_get_tcs(const atf_tp_t *tp) -{ - const atf_tc_t **array; - atf_list_citer_t iter; - size_t i; - - array = malloc(sizeof(atf_tc_t *) * - (atf_list_size(&tp->pimpl->m_tcs) + 1)); - if (array == NULL) - goto out; - - i = 0; - atf_list_for_each_c(iter, &tp->pimpl->m_tcs) { - array[i] = atf_list_citer_data(iter); - if (array[i] == NULL) { - free(array); - array = NULL; - goto out; - } - - i++; - } - array[i] = NULL; - -out: - return array; -} - -/* - * Modifiers. - */ - -atf_error_t -atf_tp_add_tc(atf_tp_t *tp, atf_tc_t *tc) -{ - atf_error_t err; - - PRE(find_tc(tp, atf_tc_get_ident(tc)) == NULL); - - err = atf_list_append(&tp->pimpl->m_tcs, tc, false); - - POST(find_tc(tp, atf_tc_get_ident(tc)) != NULL); - - return err; -} - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -atf_error_t -atf_tp_run(const atf_tp_t *tp, const char *tcname, const char *resfile) -{ - const atf_tc_t *tc; - - tc = find_tc(tp, tcname); - PRE(tc != NULL); - - return atf_tc_run(tc, resfile); -} - -atf_error_t -atf_tp_cleanup(const atf_tp_t *tp, const char *tcname) -{ - const atf_tc_t *tc; - - tc = find_tc(tp, tcname); - PRE(tc != NULL); - - return atf_tc_cleanup(tc); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/tc.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/tc.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/tc.h (nonexistent) @@ -1,127 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_TC_H) -#define ATF_C_TC_H - -#include -#include - -#include -#include - -struct atf_tc; - -typedef void (*atf_tc_head_t)(struct atf_tc *); -typedef void (*atf_tc_body_t)(const struct atf_tc *); -typedef void (*atf_tc_cleanup_t)(const struct atf_tc *); - -/* --------------------------------------------------------------------- - * The "atf_tc_pack" type. - * --------------------------------------------------------------------- */ - -/* For static initialization only. */ -struct atf_tc_pack { - const char *m_ident; - - const char *const *m_config; - - atf_tc_head_t m_head; - atf_tc_body_t m_body; - atf_tc_cleanup_t m_cleanup; -}; -typedef const struct atf_tc_pack atf_tc_pack_t; - -/* --------------------------------------------------------------------- - * The "atf_tc" type. - * --------------------------------------------------------------------- */ - -struct atf_tc_impl; -struct atf_tc { - struct atf_tc_impl *pimpl; -}; -typedef struct atf_tc atf_tc_t; - -/* Constructors/destructors. */ -atf_error_t atf_tc_init(atf_tc_t *, const char *, atf_tc_head_t, - atf_tc_body_t, atf_tc_cleanup_t, - const char *const *); -atf_error_t atf_tc_init_pack(atf_tc_t *, atf_tc_pack_t *, - const char *const *); -void atf_tc_fini(atf_tc_t *); - -/* Getters. */ -const char *atf_tc_get_ident(const atf_tc_t *); -const char *atf_tc_get_config_var(const atf_tc_t *, const char *); -const char *atf_tc_get_config_var_wd(const atf_tc_t *, const char *, - const char *); -bool atf_tc_get_config_var_as_bool(const atf_tc_t *, const char *); -bool atf_tc_get_config_var_as_bool_wd(const atf_tc_t *, const char *, - const bool); -long atf_tc_get_config_var_as_long(const atf_tc_t *, const char *); -long atf_tc_get_config_var_as_long_wd(const atf_tc_t *, const char *, - const long); -const char *atf_tc_get_md_var(const atf_tc_t *, const char *); -char **atf_tc_get_md_vars(const atf_tc_t *); -bool atf_tc_has_config_var(const atf_tc_t *, const char *); -bool atf_tc_has_md_var(const atf_tc_t *, const char *); - -/* Modifiers. */ -atf_error_t atf_tc_set_md_var(atf_tc_t *, const char *, const char *, ...); - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -atf_error_t atf_tc_run(const atf_tc_t *, const char *); -atf_error_t atf_tc_cleanup(const atf_tc_t *); - -/* To be run from test case bodies only. */ -void atf_tc_fail(const char *, ...) ATF_DEFS_ATTRIBUTE_NORETURN; -void atf_tc_fail_nonfatal(const char *, ...); -void atf_tc_pass(void) ATF_DEFS_ATTRIBUTE_NORETURN; -void atf_tc_require_prog(const char *); -void atf_tc_skip(const char *, ...) ATF_DEFS_ATTRIBUTE_NORETURN; -void atf_tc_expect_pass(void); -void atf_tc_expect_fail(const char *, ...); -void atf_tc_expect_exit(const int, const char *, ...); -void atf_tc_expect_signal(const int, const char *, ...); -void atf_tc_expect_death(const char *, ...); -void atf_tc_expect_timeout(const char *, ...); - -/* To be run from test case bodies only; internal to macros.h. */ -void atf_tc_fail_check(const char *, const size_t, const char *, ...); -void atf_tc_fail_requirement(const char *, const size_t, const char *, ...) - ATF_DEFS_ATTRIBUTE_NORETURN; -void atf_tc_check_errno(const char *, const size_t, const int, - const char *, const bool); -void atf_tc_require_errno(const char *, const size_t, const int, - const char *, const bool); - -#endif /* ATF_C_TC_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/tc.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/tc.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/tc.c (nonexistent) @@ -1,1208 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "atf-c/defs.h" -#include "atf-c/error.h" -#include "atf-c/tc.h" - -#include "detail/env.h" -#include "detail/fs.h" -#include "detail/map.h" -#include "detail/sanity.h" -#include "detail/text.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -enum expect_type { - EXPECT_PASS, - EXPECT_FAIL, - EXPECT_EXIT, - EXPECT_SIGNAL, - EXPECT_DEATH, - EXPECT_TIMEOUT, -}; - -struct context { - const atf_tc_t *tc; - const char *resfile; - size_t fail_count; - - enum expect_type expect; - atf_dynstr_t expect_reason; - size_t expect_previous_fail_count; - size_t expect_fail_count; - int expect_exitcode; - int expect_signo; -}; - -static void context_init(struct context *, const atf_tc_t *, const char *); -static void check_fatal_error(atf_error_t); -static void report_fatal_error(const char *, ...) - ATF_DEFS_ATTRIBUTE_NORETURN; -static atf_error_t write_resfile(const int, const char *, const int, - const atf_dynstr_t *); -static void create_resfile(const char *, const char *, const int, - atf_dynstr_t *); -static void error_in_expect(struct context *, const char *, ...) - ATF_DEFS_ATTRIBUTE_NORETURN; -static void validate_expect(struct context *); -static void expected_failure(struct context *, atf_dynstr_t *) - ATF_DEFS_ATTRIBUTE_NORETURN; -static void fail_requirement(struct context *, atf_dynstr_t *) - ATF_DEFS_ATTRIBUTE_NORETURN; -static void fail_check(struct context *, atf_dynstr_t *); -static void pass(struct context *) - ATF_DEFS_ATTRIBUTE_NORETURN; -static void skip(struct context *, atf_dynstr_t *) - ATF_DEFS_ATTRIBUTE_NORETURN; -static void format_reason_ap(atf_dynstr_t *, const char *, const size_t, - const char *, va_list); -static void format_reason_fmt(atf_dynstr_t *, const char *, const size_t, - const char *, ...); -static void errno_test(struct context *, const char *, const size_t, - const int, const char *, const bool, - void (*)(struct context *, atf_dynstr_t *)); -static atf_error_t check_prog_in_dir(const char *, void *); -static atf_error_t check_prog(struct context *, const char *, void *); - -static void -context_init(struct context *ctx, const atf_tc_t *tc, const char *resfile) -{ - ctx->tc = tc; - ctx->resfile = resfile; - ctx->fail_count = 0; - ctx->expect = EXPECT_PASS; - check_fatal_error(atf_dynstr_init(&ctx->expect_reason)); - ctx->expect_previous_fail_count = 0; - ctx->expect_fail_count = 0; - ctx->expect_exitcode = 0; - ctx->expect_signo = 0; -} - -static void -check_fatal_error(atf_error_t err) -{ - if (atf_is_error(err)) { - char buf[1024]; - atf_error_format(err, buf, sizeof(buf)); - fprintf(stderr, "FATAL ERROR: %s\n", buf); - atf_error_free(err); - abort(); - } -} - -static void -report_fatal_error(const char *msg, ...) -{ - va_list ap; - fprintf(stderr, "FATAL ERROR: "); - - va_start(ap, msg); - vfprintf(stderr, msg, ap); - va_end(ap); - - fprintf(stderr, "\n"); - abort(); -} - -/** Writes to a results file. - * - * The results file is supposed to be already open. - * - * This function returns an error code instead of exiting in case of error - * because the caller needs to clean up the reason object before terminating. - */ -static atf_error_t -write_resfile(const int fd, const char *result, const int arg, - const atf_dynstr_t *reason) -{ - char buffer[1024]; - int ret; - - if (arg == -1 && reason == NULL) { - if (snprintf(buffer, sizeof(buffer), "%s\n", result) <= 0) - goto err; - } else if (arg == -1 && reason != NULL) { - if (snprintf(buffer, sizeof(buffer), "%s: %s\n", result, - atf_dynstr_cstring(reason)) <= 0) - goto err; - } else if (arg != -1 && reason != NULL) { - if (snprintf(buffer, sizeof(buffer), "%s(%d): %s\n", result, - arg, atf_dynstr_cstring(reason)) <= 0) - goto err; - } else { - UNREACHABLE; - } - - while ((ret = write(fd, buffer, strlen(buffer))) == -1 && errno == EINTR) - ; /* Retry. */ - if (ret != -1) - return atf_no_error(); - -err: - return atf_libc_error( - errno, "Failed to write results file; result %s, reason %s", result, - reason == NULL ? "null" : atf_dynstr_cstring(reason)); -} - -/** Creates a results file. - * - * The input reason is released in all cases. - * - * An error in this function is considered to be fatal, hence why it does - * not return any error code. - */ -static void -create_resfile(const char *resfile, const char *result, const int arg, - atf_dynstr_t *reason) -{ - atf_error_t err; - - if (strcmp("/dev/stdout", resfile) == 0) { - err = write_resfile(STDOUT_FILENO, result, arg, reason); - } else if (strcmp("/dev/stderr", resfile) == 0) { - err = write_resfile(STDERR_FILENO, result, arg, reason); - } else { - const int fd = open(resfile, O_WRONLY | O_CREAT | O_TRUNC, - S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - if (fd == -1) { - err = atf_libc_error(errno, "Cannot create results file '%s'", - resfile); - } else { - err = write_resfile(fd, result, arg, reason); - close(fd); - } - } - - if (reason != NULL) - atf_dynstr_fini(reason); - - check_fatal_error(err); -} - -/** Fails a test case if validate_expect fails. */ -static void -error_in_expect(struct context *ctx, const char *fmt, ...) -{ - atf_dynstr_t reason; - va_list ap; - - va_start(ap, fmt); - format_reason_ap(&reason, NULL, 0, fmt, ap); - va_end(ap); - - ctx->expect = EXPECT_PASS; /* Ensure fail_requirement really fails. */ - fail_requirement(ctx, &reason); -} - -/** Ensures that the "expect" state is correct. - * - * Call this function before modifying the current value of expect. - */ -static void -validate_expect(struct context *ctx) -{ - if (ctx->expect == EXPECT_DEATH) { - error_in_expect(ctx, "Test case was expected to terminate abruptly " - "but it continued execution"); - } else if (ctx->expect == EXPECT_EXIT) { - error_in_expect(ctx, "Test case was expected to exit cleanly but it " - "continued execution"); - } else if (ctx->expect == EXPECT_FAIL) { - if (ctx->expect_fail_count == ctx->expect_previous_fail_count) - error_in_expect(ctx, "Test case was expecting a failure but none " - "were raised"); - else - INV(ctx->expect_fail_count > ctx->expect_previous_fail_count); - } else if (ctx->expect == EXPECT_PASS) { - /* Nothing to validate. */ - } else if (ctx->expect == EXPECT_SIGNAL) { - error_in_expect(ctx, "Test case was expected to receive a termination " - "signal but it continued execution"); - } else if (ctx->expect == EXPECT_TIMEOUT) { - error_in_expect(ctx, "Test case was expected to hang but it continued " - "execution"); - } else - UNREACHABLE; -} - -static void -expected_failure(struct context *ctx, atf_dynstr_t *reason) -{ - check_fatal_error(atf_dynstr_prepend_fmt(reason, "%s: ", - atf_dynstr_cstring(&ctx->expect_reason))); - create_resfile(ctx->resfile, "expected_failure", -1, reason); - exit(EXIT_SUCCESS); -} - -static void -fail_requirement(struct context *ctx, atf_dynstr_t *reason) -{ - if (ctx->expect == EXPECT_FAIL) { - expected_failure(ctx, reason); - } else if (ctx->expect == EXPECT_PASS) { - create_resfile(ctx->resfile, "failed", -1, reason); - exit(EXIT_FAILURE); - } else { - error_in_expect(ctx, "Test case raised a failure but was not " - "expecting one; reason was %s", atf_dynstr_cstring(reason)); - } - UNREACHABLE; -} - -static void -fail_check(struct context *ctx, atf_dynstr_t *reason) -{ - if (ctx->expect == EXPECT_FAIL) { - fprintf(stderr, "*** Expected check failure: %s: %s\n", - atf_dynstr_cstring(&ctx->expect_reason), - atf_dynstr_cstring(reason)); - ctx->expect_fail_count++; - } else if (ctx->expect == EXPECT_PASS) { - fprintf(stderr, "*** Check failed: %s\n", atf_dynstr_cstring(reason)); - ctx->fail_count++; - } else { - error_in_expect(ctx, "Test case raised a failure but was not " - "expecting one; reason was %s", atf_dynstr_cstring(reason)); - } - - atf_dynstr_fini(reason); -} - -static void -pass(struct context *ctx) -{ - if (ctx->expect == EXPECT_FAIL) { - error_in_expect(ctx, "Test case was expecting a failure but got " - "a pass instead"); - } else if (ctx->expect == EXPECT_PASS) { - create_resfile(ctx->resfile, "passed", -1, NULL); - exit(EXIT_SUCCESS); - } else { - error_in_expect(ctx, "Test case asked to explicitly pass but was " - "not expecting such condition"); - } - UNREACHABLE; -} - -static void -skip(struct context *ctx, atf_dynstr_t *reason) -{ - if (ctx->expect == EXPECT_PASS) { - create_resfile(ctx->resfile, "skipped", -1, reason); - exit(EXIT_SUCCESS); - } else { - error_in_expect(ctx, "Can only skip a test case when running in " - "expect pass mode"); - } - UNREACHABLE; -} - -/** Formats a failure/skip reason message. - * - * The formatted reason is stored in out_reason. out_reason is initialized - * in this function and is supposed to be released by the caller. In general, - * the reason will eventually be fed to create_resfile, which will release - * it. - * - * Errors in this function are fatal. Rationale being: reasons are used to - * create results files; if we can't format the reason correctly, the result - * of the test program will be bogus. So it's better to just exit with a - * fatal error. - */ -static void -format_reason_ap(atf_dynstr_t *out_reason, - const char *source_file, const size_t source_line, - const char *reason, va_list ap) -{ - atf_error_t err; - - if (source_file != NULL) { - err = atf_dynstr_init_fmt(out_reason, "%s:%zd: ", source_file, - source_line); - } else { - PRE(source_line == 0); - err = atf_dynstr_init(out_reason); - } - - if (!atf_is_error(err)) { - va_list ap2; - va_copy(ap2, ap); - err = atf_dynstr_append_ap(out_reason, reason, ap2); - va_end(ap2); - } - - check_fatal_error(err); -} - -static void -format_reason_fmt(atf_dynstr_t *out_reason, - const char *source_file, const size_t source_line, - const char *reason, ...) -{ - va_list ap; - - va_start(ap, reason); - format_reason_ap(out_reason, source_file, source_line, reason, ap); - va_end(ap); -} - -static void -errno_test(struct context *ctx, const char *file, const size_t line, - const int exp_errno, const char *expr_str, - const bool expr_result, - void (*fail_func)(struct context *, atf_dynstr_t *)) -{ - const int actual_errno = errno; - - if (expr_result) { - if (exp_errno != actual_errno) { - atf_dynstr_t reason; - - format_reason_fmt(&reason, file, line, "Expected errno %d, got %d, " - "in %s", exp_errno, actual_errno, expr_str); - fail_func(ctx, &reason); - } - } else { - atf_dynstr_t reason; - - format_reason_fmt(&reason, file, line, "Expected true value in %s", - expr_str); - fail_func(ctx, &reason); - } -} - -struct prog_found_pair { - const char *prog; - bool found; -}; - -static atf_error_t -check_prog_in_dir(const char *dir, void *data) -{ - struct prog_found_pair *pf = data; - atf_error_t err; - - if (pf->found) - err = atf_no_error(); - else { - atf_fs_path_t p; - - err = atf_fs_path_init_fmt(&p, "%s/%s", dir, pf->prog); - if (atf_is_error(err)) - goto out_p; - - err = atf_fs_eaccess(&p, atf_fs_access_x); - if (!atf_is_error(err)) - pf->found = true; - else { - atf_error_free(err); - INV(!pf->found); - err = atf_no_error(); - } - -out_p: - atf_fs_path_fini(&p); - } - - return err; -} - -static atf_error_t -check_prog(struct context *ctx, const char *prog, void *data) -{ - atf_error_t err; - atf_fs_path_t p; - - err = atf_fs_path_init_fmt(&p, "%s", prog); - if (atf_is_error(err)) - goto out; - - if (atf_fs_path_is_absolute(&p)) { - err = atf_fs_eaccess(&p, atf_fs_access_x); - if (atf_is_error(err)) { - atf_dynstr_t reason; - - atf_error_free(err); - atf_fs_path_fini(&p); - format_reason_fmt(&reason, NULL, 0, "The required program %s could " - "not be found", prog); - skip(ctx, &reason); - } - } else { - const char *path = atf_env_get("PATH"); - struct prog_found_pair pf; - atf_fs_path_t bp; - - err = atf_fs_path_branch_path(&p, &bp); - if (atf_is_error(err)) - goto out_p; - - if (strcmp(atf_fs_path_cstring(&bp), ".") != 0) { - atf_fs_path_fini(&bp); - atf_fs_path_fini(&p); - - report_fatal_error("Relative paths are not allowed when searching " - "for a program (%s)", prog); - UNREACHABLE; - } - - pf.prog = prog; - pf.found = false; - err = atf_text_for_each_word(path, ":", check_prog_in_dir, &pf); - if (atf_is_error(err)) - goto out_bp; - - if (!pf.found) { - atf_dynstr_t reason; - - atf_fs_path_fini(&bp); - atf_fs_path_fini(&p); - format_reason_fmt(&reason, NULL, 0, "The required program %s could " - "not be found in the PATH", prog); - fail_requirement(ctx, &reason); - } - -out_bp: - atf_fs_path_fini(&bp); - } - -out_p: - atf_fs_path_fini(&p); -out: - return err; -} - -/* --------------------------------------------------------------------- - * The "atf_tc" type. - * --------------------------------------------------------------------- */ - -struct atf_tc_impl { - const char *m_ident; - - atf_map_t m_vars; - atf_map_t m_config; - - atf_tc_head_t m_head; - atf_tc_body_t m_body; - atf_tc_cleanup_t m_cleanup; -}; - -/* - * Constructors/destructors. - */ - -atf_error_t -atf_tc_init(atf_tc_t *tc, const char *ident, atf_tc_head_t head, - atf_tc_body_t body, atf_tc_cleanup_t cleanup, - const char *const *config) -{ - atf_error_t err; - - tc->pimpl = malloc(sizeof(struct atf_tc_impl)); - if (tc->pimpl == NULL) { - err = atf_no_memory_error(); - goto err; - } - - tc->pimpl->m_ident = ident; - tc->pimpl->m_head = head; - tc->pimpl->m_body = body; - tc->pimpl->m_cleanup = cleanup; - - err = atf_map_init_charpp(&tc->pimpl->m_config, config); - if (atf_is_error(err)) - goto err; - - err = atf_map_init(&tc->pimpl->m_vars); - if (atf_is_error(err)) - goto err_vars; - - err = atf_tc_set_md_var(tc, "ident", ident); - if (atf_is_error(err)) - goto err_map; - - if (cleanup != NULL) { - err = atf_tc_set_md_var(tc, "has.cleanup", "true"); - if (atf_is_error(err)) - goto err_map; - } - - /* XXX Should the head be able to return error codes? */ - if (tc->pimpl->m_head != NULL) - tc->pimpl->m_head(tc); - - if (strcmp(atf_tc_get_md_var(tc, "ident"), ident) != 0) { - report_fatal_error("Test case head modified the read-only 'ident' " - "property"); - UNREACHABLE; - } - - INV(!atf_is_error(err)); - return err; - -err_map: - atf_map_fini(&tc->pimpl->m_vars); -err_vars: - atf_map_fini(&tc->pimpl->m_config); -err: - return err; -} - -atf_error_t -atf_tc_init_pack(atf_tc_t *tc, const atf_tc_pack_t *pack, - const char *const *config) -{ - return atf_tc_init(tc, pack->m_ident, pack->m_head, pack->m_body, - pack->m_cleanup, config); -} - -void -atf_tc_fini(atf_tc_t *tc) -{ - atf_map_fini(&tc->pimpl->m_vars); - free(tc->pimpl); -} - -/* - * Getters. - */ - -const char * -atf_tc_get_ident(const atf_tc_t *tc) -{ - return tc->pimpl->m_ident; -} - -const char * -atf_tc_get_config_var(const atf_tc_t *tc, const char *name) -{ - const char *val; - atf_map_citer_t iter; - - PRE(atf_tc_has_config_var(tc, name)); - iter = atf_map_find_c(&tc->pimpl->m_config, name); - val = atf_map_citer_data(iter); - INV(val != NULL); - - return val; -} - -const char * -atf_tc_get_config_var_wd(const atf_tc_t *tc, const char *name, - const char *defval) -{ - const char *val; - - if (!atf_tc_has_config_var(tc, name)) - val = defval; - else - val = atf_tc_get_config_var(tc, name); - - return val; -} - -bool -atf_tc_get_config_var_as_bool(const atf_tc_t *tc, const char *name) -{ - bool val; - const char *strval; - atf_error_t err; - - strval = atf_tc_get_config_var(tc, name); - err = atf_text_to_bool(strval, &val); - if (atf_is_error(err)) { - atf_error_free(err); - atf_tc_fail("Configuration variable %s does not have a valid " - "boolean value; found %s", name, strval); - } - - return val; -} - -bool -atf_tc_get_config_var_as_bool_wd(const atf_tc_t *tc, const char *name, - const bool defval) -{ - bool val; - - if (!atf_tc_has_config_var(tc, name)) - val = defval; - else - val = atf_tc_get_config_var_as_bool(tc, name); - - return val; -} - -long -atf_tc_get_config_var_as_long(const atf_tc_t *tc, const char *name) -{ - long val; - const char *strval; - atf_error_t err; - - strval = atf_tc_get_config_var(tc, name); - err = atf_text_to_long(strval, &val); - if (atf_is_error(err)) { - atf_error_free(err); - atf_tc_fail("Configuration variable %s does not have a valid " - "long value; found %s", name, strval); - } - - return val; -} - -long -atf_tc_get_config_var_as_long_wd(const atf_tc_t *tc, const char *name, - const long defval) -{ - long val; - - if (!atf_tc_has_config_var(tc, name)) - val = defval; - else - val = atf_tc_get_config_var_as_long(tc, name); - - return val; -} - -const char * -atf_tc_get_md_var(const atf_tc_t *tc, const char *name) -{ - const char *val; - atf_map_citer_t iter; - - PRE(atf_tc_has_md_var(tc, name)); - iter = atf_map_find_c(&tc->pimpl->m_vars, name); - val = atf_map_citer_data(iter); - INV(val != NULL); - - return val; -} - -char ** -atf_tc_get_md_vars(const atf_tc_t *tc) -{ - return atf_map_to_charpp(&tc->pimpl->m_vars); -} - -bool -atf_tc_has_config_var(const atf_tc_t *tc, const char *name) -{ - atf_map_citer_t end, iter; - - iter = atf_map_find_c(&tc->pimpl->m_config, name); - end = atf_map_end_c(&tc->pimpl->m_config); - return !atf_equal_map_citer_map_citer(iter, end); -} - -bool -atf_tc_has_md_var(const atf_tc_t *tc, const char *name) -{ - atf_map_citer_t end, iter; - - iter = atf_map_find_c(&tc->pimpl->m_vars, name); - end = atf_map_end_c(&tc->pimpl->m_vars); - return !atf_equal_map_citer_map_citer(iter, end); -} - -/* - * Modifiers. - */ - -atf_error_t -atf_tc_set_md_var(atf_tc_t *tc, const char *name, const char *fmt, ...) -{ - atf_error_t err; - char *value; - va_list ap; - - va_start(ap, fmt); - err = atf_text_format_ap(&value, fmt, ap); - va_end(ap); - - if (!atf_is_error(err)) - err = atf_map_insert(&tc->pimpl->m_vars, name, value, true); - else - free(value); - - return err; -} - -/* --------------------------------------------------------------------- - * Free functions, as they should be publicly but they can't. - * --------------------------------------------------------------------- */ - -static void _atf_tc_fail(struct context *, const char *, va_list) - ATF_DEFS_ATTRIBUTE_NORETURN; -static void _atf_tc_fail_nonfatal(struct context *, const char *, va_list); -static void _atf_tc_fail_check(struct context *, const char *, const size_t, - const char *, va_list); -static void _atf_tc_fail_requirement(struct context *, const char *, - const size_t, const char *, va_list) ATF_DEFS_ATTRIBUTE_NORETURN; -static void _atf_tc_pass(struct context *) ATF_DEFS_ATTRIBUTE_NORETURN; -static void _atf_tc_require_prog(struct context *, const char *); -static void _atf_tc_skip(struct context *, const char *, va_list) - ATF_DEFS_ATTRIBUTE_NORETURN; -static void _atf_tc_check_errno(struct context *, const char *, const size_t, - const int, const char *, const bool); -static void _atf_tc_require_errno(struct context *, const char *, const size_t, - const int, const char *, const bool); -static void _atf_tc_expect_pass(struct context *); -static void _atf_tc_expect_fail(struct context *, const char *, va_list); -static void _atf_tc_expect_exit(struct context *, const int, const char *, - va_list); -static void _atf_tc_expect_signal(struct context *, const int, const char *, - va_list); -static void _atf_tc_expect_death(struct context *, const char *, - va_list); - -static void -_atf_tc_fail(struct context *ctx, const char *fmt, va_list ap) -{ - va_list ap2; - atf_dynstr_t reason; - - va_copy(ap2, ap); - format_reason_ap(&reason, NULL, 0, fmt, ap2); - va_end(ap2); - - fail_requirement(ctx, &reason); - UNREACHABLE; -} - -static void -_atf_tc_fail_nonfatal(struct context *ctx, const char *fmt, va_list ap) -{ - va_list ap2; - atf_dynstr_t reason; - - va_copy(ap2, ap); - format_reason_ap(&reason, NULL, 0, fmt, ap2); - va_end(ap2); - - fail_check(ctx, &reason); -} - -static void -_atf_tc_fail_check(struct context *ctx, const char *file, const size_t line, - const char *fmt, va_list ap) -{ - va_list ap2; - atf_dynstr_t reason; - - va_copy(ap2, ap); - format_reason_ap(&reason, file, line, fmt, ap2); - va_end(ap2); - - fail_check(ctx, &reason); -} - -static void -_atf_tc_fail_requirement(struct context *ctx, const char *file, - const size_t line, const char *fmt, va_list ap) -{ - va_list ap2; - atf_dynstr_t reason; - - va_copy(ap2, ap); - format_reason_ap(&reason, file, line, fmt, ap2); - va_end(ap2); - - fail_requirement(ctx, &reason); - UNREACHABLE; -} - -static void -_atf_tc_pass(struct context *ctx) -{ - pass(ctx); - UNREACHABLE; -} - -static void -_atf_tc_require_prog(struct context *ctx, const char *prog) -{ - check_fatal_error(check_prog(ctx, prog, NULL)); -} - -static void -_atf_tc_skip(struct context *ctx, const char *fmt, va_list ap) -{ - atf_dynstr_t reason; - va_list ap2; - - va_copy(ap2, ap); - format_reason_ap(&reason, NULL, 0, fmt, ap2); - va_end(ap2); - - skip(ctx, &reason); -} - -static void -_atf_tc_check_errno(struct context *ctx, const char *file, const size_t line, - const int exp_errno, const char *expr_str, - const bool expr_result) -{ - errno_test(ctx, file, line, exp_errno, expr_str, expr_result, fail_check); -} - -static void -_atf_tc_require_errno(struct context *ctx, const char *file, const size_t line, - const int exp_errno, const char *expr_str, - const bool expr_result) -{ - errno_test(ctx, file, line, exp_errno, expr_str, expr_result, - fail_requirement); -} - -static void -_atf_tc_expect_pass(struct context *ctx) -{ - validate_expect(ctx); - - ctx->expect = EXPECT_PASS; -} - -static void -_atf_tc_expect_fail(struct context *ctx, const char *reason, va_list ap) -{ - va_list ap2; - - validate_expect(ctx); - - ctx->expect = EXPECT_FAIL; - atf_dynstr_fini(&ctx->expect_reason); - va_copy(ap2, ap); - check_fatal_error(atf_dynstr_init_ap(&ctx->expect_reason, reason, ap2)); - va_end(ap2); - ctx->expect_previous_fail_count = ctx->expect_fail_count; -} - -static void -_atf_tc_expect_exit(struct context *ctx, const int exitcode, const char *reason, - va_list ap) -{ - va_list ap2; - atf_dynstr_t formatted; - - validate_expect(ctx); - - ctx->expect = EXPECT_EXIT; - va_copy(ap2, ap); - check_fatal_error(atf_dynstr_init_ap(&formatted, reason, ap2)); - va_end(ap2); - - create_resfile(ctx->resfile, "expected_exit", exitcode, &formatted); -} - -static void -_atf_tc_expect_signal(struct context *ctx, const int signo, const char *reason, - va_list ap) -{ - va_list ap2; - atf_dynstr_t formatted; - - validate_expect(ctx); - - ctx->expect = EXPECT_SIGNAL; - va_copy(ap2, ap); - check_fatal_error(atf_dynstr_init_ap(&formatted, reason, ap2)); - va_end(ap2); - - create_resfile(ctx->resfile, "expected_signal", signo, &formatted); -} - -static void -_atf_tc_expect_death(struct context *ctx, const char *reason, va_list ap) -{ - va_list ap2; - atf_dynstr_t formatted; - - validate_expect(ctx); - - ctx->expect = EXPECT_DEATH; - va_copy(ap2, ap); - check_fatal_error(atf_dynstr_init_ap(&formatted, reason, ap2)); - va_end(ap2); - - create_resfile(ctx->resfile, "expected_death", -1, &formatted); -} - -static void -_atf_tc_expect_timeout(struct context *ctx, const char *reason, va_list ap) -{ - va_list ap2; - atf_dynstr_t formatted; - - validate_expect(ctx); - - ctx->expect = EXPECT_TIMEOUT; - va_copy(ap2, ap); - check_fatal_error(atf_dynstr_init_ap(&formatted, reason, ap2)); - va_end(ap2); - - create_resfile(ctx->resfile, "expected_timeout", -1, &formatted); -} - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -static struct context Current; - -atf_error_t -atf_tc_run(const atf_tc_t *tc, const char *resfile) -{ - context_init(&Current, tc, resfile); - - tc->pimpl->m_body(tc); - - validate_expect(&Current); - - if (Current.fail_count > 0) { - atf_dynstr_t reason; - - format_reason_fmt(&reason, NULL, 0, "%d checks failed; see output for " - "more details", Current.fail_count); - fail_requirement(&Current, &reason); - } else if (Current.expect_fail_count > 0) { - atf_dynstr_t reason; - - format_reason_fmt(&reason, NULL, 0, "%d checks failed as expected; " - "see output for more details", Current.expect_fail_count); - expected_failure(&Current, &reason); - } else { - pass(&Current); - } - UNREACHABLE; - return atf_no_error(); -} - -atf_error_t -atf_tc_cleanup(const atf_tc_t *tc) -{ - if (tc->pimpl->m_cleanup != NULL) - tc->pimpl->m_cleanup(tc); - return atf_no_error(); /* XXX */ -} - -/* --------------------------------------------------------------------- - * Free functions that depend on Current. - * --------------------------------------------------------------------- */ - -/* - * All the functions below provide delegates to other internal functions - * (prefixed by _) that take the current test case as an argument to - * prevent them from accessing global state. This is to keep the side- - * effects of the internal functions clearer and easier to understand. - * - * The public API should never have hid the fact that it needs access to - * the current test case (other than maybe in the macros), but changing it - * is hard. TODO: Revisit in the future. - */ - -void -atf_tc_fail(const char *fmt, ...) -{ - va_list ap; - - PRE(Current.tc != NULL); - - va_start(ap, fmt); - _atf_tc_fail(&Current, fmt, ap); - va_end(ap); -} - -void -atf_tc_fail_nonfatal(const char *fmt, ...) -{ - va_list ap; - - PRE(Current.tc != NULL); - - va_start(ap, fmt); - _atf_tc_fail_nonfatal(&Current, fmt, ap); - va_end(ap); -} - -void -atf_tc_fail_check(const char *file, const size_t line, const char *fmt, ...) -{ - va_list ap; - - PRE(Current.tc != NULL); - - va_start(ap, fmt); - _atf_tc_fail_check(&Current, file, line, fmt, ap); - va_end(ap); -} - -void -atf_tc_fail_requirement(const char *file, const size_t line, - const char *fmt, ...) -{ - va_list ap; - - PRE(Current.tc != NULL); - - va_start(ap, fmt); - _atf_tc_fail_requirement(&Current, file, line, fmt, ap); - va_end(ap); -} - -void -atf_tc_pass(void) -{ - PRE(Current.tc != NULL); - - _atf_tc_pass(&Current); -} - -void -atf_tc_require_prog(const char *prog) -{ - PRE(Current.tc != NULL); - - _atf_tc_require_prog(&Current, prog); -} - -void -atf_tc_skip(const char *fmt, ...) -{ - va_list ap; - - PRE(Current.tc != NULL); - - va_start(ap, fmt); - _atf_tc_skip(&Current, fmt, ap); - va_end(ap); -} - -void -atf_tc_check_errno(const char *file, const size_t line, const int exp_errno, - const char *expr_str, const bool expr_result) -{ - PRE(Current.tc != NULL); - - _atf_tc_check_errno(&Current, file, line, exp_errno, expr_str, - expr_result); -} - -void -atf_tc_require_errno(const char *file, const size_t line, const int exp_errno, - const char *expr_str, const bool expr_result) -{ - PRE(Current.tc != NULL); - - _atf_tc_require_errno(&Current, file, line, exp_errno, expr_str, - expr_result); -} - -void -atf_tc_expect_pass(void) -{ - PRE(Current.tc != NULL); - - _atf_tc_expect_pass(&Current); -} - -void -atf_tc_expect_fail(const char *reason, ...) -{ - va_list ap; - - PRE(Current.tc != NULL); - - va_start(ap, reason); - _atf_tc_expect_fail(&Current, reason, ap); - va_end(ap); -} - -void -atf_tc_expect_exit(const int exitcode, const char *reason, ...) -{ - va_list ap; - - PRE(Current.tc != NULL); - - va_start(ap, reason); - _atf_tc_expect_exit(&Current, exitcode, reason, ap); - va_end(ap); -} - -void -atf_tc_expect_signal(const int signo, const char *reason, ...) -{ - va_list ap; - - PRE(Current.tc != NULL); - - va_start(ap, reason); - _atf_tc_expect_signal(&Current, signo, reason, ap); - va_end(ap); -} - -void -atf_tc_expect_death(const char *reason, ...) -{ - va_list ap; - - PRE(Current.tc != NULL); - - va_start(ap, reason); - _atf_tc_expect_death(&Current, reason, ap); - va_end(ap); -} - -void -atf_tc_expect_timeout(const char *reason, ...) -{ - va_list ap; - - PRE(Current.tc != NULL); - - va_start(ap, reason); - _atf_tc_expect_timeout(&Current, reason, ap); - va_end(ap); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/build.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/build.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/build.c (nonexistent) @@ -1,281 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2009 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include "atf-c/build.h" -#include "atf-c/config.h" -#include "atf-c/error.h" - -#include "detail/sanity.h" -#include "detail/text.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -atf_error_t -append_config_var(const char *var, atf_list_t *argv) -{ - atf_error_t err; - atf_list_t words; - - err = atf_text_split(atf_config_get(var), " ", &words); - if (atf_is_error(err)) - goto out; - - atf_list_append_list(argv, &words); - -out: - return err; -} - -static -atf_error_t -append_arg1(const char *arg, atf_list_t *argv) -{ - return atf_list_append(argv, strdup(arg), true); -} - -static -atf_error_t -append_arg2(const char *flag, const char *arg, atf_list_t *argv) -{ - atf_error_t err; - - err = append_arg1(flag, argv); - if (!atf_is_error(err)) - err = append_arg1(arg, argv); - - return err; -} - -static -atf_error_t -append_optargs(const char *const optargs[], atf_list_t *argv) -{ - atf_error_t err; - - err = atf_no_error(); - while (*optargs != NULL && !atf_is_error(err)) { - err = append_arg1(strdup(*optargs), argv); - optargs++; - } - - return err; -} - -static -atf_error_t -append_src_out(const char *src, const char *obj, atf_list_t *argv) -{ - atf_error_t err; - - err = append_arg2("-o", obj, argv); - if (atf_is_error(err)) - goto out; - - err = append_arg1("-c", argv); - if (atf_is_error(err)) - goto out; - - err = append_arg1(src, argv); - -out: - return err; -} - -static -atf_error_t -list_to_array(const atf_list_t *l, char ***ap) -{ - atf_error_t err; - char **a; - - a = (char **)malloc((atf_list_size(l) + 1) * sizeof(char *)); - if (a == NULL) - err = atf_no_memory_error(); - else { - char **aiter; - atf_list_citer_t liter; - - aiter = a; - atf_list_for_each_c(liter, l) { - *aiter = strdup((const char *)atf_list_citer_data(liter)); - aiter++; - } - *aiter = NULL; - - err = atf_no_error(); - } - *ap = a; /* Shut up warnings in the caller about uninitialized *ap. */ - - return err; -} - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -atf_error_t -atf_build_c_o(const char *sfile, - const char *ofile, - const char *const optargs[], - char ***argv) -{ - atf_error_t err; - atf_list_t argv_list; - - err = atf_list_init(&argv_list); - if (atf_is_error(err)) - goto out; - - err = append_config_var("atf_build_cc", &argv_list); - if (atf_is_error(err)) - goto out_list; - - err = append_config_var("atf_build_cppflags", &argv_list); - if (atf_is_error(err)) - goto out_list; - - err = append_config_var("atf_build_cflags", &argv_list); - if (atf_is_error(err)) - goto out_list; - - if (optargs != NULL) { - err = append_optargs(optargs, &argv_list); - if (atf_is_error(err)) - goto out_list; - } - - err = append_src_out(sfile, ofile, &argv_list); - if (atf_is_error(err)) - goto out_list; - - err = list_to_array(&argv_list, argv); - if (atf_is_error(err)) - goto out_list; - -out_list: - atf_list_fini(&argv_list); -out: - return err; -} - -atf_error_t -atf_build_cpp(const char *sfile, - const char *ofile, - const char *const optargs[], - char ***argv) -{ - atf_error_t err; - atf_list_t argv_list; - - err = atf_list_init(&argv_list); - if (atf_is_error(err)) - goto out; - - err = append_config_var("atf_build_cpp", &argv_list); - if (atf_is_error(err)) - goto out_list; - - err = append_config_var("atf_build_cppflags", &argv_list); - if (atf_is_error(err)) - goto out_list; - - if (optargs != NULL) { - err = append_optargs(optargs, &argv_list); - if (atf_is_error(err)) - goto out_list; - } - - err = append_arg2("-o", ofile, &argv_list); - if (atf_is_error(err)) - goto out_list; - - err = append_arg1(sfile, &argv_list); - if (atf_is_error(err)) - goto out_list; - - err = list_to_array(&argv_list, argv); - if (atf_is_error(err)) - goto out_list; - -out_list: - atf_list_fini(&argv_list); -out: - return err; -} - -atf_error_t -atf_build_cxx_o(const char *sfile, - const char *ofile, - const char *const optargs[], - char ***argv) -{ - atf_error_t err; - atf_list_t argv_list; - - err = atf_list_init(&argv_list); - if (atf_is_error(err)) - goto out; - - err = append_config_var("atf_build_cxx", &argv_list); - if (atf_is_error(err)) - goto out_list; - - err = append_config_var("atf_build_cppflags", &argv_list); - if (atf_is_error(err)) - goto out_list; - - err = append_config_var("atf_build_cxxflags", &argv_list); - if (atf_is_error(err)) - goto out_list; - - if (optargs != NULL) { - err = append_optargs(optargs, &argv_list); - if (atf_is_error(err)) - goto out_list; - } - - err = append_src_out(sfile, ofile, &argv_list); - if (atf_is_error(err)) - goto out_list; - - err = list_to_array(&argv_list, argv); - if (atf_is_error(err)) - goto out_list; - -out_list: - atf_list_fini(&argv_list); -out: - return err; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/utils.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/utils.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/utils.c (nonexistent) @@ -1,43 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2010 The NetBSD Foundation, Inc. - * 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 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 - -#include "atf-c/utils.h" - -void -atf_utils_free_charpp(char **argv) -{ - char **ptr; - - for (ptr = argv; *ptr != NULL; ptr++) - free(*ptr); - - free(argv); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/build.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/build.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/build.h (nonexistent) @@ -1,42 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2009 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_BUILD_H) -#define ATF_C_BUILD_H - -#include - -atf_error_t atf_build_c_o(const char *, const char *, const char *const [], - char ***); -atf_error_t atf_build_cpp(const char *, const char *, const char *const [], - char ***); -atf_error_t atf_build_cxx_o(const char *, const char *, const char *const [], - char ***); - -#endif /* ATF_C_BUILD_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/atf-c-api.3 =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/atf-c-api.3 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/atf-c-api.3 (nonexistent) @@ -1,510 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd December 26, 2010 -.Dt ATF-C-API 3 -.Os -.Sh NAME -.Nm ATF_CHECK , -.Nm ATF_CHECK_MSG , -.Nm ATF_CHECK_EQ , -.Nm ATF_CHECK_EQ_MSG , -.Nm ATF_CHECK_STREQ , -.Nm ATF_CHECK_STREQ_MSG , -.Nm ATF_CHECK_ERRNO , -.Nm ATF_REQUIRE , -.Nm ATF_REQUIRE_MSG , -.Nm ATF_REQUIRE_EQ , -.Nm ATF_REQUIRE_EQ_MSG , -.Nm ATF_REQUIRE_STREQ , -.Nm ATF_REQUIRE_STREQ_MSG , -.Nm ATF_REQUIRE_ERRNO , -.Nm ATF_TC , -.Nm ATF_TC_BODY , -.Nm ATF_TC_BODY_NAME , -.Nm ATF_TC_CLEANUP , -.Nm ATF_TC_CLEANUP_NAME , -.Nm ATF_TC_HEAD , -.Nm ATF_TC_HEAD_NAME , -.Nm ATF_TC_NAME , -.Nm ATF_TC_WITH_CLEANUP , -.Nm ATF_TC_WITHOUT_HEAD , -.Nm ATF_TP_ADD_TC , -.Nm ATF_TP_ADD_TCS , -.Nm atf_tc_get_config_var , -.Nm atf_tc_get_config_var_wd , -.Nm atf_tc_get_config_var_as_bool , -.Nm atf_tc_get_config_var_as_bool_wd , -.Nm atf_tc_get_config_var_as_long , -.Nm atf_tc_get_config_var_as_long_wd , -.Nm atf_no_error , -.Nm atf_tc_expect_death , -.Nm atf_tc_expect_exit , -.Nm atf_tc_expect_fail , -.Nm atf_tc_expect_pass , -.Nm atf_tc_expect_signal , -.Nm atf_tc_expect_timeout , -.Nm atf_tc_fail , -.Nm atf_tc_fail_nonfatal , -.Nm atf_tc_pass , -.Nm atf_tc_skip -.Nd C API to write ATF-based test programs -.Sh SYNOPSIS -.In atf-c.h -.Fn ATF_CHECK "expression" -.Fn ATF_CHECK_MSG "expression" "fail_msg_fmt" ... -.Fn ATF_CHECK_EQ "expression_1" "expression_2" -.Fn ATF_CHECK_EQ_MSG "expression_1" "expression_2" "fail_msg_fmt" ... -.Fn ATF_CHECK_STREQ "string_1" "string_2" -.Fn ATF_CHECK_STREQ_MSG "string_1" "string_2" "fail_msg_fmt" ... -.Fn ATF_CHECK_ERRNO "exp_errno" "bool_expression" -.Fn ATF_REQUIRE "expression" -.Fn ATF_REQUIRE_MSG "expression" "fail_msg_fmt" ... -.Fn ATF_REQUIRE_EQ "expression_1" "expression_2" -.Fn ATF_REQUIRE_EQ_MSG "expression_1" "expression_2" "fail_msg_fmt" ... -.Fn ATF_REQUIRE_STREQ "string_1" "string_2" -.Fn ATF_REQUIRE_STREQ_MSG "string_1" "string_2" "fail_msg_fmt" ... -.Fn ATF_REQUIRE_ERRNO "exp_errno" "bool_expression" -.Fn ATF_TC "name" -.Fn ATF_TC_BODY "name" "tc" -.Fn ATF_TC_BODY_NAME "name" -.Fn ATF_TC_CLEANUP "name" "tc" -.Fn ATF_TC_CLEANUP_NAME "name" -.Fn ATF_TC_HEAD "name" "tc" -.Fn ATF_TC_HEAD_NAME "name" -.Fn ATF_TC_NAME "name" -.Fn ATF_TC_WITH_CLEANUP "name" -.Fn ATF_TC_WITHOUT_HEAD "name" -.Fn ATF_TP_ADD_TC "tp_name" "tc_name" -.Fn ATF_TP_ADD_TCS "tp_name" -.Fn atf_tc_get_config_var "tc" "varname" -.Fn atf_tc_get_config_var_wd "tc" "variable_name" "default_value" -.Fn atf_tc_get_config_var_as_bool "tc" "variable_name" -.Fn atf_tc_get_config_var_as_bool_wd "tc" "variable_name" "default_value" -.Fn atf_tc_get_config_var_as_long "tc" "variable_name" -.Fn atf_tc_get_config_var_as_long_wd "tc" "variable_name" "default_value" -.Fn atf_no_error -.Fn atf_tc_expect_death "reason" "..." -.Fn atf_tc_expect_exit "exitcode" "reason" "..." -.Fn atf_tc_expect_fail "reason" "..." -.Fn atf_tc_expect_pass -.Fn atf_tc_expect_signal "signo" "reason" "..." -.Fn atf_tc_expect_timeout "reason" "..." -.Fn atf_tc_fail "reason" -.Fn atf_tc_fail_nonfatal "reason" -.Fn atf_tc_pass -.Fn atf_tc_skip "reason" -.Sh DESCRIPTION -The ATF -.Pp -C-based test programs always follow this template: -.Bd -literal -offset indent -.Ns ... C-specific includes go here ... - -#include - -ATF_TC(tc1); -ATF_TC_HEAD(tc1, tc) -{ - ... first test case's header ... -} -ATF_TC_BODY(tc1, tc) -{ - ... first test case's body ... -} - -ATF_TC_WITH_CLEANUP(tc2); -ATF_TC_HEAD(tc2, tc) -{ - ... second test case's header ... -} -ATF_TC_BODY(tc2, tc) -{ - ... second test case's body ... -} -ATF_TC_CLEANUP(tc2, tc) -{ - ... second test case's cleanup ... -} - -ATF_TC_WITHOUT_HEAD(tc3); -ATF_TC_BODY(tc3, tc) -{ - ... third test case's body ... -} - -.Ns ... additional test cases ... - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tcs, tc1); - ATF_TP_ADD_TC(tcs, tc2); - ATF_TP_ADD_TC(tcs, tc3); - ... add additional test cases ... - - return atf_no_error(); -} -.Ed -.Ss Definition of test cases -Test cases have an identifier and are composed of three different parts: -the header, the body and an optional cleanup routine, all of which are -described in -.Xr atf-test-case 4 . -To define test cases, one can use the -.Fn ATF_TC , -.Fn ATF_TC_WITH_CLEANUP -or the -.Fn ATF_TC_WITHOUT_HEAD -macros, which take a single parameter specifiying the test case's name. -.Fn ATF_TC , -requires to define a head and a body for the test case, -.Fn ATF_TC_WITH_CLEANUP -requires to define a head, a body and a cleanup for the test case and -.Fn ATF_TC_WITHOUT_HEAD -requires only a body for the test case. -It is important to note that these -.Em do not -set the test case up for execution when the program is run. -In order to do so, a later registration is needed with the -.Fn ATF_TP_ADD_TC -macro detailed in -.Sx Program initialization . -.Pp -Later on, one must define the three parts of the body by means of three -functions. -Their headers are given by the -.Fn ATF_TC_HEAD , -.Fn ATF_TC_BODY -and -.Fn ATF_TC_CLEANUP -macros, all of which take the test case name provided to the -.Fn ATF_TC -.Fn ATF_TC_WITH_CLEANUP , -or -.Fn ATF_TC_WITHOUT_HEAD -macros and the name of the variable that will hold a pointer to the -test case data. -Following each of these, a block of code is expected, surrounded by the -opening and closing brackets. -.Ss Program initialization -The library provides a way to easily define the test program's -.Fn main -function. -You should never define one on your own, but rely on the -library to do it for you. -This is done by using the -.Fn ATF_TP_ADD_TCS -macro, which is passed the name of the object that will hold the test -cases; i.e. the test program instance. -This name can be whatever you want as long as it is a valid variable -identifier. -.Pp -After the macro, you are supposed to provide the body of a function, which -should only use the -.Fn ATF_TP_ADD_TC -macro to register the test cases the test program will execute and return -a success error code. -The first parameter of this macro matches the name you provided in the -former call. -The success status can be returned using the -.Fn atf_no_error -function. -.Ss Header definitions -The test case's header can define the meta-data by using the -.Fn atf_tc_set_md_var -method, which takes three parameters: the first one points to the test -case data, the second one specifies the meta-data variable to be set -and the third one specifies its value. -Both of them are strings. -.Ss Configuration variables -The test case has read-only access to the current configuration variables -by means of the -.Ft bool -.Fn atf_tc_has_config_var , -.Ft const char * -.Fn atf_tc_get_config_var , -.Ft const char * -.Fn atf_tc_get_config_var_wd , -.Ft bool -.Fn atf_tc_get_config_var_as_bool , -.Ft bool -.Fn atf_tc_get_config_var_as_bool_wd , -.Ft long -.Fn atf_tc_get_config_var_as_long , -and the -.Ft long -.Fn atf_tc_get_config_var_as_long_wd -functions, which can be called in any of the three parts of a test case. -.Pp -The -.Sq _wd -variants take a default value for the variable which is returned if the -variable is not defined. -The other functions without the -.Sq _wd -suffix -.Em require -the variable to be defined. -.Ss Access to the source directory -It is possible to get the path to the test case's source directory from any -of its three components by querying the -.Sq srcdir -configuration variable. -.Ss Requiring programs -Aside from the -.Va require.progs -meta-data variable available in the header only, one can also check for -additional programs in the test case's body by using the -.Fn atf_tc_require_prog -function, which takes the base name or full path of a single binary. -Relative paths are forbidden. -If it is not found, the test case will be automatically skipped. -.Ss Test case finalization -The test case finalizes either when the body reaches its end, at which -point the test is assumed to have -.Em passed , -unless any non-fatal errors were raised using -.Fn atf_tc_fail_nonfatal , -or at any explicit call to -.Fn atf_tc_pass , -.Fn atf_tc_fail -or -.Fn atf_tc_skip . -These three functions terminate the execution of the test case immediately. -The cleanup routine will be processed afterwards in a completely automated -way, regardless of the test case's termination reason. -.Pp -.Fn atf_tc_pass -does not take any parameters. -.Fn atf_tc_fail , -.Fn atf_tc_fail_nonfatal -and -.Fn atf_tc_skip -take a format string and a variable list of parameters, which describe, in -a user-friendly manner, why the test case failed or was skipped, -respectively. -It is very important to provide a clear error message in both cases so that -the user can quickly know why the test did not pass. -.Ss Expectations -Everything explained in the previous section changes when the test case -expectations are redefined by the programmer. -.Pp -Each test case has an internal state called -.Sq expect -that describes what the test case expectations are at any point in time. -The value of this property can change during execution by any of: -.Bl -tag -width indent -.It Fn atf_tc_expect_death "reason" "..." -Expects the test case to exit prematurely regardless of the nature of the -exit. -.It Fn atf_tc_expect_exit "exitcode" "reason" "..." -Expects the test case to exit cleanly. -If -.Va exitcode -is not -.Sq -1 , -.Xr atf-run 1 -will validate that the exit code of the test case matches the one provided -in this call. -Otherwise, the exact value will be ignored. -.It Fn atf_tc_expect_fail "reason" "..." -Any failure (be it fatal or non-fatal) raised in this mode is recorded. -However, such failures do not report the test case as failed; instead, the -test case finalizes cleanly and is reported as -.Sq expected failure ; -this report includes the provided -.Fa reason -as part of it. -If no error is raised while running in this mode, then the test case is -reported as -.Sq failed . -.Pp -This mode is useful to reproduce actual known bugs in tests. -Whenever the developer fixes the bug later on, the test case will start -reporting a failure, signaling the developer that the test case must be -adjusted to the new conditions. -In this situation, it is useful, for example, to set -.Fa reason -as the bug number for tracking purposes. -.It Fn atf_tc_expect_pass -This is the normal mode of execution. -In this mode, any failure is reported as such to the user and the test case -is marked as -.Sq failed . -.It Fn atf_tc_expect_signal "signo" "reason" "..." -Expects the test case to terminate due to the reception of a signal. -If -.Va signo -is not -.Sq -1 , -.Xr atf-run 1 -will validate that the signal that terminated the test case matches the one -provided in this call. -Otherwise, the exact value will be ignored. -.It Fn atf_tc_expect_timeout "reason" "..." -Expects the test case to execute for longer than its timeout. -.El -.Ss Helper macros for common checks -The library provides several macros that are very handy in multiple -situations. -These basically check some condition after executing a given statement or -processing a given expression and, if the condition is not met, they -report the test case as failed. -.Pp -The -.Sq REQUIRE -variant of the macros immediately abort the test case as soon as an error -condition is detected by calling the -.Fn atf_tc_fail -function. -Use this variant whenever it makes now sense to continue the execution of a -test case when the checked condition is not met. -The -.Sq CHECK -variant, on the other hand, reports a failure as soon as it is encountered -using the -.Fn atf_tc_fail_nonfatal -function, but the execution of the test case continues as if nothing had -happened. -Use this variant whenever the checked condition is important as a result of -the test case, but there are other conditions that can be subsequently -checked on the same run without aborting. -.Pp -Additionally, the -.Sq MSG -variants take an extra set of parameters to explicitly specify the failure -message. -This failure message is formatted according to the -.Xr printf 3 -formatters. -.Pp -.Fn ATF_CHECK , -.Fn ATF_CHECK_MSG , -.Fn ATF_REQUIRE -and -.Fn ATF_REQUIRE_MSG -take an expression and fail if the expression evaluates to false. -.Pp -.Fn ATF_CHECK_EQ , -.Fn ATF_CHECK_EQ_MSG , -.Fn ATF_REQUIRE_EQ -and -.Fn ATF_REQUIRE_EQ_MSG -take two expressions and fail if the two evaluated values are not equal. -.Pp -.Fn ATF_CHECK_STREQ , -.Fn ATF_CHECK_STREQ_MSG , -.Fn ATF_REQUIRE_STREQ -and -.Fn ATF_REQUIRE_STREQ_MSG -take two strings and fail if the two are not equal character by character. -.Pp -.Fn ATF_CHECK_ERRNO -and -.Fn ATF_REQUIRE_ERRNO -take, first, the error code that the check is expecting to find in the -.Va errno -variable and, second, a boolean expression that, if evaluates to true, -means that a call failed and -.Va errno -has to be checked against the first value. -.Sh EXAMPLES -The following shows a complete test program with a single test case that -validates the addition operator: -.Bd -literal -offset indent -#include - -ATF_TC(addition); -ATF_TC_HEAD(addition, tc) -{ - atf_tc_set_md_var(tc, "descr", - "Sample tests for the addition operator"); -} -ATF_TC_BODY(addition, tc) -{ - ATF_CHECK_EQ(0 + 0, 0); - ATF_CHECK_EQ(0 + 1, 1); - ATF_CHECK_EQ(1 + 0, 1); - - ATF_CHECK_EQ(1 + 1, 2); - - ATF_CHECK_EQ(100 + 200, 300); -} - -ATF_TC(string_formatting); -ATF_TC_HEAD(string_formatting, tc) -{ - atf_tc_set_md_var(tc, "descr", - "Sample tests for the snprintf"); -} -ATF_TC_BODY(string_formatting, tc) -{ - char buf[1024]; - snprintf(buf, sizeof(buf), "a %s", "string"); - ATF_CHECK_STREQ_MSG("a string", buf, "%s is not working"); -} - -ATF_TC(open_failure); -ATF_TC_HEAD(open_failure, tc) -{ - atf_tc_set_md_var(tc, "descr", - "Sample tests for the open function"); -} -ATF_TC_BODY(open_failure, tc) -{ - ATF_CHECK_ERRNO(ENOENT, open("non-existent", O_RDONLY) == -1); -} - -ATF_TC(known_bug); -ATF_TC_HEAD(known_bug, tc) -{ - atf_tc_set_md_var(tc, "descr", - "Reproduces a known bug"); -} -ATF_TC_BODY(known_bug, tc) -{ - atf_tc_expect_fail("See bug number foo/bar"); - ATF_CHECK_EQ(3, 1 + 1); - atf_tc_expect_pass(); - ATF_CHECK_EQ(3, 1 + 2); -} - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, addition); - ATF_TP_ADD_TC(tp, string_formatting); - ATF_TP_ADD_TC(tp, open_failure); - ATF_TP_ADD_TC(tp, known_bug); - - return atf_no_error(); -} -.Ed -.Sh SEE ALSO -.Xr atf-test-program 1 , -.Xr atf-test-case 4 , -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/atf-c/utils.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/utils.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/utils.h (nonexistent) @@ -1,35 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_UTILS_H) -#define ATF_C_UTILS_H - -void atf_utils_free_charpp(char **); - -#endif /* ATF_C_UTILS_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/text.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/text.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/text.c (nonexistent) @@ -1,184 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include - -#include "atf-c/error.h" - -#include "dynstr.h" -#include "sanity.h" -#include "text.h" - -atf_error_t -atf_text_for_each_word(const char *instr, const char *sep, - atf_error_t (*func)(const char *, void *), - void *data) -{ - atf_error_t err; - char *str, *str2, *last; - - str = strdup(instr); - if (str == NULL) { - err = atf_no_memory_error(); - goto out; - } - - err = atf_no_error(); - str2 = strtok_r(str, sep, &last); - while (str2 != NULL && !atf_is_error(err)) { - err = func(str2, data); - str2 = strtok_r(NULL, sep, &last); - } - - free(str); -out: - return err; -} - -atf_error_t -atf_text_format(char **dest, const char *fmt, ...) -{ - atf_error_t err; - va_list ap; - - va_start(ap, fmt); - err = atf_text_format_ap(dest, fmt, ap); - va_end(ap); - - return err; -} - -atf_error_t -atf_text_format_ap(char **dest, const char *fmt, va_list ap) -{ - atf_error_t err; - atf_dynstr_t tmp; - va_list ap2; - - va_copy(ap2, ap); - err = atf_dynstr_init_ap(&tmp, fmt, ap2); - va_end(ap2); - if (!atf_is_error(err)) - *dest = atf_dynstr_fini_disown(&tmp); - - return err; -} - -atf_error_t -atf_text_split(const char *str, const char *delim, atf_list_t *words) -{ - atf_error_t err; - const char *end; - const char *iter; - - err = atf_list_init(words); - if (atf_is_error(err)) - goto err; - - end = str + strlen(str); - INV(*end == '\0'); - iter = str; - while (iter < end) { - const char *ptr; - - INV(iter != NULL); - ptr = strstr(iter, delim); - if (ptr == NULL) - ptr = end; - - INV(ptr >= iter); - if (ptr > iter) { - atf_dynstr_t word; - - err = atf_dynstr_init_raw(&word, iter, ptr - iter); - if (atf_is_error(err)) - goto err_list; - - err = atf_list_append(words, atf_dynstr_fini_disown(&word), true); - if (atf_is_error(err)) - goto err_list; - } - - iter = ptr + strlen(delim); - } - - INV(!atf_is_error(err)); - return err; - -err_list: - atf_list_fini(words); -err: - return err; -} - -atf_error_t -atf_text_to_bool(const char *str, bool *b) -{ - atf_error_t err; - - if (strcasecmp(str, "yes") == 0 || - strcasecmp(str, "true") == 0) { - *b = true; - err = atf_no_error(); - } else if (strcasecmp(str, "no") == 0 || - strcasecmp(str, "false") == 0) { - *b = false; - err = atf_no_error(); - } else { - /* XXX Not really a libc error. */ - err = atf_libc_error(EINVAL, "Cannot convert string '%s' " - "to boolean", str); - } - - return err; -} - -atf_error_t -atf_text_to_long(const char *str, long *l) -{ - atf_error_t err; - char *endptr; - long tmp; - - errno = 0; - tmp = strtol(str, &endptr, 10); - if (str[0] == '\0' || *endptr != '\0') - err = atf_libc_error(EINVAL, "'%s' is not a number", str); - else if (errno == ERANGE || (tmp == LONG_MAX || tmp == LONG_MIN)) - err = atf_libc_error(ERANGE, "'%s' is out of range", str); - else { - *l = tmp; - err = atf_no_error(); - } - - return err; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/process_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/process_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/process_test.c (nonexistent) @@ -1,1170 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010, 2011 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "atf-c/defs.h" - -#include "process.h" -#include "sanity.h" -#include "test_helpers.h" - -atf_error_t atf_process_status_init(atf_process_status_t *, int); - -/* --------------------------------------------------------------------- - * Auxiliary functions for testing of 'atf_process_fork'. - * --------------------------------------------------------------------- */ - -/* - * Testing of atf_process_fork is quite messy. We want to be able to test - * all the possible combinations of stdout and stderr behavior to ensure - * that the streams are manipulated correctly. - * - * To do this, the do_fork function is a wrapper for atf_process_fork that - * issues stream-specific hooks before fork, while the child is running and - * after the child terminates. We then provide test cases that just call - * do_fork with different hooks. - * - * The hooks are described by base_stream, and we then have one *_stream - * type for ever possible stream behavior. - */ - -enum out_type { stdout_type, stderr_type }; - -struct base_stream { - void (*init)(void *); - void (*process)(void *, atf_process_child_t *); - void (*fini)(void *); - - /* m_sb is initialized by subclasses that need it, but all consumers - * must use m_sb_ptr, which may or may not point to m_sb. This allows - * us to test the interface with a NULL value, which triggers a - * default behavior. */ - atf_process_stream_t m_sb; - atf_process_stream_t *m_sb_ptr; - enum out_type m_type; -}; -#define BASE_STREAM(ihook, phook, fhook, type) \ - { .init = ihook, \ - .process = phook, \ - .fini = fhook, \ - .m_type = type } - -static -void -check_file(const enum out_type type) -{ - switch (type) { - case stdout_type: - ATF_CHECK(grep_file("stdout", "stdout: msg")); - ATF_CHECK(!grep_file("stdout", "stderr: msg")); - break; - case stderr_type: - ATF_CHECK(grep_file("stderr", "stderr: msg")); - ATF_CHECK(!grep_file("stderr", "stdout: msg")); - break; - default: - UNREACHABLE; - } -} - -struct capture_stream { - struct base_stream m_base; - - atf_dynstr_t m_msg; -}; -#define CAPTURE_STREAM(type) \ - { .m_base = BASE_STREAM(capture_stream_init, \ - capture_stream_process, \ - capture_stream_fini, \ - type) } - -static -void -capture_stream_init(void *v) -{ - struct capture_stream *s = v; - - s->m_base.m_sb_ptr = &s->m_base.m_sb; - RE(atf_process_stream_init_capture(&s->m_base.m_sb)); - RE(atf_dynstr_init(&s->m_msg)); -} - -static -void -capture_stream_process(void *v, atf_process_child_t *c) -{ - struct capture_stream *s = v; - - bool eof; - switch (s->m_base.m_type) { - case stdout_type: - eof = read_line(atf_process_child_stdout(c), &s->m_msg); - break; - case stderr_type: - eof = read_line(atf_process_child_stderr(c), &s->m_msg); - break; - default: - UNREACHABLE; - } -} - -static -void -capture_stream_fini(void *v) -{ - struct capture_stream *s = v; - - switch (s->m_base.m_type) { - case stdout_type: - ATF_CHECK(grep_string(&s->m_msg, "stdout: msg")); - ATF_CHECK(!grep_string(&s->m_msg, "stderr: msg")); - break; - case stderr_type: - ATF_CHECK(!grep_string(&s->m_msg, "stdout: msg")); - ATF_CHECK(grep_string(&s->m_msg, "stderr: msg")); - break; - default: - UNREACHABLE; - } - - atf_dynstr_fini(&s->m_msg); - atf_process_stream_fini(&s->m_base.m_sb); -} - -struct connect_stream { - struct base_stream m_base; - - int m_fd; -}; -#define CONNECT_STREAM(type) \ - { .m_base = BASE_STREAM(connect_stream_init, \ - NULL, \ - connect_stream_fini, \ - type) } - -static -void -connect_stream_init(void *v) -{ - struct connect_stream *s = v; - int src_fd; - - switch (s->m_base.m_type) { - case stdout_type: - src_fd = STDOUT_FILENO; - s->m_fd = open("stdout", O_WRONLY | O_CREAT | O_TRUNC, 0644); - break; - case stderr_type: - src_fd = STDERR_FILENO; - s->m_fd = open("stderr", O_WRONLY | O_CREAT | O_TRUNC, 0644); - break; - default: - UNREACHABLE; - src_fd = -1; - } - ATF_REQUIRE(s->m_fd != -1); - - s->m_base.m_sb_ptr = &s->m_base.m_sb; - RE(atf_process_stream_init_connect(&s->m_base.m_sb, src_fd, s->m_fd)); -} - -static -void -connect_stream_fini(void *v) -{ - struct connect_stream *s = v; - - ATF_REQUIRE(close(s->m_fd) != -1); - - atf_process_stream_fini(&s->m_base.m_sb); - - check_file(s->m_base.m_type); -} - -struct inherit_stream { - struct base_stream m_base; - int m_fd; - - int m_old_fd; -}; -#define INHERIT_STREAM(type) \ - { .m_base = BASE_STREAM(inherit_stream_init, \ - NULL, \ - inherit_stream_fini, \ - type) } - -static -void -inherit_stream_init(void *v) -{ - struct inherit_stream *s = v; - const char *name; - - s->m_base.m_sb_ptr = &s->m_base.m_sb; - RE(atf_process_stream_init_inherit(&s->m_base.m_sb)); - - switch (s->m_base.m_type) { - case stdout_type: - s->m_fd = STDOUT_FILENO; - name = "stdout"; - break; - case stderr_type: - s->m_fd = STDERR_FILENO; - name = "stderr"; - break; - default: - UNREACHABLE; - name = NULL; - } - - s->m_old_fd = dup(s->m_fd); - ATF_REQUIRE(s->m_old_fd != -1); - ATF_REQUIRE(close(s->m_fd) != -1); - ATF_REQUIRE_EQ(open(name, O_WRONLY | O_CREAT | O_TRUNC, 0644), - s->m_fd); -} - -static -void -inherit_stream_fini(void *v) -{ - struct inherit_stream *s = v; - - ATF_REQUIRE(dup2(s->m_old_fd, s->m_fd) != -1); - ATF_REQUIRE(close(s->m_old_fd) != -1); - - atf_process_stream_fini(&s->m_base.m_sb); - - check_file(s->m_base.m_type); -} - -#define default_stream inherit_stream -#define DEFAULT_STREAM(type) \ - { .m_base = BASE_STREAM(default_stream_init, \ - NULL, \ - default_stream_fini, \ - type) } - -static -void -default_stream_init(void *v) -{ - struct inherit_stream *s = v; - - inherit_stream_init(v); - s->m_base.m_sb_ptr = NULL; -} - -static -void -default_stream_fini(void *v) -{ - inherit_stream_fini(v); -} - -struct redirect_fd_stream { - struct base_stream m_base; - - int m_fd; -}; -#define REDIRECT_FD_STREAM(type) \ - { .m_base = BASE_STREAM(redirect_fd_stream_init, \ - NULL, \ - redirect_fd_stream_fini, \ - type) } - -static -void -redirect_fd_stream_init(void *v) -{ - struct redirect_fd_stream *s = v; - - switch (s->m_base.m_type) { - case stdout_type: - s->m_fd = open("stdout", O_WRONLY | O_CREAT | O_TRUNC, 0644); - break; - case stderr_type: - s->m_fd = open("stderr", O_WRONLY | O_CREAT | O_TRUNC, 0644); - break; - default: - UNREACHABLE; - } - ATF_REQUIRE(s->m_fd != -1); - - s->m_base.m_sb_ptr = &s->m_base.m_sb; - RE(atf_process_stream_init_redirect_fd(&s->m_base.m_sb, s->m_fd)); -} - -static -void -redirect_fd_stream_fini(void *v) -{ - struct redirect_fd_stream *s = v; - - ATF_REQUIRE(close(s->m_fd) != -1); - - atf_process_stream_fini(&s->m_base.m_sb); - - check_file(s->m_base.m_type); -} - -struct redirect_path_stream { - struct base_stream m_base; - - atf_fs_path_t m_path; -}; -#define REDIRECT_PATH_STREAM(type) \ - { .m_base = BASE_STREAM(redirect_path_stream_init, \ - NULL, \ - redirect_path_stream_fini, \ - type) } - -static -void -redirect_path_stream_init(void *v) -{ - struct redirect_path_stream *s = v; - - switch (s->m_base.m_type) { - case stdout_type: - RE(atf_fs_path_init_fmt(&s->m_path, "stdout")); - break; - case stderr_type: - RE(atf_fs_path_init_fmt(&s->m_path, "stderr")); - break; - default: - UNREACHABLE; - } - - s->m_base.m_sb_ptr = &s->m_base.m_sb; - RE(atf_process_stream_init_redirect_path(&s->m_base.m_sb, &s->m_path)); -} - -static -void -redirect_path_stream_fini(void *v) -{ - struct redirect_path_stream *s = v; - - atf_process_stream_fini(&s->m_base.m_sb); - - atf_fs_path_fini(&s->m_path); - - check_file(s->m_base.m_type); -} - -static void child_print(void *) ATF_DEFS_ATTRIBUTE_NORETURN; - -struct child_print_data { - const char *m_msg; -}; - -static -void -child_print(void *v) -{ - struct child_print_data *cpd = v; - - fprintf(stdout, "stdout: %s\n", cpd->m_msg); - fprintf(stderr, "stderr: %s\n", cpd->m_msg); - - exit(EXIT_SUCCESS); -} - -static -void -do_fork(const struct base_stream *outfs, void *out, - const struct base_stream *errfs, void *err) -{ - atf_process_child_t child; - atf_process_status_t status; - struct child_print_data cpd = { "msg" }; - - outfs->init(out); - errfs->init(err); - - RE(atf_process_fork(&child, child_print, outfs->m_sb_ptr, - errfs->m_sb_ptr, &cpd)); - if (outfs->process != NULL) - outfs->process(out, &child); - if (errfs->process != NULL) - errfs->process(err, &child); - RE(atf_process_child_wait(&child, &status)); - - outfs->fini(out); - errfs->fini(err); - - atf_process_status_fini(&status); -} - -/* --------------------------------------------------------------------- - * Test cases for the "stream" type. - * --------------------------------------------------------------------- */ - -ATF_TC(stream_init_capture); -ATF_TC_HEAD(stream_init_capture, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the " - "atf_process_stream_init_capture function"); -} -ATF_TC_BODY(stream_init_capture, tc) -{ - atf_process_stream_t sb; - - RE(atf_process_stream_init_capture(&sb)); - - ATF_CHECK_EQ(atf_process_stream_type(&sb), - atf_process_stream_type_capture); - - atf_process_stream_fini(&sb); -} - -ATF_TC(stream_init_connect); -ATF_TC_HEAD(stream_init_connect, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the " - "atf_process_stream_init_connect function"); -} -ATF_TC_BODY(stream_init_connect, tc) -{ - atf_process_stream_t sb; - - RE(atf_process_stream_init_connect(&sb, 1, 2)); - - ATF_CHECK_EQ(atf_process_stream_type(&sb), - atf_process_stream_type_connect); - - atf_process_stream_fini(&sb); -} - -ATF_TC(stream_init_inherit); -ATF_TC_HEAD(stream_init_inherit, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the " - "atf_process_stream_init_inherit function"); -} -ATF_TC_BODY(stream_init_inherit, tc) -{ - atf_process_stream_t sb; - - RE(atf_process_stream_init_inherit(&sb)); - - ATF_CHECK_EQ(atf_process_stream_type(&sb), - atf_process_stream_type_inherit); - - atf_process_stream_fini(&sb); -} - -ATF_TC(stream_init_redirect_fd); -ATF_TC_HEAD(stream_init_redirect_fd, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the " - "atf_process_stream_init_redirect_fd function"); -} -ATF_TC_BODY(stream_init_redirect_fd, tc) -{ - atf_process_stream_t sb; - - RE(atf_process_stream_init_redirect_fd(&sb, 1)); - - ATF_CHECK_EQ(atf_process_stream_type(&sb), - atf_process_stream_type_redirect_fd); - - atf_process_stream_fini(&sb); -} - -ATF_TC(stream_init_redirect_path); -ATF_TC_HEAD(stream_init_redirect_path, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the " - "atf_process_stream_init_redirect_path function"); -} -ATF_TC_BODY(stream_init_redirect_path, tc) -{ - atf_process_stream_t sb; - atf_fs_path_t path; - - RE(atf_fs_path_init_fmt(&path, "foo")); - RE(atf_process_stream_init_redirect_path(&sb, &path)); - - ATF_CHECK_EQ(atf_process_stream_type(&sb), - atf_process_stream_type_redirect_path); - - atf_process_stream_fini(&sb); - atf_fs_path_fini(&path); -} - -/* --------------------------------------------------------------------- - * Test cases for the "status" type. - * --------------------------------------------------------------------- */ - -static void child_exit_success(void) ATF_DEFS_ATTRIBUTE_NORETURN; -static void child_exit_failure(void) ATF_DEFS_ATTRIBUTE_NORETURN; -static void child_sigkill(void) ATF_DEFS_ATTRIBUTE_NORETURN; -static void child_sigquit(void) ATF_DEFS_ATTRIBUTE_NORETURN; -static void child_sigterm(void) ATF_DEFS_ATTRIBUTE_NORETURN; - -void -child_exit_success(void) -{ - exit(EXIT_SUCCESS); -} - -void -child_exit_failure(void) -{ - exit(EXIT_FAILURE); -} - -void -child_sigkill(void) -{ - kill(getpid(), SIGKILL); - abort(); -} - -void -child_sigquit(void) -{ - kill(getpid(), SIGQUIT); - abort(); -} - -void -child_sigterm(void) -{ - kill(getpid(), SIGTERM); - abort(); -} - -static -int -fork_and_wait_child(void (*child_func)(void)) -{ - pid_t pid; - int status; - - pid = fork(); - ATF_REQUIRE(pid != -1); - if (pid == 0) { - status = 0; /* Silence compiler warnings */ - child_func(); - UNREACHABLE; - } else { - ATF_REQUIRE(waitpid(pid, &status, 0) != 0); - } - - return status; -} - -ATF_TC(status_exited); -ATF_TC_HEAD(status_exited, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the status type for processes " - "that exit cleanly"); -} -ATF_TC_BODY(status_exited, tc) -{ - { - const int rawstatus = fork_and_wait_child(child_exit_success); - atf_process_status_t s; - RE(atf_process_status_init(&s, rawstatus)); - ATF_CHECK(atf_process_status_exited(&s)); - ATF_CHECK_EQ(atf_process_status_exitstatus(&s), EXIT_SUCCESS); - ATF_CHECK(!atf_process_status_signaled(&s)); - atf_process_status_fini(&s); - } - - { - const int rawstatus = fork_and_wait_child(child_exit_failure); - atf_process_status_t s; - RE(atf_process_status_init(&s, rawstatus)); - ATF_CHECK(atf_process_status_exited(&s)); - ATF_CHECK_EQ(atf_process_status_exitstatus(&s), EXIT_FAILURE); - ATF_CHECK(!atf_process_status_signaled(&s)); - atf_process_status_fini(&s); - } -} - -ATF_TC(status_signaled); -ATF_TC_HEAD(status_signaled, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the status type for processes " - "that end due to a signal"); -} -ATF_TC_BODY(status_signaled, tc) -{ - { - const int rawstatus = fork_and_wait_child(child_sigkill); - atf_process_status_t s; - RE(atf_process_status_init(&s, rawstatus)); - ATF_CHECK(!atf_process_status_exited(&s)); - ATF_CHECK(atf_process_status_signaled(&s)); - ATF_CHECK_EQ(atf_process_status_termsig(&s), SIGKILL); - ATF_CHECK(!atf_process_status_coredump(&s)); - atf_process_status_fini(&s); - } - - { - const int rawstatus = fork_and_wait_child(child_sigterm); - atf_process_status_t s; - RE(atf_process_status_init(&s, rawstatus)); - ATF_CHECK(!atf_process_status_exited(&s)); - ATF_CHECK(atf_process_status_signaled(&s)); - ATF_CHECK_EQ(atf_process_status_termsig(&s), SIGTERM); - ATF_CHECK(!atf_process_status_coredump(&s)); - atf_process_status_fini(&s); - } -} - -ATF_TC(status_coredump); -ATF_TC_HEAD(status_coredump, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the status type for processes " - "that crash"); -} -ATF_TC_BODY(status_coredump, tc) -{ - struct rlimit rl; - rl.rlim_cur = RLIM_INFINITY; - rl.rlim_max = RLIM_INFINITY; - if (setrlimit(RLIMIT_CORE, &rl) == -1) - atf_tc_skip("Cannot unlimit the core file size; check limits " - "manually"); - - const int rawstatus = fork_and_wait_child(child_sigquit); - atf_process_status_t s; - RE(atf_process_status_init(&s, rawstatus)); - ATF_CHECK(!atf_process_status_exited(&s)); - ATF_CHECK(atf_process_status_signaled(&s)); - ATF_CHECK_EQ(atf_process_status_termsig(&s), SIGQUIT); - ATF_CHECK(atf_process_status_coredump(&s)); - atf_process_status_fini(&s); -} - -/* --------------------------------------------------------------------- - * Test cases for the "child" type. - * --------------------------------------------------------------------- */ - -static void child_report_pid(void *) ATF_DEFS_ATTRIBUTE_NORETURN; - -static -void -child_report_pid(void *v) -{ - const pid_t pid = getpid(); - if (write(STDOUT_FILENO, &pid, sizeof(pid)) != sizeof(pid)) - abort(); - fprintf(stderr, "Reporting %d to parent\n", (int)getpid()); - exit(EXIT_SUCCESS); -} - -ATF_TC(child_pid); -ATF_TC_HEAD(child_pid, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the correctness of the pid " - "stored in the child type"); -} -ATF_TC_BODY(child_pid, tc) -{ - atf_process_stream_t outsb, errsb; - atf_process_child_t child; - atf_process_status_t status; - pid_t pid; - - RE(atf_process_stream_init_capture(&outsb)); - RE(atf_process_stream_init_inherit(&errsb)); - - RE(atf_process_fork(&child, child_report_pid, &outsb, &errsb, NULL)); - ATF_CHECK_EQ(read(atf_process_child_stdout(&child), &pid, sizeof(pid)), - sizeof(pid)); - printf("Expected PID: %d\n", (int)atf_process_child_pid(&child)); - printf("Actual PID: %d\n", (int)pid); - ATF_CHECK_EQ(atf_process_child_pid(&child), pid); - - RE(atf_process_child_wait(&child, &status)); - atf_process_status_fini(&status); - - atf_process_stream_fini(&outsb); - atf_process_stream_fini(&errsb); -} - -static -void -child_loop(void *v) -{ - for (;;) - sleep(1); -} - -static -void -nop_signal(int sig) -{ -} - -static -void -child_spawn_loop_and_wait_eintr(void *v) -{ - atf_process_child_t child; - atf_process_status_t status; - struct sigaction sighup, old_sighup; - -#define RE_ABORT(expr) \ - do { \ - atf_error_t _aux_err = expr; \ - if (atf_is_error(_aux_err)) { \ - atf_error_free(_aux_err); \ - abort(); \ - } \ - } while (0) - - { - atf_process_stream_t outsb, errsb; - - RE_ABORT(atf_process_stream_init_capture(&outsb)); - RE_ABORT(atf_process_stream_init_inherit(&errsb)); - RE_ABORT(atf_process_fork(&child, child_loop, &outsb, &errsb, NULL)); - atf_process_stream_fini(&outsb); - atf_process_stream_fini(&errsb); - } - - sighup.sa_handler = nop_signal; - sigemptyset(&sighup.sa_mask); - sighup.sa_flags = 0; - if (sigaction(SIGHUP, &sighup, &old_sighup) == -1) - abort(); - - printf("waiting\n"); - fflush(stdout); - - fprintf(stderr, "Child entering wait(2)\n"); - atf_error_t err = atf_process_child_wait(&child, &status); - fprintf(stderr, "Child's wait(2) terminated\n"); - if (!atf_is_error(err)) { - fprintf(stderr, "wait completed successfully (not interrupted)\n"); - abort(); - } - if (!atf_error_is(err, "libc")) { - fprintf(stderr, "wait did not raise libc_error\n"); - abort(); - } - if (atf_libc_error_code(err) != EINTR) { - fprintf(stderr, "libc_error is not EINTR\n"); - abort(); - } - atf_error_free(err); - - sigaction(SIGHUP, &old_sighup, NULL); - - fprintf(stderr, "Child is killing subchild\n"); - kill(atf_process_child_pid(&child), SIGTERM); - - RE_ABORT(atf_process_child_wait(&child, &status)); - atf_process_status_fini(&status); - -#undef RE_ABORT - - exit(EXIT_SUCCESS); -} - -ATF_TC(child_wait_eintr); -ATF_TC_HEAD(child_wait_eintr, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the interruption of the wait " - "method by an external signal, and the return of " - "an EINTR error"); - atf_tc_set_md_var(tc, "timeout", "30"); -} -ATF_TC_BODY(child_wait_eintr, tc) -{ - atf_process_child_t child; - atf_process_status_t status; - - { - atf_process_stream_t outsb, errsb; - - RE(atf_process_stream_init_capture(&outsb)); - RE(atf_process_stream_init_inherit(&errsb)); - RE(atf_process_fork(&child, child_spawn_loop_and_wait_eintr, - &outsb, &errsb, NULL)); - atf_process_stream_fini(&outsb); - atf_process_stream_fini(&errsb); - } - - { - /* Wait until the child process performs the wait call. This is - * racy, because the message we get from it is sent *before* - * doing the real system call... but I can't figure any other way - * to do this. */ - char buf[16]; - printf("Waiting for child to issue wait(2)\n"); - ATF_REQUIRE(read(atf_process_child_stdout(&child), buf, - sizeof(buf)) > 0); - sleep(1); - } - - printf("Interrupting child's wait(2) call\n"); - kill(atf_process_child_pid(&child), SIGHUP); - - printf("Waiting for child's completion\n"); - RE(atf_process_child_wait(&child, &status)); - ATF_REQUIRE(atf_process_status_exited(&status)); - ATF_REQUIRE_EQ(atf_process_status_exitstatus(&status), EXIT_SUCCESS); - atf_process_status_fini(&status); -} - -/* --------------------------------------------------------------------- - * Tests cases for the free functions. - * --------------------------------------------------------------------- */ - -static -void -do_exec(const atf_tc_t *tc, const char *helper_name, atf_process_status_t *s, - void (*prehook)(void)) -{ - atf_fs_path_t process_helpers; - const char *argv[3]; - - get_process_helpers_path(tc, true, &process_helpers); - - argv[0] = atf_fs_path_cstring(&process_helpers); - argv[1] = helper_name; - argv[2] = NULL; - printf("Executing %s %s\n", argv[0], argv[1]); - - RE(atf_process_exec_array(s, &process_helpers, argv, NULL, NULL, prehook)); - atf_fs_path_fini(&process_helpers); -} - -static -void -check_line(int fd, const char *exp) -{ - atf_dynstr_t line; - bool eof; - - atf_dynstr_init(&line); - eof = read_line(fd, &line); - ATF_CHECK(!eof); - ATF_CHECK_MSG(atf_equal_dynstr_cstring(&line, exp), - "read: '%s', expected: '%s'", - atf_dynstr_cstring(&line), exp); - atf_dynstr_fini(&line); -} - -ATF_TC(exec_failure); -ATF_TC_HEAD(exec_failure, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests execing a command"); -} -ATF_TC_BODY(exec_failure, tc) -{ - atf_process_status_t status; - - do_exec(tc, "exit-failure", &status, NULL); - ATF_CHECK(atf_process_status_exited(&status)); - ATF_CHECK_EQ(atf_process_status_exitstatus(&status), EXIT_FAILURE); - atf_process_status_fini(&status); -} - -ATF_TC(exec_list); -ATF_TC_HEAD(exec_list, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests execing a command"); -} -ATF_TC_BODY(exec_list, tc) -{ - atf_fs_path_t process_helpers; - atf_list_t argv; - atf_process_status_t status; - - RE(atf_list_init(&argv)); - - get_process_helpers_path(tc, true, &process_helpers); - atf_list_append(&argv, strdup(atf_fs_path_cstring(&process_helpers)), true); - atf_list_append(&argv, strdup("echo"), true); - atf_list_append(&argv, strdup("test-message"), true); - { - atf_fs_path_t outpath; - atf_process_stream_t outsb; - - RE(atf_fs_path_init_fmt(&outpath, "stdout")); - RE(atf_process_stream_init_redirect_path(&outsb, &outpath)); - RE(atf_process_exec_list(&status, &process_helpers, &argv, &outsb, - NULL, NULL)); - atf_process_stream_fini(&outsb); - atf_fs_path_fini(&outpath); - } - atf_list_fini(&argv); - - ATF_CHECK(atf_process_status_exited(&status)); - ATF_CHECK_EQ(atf_process_status_exitstatus(&status), EXIT_SUCCESS); - - { - int fd = open("stdout", O_RDONLY); - ATF_CHECK(fd != -1); - check_line(fd, "test-message"); - close(fd); - } - - atf_process_status_fini(&status); - atf_fs_path_fini(&process_helpers); -} - -static void -exit_early(void) -{ - exit(80); -} - -ATF_TC(exec_prehook); -ATF_TC_HEAD(exec_prehook, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests execing a command with a prehook"); -} -ATF_TC_BODY(exec_prehook, tc) -{ - atf_process_status_t status; - - do_exec(tc, "exit-success", &status, exit_early); - ATF_CHECK(atf_process_status_exited(&status)); - ATF_CHECK_EQ(atf_process_status_exitstatus(&status), 80); - atf_process_status_fini(&status); -} - -ATF_TC(exec_success); -ATF_TC_HEAD(exec_success, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests execing a command"); -} -ATF_TC_BODY(exec_success, tc) -{ - atf_process_status_t status; - - do_exec(tc, "exit-success", &status, NULL); - ATF_CHECK(atf_process_status_exited(&status)); - ATF_CHECK_EQ(atf_process_status_exitstatus(&status), EXIT_SUCCESS); - atf_process_status_fini(&status); -} - -static const int exit_v_null = 1; -static const int exit_v_notnull = 2; - -static -void -child_cookie(void *v) -{ - if (v == NULL) - exit(exit_v_null); - else - exit(exit_v_notnull); - - UNREACHABLE; -} - -ATF_TC(fork_cookie); -ATF_TC_HEAD(fork_cookie, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests forking a child, with " - "a null and non-null data cookie"); -} -ATF_TC_BODY(fork_cookie, tc) -{ - atf_process_stream_t outsb, errsb; - - RE(atf_process_stream_init_inherit(&outsb)); - RE(atf_process_stream_init_inherit(&errsb)); - - { - atf_process_child_t child; - atf_process_status_t status; - - RE(atf_process_fork(&child, child_cookie, &outsb, &errsb, NULL)); - RE(atf_process_child_wait(&child, &status)); - - ATF_CHECK(atf_process_status_exited(&status)); - ATF_CHECK_EQ(atf_process_status_exitstatus(&status), exit_v_null); - - atf_process_status_fini(&status); - } - - { - atf_process_child_t child; - atf_process_status_t status; - int dummy_int; - - RE(atf_process_fork(&child, child_cookie, &outsb, &errsb, &dummy_int)); - RE(atf_process_child_wait(&child, &status)); - - ATF_CHECK(atf_process_status_exited(&status)); - ATF_CHECK_EQ(atf_process_status_exitstatus(&status), exit_v_notnull); - - atf_process_status_fini(&status); - } - - atf_process_stream_fini(&errsb); - atf_process_stream_fini(&outsb); -} - -#define TC_FORK_STREAMS(outlc, outuc, errlc, erruc) \ - ATF_TC(fork_out_ ## outlc ## _err_ ## errlc); \ - ATF_TC_HEAD(fork_out_ ## outlc ## _err_ ## errlc, tc) \ - { \ - atf_tc_set_md_var(tc, "descr", "Tests forking a child, with " \ - "stdout " #outlc " and stderr " #errlc); \ - } \ - ATF_TC_BODY(fork_out_ ## outlc ## _err_ ## errlc, tc) \ - { \ - struct outlc ## _stream out = outuc ## _STREAM(stdout_type); \ - struct errlc ## _stream err = erruc ## _STREAM(stderr_type); \ - do_fork(&out.m_base, &out, &err.m_base, &err); \ - } - -TC_FORK_STREAMS(capture, CAPTURE, capture, CAPTURE); -TC_FORK_STREAMS(capture, CAPTURE, connect, CONNECT); -TC_FORK_STREAMS(capture, CAPTURE, default, DEFAULT); -TC_FORK_STREAMS(capture, CAPTURE, inherit, INHERIT); -TC_FORK_STREAMS(capture, CAPTURE, redirect_fd, REDIRECT_FD); -TC_FORK_STREAMS(capture, CAPTURE, redirect_path, REDIRECT_PATH); -TC_FORK_STREAMS(connect, CONNECT, capture, CAPTURE); -TC_FORK_STREAMS(connect, CONNECT, connect, CONNECT); -TC_FORK_STREAMS(connect, CONNECT, default, DEFAULT); -TC_FORK_STREAMS(connect, CONNECT, inherit, INHERIT); -TC_FORK_STREAMS(connect, CONNECT, redirect_fd, REDIRECT_FD); -TC_FORK_STREAMS(connect, CONNECT, redirect_path, REDIRECT_PATH); -TC_FORK_STREAMS(default, DEFAULT, capture, CAPTURE); -TC_FORK_STREAMS(default, DEFAULT, connect, CONNECT); -TC_FORK_STREAMS(default, DEFAULT, default, DEFAULT); -TC_FORK_STREAMS(default, DEFAULT, inherit, INHERIT); -TC_FORK_STREAMS(default, DEFAULT, redirect_fd, REDIRECT_FD); -TC_FORK_STREAMS(default, DEFAULT, redirect_path, REDIRECT_PATH); -TC_FORK_STREAMS(inherit, INHERIT, capture, CAPTURE); -TC_FORK_STREAMS(inherit, INHERIT, connect, CONNECT); -TC_FORK_STREAMS(inherit, INHERIT, default, DEFAULT); -TC_FORK_STREAMS(inherit, INHERIT, inherit, INHERIT); -TC_FORK_STREAMS(inherit, INHERIT, redirect_fd, REDIRECT_FD); -TC_FORK_STREAMS(inherit, INHERIT, redirect_path, REDIRECT_PATH); -TC_FORK_STREAMS(redirect_fd, REDIRECT_FD, capture, CAPTURE); -TC_FORK_STREAMS(redirect_fd, REDIRECT_FD, connect, CONNECT); -TC_FORK_STREAMS(redirect_fd, REDIRECT_FD, default, DEFAULT); -TC_FORK_STREAMS(redirect_fd, REDIRECT_FD, inherit, INHERIT); -TC_FORK_STREAMS(redirect_fd, REDIRECT_FD, redirect_fd, REDIRECT_FD); -TC_FORK_STREAMS(redirect_fd, REDIRECT_FD, redirect_path, REDIRECT_PATH); -TC_FORK_STREAMS(redirect_path, REDIRECT_PATH, capture, CAPTURE); -TC_FORK_STREAMS(redirect_path, REDIRECT_PATH, connect, CONNECT); -TC_FORK_STREAMS(redirect_path, REDIRECT_PATH, default, DEFAULT); -TC_FORK_STREAMS(redirect_path, REDIRECT_PATH, inherit, INHERIT); -TC_FORK_STREAMS(redirect_path, REDIRECT_PATH, redirect_fd, REDIRECT_FD); -TC_FORK_STREAMS(redirect_path, REDIRECT_PATH, redirect_path, REDIRECT_PATH); - -#undef TC_FORK_STREAMS - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Add the tests for the "stream" type. */ - ATF_TP_ADD_TC(tp, stream_init_capture); - ATF_TP_ADD_TC(tp, stream_init_connect); - ATF_TP_ADD_TC(tp, stream_init_inherit); - ATF_TP_ADD_TC(tp, stream_init_redirect_fd); - ATF_TP_ADD_TC(tp, stream_init_redirect_path); - - /* Add the tests for the "status" type. */ - ATF_TP_ADD_TC(tp, status_exited); - ATF_TP_ADD_TC(tp, status_signaled); - ATF_TP_ADD_TC(tp, status_coredump); - - /* Add the tests for the "child" type. */ - ATF_TP_ADD_TC(tp, child_pid); - ATF_TP_ADD_TC(tp, child_wait_eintr); - - /* Add the tests for the free functions. */ - ATF_TP_ADD_TC(tp, exec_failure); - ATF_TP_ADD_TC(tp, exec_list); - ATF_TP_ADD_TC(tp, exec_prehook); - ATF_TP_ADD_TC(tp, exec_success); - ATF_TP_ADD_TC(tp, fork_cookie); - ATF_TP_ADD_TC(tp, fork_out_capture_err_capture); - ATF_TP_ADD_TC(tp, fork_out_capture_err_connect); - ATF_TP_ADD_TC(tp, fork_out_capture_err_default); - ATF_TP_ADD_TC(tp, fork_out_capture_err_inherit); - ATF_TP_ADD_TC(tp, fork_out_capture_err_redirect_fd); - ATF_TP_ADD_TC(tp, fork_out_capture_err_redirect_path); - ATF_TP_ADD_TC(tp, fork_out_connect_err_capture); - ATF_TP_ADD_TC(tp, fork_out_connect_err_connect); - ATF_TP_ADD_TC(tp, fork_out_connect_err_default); - ATF_TP_ADD_TC(tp, fork_out_connect_err_inherit); - ATF_TP_ADD_TC(tp, fork_out_connect_err_redirect_fd); - ATF_TP_ADD_TC(tp, fork_out_connect_err_redirect_path); - ATF_TP_ADD_TC(tp, fork_out_default_err_capture); - ATF_TP_ADD_TC(tp, fork_out_default_err_connect); - ATF_TP_ADD_TC(tp, fork_out_default_err_default); - ATF_TP_ADD_TC(tp, fork_out_default_err_inherit); - ATF_TP_ADD_TC(tp, fork_out_default_err_redirect_fd); - ATF_TP_ADD_TC(tp, fork_out_default_err_redirect_path); - ATF_TP_ADD_TC(tp, fork_out_inherit_err_capture); - ATF_TP_ADD_TC(tp, fork_out_inherit_err_connect); - ATF_TP_ADD_TC(tp, fork_out_inherit_err_default); - ATF_TP_ADD_TC(tp, fork_out_inherit_err_inherit); - ATF_TP_ADD_TC(tp, fork_out_inherit_err_redirect_fd); - ATF_TP_ADD_TC(tp, fork_out_inherit_err_redirect_path); - ATF_TP_ADD_TC(tp, fork_out_redirect_fd_err_capture); - ATF_TP_ADD_TC(tp, fork_out_redirect_fd_err_connect); - ATF_TP_ADD_TC(tp, fork_out_redirect_fd_err_default); - ATF_TP_ADD_TC(tp, fork_out_redirect_fd_err_inherit); - ATF_TP_ADD_TC(tp, fork_out_redirect_fd_err_redirect_fd); - ATF_TP_ADD_TC(tp, fork_out_redirect_fd_err_redirect_path); - ATF_TP_ADD_TC(tp, fork_out_redirect_path_err_capture); - ATF_TP_ADD_TC(tp, fork_out_redirect_path_err_connect); - ATF_TP_ADD_TC(tp, fork_out_redirect_path_err_default); - ATF_TP_ADD_TC(tp, fork_out_redirect_path_err_inherit); - ATF_TP_ADD_TC(tp, fork_out_redirect_path_err_redirect_fd); - ATF_TP_ADD_TC(tp, fork_out_redirect_path_err_redirect_path); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/env.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/env.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/env.c (nonexistent) @@ -1,108 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -#include -#include - -#include "atf-c/error.h" - -#include "env.h" -#include "sanity.h" -#include "text.h" - -const char * -atf_env_get(const char *name) -{ - const char* val = getenv(name); - PRE(val != NULL); - return val; -} - -bool -atf_env_has(const char *name) -{ - return getenv(name) != NULL; -} - -atf_error_t -atf_env_set(const char *name, const char *val) -{ - atf_error_t err; - -#if defined(HAVE_SETENV) - if (setenv(name, val, 1) == -1) - err = atf_libc_error(errno, "Cannot set environment variable " - "'%s' to '%s'", name, val); - else - err = atf_no_error(); -#elif defined(HAVE_PUTENV) - char *buf; - - err = atf_text_format(&buf, "%s=%s", name, val); - if (!atf_is_error(err)) { - if (putenv(buf) == -1) - err = atf_libc_error(errno, "Cannot set environment variable " - "'%s' to '%s'", name, val); - free(buf); - } -#else -# error "Don't know how to set an environment variable." -#endif - - return err; -} - -atf_error_t -atf_env_unset(const char *name) -{ - atf_error_t err; - -#if defined(HAVE_UNSETENV) - unsetenv(name); - err = atf_no_error(); -#elif defined(HAVE_PUTENV) - char *buf; - - err = atf_text_format(&buf, "%s=", name); - if (!atf_is_error(err)) { - if (putenv(buf) == -1) - err = atf_libc_error(errno, "Cannot unset environment variable" - " '%s'", name); - free(buf); - } -#else -# error "Don't know how to unset an environment variable." -#endif - - return err; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/process_helpers.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/process_helpers.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/process_helpers.c (nonexistent) @@ -1,117 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. - * 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 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 - -#include /* NO_CHECK_STYLE */ -#include -#include -#include -#include -#include - -static -int -h_echo(const char *msg) -{ - printf("%s\n", msg); - return EXIT_SUCCESS; -} - -static -int -h_exit_failure(void) -{ - return EXIT_FAILURE; -} - -static -int -h_exit_signal(void) -{ - kill(getpid(), SIGKILL); - assert(0); /* NO_CHECK_STYLE */ - return EXIT_FAILURE; -} - -static -int -h_exit_success(void) -{ - return EXIT_SUCCESS; -} - -static -int -h_stdout_stderr(const char *id) -{ - fprintf(stdout, "Line 1 to stdout for %s\n", id); - fprintf(stdout, "Line 2 to stdout for %s\n", id); - fprintf(stderr, "Line 1 to stderr for %s\n", id); - fprintf(stderr, "Line 2 to stderr for %s\n", id); - - return EXIT_SUCCESS; -} - -static -void -check_args(const int argc, const char *const argv[], const int required) -{ - if (argc < required) { - fprintf(stderr, "Usage: %s helper-name [args]\n", argv[0]); - exit(EXIT_FAILURE); - } -} - -int -main(int argc, const char *const argv[]) -{ - int exitcode; - - check_args(argc, argv, 2); - - if (strcmp(argv[1], "echo") == 0) { - check_args(argc, argv, 3); - exitcode = h_echo(argv[2]); - } else if (strcmp(argv[1], "exit-failure") == 0) - exitcode = h_exit_failure(); - else if (strcmp(argv[1], "exit-signal") == 0) - exitcode = h_exit_signal(); - else if (strcmp(argv[1], "exit-success") == 0) - exitcode = h_exit_success(); - else if (strcmp(argv[1], "stdout-stderr") == 0) { - check_args(argc, argv, 3); - exitcode = h_stdout_stderr(argv[2]); - } else { - fprintf(stderr, "%s: Unknown helper %s\n", argv[0], argv[1]); - exitcode = EXIT_FAILURE; - } - - return exitcode; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/text.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/text.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/text.h (nonexistent) @@ -1,49 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_TEXT_H) -#define ATF_C_TEXT_H - -#include -#include - -#include - -#include "list.h" - -atf_error_t atf_text_for_each_word(const char *, const char *, - atf_error_t (*)(const char *, void *), - void *); -atf_error_t atf_text_format(char **, const char *, ...); -atf_error_t atf_text_format_ap(char **, const char *, va_list); -atf_error_t atf_text_split(const char *, const char *, atf_list_t *); -atf_error_t atf_text_to_bool(const char *, bool *); -atf_error_t atf_text_to_long(const char *, long *); - -#endif /* ATF_C_TEXT_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/process.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/process.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/process.c (nonexistent) @@ -1,674 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008, 2009, 2010, 2011 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include -#include -#include -#include -#include -#include - -#include "atf-c/defs.h" -#include "atf-c/error.h" - -#include "process.h" -#include "sanity.h" - -/* This prototype is not in the header file because this is a private - * function; however, we need to access it during testing. */ -atf_error_t atf_process_status_init(atf_process_status_t *, int); - -/* --------------------------------------------------------------------- - * The "stream_prepare" auxiliary type. - * --------------------------------------------------------------------- */ - -struct stream_prepare { - const atf_process_stream_t *m_sb; - - bool m_pipefds_ok; - int m_pipefds[2]; -}; -typedef struct stream_prepare stream_prepare_t; - -static -atf_error_t -stream_prepare_init(stream_prepare_t *sp, const atf_process_stream_t *sb) -{ - atf_error_t err; - - const int type = atf_process_stream_type(sb); - - sp->m_sb = sb; - sp->m_pipefds_ok = false; - - if (type == atf_process_stream_type_capture) { - if (pipe(sp->m_pipefds) == -1) - err = atf_libc_error(errno, "Failed to create pipe"); - else { - err = atf_no_error(); - sp->m_pipefds_ok = true; - } - } else - err = atf_no_error(); - - return err; -} - -static -void -stream_prepare_fini(stream_prepare_t *sp) -{ - if (sp->m_pipefds_ok) { - close(sp->m_pipefds[0]); - close(sp->m_pipefds[1]); - } -} - -/* --------------------------------------------------------------------- - * The "atf_process_stream" type. - * --------------------------------------------------------------------- */ - -const int atf_process_stream_type_capture = 1; -const int atf_process_stream_type_connect = 2; -const int atf_process_stream_type_inherit = 3; -const int atf_process_stream_type_redirect_fd = 4; -const int atf_process_stream_type_redirect_path = 5; - -static -bool -stream_is_valid(const atf_process_stream_t *sb) -{ - return (sb->m_type == atf_process_stream_type_capture) || - (sb->m_type == atf_process_stream_type_connect) || - (sb->m_type == atf_process_stream_type_inherit) || - (sb->m_type == atf_process_stream_type_redirect_fd) || - (sb->m_type == atf_process_stream_type_redirect_path); -} - -atf_error_t -atf_process_stream_init_capture(atf_process_stream_t *sb) -{ - sb->m_type = atf_process_stream_type_capture; - - POST(stream_is_valid(sb)); - return atf_no_error(); -} - -atf_error_t -atf_process_stream_init_connect(atf_process_stream_t *sb, - const int src_fd, const int tgt_fd) -{ - PRE(src_fd >= 0); - PRE(tgt_fd >= 0); - PRE(src_fd != tgt_fd); - - sb->m_type = atf_process_stream_type_connect; - sb->m_src_fd = src_fd; - sb->m_tgt_fd = tgt_fd; - - POST(stream_is_valid(sb)); - return atf_no_error(); -} - -atf_error_t -atf_process_stream_init_inherit(atf_process_stream_t *sb) -{ - sb->m_type = atf_process_stream_type_inherit; - - POST(stream_is_valid(sb)); - return atf_no_error(); -} - -atf_error_t -atf_process_stream_init_redirect_fd(atf_process_stream_t *sb, - const int fd) -{ - sb->m_type = atf_process_stream_type_redirect_fd; - sb->m_fd = fd; - - POST(stream_is_valid(sb)); - return atf_no_error(); -} - -atf_error_t -atf_process_stream_init_redirect_path(atf_process_stream_t *sb, - const atf_fs_path_t *path) -{ - sb->m_type = atf_process_stream_type_redirect_path; - sb->m_path = path; - - POST(stream_is_valid(sb)); - return atf_no_error(); -} - -void -atf_process_stream_fini(atf_process_stream_t *sb) -{ - PRE(stream_is_valid(sb)); -} - -int -atf_process_stream_type(const atf_process_stream_t *sb) -{ - PRE(stream_is_valid(sb)); - - return sb->m_type; -} - -/* --------------------------------------------------------------------- - * The "atf_process_status" type. - * --------------------------------------------------------------------- */ - -atf_error_t -atf_process_status_init(atf_process_status_t *s, int status) -{ - s->m_status = status; - - return atf_no_error(); -} - -void -atf_process_status_fini(atf_process_status_t *s) -{ -} - -bool -atf_process_status_exited(const atf_process_status_t *s) -{ - int mutable_status = s->m_status; - return WIFEXITED(mutable_status); -} - -int -atf_process_status_exitstatus(const atf_process_status_t *s) -{ - PRE(atf_process_status_exited(s)); - int mutable_status = s->m_status; - return WEXITSTATUS(mutable_status); -} - -bool -atf_process_status_signaled(const atf_process_status_t *s) -{ - int mutable_status = s->m_status; - return WIFSIGNALED(mutable_status); -} - -int -atf_process_status_termsig(const atf_process_status_t *s) -{ - PRE(atf_process_status_signaled(s)); - int mutable_status = s->m_status; - return WTERMSIG(mutable_status); -} - -bool -atf_process_status_coredump(const atf_process_status_t *s) -{ - PRE(atf_process_status_signaled(s)); -#if defined(WCOREDUMP) - int mutable_status = s->m_status; - return WCOREDUMP(mutable_status); -#else - return false; -#endif -} - -/* --------------------------------------------------------------------- - * The "atf_process_child" type. - * --------------------------------------------------------------------- */ - -static -atf_error_t -atf_process_child_init(atf_process_child_t *c) -{ - c->m_pid = 0; - c->m_stdout = -1; - c->m_stderr = -1; - - return atf_no_error(); -} - -static -void -atf_process_child_fini(atf_process_child_t *c) -{ - if (c->m_stdout != -1) - close(c->m_stdout); - if (c->m_stderr != -1) - close(c->m_stderr); -} - -atf_error_t -atf_process_child_wait(atf_process_child_t *c, atf_process_status_t *s) -{ - atf_error_t err; - int status; - - if (waitpid(c->m_pid, &status, 0) == -1) - err = atf_libc_error(errno, "Failed waiting for process %d", - c->m_pid); - else { - atf_process_child_fini(c); - err = atf_process_status_init(s, status); - } - - return err; -} - -pid_t -atf_process_child_pid(const atf_process_child_t *c) -{ - return c->m_pid; -} - -int -atf_process_child_stdout(atf_process_child_t *c) -{ - PRE(c->m_stdout != -1); - return c->m_stdout; -} - -int -atf_process_child_stderr(atf_process_child_t *c) -{ - PRE(c->m_stderr != -1); - return c->m_stderr; -} - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -static -atf_error_t -safe_dup(const int oldfd, const int newfd) -{ - atf_error_t err; - - if (oldfd != newfd) { - if (dup2(oldfd, newfd) == -1) { - err = atf_libc_error(errno, "Could not allocate file descriptor"); - } else { - close(oldfd); - err = atf_no_error(); - } - } else - err = atf_no_error(); - - return err; -} - -static -atf_error_t -child_connect(const stream_prepare_t *sp, int procfd) -{ - atf_error_t err; - const int type = atf_process_stream_type(sp->m_sb); - - if (type == atf_process_stream_type_capture) { - close(sp->m_pipefds[0]); - err = safe_dup(sp->m_pipefds[1], procfd); - } else if (type == atf_process_stream_type_connect) { - if (dup2(sp->m_sb->m_tgt_fd, sp->m_sb->m_src_fd) == -1) - err = atf_libc_error(errno, "Cannot connect descriptor %d to %d", - sp->m_sb->m_tgt_fd, sp->m_sb->m_src_fd); - else - err = atf_no_error(); - } else if (type == atf_process_stream_type_inherit) { - err = atf_no_error(); - } else if (type == atf_process_stream_type_redirect_fd) { - err = safe_dup(sp->m_sb->m_fd, procfd); - } else if (type == atf_process_stream_type_redirect_path) { - int aux = open(atf_fs_path_cstring(sp->m_sb->m_path), - O_WRONLY | O_CREAT | O_TRUNC, 0644); - if (aux == -1) - err = atf_libc_error(errno, "Could not create %s", - atf_fs_path_cstring(sp->m_sb->m_path)); - else { - err = safe_dup(aux, procfd); - if (atf_is_error(err)) - close(aux); - } - } else { - UNREACHABLE; - err = atf_no_error(); - } - - return err; -} - -static -void -parent_connect(const stream_prepare_t *sp, int *fd) -{ - const int type = atf_process_stream_type(sp->m_sb); - - if (type == atf_process_stream_type_capture) { - close(sp->m_pipefds[1]); - *fd = sp->m_pipefds[0]; - } else if (type == atf_process_stream_type_connect) { - /* Do nothing. */ - } else if (type == atf_process_stream_type_inherit) { - /* Do nothing. */ - } else if (type == atf_process_stream_type_redirect_fd) { - /* Do nothing. */ - } else if (type == atf_process_stream_type_redirect_path) { - /* Do nothing. */ - } else { - UNREACHABLE; - } -} - -static -atf_error_t -do_parent(atf_process_child_t *c, - const pid_t pid, - const stream_prepare_t *outsp, - const stream_prepare_t *errsp) -{ - atf_error_t err; - - err = atf_process_child_init(c); - if (atf_is_error(err)) - goto out; - - c->m_pid = pid; - - parent_connect(outsp, &c->m_stdout); - parent_connect(errsp, &c->m_stderr); - -out: - return err; -} - -static -void -do_child(void (*)(void *), - void *, - const stream_prepare_t *, - const stream_prepare_t *) ATF_DEFS_ATTRIBUTE_NORETURN; - -static -void -do_child(void (*start)(void *), - void *v, - const stream_prepare_t *outsp, - const stream_prepare_t *errsp) -{ - atf_error_t err; - - err = child_connect(outsp, STDOUT_FILENO); - if (atf_is_error(err)) - goto out; - - err = child_connect(errsp, STDERR_FILENO); - if (atf_is_error(err)) - goto out; - - start(v); - UNREACHABLE; - -out: - if (atf_is_error(err)) { - char buf[1024]; - - atf_error_format(err, buf, sizeof(buf)); - fprintf(stderr, "Unhandled error: %s\n", buf); - atf_error_free(err); - - exit(EXIT_FAILURE); - } else - exit(EXIT_SUCCESS); -} - -static -atf_error_t -fork_with_streams(atf_process_child_t *c, - void (*start)(void *), - const atf_process_stream_t *outsb, - const atf_process_stream_t *errsb, - void *v) -{ - atf_error_t err; - stream_prepare_t outsp; - stream_prepare_t errsp; - pid_t pid; - - err = stream_prepare_init(&outsp, outsb); - if (atf_is_error(err)) - goto out; - - err = stream_prepare_init(&errsp, errsb); - if (atf_is_error(err)) - goto err_outpipe; - - pid = fork(); - if (pid == -1) { - err = atf_libc_error(errno, "Failed to fork"); - goto err_errpipe; - } - - if (pid == 0) { - do_child(start, v, &outsp, &errsp); - UNREACHABLE; - abort(); - err = atf_no_error(); - } else { - err = do_parent(c, pid, &outsp, &errsp); - if (atf_is_error(err)) - goto err_errpipe; - } - - goto out; - -err_errpipe: - stream_prepare_fini(&errsp); -err_outpipe: - stream_prepare_fini(&outsp); - -out: - return err; -} - -static -atf_error_t -init_stream_w_default(const atf_process_stream_t *usersb, - atf_process_stream_t *inheritsb, - const atf_process_stream_t **realsb) -{ - atf_error_t err; - - if (usersb == NULL) { - err = atf_process_stream_init_inherit(inheritsb); - if (!atf_is_error(err)) - *realsb = inheritsb; - } else { - err = atf_no_error(); - *realsb = usersb; - } - - return err; -} - -atf_error_t -atf_process_fork(atf_process_child_t *c, - void (*start)(void *), - const atf_process_stream_t *outsb, - const atf_process_stream_t *errsb, - void *v) -{ - atf_error_t err; - atf_process_stream_t inherit_outsb, inherit_errsb; - const atf_process_stream_t *real_outsb, *real_errsb; - - real_outsb = NULL; /* Shut up GCC warning. */ - err = init_stream_w_default(outsb, &inherit_outsb, &real_outsb); - if (atf_is_error(err)) - goto out; - - real_errsb = NULL; /* Shut up GCC warning. */ - err = init_stream_w_default(errsb, &inherit_errsb, &real_errsb); - if (atf_is_error(err)) - goto out_out; - - err = fork_with_streams(c, start, real_outsb, real_errsb, v); - - if (errsb == NULL) - atf_process_stream_fini(&inherit_errsb); -out_out: - if (outsb == NULL) - atf_process_stream_fini(&inherit_outsb); -out: - return err; -} - -static -int -const_execvp(const char *file, const char *const *argv) -{ -#define UNCONST(a) ((void *)(unsigned long)(const void *)(a)) - return execvp(file, UNCONST(argv)); -#undef UNCONST -} - -static -atf_error_t -list_to_array(const atf_list_t *l, const char ***ap) -{ - atf_error_t err; - const char **a; - - a = (const char **)malloc((atf_list_size(l) + 1) * sizeof(const char *)); - if (a == NULL) - err = atf_no_memory_error(); - else { - const char **aiter; - atf_list_citer_t liter; - - aiter = a; - atf_list_for_each_c(liter, l) { - *aiter = (const char *)atf_list_citer_data(liter); - aiter++; - } - *aiter = NULL; - - err = atf_no_error(); - *ap = a; - } - - return err; -} - -struct exec_args { - const atf_fs_path_t *m_prog; - const char *const *m_argv; - void (*m_prehook)(void); -}; - -static -void -do_exec(void *v) -{ - struct exec_args *ea = v; - - if (ea->m_prehook != NULL) - ea->m_prehook(); - - const int ret = const_execvp(atf_fs_path_cstring(ea->m_prog), ea->m_argv); - const int errnocopy = errno; - INV(ret == -1); - fprintf(stderr, "exec(%s) failed: %s\n", - atf_fs_path_cstring(ea->m_prog), strerror(errnocopy)); - exit(EXIT_FAILURE); -} - -atf_error_t -atf_process_exec_array(atf_process_status_t *s, - const atf_fs_path_t *prog, - const char *const *argv, - const atf_process_stream_t *outsb, - const atf_process_stream_t *errsb, - void (*prehook)(void)) -{ - atf_error_t err; - atf_process_child_t c; - struct exec_args ea = { prog, argv, prehook }; - - PRE(outsb == NULL || - atf_process_stream_type(outsb) != atf_process_stream_type_capture); - PRE(errsb == NULL || - atf_process_stream_type(errsb) != atf_process_stream_type_capture); - - err = atf_process_fork(&c, do_exec, outsb, errsb, &ea); - if (atf_is_error(err)) - goto out; - -again: - err = atf_process_child_wait(&c, s); - if (atf_is_error(err)) { - INV(atf_error_is(err, "libc") && atf_libc_error_code(err) == EINTR); - atf_error_free(err); - goto again; - } - -out: - return err; -} - -atf_error_t -atf_process_exec_list(atf_process_status_t *s, - const atf_fs_path_t *prog, - const atf_list_t *argv, - const atf_process_stream_t *outsb, - const atf_process_stream_t *errsb, - void (*prehook)(void)) -{ - atf_error_t err; - const char **argv2; - - PRE(outsb == NULL || - atf_process_stream_type(outsb) != atf_process_stream_type_capture); - PRE(errsb == NULL || - atf_process_stream_type(errsb) != atf_process_stream_type_capture); - - argv2 = NULL; /* Silence GCC warning. */ - err = list_to_array(argv, &argv2); - if (atf_is_error(err)) - goto out; - - err = atf_process_exec_array(s, prog, argv2, outsb, errsb, prehook); - - free(argv2); -out: - return err; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/env.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/env.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/env.h (nonexistent) @@ -1,42 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_ENV_H) -#define ATF_C_ENV_H - -#include - -#include - -const char *atf_env_get(const char *); -bool atf_env_has(const char *); -atf_error_t atf_env_set(const char *, const char *); -atf_error_t atf_env_unset(const char *); - -#endif /* !defined(ATF_C_ENV_H) */ Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/process.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/process.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/process.h (nonexistent) @@ -1,136 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010, 2011 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_PROCESS_H) -#define ATF_C_PROCESS_H - -#include - -#include - -#include - -#include "fs.h" -#include "list.h" - -/* --------------------------------------------------------------------- - * The "atf_process_stream" type. - * --------------------------------------------------------------------- */ - -struct atf_process_stream { - int m_type; - - /* Valid if m_type == connect. */ - int m_src_fd; - int m_tgt_fd; - - /* Valid if m_type == redirect_fd. */ - int m_fd; - - /* Valid if m_type == redirect_path. */ - const atf_fs_path_t *m_path; -}; -typedef struct atf_process_stream atf_process_stream_t; - -extern const int atf_process_stream_type_capture; -extern const int atf_process_stream_type_connect; -extern const int atf_process_stream_type_inherit; -extern const int atf_process_stream_type_redirect_fd; -extern const int atf_process_stream_type_redirect_path; - -atf_error_t atf_process_stream_init_capture(atf_process_stream_t *); -atf_error_t atf_process_stream_init_connect(atf_process_stream_t *, - const int, const int); -atf_error_t atf_process_stream_init_inherit(atf_process_stream_t *); -atf_error_t atf_process_stream_init_redirect_fd(atf_process_stream_t *, - const int fd); -atf_error_t atf_process_stream_init_redirect_path(atf_process_stream_t *, - const atf_fs_path_t *); -void atf_process_stream_fini(atf_process_stream_t *); - -int atf_process_stream_type(const atf_process_stream_t *); - -/* --------------------------------------------------------------------- - * The "atf_process_status" type. - * --------------------------------------------------------------------- */ - -struct atf_process_status { - int m_status; -}; -typedef struct atf_process_status atf_process_status_t; - -void atf_process_status_fini(atf_process_status_t *); - -bool atf_process_status_exited(const atf_process_status_t *); -int atf_process_status_exitstatus(const atf_process_status_t *); -bool atf_process_status_signaled(const atf_process_status_t *); -int atf_process_status_termsig(const atf_process_status_t *); -bool atf_process_status_coredump(const atf_process_status_t *); - -/* --------------------------------------------------------------------- - * The "atf_process_child" type. - * --------------------------------------------------------------------- */ - -struct atf_process_child { - pid_t m_pid; - - int m_stdout; - int m_stderr; -}; -typedef struct atf_process_child atf_process_child_t; - -atf_error_t atf_process_child_wait(atf_process_child_t *, - atf_process_status_t *); -pid_t atf_process_child_pid(const atf_process_child_t *); -int atf_process_child_stdout(atf_process_child_t *); -int atf_process_child_stderr(atf_process_child_t *); - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -atf_error_t atf_process_fork(atf_process_child_t *, - void (*)(void *), - const atf_process_stream_t *, - const atf_process_stream_t *, - void *); -atf_error_t atf_process_exec_array(atf_process_status_t *, - const atf_fs_path_t *, - const char *const *, - const atf_process_stream_t *, - const atf_process_stream_t *, - void (*)(void)); -atf_error_t atf_process_exec_list(atf_process_status_t *, - const atf_fs_path_t *, - const atf_list_t *, - const atf_process_stream_t *, - const atf_process_stream_t *, - void (*)(void)); - -#endif /* !defined(ATF_C_PROCESS_H) */ Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/sanity_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/sanity_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/sanity_test.c (nonexistent) @@ -1,253 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include "dynstr.h" -#include "process.h" -#include "sanity.h" -#include "test_helpers.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -enum type { inv, pre, post, unreachable }; - -static -bool -grep(const atf_dynstr_t *line, const char *text) -{ - const char *l = atf_dynstr_cstring(line); - bool found; - - found = false; - - if (strstr(l, text) != NULL) - found = true; - - return found; -} - -struct test_data { - enum type m_type; - bool m_cond; -}; - -static void do_test_child(void *) ATF_DEFS_ATTRIBUTE_NORETURN; - -static -void -do_test_child(void *v) -{ - struct test_data *td = v; - - switch (td->m_type) { - case inv: - INV(td->m_cond); - break; - - case pre: - PRE(td->m_cond); - break; - - case post: - POST(td->m_cond); - break; - - case unreachable: - if (!td->m_cond) - UNREACHABLE; - break; - } - - exit(EXIT_SUCCESS); -} - -static -void -do_test(enum type t, bool cond) -{ - atf_process_child_t child; - atf_process_status_t status; - bool eof; - int nlines; - atf_dynstr_t lines[3]; - - { - atf_process_stream_t outsb, errsb; - struct test_data td = { t, cond }; - - RE(atf_process_stream_init_inherit(&outsb)); - RE(atf_process_stream_init_capture(&errsb)); - RE(atf_process_fork(&child, do_test_child, &outsb, &errsb, &td)); - atf_process_stream_fini(&errsb); - atf_process_stream_fini(&outsb); - } - - nlines = 0; - eof = false; - do { - RE(atf_dynstr_init(&lines[nlines])); - if (!eof) - eof = read_line(atf_process_child_stderr(&child), &lines[nlines]); - nlines++; - } while (nlines < 3); - ATF_REQUIRE(nlines == 0 || nlines == 3); - - RE(atf_process_child_wait(&child, &status)); - if (!cond) { - ATF_REQUIRE(atf_process_status_signaled(&status)); - ATF_REQUIRE(atf_process_status_termsig(&status) == SIGABRT); - } else { - ATF_REQUIRE(atf_process_status_exited(&status)); - ATF_REQUIRE(atf_process_status_exitstatus(&status) == EXIT_SUCCESS); - } - atf_process_status_fini(&status); - - if (!cond) { - switch (t) { - case inv: - ATF_REQUIRE(grep(&lines[0], "Invariant")); - break; - - case pre: - ATF_REQUIRE(grep(&lines[0], "Precondition")); - break; - - case post: - ATF_REQUIRE(grep(&lines[0], "Postcondition")); - break; - - case unreachable: - ATF_REQUIRE(grep(&lines[0], "Invariant")); - break; - } - - ATF_REQUIRE(grep(&lines[0], __FILE__)); - ATF_REQUIRE(grep(&lines[2], PACKAGE_BUGREPORT)); - } - - while (nlines > 0) { - nlines--; - atf_dynstr_fini(&lines[nlines]); - } -} - -static -void -require_ndebug(void) -{ -#if defined(NDEBUG) - atf_tc_skip("Sanity checks not available; code built with -DNDEBUG"); -#endif -} - -/* --------------------------------------------------------------------- - * Test cases for the free functions. - * --------------------------------------------------------------------- */ - -ATF_TC(inv); -ATF_TC_HEAD(inv, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the INV macro"); -} -ATF_TC_BODY(inv, tc) -{ - require_ndebug(); - - do_test(inv, false); - do_test(inv, true); -} - -ATF_TC(pre); -ATF_TC_HEAD(pre, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the PRE macro"); -} -ATF_TC_BODY(pre, tc) -{ - require_ndebug(); - - do_test(pre, false); - do_test(pre, true); -} - -ATF_TC(post); -ATF_TC_HEAD(post, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the POST macro"); -} -ATF_TC_BODY(post, tc) -{ - require_ndebug(); - - do_test(post, false); - do_test(post, true); -} - -ATF_TC(unreachable); -ATF_TC_HEAD(unreachable, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the UNREACHABLE macro"); -} -ATF_TC_BODY(unreachable, tc) -{ - require_ndebug(); - - do_test(unreachable, false); - do_test(unreachable, true); -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, inv); - ATF_TP_ADD_TC(tp, pre); - ATF_TP_ADD_TC(tp, post); - ATF_TP_ADD_TC(tp, unreachable); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/fs_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/fs_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/fs_test.c (nonexistent) @@ -1,1082 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include "fs.h" -#include "test_helpers.h" -#include "user.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -void -create_dir(const char *p, int mode) -{ - int ret; - - ret = mkdir(p, mode); - if (ret == -1) - atf_tc_fail("Could not create helper directory %s", p); -} - -static -void -create_file(const char *p, int mode) -{ - int fd; - - fd = open(p, O_CREAT | O_WRONLY | O_TRUNC, mode); - if (fd == -1) - atf_tc_fail("Could not create helper file %s", p); - close(fd); -} - -static -bool -exists(const atf_fs_path_t *p) -{ - return access(atf_fs_path_cstring(p), F_OK) == 0; -} - -static -atf_error_t -mkstemp_discard_fd(atf_fs_path_t *p) -{ - int fd; - atf_error_t err = atf_fs_mkstemp(p, &fd); - if (!atf_is_error(err)) - close(fd); - return err; -} - -/* --------------------------------------------------------------------- - * Test cases for the "atf_fs_path" type. - * --------------------------------------------------------------------- */ - -ATF_TC(path_normalize); -ATF_TC_HEAD(path_normalize, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the path's normalization"); -} -ATF_TC_BODY(path_normalize, tc) -{ - struct test { - const char *in; - const char *out; - } tests[] = { - { ".", ".", }, - { "..", "..", }, - - { "/", "/", }, - { "//", "/", }, /* NO_CHECK_STYLE */ - { "///", "/", }, /* NO_CHECK_STYLE */ - - { "foo", "foo", }, - { "foo/", "foo", }, - { "foo/bar", "foo/bar", }, - { "foo/bar/", "foo/bar", }, - - { "/foo", "/foo", }, - { "/foo/bar", "/foo/bar", }, - { "/foo/bar/", "/foo/bar", }, - - { "///foo", "/foo", }, /* NO_CHECK_STYLE */ - { "///foo///bar", "/foo/bar", }, /* NO_CHECK_STYLE */ - { "///foo///bar///", "/foo/bar", }, /* NO_CHECK_STYLE */ - - { NULL, NULL } - }; - struct test *t; - - for (t = &tests[0]; t->in != NULL; t++) { - atf_fs_path_t p; - - printf("Input : >%s<\n", t->in); - printf("Expected output: >%s<\n", t->out); - - RE(atf_fs_path_init_fmt(&p, "%s", t->in)); - printf("Output : >%s<\n", atf_fs_path_cstring(&p)); - ATF_REQUIRE(strcmp(atf_fs_path_cstring(&p), t->out) == 0); - atf_fs_path_fini(&p); - - printf("\n"); - } -} - -ATF_TC(path_copy); -ATF_TC_HEAD(path_copy, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_path_copy constructor"); -} -ATF_TC_BODY(path_copy, tc) -{ - atf_fs_path_t str, str2; - - RE(atf_fs_path_init_fmt(&str, "foo")); - RE(atf_fs_path_copy(&str2, &str)); - - ATF_REQUIRE(atf_equal_fs_path_fs_path(&str, &str2)); - - RE(atf_fs_path_append_fmt(&str2, "bar")); - - ATF_REQUIRE(!atf_equal_fs_path_fs_path(&str, &str2)); - - atf_fs_path_fini(&str2); - atf_fs_path_fini(&str); -} - -ATF_TC(path_is_absolute); -ATF_TC_HEAD(path_is_absolute, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the path::is_absolute function"); -} -ATF_TC_BODY(path_is_absolute, tc) -{ - struct test { - const char *in; - bool abs; - } tests[] = { - { "/", true }, - { "////", true }, /* NO_CHECK_STYLE */ - { "////a", true }, /* NO_CHECK_STYLE */ - { "//a//", true }, /* NO_CHECK_STYLE */ - { "a////", false }, /* NO_CHECK_STYLE */ - { "../foo", false }, - { NULL, false }, - }; - struct test *t; - - for (t = &tests[0]; t->in != NULL; t++) { - atf_fs_path_t p; - - printf("Input : %s\n", t->in); - printf("Expected result: %s\n", t->abs ? "true" : "false"); - - RE(atf_fs_path_init_fmt(&p, "%s", t->in)); - printf("Result : %s\n", - atf_fs_path_is_absolute(&p) ? "true" : "false"); - if (t->abs) - ATF_REQUIRE(atf_fs_path_is_absolute(&p)); - else - ATF_REQUIRE(!atf_fs_path_is_absolute(&p)); - atf_fs_path_fini(&p); - - printf("\n"); - } -} - -ATF_TC(path_is_root); -ATF_TC_HEAD(path_is_root, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the path::is_root function"); -} -ATF_TC_BODY(path_is_root, tc) -{ - struct test { - const char *in; - bool root; - } tests[] = { - { "/", true }, - { "////", true }, /* NO_CHECK_STYLE */ - { "////a", false }, /* NO_CHECK_STYLE */ - { "//a//", false }, /* NO_CHECK_STYLE */ - { "a////", false }, /* NO_CHECK_STYLE */ - { "../foo", false }, - { NULL, false }, - }; - struct test *t; - - for (t = &tests[0]; t->in != NULL; t++) { - atf_fs_path_t p; - - printf("Input : %s\n", t->in); - printf("Expected result: %s\n", t->root ? "true" : "false"); - - RE(atf_fs_path_init_fmt(&p, "%s", t->in)); - printf("Result : %s\n", - atf_fs_path_is_root(&p) ? "true" : "false"); - if (t->root) - ATF_REQUIRE(atf_fs_path_is_root(&p)); - else - ATF_REQUIRE(!atf_fs_path_is_root(&p)); - atf_fs_path_fini(&p); - - printf("\n"); - } -} - -ATF_TC(path_branch_path); -ATF_TC_HEAD(path_branch_path, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_path_branch_path " - "function"); -} -ATF_TC_BODY(path_branch_path, tc) -{ - struct test { - const char *in; - const char *branch; - } tests[] = { - { ".", "." }, - { "foo", "." }, - { "foo/bar", "foo" }, - { "/foo", "/" }, - { "/foo/bar", "/foo" }, - { NULL, NULL }, - }; - struct test *t; - - for (t = &tests[0]; t->in != NULL; t++) { - atf_fs_path_t p, bp; - - printf("Input : %s\n", t->in); - printf("Expected output: %s\n", t->branch); - - RE(atf_fs_path_init_fmt(&p, "%s", t->in)); - RE(atf_fs_path_branch_path(&p, &bp)); - printf("Output : %s\n", atf_fs_path_cstring(&bp)); - ATF_REQUIRE(strcmp(atf_fs_path_cstring(&bp), t->branch) == 0); - atf_fs_path_fini(&bp); - atf_fs_path_fini(&p); - - printf("\n"); - } -} - -ATF_TC(path_leaf_name); -ATF_TC_HEAD(path_leaf_name, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_path_leaf_name " - "function"); -} -ATF_TC_BODY(path_leaf_name, tc) -{ - struct test { - const char *in; - const char *leaf; - } tests[] = { - { ".", "." }, - { "foo", "foo" }, - { "foo/bar", "bar" }, - { "/foo", "foo" }, - { "/foo/bar", "bar" }, - { NULL, NULL }, - }; - struct test *t; - - for (t = &tests[0]; t->in != NULL; t++) { - atf_fs_path_t p; - atf_dynstr_t ln; - - printf("Input : %s\n", t->in); - printf("Expected output: %s\n", t->leaf); - - RE(atf_fs_path_init_fmt(&p, "%s", t->in)); - RE(atf_fs_path_leaf_name(&p, &ln)); - printf("Output : %s\n", atf_dynstr_cstring(&ln)); - ATF_REQUIRE(atf_equal_dynstr_cstring(&ln, t->leaf)); - atf_dynstr_fini(&ln); - atf_fs_path_fini(&p); - - printf("\n"); - } -} - -ATF_TC(path_append); -ATF_TC_HEAD(path_append, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the concatenation of multiple " - "paths"); -} -ATF_TC_BODY(path_append, tc) -{ - struct test { - const char *in; - const char *ap; - const char *out; - } tests[] = { - { "foo", "bar", "foo/bar" }, - { "foo/", "/bar", "foo/bar" }, - { "foo/", "/bar/baz", "foo/bar/baz" }, - { "foo/", "///bar///baz", "foo/bar/baz" }, /* NO_CHECK_STYLE */ - - { NULL, NULL, NULL } - }; - struct test *t; - - for (t = &tests[0]; t->in != NULL; t++) { - atf_fs_path_t p; - - printf("Input : >%s<\n", t->in); - printf("Append : >%s<\n", t->ap); - printf("Expected output: >%s<\n", t->out); - - RE(atf_fs_path_init_fmt(&p, "%s", t->in)); - - RE(atf_fs_path_append_fmt(&p, "%s", t->ap)); - - printf("Output : >%s<\n", atf_fs_path_cstring(&p)); - ATF_REQUIRE(strcmp(atf_fs_path_cstring(&p), t->out) == 0); - - atf_fs_path_fini(&p); - - printf("\n"); - } -} - -ATF_TC(path_to_absolute); -ATF_TC_HEAD(path_to_absolute, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_path_to_absolute " - "function"); -} -ATF_TC_BODY(path_to_absolute, tc) -{ - const char *names[] = { ".", "dir", NULL }; - const char **n; - - ATF_REQUIRE(mkdir("dir", 0755) != -1); - - for (n = names; *n != NULL; n++) { - atf_fs_path_t p, p2; - atf_fs_stat_t st1, st2; - - RE(atf_fs_path_init_fmt(&p, "%s", *n)); - RE(atf_fs_stat_init(&st1, &p)); - printf("Relative path: %s\n", atf_fs_path_cstring(&p)); - - RE(atf_fs_path_to_absolute(&p, &p2)); - printf("Absolute path: %s\n", atf_fs_path_cstring(&p2)); - - ATF_REQUIRE(atf_fs_path_is_absolute(&p2)); - RE(atf_fs_stat_init(&st2, &p2)); - - ATF_REQUIRE_EQ(atf_fs_stat_get_device(&st1), - atf_fs_stat_get_device(&st2)); - ATF_REQUIRE_EQ(atf_fs_stat_get_inode(&st1), - atf_fs_stat_get_inode(&st2)); - - atf_fs_stat_fini(&st2); - atf_fs_stat_fini(&st1); - atf_fs_path_fini(&p2); - atf_fs_path_fini(&p); - - printf("\n"); - } -} - -ATF_TC(path_equal); -ATF_TC_HEAD(path_equal, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the equality operators for paths"); -} -ATF_TC_BODY(path_equal, tc) -{ - atf_fs_path_t p1, p2; - - RE(atf_fs_path_init_fmt(&p1, "foo")); - - RE(atf_fs_path_init_fmt(&p2, "foo")); - ATF_REQUIRE(atf_equal_fs_path_fs_path(&p1, &p2)); - atf_fs_path_fini(&p2); - - RE(atf_fs_path_init_fmt(&p2, "bar")); - ATF_REQUIRE(!atf_equal_fs_path_fs_path(&p1, &p2)); - atf_fs_path_fini(&p2); - - atf_fs_path_fini(&p1); -} - -/* --------------------------------------------------------------------- - * Test cases for the "atf_fs_stat" type. - * --------------------------------------------------------------------- */ - -ATF_TC(stat_mode); -ATF_TC_HEAD(stat_mode, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_stat_get_mode function " - "and, indirectly, the constructor"); -} -ATF_TC_BODY(stat_mode, tc) -{ - atf_fs_path_t p; - atf_fs_stat_t st; - - create_file("f1", 0400); - create_file("f2", 0644); - - RE(atf_fs_path_init_fmt(&p, "f1")); - RE(atf_fs_stat_init(&st, &p)); - ATF_CHECK_EQ(0400, atf_fs_stat_get_mode(&st)); - atf_fs_stat_fini(&st); - atf_fs_path_fini(&p); - - RE(atf_fs_path_init_fmt(&p, "f2")); - RE(atf_fs_stat_init(&st, &p)); - ATF_CHECK_EQ(0644, atf_fs_stat_get_mode(&st)); - atf_fs_stat_fini(&st); - atf_fs_path_fini(&p); -} - -ATF_TC(stat_type); -ATF_TC_HEAD(stat_type, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_stat_get_type function " - "and, indirectly, the constructor"); -} -ATF_TC_BODY(stat_type, tc) -{ - atf_fs_path_t p; - atf_fs_stat_t st; - - create_dir("dir", 0755); - create_file("reg", 0644); - - RE(atf_fs_path_init_fmt(&p, "dir")); - RE(atf_fs_stat_init(&st, &p)); - ATF_REQUIRE_EQ(atf_fs_stat_get_type(&st), atf_fs_stat_dir_type); - atf_fs_stat_fini(&st); - atf_fs_path_fini(&p); - - RE(atf_fs_path_init_fmt(&p, "reg")); - RE(atf_fs_stat_init(&st, &p)); - ATF_REQUIRE_EQ(atf_fs_stat_get_type(&st), atf_fs_stat_reg_type); - atf_fs_stat_fini(&st); - atf_fs_path_fini(&p); -} - -ATF_TC(stat_perms); -ATF_TC_HEAD(stat_perms, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_stat_is_* functions"); -} -ATF_TC_BODY(stat_perms, tc) -{ - atf_fs_path_t p; - atf_fs_stat_t st; - - create_file("reg", 0); - - RE(atf_fs_path_init_fmt(&p, "reg")); - -#define perms(ur, uw, ux, gr, gw, gx, othr, othw, othx) \ - { \ - RE(atf_fs_stat_init(&st, &p)); \ - ATF_REQUIRE(atf_fs_stat_is_owner_readable(&st) == ur); \ - ATF_REQUIRE(atf_fs_stat_is_owner_writable(&st) == uw); \ - ATF_REQUIRE(atf_fs_stat_is_owner_executable(&st) == ux); \ - ATF_REQUIRE(atf_fs_stat_is_group_readable(&st) == gr); \ - ATF_REQUIRE(atf_fs_stat_is_group_writable(&st) == gw); \ - ATF_REQUIRE(atf_fs_stat_is_group_executable(&st) == gx); \ - ATF_REQUIRE(atf_fs_stat_is_other_readable(&st) == othr); \ - ATF_REQUIRE(atf_fs_stat_is_other_writable(&st) == othw); \ - ATF_REQUIRE(atf_fs_stat_is_other_executable(&st) == othx); \ - atf_fs_stat_fini(&st); \ - } - - chmod("reg", 0000); - perms(false, false, false, false, false, false, false, false, false); - - chmod("reg", 0001); - perms(false, false, false, false, false, false, false, false, true); - - chmod("reg", 0010); - perms(false, false, false, false, false, true, false, false, false); - - chmod("reg", 0100); - perms(false, false, true, false, false, false, false, false, false); - - chmod("reg", 0002); - perms(false, false, false, false, false, false, false, true, false); - - chmod("reg", 0020); - perms(false, false, false, false, true, false, false, false, false); - - chmod("reg", 0200); - perms(false, true, false, false, false, false, false, false, false); - - chmod("reg", 0004); - perms(false, false, false, false, false, false, true, false, false); - - chmod("reg", 0040); - perms(false, false, false, true, false, false, false, false, false); - - chmod("reg", 0400); - perms(true, false, false, false, false, false, false, false, false); - - chmod("reg", 0644); - perms(true, true, false, true, false, false, true, false, false); - - chmod("reg", 0755); - perms(true, true, true, true, false, true, true, false, true); - - chmod("reg", 0777); - perms(true, true, true, true, true, true, true, true, true); - -#undef perms - - atf_fs_path_fini(&p); -} - -/* --------------------------------------------------------------------- - * Test cases for the free functions. - * --------------------------------------------------------------------- */ - -ATF_TC(exists); -ATF_TC_HEAD(exists, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_exists function"); -} -ATF_TC_BODY(exists, tc) -{ - atf_error_t err; - atf_fs_path_t pdir, pfile; - bool b; - - RE(atf_fs_path_init_fmt(&pdir, "dir")); - RE(atf_fs_path_init_fmt(&pfile, "dir/file")); - - create_dir(atf_fs_path_cstring(&pdir), 0755); - create_file(atf_fs_path_cstring(&pfile), 0644); - - printf("Checking existence of a directory\n"); - RE(atf_fs_exists(&pdir, &b)); - ATF_REQUIRE(b); - - printf("Checking existence of a file\n"); - RE(atf_fs_exists(&pfile, &b)); - ATF_REQUIRE(b); - - /* XXX: This should probably be a separate test case to let the user - * be aware that some tests were skipped because privileges were not - * correct. */ - if (!atf_user_is_root()) { - printf("Checking existence of a file inside a directory without " - "permissions\n"); - ATF_REQUIRE(chmod(atf_fs_path_cstring(&pdir), 0000) != -1); - err = atf_fs_exists(&pfile, &b); - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "libc")); - ATF_REQUIRE(chmod(atf_fs_path_cstring(&pdir), 0755) != -1); - atf_error_free(err); - } - - printf("Checking existence of a non-existent file\n"); - ATF_REQUIRE(unlink(atf_fs_path_cstring(&pfile)) != -1); - RE(atf_fs_exists(&pfile, &b)); - ATF_REQUIRE(!b); - - atf_fs_path_fini(&pfile); - atf_fs_path_fini(&pdir); -} - -ATF_TC(eaccess); -ATF_TC_HEAD(eaccess, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_eaccess function"); -} -ATF_TC_BODY(eaccess, tc) -{ - const int modes[] = { atf_fs_access_f, atf_fs_access_r, atf_fs_access_w, - atf_fs_access_x, 0 }; - const int *m; - struct tests { - mode_t fmode; - int amode; - int uerror; - int rerror; - } tests[] = { - { 0000, atf_fs_access_r, EACCES, 0 }, - { 0000, atf_fs_access_w, EACCES, 0 }, - { 0000, atf_fs_access_x, EACCES, EACCES }, - - { 0001, atf_fs_access_r, EACCES, 0 }, - { 0001, atf_fs_access_w, EACCES, 0 }, - { 0001, atf_fs_access_x, EACCES, 0 }, - { 0002, atf_fs_access_r, EACCES, 0 }, - { 0002, atf_fs_access_w, EACCES, 0 }, - { 0002, atf_fs_access_x, EACCES, EACCES }, - { 0004, atf_fs_access_r, EACCES, 0 }, - { 0004, atf_fs_access_w, EACCES, 0 }, - { 0004, atf_fs_access_x, EACCES, EACCES }, - - { 0010, atf_fs_access_r, EACCES, 0 }, - { 0010, atf_fs_access_w, EACCES, 0 }, - { 0010, atf_fs_access_x, 0, 0 }, - { 0020, atf_fs_access_r, EACCES, 0 }, - { 0020, atf_fs_access_w, 0, 0 }, - { 0020, atf_fs_access_x, EACCES, EACCES }, - { 0040, atf_fs_access_r, 0, 0 }, - { 0040, atf_fs_access_w, EACCES, 0 }, - { 0040, atf_fs_access_x, EACCES, EACCES }, - - { 0100, atf_fs_access_r, EACCES, 0 }, - { 0100, atf_fs_access_w, EACCES, 0 }, - { 0100, atf_fs_access_x, 0, 0 }, - { 0200, atf_fs_access_r, EACCES, 0 }, - { 0200, atf_fs_access_w, 0, 0 }, - { 0200, atf_fs_access_x, EACCES, EACCES }, - { 0400, atf_fs_access_r, 0, 0 }, - { 0400, atf_fs_access_w, EACCES, 0 }, - { 0400, atf_fs_access_x, EACCES, EACCES }, - - { 0, 0, 0, 0 } - }; - struct tests *t; - atf_fs_path_t p; - atf_error_t err; - - RE(atf_fs_path_init_fmt(&p, "the-file")); - - printf("Non-existent file checks\n"); - for (m = &modes[0]; *m != 0; m++) { - err = atf_fs_eaccess(&p, *m); - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "libc")); - ATF_REQUIRE_EQ(atf_libc_error_code(err), ENOENT); - atf_error_free(err); - } - - create_file(atf_fs_path_cstring(&p), 0000); - ATF_REQUIRE(chown(atf_fs_path_cstring(&p), geteuid(), getegid()) != -1); - - for (t = &tests[0]; t->amode != 0; t++) { - const int experr = atf_user_is_root() ? t->rerror : t->uerror; - - printf("\n"); - printf("File mode : %04o\n", (unsigned int)t->fmode); - printf("Access mode : 0x%02x\n", t->amode); - - ATF_REQUIRE(chmod(atf_fs_path_cstring(&p), t->fmode) != -1); - - /* First, existence check. */ - err = atf_fs_eaccess(&p, atf_fs_access_f); - ATF_REQUIRE(!atf_is_error(err)); - - /* Now do the specific test case. */ - printf("Expected error: %d\n", experr); - err = atf_fs_eaccess(&p, t->amode); - if (atf_is_error(err)) { - if (atf_error_is(err, "libc")) - printf("Error : %d\n", atf_libc_error_code(err)); - else - printf("Error : Non-libc error\n"); - } else - printf("Error : None\n"); - if (experr == 0) { - ATF_REQUIRE(!atf_is_error(err)); - } else { - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "libc")); - ATF_REQUIRE_EQ(atf_libc_error_code(err), experr); - atf_error_free(err); - } - } - - atf_fs_path_fini(&p); -} - -ATF_TC(getcwd); -ATF_TC_HEAD(getcwd, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_getcwd function"); -} -ATF_TC_BODY(getcwd, tc) -{ - atf_fs_path_t cwd1, cwd2; - - create_dir ("root", 0755); - - RE(atf_fs_getcwd(&cwd1)); - ATF_REQUIRE(chdir("root") != -1); - RE(atf_fs_getcwd(&cwd2)); - - RE(atf_fs_path_append_fmt(&cwd1, "root")); - - ATF_REQUIRE(atf_equal_fs_path_fs_path(&cwd1, &cwd2)); - - atf_fs_path_fini(&cwd2); - atf_fs_path_fini(&cwd1); -} - -ATF_TC(rmdir_empty); -ATF_TC_HEAD(rmdir_empty, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_rmdir function"); -} -ATF_TC_BODY(rmdir_empty, tc) -{ - atf_fs_path_t p; - - RE(atf_fs_path_init_fmt(&p, "test-dir")); - - ATF_REQUIRE(mkdir("test-dir", 0755) != -1); - ATF_REQUIRE(exists(&p)); - RE(atf_fs_rmdir(&p)); - ATF_REQUIRE(!exists(&p)); - - atf_fs_path_fini(&p); -} - -ATF_TC(rmdir_enotempty); -ATF_TC_HEAD(rmdir_enotempty, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_rmdir function"); -} -ATF_TC_BODY(rmdir_enotempty, tc) -{ - atf_fs_path_t p; - atf_error_t err; - - RE(atf_fs_path_init_fmt(&p, "test-dir")); - - ATF_REQUIRE(mkdir("test-dir", 0755) != -1); - ATF_REQUIRE(exists(&p)); - create_file("test-dir/foo", 0644); - - err = atf_fs_rmdir(&p); - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "libc")); - ATF_REQUIRE_EQ(atf_libc_error_code(err), ENOTEMPTY); - atf_error_free(err); - - atf_fs_path_fini(&p); -} - -ATF_TC(rmdir_eperm); -ATF_TC_HEAD(rmdir_eperm, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_rmdir function"); -} -ATF_TC_BODY(rmdir_eperm, tc) -{ - atf_fs_path_t p; - atf_error_t err; - - RE(atf_fs_path_init_fmt(&p, "test-dir/foo")); - - ATF_REQUIRE(mkdir("test-dir", 0755) != -1); - ATF_REQUIRE(mkdir("test-dir/foo", 0755) != -1); - ATF_REQUIRE(chmod("test-dir", 0555) != -1); - ATF_REQUIRE(exists(&p)); - - err = atf_fs_rmdir(&p); - if (atf_user_is_root()) { - ATF_REQUIRE(!atf_is_error(err)); - } else { - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "libc")); - ATF_REQUIRE_EQ(atf_libc_error_code(err), EACCES); - atf_error_free(err); - } - - atf_fs_path_fini(&p); -} - -ATF_TC(mkdtemp_ok); -ATF_TC_HEAD(mkdtemp_ok, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_mkdtemp function, " - "successful execution"); -} -ATF_TC_BODY(mkdtemp_ok, tc) -{ - atf_fs_path_t p1, p2; - atf_fs_stat_t s1, s2; - - RE(atf_fs_path_init_fmt(&p1, "testdir.XXXXXX")); - RE(atf_fs_path_init_fmt(&p2, "testdir.XXXXXX")); - RE(atf_fs_mkdtemp(&p1)); - RE(atf_fs_mkdtemp(&p2)); - ATF_REQUIRE(!atf_equal_fs_path_fs_path(&p1, &p2)); - ATF_REQUIRE(exists(&p1)); - ATF_REQUIRE(exists(&p2)); - - RE(atf_fs_stat_init(&s1, &p1)); - ATF_REQUIRE_EQ(atf_fs_stat_get_type(&s1), atf_fs_stat_dir_type); - ATF_REQUIRE( atf_fs_stat_is_owner_readable(&s1)); - ATF_REQUIRE( atf_fs_stat_is_owner_writable(&s1)); - ATF_REQUIRE( atf_fs_stat_is_owner_executable(&s1)); - ATF_REQUIRE(!atf_fs_stat_is_group_readable(&s1)); - ATF_REQUIRE(!atf_fs_stat_is_group_writable(&s1)); - ATF_REQUIRE(!atf_fs_stat_is_group_executable(&s1)); - ATF_REQUIRE(!atf_fs_stat_is_other_readable(&s1)); - ATF_REQUIRE(!atf_fs_stat_is_other_writable(&s1)); - ATF_REQUIRE(!atf_fs_stat_is_other_executable(&s1)); - - RE(atf_fs_stat_init(&s2, &p2)); - ATF_REQUIRE_EQ(atf_fs_stat_get_type(&s2), atf_fs_stat_dir_type); - ATF_REQUIRE( atf_fs_stat_is_owner_readable(&s2)); - ATF_REQUIRE( atf_fs_stat_is_owner_writable(&s2)); - ATF_REQUIRE( atf_fs_stat_is_owner_executable(&s2)); - ATF_REQUIRE(!atf_fs_stat_is_group_readable(&s2)); - ATF_REQUIRE(!atf_fs_stat_is_group_writable(&s2)); - ATF_REQUIRE(!atf_fs_stat_is_group_executable(&s2)); - ATF_REQUIRE(!atf_fs_stat_is_other_readable(&s2)); - ATF_REQUIRE(!atf_fs_stat_is_other_writable(&s2)); - ATF_REQUIRE(!atf_fs_stat_is_other_executable(&s2)); - - atf_fs_stat_fini(&s2); - atf_fs_stat_fini(&s1); - atf_fs_path_fini(&p2); - atf_fs_path_fini(&p1); -} - -ATF_TC(mkdtemp_err); -ATF_TC_HEAD(mkdtemp_err, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_mkdtemp function, " - "error conditions"); - atf_tc_set_md_var(tc, "require.user", "unprivileged"); -} -ATF_TC_BODY(mkdtemp_err, tc) -{ - atf_error_t err; - atf_fs_path_t p; - - ATF_REQUIRE(mkdir("dir", 0555) != -1); - - RE(atf_fs_path_init_fmt(&p, "dir/testdir.XXXXXX")); - - err = atf_fs_mkdtemp(&p); - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "libc")); - ATF_CHECK_EQ(atf_libc_error_code(err), EACCES); - atf_error_free(err); - - ATF_CHECK(!exists(&p)); - ATF_CHECK(strcmp(atf_fs_path_cstring(&p), "dir/testdir.XXXXXX") == 0); - - atf_fs_path_fini(&p); -} - -static -void -do_umask_check(atf_error_t (*const mk_func)(atf_fs_path_t *), - atf_fs_path_t *path, const mode_t test_mask, - const char *str_mask, const char *exp_name) -{ - char buf[1024]; - int old_umask; - atf_error_t err; - - printf("Creating temporary %s with umask %s\n", exp_name, str_mask); - - old_umask = umask(test_mask); - err = mk_func(path); - (void)umask(old_umask); - - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "invalid_umask")); - atf_error_format(err, buf, sizeof(buf)); - ATF_CHECK(strstr(buf, exp_name) != NULL); - ATF_CHECK(strstr(buf, str_mask) != NULL); - atf_error_free(err); -} - -ATF_TC(mkdtemp_umask); -ATF_TC_HEAD(mkdtemp_umask, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_mkdtemp function " - "causing an error due to a too strict umask"); -} -ATF_TC_BODY(mkdtemp_umask, tc) -{ - atf_fs_path_t p; - - RE(atf_fs_path_init_fmt(&p, "testdir.XXXXXX")); - - do_umask_check(atf_fs_mkdtemp, &p, 00100, "00100", "directory"); - do_umask_check(atf_fs_mkdtemp, &p, 00200, "00200", "directory"); - do_umask_check(atf_fs_mkdtemp, &p, 00400, "00400", "directory"); - do_umask_check(atf_fs_mkdtemp, &p, 00500, "00500", "directory"); - do_umask_check(atf_fs_mkdtemp, &p, 00600, "00600", "directory"); - - atf_fs_path_fini(&p); -} - -ATF_TC(mkstemp_ok); -ATF_TC_HEAD(mkstemp_ok, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_mkstemp function, " - "successful execution"); -} -ATF_TC_BODY(mkstemp_ok, tc) -{ - int fd1, fd2; - atf_fs_path_t p1, p2; - atf_fs_stat_t s1, s2; - - RE(atf_fs_path_init_fmt(&p1, "testfile.XXXXXX")); - RE(atf_fs_path_init_fmt(&p2, "testfile.XXXXXX")); - fd1 = fd2 = -1; - RE(atf_fs_mkstemp(&p1, &fd1)); - RE(atf_fs_mkstemp(&p2, &fd2)); - ATF_REQUIRE(!atf_equal_fs_path_fs_path(&p1, &p2)); - ATF_REQUIRE(exists(&p1)); - ATF_REQUIRE(exists(&p2)); - - ATF_CHECK(fd1 != -1); - ATF_CHECK(fd2 != -1); - ATF_CHECK(write(fd1, "foo", 3) == 3); - ATF_CHECK(write(fd2, "bar", 3) == 3); - close(fd1); - close(fd2); - - RE(atf_fs_stat_init(&s1, &p1)); - ATF_CHECK_EQ(atf_fs_stat_get_type(&s1), atf_fs_stat_reg_type); - ATF_CHECK( atf_fs_stat_is_owner_readable(&s1)); - ATF_CHECK( atf_fs_stat_is_owner_writable(&s1)); - ATF_CHECK(!atf_fs_stat_is_owner_executable(&s1)); - ATF_CHECK(!atf_fs_stat_is_group_readable(&s1)); - ATF_CHECK(!atf_fs_stat_is_group_writable(&s1)); - ATF_CHECK(!atf_fs_stat_is_group_executable(&s1)); - ATF_CHECK(!atf_fs_stat_is_other_readable(&s1)); - ATF_CHECK(!atf_fs_stat_is_other_writable(&s1)); - ATF_CHECK(!atf_fs_stat_is_other_executable(&s1)); - - RE(atf_fs_stat_init(&s2, &p2)); - ATF_CHECK_EQ(atf_fs_stat_get_type(&s2), atf_fs_stat_reg_type); - ATF_CHECK( atf_fs_stat_is_owner_readable(&s2)); - ATF_CHECK( atf_fs_stat_is_owner_writable(&s2)); - ATF_CHECK(!atf_fs_stat_is_owner_executable(&s2)); - ATF_CHECK(!atf_fs_stat_is_group_readable(&s2)); - ATF_CHECK(!atf_fs_stat_is_group_writable(&s2)); - ATF_CHECK(!atf_fs_stat_is_group_executable(&s2)); - ATF_CHECK(!atf_fs_stat_is_other_readable(&s2)); - ATF_CHECK(!atf_fs_stat_is_other_writable(&s2)); - ATF_CHECK(!atf_fs_stat_is_other_executable(&s2)); - - atf_fs_stat_fini(&s2); - atf_fs_stat_fini(&s1); - atf_fs_path_fini(&p2); - atf_fs_path_fini(&p1); -} - -ATF_TC(mkstemp_err); -ATF_TC_HEAD(mkstemp_err, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_mkstemp function, " - "error conditions"); - atf_tc_set_md_var(tc, "require.user", "unprivileged"); -} -ATF_TC_BODY(mkstemp_err, tc) -{ - int fd; - atf_error_t err; - atf_fs_path_t p; - - ATF_REQUIRE(mkdir("dir", 0555) != -1); - - RE(atf_fs_path_init_fmt(&p, "dir/testfile.XXXXXX")); - fd = 1234; - - err = atf_fs_mkstemp(&p, &fd); - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "libc")); - ATF_CHECK_EQ(atf_libc_error_code(err), EACCES); - atf_error_free(err); - - ATF_CHECK(!exists(&p)); - ATF_CHECK(strcmp(atf_fs_path_cstring(&p), "dir/testfile.XXXXXX") == 0); - ATF_CHECK_EQ(fd, 1234); - - atf_fs_path_fini(&p); -} - -ATF_TC(mkstemp_umask); -ATF_TC_HEAD(mkstemp_umask, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_fs_mkstemp function " - "causing an error due to a too strict umask"); -} -ATF_TC_BODY(mkstemp_umask, tc) -{ - atf_fs_path_t p; - - RE(atf_fs_path_init_fmt(&p, "testfile.XXXXXX")); - - do_umask_check(mkstemp_discard_fd, &p, 00100, "00100", "regular file"); - do_umask_check(mkstemp_discard_fd, &p, 00200, "00200", "regular file"); - do_umask_check(mkstemp_discard_fd, &p, 00400, "00400", "regular file"); - - atf_fs_path_fini(&p); -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Add the tests for the "atf_fs_path" type. */ - ATF_TP_ADD_TC(tp, path_normalize); - ATF_TP_ADD_TC(tp, path_copy); - ATF_TP_ADD_TC(tp, path_is_absolute); - ATF_TP_ADD_TC(tp, path_is_root); - ATF_TP_ADD_TC(tp, path_branch_path); - ATF_TP_ADD_TC(tp, path_leaf_name); - ATF_TP_ADD_TC(tp, path_append); - ATF_TP_ADD_TC(tp, path_to_absolute); - ATF_TP_ADD_TC(tp, path_equal); - - /* Add the tests for the "atf_fs_stat" type. */ - ATF_TP_ADD_TC(tp, stat_mode); - ATF_TP_ADD_TC(tp, stat_type); - ATF_TP_ADD_TC(tp, stat_perms); - - /* Add the tests for the free functions. */ - ATF_TP_ADD_TC(tp, eaccess); - ATF_TP_ADD_TC(tp, exists); - ATF_TP_ADD_TC(tp, getcwd); - ATF_TP_ADD_TC(tp, rmdir_empty); - ATF_TP_ADD_TC(tp, rmdir_enotempty); - ATF_TP_ADD_TC(tp, rmdir_eperm); - ATF_TP_ADD_TC(tp, mkdtemp_ok); - ATF_TP_ADD_TC(tp, mkdtemp_err); - ATF_TP_ADD_TC(tp, mkdtemp_umask); - ATF_TP_ADD_TC(tp, mkstemp_ok); - ATF_TP_ADD_TC(tp, mkstemp_err); - ATF_TP_ADD_TC(tp, mkstemp_umask); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/env_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/env_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/env_test.c (nonexistent) @@ -1,116 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include - -#include "env.h" -#include "test_helpers.h" -#include "text.h" - -/* --------------------------------------------------------------------- - * Test cases for the free functions. - * --------------------------------------------------------------------- */ - -ATF_TC(has); -ATF_TC_HEAD(has, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_env_has function"); -} -ATF_TC_BODY(has, tc) -{ - ATF_REQUIRE(atf_env_has("PATH")); - ATF_REQUIRE(!atf_env_has("_UNDEFINED_VARIABLE_")); -} - -ATF_TC(get); -ATF_TC_HEAD(get, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_env_get function"); -} -ATF_TC_BODY(get, tc) -{ - const char *val; - - ATF_REQUIRE(atf_env_has("PATH")); - - val = atf_env_get("PATH"); - ATF_REQUIRE(strlen(val) > 0); - ATF_REQUIRE(strchr(val, ':') != NULL); -} - -ATF_TC(set); -ATF_TC_HEAD(set, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_env_set function"); -} -ATF_TC_BODY(set, tc) -{ - char *oldval; - - ATF_REQUIRE(atf_env_has("PATH")); - RE(atf_text_format(&oldval, "%s", atf_env_get("PATH"))); - RE(atf_env_set("PATH", "foo-bar")); - ATF_REQUIRE(strcmp(atf_env_get("PATH"), oldval) != 0); - ATF_REQUIRE(strcmp(atf_env_get("PATH"), "foo-bar") == 0); - free(oldval); - - ATF_REQUIRE(!atf_env_has("_UNDEFINED_VARIABLE_")); - RE(atf_env_set("_UNDEFINED_VARIABLE_", "foo2-bar2")); - ATF_REQUIRE(strcmp(atf_env_get("_UNDEFINED_VARIABLE_"), - "foo2-bar2") == 0); -} - -ATF_TC(unset); -ATF_TC_HEAD(unset, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_env_unset function"); -} -ATF_TC_BODY(unset, tc) -{ - ATF_REQUIRE(atf_env_has("PATH")); - RE(atf_env_unset("PATH")); - ATF_REQUIRE(!atf_env_has("PATH")); -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, has); - ATF_TP_ADD_TC(tp, get); - ATF_TP_ADD_TC(tp, set); - ATF_TP_ADD_TC(tp, unset); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/dynstr_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/dynstr_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/dynstr_test.c (nonexistent) @@ -1,637 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include -#include - -#include - -#include "dynstr.h" -#include "test_helpers.h" - -/* --------------------------------------------------------------------- - * Tests for the "atf_dynstr" type. - * --------------------------------------------------------------------- */ - -/* - * Constructors and destructors. - */ - -ATF_TC(init); -ATF_TC_HEAD(init, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the empty constructor"); -} -ATF_TC_BODY(init, tc) -{ - atf_dynstr_t str; - - RE(atf_dynstr_init(&str)); - ATF_REQUIRE_EQ(atf_dynstr_length(&str), 0); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0); - atf_dynstr_fini(&str); -} - -static -void -init_fmt(atf_dynstr_t *str, const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - RE(atf_dynstr_init_ap(str, fmt, ap)); - va_end(ap); -} - -ATF_TC(init_ap); -ATF_TC_HEAD(init_ap, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the formatted constructor using " - "a va_list argument"); -} -ATF_TC_BODY(init_ap, tc) -{ - atf_dynstr_t str; - - init_fmt(&str, "String 1"); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 1") == 0); - atf_dynstr_fini(&str); - - init_fmt(&str, "String %d", 2); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 2") == 0); - atf_dynstr_fini(&str); - - init_fmt(&str, "%s %d", "String", 3); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 3") == 0); - atf_dynstr_fini(&str); - - init_fmt(&str, "%s%s%s%s%s%s%s", "This ", "should ", "be ", "a ", - "large ", "string ", "aaaabbbbccccdddd"); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), - "This should be a large string " - "aaaabbbbccccdddd") == 0); - atf_dynstr_fini(&str); -} - -ATF_TC(init_fmt); -ATF_TC_HEAD(init_fmt, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the formatted constructor using " - "a variable list of parameters"); -} -ATF_TC_BODY(init_fmt, tc) -{ - atf_dynstr_t str; - - RE(atf_dynstr_init_fmt(&str, "String 1")); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 1") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_fmt(&str, "String %d", 2)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 2") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_fmt(&str, "%s %d", "String", 3)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 3") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_fmt(&str, "%s%s%s%s%s%s%s", "This ", "should ", - "be ", "a ", "large ", "string ", - "aaaabbbbccccdddd")); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), - "This should be a large string " - "aaaabbbbccccdddd") == 0); - atf_dynstr_fini(&str); -} - -ATF_TC(init_raw); -ATF_TC_HEAD(init_raw, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the construction of a string " - "using a raw memory pointer"); -} -ATF_TC_BODY(init_raw, tc) -{ - const char *src = "String 1, String 2"; - atf_dynstr_t str; - - RE(atf_dynstr_init_raw(&str, src, 0)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_raw(&str, src, 8)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 1") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_raw(&str, src + 10, 8)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String 2") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_raw(&str, "String\0Lost", 11)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "String") == 0); - atf_dynstr_fini(&str); - - { - atf_error_t err = atf_dynstr_init_raw(&str, "NULL", SIZE_MAX - 1); - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "no_memory")); - atf_error_free(err); - } -} - -ATF_TC(init_rep); -ATF_TC_HEAD(init_rep, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the construction of a string by " - "repeating characters"); -} -ATF_TC_BODY(init_rep, tc) -{ - const size_t maxlen = 8192; - char buf[maxlen + 1]; - size_t i; - - buf[0] = '\0'; - - for (i = 0; i < maxlen; i++) { - atf_dynstr_t str; - - RE(atf_dynstr_init_rep(&str, i, 'a')); - - if (strcmp(atf_dynstr_cstring(&str), buf) != 0) { - fprintf(stderr, "Failed at iteration %zd\n", i); - atf_tc_fail("Failed to construct dynstr by repeating %zd " - "times the '%c' character", i, 'a'); - } - - atf_dynstr_fini(&str); - - strcat(buf, "a"); - } - - { - atf_dynstr_t str; - atf_error_t err; - - err = atf_dynstr_init_rep(&str, SIZE_MAX, 'a'); - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "no_memory")); - atf_error_free(err); - - err = atf_dynstr_init_rep(&str, SIZE_MAX - 1, 'a'); - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "no_memory")); - atf_error_free(err); - } -} - -ATF_TC(init_substr); -ATF_TC_HEAD(init_substr, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the construction of a string " - "using a substring of another one"); -} -ATF_TC_BODY(init_substr, tc) -{ - atf_dynstr_t src; - atf_dynstr_t str; - - RE(atf_dynstr_init_fmt(&src, "Str 1, Str 2")); - - RE(atf_dynstr_init_substr(&str, &src, 0, 0)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_substr(&str, &src, 0, atf_dynstr_npos)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 1, Str 2") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_substr(&str, &src, 0, 100)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 1, Str 2") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_substr(&str, &src, 0, 5)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 1") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_substr(&str, &src, 100, atf_dynstr_npos)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_substr(&str, &src, 7, atf_dynstr_npos)); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Str 2") == 0); - atf_dynstr_fini(&str); - - atf_dynstr_fini(&src); -} - -ATF_TC(copy); -ATF_TC_HEAD(copy, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_dynstr_copy constructor"); -} -ATF_TC_BODY(copy, tc) -{ - atf_dynstr_t str, str2; - - RE(atf_dynstr_init_fmt(&str, "Test string")); - RE(atf_dynstr_copy(&str2, &str)); - - ATF_REQUIRE(atf_equal_dynstr_dynstr(&str, &str2)); - - RE(atf_dynstr_append_fmt(&str2, " non-shared text")); - - ATF_REQUIRE(!atf_equal_dynstr_dynstr(&str, &str2)); - - atf_dynstr_fini(&str2); - atf_dynstr_fini(&str); -} - -ATF_TC(fini_disown); -ATF_TC_HEAD(fini_disown, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks grabbing ownership of the " - "internal plain C string"); -} -ATF_TC_BODY(fini_disown, tc) -{ - const char *cstr; - char *cstr2; - atf_dynstr_t str; - - RE(atf_dynstr_init_fmt(&str, "Test string 1")); - cstr = atf_dynstr_cstring(&str); - cstr2 = atf_dynstr_fini_disown(&str); - - ATF_REQUIRE_EQ(cstr, cstr2); - free(cstr2); -} - -/* - * Getters. - */ - -ATF_TC(cstring); -ATF_TC_HEAD(cstring, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the method to obtain a plain C " - "string"); -} -ATF_TC_BODY(cstring, tc) -{ - const char *cstr; - atf_dynstr_t str; - - RE(atf_dynstr_init_fmt(&str, "Test string 1")); - cstr = atf_dynstr_cstring(&str); - ATF_REQUIRE(cstr != NULL); - ATF_REQUIRE(strcmp(cstr, "Test string 1") == 0); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_fmt(&str, "Test string 2")); - cstr = atf_dynstr_cstring(&str); - ATF_REQUIRE(cstr != NULL); - ATF_REQUIRE(strcmp(cstr, "Test string 2") == 0); - atf_dynstr_fini(&str); -} - -ATF_TC(length); -ATF_TC_HEAD(length, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the method to obtain the length"); -} -ATF_TC_BODY(length, tc) -{ - size_t i; - - for (i = 0; i < 8192; i++) { - atf_dynstr_t str; - RE(atf_dynstr_init_rep(&str, i, 'a')); - ATF_REQUIRE_EQ(atf_dynstr_length(&str), i); - atf_dynstr_fini(&str); - } -} - -ATF_TC(rfind_ch); -ATF_TC_HEAD(rfind_ch, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the method to locate the first " - "occurrence of a character starting from the end"); -} -ATF_TC_BODY(rfind_ch, tc) -{ - atf_dynstr_t str; - - RE(atf_dynstr_init_fmt(&str, "Foo1/Bar2/,.Baz")); - - ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, '\0'), atf_dynstr_npos); - - ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, '0'), atf_dynstr_npos); - ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'b'), atf_dynstr_npos); - - ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'F'), 0); - ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, '/'), 9); - ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'a'), 13); - ATF_REQUIRE_EQ(atf_dynstr_rfind_ch(&str, 'z'), 14); - - atf_dynstr_fini(&str); -} - -/* - * Modifiers. - */ - -static -void -check_append(atf_error_t (*append)(atf_dynstr_t *, const char *, ...)) -{ - const size_t maxlen = 8192; - char buf[maxlen + 1]; - size_t i; - atf_dynstr_t str; - - printf("Appending with plain string\n"); - buf[0] = '\0'; - RE(atf_dynstr_init(&str)); - for (i = 0; i < maxlen; i++) { - if (strcmp(atf_dynstr_cstring(&str), buf) != 0) { - fprintf(stderr, "Failed at iteration %zd\n", i); - atf_tc_fail("Failed to append character at iteration %zd", i); - } - - RE(append(&str, "a")); - strcat(buf, "a"); - } - atf_dynstr_fini(&str); - - printf("Appending with formatted string\n"); - buf[0] = '\0'; - RE(atf_dynstr_init(&str)); - for (i = 0; i < maxlen; i++) { - if (strcmp(atf_dynstr_cstring(&str), buf) != 0) { - fprintf(stderr, "Failed at iteration %zd\n", i); - atf_tc_fail("Failed to append character at iteration %zd", i); - } - - RE(append(&str, "%s", "a")); - strcat(buf, "a"); - } - atf_dynstr_fini(&str); -} - -static -atf_error_t -append_ap_aux(atf_dynstr_t *str, const char *fmt, ...) -{ - va_list ap; - atf_error_t err; - - va_start(ap, fmt); - err = atf_dynstr_append_ap(str, fmt, ap); - va_end(ap); - - return err; -} - -ATF_TC(append_ap); -ATF_TC_HEAD(append_ap, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that appending a string to " - "another one works"); -} -ATF_TC_BODY(append_ap, tc) -{ - check_append(append_ap_aux); -} - -ATF_TC(append_fmt); -ATF_TC_HEAD(append_fmt, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that appending a string to " - "another one works"); -} -ATF_TC_BODY(append_fmt, tc) -{ - check_append(atf_dynstr_append_fmt); -} - -ATF_TC(clear); -ATF_TC_HEAD(clear, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks clearing a string"); -} -ATF_TC_BODY(clear, tc) -{ - atf_dynstr_t str; - - printf("Clear an empty string\n"); - RE(atf_dynstr_init(&str)); - atf_dynstr_clear(&str); - ATF_REQUIRE_EQ(atf_dynstr_length(&str), 0); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0); - atf_dynstr_fini(&str); - - printf("Clear a non-empty string\n"); - RE(atf_dynstr_init_fmt(&str, "Not empty")); - ATF_REQUIRE_EQ(atf_dynstr_length(&str), strlen("Not empty")); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "Not empty") == 0); - atf_dynstr_clear(&str); - ATF_REQUIRE_EQ(atf_dynstr_length(&str), 0); - ATF_REQUIRE(strcmp(atf_dynstr_cstring(&str), "") == 0); - atf_dynstr_fini(&str); -} - -static -void -check_prepend(atf_error_t (*prepend)(atf_dynstr_t *, const char *, ...)) -{ - const size_t maxlen = 8192; - char buf[maxlen + 1]; - size_t i; - atf_dynstr_t str; - - printf("Prepending with plain string\n"); - buf[0] = '\0'; - RE(atf_dynstr_init(&str)); - for (i = 0; i < maxlen; i++) { - if (strcmp(atf_dynstr_cstring(&str), buf) != 0) { - fprintf(stderr, "Failed at iteration %zd\n", i); - atf_tc_fail("Failed to prepend character at iteration %zd", i); - } - - memmove(buf + 1, buf, i + 1); - if (i % 2 == 0) { - RE(prepend(&str, "%s", "a")); - buf[0] = 'a'; - } else { - RE(prepend(&str, "%s", "b")); - buf[0] = 'b'; - } - } - atf_dynstr_fini(&str); - - printf("Prepending with formatted string\n"); - buf[0] = '\0'; - RE(atf_dynstr_init(&str)); - for (i = 0; i < maxlen; i++) { - if (strcmp(atf_dynstr_cstring(&str), buf) != 0) { - fprintf(stderr, "Failed at iteration %zd\n", i); - atf_tc_fail("Failed to prepend character at iteration %zd", i); - } - - memmove(buf + 1, buf, i + 1); - if (i % 2 == 0) { - RE(prepend(&str, "%s", "a")); - buf[0] = 'a'; - } else { - RE(prepend(&str, "%s", "b")); - buf[0] = 'b'; - } - } - atf_dynstr_fini(&str); -} - -static -atf_error_t -prepend_ap_aux(atf_dynstr_t *str, const char *fmt, ...) -{ - va_list ap; - atf_error_t err; - - va_start(ap, fmt); - err = atf_dynstr_prepend_ap(str, fmt, ap); - va_end(ap); - - return err; -} - -ATF_TC(prepend_ap); -ATF_TC_HEAD(prepend_ap, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that prepending a string to " - "another one works"); -} -ATF_TC_BODY(prepend_ap, tc) -{ - check_prepend(prepend_ap_aux); -} - -ATF_TC(prepend_fmt); -ATF_TC_HEAD(prepend_fmt, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that prepending a string to " - "another one works"); -} -ATF_TC_BODY(prepend_fmt, tc) -{ - check_prepend(atf_dynstr_prepend_fmt); -} - -/* - * Operators. - */ - -ATF_TC(equal_cstring); -ATF_TC_HEAD(equal_cstring, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_equal_dynstr_cstring " - "function"); -} -ATF_TC_BODY(equal_cstring, tc) -{ - atf_dynstr_t str; - - RE(atf_dynstr_init(&str)); - ATF_REQUIRE( atf_equal_dynstr_cstring(&str, "")); - ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "Test")); - atf_dynstr_fini(&str); - - RE(atf_dynstr_init_fmt(&str, "Test")); - ATF_REQUIRE( atf_equal_dynstr_cstring(&str, "Test")); - ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "")); - ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "Tes")); - ATF_REQUIRE(!atf_equal_dynstr_cstring(&str, "Test ")); - atf_dynstr_fini(&str); -} - -ATF_TC(equal_dynstr); -ATF_TC_HEAD(equal_dynstr, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_equal_dynstr_dynstr " - "function"); -} -ATF_TC_BODY(equal_dynstr, tc) -{ - atf_dynstr_t str, str2; - - RE(atf_dynstr_init(&str)); - RE(atf_dynstr_init_fmt(&str2, "Test")); - ATF_REQUIRE( atf_equal_dynstr_dynstr(&str, &str)); - ATF_REQUIRE(!atf_equal_dynstr_dynstr(&str, &str2)); - atf_dynstr_fini(&str2); - atf_dynstr_fini(&str); -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Constructors and destructors. */ - ATF_TP_ADD_TC(tp, init); - ATF_TP_ADD_TC(tp, init_ap); - ATF_TP_ADD_TC(tp, init_fmt); - ATF_TP_ADD_TC(tp, init_raw); - ATF_TP_ADD_TC(tp, init_rep); - ATF_TP_ADD_TC(tp, init_substr); - ATF_TP_ADD_TC(tp, copy); - ATF_TP_ADD_TC(tp, fini_disown); - - /* Getters. */ - ATF_TP_ADD_TC(tp, cstring); - ATF_TP_ADD_TC(tp, length); - ATF_TP_ADD_TC(tp, rfind_ch); - - /* Modifiers. */ - ATF_TP_ADD_TC(tp, append_ap); - ATF_TP_ADD_TC(tp, append_fmt); - ATF_TP_ADD_TC(tp, clear); - ATF_TP_ADD_TC(tp, prepend_ap); - ATF_TP_ADD_TC(tp, prepend_fmt); - - /* Operators. */ - ATF_TP_ADD_TC(tp, equal_cstring); - ATF_TP_ADD_TC(tp, equal_dynstr); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/Kyuafile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/Kyuafile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/Kyuafile (nonexistent) @@ -1,14 +0,0 @@ -syntax("kyuafile", 1) - -test_suite("atf") - -atf_test_program{name="dynstr_test"} -atf_test_program{name="env_test"} -atf_test_program{name="fs_test"} -atf_test_program{name="list_test"} -atf_test_program{name="map_test"} -atf_test_program{name="process_test"} -atf_test_program{name="sanity_test"} -atf_test_program{name="test_helpers_test"} -atf_test_program{name="text_test"} -atf_test_program{name="user_test"} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/map_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/map_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/map_test.c (nonexistent) @@ -1,425 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include - -#include "atf-c/utils.h" - -#include "map.h" -#include "test_helpers.h" - -/* --------------------------------------------------------------------- - * Tests for the "atf_map" type. - * --------------------------------------------------------------------- */ - -/* - * Constructors and destructors. - */ - -ATF_TC(map_init); -ATF_TC_HEAD(map_init, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_map_init function"); -} -ATF_TC_BODY(map_init, tc) -{ - atf_map_t map; - - RE(atf_map_init(&map)); - ATF_REQUIRE_EQ(atf_map_size(&map), 0); - atf_map_fini(&map); -} - -ATF_TC_WITHOUT_HEAD(map_init_charpp_null); -ATF_TC_BODY(map_init_charpp_null, tc) -{ - atf_map_t map; - - RE(atf_map_init_charpp(&map, NULL)); - ATF_REQUIRE_EQ(atf_map_size(&map), 0); - atf_map_fini(&map); -} - -ATF_TC_WITHOUT_HEAD(map_init_charpp_empty); -ATF_TC_BODY(map_init_charpp_empty, tc) -{ - const char *const array[] = { NULL }; - atf_map_t map; - - RE(atf_map_init_charpp(&map, array)); - ATF_REQUIRE_EQ(atf_map_size(&map), 0); - atf_map_fini(&map); -} - -ATF_TC_WITHOUT_HEAD(map_init_charpp_some); -ATF_TC_BODY(map_init_charpp_some, tc) -{ - const char *const array[] = { "K1", "V1", "K2", "V2", NULL }; - atf_map_t map; - atf_map_citer_t iter; - - RE(atf_map_init_charpp(&map, array)); - ATF_REQUIRE_EQ(atf_map_size(&map), 2); - - iter = atf_map_find_c(&map, "K1"); - ATF_REQUIRE(!atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - ATF_REQUIRE(strcmp(atf_map_citer_key(iter), "K1") == 0); - ATF_REQUIRE(strcmp(atf_map_citer_data(iter), "V1") == 0); - - iter = atf_map_find_c(&map, "K2"); - ATF_REQUIRE(!atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - ATF_REQUIRE(strcmp(atf_map_citer_key(iter), "K2") == 0); - ATF_REQUIRE(strcmp(atf_map_citer_data(iter), "V2") == 0); - - atf_map_fini(&map); -} - -ATF_TC_WITHOUT_HEAD(map_init_charpp_short); -ATF_TC_BODY(map_init_charpp_short, tc) -{ - const char *const array[] = { "K1", "V1", "K2", NULL }; - atf_map_t map; - - atf_error_t err = atf_map_init_charpp(&map, array); - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "libc")); -} - -/* - * Getters. - */ - -ATF_TC(find); -ATF_TC_HEAD(find, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_map_find function"); -} -ATF_TC_BODY(find, tc) -{ - atf_map_t map; - char val1[] = "V1"; - char val2[] = "V2"; - atf_map_iter_t iter; - - RE(atf_map_init(&map)); - RE(atf_map_insert(&map, "K1", val1, false)); - RE(atf_map_insert(&map, "K2", val2, false)); - - iter = atf_map_find(&map, "K0"); - ATF_REQUIRE(atf_equal_map_iter_map_iter(iter, atf_map_end(&map))); - - iter = atf_map_find(&map, "K1"); - ATF_REQUIRE(!atf_equal_map_iter_map_iter(iter, atf_map_end(&map))); - ATF_REQUIRE(strcmp(atf_map_iter_key(iter), "K1") == 0); - ATF_REQUIRE(strcmp(atf_map_iter_data(iter), "V1") == 0); - strcpy(atf_map_iter_data(iter), "Z1"); - - iter = atf_map_find(&map, "K1"); - ATF_REQUIRE(!atf_equal_map_iter_map_iter(iter, atf_map_end(&map))); - ATF_REQUIRE(strcmp(atf_map_iter_key(iter), "K1") == 0); - ATF_REQUIRE(strcmp(atf_map_iter_data(iter), "Z1") == 0); - - iter = atf_map_find(&map, "K2"); - ATF_REQUIRE(!atf_equal_map_iter_map_iter(iter, atf_map_end(&map))); - ATF_REQUIRE(strcmp(atf_map_iter_key(iter), "K2") == 0); - ATF_REQUIRE(strcmp(atf_map_iter_data(iter), "V2") == 0); - - atf_map_fini(&map); -} - -ATF_TC(find_c); -ATF_TC_HEAD(find_c, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_map_find_c function"); -} -ATF_TC_BODY(find_c, tc) -{ - atf_map_t map; - char val1[] = "V1"; - char val2[] = "V2"; - atf_map_citer_t iter; - - RE(atf_map_init(&map)); - RE(atf_map_insert(&map, "K1", val1, false)); - RE(atf_map_insert(&map, "K2", val2, false)); - - iter = atf_map_find_c(&map, "K0"); - ATF_REQUIRE(atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - - iter = atf_map_find_c(&map, "K1"); - ATF_REQUIRE(!atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - ATF_REQUIRE(strcmp(atf_map_citer_key(iter), "K1") == 0); - ATF_REQUIRE(strcmp(atf_map_citer_data(iter), "V1") == 0); - - iter = atf_map_find_c(&map, "K2"); - ATF_REQUIRE(!atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - ATF_REQUIRE(strcmp(atf_map_citer_key(iter), "K2") == 0); - ATF_REQUIRE(strcmp(atf_map_citer_data(iter), "V2") == 0); - - atf_map_fini(&map); -} - -ATF_TC_WITHOUT_HEAD(to_charpp_empty); -ATF_TC_BODY(to_charpp_empty, tc) -{ - atf_map_t map; - char **array; - - RE(atf_map_init(&map)); - ATF_REQUIRE((array = atf_map_to_charpp(&map)) != NULL); - atf_map_fini(&map); - - ATF_CHECK_EQ(NULL, array[0]); - atf_utils_free_charpp(array); -} - -ATF_TC_WITHOUT_HEAD(to_charpp_some); -ATF_TC_BODY(to_charpp_some, tc) -{ - atf_map_t map; - char **array; - - char s1[] = "one"; - char s2[] = "two"; - char s3[] = "three"; - - RE(atf_map_init(&map)); - RE(atf_map_insert(&map, "K1", s1, false)); - RE(atf_map_insert(&map, "K2", s2, false)); - RE(atf_map_insert(&map, "K3", s3, false)); - ATF_REQUIRE((array = atf_map_to_charpp(&map)) != NULL); - atf_map_fini(&map); - - ATF_CHECK_STREQ("K1", array[0]); - ATF_CHECK_STREQ("one", array[1]); - ATF_CHECK_STREQ("K2", array[2]); - ATF_CHECK_STREQ("two", array[3]); - ATF_CHECK_STREQ("K3", array[4]); - ATF_CHECK_STREQ("three", array[5]); - ATF_CHECK_EQ(NULL, array[6]); - atf_utils_free_charpp(array); -} - -/* - * Modifiers. - */ - -ATF_TC(map_insert); -ATF_TC_HEAD(map_insert, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_map_insert function"); -} -ATF_TC_BODY(map_insert, tc) -{ - atf_map_t map; - char buf[] = "1st test string"; - char buf2[] = "2nd test string"; - const char *ptr; - atf_map_citer_t iter; - - RE(atf_map_init(&map)); - - printf("Inserting some values\n"); - ATF_REQUIRE_EQ(atf_map_size(&map), 0); - RE(atf_map_insert(&map, "K1", buf, false)); - ATF_REQUIRE_EQ(atf_map_size(&map), 1); - RE(atf_map_insert(&map, "K2", buf, false)); - ATF_REQUIRE_EQ(atf_map_size(&map), 2); - RE(atf_map_insert(&map, "K3", buf, false)); - ATF_REQUIRE_EQ(atf_map_size(&map), 3); - - printf("Replacing a value\n"); - iter = atf_map_find_c(&map, "K3"); - ATF_REQUIRE(!atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - ptr = atf_map_citer_data(iter); - ATF_REQUIRE_EQ(ptr, buf); - RE(atf_map_insert(&map, "K3", buf2, false)); - ATF_REQUIRE_EQ(atf_map_size(&map), 3); - iter = atf_map_find_c(&map, "K3"); - ATF_REQUIRE(!atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - ptr = atf_map_citer_data(iter); - ATF_REQUIRE_EQ(ptr, buf2); - - atf_map_fini(&map); -} - -/* - * Macros. - */ - -ATF_TC(map_for_each); -ATF_TC_HEAD(map_for_each, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_map_for_each macro"); -} -ATF_TC_BODY(map_for_each, tc) -{ - atf_map_t map; - atf_map_iter_t iter; - size_t count, i, size; - char keys[10][5]; - int nums[10]; - - printf("Iterating over empty map\n"); - RE(atf_map_init(&map)); - count = 0; - atf_map_for_each(iter, &map) { - count++; - printf("Item count is now %zd\n", count); - } - ATF_REQUIRE_EQ(count, 0); - atf_map_fini(&map); - - for (size = 0; size <= 10; size++) { - printf("Iterating over map of %zd elements\n", size); - RE(atf_map_init(&map)); - for (i = 0; i < size; i++) { - nums[i] = i + 1; - snprintf(keys[i], sizeof(keys[i]), "%d", nums[i]); - RE(atf_map_insert(&map, keys[i], &nums[i], false)); - } - count = 0; - atf_map_for_each(iter, &map) { - printf("Retrieved item: %d\n", *(int *)atf_map_iter_data(iter)); - count++; - } - ATF_REQUIRE_EQ(count, size); - atf_map_fini(&map); - } -} - -ATF_TC(map_for_each_c); -ATF_TC_HEAD(map_for_each_c, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_map_for_each_c macro"); -} -ATF_TC_BODY(map_for_each_c, tc) -{ - atf_map_t map; - atf_map_citer_t iter; - size_t count, i, size; - char keys[10][5]; - int nums[10]; - - printf("Iterating over empty map\n"); - RE(atf_map_init(&map)); - count = 0; - atf_map_for_each_c(iter, &map) { - count++; - printf("Item count is now %zd\n", count); - } - ATF_REQUIRE_EQ(count, 0); - atf_map_fini(&map); - - for (size = 0; size <= 10; size++) { - printf("Iterating over map of %zd elements\n", size); - RE(atf_map_init(&map)); - for (i = 0; i < size; i++) { - nums[i] = i + 1; - snprintf(keys[i], sizeof(keys[i]), "%d", nums[i]); - RE(atf_map_insert(&map, keys[i], &nums[i], false)); - } - count = 0; - atf_map_for_each_c(iter, &map) { - printf("Retrieved item: %d\n", - *(const int *)atf_map_citer_data(iter)); - count++; - } - ATF_REQUIRE_EQ(count, size); - atf_map_fini(&map); - } -} - -/* - * Other. - */ - -ATF_TC(stable_keys); -ATF_TC_HEAD(stable_keys, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that the keys do not change " - "even if their original values do"); -} -ATF_TC_BODY(stable_keys, tc) -{ - atf_map_t map; - atf_map_citer_t iter; - char key[] = "K1"; - - RE(atf_map_init(&map)); - - RE(atf_map_insert(&map, key, strdup("test-value"), true)); - iter = atf_map_find_c(&map, "K1"); - ATF_REQUIRE(!atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - iter = atf_map_find_c(&map, "K2"); - ATF_REQUIRE(atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - - strcpy(key, "K2"); - iter = atf_map_find_c(&map, "K1"); - ATF_REQUIRE(!atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - iter = atf_map_find_c(&map, "K2"); - ATF_REQUIRE(atf_equal_map_citer_map_citer(iter, atf_map_end_c(&map))); - - atf_map_fini(&map); -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Constructors and destructors. */ - ATF_TP_ADD_TC(tp, map_init); - ATF_TP_ADD_TC(tp, map_init_charpp_null); - ATF_TP_ADD_TC(tp, map_init_charpp_empty); - ATF_TP_ADD_TC(tp, map_init_charpp_some); - ATF_TP_ADD_TC(tp, map_init_charpp_short); - - /* Getters. */ - ATF_TP_ADD_TC(tp, find); - ATF_TP_ADD_TC(tp, find_c); - ATF_TP_ADD_TC(tp, to_charpp_empty); - ATF_TP_ADD_TC(tp, to_charpp_some); - - /* Modifiers. */ - ATF_TP_ADD_TC(tp, map_insert); - - /* Macros. */ - ATF_TP_ADD_TC(tp, map_for_each); - ATF_TP_ADD_TC(tp, map_for_each_c); - - /* Other. */ - ATF_TP_ADD_TC(tp, stable_keys); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/dynstr.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/dynstr.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/dynstr.h (nonexistent) @@ -1,81 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_DYNSTR_H) -#define ATF_C_DYNSTR_H - -#include -#include -#include - -#include - -/* --------------------------------------------------------------------- - * The "atf_dynstr" type. - * --------------------------------------------------------------------- */ - -struct atf_dynstr { - char *m_data; - size_t m_datasize; - size_t m_length; -}; -typedef struct atf_dynstr atf_dynstr_t; - -/* Constants */ -extern const size_t atf_dynstr_npos; - -/* Constructors and destructors */ -atf_error_t atf_dynstr_init(atf_dynstr_t *); -atf_error_t atf_dynstr_init_ap(atf_dynstr_t *, const char *, va_list); -atf_error_t atf_dynstr_init_fmt(atf_dynstr_t *, const char *, ...); -atf_error_t atf_dynstr_init_raw(atf_dynstr_t *, const void *, size_t); -atf_error_t atf_dynstr_init_rep(atf_dynstr_t *, size_t, char); -atf_error_t atf_dynstr_init_substr(atf_dynstr_t *, const atf_dynstr_t *, - size_t, size_t); -atf_error_t atf_dynstr_copy(atf_dynstr_t *, const atf_dynstr_t *); -void atf_dynstr_fini(atf_dynstr_t *); -char *atf_dynstr_fini_disown(atf_dynstr_t *); - -/* Getters */ -const char *atf_dynstr_cstring(const atf_dynstr_t *); -size_t atf_dynstr_length(const atf_dynstr_t *); -size_t atf_dynstr_rfind_ch(const atf_dynstr_t *, char); - -/* Modifiers */ -atf_error_t atf_dynstr_append_ap(atf_dynstr_t *, const char *, va_list); -atf_error_t atf_dynstr_append_fmt(atf_dynstr_t *, const char *, ...); -void atf_dynstr_clear(atf_dynstr_t *); -atf_error_t atf_dynstr_prepend_ap(atf_dynstr_t *, const char *, va_list); -atf_error_t atf_dynstr_prepend_fmt(atf_dynstr_t *, const char *, ...); - -/* Operators */ -bool atf_equal_dynstr_cstring(const atf_dynstr_t *, const char *); -bool atf_equal_dynstr_dynstr(const atf_dynstr_t *, const atf_dynstr_t *); - -#endif /* ATF_C_DYNSTR_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/text_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/text_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/text_test.c (nonexistent) @@ -1,424 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include - -#include - -#include "sanity.h" -#include "test_helpers.h" -#include "text.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -#define REQUIRE_ERROR(exp) \ - do { \ - atf_error_t err = exp; \ - ATF_REQUIRE(atf_is_error(err)); \ - atf_error_free(err); \ - } while (0) - -static -size_t -array_size(const char *words[]) -{ - size_t count; - const char **word; - - count = 0; - for (word = words; *word != NULL; word++) - count++; - - return count; -} - -static -void -check_split(const char *str, const char *delim, const char *words[]) -{ - atf_list_t list; - const char **word; - size_t i; - - printf("Splitting '%s' with delimiter '%s'\n", str, delim); - CE(atf_text_split(str, delim, &list)); - - printf("Expecting %zd words\n", array_size(words)); - ATF_CHECK_EQ(atf_list_size(&list), array_size(words)); - - for (word = words, i = 0; *word != NULL; word++, i++) { - printf("Word at position %zd should be '%s'\n", i, words[i]); - ATF_CHECK_STREQ((const char *)atf_list_index_c(&list, i), words[i]); - } - - atf_list_fini(&list); -} - -static -atf_error_t -word_acum(const char *word, void *data) -{ - char *acum = data; - - strcat(acum, word); - - return atf_no_error(); -} - -static -atf_error_t -word_count(const char *word, void *data) -{ - size_t *counter = data; - - (*counter)++; - - return atf_no_error(); -} - -struct fail_at { - int failpos; - int curpos; -}; - -static -atf_error_t -word_fail_at(const char *word, void *data) -{ - struct fail_at *fa = data; - atf_error_t err; - - if (fa->failpos == fa->curpos) - err = atf_no_memory_error(); /* Just a random error. */ - else { - fa->curpos++; - err = atf_no_error(); - } - - return err; -} - -/* --------------------------------------------------------------------- - * Test cases for the free functions. - * --------------------------------------------------------------------- */ - -ATF_TC(for_each_word); -ATF_TC_HEAD(for_each_word, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_text_for_each_word" - "function"); -} -ATF_TC_BODY(for_each_word, tc) -{ - size_t cnt; - char acum[1024]; - - cnt = 0; - strcpy(acum, ""); - RE(atf_text_for_each_word("1 2 3", " ", word_count, &cnt)); - RE(atf_text_for_each_word("1 2 3", " ", word_acum, acum)); - ATF_REQUIRE(cnt == 3); - ATF_REQUIRE(strcmp(acum, "123") == 0); - - cnt = 0; - strcpy(acum, ""); - RE(atf_text_for_each_word("1 2 3", ".", word_count, &cnt)); - RE(atf_text_for_each_word("1 2 3", ".", word_acum, acum)); - ATF_REQUIRE(cnt == 1); - ATF_REQUIRE(strcmp(acum, "1 2 3") == 0); - - cnt = 0; - strcpy(acum, ""); - RE(atf_text_for_each_word("1 2 3 4 5", " ", word_count, &cnt)); - RE(atf_text_for_each_word("1 2 3 4 5", " ", word_acum, acum)); - ATF_REQUIRE(cnt == 5); - ATF_REQUIRE(strcmp(acum, "12345") == 0); - - cnt = 0; - strcpy(acum, ""); - RE(atf_text_for_each_word("1 2.3.4 5", " .", word_count, &cnt)); - RE(atf_text_for_each_word("1 2.3.4 5", " .", word_acum, acum)); - ATF_REQUIRE(cnt == 5); - ATF_REQUIRE(strcmp(acum, "12345") == 0); - - { - struct fail_at fa; - fa.failpos = 3; - fa.curpos = 0; - atf_error_t err = atf_text_for_each_word("a b c d e", " ", - word_fail_at, &fa); - ATF_REQUIRE(atf_is_error(err)); - ATF_REQUIRE(atf_error_is(err, "no_memory")); - ATF_REQUIRE(fa.curpos == 3); - atf_error_free(err); - } -} - -ATF_TC(format); -ATF_TC_HEAD(format, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the construction of free-form " - "strings using a variable parameters list"); -} -ATF_TC_BODY(format, tc) -{ - char *str; - atf_error_t err; - - err = atf_text_format(&str, "%s %s %d", "Test", "string", 1); - ATF_REQUIRE(!atf_is_error(err)); - ATF_REQUIRE(strcmp(str, "Test string 1") == 0); - free(str); -} - -static -void -format_ap(char **dest, const char *fmt, ...) -{ - va_list ap; - atf_error_t err; - - va_start(ap, fmt); - err = atf_text_format_ap(dest, fmt, ap); - va_end(ap); - - ATF_REQUIRE(!atf_is_error(err)); -} - -ATF_TC(format_ap); -ATF_TC_HEAD(format_ap, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the construction of free-form " - "strings using a va_list argument"); -} -ATF_TC_BODY(format_ap, tc) -{ - char *str; - - format_ap(&str, "%s %s %d", "Test", "string", 1); - ATF_REQUIRE(strcmp(str, "Test string 1") == 0); - free(str); -} - -ATF_TC(split); -ATF_TC_HEAD(split, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the split function"); -} -ATF_TC_BODY(split, tc) -{ - { - const char *words[] = { NULL }; - check_split("", " ", words); - } - - { - const char *words[] = { NULL }; - check_split(" ", " ", words); - } - - { - const char *words[] = { NULL }; - check_split(" ", " ", words); - } - - { - const char *words[] = { "a", "b", NULL }; - check_split("a b", " ", words); - } - - { - const char *words[] = { "a", "b", "c", "d", NULL }; - check_split("a b c d", " ", words); - } - - { - const char *words[] = { "foo", "bar", NULL }; - check_split("foo bar", " ", words); - } - - { - const char *words[] = { "foo", "bar", "baz", "foobar", NULL }; - check_split("foo bar baz foobar", " ", words); - } - - { - const char *words[] = { "foo", "bar", NULL }; - check_split(" foo bar", " ", words); - } - - { - const char *words[] = { "foo", "bar", NULL }; - check_split("foo bar", " ", words); - } - - { - const char *words[] = { "foo", "bar", NULL }; - check_split("foo bar ", " ", words); - } - - { - const char *words[] = { "foo", "bar", NULL }; - check_split(" foo bar ", " ", words); - } -} - -ATF_TC(split_delims); -ATF_TC_HEAD(split_delims, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the split function using " - "different delimiters"); -} -ATF_TC_BODY(split_delims, tc) -{ - - { - const char *words[] = { NULL }; - check_split("", "/", words); - } - - { - const char *words[] = { " ", NULL }; - check_split(" ", "/", words); - } - - { - const char *words[] = { " ", NULL }; - check_split(" ", "/", words); - } - - { - const char *words[] = { "a", "b", NULL }; - check_split("a/b", "/", words); - } - - { - const char *words[] = { "a", "bcd", "ef", NULL }; - check_split("aLONGDELIMbcdLONGDELIMef", "LONGDELIM", words); - } -} - -ATF_TC(to_bool); -ATF_TC_HEAD(to_bool, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_text_to_bool function"); -} -ATF_TC_BODY(to_bool, tc) -{ - bool b; - - RE(atf_text_to_bool("true", &b)); ATF_REQUIRE(b); - RE(atf_text_to_bool("TRUE", &b)); ATF_REQUIRE(b); - RE(atf_text_to_bool("yes", &b)); ATF_REQUIRE(b); - RE(atf_text_to_bool("YES", &b)); ATF_REQUIRE(b); - - RE(atf_text_to_bool("false", &b)); ATF_REQUIRE(!b); - RE(atf_text_to_bool("FALSE", &b)); ATF_REQUIRE(!b); - RE(atf_text_to_bool("no", &b)); ATF_REQUIRE(!b); - RE(atf_text_to_bool("NO", &b)); ATF_REQUIRE(!b); - - b = false; - REQUIRE_ERROR(atf_text_to_bool("", &b)); - ATF_REQUIRE(!b); - b = true; - REQUIRE_ERROR(atf_text_to_bool("", &b)); - ATF_REQUIRE(b); - - b = false; - REQUIRE_ERROR(atf_text_to_bool("tru", &b)); - ATF_REQUIRE(!b); - b = true; - REQUIRE_ERROR(atf_text_to_bool("tru", &b)); - ATF_REQUIRE(b); - - b = false; - REQUIRE_ERROR(atf_text_to_bool("true2", &b)); - ATF_REQUIRE(!b); - b = true; - REQUIRE_ERROR(atf_text_to_bool("true2", &b)); - ATF_REQUIRE(b); - - b = false; - REQUIRE_ERROR(atf_text_to_bool("fals", &b)); - ATF_REQUIRE(!b); - b = true; - REQUIRE_ERROR(atf_text_to_bool("fals", &b)); - ATF_REQUIRE(b); - - b = false; - REQUIRE_ERROR(atf_text_to_bool("false2", &b)); - ATF_REQUIRE(!b); - b = true; - REQUIRE_ERROR(atf_text_to_bool("false2", &b)); - ATF_REQUIRE(b); -} - -ATF_TC(to_long); -ATF_TC_HEAD(to_long, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_text_to_long function"); -} -ATF_TC_BODY(to_long, tc) -{ - long l; - - RE(atf_text_to_long("0", &l)); ATF_REQUIRE_EQ(l, 0); - RE(atf_text_to_long("-5", &l)); ATF_REQUIRE_EQ(l, -5); - RE(atf_text_to_long("5", &l)); ATF_REQUIRE_EQ(l, 5); - RE(atf_text_to_long("123456789", &l)); ATF_REQUIRE_EQ(l, 123456789); - - l = 1212; - REQUIRE_ERROR(atf_text_to_long("", &l)); - ATF_REQUIRE_EQ(l, 1212); - REQUIRE_ERROR(atf_text_to_long("foo", &l)); - ATF_REQUIRE_EQ(l, 1212); - REQUIRE_ERROR(atf_text_to_long("1234x", &l)); - ATF_REQUIRE_EQ(l, 1212); -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, for_each_word); - ATF_TP_ADD_TC(tp, format); - ATF_TP_ADD_TC(tp, format_ap); - ATF_TP_ADD_TC(tp, split); - ATF_TP_ADD_TC(tp, split_delims); - ATF_TP_ADD_TC(tp, to_bool); - ATF_TP_ADD_TC(tp, to_long); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/dynstr.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/dynstr.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/dynstr.c (nonexistent) @@ -1,398 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include -#include -#include - -#include "atf-c/error.h" - -#include "dynstr.h" -#include "sanity.h" -#include "text.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -atf_error_t -resize(atf_dynstr_t *ad, size_t newsize) -{ - char *newdata; - atf_error_t err; - - PRE(newsize > ad->m_datasize); - - newdata = (char *)malloc(newsize); - if (newdata == NULL) { - err = atf_no_memory_error(); - } else { - strcpy(newdata, ad->m_data); - free(ad->m_data); - ad->m_data = newdata; - ad->m_datasize = newsize; - err = atf_no_error(); - } - - return err; -} - -static -atf_error_t -prepend_or_append(atf_dynstr_t *ad, const char *fmt, va_list ap, - bool prepend) -{ - char *aux; - atf_error_t err; - size_t newlen; - va_list ap2; - - va_copy(ap2, ap); - err = atf_text_format_ap(&aux, fmt, ap2); - va_end(ap2); - if (atf_is_error(err)) - goto out; - newlen = ad->m_length + strlen(aux); - - if (newlen + sizeof(char) > ad->m_datasize) { - err = resize(ad, newlen + sizeof(char)); - if (atf_is_error(err)) - goto out_free; - } - - if (prepend) { - memmove(ad->m_data + strlen(aux), ad->m_data, ad->m_length + 1); - memcpy(ad->m_data, aux, strlen(aux)); - } else - strcpy(ad->m_data + ad->m_length, aux); - ad->m_length = newlen; - err = atf_no_error(); - -out_free: - free(aux); -out: - return err; -} - -/* --------------------------------------------------------------------- - * The "atf_dynstr" type. - * --------------------------------------------------------------------- */ - -/* - * Constants. - */ - -const size_t atf_dynstr_npos = SIZE_MAX; - -/* - * Constructors and destructors. - */ - -atf_error_t -atf_dynstr_init(atf_dynstr_t *ad) -{ - atf_error_t err; - - ad->m_data = (char *)malloc(sizeof(char)); - if (ad->m_data == NULL) { - err = atf_no_memory_error(); - goto out; - } - - ad->m_data[0] = '\0'; - ad->m_datasize = 1; - ad->m_length = 0; - err = atf_no_error(); - -out: - return err; -} - -atf_error_t -atf_dynstr_init_ap(atf_dynstr_t *ad, const char *fmt, va_list ap) -{ - atf_error_t err; - - ad->m_datasize = strlen(fmt) + 1; - ad->m_length = 0; - - do { - va_list ap2; - int ret; - - ad->m_datasize *= 2; - ad->m_data = (char *)malloc(ad->m_datasize); - if (ad->m_data == NULL) { - err = atf_no_memory_error(); - goto out; - } - - va_copy(ap2, ap); - ret = vsnprintf(ad->m_data, ad->m_datasize, fmt, ap2); - va_end(ap2); - if (ret < 0) { - free(ad->m_data); - err = atf_libc_error(errno, "Cannot format string"); - goto out; - } - - INV(ret >= 0); - if ((size_t)ret >= ad->m_datasize) { - free(ad->m_data); - ad->m_data = NULL; - } - ad->m_length = ret; - } while (ad->m_length >= ad->m_datasize); - - err = atf_no_error(); -out: - POST(atf_is_error(err) || ad->m_data != NULL); - return err; -} - -atf_error_t -atf_dynstr_init_fmt(atf_dynstr_t *ad, const char *fmt, ...) -{ - va_list ap; - atf_error_t err; - - va_start(ap, fmt); - err = atf_dynstr_init_ap(ad, fmt, ap); - va_end(ap); - - return err; -} - -atf_error_t -atf_dynstr_init_raw(atf_dynstr_t *ad, const void *mem, size_t memlen) -{ - atf_error_t err; - - if (memlen >= SIZE_MAX - 1) { - err = atf_no_memory_error(); - goto out; - } - - ad->m_data = (char *)malloc(memlen + 1); - if (ad->m_data == NULL) { - err = atf_no_memory_error(); - goto out; - } - - ad->m_datasize = memlen + 1; - memcpy(ad->m_data, mem, memlen); - ad->m_data[memlen] = '\0'; - ad->m_length = strlen(ad->m_data); - INV(ad->m_length <= memlen); - err = atf_no_error(); - -out: - return err; -} - -atf_error_t -atf_dynstr_init_rep(atf_dynstr_t *ad, size_t len, char ch) -{ - atf_error_t err; - - if (len == SIZE_MAX) { - err = atf_no_memory_error(); - goto out; - } - - ad->m_datasize = (len + 1) * sizeof(char); - ad->m_data = (char *)malloc(ad->m_datasize); - if (ad->m_data == NULL) { - err = atf_no_memory_error(); - goto out; - } - - memset(ad->m_data, ch, len); - ad->m_data[len] = '\0'; - ad->m_length = len; - err = atf_no_error(); - -out: - return err; -} - -atf_error_t -atf_dynstr_init_substr(atf_dynstr_t *ad, const atf_dynstr_t *src, - size_t beg, size_t end) -{ - if (beg > src->m_length) - beg = src->m_length; - - if (end == atf_dynstr_npos || end > src->m_length) - end = src->m_length; - - return atf_dynstr_init_raw(ad, src->m_data + beg, end - beg); -} - -atf_error_t -atf_dynstr_copy(atf_dynstr_t *dest, const atf_dynstr_t *src) -{ - atf_error_t err; - - dest->m_data = (char *)malloc(src->m_datasize); - if (dest->m_data == NULL) - err = atf_no_memory_error(); - else { - memcpy(dest->m_data, src->m_data, src->m_datasize); - dest->m_datasize = src->m_datasize; - dest->m_length = src->m_length; - err = atf_no_error(); - } - - return err; -} - -void -atf_dynstr_fini(atf_dynstr_t *ad) -{ - INV(ad->m_data != NULL); - free(ad->m_data); -} - -char * -atf_dynstr_fini_disown(atf_dynstr_t *ad) -{ - INV(ad->m_data != NULL); - return ad->m_data; -} - -/* - * Getters. - */ - -const char * -atf_dynstr_cstring(const atf_dynstr_t *ad) -{ - return ad->m_data; -} - -size_t -atf_dynstr_length(const atf_dynstr_t *ad) -{ - return ad->m_length; -} - -size_t -atf_dynstr_rfind_ch(const atf_dynstr_t *ad, char ch) -{ - size_t pos; - - for (pos = ad->m_length; pos > 0 && ad->m_data[pos - 1] != ch; pos--) - ; - - return pos == 0 ? atf_dynstr_npos : pos - 1; -} - -/* - * Modifiers. - */ - -atf_error_t -atf_dynstr_append_ap(atf_dynstr_t *ad, const char *fmt, va_list ap) -{ - atf_error_t err; - va_list ap2; - - va_copy(ap2, ap); - err = prepend_or_append(ad, fmt, ap2, false); - va_end(ap2); - - return err; -} - -atf_error_t -atf_dynstr_append_fmt(atf_dynstr_t *ad, const char *fmt, ...) -{ - va_list ap; - atf_error_t err; - - va_start(ap, fmt); - err = prepend_or_append(ad, fmt, ap, false); - va_end(ap); - - return err; -} - -void -atf_dynstr_clear(atf_dynstr_t *ad) -{ - ad->m_data[0] = '\0'; - ad->m_length = 0; -} - -atf_error_t -atf_dynstr_prepend_ap(atf_dynstr_t *ad, const char *fmt, va_list ap) -{ - atf_error_t err; - va_list ap2; - - va_copy(ap2, ap); - err = prepend_or_append(ad, fmt, ap2, true); - va_end(ap2); - - return err; -} - -atf_error_t -atf_dynstr_prepend_fmt(atf_dynstr_t *ad, const char *fmt, ...) -{ - va_list ap; - atf_error_t err; - - va_start(ap, fmt); - err = prepend_or_append(ad, fmt, ap, true); - va_end(ap); - - return err; -} - -/* - * Operators. - */ - -bool -atf_equal_dynstr_cstring(const atf_dynstr_t *ad, const char *str) -{ - return strcmp(ad->m_data, str) == 0; -} - -bool -atf_equal_dynstr_dynstr(const atf_dynstr_t *s1, const atf_dynstr_t *s2) -{ - return strcmp(s1->m_data, s2->m_data) == 0; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/map.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/map.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/map.c (nonexistent) @@ -1,383 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include - -#include "atf-c/error.h" -#include "atf-c/utils.h" - -#include "map.h" -#include "sanity.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -struct map_entry { - char *m_key; - void *m_value; - bool m_managed; -}; - -static -struct map_entry * -new_entry(const char *key, void *value, bool managed) -{ - struct map_entry *me; - - me = (struct map_entry *)malloc(sizeof(*me)); - if (me != NULL) { - me->m_key = strdup(key); - if (me->m_key == NULL) { - free(me); - me = NULL; - } else { - me->m_value = value; - me->m_managed = managed; - } - } - - return me; -} - -/* --------------------------------------------------------------------- - * The "atf_map_citer" type. - * --------------------------------------------------------------------- */ - -/* - * Getters. - */ - -const char * -atf_map_citer_key(const atf_map_citer_t citer) -{ - const struct map_entry *me = citer.m_entry; - PRE(me != NULL); - return me->m_key; -} - -const void * -atf_map_citer_data(const atf_map_citer_t citer) -{ - const struct map_entry *me = citer.m_entry; - PRE(me != NULL); - return me->m_value; -} - -atf_map_citer_t -atf_map_citer_next(const atf_map_citer_t citer) -{ - atf_map_citer_t newciter; - - newciter = citer; - newciter.m_listiter = atf_list_citer_next(citer.m_listiter); - newciter.m_entry = ((const struct map_entry *) - atf_list_citer_data(newciter.m_listiter)); - - return newciter; -} - -bool -atf_equal_map_citer_map_citer(const atf_map_citer_t i1, - const atf_map_citer_t i2) -{ - return i1.m_map == i2.m_map && i1.m_entry == i2.m_entry; -} - -/* --------------------------------------------------------------------- - * The "atf_map_iter" type. - * --------------------------------------------------------------------- */ - -/* - * Getters. - */ - -const char * -atf_map_iter_key(const atf_map_iter_t iter) -{ - const struct map_entry *me = iter.m_entry; - PRE(me != NULL); - return me->m_key; -} - -void * -atf_map_iter_data(const atf_map_iter_t iter) -{ - const struct map_entry *me = iter.m_entry; - PRE(me != NULL); - return me->m_value; -} - -atf_map_iter_t -atf_map_iter_next(const atf_map_iter_t iter) -{ - atf_map_iter_t newiter; - - newiter = iter; - newiter.m_listiter = atf_list_iter_next(iter.m_listiter); - newiter.m_entry = ((struct map_entry *) - atf_list_iter_data(newiter.m_listiter)); - - return newiter; -} - -bool -atf_equal_map_iter_map_iter(const atf_map_iter_t i1, - const atf_map_iter_t i2) -{ - return i1.m_map == i2.m_map && i1.m_entry == i2.m_entry; -} - -/* --------------------------------------------------------------------- - * The "atf_map" type. - * --------------------------------------------------------------------- */ - -/* - * Constructors and destructors. - */ - -atf_error_t -atf_map_init(atf_map_t *m) -{ - return atf_list_init(&m->m_list); -} - -atf_error_t -atf_map_init_charpp(atf_map_t *m, const char *const *array) -{ - atf_error_t err; - const char *const *ptr = array; - - err = atf_map_init(m); - if (array != NULL) { - while (!atf_is_error(err) && *ptr != NULL) { - const char *key, *value; - - key = *ptr; - INV(key != NULL); - ptr++; - - if ((value = *ptr) == NULL) { - err = atf_libc_error(EINVAL, "List too short; no value for " - "key '%s' provided", key); /* XXX: Not really libc_error */ - break; - } - ptr++; - - err = atf_map_insert(m, key, strdup(value), true); - } - } - - if (atf_is_error(err)) - atf_map_fini(m); - - return err; -} - -void -atf_map_fini(atf_map_t *m) -{ - atf_list_iter_t iter; - - atf_list_for_each(iter, &m->m_list) { - struct map_entry *me = atf_list_iter_data(iter); - - if (me->m_managed) - free(me->m_value); - free(me->m_key); - free(me); - } - atf_list_fini(&m->m_list); -} - -/* - * Getters. - */ - -atf_map_iter_t -atf_map_begin(atf_map_t *m) -{ - atf_map_iter_t iter; - iter.m_map = m; - iter.m_listiter = atf_list_begin(&m->m_list); - iter.m_entry = atf_list_iter_data(iter.m_listiter); - return iter; -} - -atf_map_citer_t -atf_map_begin_c(const atf_map_t *m) -{ - atf_map_citer_t citer; - citer.m_map = m; - citer.m_listiter = atf_list_begin_c(&m->m_list); - citer.m_entry = atf_list_citer_data(citer.m_listiter); - return citer; -} - -atf_map_iter_t -atf_map_end(atf_map_t *m) -{ - atf_map_iter_t iter; - iter.m_map = m; - iter.m_entry = NULL; - iter.m_listiter = atf_list_end(&m->m_list); - return iter; -} - -atf_map_citer_t -atf_map_end_c(const atf_map_t *m) -{ - atf_map_citer_t iter; - iter.m_map = m; - iter.m_entry = NULL; - iter.m_listiter = atf_list_end_c(&m->m_list); - return iter; -} - -atf_map_iter_t -atf_map_find(atf_map_t *m, const char *key) -{ - atf_list_iter_t iter; - - atf_list_for_each(iter, &m->m_list) { - struct map_entry *me = atf_list_iter_data(iter); - - if (strcmp(me->m_key, key) == 0) { - atf_map_iter_t i; - i.m_map = m; - i.m_entry = me; - i.m_listiter = iter; - return i; - } - } - - return atf_map_end(m); -} - -atf_map_citer_t -atf_map_find_c(const atf_map_t *m, const char *key) -{ - atf_list_citer_t iter; - - atf_list_for_each_c(iter, &m->m_list) { - const struct map_entry *me = atf_list_citer_data(iter); - - if (strcmp(me->m_key, key) == 0) { - atf_map_citer_t i; - i.m_map = m; - i.m_entry = me; - i.m_listiter = iter; - return i; - } - } - - return atf_map_end_c(m); -} - -size_t -atf_map_size(const atf_map_t *m) -{ - return atf_list_size(&m->m_list); -} - -char ** -atf_map_to_charpp(const atf_map_t *l) -{ - char **array; - atf_map_citer_t iter; - size_t i; - - array = malloc(sizeof(char *) * (atf_map_size(l) * 2 + 1)); - if (array == NULL) - goto out; - - i = 0; - atf_map_for_each_c(iter, l) { - array[i] = strdup(atf_map_citer_key(iter)); - if (array[i] == NULL) { - atf_utils_free_charpp(array); - array = NULL; - goto out; - } - - array[i + 1] = strdup((const char *)atf_map_citer_data(iter)); - if (array[i + 1] == NULL) { - atf_utils_free_charpp(array); - array = NULL; - goto out; - } - - i += 2; - } - array[i] = NULL; - -out: - return array; -} - -/* - * Modifiers. - */ - -atf_error_t -atf_map_insert(atf_map_t *m, const char *key, void *value, bool managed) -{ - struct map_entry *me; - atf_error_t err; - atf_map_iter_t iter; - - iter = atf_map_find(m, key); - if (atf_equal_map_iter_map_iter(iter, atf_map_end(m))) { - me = new_entry(key, value, managed); - if (me == NULL) - err = atf_no_memory_error(); - else { - err = atf_list_append(&m->m_list, me, false); - if (atf_is_error(err)) { - if (managed) - free(value); - free(me); - } - } - } else { - me = iter.m_entry; - if (me->m_managed) - free(me->m_value); - - INV(strcmp(me->m_key, key) == 0); - me->m_value = value; - me->m_managed = managed; - - err = atf_no_error(); - } - - return err; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/map.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/map.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/map.h (nonexistent) @@ -1,119 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_MAP_H) -#define ATF_C_MAP_H - -#include -#include - -#include - -#include "list.h" - -/* --------------------------------------------------------------------- - * The "atf_map_citer" type. - * --------------------------------------------------------------------- */ - -struct atf_map_citer { - const struct atf_map *m_map; - const void *m_entry; - atf_list_citer_t m_listiter; -}; -typedef struct atf_map_citer atf_map_citer_t; - -/* Getters. */ -const char *atf_map_citer_key(const atf_map_citer_t); -const void *atf_map_citer_data(const atf_map_citer_t); -atf_map_citer_t atf_map_citer_next(const atf_map_citer_t); - -/* Operators. */ -bool atf_equal_map_citer_map_citer(const atf_map_citer_t, - const atf_map_citer_t); - -/* --------------------------------------------------------------------- - * The "atf_map_iter" type. - * --------------------------------------------------------------------- */ - -struct atf_map_iter { - struct atf_map *m_map; - void *m_entry; - atf_list_iter_t m_listiter; -}; -typedef struct atf_map_iter atf_map_iter_t; - -/* Getters. */ -const char *atf_map_iter_key(const atf_map_iter_t); -void *atf_map_iter_data(const atf_map_iter_t); -atf_map_iter_t atf_map_iter_next(const atf_map_iter_t); - -/* Operators. */ -bool atf_equal_map_iter_map_iter(const atf_map_iter_t, - const atf_map_iter_t); - -/* --------------------------------------------------------------------- - * The "atf_map" type. - * --------------------------------------------------------------------- */ - -/* A list-based map. Typically very inefficient, but our maps are small - * enough. */ -struct atf_map { - atf_list_t m_list; -}; -typedef struct atf_map atf_map_t; - -/* Constructors and destructors */ -atf_error_t atf_map_init(atf_map_t *); -atf_error_t atf_map_init_charpp(atf_map_t *, const char *const *); -void atf_map_fini(atf_map_t *); - -/* Getters. */ -atf_map_iter_t atf_map_begin(atf_map_t *); -atf_map_citer_t atf_map_begin_c(const atf_map_t *); -atf_map_iter_t atf_map_end(atf_map_t *); -atf_map_citer_t atf_map_end_c(const atf_map_t *); -atf_map_iter_t atf_map_find(atf_map_t *, const char *); -atf_map_citer_t atf_map_find_c(const atf_map_t *, const char *); -size_t atf_map_size(const atf_map_t *); -char **atf_map_to_charpp(const atf_map_t *); - -/* Modifiers. */ -atf_error_t atf_map_insert(atf_map_t *, const char *, void *, bool); - -/* Macros. */ -#define atf_map_for_each(iter, map) \ - for (iter = atf_map_begin(map); \ - !atf_equal_map_iter_map_iter((iter), atf_map_end(map)); \ - iter = atf_map_iter_next(iter)) -#define atf_map_for_each_c(iter, map) \ - for (iter = atf_map_begin_c(map); \ - !atf_equal_map_citer_map_citer((iter), atf_map_end_c(map)); \ - iter = atf_map_citer_next(iter)) - -#endif /* ATF_C_MAP_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/Atffile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/Atffile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/Atffile (nonexistent) @@ -1,14 +0,0 @@ -Content-Type: application/X-atf-atffile; version="1" - -prop: test-suite = atf - -tp: dynstr_test -tp: env_test -tp: fs_test -tp: list_test -tp: map_test -tp: process_test -tp: sanity_test -tp: test_helpers_test -tp: text_test -tp: user_test Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/sanity.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/sanity.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/sanity.c (nonexistent) @@ -1,78 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -#include -#include -#include -#include - -#include "sanity.h" - -static -void -fail(const char *fmt, ...) -{ - va_list ap; - char buf[4096]; - - va_start(ap, fmt); - vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); - warnx("%s", buf); - warnx("%s", ""); - warnx("This is probably a bug in this application or one of the " - "libraries it uses. If you believe this problem is caused " - "by, or is related to " PACKAGE_STRING ", please report it " - "to " PACKAGE_BUGREPORT " and provide as many detatils as " - "possible describing how you got to this condition."); - - abort(); -} - -void -atf_sanity_inv(const char *file, int line, const char *cond) -{ - fail("Invariant check failed at %s:%d: %s", file, line, cond); -} - -void -atf_sanity_pre(const char *file, int line, const char *cond) -{ - fail("Precondition check failed at %s:%d: %s", file, line, cond); -} - -void -atf_sanity_post(const char *file, int line, const char *cond) -{ - fail("Postcondition check failed at %s:%d: %s", file, line, cond); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/sanity.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/sanity.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/sanity.h (nonexistent) @@ -1,73 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_SANITY_H) -#define ATF_C_SANITY_H - -void atf_sanity_inv(const char *, int, const char *); -void atf_sanity_pre(const char *, int, const char *); -void atf_sanity_post(const char *, int, const char *); - -#if !defined(NDEBUG) - -#define INV(x) \ - do { \ - if (!(x)) \ - atf_sanity_inv(__FILE__, __LINE__, #x); \ - } while (0) -#define PRE(x) \ - do { \ - if (!(x)) \ - atf_sanity_pre(__FILE__, __LINE__, #x); \ - } while (0) -#define POST(x) \ - do { \ - if (!(x)) \ - atf_sanity_post(__FILE__, __LINE__, #x); \ - } while (0) - -#else /* defined(NDEBUG) */ - -#define INV(x) \ - do { \ - } while (0) - -#define PRE(x) \ - do { \ - } while (0) - -#define POST(x) \ - do { \ - } while (0) - -#endif /* !defined(NDEBUG) */ - -#define UNREACHABLE INV(0) - -#endif /* ATF_C_SANITY_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/list.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/list.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/list.c (nonexistent) @@ -1,392 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include "atf-c/error.h" -#include "atf-c/utils.h" - -#include "list.h" -#include "sanity.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -struct list_entry { - struct list_entry *m_prev; - struct list_entry *m_next; - void *m_object; - bool m_managed; -}; - -static -atf_list_citer_t -entry_to_citer(const atf_list_t *l, const struct list_entry *le) -{ - atf_list_citer_t iter; - iter.m_list = l; - iter.m_entry = le; - return iter; -} - -static -atf_list_iter_t -entry_to_iter(atf_list_t *l, struct list_entry *le) -{ - atf_list_iter_t iter; - iter.m_list = l; - iter.m_entry = le; - return iter; -} - -static -struct list_entry * -new_entry(void *object, bool managed) -{ - struct list_entry *le; - - le = (struct list_entry *)malloc(sizeof(*le)); - if (le != NULL) { - le->m_prev = le->m_next = NULL; - le->m_object = object; - le->m_managed = managed; - } else - free(object); - - return le; -} - -static -void -delete_entry(struct list_entry *le) -{ - if (le->m_managed) - free(le->m_object); - - free(le); -} - -static -struct list_entry * -new_entry_and_link(void *object, bool managed, struct list_entry *prev, - struct list_entry *next) -{ - struct list_entry *le; - - le = new_entry(object, managed); - if (le != NULL) { - le->m_prev = prev; - le->m_next = next; - - prev->m_next = le; - next->m_prev = le; - } - - return le; -} - -/* --------------------------------------------------------------------- - * The "atf_list_citer" type. - * --------------------------------------------------------------------- */ - -/* - * Getters. - */ - -const void * -atf_list_citer_data(const atf_list_citer_t citer) -{ - const struct list_entry *le = citer.m_entry; - PRE(le != NULL); - return le->m_object; -} - -atf_list_citer_t -atf_list_citer_next(const atf_list_citer_t citer) -{ - const struct list_entry *le = citer.m_entry; - atf_list_citer_t newciter; - - PRE(le != NULL); - - newciter = citer; - newciter.m_entry = le->m_next; - - return newciter; -} - -bool -atf_equal_list_citer_list_citer(const atf_list_citer_t i1, - const atf_list_citer_t i2) -{ - return i1.m_list == i2.m_list && i1.m_entry == i2.m_entry; -} - -/* --------------------------------------------------------------------- - * The "atf_list_iter" type. - * --------------------------------------------------------------------- */ - -/* - * Getters. - */ - -void * -atf_list_iter_data(const atf_list_iter_t iter) -{ - const struct list_entry *le = iter.m_entry; - PRE(le != NULL); - return le->m_object; -} - -atf_list_iter_t -atf_list_iter_next(const atf_list_iter_t iter) -{ - const struct list_entry *le = iter.m_entry; - atf_list_iter_t newiter; - - PRE(le != NULL); - - newiter = iter; - newiter.m_entry = le->m_next; - - return newiter; -} - -bool -atf_equal_list_iter_list_iter(const atf_list_iter_t i1, - const atf_list_iter_t i2) -{ - return i1.m_list == i2.m_list && i1.m_entry == i2.m_entry; -} - -/* --------------------------------------------------------------------- - * The "atf_list" type. - * --------------------------------------------------------------------- */ - -/* - * Constructors and destructors. - */ - -atf_error_t -atf_list_init(atf_list_t *l) -{ - struct list_entry *lebeg, *leend; - - lebeg = new_entry(NULL, false); - if (lebeg == NULL) { - return atf_no_memory_error(); - } - - leend = new_entry(NULL, false); - if (leend == NULL) { - free(lebeg); - return atf_no_memory_error(); - } - - lebeg->m_next = leend; - lebeg->m_prev = NULL; - - leend->m_next = NULL; - leend->m_prev = lebeg; - - l->m_size = 0; - l->m_begin = lebeg; - l->m_end = leend; - - return atf_no_error(); -} - -void -atf_list_fini(atf_list_t *l) -{ - struct list_entry *le; - size_t freed; - - le = (struct list_entry *)l->m_begin; - freed = 0; - while (le != NULL) { - struct list_entry *lenext; - - lenext = le->m_next; - delete_entry(le); - le = lenext; - - freed++; - } - INV(freed == l->m_size + 2); -} - -/* - * Getters. - */ - -atf_list_iter_t -atf_list_begin(atf_list_t *l) -{ - struct list_entry *le = l->m_begin; - return entry_to_iter(l, le->m_next); -} - -atf_list_citer_t -atf_list_begin_c(const atf_list_t *l) -{ - const struct list_entry *le = l->m_begin; - return entry_to_citer(l, le->m_next); -} - -atf_list_iter_t -atf_list_end(atf_list_t *l) -{ - return entry_to_iter(l, l->m_end); -} - -atf_list_citer_t -atf_list_end_c(const atf_list_t *l) -{ - return entry_to_citer(l, l->m_end); -} - -void * -atf_list_index(atf_list_t *list, const size_t idx) -{ - atf_list_iter_t iter; - - PRE(idx < atf_list_size(list)); - - iter = atf_list_begin(list); - { - size_t pos = 0; - while (pos < idx && - !atf_equal_list_iter_list_iter((iter), atf_list_end(list))) { - iter = atf_list_iter_next(iter); - pos++; - } - } - return atf_list_iter_data(iter); -} - -const void * -atf_list_index_c(const atf_list_t *list, const size_t idx) -{ - atf_list_citer_t iter; - - PRE(idx < atf_list_size(list)); - - iter = atf_list_begin_c(list); - { - size_t pos = 0; - while (pos < idx && - !atf_equal_list_citer_list_citer((iter), - atf_list_end_c(list))) { - iter = atf_list_citer_next(iter); - pos++; - } - } - return atf_list_citer_data(iter); -} - -size_t -atf_list_size(const atf_list_t *l) -{ - return l->m_size; -} - -char ** -atf_list_to_charpp(const atf_list_t *l) -{ - char **array; - atf_list_citer_t iter; - size_t i; - - array = malloc(sizeof(char *) * (atf_list_size(l) + 1)); - if (array == NULL) - goto out; - - i = 0; - atf_list_for_each_c(iter, l) { - array[i] = strdup((const char *)atf_list_citer_data(iter)); - if (array[i] == NULL) { - atf_utils_free_charpp(array); - array = NULL; - goto out; - } - - i++; - } - array[i] = NULL; - -out: - return array; -} - -/* - * Modifiers. - */ - -atf_error_t -atf_list_append(atf_list_t *l, void *data, bool managed) -{ - struct list_entry *le, *next, *prev; - atf_error_t err; - - next = (struct list_entry *)l->m_end; - prev = next->m_prev; - le = new_entry_and_link(data, managed, prev, next); - if (le == NULL) - err = atf_no_memory_error(); - else { - l->m_size++; - err = atf_no_error(); - } - - return err; -} - -void -atf_list_append_list(atf_list_t *l, atf_list_t *src) -{ - struct list_entry *e1, *e2, *ghost1, *ghost2; - - ghost1 = (struct list_entry *)l->m_end; - ghost2 = (struct list_entry *)src->m_begin; - - e1 = ghost1->m_prev; - e2 = ghost2->m_next; - - delete_entry(ghost1); - delete_entry(ghost2); - - e1->m_next = e2; - e2->m_prev = e1; - - l->m_end = src->m_end; - l->m_size += src->m_size; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/test_helpers.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/test_helpers.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/test_helpers.c (nonexistent) @@ -1,214 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include -#include - -#include "atf-c/build.h" -#include "atf-c/check.h" -#include "atf-c/config.h" -#include "atf-c/error.h" -#include "atf-c/macros.h" - -#include "dynstr.h" -#include "fs.h" -#include "process.h" -#include "test_helpers.h" - -static -void -build_check_c_o_aux(const char *path, const char *failmsg) -{ - bool success; - atf_dynstr_t iflag; - const char *optargs[2]; - - RE(atf_dynstr_init_fmt(&iflag, "-I%s", atf_config_get("atf_includedir"))); - - optargs[0] = atf_dynstr_cstring(&iflag); - optargs[1] = NULL; - - RE(atf_check_build_c_o(path, "test.o", optargs, &success)); - - atf_dynstr_fini(&iflag); - - if (!success) - atf_tc_fail(failmsg); -} - -void -build_check_c_o(const atf_tc_t *tc, const char *sfile, const char *failmsg) -{ - atf_fs_path_t path; - - RE(atf_fs_path_init_fmt(&path, "%s/%s", - atf_tc_get_config_var(tc, "srcdir"), sfile)); - build_check_c_o_aux(atf_fs_path_cstring(&path), failmsg); - atf_fs_path_fini(&path); -} - -void -header_check(const atf_tc_t *tc, const char *hdrname) -{ - FILE *srcfile; - char failmsg[128]; - - srcfile = fopen("test.c", "w"); - ATF_REQUIRE(srcfile != NULL); - fprintf(srcfile, "#include <%s>\n", hdrname); - fclose(srcfile); - - snprintf(failmsg, sizeof(failmsg), - "Header check failed; %s is not self-contained", hdrname); - - build_check_c_o_aux("test.c", failmsg); -} - -void -get_process_helpers_path(const atf_tc_t *tc, const bool is_detail, - atf_fs_path_t *path) -{ - RE(atf_fs_path_init_fmt(path, "%s/%sprocess_helpers", - atf_tc_get_config_var(tc, "srcdir"), - is_detail ? "" : "detail/")); -} - -bool -grep_string(const atf_dynstr_t *str, const char *regex) -{ - int res; - regex_t preg; - - printf("Looking for '%s' in '%s'\n", regex, atf_dynstr_cstring(str)); - ATF_REQUIRE(regcomp(&preg, regex, REG_EXTENDED) == 0); - - res = regexec(&preg, atf_dynstr_cstring(str), 0, NULL, 0); - ATF_REQUIRE(res == 0 || res == REG_NOMATCH); - - regfree(&preg); - - return res == 0; -} - -bool -grep_file(const char *file, const char *regex, ...) -{ - bool done, found; - int fd; - va_list ap; - atf_dynstr_t formatted; - - va_start(ap, regex); - RE(atf_dynstr_init_ap(&formatted, regex, ap)); - va_end(ap); - - done = false; - found = false; - ATF_REQUIRE((fd = open(file, O_RDONLY)) != -1); - do { - atf_dynstr_t line; - - RE(atf_dynstr_init(&line)); - - done = read_line(fd, &line); - if (!done) - found = grep_string(&line, atf_dynstr_cstring(&formatted)); - - atf_dynstr_fini(&line); - } while (!found && !done); - close(fd); - - atf_dynstr_fini(&formatted); - - return found; -} - -bool -read_line(int fd, atf_dynstr_t *dest) -{ - char ch; - ssize_t cnt; - - while ((cnt = read(fd, &ch, sizeof(ch))) == sizeof(ch) && - ch != '\n') { - const atf_error_t err = atf_dynstr_append_fmt(dest, "%c", ch); - ATF_REQUIRE(!atf_is_error(err)); - } - ATF_REQUIRE(cnt != -1); - - return cnt == 0; -} - -struct run_h_tc_data { - atf_tc_t *m_tc; - const char *m_resname; -}; - -static -void -run_h_tc_child(void *v) -{ - struct run_h_tc_data *data = (struct run_h_tc_data *)v; - - RE(atf_tc_run(data->m_tc, data->m_resname)); -} - -/* TODO: Investigate if it's worth to add this functionality as part of - * the public API. I.e. a function to easily run a test case body in a - * subprocess. */ -void -run_h_tc(atf_tc_t *tc, const char *outname, const char *errname, - const char *resname) -{ - atf_fs_path_t outpath, errpath; - atf_process_stream_t outb, errb; - atf_process_child_t child; - atf_process_status_t status; - - RE(atf_fs_path_init_fmt(&outpath, outname)); - RE(atf_fs_path_init_fmt(&errpath, errname)); - - struct run_h_tc_data data = { tc, resname }; - - RE(atf_process_stream_init_redirect_path(&outb, &outpath)); - RE(atf_process_stream_init_redirect_path(&errb, &errpath)); - RE(atf_process_fork(&child, run_h_tc_child, &outb, &errb, &data)); - atf_process_stream_fini(&errb); - atf_process_stream_fini(&outb); - - RE(atf_process_child_wait(&child, &status)); - ATF_CHECK(atf_process_status_exited(&status)); - atf_process_status_fini(&status); - - atf_fs_path_fini(&errpath); - atf_fs_path_fini(&outpath); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/user.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/user.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/user.c (nonexistent) @@ -1,78 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include - -#include "sanity.h" -#include "user.h" - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -uid_t -atf_user_euid(void) -{ - return geteuid(); -} - -bool -atf_user_is_member_of_group(gid_t gid) -{ - static gid_t groups[NGROUPS_MAX]; - static int ngroups = -1; - bool found; - int i; - - if (ngroups == -1) { - ngroups = getgroups(NGROUPS_MAX, groups); - INV(ngroups >= 0); - } - - found = false; - for (i = 0; !found && i < ngroups; i++) - if (groups[i] == gid) - found = true; - return found; -} - -bool -atf_user_is_root(void) -{ - return geteuid() == 0; -} - -bool -atf_user_is_unprivileged(void) -{ - return geteuid() != 0; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/list_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/list_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/list_test.c (nonexistent) @@ -1,369 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include - -#include "atf-c/utils.h" - -#include "list.h" -#include "test_helpers.h" - -/* --------------------------------------------------------------------- - * Tests for the "atf_list" type. - * --------------------------------------------------------------------- */ - -/* - * Constructors and destructors. - */ - -ATF_TC(list_init); -ATF_TC_HEAD(list_init, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_list_init function"); -} -ATF_TC_BODY(list_init, tc) -{ - atf_list_t list; - - RE(atf_list_init(&list)); - ATF_REQUIRE_EQ(atf_list_size(&list), 0); - atf_list_fini(&list); -} - -/* - * Getters. - */ - -ATF_TC(list_index); -ATF_TC_HEAD(list_index, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_list_index function"); -} -ATF_TC_BODY(list_index, tc) -{ - atf_list_t list; - int i1 = 1; - int i2 = 5; - int i3 = 9; - - RE(atf_list_init(&list)); - RE(atf_list_append(&list, &i1, false)); - RE(atf_list_append(&list, &i2, false)); - RE(atf_list_append(&list, &i3, false)); - - ATF_CHECK_EQ(*(int *)atf_list_index(&list, 0), 1); - ATF_CHECK_EQ(*(int *)atf_list_index(&list, 1), 5); - ATF_CHECK_EQ(*(int *)atf_list_index(&list, 2), 9); - - atf_list_fini(&list); -} - -ATF_TC(list_index_c); -ATF_TC_HEAD(list_index_c, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_list_index_c function"); -} -ATF_TC_BODY(list_index_c, tc) -{ - atf_list_t list; - int i1 = 1; - int i2 = 5; - int i3 = 9; - - RE(atf_list_init(&list)); - RE(atf_list_append(&list, &i1, false)); - RE(atf_list_append(&list, &i2, false)); - RE(atf_list_append(&list, &i3, false)); - - ATF_CHECK_EQ(*(const int *)atf_list_index_c(&list, 0), 1); - ATF_CHECK_EQ(*(const int *)atf_list_index_c(&list, 1), 5); - ATF_CHECK_EQ(*(const int *)atf_list_index_c(&list, 2), 9); - - atf_list_fini(&list); -} - -ATF_TC_WITHOUT_HEAD(list_to_charpp_empty); -ATF_TC_BODY(list_to_charpp_empty, tc) -{ - atf_list_t list; - char **array; - - RE(atf_list_init(&list)); - ATF_REQUIRE((array = atf_list_to_charpp(&list)) != NULL); - atf_list_fini(&list); - - ATF_CHECK_EQ(NULL, array[0]); - atf_utils_free_charpp(array); -} - -ATF_TC_WITHOUT_HEAD(list_to_charpp_some); -ATF_TC_BODY(list_to_charpp_some, tc) -{ - atf_list_t list; - char **array; - - char s1[] = "one"; - char s2[] = "two"; - char s3[] = "three"; - - RE(atf_list_init(&list)); - RE(atf_list_append(&list, s1, false)); - RE(atf_list_append(&list, s2, false)); - RE(atf_list_append(&list, s3, false)); - ATF_REQUIRE((array = atf_list_to_charpp(&list)) != NULL); - atf_list_fini(&list); - - ATF_CHECK_STREQ("one", array[0]); - ATF_CHECK_STREQ("two", array[1]); - ATF_CHECK_STREQ("three", array[2]); - ATF_CHECK_EQ(NULL, array[3]); - atf_utils_free_charpp(array); -} - -/* - * Modifiers. - */ - -ATF_TC(list_append); -ATF_TC_HEAD(list_append, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_list_append function"); -} -ATF_TC_BODY(list_append, tc) -{ - atf_list_t list; - size_t i; - char buf[] = "Test string"; - - RE(atf_list_init(&list)); - for (i = 0; i < 1024; i++) { - ATF_REQUIRE_EQ(atf_list_size(&list), i); - RE(atf_list_append(&list, buf, false)); - } - atf_list_fini(&list); -} - -ATF_TC(list_append_list); -ATF_TC_HEAD(list_append_list, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_list_append_list " - "function"); -} -ATF_TC_BODY(list_append_list, tc) -{ - { - atf_list_t l1, l2; - - RE(atf_list_init(&l1)); - RE(atf_list_init(&l2)); - - atf_list_append_list(&l1, &l2); - ATF_CHECK_EQ(atf_list_size(&l1), 0); - - atf_list_fini(&l1); - } - - { - atf_list_t l1, l2; - int item = 5; - - RE(atf_list_init(&l1)); - RE(atf_list_append(&l1, &item, false)); - RE(atf_list_init(&l2)); - - atf_list_append_list(&l1, &l2); - ATF_CHECK_EQ(atf_list_size(&l1), 1); - ATF_CHECK_EQ(*(int *)atf_list_index(&l1, 0), item); - - atf_list_fini(&l1); - } - - { - atf_list_t l1, l2; - int item = 5; - - RE(atf_list_init(&l1)); - RE(atf_list_init(&l2)); - RE(atf_list_append(&l2, &item, false)); - - atf_list_append_list(&l1, &l2); - ATF_CHECK_EQ(atf_list_size(&l1), 1); - ATF_CHECK_EQ(*(int *)atf_list_index(&l1, 0), item); - - atf_list_fini(&l1); - } - - { - atf_list_t l1, l2; - int item1 = 5; - int item2 = 9; - - RE(atf_list_init(&l1)); - RE(atf_list_append(&l1, &item1, false)); - RE(atf_list_init(&l2)); - RE(atf_list_append(&l2, &item2, false)); - - atf_list_append_list(&l1, &l2); - ATF_CHECK_EQ(atf_list_size(&l1), 2); - ATF_CHECK_EQ(*(int *)atf_list_index(&l1, 0), item1); - ATF_CHECK_EQ(*(int *)atf_list_index(&l1, 1), item2); - - atf_list_fini(&l1); - } - - { - atf_list_t l1, l2; - atf_list_citer_t end1, end2; - - RE(atf_list_init(&l1)); - RE(atf_list_init(&l2)); - - end1 = atf_list_end_c(&l1); - end2 = atf_list_end_c(&l2); - /* XXX Shouldn't query m_entry here. */ - ATF_CHECK(end1.m_entry != end2.m_entry); - - atf_list_append_list(&l1, &l2); - ATF_CHECK(atf_list_end_c(&l1).m_entry == end2.m_entry); - - atf_list_fini(&l1); - } -} - -/* - * Macros. - */ - -ATF_TC(list_for_each); -ATF_TC_HEAD(list_for_each, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_list_for_each macro"); -} -ATF_TC_BODY(list_for_each, tc) -{ - atf_list_t list; - atf_list_iter_t iter; - size_t count, i, size; - int nums[10]; - - printf("Iterating over empty list\n"); - RE(atf_list_init(&list)); - count = 0; - atf_list_for_each(iter, &list) { - count++; - printf("Item count is now %zd\n", count); - } - ATF_REQUIRE_EQ(count, 0); - atf_list_fini(&list); - - for (size = 0; size <= 10; size++) { - printf("Iterating over list of %zd elements\n", size); - RE(atf_list_init(&list)); - for (i = 0; i < size; i++) { - nums[i] = i + 1; - RE(atf_list_append(&list, &nums[i], false)); - } - count = 0; - atf_list_for_each(iter, &list) { - printf("Retrieved item: %d\n", *(int *)atf_list_iter_data(iter)); - count++; - } - ATF_REQUIRE_EQ(count, size); - atf_list_fini(&list); - } -} - -ATF_TC(list_for_each_c); -ATF_TC_HEAD(list_for_each_c, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the atf_list_for_each_c macro"); -} -ATF_TC_BODY(list_for_each_c, tc) -{ - atf_list_t list; - atf_list_citer_t iter; - size_t count, i, size; - int nums[10]; - - printf("Iterating over empty list\n"); - RE(atf_list_init(&list)); - count = 0; - atf_list_for_each_c(iter, &list) { - count++; - printf("Item count is now %zd\n", count); - } - ATF_REQUIRE_EQ(count, 0); - atf_list_fini(&list); - - for (size = 0; size <= 10; size++) { - printf("Iterating over list of %zd elements\n", size); - RE(atf_list_init(&list)); - for (i = 0; i < size; i++) { - nums[i] = i + 1; - RE(atf_list_append(&list, &nums[i], false)); - } - count = 0; - atf_list_for_each_c(iter, &list) { - printf("Retrieved item: %d\n", - *(const int *)atf_list_citer_data(iter)); - count++; - } - ATF_REQUIRE_EQ(count, size); - atf_list_fini(&list); - } -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Constructors and destructors. */ - ATF_TP_ADD_TC(tp, list_init); - - /* Getters. */ - ATF_TP_ADD_TC(tp, list_index); - ATF_TP_ADD_TC(tp, list_index_c); - ATF_TP_ADD_TC(tp, list_to_charpp_empty); - ATF_TP_ADD_TC(tp, list_to_charpp_some); - - /* Modifiers. */ - ATF_TP_ADD_TC(tp, list_append); - ATF_TP_ADD_TC(tp, list_append_list); - - /* Macros. */ - ATF_TP_ADD_TC(tp, list_for_each); - ATF_TP_ADD_TC(tp, list_for_each_c); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/list.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/list.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/list.h (nonexistent) @@ -1,115 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_LIST_H) -#define ATF_C_LIST_H - -#include -#include -#include - -#include - -/* --------------------------------------------------------------------- - * The "atf_list_citer" type. - * --------------------------------------------------------------------- */ - -struct atf_list_citer { - const struct atf_list *m_list; - const void *m_entry; -}; -typedef struct atf_list_citer atf_list_citer_t; - -/* Getters. */ -const void *atf_list_citer_data(const atf_list_citer_t); -atf_list_citer_t atf_list_citer_next(const atf_list_citer_t); - -/* Operators. */ -bool atf_equal_list_citer_list_citer(const atf_list_citer_t, - const atf_list_citer_t); - -/* --------------------------------------------------------------------- - * The "atf_list_iter" type. - * --------------------------------------------------------------------- */ - -struct atf_list_iter { - struct atf_list *m_list; - void *m_entry; -}; -typedef struct atf_list_iter atf_list_iter_t; - -/* Getters. */ -void *atf_list_iter_data(const atf_list_iter_t); -atf_list_iter_t atf_list_iter_next(const atf_list_iter_t); - -/* Operators. */ -bool atf_equal_list_iter_list_iter(const atf_list_iter_t, - const atf_list_iter_t); - -/* --------------------------------------------------------------------- - * The "atf_list" type. - * --------------------------------------------------------------------- */ - -struct atf_list { - void *m_begin; - void *m_end; - - size_t m_size; -}; -typedef struct atf_list atf_list_t; - -/* Constructors and destructors */ -atf_error_t atf_list_init(atf_list_t *); -void atf_list_fini(atf_list_t *); - -/* Getters. */ -atf_list_iter_t atf_list_begin(atf_list_t *); -atf_list_citer_t atf_list_begin_c(const atf_list_t *); -atf_list_iter_t atf_list_end(atf_list_t *); -atf_list_citer_t atf_list_end_c(const atf_list_t *); -void *atf_list_index(atf_list_t *, const size_t); -const void *atf_list_index_c(const atf_list_t *, const size_t); -size_t atf_list_size(const atf_list_t *); -char **atf_list_to_charpp(const atf_list_t *); - -/* Modifiers. */ -atf_error_t atf_list_append(atf_list_t *, void *, bool); -void atf_list_append_list(atf_list_t *, atf_list_t *); - -/* Macros. */ -#define atf_list_for_each(iter, list) \ - for (iter = atf_list_begin(list); \ - !atf_equal_list_iter_list_iter((iter), atf_list_end(list)); \ - iter = atf_list_iter_next(iter)) -#define atf_list_for_each_c(iter, list) \ - for (iter = atf_list_begin_c(list); \ - !atf_equal_list_citer_list_citer((iter), atf_list_end_c(list)); \ - iter = atf_list_citer_next(iter)) - -#endif /* ATF_C_LIST_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/user.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/user.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/user.h (nonexistent) @@ -1,49 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_USER_H) -#define ATF_C_USER_H - -#include - -#include - -/* TODO: Would be nice to have an atf_user_t type and transform all of - * the functions below to methods. */ - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -uid_t atf_user_euid(void); -bool atf_user_is_member_of_group(gid_t); -bool atf_user_is_root(void); -bool atf_user_is_unprivileged(void); - -#endif /* !defined(ATF_C_USER_H) */ Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/fs.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/fs.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/fs.h (nonexistent) @@ -1,133 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_FS_H) -#define ATF_C_FS_H - -#include -#include - -#include -#include - -#include - -#include "dynstr.h" - -/* --------------------------------------------------------------------- - * The "atf_fs_path" type. - * --------------------------------------------------------------------- */ - -struct atf_fs_path { - atf_dynstr_t m_data; -}; -typedef struct atf_fs_path atf_fs_path_t; - -/* Constructors/destructors. */ -atf_error_t atf_fs_path_init_ap(atf_fs_path_t *, const char *, va_list); -atf_error_t atf_fs_path_init_fmt(atf_fs_path_t *, const char *, ...); -atf_error_t atf_fs_path_copy(atf_fs_path_t *, const atf_fs_path_t *); -void atf_fs_path_fini(atf_fs_path_t *); - -/* Getters. */ -atf_error_t atf_fs_path_branch_path(const atf_fs_path_t *, atf_fs_path_t *); -const char *atf_fs_path_cstring(const atf_fs_path_t *); -atf_error_t atf_fs_path_leaf_name(const atf_fs_path_t *, atf_dynstr_t *); -bool atf_fs_path_is_absolute(const atf_fs_path_t *); -bool atf_fs_path_is_root(const atf_fs_path_t *); - -/* Modifiers. */ -atf_error_t atf_fs_path_append_ap(atf_fs_path_t *, const char *, va_list); -atf_error_t atf_fs_path_append_fmt(atf_fs_path_t *, const char *, ...); -atf_error_t atf_fs_path_append_path(atf_fs_path_t *, const atf_fs_path_t *); -atf_error_t atf_fs_path_to_absolute(const atf_fs_path_t *, atf_fs_path_t *); - -/* Operators. */ -bool atf_equal_fs_path_fs_path(const atf_fs_path_t *, - const atf_fs_path_t *); - -/* --------------------------------------------------------------------- - * The "atf_fs_stat" type. - * --------------------------------------------------------------------- */ - -struct atf_fs_stat { - int m_type; - struct stat m_sb; -}; -typedef struct atf_fs_stat atf_fs_stat_t; - -/* Constants. */ -extern const int atf_fs_stat_blk_type; -extern const int atf_fs_stat_chr_type; -extern const int atf_fs_stat_dir_type; -extern const int atf_fs_stat_fifo_type; -extern const int atf_fs_stat_lnk_type; -extern const int atf_fs_stat_reg_type; -extern const int atf_fs_stat_sock_type; -extern const int atf_fs_stat_wht_type; - -/* Constructors/destructors. */ -atf_error_t atf_fs_stat_init(atf_fs_stat_t *, const atf_fs_path_t *); -void atf_fs_stat_copy(atf_fs_stat_t *, const atf_fs_stat_t *); -void atf_fs_stat_fini(atf_fs_stat_t *); - -/* Getters. */ -dev_t atf_fs_stat_get_device(const atf_fs_stat_t *); -ino_t atf_fs_stat_get_inode(const atf_fs_stat_t *); -mode_t atf_fs_stat_get_mode(const atf_fs_stat_t *); -off_t atf_fs_stat_get_size(const atf_fs_stat_t *); -int atf_fs_stat_get_type(const atf_fs_stat_t *); -bool atf_fs_stat_is_owner_readable(const atf_fs_stat_t *); -bool atf_fs_stat_is_owner_writable(const atf_fs_stat_t *); -bool atf_fs_stat_is_owner_executable(const atf_fs_stat_t *); -bool atf_fs_stat_is_group_readable(const atf_fs_stat_t *); -bool atf_fs_stat_is_group_writable(const atf_fs_stat_t *); -bool atf_fs_stat_is_group_executable(const atf_fs_stat_t *); -bool atf_fs_stat_is_other_readable(const atf_fs_stat_t *); -bool atf_fs_stat_is_other_writable(const atf_fs_stat_t *); -bool atf_fs_stat_is_other_executable(const atf_fs_stat_t *); - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -extern const int atf_fs_access_f; -extern const int atf_fs_access_r; -extern const int atf_fs_access_w; -extern const int atf_fs_access_x; - -atf_error_t atf_fs_eaccess(const atf_fs_path_t *, int); -atf_error_t atf_fs_exists(const atf_fs_path_t *, bool *); -atf_error_t atf_fs_getcwd(atf_fs_path_t *); -atf_error_t atf_fs_mkdtemp(atf_fs_path_t *); -atf_error_t atf_fs_mkstemp(atf_fs_path_t *, int *); -atf_error_t atf_fs_rmdir(const atf_fs_path_t *); -atf_error_t atf_fs_unlink(const atf_fs_path_t *); - -#endif /* !defined(ATF_C_FS_H) */ Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/fs.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/fs.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/fs.c (nonexistent) @@ -1,887 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "atf-c/error.h" - -#include "fs.h" -#include "sanity.h" -#include "text.h" -#include "user.h" - -/* --------------------------------------------------------------------- - * Prototypes for auxiliary functions. - * --------------------------------------------------------------------- */ - -static bool check_umask(const mode_t, const mode_t); -static atf_error_t copy_contents(const atf_fs_path_t *, char **); -static mode_t current_umask(void); -static atf_error_t do_mkdtemp(char *); -static atf_error_t normalize(atf_dynstr_t *, char *); -static atf_error_t normalize_ap(atf_dynstr_t *, const char *, va_list); -static void replace_contents(atf_fs_path_t *, const char *); -static const char *stat_type_to_string(const int); - -/* --------------------------------------------------------------------- - * The "invalid_umask" error type. - * --------------------------------------------------------------------- */ - -struct invalid_umask_error_data { - /* One of atf_fs_stat_*_type. */ - int m_type; - - /* The original path causing the error. */ - /* XXX: Ideally this would be an atf_fs_path_t, but if we create it - * from the error constructor, we cannot delete the path later on. - * Can't remember why atf_error_new does not take a hook for - * deletion. */ - char m_path[1024]; - - /* The umask that caused the error. */ - mode_t m_umask; -}; -typedef struct invalid_umask_error_data invalid_umask_error_data_t; - -static -void -invalid_umask_format(const atf_error_t err, char *buf, size_t buflen) -{ - const invalid_umask_error_data_t *data; - - PRE(atf_error_is(err, "invalid_umask")); - - data = atf_error_data(err); - snprintf(buf, buflen, "Could not create the temporary %s %s because " - "it will not have enough access rights due to the current " - "umask %05o", stat_type_to_string(data->m_type), - data->m_path, (unsigned int)data->m_umask); -} - -static -atf_error_t -invalid_umask_error(const atf_fs_path_t *path, const int type, - const mode_t failing_mask) -{ - atf_error_t err; - invalid_umask_error_data_t data; - - data.m_type = type; - - strncpy(data.m_path, atf_fs_path_cstring(path), sizeof(data.m_path)); - data.m_path[sizeof(data.m_path) - 1] = '\0'; - - data.m_umask = failing_mask; - - err = atf_error_new("invalid_umask", &data, sizeof(data), - invalid_umask_format); - - return err; -} - -/* --------------------------------------------------------------------- - * The "unknown_file_type" error type. - * --------------------------------------------------------------------- */ - -struct unknown_type_error_data { - const char *m_path; - int m_type; -}; -typedef struct unknown_type_error_data unknown_type_error_data_t; - -static -void -unknown_type_format(const atf_error_t err, char *buf, size_t buflen) -{ - const unknown_type_error_data_t *data; - - PRE(atf_error_is(err, "unknown_type")); - - data = atf_error_data(err); - snprintf(buf, buflen, "Unknown file type %d of %s", data->m_type, - data->m_path); -} - -static -atf_error_t -unknown_type_error(const char *path, int type) -{ - atf_error_t err; - unknown_type_error_data_t data; - - data.m_path = path; - data.m_type = type; - - err = atf_error_new("unknown_type", &data, sizeof(data), - unknown_type_format); - - return err; -} - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -bool -check_umask(const mode_t exp_mode, const mode_t min_mode) -{ - const mode_t actual_mode = (~current_umask() & exp_mode); - return (actual_mode & min_mode) == min_mode; -} - -static -atf_error_t -copy_contents(const atf_fs_path_t *p, char **buf) -{ - atf_error_t err; - char *str; - - str = (char *)malloc(atf_dynstr_length(&p->m_data) + 1); - if (str == NULL) - err = atf_no_memory_error(); - else { - strcpy(str, atf_dynstr_cstring(&p->m_data)); - *buf = str; - err = atf_no_error(); - } - - return err; -} - -static -mode_t -current_umask(void) -{ - const mode_t current = umask(0); - (void)umask(current); - return current; -} - -static -atf_error_t -do_mkdtemp(char *tmpl) -{ - atf_error_t err; - - PRE(strstr(tmpl, "XXXXXX") != NULL); - - if (mkdtemp(tmpl) == NULL) - err = atf_libc_error(errno, "Cannot create temporary directory " - "with template '%s'", tmpl); - else - err = atf_no_error(); - - return err; -} - -static -atf_error_t -do_mkstemp(char *tmpl, int *fdout) -{ - atf_error_t err; - - PRE(strstr(tmpl, "XXXXXX") != NULL); - - *fdout = mkstemp(tmpl); - if (*fdout == -1) - err = atf_libc_error(errno, "Cannot create temporary file " - "with template '%s'", tmpl); - - else - err = atf_no_error(); - - return err; -} - -static -atf_error_t -normalize(atf_dynstr_t *d, char *p) -{ - const char *ptr; - char *last; - atf_error_t err; - bool first; - - PRE(strlen(p) > 0); - PRE(atf_dynstr_length(d) == 0); - - if (p[0] == '/') - err = atf_dynstr_append_fmt(d, "/"); - else - err = atf_no_error(); - - first = true; - last = NULL; /* Silence GCC warning. */ - ptr = strtok_r(p, "/", &last); - while (!atf_is_error(err) && ptr != NULL) { - if (strlen(ptr) > 0) { - err = atf_dynstr_append_fmt(d, "%s%s", first ? "" : "/", ptr); - first = false; - } - - ptr = strtok_r(NULL, "/", &last); - } - - return err; -} - -static -atf_error_t -normalize_ap(atf_dynstr_t *d, const char *p, va_list ap) -{ - char *str; - atf_error_t err; - va_list ap2; - - err = atf_dynstr_init(d); - if (atf_is_error(err)) - goto out; - - va_copy(ap2, ap); - err = atf_text_format_ap(&str, p, ap2); - va_end(ap2); - if (atf_is_error(err)) - atf_dynstr_fini(d); - else { - err = normalize(d, str); - free(str); - } - -out: - return err; -} - -static -void -replace_contents(atf_fs_path_t *p, const char *buf) -{ - atf_error_t err; - - PRE(atf_dynstr_length(&p->m_data) == strlen(buf)); - - atf_dynstr_clear(&p->m_data); - err = atf_dynstr_append_fmt(&p->m_data, "%s", buf); - - INV(!atf_is_error(err)); -} - -static -const char * -stat_type_to_string(const int type) -{ - const char *str; - - if (type == atf_fs_stat_blk_type) - str = "block device"; - else if (type == atf_fs_stat_chr_type) - str = "character device"; - else if (type == atf_fs_stat_dir_type) - str = "directory"; - else if (type == atf_fs_stat_fifo_type) - str = "named pipe"; - else if (type == atf_fs_stat_lnk_type) - str = "symbolic link"; - else if (type == atf_fs_stat_reg_type) - str = "regular file"; - else if (type == atf_fs_stat_sock_type) - str = "socket"; - else if (type == atf_fs_stat_wht_type) - str = "whiteout"; - else { - UNREACHABLE; - str = NULL; - } - - return str; -} - -/* --------------------------------------------------------------------- - * The "atf_fs_path" type. - * --------------------------------------------------------------------- */ - -/* - * Constructors/destructors. - */ - -atf_error_t -atf_fs_path_init_ap(atf_fs_path_t *p, const char *fmt, va_list ap) -{ - atf_error_t err; - va_list ap2; - - va_copy(ap2, ap); - err = normalize_ap(&p->m_data, fmt, ap2); - va_end(ap2); - - return err; -} - -atf_error_t -atf_fs_path_init_fmt(atf_fs_path_t *p, const char *fmt, ...) -{ - va_list ap; - atf_error_t err; - - va_start(ap, fmt); - err = atf_fs_path_init_ap(p, fmt, ap); - va_end(ap); - - return err; -} - -atf_error_t -atf_fs_path_copy(atf_fs_path_t *dest, const atf_fs_path_t *src) -{ - return atf_dynstr_copy(&dest->m_data, &src->m_data); -} - -void -atf_fs_path_fini(atf_fs_path_t *p) -{ - atf_dynstr_fini(&p->m_data); -} - -/* - * Getters. - */ - -atf_error_t -atf_fs_path_branch_path(const atf_fs_path_t *p, atf_fs_path_t *bp) -{ - const size_t endpos = atf_dynstr_rfind_ch(&p->m_data, '/'); - atf_error_t err; - - if (endpos == atf_dynstr_npos) - err = atf_fs_path_init_fmt(bp, "."); - else if (endpos == 0) - err = atf_fs_path_init_fmt(bp, "/"); - else - err = atf_dynstr_init_substr(&bp->m_data, &p->m_data, 0, endpos); - -#if defined(HAVE_CONST_DIRNAME) - INV(atf_equal_dynstr_cstring(&bp->m_data, - dirname(atf_dynstr_cstring(&p->m_data)))); -#endif /* defined(HAVE_CONST_DIRNAME) */ - - return err; -} - -const char * -atf_fs_path_cstring(const atf_fs_path_t *p) -{ - return atf_dynstr_cstring(&p->m_data); -} - -atf_error_t -atf_fs_path_leaf_name(const atf_fs_path_t *p, atf_dynstr_t *ln) -{ - size_t begpos = atf_dynstr_rfind_ch(&p->m_data, '/'); - atf_error_t err; - - if (begpos == atf_dynstr_npos) - begpos = 0; - else - begpos++; - - err = atf_dynstr_init_substr(ln, &p->m_data, begpos, atf_dynstr_npos); - -#if defined(HAVE_CONST_BASENAME) - INV(atf_equal_dynstr_cstring(ln, - basename(atf_dynstr_cstring(&p->m_data)))); -#endif /* defined(HAVE_CONST_BASENAME) */ - - return err; -} - -bool -atf_fs_path_is_absolute(const atf_fs_path_t *p) -{ - return atf_dynstr_cstring(&p->m_data)[0] == '/'; -} - -bool -atf_fs_path_is_root(const atf_fs_path_t *p) -{ - return atf_equal_dynstr_cstring(&p->m_data, "/"); -} - -/* - * Modifiers. - */ - -atf_error_t -atf_fs_path_append_ap(atf_fs_path_t *p, const char *fmt, va_list ap) -{ - atf_dynstr_t aux; - atf_error_t err; - va_list ap2; - - va_copy(ap2, ap); - err = normalize_ap(&aux, fmt, ap2); - va_end(ap2); - if (!atf_is_error(err)) { - const char *auxstr = atf_dynstr_cstring(&aux); - const bool needslash = auxstr[0] != '/'; - - err = atf_dynstr_append_fmt(&p->m_data, "%s%s", - needslash ? "/" : "", auxstr); - - atf_dynstr_fini(&aux); - } - - return err; -} - -atf_error_t -atf_fs_path_append_fmt(atf_fs_path_t *p, const char *fmt, ...) -{ - va_list ap; - atf_error_t err; - - va_start(ap, fmt); - err = atf_fs_path_append_ap(p, fmt, ap); - va_end(ap); - - return err; -} - -atf_error_t -atf_fs_path_append_path(atf_fs_path_t *p, const atf_fs_path_t *p2) -{ - return atf_fs_path_append_fmt(p, "%s", atf_dynstr_cstring(&p2->m_data)); -} - -atf_error_t -atf_fs_path_to_absolute(const atf_fs_path_t *p, atf_fs_path_t *pa) -{ - atf_error_t err; - - PRE(!atf_fs_path_is_absolute(p)); - - err = atf_fs_getcwd(pa); - if (atf_is_error(err)) - goto out; - - err = atf_fs_path_append_path(pa, p); - if (atf_is_error(err)) - atf_fs_path_fini(pa); - -out: - return err; -} - -/* - * Operators. - */ - -bool atf_equal_fs_path_fs_path(const atf_fs_path_t *p1, - const atf_fs_path_t *p2) -{ - return atf_equal_dynstr_dynstr(&p1->m_data, &p2->m_data); -} - -/* --------------------------------------------------------------------- - * The "atf_fs_path" type. - * --------------------------------------------------------------------- */ - -/* - * Constants. - */ - -const int atf_fs_stat_blk_type = 1; -const int atf_fs_stat_chr_type = 2; -const int atf_fs_stat_dir_type = 3; -const int atf_fs_stat_fifo_type = 4; -const int atf_fs_stat_lnk_type = 5; -const int atf_fs_stat_reg_type = 6; -const int atf_fs_stat_sock_type = 7; -const int atf_fs_stat_wht_type = 8; - -/* - * Constructors/destructors. - */ - -atf_error_t -atf_fs_stat_init(atf_fs_stat_t *st, const atf_fs_path_t *p) -{ - atf_error_t err; - const char *pstr = atf_fs_path_cstring(p); - - if (lstat(pstr, &st->m_sb) == -1) { - err = atf_libc_error(errno, "Cannot get information of %s; " - "lstat(2) failed", pstr); - } else { - int type = st->m_sb.st_mode & S_IFMT; - err = atf_no_error(); - switch (type) { - case S_IFBLK: st->m_type = atf_fs_stat_blk_type; break; - case S_IFCHR: st->m_type = atf_fs_stat_chr_type; break; - case S_IFDIR: st->m_type = atf_fs_stat_dir_type; break; - case S_IFIFO: st->m_type = atf_fs_stat_fifo_type; break; - case S_IFLNK: st->m_type = atf_fs_stat_lnk_type; break; - case S_IFREG: st->m_type = atf_fs_stat_reg_type; break; - case S_IFSOCK: st->m_type = atf_fs_stat_sock_type; break; -#if defined(S_IFWHT) - case S_IFWHT: st->m_type = atf_fs_stat_wht_type; break; -#endif - default: - err = unknown_type_error(pstr, type); - } - } - - return err; -} - -void -atf_fs_stat_copy(atf_fs_stat_t *dest, const atf_fs_stat_t *src) -{ - dest->m_type = src->m_type; - dest->m_sb = src->m_sb; -} - -void -atf_fs_stat_fini(atf_fs_stat_t *st) -{ -} - -/* - * Getters. - */ - -dev_t -atf_fs_stat_get_device(const atf_fs_stat_t *st) -{ - return st->m_sb.st_dev; -} - -ino_t -atf_fs_stat_get_inode(const atf_fs_stat_t *st) -{ - return st->m_sb.st_ino; -} - -mode_t -atf_fs_stat_get_mode(const atf_fs_stat_t *st) -{ - return st->m_sb.st_mode & ~S_IFMT; -} - -off_t -atf_fs_stat_get_size(const atf_fs_stat_t *st) -{ - return st->m_sb.st_size; -} - -int -atf_fs_stat_get_type(const atf_fs_stat_t *st) -{ - return st->m_type; -} - -bool -atf_fs_stat_is_owner_readable(const atf_fs_stat_t *st) -{ - return st->m_sb.st_mode & S_IRUSR; -} - -bool -atf_fs_stat_is_owner_writable(const atf_fs_stat_t *st) -{ - return st->m_sb.st_mode & S_IWUSR; -} - -bool -atf_fs_stat_is_owner_executable(const atf_fs_stat_t *st) -{ - return st->m_sb.st_mode & S_IXUSR; -} - -bool -atf_fs_stat_is_group_readable(const atf_fs_stat_t *st) -{ - return st->m_sb.st_mode & S_IRGRP; -} - -bool -atf_fs_stat_is_group_writable(const atf_fs_stat_t *st) -{ - return st->m_sb.st_mode & S_IWGRP; -} - -bool -atf_fs_stat_is_group_executable(const atf_fs_stat_t *st) -{ - return st->m_sb.st_mode & S_IXGRP; -} - -bool -atf_fs_stat_is_other_readable(const atf_fs_stat_t *st) -{ - return st->m_sb.st_mode & S_IROTH; -} - -bool -atf_fs_stat_is_other_writable(const atf_fs_stat_t *st) -{ - return st->m_sb.st_mode & S_IWOTH; -} - -bool -atf_fs_stat_is_other_executable(const atf_fs_stat_t *st) -{ - return st->m_sb.st_mode & S_IXOTH; -} - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -const int atf_fs_access_f = 1 << 0; -const int atf_fs_access_r = 1 << 1; -const int atf_fs_access_w = 1 << 2; -const int atf_fs_access_x = 1 << 3; - -/* - * An implementation of access(2) but using the effective user value - * instead of the real one. Also avoids false positives for root when - * asking for execute permissions, which appear in SunOS. - */ -atf_error_t -atf_fs_eaccess(const atf_fs_path_t *p, int mode) -{ - atf_error_t err; - struct stat st; - bool ok; - - PRE(mode & atf_fs_access_f || mode & atf_fs_access_r || - mode & atf_fs_access_w || mode & atf_fs_access_x); - - if (lstat(atf_fs_path_cstring(p), &st) == -1) { - err = atf_libc_error(errno, "Cannot get information from file %s", - atf_fs_path_cstring(p)); - goto out; - } - - err = atf_no_error(); - - /* Early return if we are only checking for existence and the file - * exists (stat call returned). */ - if (mode & atf_fs_access_f) - goto out; - - ok = false; - if (atf_user_is_root()) { - if (!ok && !(mode & atf_fs_access_x)) { - /* Allow root to read/write any file. */ - ok = true; - } - - if (!ok && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) { - /* Allow root to execute the file if any of its execution bits - * are set. */ - ok = true; - } - } else { - if (!ok && (atf_user_euid() == st.st_uid)) { - ok = ((mode & atf_fs_access_r) && (st.st_mode & S_IRUSR)) || - ((mode & atf_fs_access_w) && (st.st_mode & S_IWUSR)) || - ((mode & atf_fs_access_x) && (st.st_mode & S_IXUSR)); - } - if (!ok && atf_user_is_member_of_group(st.st_gid)) { - ok = ((mode & atf_fs_access_r) && (st.st_mode & S_IRGRP)) || - ((mode & atf_fs_access_w) && (st.st_mode & S_IWGRP)) || - ((mode & atf_fs_access_x) && (st.st_mode & S_IXGRP)); - } - if (!ok && ((atf_user_euid() != st.st_uid) && - !atf_user_is_member_of_group(st.st_gid))) { - ok = ((mode & atf_fs_access_r) && (st.st_mode & S_IROTH)) || - ((mode & atf_fs_access_w) && (st.st_mode & S_IWOTH)) || - ((mode & atf_fs_access_x) && (st.st_mode & S_IXOTH)); - } - } - - if (!ok) - err = atf_libc_error(EACCES, "Access check failed"); - -out: - return err; -} - -atf_error_t -atf_fs_exists(const atf_fs_path_t *p, bool *b) -{ - atf_error_t err; - - err = atf_fs_eaccess(p, atf_fs_access_f); - if (atf_is_error(err)) { - if (atf_error_is(err, "libc") && atf_libc_error_code(err) == ENOENT) { - atf_error_free(err); - err = atf_no_error(); - *b = false; - } - } else - *b = true; - - return err; -} - -atf_error_t -atf_fs_getcwd(atf_fs_path_t *p) -{ - atf_error_t err; - char *cwd; - -#if defined(HAVE_GETCWD_DYN) - cwd = getcwd(NULL, 0); -#else - cwd = getcwd(NULL, MAXPATHLEN); -#endif - if (cwd == NULL) { - err = atf_libc_error(errno, "Cannot determine current directory"); - goto out; - } - - err = atf_fs_path_init_fmt(p, "%s", cwd); - free(cwd); - -out: - return err; -} - -atf_error_t -atf_fs_mkdtemp(atf_fs_path_t *p) -{ - atf_error_t err; - char *buf; - - if (!check_umask(S_IRWXU, S_IRWXU)) { - err = invalid_umask_error(p, atf_fs_stat_dir_type, current_umask()); - goto out; - } - - err = copy_contents(p, &buf); - if (atf_is_error(err)) - goto out; - - err = do_mkdtemp(buf); - if (atf_is_error(err)) - goto out_buf; - - replace_contents(p, buf); - - INV(!atf_is_error(err)); -out_buf: - free(buf); -out: - return err; -} - -atf_error_t -atf_fs_mkstemp(atf_fs_path_t *p, int *fdout) -{ - atf_error_t err; - char *buf; - int fd; - - if (!check_umask(S_IRWXU, S_IRWXU)) { - err = invalid_umask_error(p, atf_fs_stat_reg_type, current_umask()); - goto out; - } - - err = copy_contents(p, &buf); - if (atf_is_error(err)) - goto out; - - err = do_mkstemp(buf, &fd); - if (atf_is_error(err)) - goto out_buf; - - replace_contents(p, buf); - *fdout = fd; - - INV(!atf_is_error(err)); -out_buf: - free(buf); -out: - return err; -} - -atf_error_t -atf_fs_rmdir(const atf_fs_path_t *p) -{ - atf_error_t err; - - if (rmdir(atf_fs_path_cstring(p))) { - if (errno == EEXIST) { - /* Some operating systems (e.g. OpenSolaris 200906) return - * EEXIST instead of ENOTEMPTY for non-empty directories. - * Homogenize the return value so that callers don't need - * to bother about differences in operating systems. */ - errno = ENOTEMPTY; - } - err = atf_libc_error(errno, "Cannot remove directory"); - } else - err = atf_no_error(); - - return err; -} - -atf_error_t -atf_fs_unlink(const atf_fs_path_t *p) -{ - atf_error_t err; - const char *path; - - path = atf_fs_path_cstring(p); - - if (unlink(path) != 0) - err = atf_libc_error(errno, "Cannot unlink file: '%s'", path); - else - err = atf_no_error(); - - return err; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/test_helpers.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/test_helpers.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/test_helpers.h (nonexistent) @@ -1,76 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if defined(TESTS_ATF_ATF_C_TEST_HELPERS_H) -# error "Cannot include test_helpers.h more than once." -#else -# define TESTS_ATF_ATF_C_TEST_HELPERS_H -#endif - -#include - -#include "atf-c/error_fwd.h" - -struct atf_dynstr; -struct atf_fs_path; - -#define CE(stm) ATF_CHECK(!atf_is_error(stm)) -#define RE(stm) ATF_REQUIRE(!atf_is_error(stm)) - -#define HEADER_TC(name, hdrname) \ - ATF_TC(name); \ - ATF_TC_HEAD(name, tc) \ - { \ - atf_tc_set_md_var(tc, "descr", "Tests that the " hdrname " file can " \ - "be included on its own, without any prerequisites"); \ - } \ - ATF_TC_BODY(name, tc) \ - { \ - header_check(tc, hdrname); \ - } - -#define BUILD_TC(name, sfile, descr, failmsg) \ - ATF_TC(name); \ - ATF_TC_HEAD(name, tc) \ - { \ - atf_tc_set_md_var(tc, "descr", descr); \ - } \ - ATF_TC_BODY(name, tc) \ - { \ - build_check_c_o(tc, sfile, failmsg); \ - } - -void build_check_c_o(const atf_tc_t *, const char *, const char *); -void header_check(const atf_tc_t *, const char *); -void get_process_helpers_path(const atf_tc_t *, const bool, - struct atf_fs_path *); -bool grep_string(const struct atf_dynstr *, const char *); -bool grep_file(const char *, const char *, ...); -bool read_line(int, struct atf_dynstr *); -void run_h_tc(atf_tc_t *, const char *, const char *, const char *); Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/test_helpers_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/test_helpers_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/test_helpers_test.c (nonexistent) @@ -1,185 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include - -#include - -#include "dynstr.h" -#include "test_helpers.h" - -/* --------------------------------------------------------------------- - * Test cases for the free functions. - * --------------------------------------------------------------------- */ - -/* TODO: Add checks for build_check_c_o and the macros defined in the - * header file. */ - -ATF_TC(grep_string); -ATF_TC_HEAD(grep_string, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the grep_string helper " - "function"); -} -ATF_TC_BODY(grep_string, tc) -{ - atf_dynstr_t str; - - atf_dynstr_init_fmt(&str, "a string - aaaabbbb"); - ATF_CHECK(grep_string(&str, "a string")); - ATF_CHECK(grep_string(&str, "^a string")); - ATF_CHECK(grep_string(&str, "aaaabbbb$")); - ATF_CHECK(grep_string(&str, "aa.*bb")); - ATF_CHECK(!grep_string(&str, "foo")); - ATF_CHECK(!grep_string(&str, "bar")); - ATF_CHECK(!grep_string(&str, "aaaaa")); - - atf_dynstr_fini(&str); -} - - -ATF_TC(grep_file); -ATF_TC_HEAD(grep_file, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the grep_file helper function"); -} -ATF_TC_BODY(grep_file, tc) -{ - FILE *f; - - f = fopen("test.txt", "w"); - ATF_CHECK(f != NULL); - fprintf(f, "line1\n"); - fprintf(f, "the second line\n"); - fprintf(f, "aaaabbbb\n"); - fclose(f); - - ATF_CHECK(grep_file("test.txt", "line1")); - ATF_CHECK(grep_file("test.txt", "line%d", 1)); - ATF_CHECK(grep_file("test.txt", "second line")); - ATF_CHECK(grep_file("test.txt", "aa.*bb")); - ATF_CHECK(!grep_file("test.txt", "foo")); - ATF_CHECK(!grep_file("test.txt", "bar")); - ATF_CHECK(!grep_file("test.txt", "aaaaa")); -} - -ATF_TC(read_line); -ATF_TC_HEAD(read_line, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the read_line function"); -} -ATF_TC_BODY(read_line, tc) -{ - const char *l1 = "First line with % formatting % characters %"; - const char *l2 = "Second line; much longer than the first one"; - const char *l3 = "Last line, without terminator"; - - { - FILE *f; - - f = fopen("test", "w"); - ATF_REQUIRE(f != NULL); - fclose(f); - } - - { - int fd; - atf_dynstr_t dest; - bool eof; - - fd = open("test", O_RDONLY); - ATF_REQUIRE(fd != -1); - - RE(atf_dynstr_init(&dest)); - eof = read_line(fd, &dest); - ATF_REQUIRE(eof); - atf_dynstr_fini(&dest); - } - - { - FILE *f; - - f = fopen("test", "w"); - ATF_REQUIRE(f != NULL); - - fprintf(f, "%s\n", l1); - fprintf(f, "%s\n", l2); - fprintf(f, "%s", l3); - - fclose(f); - } - - { - int fd; - atf_dynstr_t dest; - bool eof; - - fd = open("test", O_RDONLY); - ATF_REQUIRE(fd != -1); - - RE(atf_dynstr_init(&dest)); - eof = read_line(fd, &dest); - ATF_REQUIRE(!eof); - printf("1st line: >%s<\n", atf_dynstr_cstring(&dest)); - ATF_REQUIRE(atf_equal_dynstr_cstring(&dest, l1)); - atf_dynstr_fini(&dest); - - RE(atf_dynstr_init(&dest)); - eof = read_line(fd, &dest); - ATF_REQUIRE(!eof); - printf("2nd line: >%s<\n", atf_dynstr_cstring(&dest)); - ATF_REQUIRE(atf_equal_dynstr_cstring(&dest, l2)); - atf_dynstr_fini(&dest); - - RE(atf_dynstr_init(&dest)); - eof = read_line(fd, &dest); - ATF_REQUIRE(eof); - printf("3rd line: >%s<\n", atf_dynstr_cstring(&dest)); - ATF_REQUIRE(atf_equal_dynstr_cstring(&dest, l3)); - atf_dynstr_fini(&dest); - - close(fd); - } -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Add the tests for the free functions. */ - ATF_TP_ADD_TC(tp, grep_string); - ATF_TP_ADD_TC(tp, grep_file); - ATF_TP_ADD_TC(tp, read_line); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/user_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/user_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/user_test.c (nonexistent) @@ -1,141 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include -#include -#include - -#include - -#include "test_helpers.h" -#include "user.h" - -/* --------------------------------------------------------------------- - * Test cases for the free functions. - * --------------------------------------------------------------------- */ - -ATF_TC(euid); -ATF_TC_HEAD(euid, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_user_euid function"); -} -ATF_TC_BODY(euid, tc) -{ - ATF_REQUIRE_EQ(atf_user_euid(), geteuid()); -} - -ATF_TC(is_member_of_group); -ATF_TC_HEAD(is_member_of_group, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_user_is_member_of_group " - "function"); -} -ATF_TC_BODY(is_member_of_group, tc) -{ - gid_t gids[NGROUPS_MAX]; - gid_t g, maxgid; - int ngids; - - { - int i; - - ngids = getgroups(NGROUPS_MAX, gids); - if (ngids == -1) - atf_tc_fail("Call to getgroups failed"); - maxgid = 0; - for (i = 0; i < ngids; i++) { - if (maxgid < gids[i]) - maxgid = gids[i]; - } - printf("User belongs to %d groups\n", ngids); - printf("Last GID is %d\n", maxgid); - } - - for (g = 0; g < maxgid; g++) { - bool found = false; - int i; - - for (i = 0; !found && i < ngids; i++) { - if (gids[i] == g) - found = true; - } - - if (found) { - printf("Checking if user belongs to group %d\n", g); - ATF_REQUIRE(atf_user_is_member_of_group(g)); - } else { - printf("Checking if user does not belong to group %d\n", g); - ATF_REQUIRE(!atf_user_is_member_of_group(g)); - } - } -} - -ATF_TC(is_root); -ATF_TC_HEAD(is_root, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_user_is_root function"); -} -ATF_TC_BODY(is_root, tc) -{ - if (geteuid() == 0) - ATF_REQUIRE(atf_user_is_root()); - else - ATF_REQUIRE(!atf_user_is_root()); -} - -ATF_TC(is_unprivileged); -ATF_TC_HEAD(is_unprivileged, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_user_is_unprivileged " - "function"); -} -ATF_TC_BODY(is_unprivileged, tc) -{ - if (geteuid() != 0) - ATF_REQUIRE(atf_user_is_unprivileged()); - else - ATF_REQUIRE(!atf_user_is_unprivileged()); -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, euid); - ATF_TP_ADD_TC(tp, is_member_of_group); - ATF_TP_ADD_TC(tp, is_root); - ATF_TP_ADD_TC(tp, is_unprivileged); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/detail/tp_main.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/detail/tp_main.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/detail/tp_main.c (nonexistent) @@ -1,601 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010, 2011 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if defined(HAVE_CONFIG_H) -#include "bconfig.h" -#endif - -#include -#include -#include -#include -#include -#include - -#include "atf-c/error.h" -#include "atf-c/tc.h" -#include "atf-c/tp.h" -#include "atf-c/utils.h" - -#include "dynstr.h" -#include "fs.h" -#include "map.h" -#include "sanity.h" - -#if defined(HAVE_GNU_GETOPT) -# define GETOPT_POSIX "+" -#else -# define GETOPT_POSIX "" -#endif - -static const char *progname = NULL; - -/* This prototype is provided by macros.h during instantiation of the test - * program, so it can be kept private. Don't know if that's the best idea - * though. */ -int atf_tp_main(int, char **, atf_error_t (*)(atf_tp_t *)); - -enum tc_part { - BODY, - CLEANUP, -}; - -/* --------------------------------------------------------------------- - * The "usage" and "user" error types. - * --------------------------------------------------------------------- */ - -#define FREE_FORM_ERROR(name) \ - struct name ## _error_data { \ - char m_what[2048]; \ - }; \ - \ - static \ - void \ - name ## _format(const atf_error_t err, char *buf, size_t buflen) \ - { \ - const struct name ## _error_data *data; \ - \ - PRE(atf_error_is(err, #name)); \ - \ - data = atf_error_data(err); \ - snprintf(buf, buflen, "%s", data->m_what); \ - } \ - \ - static \ - atf_error_t \ - name ## _error(const char *fmt, ...) \ - { \ - atf_error_t err; \ - struct name ## _error_data data; \ - va_list ap; \ - \ - va_start(ap, fmt); \ - vsnprintf(data.m_what, sizeof(data.m_what), fmt, ap); \ - va_end(ap); \ - \ - err = atf_error_new(#name, &data, sizeof(data), name ## _format); \ - \ - return err; \ - } - -FREE_FORM_ERROR(usage); -FREE_FORM_ERROR(user); - -/* --------------------------------------------------------------------- - * Printing functions. - * --------------------------------------------------------------------- */ - -static -void -print_error(const atf_error_t err) -{ - char buf[4096]; - - PRE(atf_is_error(err)); - - atf_error_format(err, buf, sizeof(buf)); - fprintf(stderr, "%s: ERROR: %s\n", progname, buf); - - if (atf_error_is(err, "usage")) - fprintf(stderr, "%s: See atf-test-program(1) for usage details.\n", - progname); -} - -/* --------------------------------------------------------------------- - * Options handling. - * --------------------------------------------------------------------- */ - -struct params { - bool m_do_list; - atf_fs_path_t m_srcdir; - char *m_tcname; - enum tc_part m_tcpart; - atf_fs_path_t m_resfile; - atf_map_t m_config; -}; - -static -atf_error_t -argv0_to_dir(const char *argv0, atf_fs_path_t *dir) -{ - atf_error_t err; - atf_fs_path_t temp; - - err = atf_fs_path_init_fmt(&temp, "%s", argv0); - if (atf_is_error(err)) - goto out; - - err = atf_fs_path_branch_path(&temp, dir); - - atf_fs_path_fini(&temp); -out: - return err; -} - -static -atf_error_t -params_init(struct params *p, const char *argv0) -{ - atf_error_t err; - - p->m_do_list = false; - p->m_tcname = NULL; - p->m_tcpart = BODY; - - err = argv0_to_dir(argv0, &p->m_srcdir); - if (atf_is_error(err)) - return err; - - err = atf_fs_path_init_fmt(&p->m_resfile, "/dev/stdout"); - if (atf_is_error(err)) { - atf_fs_path_fini(&p->m_srcdir); - return err; - } - - err = atf_map_init(&p->m_config); - if (atf_is_error(err)) { - atf_fs_path_fini(&p->m_resfile); - atf_fs_path_fini(&p->m_srcdir); - return err; - } - - return err; -} - -static -void -params_fini(struct params *p) -{ - atf_map_fini(&p->m_config); - atf_fs_path_fini(&p->m_resfile); - atf_fs_path_fini(&p->m_srcdir); - if (p->m_tcname != NULL) - free(p->m_tcname); -} - -static -atf_error_t -parse_vflag(char *arg, atf_map_t *config) -{ - atf_error_t err; - char *split; - - split = strchr(arg, '='); - if (split == NULL) { - err = usage_error("-v requires an argument of the form var=value"); - goto out; - } - - *split = '\0'; - split++; - - err = atf_map_insert(config, arg, split, false); - -out: - return err; -} - -static -atf_error_t -replace_path_param(atf_fs_path_t *param, const char *value) -{ - atf_error_t err; - atf_fs_path_t temp; - - err = atf_fs_path_init_fmt(&temp, "%s", value); - if (!atf_is_error(err)) { - atf_fs_path_fini(param); - *param = temp; - } - - return err; -} - -/* --------------------------------------------------------------------- - * Test case listing. - * --------------------------------------------------------------------- */ - -static -void -list_tcs(const atf_tp_t *tp) -{ - const atf_tc_t *const *tcs; - const atf_tc_t *const *tcsptr; - - printf("Content-Type: application/X-atf-tp; version=\"1\"\n\n"); - - tcs = atf_tp_get_tcs(tp); - INV(tcs != NULL); /* Should be checked. */ - for (tcsptr = tcs; *tcsptr != NULL; tcsptr++) { - const atf_tc_t *tc = *tcsptr; - char **vars = atf_tc_get_md_vars(tc); - char **ptr; - - INV(vars != NULL); /* Should be checked. */ - - if (tcsptr != tcs) /* Not first. */ - printf("\n"); - - for (ptr = vars; *ptr != NULL; ptr += 2) { - if (strcmp(*ptr, "ident") == 0) { - printf("ident: %s\n", *(ptr + 1)); - break; - } - } - - for (ptr = vars; *ptr != NULL; ptr += 2) { - if (strcmp(*ptr, "ident") != 0) { - printf("%s: %s\n", *ptr, *(ptr + 1)); - } - } - - atf_utils_free_charpp(vars); - } -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -static -atf_error_t -handle_tcarg(const char *tcarg, char **tcname, enum tc_part *tcpart) -{ - atf_error_t err; - - err = atf_no_error(); - - *tcname = strdup(tcarg); - if (*tcname == NULL) { - err = atf_no_memory_error(); - goto out; - } - - char *delim = strchr(*tcname, ':'); - if (delim != NULL) { - *delim = '\0'; - - delim++; - if (strcmp(delim, "body") == 0) { - *tcpart = BODY; - } else if (strcmp(delim, "cleanup") == 0) { - *tcpart = CLEANUP; - } else { - err = usage_error("Invalid test case part `%s'", delim); - goto out; - } - } - -out: - return err; -} - -static -atf_error_t -process_params(int argc, char **argv, struct params *p) -{ - atf_error_t err; - int ch; - int old_opterr; - - err = params_init(p, argv[0]); - if (atf_is_error(err)) - goto out; - - old_opterr = opterr; - opterr = 0; - while (!atf_is_error(err) && - (ch = getopt(argc, argv, GETOPT_POSIX ":lr:s:v:")) != -1) { - switch (ch) { - case 'l': - p->m_do_list = true; - break; - - case 'r': - err = replace_path_param(&p->m_resfile, optarg); - break; - - case 's': - err = replace_path_param(&p->m_srcdir, optarg); - break; - - case 'v': - err = parse_vflag(optarg, &p->m_config); - break; - - case ':': - err = usage_error("Option -%c requires an argument.", optopt); - break; - - case '?': - default: - err = usage_error("Unknown option -%c.", optopt); - } - } - argc -= optind; - argv += optind; - - /* Clear getopt state just in case the test wants to use it. */ - opterr = old_opterr; - optind = 1; -#if defined(HAVE_OPTRESET) - optreset = 1; -#endif - - if (!atf_is_error(err)) { - if (p->m_do_list) { - if (argc > 0) - err = usage_error("Cannot provide test case names with -l"); - } else { - if (argc == 0) - err = usage_error("Must provide a test case name"); - else if (argc == 1) - err = handle_tcarg(argv[0], &p->m_tcname, &p->m_tcpart); - else if (argc > 1) { - err = usage_error("Cannot provide more than one test case " - "name"); - } - } - } - - if (atf_is_error(err)) - params_fini(p); - -out: - return err; -} - -static -atf_error_t -srcdir_strip_libtool(atf_fs_path_t *srcdir) -{ - atf_error_t err; - atf_fs_path_t parent; - - err = atf_fs_path_branch_path(srcdir, &parent); - if (atf_is_error(err)) - goto out; - - atf_fs_path_fini(srcdir); - *srcdir = parent; - - INV(!atf_is_error(err)); -out: - return err; -} - -static -atf_error_t -handle_srcdir(struct params *p) -{ - atf_error_t err; - atf_dynstr_t leafname; - atf_fs_path_t exe, srcdir; - bool b; - - err = atf_fs_path_copy(&srcdir, &p->m_srcdir); - if (atf_is_error(err)) - goto out; - - if (!atf_fs_path_is_absolute(&srcdir)) { - atf_fs_path_t srcdirabs; - - err = atf_fs_path_to_absolute(&srcdir, &srcdirabs); - if (atf_is_error(err)) - goto out_srcdir; - - atf_fs_path_fini(&srcdir); - srcdir = srcdirabs; - } - - err = atf_fs_path_leaf_name(&srcdir, &leafname); - if (atf_is_error(err)) - goto out_srcdir; - else { - const bool libs = atf_equal_dynstr_cstring(&leafname, ".libs"); - atf_dynstr_fini(&leafname); - - if (libs) { - err = srcdir_strip_libtool(&srcdir); - if (atf_is_error(err)) - goto out; - } - } - - err = atf_fs_path_copy(&exe, &srcdir); - if (atf_is_error(err)) - goto out_srcdir; - - err = atf_fs_path_append_fmt(&exe, "%s", progname); - if (atf_is_error(err)) - goto out_exe; - - err = atf_fs_exists(&exe, &b); - if (!atf_is_error(err)) { - if (b) { - err = atf_map_insert(&p->m_config, "srcdir", - strdup(atf_fs_path_cstring(&srcdir)), true); - } else { - err = user_error("Cannot find the test program in the source " - "directory `%s'", atf_fs_path_cstring(&srcdir)); - } - } - -out_exe: - atf_fs_path_fini(&exe); -out_srcdir: - atf_fs_path_fini(&srcdir); -out: - return err; -} - -static -atf_error_t -run_tc(const atf_tp_t *tp, struct params *p, int *exitcode) -{ - atf_error_t err; - - err = atf_no_error(); - - if (!atf_tp_has_tc(tp, p->m_tcname)) { - err = usage_error("Unknown test case `%s'", p->m_tcname); - goto out; - } - - switch (p->m_tcpart) { - case BODY: - err = atf_tp_run(tp, p->m_tcname, atf_fs_path_cstring(&p->m_resfile)); - if (atf_is_error(err)) { - /* TODO: Handle error */ - *exitcode = EXIT_FAILURE; - atf_error_free(err); - } else { - *exitcode = EXIT_SUCCESS; - } - - break; - - case CLEANUP: - err = atf_tp_cleanup(tp, p->m_tcname); - if (atf_is_error(err)) { - /* TODO: Handle error */ - *exitcode = EXIT_FAILURE; - atf_error_free(err); - } else { - *exitcode = EXIT_SUCCESS; - } - - break; - - default: - UNREACHABLE; - } - - INV(!atf_is_error(err)); -out: - return err; -} - -static -atf_error_t -controlled_main(int argc, char **argv, - atf_error_t (*add_tcs_hook)(atf_tp_t *), - int *exitcode) -{ - atf_error_t err; - struct params p; - atf_tp_t tp; - char **raw_config; - - err = process_params(argc, argv, &p); - if (atf_is_error(err)) - goto out; - - err = handle_srcdir(&p); - if (atf_is_error(err)) - goto out_p; - - raw_config = atf_map_to_charpp(&p.m_config); - if (raw_config == NULL) { - err = atf_no_memory_error(); - goto out_p; - } - err = atf_tp_init(&tp, (const char* const*)raw_config); - atf_utils_free_charpp(raw_config); - if (atf_is_error(err)) - goto out_p; - - err = add_tcs_hook(&tp); - if (atf_is_error(err)) - goto out_tp; - - if (p.m_do_list) { - list_tcs(&tp); - INV(!atf_is_error(err)); - *exitcode = EXIT_SUCCESS; - } else { - err = run_tc(&tp, &p, exitcode); - } - -out_tp: - atf_tp_fini(&tp); -out_p: - params_fini(&p); -out: - return err; -} - -int -atf_tp_main(int argc, char **argv, atf_error_t (*add_tcs_hook)(atf_tp_t *)) -{ - atf_error_t err; - int exitcode; - - progname = strrchr(argv[0], '/'); - if (progname == NULL) - progname = argv[0]; - else - progname++; - - /* Libtool workaround: if running from within the source tree (binaries - * that are not installed yet), skip the "lt-" prefix added to files in - * the ".libs" directory to show the real (not temporary) name. */ - if (strncmp(progname, "lt-", 3) == 0) - progname += 3; - - exitcode = EXIT_FAILURE; /* Silence GCC warning. */ - err = controlled_main(argc, argv, add_tcs_hook, &exitcode); - if (atf_is_error(err)) { - print_error(err); - atf_error_free(err); - exitcode = EXIT_FAILURE; - } - - return exitcode; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/error_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/error_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/error_test.c (nonexistent) @@ -1,311 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include - -#include - -#include "atf-c/error.h" - -#include "detail/test_helpers.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -void -test_format(const atf_error_t err, char *buf, size_t buflen) -{ - snprintf(buf, buflen, "Test formatting function"); -} - -/* --------------------------------------------------------------------- - * Tests for the "atf_error" type. - * --------------------------------------------------------------------- */ - -ATF_TC(error_new); -ATF_TC_HEAD(error_new, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the construction of an error " - "object"); -} -ATF_TC_BODY(error_new, tc) -{ - atf_error_t err; - int data; - - err = atf_error_new("test_error", NULL, 0, NULL); - ATF_REQUIRE(atf_error_is(err, "test_error")); - ATF_REQUIRE(!atf_error_is(err, "unknown_error")); - ATF_REQUIRE(atf_error_data(err) == NULL); - atf_error_free(err); - - data = 5; - err = atf_error_new("test_data_error", &data, sizeof(data), NULL); - ATF_REQUIRE(atf_error_is(err, "test_data_error")); - ATF_REQUIRE(!atf_error_is(err, "unknown_error")); - ATF_REQUIRE(atf_error_data(err) != NULL); - ATF_REQUIRE_EQ(*((const int *)atf_error_data(err)), 5); - atf_error_free(err); -} - -ATF_TC(error_new_wo_memory); -ATF_TC_HEAD(error_new_wo_memory, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that an unavailable memory error " - "raised when constructing an error object " - "is properly converted to the no_memory " - "static error type"); -} -ATF_TC_BODY(error_new_wo_memory, tc) -{ - atf_error_t err; - void *invalid; - - invalid = (void *)1; - - err = atf_error_new("test_error", invalid, SIZE_MAX, NULL); - ATF_REQUIRE(atf_error_is(err, "no_memory")); - ATF_REQUIRE(atf_error_data(err) == NULL); - atf_error_free(err); -} - -ATF_TC(no_error); -ATF_TC_HEAD(no_error, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks that constructing a non-error " - "object works"); -} -ATF_TC_BODY(no_error, tc) -{ - atf_error_t err; - - err = atf_no_error(); - ATF_REQUIRE(!atf_is_error(err)); -} - -ATF_TC(is_error); -ATF_TC_HEAD(is_error, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the is_error method to determine " - "if an error object holds success or an error"); -} -ATF_TC_BODY(is_error, tc) -{ - atf_error_t err; - - err = atf_no_error(); - ATF_REQUIRE(!atf_is_error(err)); - - err = atf_error_new("test_error", NULL, 0, NULL); - ATF_REQUIRE(atf_is_error(err)); - atf_error_free(err); -} - -ATF_TC(format); -ATF_TC_HEAD(format, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the default formatting function " - "and the ability to change it"); -} -ATF_TC_BODY(format, tc) -{ - atf_error_t err; - char buf[1024]; - - printf("Testing default formatting function\n"); - err = atf_error_new("test_error", NULL, 0, NULL); - atf_error_format(err, buf, sizeof(buf)); - printf("Error string is: %s\n", buf); - ATF_REQUIRE(strcmp(buf, "Error 'test_error'") == 0); - atf_error_free(err); - - printf("Testing custom formatting function\n"); - err = atf_error_new("test_error", NULL, 0, test_format); - atf_error_format(err, buf, sizeof(buf)); - printf("Error string is: %s\n", buf); - ATF_REQUIRE(strcmp(buf, "Test formatting function") == 0); - atf_error_free(err); -} - -/* --------------------------------------------------------------------- - * Tests for the "libc" error. - * --------------------------------------------------------------------- */ - -ATF_TC(libc_new); -ATF_TC_HEAD(libc_new, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the construction of libc errors"); -} -ATF_TC_BODY(libc_new, tc) -{ - atf_error_t err; - - err = atf_libc_error(ENOMEM, "Test message 1"); - ATF_REQUIRE(atf_error_is(err, "libc")); - ATF_REQUIRE_EQ(atf_libc_error_code(err), ENOMEM); - ATF_REQUIRE(strcmp(atf_libc_error_msg(err), "Test message 1") == 0); - atf_error_free(err); - - err = atf_libc_error(EPERM, "%s message %d", "Test", 2); - ATF_REQUIRE(atf_error_is(err, "libc")); - ATF_REQUIRE_EQ(atf_libc_error_code(err), EPERM); - ATF_REQUIRE(strcmp(atf_libc_error_msg(err), "Test message 2") == 0); - atf_error_free(err); -} - -ATF_TC(libc_format); -ATF_TC_HEAD(libc_format, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the formatting of libc errors"); -} -ATF_TC_BODY(libc_format, tc) -{ - atf_error_t err; - char buf[1024]; - - err = atf_libc_error(ENOMEM, "Test message 1"); - atf_error_format(err, buf, sizeof(buf)); - ATF_REQUIRE(strstr(buf, strerror(ENOMEM)) != NULL); - ATF_REQUIRE(strstr(buf, "Test message 1") != NULL); - atf_error_free(err); - - err = atf_libc_error(EPERM, "Test message 2"); - atf_error_format(err, buf, sizeof(buf)); - ATF_REQUIRE(strstr(buf, strerror(EPERM)) != NULL); - ATF_REQUIRE(strstr(buf, "Test message 2") != NULL); - atf_error_free(err); - - err = atf_libc_error(EPERM, "%s message %d", "Test", 3); - atf_error_format(err, buf, sizeof(buf)); - ATF_REQUIRE(strstr(buf, strerror(EPERM)) != NULL); - ATF_REQUIRE(strstr(buf, "Test message 3") != NULL); - atf_error_free(err); -} - -/* --------------------------------------------------------------------- - * Tests for the "no_memory" error. - * --------------------------------------------------------------------- */ - -ATF_TC(no_memory_new); -ATF_TC_HEAD(no_memory_new, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the construction of no_memory " - "errors"); -} -ATF_TC_BODY(no_memory_new, tc) -{ - atf_error_t err; - - err = atf_no_memory_error(); - ATF_REQUIRE(atf_error_is(err, "no_memory")); - ATF_REQUIRE(atf_error_data(err) == NULL); - atf_error_free(err); -} - -ATF_TC(no_memory_format); -ATF_TC_HEAD(no_memory_format, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the formatting of no_memory " - "errors"); -} -ATF_TC_BODY(no_memory_format, tc) -{ - atf_error_t err; - char buf[1024]; - - err = atf_no_memory_error(); - atf_error_format(err, buf, sizeof(buf)); - ATF_REQUIRE(strcmp(buf, "Not enough memory") == 0); - atf_error_free(err); -} - -ATF_TC(no_memory_twice); -ATF_TC_HEAD(no_memory_twice, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks the construction of no_memory " - "errors multiple times, as this error is initialized " - "statically"); -} -ATF_TC_BODY(no_memory_twice, tc) -{ - { - atf_error_t err = atf_no_memory_error(); - ATF_REQUIRE(atf_error_is(err, "no_memory")); - ATF_REQUIRE(atf_error_data(err) == NULL); - atf_error_free(err); - } - - { - atf_error_t err = atf_no_memory_error(); - ATF_REQUIRE(atf_error_is(err, "no_memory")); - ATF_REQUIRE(atf_error_data(err) == NULL); - atf_error_free(err); - } -} - -/* --------------------------------------------------------------------- - * Tests cases for the header file. - * --------------------------------------------------------------------- */ - -HEADER_TC(include, "atf-c/error.h"); -HEADER_TC(include_fwd, "atf-c/error_fwd.h"); - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Add the tests for the "atf_error" type. */ - ATF_TP_ADD_TC(tp, error_new); - ATF_TP_ADD_TC(tp, error_new_wo_memory); - ATF_TP_ADD_TC(tp, no_error); - ATF_TP_ADD_TC(tp, is_error); - ATF_TP_ADD_TC(tp, format); - - /* Add the tests for the "libc" error. */ - ATF_TP_ADD_TC(tp, libc_new); - ATF_TP_ADD_TC(tp, libc_format); - - /* Add the tests for the "no_memory" error. */ - ATF_TP_ADD_TC(tp, no_memory_new); - ATF_TP_ADD_TC(tp, no_memory_format); - ATF_TP_ADD_TC(tp, no_memory_twice); - - /* Add the test cases for the header file. */ - ATF_TP_ADD_TC(tp, include); - ATF_TP_ADD_TC(tp, include_fwd); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/config_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/config_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/config_test.c (nonexistent) @@ -1,156 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include - -#include "atf-c/config.h" - -#include "detail/env.h" -#include "detail/test_helpers.h" - -static const char *test_value = "env-value"; - -static struct varnames { - const char *lc; - const char *uc; - bool can_be_empty; -} all_vars[] = { - { "atf_arch", "ATF_ARCH", false }, - { "atf_build_cc", "ATF_BUILD_CC", false }, - { "atf_build_cflags", "ATF_BUILD_CFLAGS", true }, - { "atf_build_cpp", "ATF_BUILD_CPP", false }, - { "atf_build_cppflags", "ATF_BUILD_CPPFLAGS", true }, - { "atf_build_cxx", "ATF_BUILD_CXX", false }, - { "atf_build_cxxflags", "ATF_BUILD_CXXFLAGS", true }, - { "atf_confdir", "ATF_CONFDIR", false }, - { "atf_includedir", "ATF_INCLUDEDIR", false }, - { "atf_libdir", "ATF_LIBDIR", false }, - { "atf_libexecdir", "ATF_LIBEXECDIR", false }, - { "atf_machine", "ATF_MACHINE", false }, - { "atf_pkgdatadir", "ATF_PKGDATADIR", false }, - { "atf_shell", "ATF_SHELL", false }, - { "atf_workdir", "ATF_WORKDIR", false }, - { NULL, NULL, false } -}; - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -void __atf_config_reinit(void); - -static -void -unset_all(void) -{ - const struct varnames *v; - for (v = all_vars; v->lc != NULL; v++) - RE(atf_env_unset(v->uc)); -} - -static -void -compare_one(const char *var, const char *expvalue) -{ - const struct varnames *v; - - printf("Checking that %s is set to %s\n", var, expvalue); - - for (v = all_vars; v->lc != NULL; v++) { - if (strcmp(v->lc, var) == 0) - ATF_CHECK_STREQ(atf_config_get(v->lc), test_value); - else - ATF_CHECK(strcmp(atf_config_get(v->lc), test_value) != 0); - } -} - -/* --------------------------------------------------------------------- - * Test cases for the free functions. - * --------------------------------------------------------------------- */ - -ATF_TC(get); -ATF_TC_HEAD(get, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_config_get function"); -} -ATF_TC_BODY(get, tc) -{ - const struct varnames *v; - - /* Unset all known environment variables and make sure the built-in - * values do not match the bogus value we will use for testing. */ - unset_all(); - __atf_config_reinit(); - for (v = all_vars; v->lc != NULL; v++) - ATF_CHECK(strcmp(atf_config_get(v->lc), test_value) != 0); - - /* Test the behavior of empty values. */ - for (v = all_vars; v->lc != NULL; v++) { - unset_all(); - if (strcmp(atf_config_get(v->lc), "") != 0) { - RE(atf_env_set(v->uc, "")); - __atf_config_reinit(); - if (v->can_be_empty) - ATF_CHECK(strlen(atf_config_get(v->lc)) == 0); - else - ATF_CHECK(strlen(atf_config_get(v->lc)) > 0); - } - } - - /* Check if every variable is recognized individually. */ - for (v = all_vars; v->lc != NULL; v++) { - unset_all(); - RE(atf_env_set(v->uc, test_value)); - __atf_config_reinit(); - compare_one(v->lc, test_value); - } -} - -/* --------------------------------------------------------------------- - * Tests cases for the header file. - * --------------------------------------------------------------------- */ - -HEADER_TC(include, "atf-c/config.h"); - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, get); - - /* Add the test cases for the header file. */ - ATF_TP_ADD_TC(tp, include); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/config.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/config.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/config.c (nonexistent) @@ -1,164 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include - -#include "atf-c/config.h" - -#include "detail/env.h" -#include "detail/sanity.h" - -static bool initialized = false; - -static struct var { - const char *name; - const char *default_value; - const char *value; - bool can_be_empty; -} vars[] = { - { "atf_arch", ATF_ARCH, NULL, false, }, - { "atf_build_cc", ATF_BUILD_CC, NULL, false, }, - { "atf_build_cflags", ATF_BUILD_CFLAGS, NULL, true, }, - { "atf_build_cpp", ATF_BUILD_CPP, NULL, false, }, - { "atf_build_cppflags", ATF_BUILD_CPPFLAGS, NULL, true, }, - { "atf_build_cxx", ATF_BUILD_CXX, NULL, false, }, - { "atf_build_cxxflags", ATF_BUILD_CXXFLAGS, NULL, true, }, - { "atf_confdir", ATF_CONFDIR, NULL, false, }, - { "atf_includedir", ATF_INCLUDEDIR, NULL, false, }, - { "atf_libdir", ATF_LIBDIR, NULL, false, }, - { "atf_libexecdir", ATF_LIBEXECDIR, NULL, false, }, - { "atf_machine", ATF_MACHINE, NULL, false, }, - { "atf_pkgdatadir", ATF_PKGDATADIR, NULL, false, }, - { "atf_shell", ATF_SHELL, NULL, false, }, - { "atf_workdir", ATF_WORKDIR, NULL, false, }, - { NULL, NULL, NULL, false, }, -}; - -/* Only used for unit testing, so this prototype is private. */ -void __atf_config_reinit(void); - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -char * -string_to_upper(const char *str) -{ - char *uc; - - uc = (char *)malloc(strlen(str) + 1); - if (uc != NULL) { - char *ucptr = uc; - while (*str != '\0') { - *ucptr = toupper((int)*str); - - str++; - ucptr++; - } - *ucptr = '\0'; - } - - return uc; -} - -static -void -initialize_var(struct var *var, const char *envname) -{ - PRE(var->value == NULL); - - if (atf_env_has(envname)) { - const char *val = atf_env_get(envname); - if (strlen(val) > 0 || var->can_be_empty) - var->value = val; - else - var->value = var->default_value; - } else - var->value = var->default_value; - - POST(var->value != NULL); -} - -static -void -initialize(void) -{ - struct var *var; - - PRE(!initialized); - - for (var = vars; var->name != NULL; var++) { - char *envname; - - envname = string_to_upper(var->name); - initialize_var(var, envname); - free(envname); - } - - initialized = true; -} - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -const char * -atf_config_get(const char *name) -{ - const struct var *var; - const char *value; - - if (!initialized) { - initialize(); - INV(initialized); - } - - value = NULL; - for (var = vars; value == NULL && var->name != NULL; var++) - if (strcmp(var->name, name) == 0) - value = var->value; - INV(value != NULL); - - return value; -} - -void -__atf_config_reinit(void) -{ - struct var *var; - - initialized = false; - - for (var = vars; var->name != NULL; var++) - var->value = NULL; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/config.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/config.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/config.h (nonexistent) @@ -1,37 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_CONFIG_H) -#define ATF_C_CONFIG_H - -#include - -const char *atf_config_get(const char *); - -#endif /* !defined(ATF_C_CONFIG_H) */ Index: vendor/NetBSD/atf/dist/dist/atf-c/h_build.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/h_build.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/h_build.h (nonexistent) @@ -1,414 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2009 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if defined(TESTS_ATF_ATF_C_H_BUILD_H) -# error "Cannot include h_build.h more than once." -#else -# define TESTS_ATF_ATF_C_H_BUILD_H -#endif - -/* --------------------------------------------------------------------- - * Test case data. - * --------------------------------------------------------------------- */ - -static struct c_o_test { - const char *msg; - const char *cc; - const char *cflags; - const char *cppflags; - const char *sfile; - const char *ofile; - bool hasoptargs; - const char *const optargs[16]; - const char *const expargv[16]; -} c_o_tests[] = { - { - "No flags", - "cc", - "", - "", - "test.c", - "test.o", - false, - { - NULL - }, - { - "cc", "-o", "test.o", "-c", "test.c", NULL - }, - }, - - { - "Multi-word program name", - "cc -foo", - "", - "", - "test.c", - "test.o", - false, - { - NULL - }, - { - "cc", "-foo", "-o", "test.o", "-c", "test.c", NULL - }, - }, - - { - "Some cflags", - "cc", - "-f1 -f2 -f3 -f4-f5", - "", - "test.c", - "test.o", - false, - { - NULL - }, - { - "cc", "-f1", "-f2", "-f3", "-f4-f5", "-o", "test.o", - "-c", "test.c", NULL - }, - }, - - { - "Some cppflags", - "cc", - "", - "-f1 -f2 -f3 -f4-f5", - "test.c", - "test.o", - false, - { - NULL - }, - { - "cc", "-f1", "-f2", "-f3", "-f4-f5", "-o", "test.o", - "-c", "test.c", NULL - }, - }, - - { - "Some cflags and cppflags", - "cc", - "-f2", - "-f1", - "test.c", - "test.o", - false, - { - NULL - }, - { - "cc", "-f1", "-f2", "-o", "test.o", "-c", "test.c", NULL - }, - }, - - { - "Some optional arguments", - "cc", - "", - "", - "test.c", - "test.o", - true, - { - "-o1", "-o2", NULL - }, - { - "cc", "-o1", "-o2", "-o", "test.o", "-c", "test.c", NULL - }, - }, - - { - "Some cflags, cppflags and optional arguments", - "cc", - "-f2", - "-f1", - "test.c", - "test.o", - true, - { - "-o1", "-o2", NULL - }, - { - "cc", "-f1", "-f2", "-o1", "-o2", "-o", "test.o", - "-c", "test.c", NULL - }, - }, - - { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - false, - { NULL }, - { NULL }, - }, -}; - -static struct cpp_test { - const char *msg; - const char *cpp; - const char *cppflags; - const char *sfile; - const char *ofile; - bool hasoptargs; - const char *const optargs[16]; - const char *const expargv[16]; -} cpp_tests[] = { - { - "No flags", - "cpp", - "", - "test.c", - "test.out", - false, - { - NULL - }, - { - "cpp", "-o", "test.out", "test.c", NULL - }, - }, - - { - "Multi-word program name", - "cpp -foo", - "", - "test.c", - "test.out", - false, - { - NULL - }, - { - "cpp", "-foo", "-o", "test.out", "test.c", NULL - }, - }, - - { - "Some cppflags", - "cpp", - "-f1 -f2 -f3 -f4-f5", - "test.c", - "test.out", - false, - { - NULL - }, - { - "cpp", "-f1", "-f2", "-f3", "-f4-f5", "-o", "test.out", - "test.c", NULL - }, - }, - - { - "Some optional arguments", - "cpp", - "", - "test.c", - "test.out", - true, - { - "-o1", "-o2", NULL - }, - { - "cpp", "-o1", "-o2", "-o", "test.out", "test.c", NULL - }, - }, - - { - "Some cppflags and optional arguments", - "cpp", - "-f1", - "test.c", - "test.out", - true, - { - "-o1", "-o2", NULL - }, - { - "cpp", "-f1", "-o1", "-o2", "-o", "test.out", "test.c", NULL - }, - }, - - { - NULL, - NULL, - NULL, - NULL, - NULL, - false, - { NULL }, - { NULL }, - }, -}; - -static struct cxx_o_test { - const char *msg; - const char *cxx; - const char *cxxflags; - const char *cppflags; - const char *sfile; - const char *ofile; - bool hasoptargs; - const char *const optargs[16]; - const char *const expargv[16]; -} cxx_o_tests[] = { - { - "No flags", - "c++", - "", - "", - "test.c", - "test.o", - false, - { - NULL - }, - { - "c++", "-o", "test.o", "-c", "test.c", NULL - }, - }, - - { - "Multi-word program name", - "c++ -foo", - "", - "", - "test.c", - "test.o", - false, - { - NULL - }, - { - "c++", "-foo", "-o", "test.o", "-c", "test.c", NULL - }, - }, - - { - "Some cxxflags", - "c++", - "-f1 -f2 -f3 -f4-f5", - "", - "test.c", - "test.o", - false, - { - NULL - }, - { - "c++", "-f1", "-f2", "-f3", "-f4-f5", "-o", "test.o", - "-c", "test.c", NULL - }, - }, - - { - "Some cppflags", - "c++", - "", - "-f1 -f2 -f3 -f4-f5", - "test.c", - "test.o", - false, - { - NULL - }, - { - "c++", "-f1", "-f2", "-f3", "-f4-f5", "-o", "test.o", - "-c", "test.c", NULL - }, - }, - - { - "Some cxxflags and cppflags", - "c++", - "-f2", - "-f1", - "test.c", - "test.o", - false, - { - NULL - }, - { - "c++", "-f1", "-f2", "-o", "test.o", "-c", "test.c", NULL - }, - }, - - { - "Some optional arguments", - "c++", - "", - "", - "test.c", - "test.o", - true, - { - "-o1", "-o2", NULL - }, - { - "c++", "-o1", "-o2", "-o", "test.o", "-c", "test.c", NULL - }, - }, - - { - "Some cxxflags, cppflags and optional arguments", - "c++", - "-f2", - "-f1", - "test.c", - "test.o", - true, - { - "-o1", "-o2", NULL - }, - { - "c++", "-f1", "-f2", "-o1", "-o2", "-o", "test.o", - "-c", "test.c", NULL - }, - }, - - { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - false, - { NULL }, - { NULL }, - }, -}; Index: vendor/NetBSD/atf/dist/dist/atf-c/error_fwd.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/error_fwd.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/error_fwd.h (nonexistent) @@ -1,40 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_ERROR_FWD_H) -#define ATF_C_ERROR_FWD_H - -/* --------------------------------------------------------------------- - * The "atf_error" type. - * --------------------------------------------------------------------- */ - -struct atf_error; -typedef struct atf_error *atf_error_t; - -#endif /* ATF_C_ERROR_FWD_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/macros_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/macros_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/macros_test.c (nonexistent) @@ -1,776 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "detail/fs.h" -#include "detail/process.h" -#include "detail/test_helpers.h" -#include "detail/text.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -void -create_ctl_file(const atf_tc_t *tc, const char *name) -{ - atf_fs_path_t p; - - RE(atf_fs_path_init_fmt(&p, "%s", name)); - ATF_REQUIRE(open(atf_fs_path_cstring(&p), - O_CREAT | O_WRONLY | O_TRUNC, 0644) != -1); - atf_fs_path_fini(&p); -} - -static -bool -exists(const char *p) -{ - bool b; - atf_fs_path_t pp; - - RE(atf_fs_path_init_fmt(&pp, "%s", p)); - RE(atf_fs_exists(&pp, &b)); - atf_fs_path_fini(&pp); - - return b; -} - -static -void -init_and_run_h_tc(const char *name, void (*head)(atf_tc_t *), - void (*body)(const atf_tc_t *)) -{ - atf_tc_t tc; - const char *const config[] = { NULL }; - - RE(atf_tc_init(&tc, name, head, body, NULL, config)); - run_h_tc(&tc, "output", "error", "result"); - atf_tc_fini(&tc); -} - -/* --------------------------------------------------------------------- - * Helper test cases. - * --------------------------------------------------------------------- */ - -#define H_DEF(id, macro) \ - ATF_TC_HEAD(h_ ## id, tc) \ - { \ - atf_tc_set_md_var(tc, "descr", "Helper test case"); \ - } \ - ATF_TC_BODY(h_ ## id, tc) \ - { \ - create_ctl_file(tc, "before"); \ - macro; \ - create_ctl_file(tc, "after"); \ - } - -#define H_CHECK_HEAD_NAME(id) ATF_TC_HEAD_NAME(h_check_ ## id) -#define H_CHECK_BODY_NAME(id) ATF_TC_BODY_NAME(h_check_ ## id) -#define H_CHECK(id, condition) \ - H_DEF(check_ ## id, ATF_CHECK(condition)) - -#define H_CHECK_MSG_HEAD_NAME(id) ATF_TC_HEAD_NAME(h_check_msg_ ## id) -#define H_CHECK_MSG_BODY_NAME(id) ATF_TC_BODY_NAME(h_check_msg_ ## id) -#define H_CHECK_MSG(id, condition, msg) \ - H_DEF(check_msg_ ## id, ATF_CHECK_MSG(condition, msg)) - -#define H_CHECK_EQ_HEAD_NAME(id) ATF_TC_HEAD_NAME(h_check_eq_ ## id) -#define H_CHECK_EQ_BODY_NAME(id) ATF_TC_BODY_NAME(h_check_eq_ ## id) -#define H_CHECK_EQ(id, v1, v2) \ - H_DEF(check_eq_ ## id, ATF_CHECK_EQ(v1, v2)) - -#define H_CHECK_STREQ_HEAD_NAME(id) ATF_TC_HEAD_NAME(h_check_streq_ ## id) -#define H_CHECK_STREQ_BODY_NAME(id) ATF_TC_BODY_NAME(h_check_streq_ ## id) -#define H_CHECK_STREQ(id, v1, v2) \ - H_DEF(check_streq_ ## id, ATF_CHECK_STREQ(v1, v2)) - -#define H_CHECK_EQ_MSG_HEAD_NAME(id) \ - ATF_TC_HEAD_NAME(h_check_eq_msg_ ## id) -#define H_CHECK_EQ_MSG_BODY_NAME(id) \ - ATF_TC_BODY_NAME(h_check_eq_msg_ ## id) -#define H_CHECK_EQ_MSG(id, v1, v2, msg) \ - H_DEF(check_eq_msg_ ## id, ATF_CHECK_EQ_MSG(v1, v2, msg)) - -#define H_CHECK_STREQ_MSG_HEAD_NAME(id) \ - ATF_TC_HEAD_NAME(h_check_streq_msg_ ## id) -#define H_CHECK_STREQ_MSG_BODY_NAME(id) \ - ATF_TC_BODY_NAME(h_check_streq_msg_ ## id) -#define H_CHECK_STREQ_MSG(id, v1, v2, msg) \ - H_DEF(check_streq_msg_ ## id, ATF_CHECK_STREQ_MSG(v1, v2, msg)) - -#define H_CHECK_ERRNO_HEAD_NAME(id) ATF_TC_HEAD_NAME(h_check_errno_ ## id) -#define H_CHECK_ERRNO_BODY_NAME(id) ATF_TC_BODY_NAME(h_check_errno_ ## id) -#define H_CHECK_ERRNO(id, exp_errno, bool_expr) \ - H_DEF(check_errno_ ## id, ATF_CHECK_ERRNO(exp_errno, bool_expr)) - -#define H_REQUIRE_HEAD_NAME(id) ATF_TC_HEAD_NAME(h_require_ ## id) -#define H_REQUIRE_BODY_NAME(id) ATF_TC_BODY_NAME(h_require_ ## id) -#define H_REQUIRE(id, condition) \ - H_DEF(require_ ## id, ATF_REQUIRE(condition)) - -#define H_REQUIRE_MSG_HEAD_NAME(id) ATF_TC_HEAD_NAME(h_require_msg_ ## id) -#define H_REQUIRE_MSG_BODY_NAME(id) ATF_TC_BODY_NAME(h_require_msg_ ## id) -#define H_REQUIRE_MSG(id, condition, msg) \ - H_DEF(require_msg_ ## id, ATF_REQUIRE_MSG(condition, msg)) - -#define H_REQUIRE_EQ_HEAD_NAME(id) ATF_TC_HEAD_NAME(h_require_eq_ ## id) -#define H_REQUIRE_EQ_BODY_NAME(id) ATF_TC_BODY_NAME(h_require_eq_ ## id) -#define H_REQUIRE_EQ(id, v1, v2) \ - H_DEF(require_eq_ ## id, ATF_REQUIRE_EQ(v1, v2)) - -#define H_REQUIRE_STREQ_HEAD_NAME(id) ATF_TC_HEAD_NAME(h_require_streq_ ## id) -#define H_REQUIRE_STREQ_BODY_NAME(id) ATF_TC_BODY_NAME(h_require_streq_ ## id) -#define H_REQUIRE_STREQ(id, v1, v2) \ - H_DEF(require_streq_ ## id, ATF_REQUIRE_STREQ(v1, v2)) - -#define H_REQUIRE_EQ_MSG_HEAD_NAME(id) \ - ATF_TC_HEAD_NAME(h_require_eq_msg_ ## id) -#define H_REQUIRE_EQ_MSG_BODY_NAME(id) \ - ATF_TC_BODY_NAME(h_require_eq_msg_ ## id) -#define H_REQUIRE_EQ_MSG(id, v1, v2, msg) \ - H_DEF(require_eq_msg_ ## id, ATF_REQUIRE_EQ_MSG(v1, v2, msg)) - -#define H_REQUIRE_STREQ_MSG_HEAD_NAME(id) \ - ATF_TC_HEAD_NAME(h_require_streq_msg_ ## id) -#define H_REQUIRE_STREQ_MSG_BODY_NAME(id) \ - ATF_TC_BODY_NAME(h_require_streq_msg_ ## id) -#define H_REQUIRE_STREQ_MSG(id, v1, v2, msg) \ - H_DEF(require_streq_msg_ ## id, ATF_REQUIRE_STREQ_MSG(v1, v2, msg)) - -#define H_REQUIRE_ERRNO_HEAD_NAME(id) ATF_TC_HEAD_NAME(h_require_errno_ ## id) -#define H_REQUIRE_ERRNO_BODY_NAME(id) ATF_TC_BODY_NAME(h_require_errno_ ## id) -#define H_REQUIRE_ERRNO(id, exp_errno, bool_expr) \ - H_DEF(require_errno_ ## id, ATF_REQUIRE_ERRNO(exp_errno, bool_expr)) - -/* --------------------------------------------------------------------- - * Test cases for the ATF_{CHECK,REQUIRE}_ERRNO macros. - * --------------------------------------------------------------------- */ - -static int -errno_fail_stub(const int raised_errno) -{ - errno = raised_errno; - return -1; -} - -static int -errno_ok_stub(void) -{ - return 0; -} - -H_CHECK_ERRNO(no_error, -1, errno_ok_stub() == -1); -H_CHECK_ERRNO(errno_ok, 2, errno_fail_stub(2) == -1); -H_CHECK_ERRNO(errno_fail, 3, errno_fail_stub(4) == -1); - -H_REQUIRE_ERRNO(no_error, -1, errno_ok_stub() == -1); -H_REQUIRE_ERRNO(errno_ok, 2, errno_fail_stub(2) == -1); -H_REQUIRE_ERRNO(errno_fail, 3, errno_fail_stub(4) == -1); - -ATF_TC(check_errno); -ATF_TC_HEAD(check_errno, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the ATF_CHECK_ERRNO macro"); -} -ATF_TC_BODY(check_errno, tc) -{ - struct test { - void (*head)(atf_tc_t *); - void (*body)(const atf_tc_t *); - bool ok; - const char *exp_regex; - } *t, tests[] = { - { H_CHECK_ERRNO_HEAD_NAME(no_error), - H_CHECK_ERRNO_BODY_NAME(no_error), - false, "Expected true value in errno_ok_stub\\(\\) == -1" }, - { H_CHECK_ERRNO_HEAD_NAME(errno_ok), - H_CHECK_ERRNO_BODY_NAME(errno_ok), - true, NULL }, - { H_CHECK_ERRNO_HEAD_NAME(errno_fail), - H_CHECK_ERRNO_BODY_NAME(errno_fail), - false, "Expected errno 3, got 4, in errno_fail_stub\\(4\\) == -1" }, - { NULL, NULL, false, NULL } - }; - - for (t = &tests[0]; t->head != NULL; t++) { - init_and_run_h_tc("h_check_errno", t->head, t->body); - - ATF_REQUIRE(exists("before")); - ATF_REQUIRE(exists("after")); - - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - } else { - ATF_REQUIRE(grep_file("result", "^failed")); - ATF_REQUIRE(grep_file("error", "macros_test.c:[0-9]+: %s$", - t->exp_regex)); - } - - ATF_REQUIRE(unlink("before") != -1); - ATF_REQUIRE(unlink("after") != -1); - } -} - -ATF_TC(require_errno); -ATF_TC_HEAD(require_errno, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the ATF_REQUIRE_ERRNO macro"); -} -ATF_TC_BODY(require_errno, tc) -{ - struct test { - void (*head)(atf_tc_t *); - void (*body)(const atf_tc_t *); - bool ok; - const char *exp_regex; - } *t, tests[] = { - { H_REQUIRE_ERRNO_HEAD_NAME(no_error), - H_REQUIRE_ERRNO_BODY_NAME(no_error), - false, "Expected true value in errno_ok_stub\\(\\) == -1" }, - { H_REQUIRE_ERRNO_HEAD_NAME(errno_ok), - H_REQUIRE_ERRNO_BODY_NAME(errno_ok), - true, NULL }, - { H_REQUIRE_ERRNO_HEAD_NAME(errno_fail), - H_REQUIRE_ERRNO_BODY_NAME(errno_fail), - false, "Expected errno 3, got 4, in errno_fail_stub\\(4\\) == -1" }, - { NULL, NULL, false, NULL } - }; - - for (t = &tests[0]; t->head != NULL; t++) { - init_and_run_h_tc("h_require_errno", t->head, t->body); - - ATF_REQUIRE(exists("before")); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(exists("after")); - } else { - ATF_REQUIRE(grep_file("result", "^failed: .*macros_test.c:[0-9]+: " - "%s$", t->exp_regex)); - ATF_REQUIRE(!exists("after")); - } - - ATF_REQUIRE(unlink("before") != -1); - if (t->ok) - ATF_REQUIRE(unlink("after") != -1); - } -} - -/* --------------------------------------------------------------------- - * Test cases for the ATF_CHECK and ATF_CHECK_MSG macros. - * --------------------------------------------------------------------- */ - -H_CHECK(0, 0); -H_CHECK(1, 1); -H_CHECK_MSG(0, 0, "expected a false value"); -H_CHECK_MSG(1, 1, "expected a true value"); - -ATF_TC(check); -ATF_TC_HEAD(check, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the ATF_CHECK and " - "ATF_CHECK_MSG macros"); -} -ATF_TC_BODY(check, tc) -{ - struct test { - void (*head)(atf_tc_t *); - void (*body)(const atf_tc_t *); - bool value; - const char *msg; - bool ok; - } *t, tests[] = { - { H_CHECK_HEAD_NAME(0), H_CHECK_BODY_NAME(0), 0, - "0 not met", false }, - { H_CHECK_HEAD_NAME(1), H_CHECK_BODY_NAME(1), 1, - "1 not met", true }, - { H_CHECK_MSG_HEAD_NAME(0), H_CHECK_MSG_BODY_NAME(0), 0, - "expected a false value", false }, - { H_CHECK_MSG_HEAD_NAME(1), H_CHECK_MSG_BODY_NAME(1), 1, - "expected a true value", true }, - { NULL, NULL, false, NULL, false } - }; - - for (t = &tests[0]; t->head != NULL; t++) { - printf("Checking with a %d value\n", t->value); - - init_and_run_h_tc("h_check", t->head, t->body); - - ATF_REQUIRE(exists("before")); - ATF_REQUIRE(exists("after")); - - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - } else { - ATF_REQUIRE(grep_file("result", "^failed")); - ATF_REQUIRE(grep_file("error", "Check failed: .*" - "macros_test.c:[0-9]+: %s$", t->msg)); - } - - ATF_REQUIRE(unlink("before") != -1); - ATF_REQUIRE(unlink("after") != -1); - } -} - -/* --------------------------------------------------------------------- - * Test cases for the ATF_CHECK_*EQ_ macros. - * --------------------------------------------------------------------- */ - -struct check_eq_test { - void (*head)(atf_tc_t *); - void (*body)(const atf_tc_t *); - const char *v1; - const char *v2; - const char *msg; - bool ok; -}; - -static -void -do_check_eq_tests(const struct check_eq_test *tests) -{ - const struct check_eq_test *t; - - for (t = &tests[0]; t->head != NULL; t++) { - printf("Checking with %s, %s and expecting %s\n", t->v1, t->v2, - t->ok ? "true" : "false"); - - init_and_run_h_tc("h_check", t->head, t->body); - - ATF_CHECK(exists("before")); - ATF_CHECK(exists("after")); - - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - } else { - ATF_REQUIRE(grep_file("result", "^failed")); - ATF_CHECK(grep_file("error", "Check failed: .*" - "macros_test.c:[0-9]+: %s$", t->msg)); - } - - ATF_CHECK(unlink("before") != -1); - ATF_CHECK(unlink("after") != -1); - } -} - -H_CHECK_EQ(1_1, 1, 1); -H_CHECK_EQ(1_2, 1, 2); -H_CHECK_EQ(2_1, 2, 1); -H_CHECK_EQ(2_2, 2, 2); -H_CHECK_EQ_MSG(1_1, 1, 1, "1 does not match 1"); -H_CHECK_EQ_MSG(1_2, 1, 2, "1 does not match 2"); -H_CHECK_EQ_MSG(2_1, 2, 1, "2 does not match 1"); -H_CHECK_EQ_MSG(2_2, 2, 2, "2 does not match 2"); - -ATF_TC(check_eq); -ATF_TC_HEAD(check_eq, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the ATF_CHECK_EQ and " - "ATF_CHECK_EQ_MSG macros"); -} -ATF_TC_BODY(check_eq, tc) -{ - struct check_eq_test tests[] = { - { H_CHECK_EQ_HEAD_NAME(1_1), H_CHECK_EQ_BODY_NAME(1_1), - "1", "1", "1 != 1", true }, - { H_CHECK_EQ_HEAD_NAME(1_2), H_CHECK_EQ_BODY_NAME(1_2), - "1", "2", "1 != 2", false }, - { H_CHECK_EQ_HEAD_NAME(2_1), H_CHECK_EQ_BODY_NAME(2_1), - "2", "1", "2 != 1", false }, - { H_CHECK_EQ_HEAD_NAME(2_2), H_CHECK_EQ_BODY_NAME(2_2), - "2", "2", "2 != 2", true }, - { H_CHECK_EQ_MSG_HEAD_NAME(1_1), H_CHECK_EQ_MSG_BODY_NAME(1_1), - "1", "1", "1 != 1: 1 does not match 1", true }, - { H_CHECK_EQ_MSG_HEAD_NAME(1_2), H_CHECK_EQ_MSG_BODY_NAME(1_2), - "1", "2", "1 != 2: 1 does not match 2", false }, - { H_CHECK_EQ_MSG_HEAD_NAME(2_1), H_CHECK_EQ_MSG_BODY_NAME(2_1), - "2", "1", "2 != 1: 2 does not match 1", false }, - { H_CHECK_EQ_MSG_HEAD_NAME(2_2), H_CHECK_EQ_MSG_BODY_NAME(2_2), - "2", "2", "2 != 2: 2 does not match 2", true }, - { NULL, NULL, 0, 0, "", false } - }; - do_check_eq_tests(tests); -} - -H_CHECK_STREQ(1_1, "1", "1"); -H_CHECK_STREQ(1_2, "1", "2"); -H_CHECK_STREQ(2_1, "2", "1"); -H_CHECK_STREQ(2_2, "2", "2"); -H_CHECK_STREQ_MSG(1_1, "1", "1", "1 does not match 1"); -H_CHECK_STREQ_MSG(1_2, "1", "2", "1 does not match 2"); -H_CHECK_STREQ_MSG(2_1, "2", "1", "2 does not match 1"); -H_CHECK_STREQ_MSG(2_2, "2", "2", "2 does not match 2"); -#define CHECK_STREQ_VAR1 "5" -#define CHECK_STREQ_VAR2 "9" -const const char *check_streq_var1 = CHECK_STREQ_VAR1; -const const char *check_streq_var2 = CHECK_STREQ_VAR2; -H_CHECK_STREQ(vars, check_streq_var1, check_streq_var2); - -ATF_TC(check_streq); -ATF_TC_HEAD(check_streq, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the ATF_CHECK_STREQ and " - "ATF_CHECK_STREQ_MSG macros"); -} -ATF_TC_BODY(check_streq, tc) -{ - struct check_eq_test tests[] = { - { H_CHECK_STREQ_HEAD_NAME(1_1), H_CHECK_STREQ_BODY_NAME(1_1), - "1", "1", "\"1\" != \"1\" \\(1 != 1\\)", true }, - { H_CHECK_STREQ_HEAD_NAME(1_2), H_CHECK_STREQ_BODY_NAME(1_2), - "1", "2", "\"1\" != \"2\" \\(1 != 2\\)", false }, - { H_CHECK_STREQ_HEAD_NAME(2_1), H_CHECK_STREQ_BODY_NAME(2_1), - "2", "1", "\"2\" != \"1\" \\(2 != 1\\)", false }, - { H_CHECK_STREQ_HEAD_NAME(2_2), H_CHECK_STREQ_BODY_NAME(2_2), - "2", "2", "\"2\" != \"2\" \\(2 != 2\\)", true }, - { H_CHECK_STREQ_MSG_HEAD_NAME(1_1), - H_CHECK_STREQ_MSG_BODY_NAME(1_1), - "1", "1", "\"1\" != \"1\" \\(1 != 1\\): 1 does not match 1", true }, - { H_CHECK_STREQ_MSG_HEAD_NAME(1_2), - H_CHECK_STREQ_MSG_BODY_NAME(1_2), - "1", "2", "\"1\" != \"2\" \\(1 != 2\\): 1 does not match 2", false }, - { H_CHECK_STREQ_MSG_HEAD_NAME(2_1), - H_CHECK_STREQ_MSG_BODY_NAME(2_1), - "2", "1", "\"2\" != \"1\" \\(2 != 1\\): 2 does not match 1", false }, - { H_CHECK_STREQ_MSG_HEAD_NAME(2_2), - H_CHECK_STREQ_MSG_BODY_NAME(2_2), - "2", "2", "\"2\" != \"2\" \\(2 != 2\\): 2 does not match 2", true }, - { H_CHECK_STREQ_HEAD_NAME(vars), H_CHECK_STREQ_BODY_NAME(vars), - check_streq_var1, check_streq_var2, - "check_streq_var1 != check_streq_var2 \\(" - CHECK_STREQ_VAR1 " != " CHECK_STREQ_VAR2 "\\)", false }, - { NULL, NULL, 0, 0, "", false } - }; - do_check_eq_tests(tests); -} - -/* --------------------------------------------------------------------- - * Test cases for the ATF_REQUIRE and ATF_REQUIRE_MSG macros. - * --------------------------------------------------------------------- */ - -H_REQUIRE(0, 0); -H_REQUIRE(1, 1); -H_REQUIRE_MSG(0, 0, "expected a false value"); -H_REQUIRE_MSG(1, 1, "expected a true value"); - -ATF_TC(require); -ATF_TC_HEAD(require, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the ATF_REQUIRE and " - "ATF_REQUIRE_MSG macros"); -} -ATF_TC_BODY(require, tc) -{ - struct test { - void (*head)(atf_tc_t *); - void (*body)(const atf_tc_t *); - bool value; - const char *msg; - bool ok; - } *t, tests[] = { - { H_REQUIRE_HEAD_NAME(0), H_REQUIRE_BODY_NAME(0), 0, - "0 not met", false }, - { H_REQUIRE_HEAD_NAME(1), H_REQUIRE_BODY_NAME(1), 1, - "1 not met", true }, - { H_REQUIRE_MSG_HEAD_NAME(0), H_REQUIRE_MSG_BODY_NAME(0), 0, - "expected a false value", false }, - { H_REQUIRE_MSG_HEAD_NAME(1), H_REQUIRE_MSG_BODY_NAME(1), 1, - "expected a true value", true }, - { NULL, NULL, false, NULL, false } - }; - - for (t = &tests[0]; t->head != NULL; t++) { - printf("Checking with a %d value\n", t->value); - - init_and_run_h_tc("h_require", t->head, t->body); - - ATF_REQUIRE(exists("before")); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(exists("after")); - } else { - ATF_REQUIRE(grep_file("result", "^failed: .*macros_test.c:[0-9]+: " - "%s$", t->msg)); - ATF_REQUIRE(!exists("after")); - } - - ATF_REQUIRE(unlink("before") != -1); - if (t->ok) - ATF_REQUIRE(unlink("after") != -1); - } -} - -/* --------------------------------------------------------------------- - * Test cases for the ATF_REQUIRE_*EQ_ macros. - * --------------------------------------------------------------------- */ - -struct require_eq_test { - void (*head)(atf_tc_t *); - void (*body)(const atf_tc_t *); - const char *v1; - const char *v2; - const char *msg; - bool ok; -}; - -static -void -do_require_eq_tests(const struct require_eq_test *tests) -{ - const struct require_eq_test *t; - - for (t = &tests[0]; t->head != NULL; t++) { - printf("Checking with %s, %s and expecting %s\n", t->v1, t->v2, - t->ok ? "true" : "false"); - - init_and_run_h_tc("h_require", t->head, t->body); - - ATF_REQUIRE(exists("before")); - if (t->ok) { - ATF_REQUIRE(grep_file("result", "^passed")); - ATF_REQUIRE(exists("after")); - } else { - ATF_REQUIRE(grep_file("result", "^failed: .*macros_test.c" - ":[0-9]+: %s$", t->msg)); - ATF_REQUIRE(!exists("after")); - } - - ATF_REQUIRE(unlink("before") != -1); - if (t->ok) - ATF_REQUIRE(unlink("after") != -1); - } -} - -H_REQUIRE_EQ(1_1, 1, 1); -H_REQUIRE_EQ(1_2, 1, 2); -H_REQUIRE_EQ(2_1, 2, 1); -H_REQUIRE_EQ(2_2, 2, 2); -H_REQUIRE_EQ_MSG(1_1, 1, 1, "1 does not match 1"); -H_REQUIRE_EQ_MSG(1_2, 1, 2, "1 does not match 2"); -H_REQUIRE_EQ_MSG(2_1, 2, 1, "2 does not match 1"); -H_REQUIRE_EQ_MSG(2_2, 2, 2, "2 does not match 2"); - -ATF_TC(require_eq); -ATF_TC_HEAD(require_eq, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the ATF_REQUIRE_EQ and " - "ATF_REQUIRE_EQ_MSG macros"); -} -ATF_TC_BODY(require_eq, tc) -{ - struct require_eq_test tests[] = { - { H_REQUIRE_EQ_HEAD_NAME(1_1), H_REQUIRE_EQ_BODY_NAME(1_1), - "1", "1", "1 != 1", true }, - { H_REQUIRE_EQ_HEAD_NAME(1_2), H_REQUIRE_EQ_BODY_NAME(1_2), - "1", "2", "1 != 2", false }, - { H_REQUIRE_EQ_HEAD_NAME(2_1), H_REQUIRE_EQ_BODY_NAME(2_1), - "2", "1", "2 != 1", false }, - { H_REQUIRE_EQ_HEAD_NAME(2_2), H_REQUIRE_EQ_BODY_NAME(2_2), - "2", "2", "2 != 2", true }, - { H_REQUIRE_EQ_MSG_HEAD_NAME(1_1), H_REQUIRE_EQ_MSG_BODY_NAME(1_1), - "1", "1", "1 != 1: 1 does not match 1", true }, - { H_REQUIRE_EQ_MSG_HEAD_NAME(1_2), H_REQUIRE_EQ_MSG_BODY_NAME(1_2), - "1", "2", "1 != 2: 1 does not match 2", false }, - { H_REQUIRE_EQ_MSG_HEAD_NAME(2_1), H_REQUIRE_EQ_MSG_BODY_NAME(2_1), - "2", "1", "2 != 1: 2 does not match 1", false }, - { H_REQUIRE_EQ_MSG_HEAD_NAME(2_2), H_REQUIRE_EQ_MSG_BODY_NAME(2_2), - "2", "2", "2 != 2: 2 does not match 2", true }, - { NULL, NULL, 0, 0, "", false } - }; - do_require_eq_tests(tests); -} - -H_REQUIRE_STREQ(1_1, "1", "1"); -H_REQUIRE_STREQ(1_2, "1", "2"); -H_REQUIRE_STREQ(2_1, "2", "1"); -H_REQUIRE_STREQ(2_2, "2", "2"); -H_REQUIRE_STREQ_MSG(1_1, "1", "1", "1 does not match 1"); -H_REQUIRE_STREQ_MSG(1_2, "1", "2", "1 does not match 2"); -H_REQUIRE_STREQ_MSG(2_1, "2", "1", "2 does not match 1"); -H_REQUIRE_STREQ_MSG(2_2, "2", "2", "2 does not match 2"); -#define REQUIRE_STREQ_VAR1 "5" -#define REQUIRE_STREQ_VAR2 "9" -const const char *require_streq_var1 = REQUIRE_STREQ_VAR1; -const const char *require_streq_var2 = REQUIRE_STREQ_VAR2; -H_REQUIRE_STREQ(vars, require_streq_var1, require_streq_var2); - -ATF_TC(require_streq); -ATF_TC_HEAD(require_streq, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the ATF_REQUIRE_STREQ and " - "ATF_REQUIRE_STREQ_MSG macros"); -} -ATF_TC_BODY(require_streq, tc) -{ - struct require_eq_test tests[] = { - { H_REQUIRE_STREQ_HEAD_NAME(1_1), H_REQUIRE_STREQ_BODY_NAME(1_1), - "1", "1", "\"1\" != \"1\" \\(1 != 1\\)", true }, - { H_REQUIRE_STREQ_HEAD_NAME(1_2), H_REQUIRE_STREQ_BODY_NAME(1_2), - "1", "2", "\"1\" != \"2\" \\(1 != 2\\)", false }, - { H_REQUIRE_STREQ_HEAD_NAME(2_1), H_REQUIRE_STREQ_BODY_NAME(2_1), - "2", "1", "\"2\" != \"1\" \\(2 != 1\\)", false }, - { H_REQUIRE_STREQ_HEAD_NAME(2_2), H_REQUIRE_STREQ_BODY_NAME(2_2), - "2", "2", "\"2\" != \"2\" \\(2 != 2\\)", true }, - { H_REQUIRE_STREQ_MSG_HEAD_NAME(1_1), - H_REQUIRE_STREQ_MSG_BODY_NAME(1_1), - "1", "1", "\"1\" != \"1\" \\(1 != 1\\): 1 does not match 1", true }, - { H_REQUIRE_STREQ_MSG_HEAD_NAME(1_2), - H_REQUIRE_STREQ_MSG_BODY_NAME(1_2), - "1", "2", "\"1\" != \"2\" \\(1 != 2\\): 1 does not match 2", false }, - { H_REQUIRE_STREQ_MSG_HEAD_NAME(2_1), - H_REQUIRE_STREQ_MSG_BODY_NAME(2_1), - "2", "1", "\"2\" != \"1\" \\(2 != 1\\): 2 does not match 1", false }, - { H_REQUIRE_STREQ_MSG_HEAD_NAME(2_2), - H_REQUIRE_STREQ_MSG_BODY_NAME(2_2), - "2", "2", "\"2\" != \"2\" \\(2 != 2\\): 2 does not match 2", true }, - { H_REQUIRE_STREQ_HEAD_NAME(vars), H_REQUIRE_STREQ_BODY_NAME(vars), - require_streq_var1, require_streq_var2, - "require_streq_var1 != require_streq_var2 \\(" - REQUIRE_STREQ_VAR1 " != " REQUIRE_STREQ_VAR2 "\\)", false }, - { NULL, NULL, 0, 0, "", false } - }; - do_require_eq_tests(tests); -} - -/* --------------------------------------------------------------------- - * Miscellaneous test cases covering several macros. - * --------------------------------------------------------------------- */ - -static -bool -aux_bool(const char *fmt) -{ - return false; -} - -static -const char * -aux_str(const char *fmt) -{ - return "foo"; -} - -H_CHECK(msg, aux_bool("%d")); -H_REQUIRE(msg, aux_bool("%d")); -H_CHECK_STREQ(msg, aux_str("%d"), ""); -H_REQUIRE_STREQ(msg, aux_str("%d"), ""); - -ATF_TC(msg_embedded_fmt); -ATF_TC_HEAD(msg_embedded_fmt, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests that format strings passed " - "as part of the automatically-generated messages " - "do not get expanded"); -} -ATF_TC_BODY(msg_embedded_fmt, tc) -{ - struct test { - void (*head)(atf_tc_t *); - void (*body)(const atf_tc_t *); - bool fatal; - const char *msg; - } *t, tests[] = { - { H_CHECK_HEAD_NAME(msg), H_CHECK_BODY_NAME(msg), false, - "aux_bool\\(\"%d\"\\) not met" }, - { H_REQUIRE_HEAD_NAME(msg), H_REQUIRE_BODY_NAME(msg), true, - "aux_bool\\(\"%d\"\\) not met" }, - { H_CHECK_STREQ_HEAD_NAME(msg), H_CHECK_STREQ_BODY_NAME(msg), false, - "aux_str\\(\"%d\"\\) != \"\" \\(foo != \\)" }, - { H_REQUIRE_STREQ_HEAD_NAME(msg), H_REQUIRE_STREQ_BODY_NAME(msg), true, - "aux_str\\(\"%d\"\\) != \"\" \\(foo != \\)" }, - { NULL, NULL, false, NULL } - }; - - for (t = &tests[0]; t->head != NULL; t++) { - printf("Checking with an expected '%s' message\n", t->msg); - - init_and_run_h_tc("h_check", t->head, t->body); - - if (t->fatal) { - bool matched = - grep_file("result", "^failed: .*macros_test.c:[0-9]+: " - "%s$", t->msg); - ATF_CHECK_MSG(matched, "couldn't find error string in result"); - } else { - bool matched = grep_file("error", "Check failed: .*" - "macros_test.c:[0-9]+: %s$", t->msg); - ATF_CHECK_MSG(matched, "couldn't find error string in output"); - } - } -} - -/* --------------------------------------------------------------------- - * Tests cases for the header file. - * --------------------------------------------------------------------- */ - -HEADER_TC(include, "atf-c/macros.h"); -BUILD_TC(use, "macros_h_test.c", - "Tests that the macros provided by the atf-c/macros.h file " - "do not cause syntax errors when used", - "Build of macros_h_test.c failed; some macros in atf-c/macros.h " - "are broken"); - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, check); - ATF_TP_ADD_TC(tp, check_eq); - ATF_TP_ADD_TC(tp, check_streq); - ATF_TP_ADD_TC(tp, check_errno); - - ATF_TP_ADD_TC(tp, require); - ATF_TP_ADD_TC(tp, require_eq); - ATF_TP_ADD_TC(tp, require_streq); - ATF_TP_ADD_TC(tp, require_errno); - - ATF_TP_ADD_TC(tp, msg_embedded_fmt); - - /* Add the test cases for the header file. */ - ATF_TP_ADD_TC(tp, include); - ATF_TP_ADD_TC(tp, use); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/utils_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/utils_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/utils_test.c (nonexistent) @@ -1,70 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2010 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include - -#include "atf-c/utils.h" - -#include "detail/test_helpers.h" - -ATF_TC_WITHOUT_HEAD(free_charpp_empty); -ATF_TC_BODY(free_charpp_empty, tc) -{ - char **array = malloc(sizeof(char *) * 1); - array[0] = NULL; - - atf_utils_free_charpp(array); -} - -ATF_TC_WITHOUT_HEAD(free_charpp_some); -ATF_TC_BODY(free_charpp_some, tc) -{ - char **array = malloc(sizeof(char *) * 4); - array[0] = strdup("first"); - array[1] = strdup("second"); - array[2] = strdup("third"); - array[3] = NULL; - - atf_utils_free_charpp(array); -} - -HEADER_TC(include, "atf-c/utils.h"); - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, free_charpp_empty); - ATF_TP_ADD_TC(tp, free_charpp_some); - - ATF_TP_ADD_TC(tp, include); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/Kyuafile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/Kyuafile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/Kyuafile (nonexistent) @@ -1,16 +0,0 @@ -syntax("kyuafile", 1) - -test_suite("atf") - -atf_test_program{name="atf_c_test"} -atf_test_program{name="build_test"} -atf_test_program{name="check_test"} -atf_test_program{name="config_test"} -atf_test_program{name="error_test"} -atf_test_program{name="macros_test"} -atf_test_program{name="pkg_config_test"} -atf_test_program{name="tc_test"} -atf_test_program{name="tp_test"} -atf_test_program{name="utils_test"} - -include("detail/Kyuafile") Index: vendor/NetBSD/atf/dist/dist/atf-c/error.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/error.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/error.c (nonexistent) @@ -1,267 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include - -#include "atf-c/error.h" - -#include "detail/sanity.h" - -/* Theoretically, there can only be a single error intance at any given - * point in time, because errors are raised at one point and must be - * handled immediately. If another error has to be raised during the - * handling process, something else has to be done with the previous - * error. - * - * This is per-thread information and will break threaded tests, but we - * currently do not have any threading support; therefore, this is fine. */ -static bool error_on_flight = false; - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -void -error_format(const atf_error_t err, char *buf, size_t buflen) -{ - PRE(err != NULL); - snprintf(buf, buflen, "Error '%s'", err->m_type); -} - -static -bool -error_init(atf_error_t err, const char *type, void *data, size_t datalen, - void (*format)(const atf_error_t, char *, size_t)) -{ - bool ok; - - PRE(data != NULL || datalen == 0); - PRE(datalen != 0 || data == NULL); - - err->m_free = false; - err->m_type = type; - err->m_format = (format == NULL) ? error_format : format; - - ok = true; - if (data == NULL) { - err->m_data = NULL; - } else { - err->m_data = malloc(datalen); - if (err->m_data == NULL) { - ok = false; - } else - memcpy(err->m_data, data, datalen); - } - - return ok; -} - -/* --------------------------------------------------------------------- - * The "atf_error" type. - * --------------------------------------------------------------------- */ - -atf_error_t -atf_error_new(const char *type, void *data, size_t datalen, - void (*format)(const atf_error_t, char *, size_t)) -{ - atf_error_t err; - - PRE(!error_on_flight); - PRE(data != NULL || datalen == 0); - PRE(datalen != 0 || data == NULL); - - err = malloc(sizeof(*err)); - if (err == NULL) - err = atf_no_memory_error(); - else { - if (!error_init(err, type, data, datalen, format)) { - free(err); - err = atf_no_memory_error(); - } else { - err->m_free = true; - error_on_flight = true; - } - } - - INV(err != NULL); - POST(error_on_flight); - return err; -} - -void -atf_error_free(atf_error_t err) -{ - bool freeit; - - PRE(error_on_flight); - PRE(err != NULL); - - freeit = err->m_free; - - if (err->m_data != NULL) - free(err->m_data); - - if (freeit) - free(err); - - error_on_flight = false; -} - -atf_error_t -atf_no_error(void) -{ - return NULL; -} - -bool -atf_is_error(const atf_error_t err) -{ - return err != NULL; -} - -bool -atf_error_is(const atf_error_t err, const char *type) -{ - PRE(err != NULL); - - return strcmp(err->m_type, type) == 0; -} - -const void * -atf_error_data(const atf_error_t err) -{ - PRE(err != NULL); - - return err->m_data; -} - -void -atf_error_format(const atf_error_t err, char *buf, size_t buflen) -{ - PRE(err != NULL); - err->m_format(err, buf, buflen); -} - -/* --------------------------------------------------------------------- - * Common error types. - * --------------------------------------------------------------------- */ - -/* - * The "libc" error. - */ - -struct atf_libc_error_data { - int m_errno; - char m_what[4096]; -}; -typedef struct atf_libc_error_data atf_libc_error_data_t; - -static -void -libc_format(const atf_error_t err, char *buf, size_t buflen) -{ - const atf_libc_error_data_t *data; - - PRE(atf_error_is(err, "libc")); - - data = atf_error_data(err); - snprintf(buf, buflen, "%s: %s", data->m_what, strerror(data->m_errno)); -} - -atf_error_t -atf_libc_error(int syserrno, const char *fmt, ...) -{ - atf_error_t err; - atf_libc_error_data_t data; - va_list ap; - - data.m_errno = syserrno; - va_start(ap, fmt); - vsnprintf(data.m_what, sizeof(data.m_what), fmt, ap); - va_end(ap); - - err = atf_error_new("libc", &data, sizeof(data), libc_format); - - return err; -} - -int -atf_libc_error_code(const atf_error_t err) -{ - const struct atf_libc_error_data *data; - - PRE(atf_error_is(err, "libc")); - - data = atf_error_data(err); - - return data->m_errno; -} - -const char * -atf_libc_error_msg(const atf_error_t err) -{ - const struct atf_libc_error_data *data; - - PRE(atf_error_is(err, "libc")); - - data = atf_error_data(err); - - return data->m_what; -} - -/* - * The "no_memory" error. - */ - -static struct atf_error no_memory_error; - -static -void -no_memory_format(const atf_error_t err, char *buf, size_t buflen) -{ - PRE(atf_error_is(err, "no_memory")); - - snprintf(buf, buflen, "Not enough memory"); -} - -atf_error_t -atf_no_memory_error(void) -{ - PRE(!error_on_flight); - - error_init(&no_memory_error, "no_memory", NULL, 0, - no_memory_format); - - error_on_flight = true; - return &no_memory_error; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/macros.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/macros.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/macros.h (nonexistent) @@ -1,186 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_MACROS_H) -#define ATF_C_MACROS_H - -#include -#include -#include - -#define ATF_TC_NAME(tc) \ - (atfu_ ## tc ## _tc) - -#define ATF_TC_PACK_NAME(tc) \ - (atfu_ ## tc ## _tc_pack) - -#define ATF_TC_WITHOUT_HEAD(tc) \ - static void atfu_ ## tc ## _body(const atf_tc_t *); \ - static atf_tc_t atfu_ ## tc ## _tc; \ - static atf_tc_pack_t atfu_ ## tc ## _tc_pack = { \ - .m_ident = #tc, \ - .m_head = NULL, \ - .m_body = atfu_ ## tc ## _body, \ - .m_cleanup = NULL, \ - } - -#define ATF_TC(tc) \ - static void atfu_ ## tc ## _head(atf_tc_t *); \ - static void atfu_ ## tc ## _body(const atf_tc_t *); \ - static atf_tc_t atfu_ ## tc ## _tc; \ - static atf_tc_pack_t atfu_ ## tc ## _tc_pack = { \ - .m_ident = #tc, \ - .m_head = atfu_ ## tc ## _head, \ - .m_body = atfu_ ## tc ## _body, \ - .m_cleanup = NULL, \ - } - -#define ATF_TC_WITH_CLEANUP(tc) \ - static void atfu_ ## tc ## _head(atf_tc_t *); \ - static void atfu_ ## tc ## _body(const atf_tc_t *); \ - static void atfu_ ## tc ## _cleanup(const atf_tc_t *); \ - static atf_tc_t atfu_ ## tc ## _tc; \ - static atf_tc_pack_t atfu_ ## tc ## _tc_pack = { \ - .m_ident = #tc, \ - .m_head = atfu_ ## tc ## _head, \ - .m_body = atfu_ ## tc ## _body, \ - .m_cleanup = atfu_ ## tc ## _cleanup, \ - } - -#define ATF_TC_HEAD(tc, tcptr) \ - static \ - void \ - atfu_ ## tc ## _head(atf_tc_t *tcptr) - -#define ATF_TC_HEAD_NAME(tc) \ - (atfu_ ## tc ## _head) - -#define ATF_TC_BODY(tc, tcptr) \ - static \ - void \ - atfu_ ## tc ## _body(const atf_tc_t *tcptr) - -#define ATF_TC_BODY_NAME(tc) \ - (atfu_ ## tc ## _body) - -#define ATF_TC_CLEANUP(tc, tcptr) \ - static \ - void \ - atfu_ ## tc ## _cleanup(const atf_tc_t *tcptr) - -#define ATF_TC_CLEANUP_NAME(tc) \ - (atfu_ ## tc ## _cleanup) - -#define ATF_TP_ADD_TCS(tps) \ - static atf_error_t atfu_tp_add_tcs(atf_tp_t *); \ - int atf_tp_main(int, char **, atf_error_t (*)(atf_tp_t *)); \ - \ - int \ - main(int argc, char **argv) \ - { \ - return atf_tp_main(argc, argv, atfu_tp_add_tcs); \ - } \ - static \ - atf_error_t \ - atfu_tp_add_tcs(atf_tp_t *tps) - -#define ATF_TP_ADD_TC(tp, tc) \ - do { \ - atf_error_t atfu_err; \ - char **atfu_config = atf_tp_get_config(tp); \ - if (atfu_config == NULL) \ - return atf_no_memory_error(); \ - atfu_err = atf_tc_init_pack(&atfu_ ## tc ## _tc, \ - &atfu_ ## tc ## _tc_pack, \ - (const char *const *)atfu_config); \ - atf_utils_free_charpp(atfu_config); \ - if (atf_is_error(atfu_err)) \ - return atfu_err; \ - atfu_err = atf_tp_add_tc(tp, &atfu_ ## tc ## _tc); \ - if (atf_is_error(atfu_err)) \ - return atfu_err; \ - } while (0) - -#define ATF_REQUIRE_MSG(x, fmt, ...) \ - do { \ - if (!(x)) \ - atf_tc_fail_requirement(__FILE__, __LINE__, fmt, ##__VA_ARGS__); \ - } while(0) - -#define ATF_CHECK_MSG(x, fmt, ...) \ - do { \ - if (!(x)) \ - atf_tc_fail_check(__FILE__, __LINE__, fmt, ##__VA_ARGS__); \ - } while(0) - -#define ATF_REQUIRE(x) \ - do { \ - if (!(x)) \ - atf_tc_fail_requirement(__FILE__, __LINE__, "%s", #x " not met"); \ - } while(0) - -#define ATF_CHECK(x) \ - do { \ - if (!(x)) \ - atf_tc_fail_check(__FILE__, __LINE__, "%s", #x " not met"); \ - } while(0) - -#define ATF_REQUIRE_EQ(x, y) \ - ATF_REQUIRE_MSG((x) == (y), "%s != %s", #x, #y) - -#define ATF_CHECK_EQ(x, y) \ - ATF_CHECK_MSG((x) == (y), "%s != %s", #x, #y) - -#define ATF_REQUIRE_EQ_MSG(x, y, fmt, ...) \ - ATF_REQUIRE_MSG((x) == (y), "%s != %s: " fmt, #x, #y, ##__VA_ARGS__) - -#define ATF_CHECK_EQ_MSG(x, y, fmt, ...) \ - ATF_CHECK_MSG((x) == (y), "%s != %s: " fmt, #x, #y, ##__VA_ARGS__) - -#define ATF_REQUIRE_STREQ(x, y) \ - ATF_REQUIRE_MSG(strcmp(x, y) == 0, "%s != %s (%s != %s)", #x, #y, x, y) - -#define ATF_CHECK_STREQ(x, y) \ - ATF_CHECK_MSG(strcmp(x, y) == 0, "%s != %s (%s != %s)", #x, #y, x, y) - -#define ATF_REQUIRE_STREQ_MSG(x, y, fmt, ...) \ - ATF_REQUIRE_MSG(strcmp(x, y) == 0, "%s != %s (%s != %s): " fmt, \ - #x, #y, x, y, ##__VA_ARGS__) - -#define ATF_CHECK_STREQ_MSG(x, y, fmt, ...) \ - ATF_CHECK_MSG(strcmp(x, y) == 0, "%s != %s (%s != %s): " fmt, \ - #x, #y, x, y, ##__VA_ARGS__) - -#define ATF_CHECK_ERRNO(exp_errno, bool_expr) \ - atf_tc_check_errno(__FILE__, __LINE__, exp_errno, #bool_expr, bool_expr) - -#define ATF_REQUIRE_ERRNO(exp_errno, bool_expr) \ - atf_tc_require_errno(__FILE__, __LINE__, exp_errno, #bool_expr, bool_expr) - -#endif /* !defined(ATF_C_MACROS_H) */ Index: vendor/NetBSD/atf/dist/dist/atf-c/tc_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/tc_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/tc_test.c (nonexistent) @@ -1,194 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include - -#include "detail/test_helpers.h" - -/* --------------------------------------------------------------------- - * Auxiliary test cases. - * --------------------------------------------------------------------- */ - -ATF_TC_HEAD(empty, tc) -{ -} - -ATF_TC_HEAD(test_var, tc) -{ - atf_tc_set_md_var(tc, "test-var", "Test text"); -} - -ATF_TC_BODY(empty, tc) -{ -} - -/* --------------------------------------------------------------------- - * Test cases for the "atf_tc_t" type. - * --------------------------------------------------------------------- */ - -ATF_TC(init); -ATF_TC_HEAD(init, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init function"); -} -ATF_TC_BODY(init, tcin) -{ - atf_tc_t tc; - - RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), - ATF_TC_BODY_NAME(empty), NULL, NULL)); - ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0); - ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); - atf_tc_fini(&tc); - - RE(atf_tc_init(&tc, "test2", ATF_TC_HEAD_NAME(test_var), - ATF_TC_BODY_NAME(empty), NULL, NULL)); - ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0); - ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var")); - atf_tc_fini(&tc); -} - -ATF_TC(init_pack); -ATF_TC_HEAD(init_pack, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_init_pack function"); -} -ATF_TC_BODY(init_pack, tcin) -{ - atf_tc_t tc; - atf_tc_pack_t tcp1 = { - .m_ident = "test1", - .m_head = ATF_TC_HEAD_NAME(empty), - .m_body = ATF_TC_BODY_NAME(empty), - .m_cleanup = NULL, - }; - atf_tc_pack_t tcp2 = { - .m_ident = "test2", - .m_head = ATF_TC_HEAD_NAME(test_var), - .m_body = ATF_TC_BODY_NAME(empty), - .m_cleanup = NULL, - }; - - RE(atf_tc_init_pack(&tc, &tcp1, NULL)); - ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test1") == 0); - ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); - atf_tc_fini(&tc); - - RE(atf_tc_init_pack(&tc, &tcp2, NULL)); - ATF_REQUIRE(strcmp(atf_tc_get_ident(&tc), "test2") == 0); - ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var")); - atf_tc_fini(&tc); -} - -ATF_TC(vars); -ATF_TC_HEAD(vars, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_md_var, " - "atf_tc_has_md_var and atf_tc_set_md_var functions"); -} -ATF_TC_BODY(vars, tcin) -{ - atf_tc_t tc; - - RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), - ATF_TC_BODY_NAME(empty), NULL, NULL)); - ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); - RE(atf_tc_set_md_var(&tc, "test-var", "Test value")); - ATF_REQUIRE(atf_tc_has_md_var(&tc, "test-var")); - ATF_REQUIRE(strcmp(atf_tc_get_md_var(&tc, "test-var"), "Test value") == 0); - atf_tc_fini(&tc); -} - -ATF_TC(config); -ATF_TC_HEAD(config, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_tc_get_config_var, " - "atf_tc_get_config_var_wd and atf_tc_has_config_var " - "functions"); -} -ATF_TC_BODY(config, tcin) -{ - atf_tc_t tc; - const char *const config[] = { "test-var", "test-value", NULL }; - - RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), - ATF_TC_BODY_NAME(empty), NULL, NULL)); - ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var")); - ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); - atf_tc_fini(&tc); - - RE(atf_tc_init(&tc, "test1", ATF_TC_HEAD_NAME(empty), - ATF_TC_BODY_NAME(empty), NULL, config)); - ATF_REQUIRE(atf_tc_has_config_var(&tc, "test-var")); - ATF_REQUIRE(strcmp(atf_tc_get_config_var(&tc, "test-var"), - "test-value") == 0); - ATF_REQUIRE(!atf_tc_has_md_var(&tc, "test-var")); - ATF_REQUIRE(!atf_tc_has_config_var(&tc, "test-var2")); - ATF_REQUIRE(strcmp(atf_tc_get_config_var_wd(&tc, "test-var2", "def-value"), - "def-value") == 0); - atf_tc_fini(&tc); -} - -/* --------------------------------------------------------------------- - * Test cases for the free functions. - * --------------------------------------------------------------------- */ - -/* TODO: Add test cases for atf_tc_run. This is going to be very tough, - * but good tests here could allow us to avoid much of the indirect - * testing done later on. */ - -/* --------------------------------------------------------------------- - * Tests cases for the header file. - * --------------------------------------------------------------------- */ - -HEADER_TC(include, "atf-c/tc.h"); - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Add the test cases for the "atf_tcr_t" type. */ - ATF_TP_ADD_TC(tp, init); - ATF_TP_ADD_TC(tp, init_pack); - ATF_TP_ADD_TC(tp, vars); - ATF_TP_ADD_TC(tp, config); - - /* Add the test cases for the free functions. */ - /* TODO */ - - /* Add the test cases for the header file. */ - ATF_TP_ADD_TC(tp, include); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/tp_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/tp_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/tp_test.c (nonexistent) @@ -1,100 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2010 The NetBSD Foundation, Inc. - * 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 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 -#include - -#include - -#include "detail/test_helpers.h" - -ATF_TC(getopt); -ATF_TC_HEAD(getopt, tc) -{ - atf_tc_set_md_var(tc, "descr", "Checks if getopt(3) global state is " - "reset by the test program driver so that test cases can use " - "getopt(3) again"); -} -ATF_TC_BODY(getopt, tc) -{ - /* Provide an option that is unknown to the test program driver and - * one that is, together with an argument that would be swallowed by - * the test program option if it were recognized. */ - int argc = 4; - char arg1[] = "progname"; - char arg2[] = "-Z"; - char arg3[] = "-s"; - char arg4[] = "foo"; - char *const argv[] = { arg1, arg2, arg3, arg4, NULL }; - - int ch; - bool zflag; - - /* Given that this obviously is a test program, and that we used the - * same driver to start, we can test getopt(3) right here without doing - * any fancy stuff. */ - zflag = false; - while ((ch = getopt(argc, argv, ":Z")) != -1) { - switch (ch) { - case 'Z': - zflag = true; - break; - - case '?': - default: - if (optopt != 's') - atf_tc_fail("Unexpected unknown option -%c found", optopt); - } - } - - ATF_REQUIRE_EQ_MSG(1, argc - optind, "Invalid number of arguments left " - "after the call to getopt(3)"); - ATF_CHECK_STREQ_MSG("foo", argv[optind], "The non-option argument is " - "invalid"); -} - -/* --------------------------------------------------------------------- - * Tests cases for the header file. - * --------------------------------------------------------------------- */ - -HEADER_TC(include, "atf-c/tp.h"); - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - ATF_TP_ADD_TC(tp, getopt); - - /* Add the test cases for the header file. */ - ATF_TP_ADD_TC(tp, include); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/error.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/error.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/error.h (nonexistent) @@ -1,71 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_ERROR_H) -#define ATF_C_ERROR_H - -#include -#include - -#include - -/* --------------------------------------------------------------------- - * The "atf_error" type. - * --------------------------------------------------------------------- */ - -struct atf_error { - bool m_free; - const char *m_type; - void *m_data; - - void (*m_format)(struct atf_error *, char *, size_t); -}; - -atf_error_t atf_error_new(const char *, void *, size_t, - void (*)(const atf_error_t, char *, size_t)); -void atf_error_free(atf_error_t); - -atf_error_t atf_no_error(void); -bool atf_is_error(const atf_error_t); - -bool atf_error_is(const atf_error_t, const char *); -const void *atf_error_data(const atf_error_t); -void atf_error_format(const atf_error_t, char *, size_t); - -/* --------------------------------------------------------------------- - * Common error types. - * --------------------------------------------------------------------- */ - -atf_error_t atf_libc_error(int, const char *, ...); -int atf_libc_error_code(const atf_error_t); -const char *atf_libc_error_msg(const atf_error_t); - -atf_error_t atf_no_memory_error(void); - -#endif /* ATF_C_ERROR_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/Atffile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/Atffile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/Atffile (nonexistent) @@ -1,16 +0,0 @@ -Content-Type: application/X-atf-atffile; version="1" - -prop: test-suite = atf - -tp: detail - -tp: atf_c_test -tp: build_test -tp: check_test -tp: config_test -tp: error_test -tp: macros_test -tp: pkg_config_test -tp: tc_test -tp: tp_test -tp: utils_test Index: vendor/NetBSD/atf/dist/dist/atf-c/pkg_config_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/pkg_config_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/pkg_config_test.sh (nonexistent) @@ -1,149 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -# The following tests assume that the atf-c.pc file is installed in a -# directory that is known by pkg-config. Otherwise they will fail, -# and you will be required to adjust PKG_CONFIG_PATH accordingly. -# -# It would be possible to bypass this requirement by setting the path -# explicitly during the tests, but then this would not do a real check -# to ensure that the installation is working. - -require_pc() -{ - pkg-config ${1} || atf_fail "pkg-config could not locate ${1}.pc;" \ - "maybe need to set PKG_CONFIG_PATH?" -} - -check_version() -{ - atf_check -s eq:0 -o save:stdout -e empty -x \ - "atf-version | head -n 1 | cut -d ' ' -f 4" - ver1=$(cat stdout) - echo "Version reported by atf-version: ${ver1}" - - atf_check -s eq:0 -o save:stdout -e empty pkg-config --modversion "${1}" - ver2=$(cat stdout) - echo "Version reported by pkg-config: ${ver2}" - - atf_check_equal ${ver1} ${ver2} -} - -atf_test_case version -version_head() -{ - atf_set "descr" "Checks that the version in atf-c is correct" - atf_set "require.progs" "pkg-config" -} -version_body() -{ - require_pc "atf-c" - - check_version "atf-c" -} - -atf_test_case build -build_head() -{ - atf_set "descr" "Checks that a test program can be built against" \ - "the C library based on the pkg-config information" - atf_set "require.progs" "pkg-config" -} -build_body() -{ - require_pc "atf-c" - - atf_check -s eq:0 -o save:stdout -e empty pkg-config --variable=cc atf-c - cc=$(cat stdout) - echo "Compiler is: ${cxx}" - atf_require_prog ${cxx} - - cat >tp.c < - -#include - -ATF_TC(tc); -ATF_TC_HEAD(tc, tc) { - atf_tc_set_md_var(tc, "descr", "A test case"); -} -ATF_TC_BODY(tc, tc) { - printf("Running\n"); -} - -ATF_TP_ADD_TCS(tp) { - ATF_TP_ADD_TC(tp, tc); - - return atf_no_error(); -} -EOF - - atf_check -s eq:0 -o save:stdout -e empty pkg-config --cflags atf-c - cflags=$(cat stdout) - echo "CFLAGS are: ${cflags}" - - atf_check -s eq:0 -o save:stdout -e empty \ - pkg-config --libs-only-L --libs-only-other atf-c - ldflags=$(cat stdout) - atf_check -s eq:0 -o save:stdout -e empty pkg-config --libs-only-l atf-c - libs=$(cat stdout) - echo "LDFLAGS are: ${ldflags}" - echo "LIBS are: ${libs}" - - atf_check -s eq:0 -o empty -e empty ${cc} ${cflags} -o tp.o -c tp.c - atf_check -s eq:0 -o empty -e empty ${cc} ${ldflags} -o tp tp.o ${libs} - - libpath= - for f in ${ldflags}; do - case ${f} in - -L*) - dir=$(echo ${f} | sed -e 's,^-L,,') - if [ -z "${libpath}" ]; then - libpath="${dir}" - else - libpath="${libpath}:${dir}" - fi - ;; - *) - ;; - esac - done - - atf_check -s eq:0 -o empty -e empty test -x tp - atf_check -s eq:0 -o match:'Running' -e empty -x \ - "LD_LIBRARY_PATH=${libpath} ./tp tc" -} - -atf_init_test_cases() -{ - atf_add_test_case version - atf_add_test_case build -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-c/check.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/check.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/check.c (nonexistent) @@ -1,491 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 - -#include -#include -#include -#include -#include -#include - -#include "atf-c/build.h" -#include "atf-c/check.h" -#include "atf-c/config.h" -#include "atf-c/defs.h" -#include "atf-c/error.h" -#include "atf-c/utils.h" - -#include "detail/dynstr.h" -#include "detail/fs.h" -#include "detail/list.h" -#include "detail/process.h" -#include "detail/sanity.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -atf_error_t -create_tmpdir(atf_fs_path_t *dir) -{ - atf_error_t err; - - err = atf_fs_path_init_fmt(dir, "%s/check.XXXXXX", - atf_config_get("atf_workdir")); - if (atf_is_error(err)) - goto out; - - err = atf_fs_mkdtemp(dir); - if (atf_is_error(err)) { - atf_fs_path_fini(dir); - goto out; - } - - INV(!atf_is_error(err)); -out: - return err; -} - -static -void -cleanup_tmpdir(const atf_fs_path_t *dir, const atf_fs_path_t *outfile, - const atf_fs_path_t *errfile) -{ - { - atf_error_t err = atf_fs_unlink(outfile); - if (atf_is_error(err)) { - INV(atf_error_is(err, "libc") && - atf_libc_error_code(err) == ENOENT); - atf_error_free(err); - } else - INV(!atf_is_error(err)); - } - - { - atf_error_t err = atf_fs_unlink(errfile); - if (atf_is_error(err)) { - INV(atf_error_is(err, "libc") && - atf_libc_error_code(err) == ENOENT); - atf_error_free(err); - } else - INV(!atf_is_error(err)); - } - - { - atf_error_t err = atf_fs_rmdir(dir); - INV(!atf_is_error(err)); - } -} - -static -int -const_execvp(const char *file, const char *const *argv) -{ -#define UNCONST(a) ((void *)(unsigned long)(const void *)(a)) - return execvp(file, UNCONST(argv)); -#undef UNCONST -} - -static -atf_error_t -init_sb(const atf_fs_path_t *path, atf_process_stream_t *sb) -{ - atf_error_t err; - - if (path == NULL) - err = atf_process_stream_init_inherit(sb); - else - err = atf_process_stream_init_redirect_path(sb, path); - - return err; -} - -static -atf_error_t -init_sbs(const atf_fs_path_t *outfile, atf_process_stream_t *outsb, - const atf_fs_path_t *errfile, atf_process_stream_t *errsb) -{ - atf_error_t err; - - err = init_sb(outfile, outsb); - if (atf_is_error(err)) - goto out; - - err = init_sb(errfile, errsb); - if (atf_is_error(err)) { - atf_process_stream_fini(outsb); - goto out; - } - -out: - return err; -} - -struct exec_data { - const char *const *m_argv; -}; - -static void exec_child(void *) ATF_DEFS_ATTRIBUTE_NORETURN; - -static -void -exec_child(void *v) -{ - struct exec_data *ea = v; - - const_execvp(ea->m_argv[0], ea->m_argv); - fprintf(stderr, "execvp(%s) failed: %s\n", ea->m_argv[0], strerror(errno)); - exit(127); -} - -static -atf_error_t -fork_and_wait(const char *const *argv, const atf_fs_path_t *outfile, - const atf_fs_path_t *errfile, atf_process_status_t *status) -{ - atf_error_t err; - atf_process_child_t child; - atf_process_stream_t outsb, errsb; - struct exec_data ea = { argv }; - - err = init_sbs(outfile, &outsb, errfile, &errsb); - if (atf_is_error(err)) - goto out; - - err = atf_process_fork(&child, exec_child, &outsb, &errsb, &ea); - if (atf_is_error(err)) - goto out_sbs; - - err = atf_process_child_wait(&child, status); - -out_sbs: - atf_process_stream_fini(&errsb); - atf_process_stream_fini(&outsb); -out: - return err; -} - -static -void -update_success_from_status(const char *progname, - const atf_process_status_t *status, bool *success) -{ - bool s = atf_process_status_exited(status) && - atf_process_status_exitstatus(status) == EXIT_SUCCESS; - - if (atf_process_status_exited(status)) { - if (atf_process_status_exitstatus(status) == EXIT_SUCCESS) - INV(s); - else { - INV(!s); - fprintf(stderr, "%s failed with exit code %d\n", progname, - atf_process_status_exitstatus(status)); - } - } else if (atf_process_status_signaled(status)) { - INV(!s); - fprintf(stderr, "%s failed due to signal %d%s\n", progname, - atf_process_status_termsig(status), - atf_process_status_coredump(status) ? " (core dumped)" : ""); - } else { - INV(!s); - fprintf(stderr, "%s failed due to unknown reason\n", progname); - } - - *success = s; -} - -static -atf_error_t -array_to_list(const char *const *a, atf_list_t *l) -{ - atf_error_t err; - - err = atf_list_init(l); - if (atf_is_error(err)) - goto out; - - while (*a != NULL) { - char *item = strdup(*a); - if (item == NULL) { - err = atf_no_memory_error(); - goto out; - } - - err = atf_list_append(l, item, true); - if (atf_is_error(err)) - goto out; - - a++; - } - -out: - return err; -} - -static void -print_array(const char *const *array, const char *pfx) -{ - const char *const *ptr; - - printf("%s", pfx); - for (ptr = array; *ptr != NULL; ptr++) - printf(" %s", *ptr); - printf("\n"); -} - -static -atf_error_t -check_build_run(const char *const *argv, bool *success) -{ - atf_error_t err; - atf_process_status_t status; - - print_array(argv, ">"); - - err = fork_and_wait(argv, NULL, NULL, &status); - if (atf_is_error(err)) - goto out; - - update_success_from_status(argv[0], &status, success); - atf_process_status_fini(&status); - - INV(!atf_is_error(err)); -out: - return err; -} - -/* --------------------------------------------------------------------- - * The "atf_check_result" type. - * --------------------------------------------------------------------- */ - -struct atf_check_result_impl { - atf_list_t m_argv; - atf_fs_path_t m_dir; - atf_fs_path_t m_stdout; - atf_fs_path_t m_stderr; - atf_process_status_t m_status; -}; - -static -atf_error_t -atf_check_result_init(atf_check_result_t *r, const char *const *argv, - const atf_fs_path_t *dir) -{ - atf_error_t err; - const char *workdir; - - r->pimpl = malloc(sizeof(struct atf_check_result_impl)); - if (r->pimpl == NULL) - return atf_no_memory_error(); - - workdir = atf_config_get("atf_workdir"); - - err = array_to_list(argv, &r->pimpl->m_argv); - if (atf_is_error(err)) - goto out; - - err = atf_fs_path_copy(&r->pimpl->m_dir, dir); - if (atf_is_error(err)) - goto err_argv; - - err = atf_fs_path_init_fmt(&r->pimpl->m_stdout, "%s/stdout", - atf_fs_path_cstring(dir)); - if (atf_is_error(err)) - goto err_dir; - - err = atf_fs_path_init_fmt(&r->pimpl->m_stderr, "%s/stderr", - atf_fs_path_cstring(dir)); - if (atf_is_error(err)) - goto err_stdout; - - INV(!atf_is_error(err)); - goto out; - -err_stdout: - atf_fs_path_fini(&r->pimpl->m_stdout); -err_dir: - atf_fs_path_fini(&r->pimpl->m_dir); -err_argv: - atf_list_fini(&r->pimpl->m_argv); -out: - return err; -} - -void -atf_check_result_fini(atf_check_result_t *r) -{ - atf_process_status_fini(&r->pimpl->m_status); - - cleanup_tmpdir(&r->pimpl->m_dir, &r->pimpl->m_stdout, - &r->pimpl->m_stderr); - atf_fs_path_fini(&r->pimpl->m_stdout); - atf_fs_path_fini(&r->pimpl->m_stderr); - atf_fs_path_fini(&r->pimpl->m_dir); - - atf_list_fini(&r->pimpl->m_argv); - - free(r->pimpl); -} - -const char * -atf_check_result_stdout(const atf_check_result_t *r) -{ - return atf_fs_path_cstring(&r->pimpl->m_stdout); -} - -const char * -atf_check_result_stderr(const atf_check_result_t *r) -{ - return atf_fs_path_cstring(&r->pimpl->m_stderr); -} - -bool -atf_check_result_exited(const atf_check_result_t *r) -{ - return atf_process_status_exited(&r->pimpl->m_status); -} - -int -atf_check_result_exitcode(const atf_check_result_t *r) -{ - return atf_process_status_exitstatus(&r->pimpl->m_status); -} - -bool -atf_check_result_signaled(const atf_check_result_t *r) -{ - return atf_process_status_signaled(&r->pimpl->m_status); -} - -int -atf_check_result_termsig(const atf_check_result_t *r) -{ - return atf_process_status_termsig(&r->pimpl->m_status); -} - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -/* XXX: This function shouldn't be in this module. It messes with stdout - * and stderr, and it provides a very high-end interface. This belongs, - * probably, somewhere related to test cases (such as in the tc module). */ -atf_error_t -atf_check_build_c_o(const char *sfile, - const char *ofile, - const char *const optargs[], - bool *success) -{ - atf_error_t err; - char **argv; - - err = atf_build_c_o(sfile, ofile, optargs, &argv); - if (atf_is_error(err)) - goto out; - - err = check_build_run((const char *const *)argv, success); - - atf_utils_free_charpp(argv); -out: - return err; -} - -atf_error_t -atf_check_build_cpp(const char *sfile, - const char *ofile, - const char *const optargs[], - bool *success) -{ - atf_error_t err; - char **argv; - - err = atf_build_cpp(sfile, ofile, optargs, &argv); - if (atf_is_error(err)) - goto out; - - err = check_build_run((const char *const *)argv, success); - - atf_utils_free_charpp(argv); -out: - return err; -} - -atf_error_t -atf_check_build_cxx_o(const char *sfile, - const char *ofile, - const char *const optargs[], - bool *success) -{ - atf_error_t err; - char **argv; - - err = atf_build_cxx_o(sfile, ofile, optargs, &argv); - if (atf_is_error(err)) - goto out; - - err = check_build_run((const char *const *)argv, success); - - atf_utils_free_charpp(argv); -out: - return err; -} - -atf_error_t -atf_check_exec_array(const char *const *argv, atf_check_result_t *r) -{ - atf_error_t err; - atf_fs_path_t dir; - - err = create_tmpdir(&dir); - if (atf_is_error(err)) - goto out; - - err = atf_check_result_init(r, argv, &dir); - if (atf_is_error(err)) { - atf_error_t err2 = atf_fs_rmdir(&dir); - INV(!atf_is_error(err2)); - goto out; - } - - err = fork_and_wait(argv, &r->pimpl->m_stdout, &r->pimpl->m_stderr, - &r->pimpl->m_status); - if (atf_is_error(err)) { - atf_check_result_fini(r); - goto out; - } - - INV(!atf_is_error(err)); - - atf_fs_path_fini(&dir); -out: - return err; -} Index: vendor/NetBSD/atf/dist/dist/atf-c/macros_h_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/macros_h_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/macros_h_test.c (nonexistent) @@ -1,103 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 - -void atf_require_inside_if(void); -void atf_require_equal_inside_if(void); -void atf_check_errno_semicolons(void); -void atf_require_errno_semicolons(void); - -void -atf_require_inside_if(void) -{ - /* Make sure that ATF_REQUIRE can be used inside an if statement that - * does not have braces. Earlier versions of it generated an error - * if there was an else clause because they confused the compiler - * by defining an unprotected nested if. */ - if (true) - ATF_REQUIRE(true); - else - ATF_REQUIRE(true); -} - -void -atf_require_equal_inside_if(void) -{ - /* Make sure that ATF_REQUIRE_EQUAL can be used inside an if statement - * that does not have braces. Earlier versions of it generated an - * error if there was an else clause because they confused the - * compiler by defining an unprotected nested if. */ - if (true) - ATF_REQUIRE_EQ(true, true); - else - ATF_REQUIRE_EQ(true, true); -} - -void -atf_check_errno_semicolons(void) -{ - /* Check that ATF_CHECK_ERRNO does not contain a semicolon that would - * cause an empty-statement that confuses some compilers. */ - ATF_CHECK_ERRNO(1, 1 == 1); - ATF_CHECK_ERRNO(2, 2 == 2); -} - -void -atf_require_errno_semicolons(void) -{ - /* Check that ATF_REQUIRE_ERRNO does not contain a semicolon that would - * cause an empty-statement that confuses some compilers. */ - ATF_REQUIRE_ERRNO(1, 1 == 1); - ATF_REQUIRE_ERRNO(2, 2 == 2); -} - -/* Test case names should not be expanded during instatiation so that they - * can have the exact same name as macros. */ -#define TEST_MACRO_1 invalid + name -#define TEST_MACRO_2 invalid + name -#define TEST_MACRO_3 invalid + name -ATF_TC(TEST_MACRO_1); -ATF_TC_HEAD(TEST_MACRO_1, tc) { } -ATF_TC_BODY(TEST_MACRO_1, tc) { } -atf_tc_t *test_name_1 = &ATF_TC_NAME(TEST_MACRO_1); -void (*head_1)(atf_tc_t *) = ATF_TC_HEAD_NAME(TEST_MACRO_1); -void (*body_1)(const atf_tc_t *) = ATF_TC_BODY_NAME(TEST_MACRO_1); -ATF_TC_WITH_CLEANUP(TEST_MACRO_2); -ATF_TC_HEAD(TEST_MACRO_2, tc) { } -ATF_TC_BODY(TEST_MACRO_2, tc) { } -ATF_TC_CLEANUP(TEST_MACRO_2, tc) { } -atf_tc_t *test_name_2 = &ATF_TC_NAME(TEST_MACRO_2); -void (*head_2)(atf_tc_t *) = ATF_TC_HEAD_NAME(TEST_MACRO_2); -void (*body_2)(const atf_tc_t *) = ATF_TC_BODY_NAME(TEST_MACRO_2); -void (*cleanup_2)(const atf_tc_t *) = ATF_TC_CLEANUP_NAME(TEST_MACRO_2); -ATF_TC_WITHOUT_HEAD(TEST_MACRO_3); -ATF_TC_BODY(TEST_MACRO_3, tc) { } -atf_tc_t *test_name_3 = &ATF_TC_NAME(TEST_MACRO_3); -void (*body_3)(const atf_tc_t *) = ATF_TC_BODY_NAME(TEST_MACRO_3); Index: vendor/NetBSD/atf/dist/dist/atf-c/atf-c.pc.in =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/atf-c.pc.in (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/atf-c.pc.in (nonexistent) @@ -1,11 +0,0 @@ -# ATF pkg-config file - -cc=__CC__ -includedir=__INCLUDEDIR__ -libdir=__LIBDIR__ - -Name: atf-c -Description: Automated Testing Framework (C binding) -Version: __ATF_VERSION__ -Cflags: -I${includedir} -Libs: -L${libdir} -latf-c Index: vendor/NetBSD/atf/dist/dist/atf-c/check.h =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/check.h (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/check.h (nonexistent) @@ -1,73 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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. - */ - -#if !defined(ATF_C_CHECK_H) -#define ATF_C_CHECK_H - -#include - -#include - -/* --------------------------------------------------------------------- - * The "atf_check_result" type. - * --------------------------------------------------------------------- */ - -struct atf_check_result_impl; -struct atf_check_result { - struct atf_check_result_impl *pimpl; -}; -typedef struct atf_check_result atf_check_result_t; - -/* Construtors and destructors */ -void atf_check_result_fini(atf_check_result_t *); - -/* Getters */ -const char *atf_check_result_stdout(const atf_check_result_t *); -const char *atf_check_result_stderr(const atf_check_result_t *); -bool atf_check_result_exited(const atf_check_result_t *); -int atf_check_result_exitcode(const atf_check_result_t *); -bool atf_check_result_signaled(const atf_check_result_t *); -int atf_check_result_termsig(const atf_check_result_t *); - -/* --------------------------------------------------------------------- - * Free functions. - * --------------------------------------------------------------------- */ - -atf_error_t atf_check_build_c_o(const char *, const char *, - const char *const [], - bool *); -atf_error_t atf_check_build_cpp(const char *, const char *, - const char *const [], - bool *); -atf_error_t atf_check_build_cxx_o(const char *, const char *, - const char *const [], - bool *); -atf_error_t atf_check_exec_array(const char *const *, atf_check_result_t *); - -#endif /* ATF_C_CHECK_H */ Index: vendor/NetBSD/atf/dist/dist/atf-c/atf_c_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/atf_c_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/atf_c_test.c (nonexistent) @@ -1,50 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. - * 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 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 - -#include "detail/test_helpers.h" - -/* --------------------------------------------------------------------- - * Tests cases for the header file. - * --------------------------------------------------------------------- */ - -HEADER_TC(include, "atf-c.h"); - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Add the test cases for the header file. */ - ATF_TP_ADD_TC(tp, include); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/atf-c/build_test.c =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-c/build_test.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-c/build_test.c (nonexistent) @@ -1,268 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2009 The NetBSD Foundation, Inc. - * 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 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 -#include -#include - -#include - -#include "atf-c/build.h" -#include "atf-c/config.h" -#include "atf-c/utils.h" - -#include "detail/env.h" -#include "detail/test_helpers.h" -#include "h_build.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -void __atf_config_reinit(void); - -static -bool -equal_arrays(const char *const *exp_array, char **actual_array) -{ - bool equal; - - if (*exp_array == NULL && *actual_array == NULL) - equal = true; - else if (*exp_array == NULL || *actual_array == NULL) - equal = false; - else { - equal = true; - while (*actual_array != NULL) { - if (*exp_array == NULL || strcmp(*exp_array, *actual_array) != 0) { - equal = false; - break; - } - exp_array++; - actual_array++; - } - } - - return equal; -} - -static -void -check_equal_array(const char *const *exp_array, char **actual_array) -{ - { - const char *const *exp_ptr; - printf("Expected arguments:"); - for (exp_ptr = exp_array; *exp_ptr != NULL; exp_ptr++) - printf(" '%s'", *exp_ptr); - printf("\n"); - } - - { - char **actual_ptr; - printf("Returned arguments:"); - for (actual_ptr = actual_array; *actual_ptr != NULL; actual_ptr++) - printf(" '%s'", *actual_ptr); - printf("\n"); - } - - if (!equal_arrays(exp_array, actual_array)) - atf_tc_fail_nonfatal("The constructed argv differs from the " - "expected values"); -} - -static -void -verbose_set_env(const char *var, const char *val) -{ - printf("Setting %s to '%s'\n", var, val); - RE(atf_env_set(var, val)); -} - -/* --------------------------------------------------------------------- - * Internal test cases. - * --------------------------------------------------------------------- */ - -ATF_TC(equal_arrays); -ATF_TC_HEAD(equal_arrays, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the test case internal " - "equal_arrays function"); -} -ATF_TC_BODY(equal_arrays, tc) -{ - { - const char *const exp[] = { NULL }; - char *actual[] = { NULL }; - - ATF_CHECK(equal_arrays(exp, actual)); - } - - { - const char *const exp[] = { NULL }; - char *actual[2] = { strdup("foo"), NULL }; - - ATF_CHECK(!equal_arrays(exp, actual)); - free(actual[0]); - } - - { - const char *const exp[] = { "foo", NULL }; - char *actual[] = { NULL }; - - ATF_CHECK(!equal_arrays(exp, actual)); - } - - { - const char *const exp[] = { "foo", NULL }; - char *actual[2] = { strdup("foo"), NULL }; - - ATF_CHECK(equal_arrays(exp, actual)); - free(actual[0]); - } -} - -/* --------------------------------------------------------------------- - * Test cases for the free functions. - * --------------------------------------------------------------------- */ - -ATF_TC(c_o); -ATF_TC_HEAD(c_o, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_build_c_o function"); -} -ATF_TC_BODY(c_o, tc) -{ - struct c_o_test *test; - - for (test = c_o_tests; test->expargv[0] != NULL; test++) { - printf("> Test: %s\n", test->msg); - - verbose_set_env("ATF_BUILD_CC", test->cc); - verbose_set_env("ATF_BUILD_CFLAGS", test->cflags); - verbose_set_env("ATF_BUILD_CPPFLAGS", test->cppflags); - __atf_config_reinit(); - - { - char **argv; - if (test->hasoptargs) - RE(atf_build_c_o(test->sfile, test->ofile, test->optargs, - &argv)); - else - RE(atf_build_c_o(test->sfile, test->ofile, NULL, &argv)); - check_equal_array(test->expargv, argv); - atf_utils_free_charpp(argv); - } - } -} - -ATF_TC(cpp); -ATF_TC_HEAD(cpp, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_build_cpp function"); -} -ATF_TC_BODY(cpp, tc) -{ - struct cpp_test *test; - - for (test = cpp_tests; test->expargv[0] != NULL; test++) { - printf("> Test: %s\n", test->msg); - - verbose_set_env("ATF_BUILD_CPP", test->cpp); - verbose_set_env("ATF_BUILD_CPPFLAGS", test->cppflags); - __atf_config_reinit(); - - { - char **argv; - if (test->hasoptargs) - RE(atf_build_cpp(test->sfile, test->ofile, test->optargs, - &argv)); - else - RE(atf_build_cpp(test->sfile, test->ofile, NULL, &argv)); - check_equal_array(test->expargv, argv); - atf_utils_free_charpp(argv); - } - } -} - -ATF_TC(cxx_o); -ATF_TC_HEAD(cxx_o, tc) -{ - atf_tc_set_md_var(tc, "descr", "Tests the atf_build_cxx_o function"); -} -ATF_TC_BODY(cxx_o, tc) -{ - struct cxx_o_test *test; - - for (test = cxx_o_tests; test->expargv[0] != NULL; test++) { - printf("> Test: %s\n", test->msg); - - verbose_set_env("ATF_BUILD_CXX", test->cxx); - verbose_set_env("ATF_BUILD_CXXFLAGS", test->cxxflags); - verbose_set_env("ATF_BUILD_CPPFLAGS", test->cppflags); - __atf_config_reinit(); - - { - char **argv; - if (test->hasoptargs) - RE(atf_build_cxx_o(test->sfile, test->ofile, test->optargs, - &argv)); - else - RE(atf_build_cxx_o(test->sfile, test->ofile, NULL, &argv)); - check_equal_array(test->expargv, argv); - atf_utils_free_charpp(argv); - } - } -} - -/* --------------------------------------------------------------------- - * Tests cases for the header file. - * --------------------------------------------------------------------- */ - -HEADER_TC(include, "atf-c/build.h"); - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Add the internal test cases. */ - ATF_TP_ADD_TC(tp, equal_arrays); - - /* Add the test cases for the free functions. */ - ATF_TP_ADD_TC(tp, c_o); - ATF_TP_ADD_TC(tp, cpp); - ATF_TP_ADD_TC(tp, cxx_o); - - /* Add the test cases for the header file. */ - ATF_TP_ADD_TC(tp, include); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/NEWS =================================================================== --- vendor/NetBSD/atf/dist/dist/NEWS (revision 240137) +++ vendor/NetBSD/atf/dist/dist/NEWS (nonexistent) @@ -1,469 +0,0 @@ -Major changes between releases Automated Testing Framework -=========================================================================== - - -Changes in version 0.13 -*********************** - -Experimental version released on March 31st, 2011. - -This is the first release after the creation of the Kyua project, a more -modular and reliable replacement for ATF. From now on, ATF will change to -accomodate the transition to this new codebase, but ATF will still continue -to see development in the short/medium term. Check out the project page at -http://code.google.com/p/kyua/ for more details. - -The changes in this release are: - -* Added support to run the tests with the Kyua runtime engine (kyua-cli), a - new package that aims to replace atf-run and atf-report. The ATF tests - can be run with the new system by issuing a 'make installcheck-kyua' from - the top-level directory of the project (assuming the 'kyua' binary is - available during the configuration stage of ATF). - -* atf-run and atf-report are now in maintenance mode (but *not* deprecated - yet!). Kyua already implements a new, much more reliable runtime engine - that provides similar features to these tools. That said, it is not - complete yet so all development efforts should go towards it. - -* If GDB is installed, atf-run dumps the stack trace of crashing test - programs in an attempt to aid debugging. Contributed by Antti Kantee. - -* Reverted default timeout change in previous release and reset its value - to 5 minutes. This was causing several issues, specially when running - the existing NetBSD test suite in qemu. - -* Fixed the 'match' output checker in atf-check to properly validate the - last line of a file even if it does not have a newline. - -* Added the ATF_REQUIRE_IN and ATF_REQUIRE_NOT_IN macros to atf-c++ to - check for the presence (or lack thereof) of an element in a collection. - -* PR bin/44176: Fixed a race condition in atf-run that would crash atf-run - when the cleanup of a test case triggered asynchronous modifications to - its work directory (e.g. killing a daemon process that cleans up a pid - file in the work directory). - -* PR bin/44301: Fixed the sample XSLT file to report bogus test programs - instead of just listing them as having 0 test cases. - - -Changes in version 0.12 -*********************** - -Experimental version released on November 7th, 2010. - -* Added the ATF_REQUIRE_THROW_RE to atf-c++, which is the same as - ATF_REQUIRE_THROW but allows checking for the validity of the exception's - error message by means of a regular expression. - -* Added the ATF_REQUIRE_MATCH to atf-c++, which allows checking for a - regular expression match in a string. - -* Changed the default timeout for test cases from 5 minutes to 30 seconds. - 30 seconds is long enough for virtually all tests to complete, and 5 - minutes is a way too long pause in a test suite where a single test case - stalls. - -* Deprecated the use.fs property. While this seemed like a good idea in - the first place to impose more control on what test cases can do, it - turns out to be bad. First, use.fs=false prevents bogus test cases - from dumping core so after-the-fact debugging is harder. Second, - supporting use.fs adds a lot of unnecessary complexity. atf-run will - now ignore any value provided to use.fs and will allow test cases to - freely access the file system if they wish to. - -* Added the atf_tc_get_config_var_as_{bool,long}{,_wd} functions to the atf-c - library. The 'text' module became private in 0.11 but was being used - externally to simplify the parsing of configuration variables. - -* Made atf-run recognize the 'unprivileged-user' configuration variable - and automatically drop root privileges when a test case sets - require.user=unprivileged. Note that this is, by no means, done for - security purposes; this is just for user convenience; tests should, in - general, not be blindly run as root in the first place. - - -Changes in version 0.11 -*********************** - -Experimental version released on October 20th, 2010. - -* The ATF_CHECK* macros in atf-c++ were renamed to ATF_REQUIRE* to match - their counterparts in atf-c. - -* Clearly separated the modules in atf-c that are supposed to be public - from those that are implementation details. The header files for the - internal modules are not installed any more. - -* Made the atf-check tool private. It is only required by atf-sh and being - public has the danger of causing confusion. Also, making it private - simplifies the public API of atf. - -* Changed atf-sh to enable per-command error checking (set -e) by default. - This catches many cases in which a test case is broken but it is not - reported as such because execution continues. - -* Fixed the XSTL and CSS stylesheets to support expected failures. - - -Changes in version 0.10 -*********************** - -Experimental version released on July 2nd, 2010. - -Miscellaneous features - -* Added expected failures support to test cases and atf-run. These - include, for example, expected clean exits, expected reception of fatal - signals, expected timeouts and expected errors in condition checks. - These statuses can be used to denote test cases that are known to fail - due to a bug in the code they are testing. atf-report reports these - tests separately but they do not count towards the failed test cases - amount. - -* Added the ATF_CHECK_ERRNO and ATF_REQUIRE_ERRNO to the C library to - allow easy checking of call failures that update errno. - -* Added the has.cleanup meta-data property to test caes that specifies - whether the test case has a cleanup routine or not; its value is - automatically set. This property is read by atf-run to know if it has to - run the cleanup routine; skipping this run for every test case - significantly speeds up the run time of test suites. - -* Reversed the order of the ATF_CHECK_THROW macro in the C++ binding to - take the expected exception as the first argument and the statement to - execute as the second argument. - -Changes in atf-check - -* Changed atf-check to support negating the status and output checks by - prefixing them with not- and added support to specify multiple checkers - for stdout and stderr, not only one. - -* Added the match output checker to atf-check to look for regular - expressions in the stdout and stderr of commands. - -* Modified the exit checks in atf-check to support checking for the - reception of signals. - -Code simplifications and cleanups - -* Removed usage messages from test programs to simplify the - implementation of every binding by a significant amount. They just now - refer the user to the appropriate manual page and do not attempt to wrap - lines on terminal boundaries. Test programs are not supposed to be run - by users directly so this minor interface regression is not important. - -* Removed the atf-format internal utility, which is unused after the - change documented above. - -* Removed the atf-cleanup internal utility. It has been unused since the - test case isolation was moved to atf-run in 0.8 - -* Splitted the Makefile.am into smaller files for easier maintenance and - dropped the use of M4. Only affects users building from the repository - sources. - -* Intermixed tests with the source files in the source tree to provide - them more visibility and easier access. The tests directory is gone from - the source tree and tests are now suffixed by _test, not prefixed by t_. - -* Simplifications to the atf-c library: removed the io, tcr and ui - modules as they had become unnecessary after all simplifications - introduced since the 0.8 release. - -* Removed the application/X-atf-tcr format introduced in 0.8 release. - Tests now print a much simplified format that is easy to parse and nicer - to read by end users. As a side effect, the default for test cases is - now to print their results to stdout unless otherwise stated by providing - the -r flag. - -* Removed XML distribution documents and replaced them with plain-text - documents. They provided little value and introduced a lot of complexity - to the build system. - -* Simplified the output of atf-version by not attempting to print a - revision number when building form a distfile. Makes the build system - easier to maintain. - - -Changes in version 0.9 -********************** - -Experimental version released on June 3rd, 2010. - -* Added atf-sh, an interpreter to process test programs written using - the shell API. This is not really a shell interpreter by itself though: - it is just a wrapper around the system shell that eases the loading of - the necessary ATF libraries. - -* Removed atf-compile in favour of atf-sh. - -* Added the use.fs metadata property to test case, which is used to - specify which test cases require file system access. This is to - highlight dependencies on external resources more clearly and to speed up - the execution of test suites by skipping the creation of many unnecessary - work directories. - -* Fixed test programs to get a sane default value for their source - directory. This means that it should not be necessary any more to pass - -s when running test programs that do not live in the current directory. - -* Defining test case headers became optional. This is trivial to achieve - in shell-based tests but a bit ugly in C and C++. In C, use the new - ATF_TC_WITHOUT_HEAD macro to define the test case, and in C++ use - ATF_TEST_CASE_WITHOUT_HEAD. - - -Changes in version 0.8 -********************** - -Experimental version released on May 7th, 2010. - -* Test programs no longer run several test cases in a row. The execution - of a test program now requires a test case name, and that single test - case is executed. To execute several test cases, use the atf-run utility - as usual. - -* Test programs no longer fork a subprocess to isolate the execution of - test cases. They run the test case code in-process, and a crash of the - test case will result in a crash of the test program. This is to ease - debugging of faulty test cases. - -* Test programs no longer isolate their test cases. This means that they - will not create temporary directories nor sanitize the environment any - more. Yes: running a test case that depends on system state by hand will - most likely yield different results depending on where (machine, - directory, user environment, etc.) it is run. Isolation has been moved - to atf-run. - -* Test programs no longer print a cryptic format (application/X-atf-tcs) - on a special file channel. They can now print whatever they want on the - screen. Because test programs can now only run one test case every time, - providing controlled output is not necessary any more. - -* Test programs no longer write their status into a special file - descriptor. Instead, they create a file with the results, which is later - parsed by atf-run. This changes the semantics of the -r flag. - -* atf-run has been adjusted to perform the test case isolation. As a - result, there is now a single canonical place that implements the - isolation of test caes. In previous releases, the three language - bindings (C, C++ and shell) had to be kept in sync with each other (read: - not a nice thing to do at all). As a side effect of this change, writing - bindings for other languages will be much, much easier from now on. - -* atf-run forks test programs on a test case basis, instead of on a test - program basis as it did before. This is to provide the test case - isolation that was before implemented by the test programs themselves. - -* Removed the atf-exec tool. This was used to implement test case - isolation in atf-sh, but it is now unnecessary. - -* It is now optional to define the descr meta-data property. It has been - proven to be mostly useless, because test cases often carry a descriptive - name of their own. - - -Changes in version 0.7 -********************** - -Experimental version released on December 22nd, 2009. - -* Added build-time checks to atf-c and atf-c++. A binding for atf-sh - will come later. - -* Migrated all build-time checks for header files to proper ATF tests. - This demonstrates the use of the new feature described above. - -* Added an internal API for child process management. - -* Converted all plain-text distribution documents to a Docbook canonical - version, and include pre-generated plain text and HTML copies in the - distribution file. - -* Simplified the contents of the Makefile.am by regenerating it from a - canonical Makefile.am.m4 source. As a side-effect, some dependency - specifications were fixed. - -* Migrated all checks from the check target to installcheck, as these - require ATF to be installed. - -* Fixed sign comparison mismatches triggered by the now-enabled - -Wsign-compare. - -* Fixed many memory and object leaks. - - -Changes in version 0.6 -********************** - -Experimental version released on January 18th, 2009. - -* Make atf-exec be able to kill its child process after a certain period - of time; this is controlled through the new -t option. - -* Change atf-sh to use atf-exec's -t option to control the test case's - timeouts, instead of doing it internally. Same behavior as before, but - noticeably faster. - -* atf-exec's -g option and atf-killpg are gone due to the previous - change. - -* Added the atf-check(1) tool, a program that executes a given command - and checks its exit code against a known value and allows the management - of stdout and stderr in multiple ways. This replaces the previous - atf_check function in the atf-sh library and exposes this functionality - to both atf-c and atf-c++. - -* Added the ATF_REQUIRE family of macros to the C interface. These help - in checking for fatal test conditions. The old ATF_CHECK macros now - perform non-fatal checks only. I.e. by using ATF_CHECK, the test case - can now continue its execution and the failures will not be reported - until the end of the whole run. - -* Extended the amount of ATF_CHECK_* C macros with new ones to provide - more features to the developer. These also have their corresponding - counterparts in the ATF_REQUIRE_* family. The new macros (listing the - suffixes only) are: _EQ (replaces _EQUAL), _EQ_MSG, _STREQ and - _STREQ_MSG. - - -Changes in version 0.5 -********************** - -Experimental version released on May 1st, 2008. - -* Clauses 3 and 4 of the BSD license used by the project were dropped. - All the code is now under a 2-clause BSD license compatible with the GNU - General Public License (GPL). - -* Added a C-only binding so that binary test programs do not need to be - tied to C++ at all. This binding is now known as the atf-c library. - -* Renamed the C++ binding to atf-c++ for consistency with the new atf-c. - -* Renamed the POSIX shell binding to atf-sh for consistency with the new - atf-c and atf-c++. - -* Added a -w flag to test programs through which it is possible to - specify the work directory to be used. This was possible in prior - releases by defining the workdir configuration variable (-v workdir=...), - but was a conceptually incorrect mechanism. - -* Test programs now preserve the execution order of test cases when they - are given in the command line. Even those mentioned more than once are - executed multiple times to comply with the user's requests. - - -Changes in version 0.4 -********************** - -Experimental version released on February 4th, 2008. - -* Added two new manual pages, atf-c++-api and atf-sh-api, describing the - C++ and POSIX shell interfaces used to write test programs. - -* Added a pkg-config file, useful to get the flags to build against the - C++ library or to easily detect the presence of ATF. - -* Added a way for test cases to require a specific architecture and/or - machine type through the new 'require.arch' and 'require.machine' - meta-data properties, respectively. - -* Added the 'timeout' property to test cases, useful to set an - upper-bound limit for the test's run time and thus prevent global test - program stalls due to the test case's misbehavior. - -* Added the atf-exec(1) internal utility, used to execute a command - after changing the process group it belongs to. - -* Added the atf-killpg(1) internal utility, used to kill process groups. - -* Multiple portability fixes. Of special interest, full support for - SunOS (Solaris Express Developer Edition 2007/09) using the Sun Studio 12 - C++ compiler. - -* Fixed a serious bug that prevented atf-run(1) from working at all - under Fedora 8 x86_64. Due to the nature of the bug, other platforms - were likely affected too. - - -Changes in version 0.3 -********************** - -Experimental version released on November 11th, 2007. - -* Added XML output support to atf-report. This is accompanied by a DTD - for the format's structure and sample XSLT/CSS files to post-process this - output and convert it to a plain HTML report. - -* Changed atf-run to add system information to the report it generates. - This is currently used by atf-report's XML output only, and is later - printed in the HTML reports in a nice and useful summary table. The user - and system administrator are allowed to tune this feature by means of - hooks. - -* Removed the test cases' 'isolated' property. This was intended to - avoid touching the file system at all when running the related test case, - but this has not been true for a long while: some control files are - unconditionally required for several purposes, and we cannot easily get - rid of them. This way we remove several critical and delicate pieces of - code. - -* Improved atf-report's CSV output format to include information about - test programs too. - -* Fixed the tests that used atf-compile to not require this tool as a - helper. Avoids systems without build-time utilities to skip many tests - that could otherwise be run. (E.g. NetBSD without the comp.tgz set - installed.) - -* Many general cleanups: Fixed many pieces of code marked as ugly and/or - incomplete. - - -Changes in version 0.2 -********************** - -Experimental version released on September 20th, 2007. - -* Test cases now get a known umask on entry. - -* atf-run now detects many unexpected failures caused by test programs and - reports them as bogus tests. atf-report is able to handle these new - errors and nicely reports them to the user. - -* All the data formats read and written by the tools have been - documented and cleaned up. These include those grammars that define how - the different components communicate with each other as well as the - format of files written by the developers and users: the Atffiles and the - configuration files. - -* Added the atf-version tool, a utility that displays information about - the currently installed version of ATF. - -* Test cases can now define an optional cleanup routine to undo their - actions regardless of their exit status. - -* atf-report now summarizes the list of failed (bogus) test programs - when using the ticker output format. - -* Test programs now capture some termination signals and clean up any - temporary files before exiting the program. - -* Multiple bug fixes and improvements all around. - - -Changes in version 0.1 -********************** - -Experimental version released on August 20th, 2007. - -* First public version. This was released coinciding with the end of the - Google Summer of Code 2007 program. - - -=========================================================================== -vim: filetype=text:textwidth=75:expandtab:shiftwidth=2:softtabstop=2 Index: vendor/NetBSD/atf/dist/dist/test-programs/result_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/result_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/result_test.sh (nonexistent) @@ -1,121 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -atf_test_case result_on_stdout -result_on_stdout_head() -{ - atf_set "descr" "Tests that the test case result is printed on stdout" \ - "by default" -} -result_on_stdout_body() -{ - srcdir="$(atf_get_srcdir)" - for h in $(get_helpers); do - atf_check -s eq:0 -o match:"passed" -o match:"msg" \ - -e empty "${h}" -s "${srcdir}" result_pass - atf_check -s eq:1 -o match:"failed: Failure reason" -o match:"msg" \ - -e empty "${h}" -s "${srcdir}" result_fail - atf_check -s eq:0 -o match:"skipped: Skipped reason" -o match:"msg" \ - -e empty "${h}" -s "${srcdir}" result_skip - done -} - -atf_test_case result_to_file -result_to_file_head() -{ - atf_set "descr" "Tests that the test case result is sent to a file if -r" \ - "is used" -} -result_to_file_body() -{ - srcdir="$(atf_get_srcdir)" - for h in $(get_helpers); do - atf_check -s eq:0 -o inline:"msg\n" -e empty "${h}" -s "${srcdir}" \ - -r resfile result_pass - atf_check -o inline:"passed\n" cat resfile - - atf_check -s eq:1 -o inline:"msg\n" -e empty "${h}" -s "${srcdir}" \ - -r resfile result_fail - atf_check -o inline:"failed: Failure reason\n" cat resfile - - atf_check -s eq:0 -o inline:"msg\n" -e empty "${h}" -s "${srcdir}" \ - -r resfile result_skip - atf_check -o inline:"skipped: Skipped reason\n" cat resfile - done -} - -atf_test_case result_to_file_fail -result_to_file_fail_head() -{ - atf_set "descr" "Tests controlled failure if the test program fails to" \ - "create the results file" - atf_set "require.user" "unprivileged" -} -result_to_file_fail_body() -{ - mkdir dir - chmod 444 dir - - srcdir="$(atf_get_srcdir)" - - for h in $(get_helpers c_helpers cpp_helpers); do - atf_check -s signal -o ignore \ - -e match:"FATAL ERROR: Cannot create.*'dir/resfile'" \ - "${h}" -s "${srcdir}" -r dir/resfile result_pass - done - - for h in $(get_helpers sh_helpers); do - atf_check -s exit -o ignore \ - -e match:"ERROR: Cannot create.*'dir/resfile'" \ - "${h}" -s "${srcdir}" -r dir/resfile result_pass - done -} - -atf_test_case result_exception -result_exception_head() -{ - atf_set "descr" "Tests that an unhandled exception is correctly captured" -} -result_exception_body() -{ - for h in $(get_helpers cpp_helpers); do - atf_check -s exit:1 -o match:'failed: .*This is unhandled' \ - "${h}" -s "${srcdir}" result_exception - done -} - -atf_init_test_cases() -{ - atf_add_test_case result_on_stdout - atf_add_test_case result_to_file - atf_add_test_case result_to_file_fail - atf_add_test_case result_exception -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/test-programs/sh_helpers.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/sh_helpers.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/sh_helpers.sh (nonexistent) @@ -1,433 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -# ------------------------------------------------------------------------- -# Helper tests for "t_cleanup". -# ------------------------------------------------------------------------- - -atf_test_case cleanup_pass cleanup -cleanup_pass_head() -{ - atf_set "descr" "Helper test case for the t_cleanup test program" -} -cleanup_pass_body() -{ - touch $(atf_config_get tmpfile) -} -cleanup_pass_cleanup() -{ - if [ $(atf_config_get cleanup no) = yes ]; then - rm $(atf_config_get tmpfile) - fi -} - -atf_test_case cleanup_fail cleanup -cleanup_fail_head() -{ - atf_set "descr" "Helper test case for the t_cleanup test program" -} -cleanup_fail_body() -{ - touch $(atf_config_get tmpfile) - atf_fail "On purpose" -} -cleanup_fail_cleanup() -{ - if [ $(atf_config_get cleanup no) = yes ]; then - rm $(atf_config_get tmpfile) - fi -} - -atf_test_case cleanup_skip cleanup -cleanup_skip_head() -{ - atf_set "descr" "Helper test case for the t_cleanup test program" -} -cleanup_skip_body() -{ - touch $(atf_config_get tmpfile) - atf_skip "On purpose" -} -cleanup_skip_cleanup() -{ - if [ $(atf_config_get cleanup no) = yes ]; then - rm $(atf_config_get tmpfile) - fi -} - -atf_test_case cleanup_curdir cleanup -cleanup_curdir_head() -{ - atf_set "descr" "Helper test case for the t_cleanup test program" -} -cleanup_curdir_body() -{ - echo 1234 >oldvalue -} -cleanup_curdir_cleanup() -{ - test -f oldvalue && echo "Old value: $(cat oldvalue)" -} - -atf_test_case cleanup_sigterm cleanup -cleanup_sigterm_head() -{ - atf_set "descr" "Helper test case for the t_cleanup test program" -} -cleanup_sigterm_body() -{ - touch $(atf_config_get tmpfile) - kill $$ - touch $(atf_config_get tmpfile).no -} -cleanup_sigterm_cleanup() -{ - rm $(atf_config_get tmpfile) -} - -atf_test_case cleanup_fork cleanup -cleanup_fork_head() -{ - atf_set "descr" "Helper test case for the t_cleanup test program" -} -cleanup_fork_body() -{ - : -} -cleanup_fork_cleanup() -{ - exec 1>out - exec 2>err - exec 3>res - rm -f out err res -} - -# ------------------------------------------------------------------------- -# Helper tests for "t_config". -# ------------------------------------------------------------------------- - -atf_test_case config_unset -config_unset_head() -{ - atf_set "descr" "Helper test case for the t_config test program" -} -config_unset_body() -{ - if atf_config_has 'test'; then - atf_fail "Test variable already defined" - fi -} - -atf_test_case config_empty -config_empty_head() -{ - atf_set "descr" "Helper test case for the t_config test program" -} -config_empty_body() -{ - atf_check_equal "$(atf_config_get 'test')" "" -} - -atf_test_case config_value -config_value_head() -{ - atf_set "descr" "Helper test case for the t_config test program" -} -config_value_body() -{ - atf_check_equal "$(atf_config_get 'test')" "foo" -} - -atf_test_case config_multi_value -config_multi_value_head() -{ - atf_set "descr" "Helper test case for the t_config test program" -} -config_multi_value_body() -{ - atf_check_equal "$(atf_config_get 'test')" "foo bar" -} - -# ------------------------------------------------------------------------- -# Helper tests for "t_fork". -# ------------------------------------------------------------------------- - -atf_test_case fork_stop -fork_stop_head() -{ - atf_set "descr" "Helper test case for the t_fork test program" -} -fork_stop_body() -{ - echo ${$} >$(atf_config_get pidfile) - echo "Wrote pid file" - echo "Waiting for done file" - while ! test -f $(atf_config_get donefile); do sleep 1; done - echo "Exiting" -} - -# ------------------------------------------------------------------------- -# Helper tests for "t_expect". -# ------------------------------------------------------------------------- - -atf_test_case expect_pass_and_pass -expect_pass_and_pass_body() -{ - atf_expect_pass -} - -atf_test_case expect_pass_but_fail_requirement -expect_pass_but_fail_requirement_body() -{ - atf_expect_pass - atf_fail "Some reason" -} - -atf_test_case expect_pass_but_fail_check -expect_pass_but_fail_check_body() -{ - atf_fail "Non-fatal failures not implemented" -} - -atf_test_case expect_fail_and_fail_requirement -expect_fail_and_fail_requirement_body() -{ - atf_expect_fail "Fail reason" - atf_fail "The failure" - atf_expect_pass -} - -atf_test_case expect_fail_and_fail_check -expect_fail_and_fail_check_body() -{ - atf_fail "Non-fatal failures not implemented" -} - -atf_test_case expect_fail_but_pass -expect_fail_but_pass_body() -{ - atf_expect_fail "Fail first" - atf_expect_pass -} - -atf_test_case expect_exit_any_and_exit -expect_exit_any_and_exit_body() -{ - atf_expect_exit -1 "Call will exit" - exit 0 -} - -atf_test_case expect_exit_code_and_exit -expect_exit_code_and_exit_body() -{ - atf_expect_exit 123 "Call will exit" - exit 123 -} - -atf_test_case expect_exit_but_pass -expect_exit_but_pass_body() -{ - atf_expect_exit -1 "Call won't exit" -} - -atf_test_case expect_signal_any_and_signal -expect_signal_any_and_signal_body() -{ - atf_expect_signal -1 "Call will signal" - kill -9 $$ -} - -atf_test_case expect_signal_no_and_signal -expect_signal_no_and_signal_body() -{ - atf_expect_signal 1 "Call will signal" - kill -1 $$ -} - -atf_test_case expect_signal_but_pass -expect_signal_but_pass_body() -{ - atf_expect_signal -1 "Call won't signal" -} - -atf_test_case expect_death_and_exit -expect_death_and_exit_body() -{ - atf_expect_death "Exit case" - exit 123 -} - -atf_test_case expect_death_and_signal -expect_death_and_signal_body() -{ - atf_expect_death "Signal case" - kill -9 $$ -} - -atf_test_case expect_death_but_pass -expect_death_but_pass_body() -{ - atf_expect_death "Call won't die" -} - -atf_test_case expect_timeout_and_hang -expect_timeout_and_hang_head() -{ - atf_set "timeout" "1" -} -expect_timeout_and_hang_body() -{ - atf_expect_timeout "Will overrun" - sleep 5 -} - -atf_test_case expect_timeout_but_pass -expect_timeout_but_pass_head() -{ - atf_set "timeout" "1" -} -expect_timeout_but_pass_body() -{ - atf_expect_timeout "Will just exit" -} - -# ------------------------------------------------------------------------- -# Helper tests for "t_meta_data". -# ------------------------------------------------------------------------- - -atf_test_case metadata_no_descr -metadata_no_descr_head() -{ - : -} -metadata_no_descr_body() -{ - : -} - -atf_test_case metadata_no_head -metadata_no_head_body() -{ - : -} - -# ------------------------------------------------------------------------- -# Helper tests for "t_srcdir". -# ------------------------------------------------------------------------- - -atf_test_case srcdir_exists -srcdir_exists_head() -{ - atf_set "descr" "Helper test case for the t_srcdir test program" -} -srcdir_exists_body() -{ - [ -f "$(atf_get_srcdir)/datafile" ] || atf_fail "Cannot find datafile" -} - -# ------------------------------------------------------------------------- -# Helper tests for "t_result". -# ------------------------------------------------------------------------- - -atf_test_case result_pass -result_pass_body() -{ - echo "msg" -} - -atf_test_case result_fail -result_fail_body() -{ - echo "msg" - atf_fail "Failure reason" -} - -atf_test_case result_skip -result_skip_body() -{ - echo "msg" - atf_skip "Skipped reason" -} - -# ------------------------------------------------------------------------- -# Main. -# ------------------------------------------------------------------------- - -atf_init_test_cases() -{ - # Add helper tests for t_cleanup. - atf_add_test_case cleanup_pass - atf_add_test_case cleanup_fail - atf_add_test_case cleanup_skip - atf_add_test_case cleanup_curdir - atf_add_test_case cleanup_sigterm - atf_add_test_case cleanup_fork - - # Add helper tests for t_config. - atf_add_test_case config_unset - atf_add_test_case config_empty - atf_add_test_case config_value - atf_add_test_case config_multi_value - - # Add helper tests for t_expect. - atf_add_test_case expect_pass_and_pass - atf_add_test_case expect_pass_but_fail_requirement - atf_add_test_case expect_pass_but_fail_check - atf_add_test_case expect_fail_and_fail_requirement - atf_add_test_case expect_fail_and_fail_check - atf_add_test_case expect_fail_but_pass - atf_add_test_case expect_exit_any_and_exit - atf_add_test_case expect_exit_code_and_exit - atf_add_test_case expect_exit_but_pass - atf_add_test_case expect_signal_any_and_signal - atf_add_test_case expect_signal_no_and_signal - atf_add_test_case expect_signal_but_pass - atf_add_test_case expect_death_and_exit - atf_add_test_case expect_death_and_signal - atf_add_test_case expect_death_but_pass - atf_add_test_case expect_timeout_and_hang - atf_add_test_case expect_timeout_but_pass - - # Add helper tests for t_fork. - atf_add_test_case fork_stop - - # Add helper tests for t_meta_data. - atf_add_test_case metadata_no_descr - atf_add_test_case metadata_no_head - - # Add helper tests for t_srcdir. - atf_add_test_case srcdir_exists - - # Add helper tests for t_result. - atf_add_test_case result_pass - atf_add_test_case result_fail - atf_add_test_case result_skip -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/test-programs/Kyuafile =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/Kyuafile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/Kyuafile (nonexistent) @@ -1,10 +0,0 @@ -syntax("kyuafile", 1) - -test_suite("atf") - -atf_test_program{name="config_test"} -atf_test_program{name="expect_test"} -atf_test_program{name="fork_test"} -atf_test_program{name="meta_data_test"} -atf_test_program{name="srcdir_test"} -atf_test_program{name="result_test"} Index: vendor/NetBSD/atf/dist/dist/test-programs/meta_data_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/meta_data_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/meta_data_test.sh (nonexistent) @@ -1,64 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -atf_test_case no_descr -no_descr_head() -{ - atf_set "descr" "Tests that the description may not be present" -} -no_descr_body() -{ - for h in $(get_helpers); do - atf_check -s eq:0 -o ignore -e empty ${h} -s $(atf_get_srcdir) -l - atf_check -s eq:0 -o match:passed -e empty ${h} -s $(atf_get_srcdir) \ - metadata_no_descr - done -} - -atf_test_case no_head -no_head_head() -{ - atf_set "descr" "Tests that the head may not be present" -} -no_head_body() -{ - for h in $(get_helpers); do - atf_check -s eq:0 -o ignore -e empty ${h} -s $(atf_get_srcdir) -l - atf_check -s eq:0 -o match:passed -e empty ${h} -s $(atf_get_srcdir) \ - metadata_no_head - done -} - -atf_init_test_cases() -{ - atf_add_test_case no_descr - atf_add_test_case no_head -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/test-programs/srcdir_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/srcdir_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/srcdir_test.sh (nonexistent) @@ -1,149 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -create_files() -{ - mkdir tmp - touch tmp/datafile -} - -atf_test_case default -default_head() -{ - atf_set "descr" "Checks that the program can find its files if" \ - "executed from the same directory" -} -default_body() -{ - create_files - - for hp in $(get_helpers); do - h=${hp##*/} - cp ${hp} tmp - atf_check -s eq:0 -o ignore -e ignore -x \ - "cd tmp && ./${h} srcdir_exists" - atf_check -s eq:1 -o empty -e empty "${hp}" -r res srcdir_exists - atf_check -s eq:0 -o ignore -e empty grep "Cannot find datafile" res - done -} - -atf_test_case libtool -libtool_head() -{ - atf_set "descr" "Checks that the program can find its files if" \ - "executed from the source directory and if it" \ - "was built with libtool" -} -libtool_body() -{ - create_files - mkdir tmp/.libs - - for hp in $(get_helpers c_helpers cpp_helpers); do - h=${hp##*/} - cp ${hp} tmp - cp ${hp} tmp/.libs - atf_check -s eq:0 -o ignore -e ignore -x \ - "cd tmp && ./.libs/${h} srcdir_exists" - atf_check -s eq:1 -o empty -e empty "${hp}" -r res srcdir_exists - atf_check -s eq:0 -o ignore -e empty grep "Cannot find datafile" res - done - - for hp in $(get_helpers c_helpers cpp_helpers); do - h=${hp##*/} - cp ${hp} tmp - cp ${hp} tmp/.libs/lt-${h} - atf_check -s eq:0 -o ignore -e ignore -x \ - "cd tmp && ./.libs/lt-${h} srcdir_exists" - atf_check -s eq:1 -o empty -e empty "${hp}" -r res srcdir_exists - atf_check -s eq:0 -o ignore -e empty grep "Cannot find datafile" res - done -} - -atf_test_case sflag -sflag_head() -{ - atf_set "descr" "Checks that the program can find its files when" \ - "using the -s flag" -} -sflag_body() -{ - create_files - - for hp in $(get_helpers); do - h=${hp##*/} - cp ${hp} tmp - atf_check -s eq:0 -o ignore -e ignore -x \ - "cd tmp && ./${h} -s $(pwd)/tmp \ - srcdir_exists" - atf_check -s eq:1 -o empty -e save:stderr "${hp}" -r res srcdir_exists - atf_check -s eq:0 -o ignore -e empty grep "Cannot find datafile" res - atf_check -s eq:0 -o ignore -e ignore \ - "${hp}" -s "$(pwd)"/tmp srcdir_exists - done -} - -atf_test_case relative -relative_head() -{ - atf_set "descr" "Checks that passing a relative path through -s" \ - "works" -} -relative_body() -{ - create_files - - for hp in $(get_helpers); do - h=${hp##*/} - cp ${hp} tmp - - for p in tmp tmp/. ./tmp; do - echo "Helper is: ${h}" - echo "Using source directory: ${p}" - - atf_check -s eq:0 -o ignore -e ignore \ - "./tmp/${h}" -s "${p}" srcdir_exists - atf_check -s eq:1 -o empty -e save:stderr "${hp}" -r res \ - srcdir_exists - atf_check -s eq:0 -o ignore -e empty grep "Cannot find datafile" res - atf_check -s eq:0 -o ignore -e ignore \ - "${hp}" -s "${p}" srcdir_exists - done - done -} - -atf_init_test_cases() -{ - atf_add_test_case default - atf_add_test_case libtool - atf_add_test_case sflag - atf_add_test_case relative -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/test-programs/common.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/common.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/common.sh (nonexistent) @@ -1,43 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2008 The NetBSD Foundation, Inc. -# 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 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. -# - -get_helpers() -{ - srcdir=$(atf_get_srcdir) - - if [ ${#} -eq 0 ]; then - set -- c_helpers cpp_helpers sh_helpers - fi - - for h_name in "${@}"; do - echo ${srcdir}/${h_name} - done -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/test-programs/c_helpers.c =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/c_helpers.c (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/c_helpers.c (nonexistent) @@ -1,565 +0,0 @@ -/* - * Automated Testing Framework (atf) - * - * Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. - * 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 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 -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include "atf-c/error.h" - -#include "atf-c/detail/env.h" -#include "atf-c/detail/fs.h" -#include "atf-c/detail/test_helpers.h" -#include "atf-c/detail/text.h" - -/* --------------------------------------------------------------------- - * Auxiliary functions. - * --------------------------------------------------------------------- */ - -static -void -safe_remove(const char* path) -{ - if (unlink(path) == -1) - atf_tc_fail("unlink(2) of %s failed", path); -} - -static -void -touch(const char *path) -{ - int fd; - fd = open(path, O_WRONLY | O_TRUNC | O_CREAT, 0644); - if (fd == -1) - atf_tc_fail("Could not create file %s", path); - close(fd); -} - -/* --------------------------------------------------------------------- - * Helper tests for "t_cleanup". - * --------------------------------------------------------------------- */ - -ATF_TC_WITH_CLEANUP(cleanup_pass); -ATF_TC_HEAD(cleanup_pass, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test " - "program"); -} -ATF_TC_BODY(cleanup_pass, tc) -{ - touch(atf_tc_get_config_var(tc, "tmpfile")); -} -ATF_TC_CLEANUP(cleanup_pass, tc) -{ - if (atf_tc_get_config_var_as_bool(tc, "cleanup")) - safe_remove(atf_tc_get_config_var(tc, "tmpfile")); -} - -ATF_TC_WITH_CLEANUP(cleanup_fail); -ATF_TC_HEAD(cleanup_fail, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test " - "program"); -} -ATF_TC_BODY(cleanup_fail, tc) -{ - touch(atf_tc_get_config_var(tc, "tmpfile")); - atf_tc_fail("On purpose"); -} -ATF_TC_CLEANUP(cleanup_fail, tc) -{ - if (atf_tc_get_config_var_as_bool(tc, "cleanup")) - safe_remove(atf_tc_get_config_var(tc, "tmpfile")); -} - -ATF_TC_WITH_CLEANUP(cleanup_skip); -ATF_TC_HEAD(cleanup_skip, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test " - "program"); -} -ATF_TC_BODY(cleanup_skip, tc) -{ - touch(atf_tc_get_config_var(tc, "tmpfile")); - atf_tc_skip("On purpose"); -} -ATF_TC_CLEANUP(cleanup_skip, tc) -{ - if (atf_tc_get_config_var_as_bool(tc, "cleanup")) - safe_remove(atf_tc_get_config_var(tc, "tmpfile")); -} - -ATF_TC_WITH_CLEANUP(cleanup_curdir); -ATF_TC_HEAD(cleanup_curdir, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test " - "program"); -} -ATF_TC_BODY(cleanup_curdir, tc) -{ - FILE *f; - - f = fopen("oldvalue", "w"); - if (f == NULL) - atf_tc_fail("Failed to create oldvalue file"); - fprintf(f, "1234"); - fclose(f); -} -ATF_TC_CLEANUP(cleanup_curdir, tc) -{ - FILE *f; - - f = fopen("oldvalue", "r"); - if (f != NULL) { - int i; - if (fscanf(f, "%d", &i) != 1) - fprintf(stderr, "Failed to read old value\n"); - else - printf("Old value: %d", i); - fclose(f); - } -} - -ATF_TC_WITH_CLEANUP(cleanup_sigterm); -ATF_TC_HEAD(cleanup_sigterm, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test " - "program"); -} -ATF_TC_BODY(cleanup_sigterm, tc) -{ - char *nofile; - - touch(atf_tc_get_config_var(tc, "tmpfile")); - kill(getpid(), SIGTERM); - - RE(atf_text_format(&nofile, "%s.no", - atf_tc_get_config_var(tc, "tmpfile"))); - touch(nofile); - free(nofile); -} -ATF_TC_CLEANUP(cleanup_sigterm, tc) -{ - safe_remove(atf_tc_get_config_var(tc, "tmpfile")); -} - -ATF_TC_WITH_CLEANUP(cleanup_fork); -ATF_TC_HEAD(cleanup_fork, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test " - "program"); -} -ATF_TC_BODY(cleanup_fork, tc) -{ -} -ATF_TC_CLEANUP(cleanup_fork, tc) -{ - close(STDOUT_FILENO); - close(STDERR_FILENO); - close(3); -} - -/* --------------------------------------------------------------------- - * Helper tests for "t_config". - * --------------------------------------------------------------------- */ - -ATF_TC(config_unset); -ATF_TC_HEAD(config_unset, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_config test " - "program"); -} -ATF_TC_BODY(config_unset, tc) -{ - ATF_REQUIRE(!atf_tc_has_config_var(tc, "test")); -} - -ATF_TC(config_empty); -ATF_TC_HEAD(config_empty, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_config test " - "program"); -} -ATF_TC_BODY(config_empty, tc) -{ - ATF_REQUIRE(atf_tc_has_config_var(tc, "test")); - ATF_REQUIRE(strlen(atf_tc_get_config_var(tc, "test")) == 0); -} - -ATF_TC(config_value); -ATF_TC_HEAD(config_value, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_config test " - "program"); -} -ATF_TC_BODY(config_value, tc) -{ - ATF_REQUIRE(atf_tc_has_config_var(tc, "test")); - ATF_REQUIRE(strcmp(atf_tc_get_config_var(tc, "test"), "foo") == 0); -} - -ATF_TC(config_multi_value); -ATF_TC_HEAD(config_multi_value, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_config test " - "program"); -} -ATF_TC_BODY(config_multi_value, tc) -{ - ATF_REQUIRE(atf_tc_has_config_var(tc, "test")); - ATF_REQUIRE(strcmp(atf_tc_get_config_var(tc, "test"), "foo bar") == 0); -} - -/* --------------------------------------------------------------------- - * Helper tests for "t_expect". - * --------------------------------------------------------------------- */ - -ATF_TC_WITHOUT_HEAD(expect_pass_and_pass); -ATF_TC_BODY(expect_pass_and_pass, tc) -{ - atf_tc_expect_pass(); - -} - -ATF_TC_WITHOUT_HEAD(expect_pass_but_fail_requirement); -ATF_TC_BODY(expect_pass_but_fail_requirement, tc) -{ - atf_tc_expect_pass(); - atf_tc_fail("Some reason"); -} - -ATF_TC_WITHOUT_HEAD(expect_pass_but_fail_check); -ATF_TC_BODY(expect_pass_but_fail_check, tc) -{ - atf_tc_expect_pass(); - atf_tc_fail_nonfatal("Some reason"); -} - -ATF_TC_WITHOUT_HEAD(expect_fail_and_fail_requirement); -ATF_TC_BODY(expect_fail_and_fail_requirement, tc) -{ - atf_tc_expect_fail("Fail %s", "reason"); - atf_tc_fail("The failure"); - atf_tc_expect_pass(); -} - -ATF_TC_WITHOUT_HEAD(expect_fail_and_fail_check); -ATF_TC_BODY(expect_fail_and_fail_check, tc) -{ - atf_tc_expect_fail("Fail first"); - atf_tc_fail_nonfatal("abc"); - atf_tc_expect_pass(); - - atf_tc_expect_fail("And fail again"); - atf_tc_fail_nonfatal("def"); - atf_tc_expect_pass(); -} - -ATF_TC_WITHOUT_HEAD(expect_fail_but_pass); -ATF_TC_BODY(expect_fail_but_pass, tc) -{ - atf_tc_expect_fail("Fail first"); - atf_tc_fail_nonfatal("abc"); - atf_tc_expect_pass(); - - atf_tc_expect_fail("Will not fail"); - atf_tc_expect_pass(); - - atf_tc_expect_fail("And fail again"); - atf_tc_fail_nonfatal("def"); - atf_tc_expect_pass(); -} - -ATF_TC_WITHOUT_HEAD(expect_exit_any_and_exit); -ATF_TC_BODY(expect_exit_any_and_exit, tc) -{ - atf_tc_expect_exit(-1, "Call will exit"); - exit(EXIT_SUCCESS); -} - -ATF_TC_WITHOUT_HEAD(expect_exit_code_and_exit); -ATF_TC_BODY(expect_exit_code_and_exit, tc) -{ - atf_tc_expect_exit(123, "Call will exit"); - exit(123); -} - -ATF_TC_WITHOUT_HEAD(expect_exit_but_pass); -ATF_TC_BODY(expect_exit_but_pass, tc) -{ - atf_tc_expect_exit(-1, "Call won't exit"); -} - -ATF_TC_WITHOUT_HEAD(expect_signal_any_and_signal); -ATF_TC_BODY(expect_signal_any_and_signal, tc) -{ - atf_tc_expect_signal(-1, "Call will signal"); - kill(getpid(), SIGKILL); -} - -ATF_TC_WITHOUT_HEAD(expect_signal_no_and_signal); -ATF_TC_BODY(expect_signal_no_and_signal, tc) -{ - atf_tc_expect_signal(SIGHUP, "Call will signal"); - kill(getpid(), SIGHUP); -} - -ATF_TC_WITHOUT_HEAD(expect_signal_but_pass); -ATF_TC_BODY(expect_signal_but_pass, tc) -{ - atf_tc_expect_signal(-1, "Call won't signal"); -} - -ATF_TC_WITHOUT_HEAD(expect_death_and_exit); -ATF_TC_BODY(expect_death_and_exit, tc) -{ - atf_tc_expect_death("Exit case"); - exit(123); -} - -ATF_TC_WITHOUT_HEAD(expect_death_and_signal); -ATF_TC_BODY(expect_death_and_signal, tc) -{ - atf_tc_expect_death("Signal case"); - kill(getpid(), SIGKILL); -} - -ATF_TC_WITHOUT_HEAD(expect_death_but_pass); -ATF_TC_BODY(expect_death_but_pass, tc) -{ - atf_tc_expect_death("Call won't die"); -} - -ATF_TC(expect_timeout_and_hang); -ATF_TC_HEAD(expect_timeout_and_hang, tc) -{ - atf_tc_set_md_var(tc, "timeout", "1"); -} -ATF_TC_BODY(expect_timeout_and_hang, tc) -{ - atf_tc_expect_timeout("Will overrun"); - sleep(5); -} - -ATF_TC(expect_timeout_but_pass); -ATF_TC_HEAD(expect_timeout_but_pass, tc) -{ - atf_tc_set_md_var(tc, "timeout", "1"); -} -ATF_TC_BODY(expect_timeout_but_pass, tc) -{ - atf_tc_expect_timeout("Will just exit"); -} - -/* --------------------------------------------------------------------- - * Helper tests for "t_fork". - * --------------------------------------------------------------------- */ - -ATF_TC(fork_stop); -ATF_TC_HEAD(fork_stop, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_fork test " - "program"); -} -ATF_TC_BODY(fork_stop, tc) -{ - FILE *f; - const char *dfstr, *pfstr; - - dfstr = atf_tc_get_config_var(tc, "donefile"); - pfstr = atf_tc_get_config_var(tc, "pidfile"); - - f = fopen(pfstr, "w"); - if (f == NULL) - atf_tc_fail("Failed to create pidfile %s", pfstr); - fprintf(f, "%d", (int)getpid()); - fclose(f); - printf("Wrote pid file\n"); - - printf("Waiting for done file\n"); - while (access(dfstr, F_OK) != 0) - usleep(10000); - printf("Exiting\n"); -} - -/* --------------------------------------------------------------------- - * Helper tests for "t_meta_data". - * --------------------------------------------------------------------- */ - -ATF_TC(metadata_no_descr); -ATF_TC_HEAD(metadata_no_descr, tc) -{ -} -ATF_TC_BODY(metadata_no_descr, tc) -{ -} - -ATF_TC_WITHOUT_HEAD(metadata_no_head); -ATF_TC_BODY(metadata_no_head, tc) -{ -} - -/* --------------------------------------------------------------------- - * Helper tests for "t_srcdir". - * --------------------------------------------------------------------- */ - -ATF_TC(srcdir_exists); -ATF_TC_HEAD(srcdir_exists, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_srcdir test " - "program"); -} -ATF_TC_BODY(srcdir_exists, tc) -{ - atf_fs_path_t p; - bool b; - - RE(atf_fs_path_init_fmt(&p, "%s/datafile", - atf_tc_get_config_var(tc, "srcdir"))); - RE(atf_fs_exists(&p, &b)); - atf_fs_path_fini(&p); - if (!b) - atf_tc_fail("Cannot find datafile"); -} - -/* --------------------------------------------------------------------- - * Helper tests for "t_result". - * --------------------------------------------------------------------- */ - -ATF_TC(result_pass); -ATF_TC_HEAD(result_pass, tc) { } -ATF_TC_BODY(result_pass, tc) -{ - printf("msg\n"); -} - -ATF_TC(result_fail); -ATF_TC_HEAD(result_fail, tc) { } -ATF_TC_BODY(result_fail, tc) -{ - printf("msg\n"); - atf_tc_fail("Failure reason"); -} - -ATF_TC(result_skip); -ATF_TC_HEAD(result_skip, tc) { } -ATF_TC_BODY(result_skip, tc) -{ - printf("msg\n"); - atf_tc_skip("Skipped reason"); -} - -ATF_TC(result_newlines_fail); -ATF_TC_HEAD(result_newlines_fail, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_result test " - "program"); -} -ATF_TC_BODY(result_newlines_fail, tc) -{ - atf_tc_fail("First line\nSecond line"); -} - -ATF_TC(result_newlines_skip); -ATF_TC_HEAD(result_newlines_skip, tc) -{ - atf_tc_set_md_var(tc, "descr", "Helper test case for the t_result test " - "program"); -} -ATF_TC_BODY(result_newlines_skip, tc) -{ - atf_tc_skip("First line\nSecond line"); -} - -/* --------------------------------------------------------------------- - * Main. - * --------------------------------------------------------------------- */ - -ATF_TP_ADD_TCS(tp) -{ - /* Add helper tests for t_cleanup. */ - ATF_TP_ADD_TC(tp, cleanup_pass); - ATF_TP_ADD_TC(tp, cleanup_fail); - ATF_TP_ADD_TC(tp, cleanup_skip); - ATF_TP_ADD_TC(tp, cleanup_curdir); - ATF_TP_ADD_TC(tp, cleanup_sigterm); - ATF_TP_ADD_TC(tp, cleanup_fork); - - /* Add helper tests for t_config. */ - ATF_TP_ADD_TC(tp, config_unset); - ATF_TP_ADD_TC(tp, config_empty); - ATF_TP_ADD_TC(tp, config_value); - ATF_TP_ADD_TC(tp, config_multi_value); - - /* Add helper tests for t_expect. */ - ATF_TP_ADD_TC(tp, expect_pass_and_pass); - ATF_TP_ADD_TC(tp, expect_pass_but_fail_requirement); - ATF_TP_ADD_TC(tp, expect_pass_but_fail_check); - ATF_TP_ADD_TC(tp, expect_fail_and_fail_requirement); - ATF_TP_ADD_TC(tp, expect_fail_and_fail_check); - ATF_TP_ADD_TC(tp, expect_fail_but_pass); - ATF_TP_ADD_TC(tp, expect_exit_any_and_exit); - ATF_TP_ADD_TC(tp, expect_exit_code_and_exit); - ATF_TP_ADD_TC(tp, expect_exit_but_pass); - ATF_TP_ADD_TC(tp, expect_signal_any_and_signal); - ATF_TP_ADD_TC(tp, expect_signal_no_and_signal); - ATF_TP_ADD_TC(tp, expect_signal_but_pass); - ATF_TP_ADD_TC(tp, expect_death_and_exit); - ATF_TP_ADD_TC(tp, expect_death_and_signal); - ATF_TP_ADD_TC(tp, expect_death_but_pass); - ATF_TP_ADD_TC(tp, expect_timeout_and_hang); - ATF_TP_ADD_TC(tp, expect_timeout_but_pass); - - /* Add helper tests for t_fork. */ - ATF_TP_ADD_TC(tp, fork_stop); - - /* Add helper tests for t_meta_data. */ - ATF_TP_ADD_TC(tp, metadata_no_descr); - ATF_TP_ADD_TC(tp, metadata_no_head); - - /* Add helper tests for t_srcdir. */ - ATF_TP_ADD_TC(tp, srcdir_exists); - - /* Add helper tests for t_result. */ - ATF_TP_ADD_TC(tp, result_pass); - ATF_TP_ADD_TC(tp, result_fail); - ATF_TP_ADD_TC(tp, result_skip); - ATF_TP_ADD_TC(tp, result_newlines_fail); - ATF_TP_ADD_TC(tp, result_newlines_skip); - - return atf_no_error(); -} Index: vendor/NetBSD/atf/dist/dist/test-programs/expect_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/expect_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/expect_test.sh (nonexistent) @@ -1,149 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -check_result() { - file="${1}"; shift - - atf_check -s eq:0 -o match:"${*}" -e empty cat "${file}" - rm "${file}" -} - -atf_test_case expect_pass -expect_pass_body() { - for h in $(get_helpers); do - atf_check -s eq:0 "${h}" -r result expect_pass_and_pass - check_result result "passed" - - atf_check -s eq:1 "${h}" -r result expect_pass_but_fail_requirement - check_result result "failed: Some reason" - - # atf-sh does not support non-fatal failures yet; skip checks for - # such conditions. - case "${h}" in *sh_helpers*) continue ;; esac - - atf_check -s eq:1 -o empty -e match:"Some reason" \ - "${h}" -r result expect_pass_but_fail_check - check_result result "failed: 1 checks failed" - done -} - -atf_test_case expect_fail -expect_fail_body() { - for h in $(get_helpers c_helpers cpp_helpers); do - atf_check -s eq:0 "${h}" -r result expect_fail_and_fail_requirement - check_result result "expected_failure: Fail reason: The failure" - - atf_check -s eq:1 -e match:"Expected check failure: Fail first: abc" \ - -e not-match:"And fail again" "${h}" -r result expect_fail_but_pass - check_result result "failed: .*expecting a failure" - - # atf-sh does not support non-fatal failures yet; skip checks for - # such conditions. - case "${h}" in *sh_helpers*) continue ;; esac - - atf_check -s eq:0 -e match:"Expected check failure: Fail first: abc" \ - -e match:"Expected check failure: And fail again: def" \ - "${h}" -r result expect_fail_and_fail_check - check_result result "expected_failure: And fail again: 2 checks" \ - "failed as expected" - done - - # atf-sh does not support non-fatal failures yet; skip checks for - # such conditions. - for h in $(get_helpers sh_helpers); do - atf_check -s eq:0 "${h}" -r result expect_fail_and_fail_requirement - check_result result "expected_failure: Fail reason: The failure" - - atf_check -s eq:1 "${h}" -r result expect_fail_but_pass - check_result result "failed: .*expecting a failure" - done -} - -atf_test_case expect_exit -expect_exit_body() { - for h in $(get_helpers); do - atf_check -s eq:0 "${h}" -r result expect_exit_any_and_exit - check_result result "expected_exit: Call will exit" - - atf_check -s eq:123 "${h}" -r result expect_exit_code_and_exit - check_result result "expected_exit\(123\): Call will exit" - - atf_check -s eq:1 "${h}" -r result expect_exit_but_pass - check_result result "failed: .*expected to exit" - done -} - -atf_test_case expect_signal -expect_signal_body() { - for h in $(get_helpers); do - atf_check -s signal:9 "${h}" -r result expect_signal_any_and_signal - check_result result "expected_signal: Call will signal" - - atf_check -s signal:hup "${h}" -r result expect_signal_no_and_signal - check_result result "expected_signal\(1\): Call will signal" - - atf_check -s eq:1 "${h}" -r result expect_signal_but_pass - check_result result "failed: .*termination signal" - done -} - -atf_test_case expect_death -expect_death_body() { - for h in $(get_helpers); do - atf_check -s eq:123 "${h}" -r result expect_death_and_exit - check_result result "expected_death: Exit case" - - atf_check -s signal:kill "${h}" -r result expect_death_and_signal - check_result result "expected_death: Signal case" - - atf_check -s eq:1 "${h}" -r result expect_death_but_pass - check_result result "failed: .*terminate abruptly" - done -} - -atf_test_case expect_timeout -expect_timeout_body() { - for h in $(get_helpers); do - atf_check -s eq:1 "${h}" -r result expect_timeout_but_pass - check_result result "failed: Test case was expected to hang but it" \ - "continued execution" - done -} - -atf_init_test_cases() -{ - atf_add_test_case expect_pass - atf_add_test_case expect_fail - atf_add_test_case expect_exit - atf_add_test_case expect_signal - atf_add_test_case expect_death - atf_add_test_case expect_timeout -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/test-programs/cpp_helpers.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/cpp_helpers.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/cpp_helpers.cpp (nonexistent) @@ -1,383 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -// 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 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. -// - -extern "C" { -#include -#include -} - -#include -#include -#include - -#include "atf-c++/macros.hpp" - -#include "atf-c++/detail/fs.hpp" - -// ------------------------------------------------------------------------ -// Helper tests for "t_config". -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(config_unset); -ATF_TEST_CASE_HEAD(config_unset) -{ - set_md_var("descr", "Helper test case for the t_config test program"); -} -ATF_TEST_CASE_BODY(config_unset) -{ - ATF_REQUIRE(!has_config_var("test")); -} - -ATF_TEST_CASE(config_empty); -ATF_TEST_CASE_HEAD(config_empty) -{ - set_md_var("descr", "Helper test case for the t_config test program"); -} -ATF_TEST_CASE_BODY(config_empty) -{ - ATF_REQUIRE_EQ(get_config_var("test"), ""); -} - -ATF_TEST_CASE(config_value); -ATF_TEST_CASE_HEAD(config_value) -{ - set_md_var("descr", "Helper test case for the t_config test program"); -} -ATF_TEST_CASE_BODY(config_value) -{ - ATF_REQUIRE_EQ(get_config_var("test"), "foo"); -} - -ATF_TEST_CASE(config_multi_value); -ATF_TEST_CASE_HEAD(config_multi_value) -{ - set_md_var("descr", "Helper test case for the t_config test program"); -} -ATF_TEST_CASE_BODY(config_multi_value) -{ - ATF_REQUIRE_EQ(get_config_var("test"), "foo bar"); -} - -// ------------------------------------------------------------------------ -// Helper tests for "t_expect". -// ------------------------------------------------------------------------ - -ATF_TEST_CASE_WITHOUT_HEAD(expect_pass_and_pass); -ATF_TEST_CASE_BODY(expect_pass_and_pass) -{ - expect_pass(); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_pass_but_fail_requirement); -ATF_TEST_CASE_BODY(expect_pass_but_fail_requirement) -{ - expect_pass(); - fail("Some reason"); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_pass_but_fail_check); -ATF_TEST_CASE_BODY(expect_pass_but_fail_check) -{ - expect_pass(); - fail_nonfatal("Some reason"); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_fail_and_fail_requirement); -ATF_TEST_CASE_BODY(expect_fail_and_fail_requirement) -{ - expect_fail("Fail reason"); - fail("The failure"); - expect_pass(); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_fail_and_fail_check); -ATF_TEST_CASE_BODY(expect_fail_and_fail_check) -{ - expect_fail("Fail first"); - fail_nonfatal("abc"); - expect_pass(); - - expect_fail("And fail again"); - fail_nonfatal("def"); - expect_pass(); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_fail_but_pass); -ATF_TEST_CASE_BODY(expect_fail_but_pass) -{ - expect_fail("Fail first"); - fail_nonfatal("abc"); - expect_pass(); - - expect_fail("Will not fail"); - expect_pass(); - - expect_fail("And fail again"); - fail_nonfatal("def"); - expect_pass(); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_exit_any_and_exit); -ATF_TEST_CASE_BODY(expect_exit_any_and_exit) -{ - expect_exit(-1, "Call will exit"); - std::exit(EXIT_SUCCESS); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_exit_code_and_exit); -ATF_TEST_CASE_BODY(expect_exit_code_and_exit) -{ - expect_exit(123, "Call will exit"); - std::exit(123); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_exit_but_pass); -ATF_TEST_CASE_BODY(expect_exit_but_pass) -{ - expect_exit(-1, "Call won't exit"); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_signal_any_and_signal); -ATF_TEST_CASE_BODY(expect_signal_any_and_signal) -{ - expect_signal(-1, "Call will signal"); - ::kill(getpid(), SIGKILL); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_signal_no_and_signal); -ATF_TEST_CASE_BODY(expect_signal_no_and_signal) -{ - expect_signal(SIGHUP, "Call will signal"); - ::kill(getpid(), SIGHUP); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_signal_but_pass); -ATF_TEST_CASE_BODY(expect_signal_but_pass) -{ - expect_signal(-1, "Call won't signal"); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_death_and_exit); -ATF_TEST_CASE_BODY(expect_death_and_exit) -{ - expect_death("Exit case"); - std::exit(123); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_death_and_signal); -ATF_TEST_CASE_BODY(expect_death_and_signal) -{ - expect_death("Signal case"); - kill(getpid(), SIGKILL); -} - -ATF_TEST_CASE_WITHOUT_HEAD(expect_death_but_pass); -ATF_TEST_CASE_BODY(expect_death_but_pass) -{ - expect_death("Call won't die"); -} - -ATF_TEST_CASE(expect_timeout_and_hang); -ATF_TEST_CASE_HEAD(expect_timeout_and_hang) -{ - set_md_var("timeout", "1"); -} -ATF_TEST_CASE_BODY(expect_timeout_and_hang) -{ - expect_timeout("Will overrun"); - ::sleep(5); -} - -ATF_TEST_CASE(expect_timeout_but_pass); -ATF_TEST_CASE_HEAD(expect_timeout_but_pass) -{ - set_md_var("timeout", "1"); -} -ATF_TEST_CASE_BODY(expect_timeout_but_pass) -{ - expect_timeout("Will just exit"); -} - -// ------------------------------------------------------------------------ -// Helper tests for "t_fork". -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(fork_stop); -ATF_TEST_CASE_HEAD(fork_stop) -{ - set_md_var("descr", "Helper test case for the t_fork test program"); -} -ATF_TEST_CASE_BODY(fork_stop) -{ - std::ofstream os(get_config_var("pidfile").c_str()); - os << ::getpid() << "\n"; - os.close(); - std::cout << "Wrote pid file\n"; - std::cout << "Waiting for done file\n"; - while (::access(get_config_var("donefile").c_str(), F_OK) != 0) - ::usleep(10000); - std::cout << "Exiting\n"; -} - -// ------------------------------------------------------------------------ -// Helper tests for "t_meta_data". -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(metadata_no_descr); -ATF_TEST_CASE_HEAD(metadata_no_descr) -{ -} -ATF_TEST_CASE_BODY(metadata_no_descr) -{ -} - -ATF_TEST_CASE_WITHOUT_HEAD(metadata_no_head); -ATF_TEST_CASE_BODY(metadata_no_head) -{ -} - -// ------------------------------------------------------------------------ -// Helper tests for "t_srcdir". -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(srcdir_exists); -ATF_TEST_CASE_HEAD(srcdir_exists) -{ - set_md_var("descr", "Helper test case for the t_srcdir test program"); -} -ATF_TEST_CASE_BODY(srcdir_exists) -{ - if (!atf::fs::exists(atf::fs::path(get_config_var("srcdir")) / - "datafile")) - ATF_FAIL("Cannot find datafile"); -} - -// ------------------------------------------------------------------------ -// Helper tests for "t_result". -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(result_pass); -ATF_TEST_CASE_HEAD(result_pass) { } -ATF_TEST_CASE_BODY(result_pass) -{ - std::cout << "msg\n"; -} - -ATF_TEST_CASE(result_fail); -ATF_TEST_CASE_HEAD(result_fail) { } -ATF_TEST_CASE_BODY(result_fail) -{ - std::cout << "msg\n"; - ATF_FAIL("Failure reason"); -} - -ATF_TEST_CASE(result_skip); -ATF_TEST_CASE_HEAD(result_skip) { } -ATF_TEST_CASE_BODY(result_skip) -{ - std::cout << "msg\n"; - ATF_SKIP("Skipped reason"); -} - -ATF_TEST_CASE(result_newlines_fail); -ATF_TEST_CASE_HEAD(result_newlines_fail) -{ - set_md_var("descr", "Helper test case for the t_result test program"); -} -ATF_TEST_CASE_BODY(result_newlines_fail) -{ - ATF_FAIL("First line\nSecond line"); -} - -ATF_TEST_CASE(result_newlines_skip); -ATF_TEST_CASE_HEAD(result_newlines_skip) -{ - set_md_var("descr", "Helper test case for the t_result test program"); -} -ATF_TEST_CASE_BODY(result_newlines_skip) -{ - ATF_SKIP("First line\nSecond line"); -} - -ATF_TEST_CASE(result_exception); -ATF_TEST_CASE_HEAD(result_exception) { } -ATF_TEST_CASE_BODY(result_exception) -{ - throw std::runtime_error("This is unhandled"); -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - // Add helper tests for t_config. - ATF_ADD_TEST_CASE(tcs, config_unset); - ATF_ADD_TEST_CASE(tcs, config_empty); - ATF_ADD_TEST_CASE(tcs, config_value); - ATF_ADD_TEST_CASE(tcs, config_multi_value); - - // Add helper tests for t_expect. - ATF_ADD_TEST_CASE(tcs, expect_pass_and_pass); - ATF_ADD_TEST_CASE(tcs, expect_pass_but_fail_requirement); - ATF_ADD_TEST_CASE(tcs, expect_pass_but_fail_check); - ATF_ADD_TEST_CASE(tcs, expect_fail_and_fail_requirement); - ATF_ADD_TEST_CASE(tcs, expect_fail_and_fail_check); - ATF_ADD_TEST_CASE(tcs, expect_fail_but_pass); - ATF_ADD_TEST_CASE(tcs, expect_exit_any_and_exit); - ATF_ADD_TEST_CASE(tcs, expect_exit_code_and_exit); - ATF_ADD_TEST_CASE(tcs, expect_exit_but_pass); - ATF_ADD_TEST_CASE(tcs, expect_signal_any_and_signal); - ATF_ADD_TEST_CASE(tcs, expect_signal_no_and_signal); - ATF_ADD_TEST_CASE(tcs, expect_signal_but_pass); - ATF_ADD_TEST_CASE(tcs, expect_death_and_exit); - ATF_ADD_TEST_CASE(tcs, expect_death_and_signal); - ATF_ADD_TEST_CASE(tcs, expect_death_but_pass); - ATF_ADD_TEST_CASE(tcs, expect_timeout_and_hang); - ATF_ADD_TEST_CASE(tcs, expect_timeout_but_pass); - - // Add helper tests for t_fork. - ATF_ADD_TEST_CASE(tcs, fork_stop); - - // Add helper tests for t_meta_data. - ATF_ADD_TEST_CASE(tcs, metadata_no_descr); - ATF_ADD_TEST_CASE(tcs, metadata_no_head); - - // Add helper tests for t_srcdir. - ATF_ADD_TEST_CASE(tcs, srcdir_exists); - - // Add helper tests for t_result. - ATF_ADD_TEST_CASE(tcs, result_pass); - ATF_ADD_TEST_CASE(tcs, result_fail); - ATF_ADD_TEST_CASE(tcs, result_skip); - ATF_ADD_TEST_CASE(tcs, result_newlines_fail); - ATF_ADD_TEST_CASE(tcs, result_newlines_skip); - ATF_ADD_TEST_CASE(tcs, result_exception); -} Index: vendor/NetBSD/atf/dist/dist/test-programs/config_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/config_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/config_test.sh (nonexistent) @@ -1,62 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -atf_test_case vflag -vflag_head() -{ - atf_set "descr" "Tests that the -v flag works correctly to set" \ - "configuration variables" -} -vflag_body() -{ - for h in $(get_helpers); do - atf_check -s eq:0 -o ignore -e ignore ${h} -s $(atf_get_srcdir) \ - -r resfile config_unset - atf_check -s eq:0 -o ignore -e empty grep 'passed' resfile - - atf_check -s eq:0 -o ignore -e ignore ${h} -s $(atf_get_srcdir) \ - -r resfile -v 'test=' config_empty - atf_check -s eq:0 -o ignore -e empty grep 'passed' resfile - - atf_check -s eq:0 -o ignore -e ignore ${h} -s $(atf_get_srcdir) \ - -r resfile -v 'test=foo' config_value - atf_check -s eq:0 -o ignore -e empty grep 'passed' resfile - - atf_check -s eq:0 -o ignore -e ignore -x ${h} -s $(atf_get_srcdir) \ - -r resfile -v \'test=foo bar\' config_multi_value - atf_check -s eq:0 -o ignore -e empty grep 'passed' resfile - done -} - -atf_init_test_cases() -{ - atf_add_test_case vflag -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/test-programs/fork_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/fork_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/fork_test.sh (nonexistent) @@ -1,64 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -# TODO: This test program is about checking the test case's "environment" -# (not the variables). Should be named something else than t_fork. - -atf_test_case stop -stop_head() -{ - atf_set "descr" "Tests that sending a stop signal to a test case does" \ - "not report it as failed" -} -stop_body() -{ - for h in $(get_helpers); do - ${h} -s $(atf_get_srcdir) -v pidfile=$(pwd)/pid \ - -v donefile=$(pwd)/done -r resfile fork_stop & - ppid=${!} - echo "Waiting for pid file for test program ${ppid}" - while test ! -f pid; do sleep 1; done - pid=$(cat pid) - echo "Test case's pid is ${pid}" - kill -STOP ${pid} - touch done - echo "Wrote done file" - kill -CONT ${pid} - wait ${ppid} - atf_check -s eq:0 -o ignore -e empty grep '^passed$' resfile - rm -f pid done - done -} - -atf_init_test_cases() -{ - atf_add_test_case stop -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/test-programs/Atffile =================================================================== --- vendor/NetBSD/atf/dist/dist/test-programs/Atffile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/test-programs/Atffile (nonexistent) @@ -1,10 +0,0 @@ -Content-Type: application/X-atf-atffile; version="1" - -prop: test-suite = atf - -tp: config_test -tp: expect_test -tp: fork_test -tp: meta_data_test -tp: srcdir_test -tp: result_test Index: vendor/NetBSD/atf/dist/dist/atf-config/integration_test.sh =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-config/integration_test.sh (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-config/integration_test.sh (nonexistent) @@ -1,180 +0,0 @@ -# -# Automated Testing Framework (atf) -# -# Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc. -# 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 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. -# - -all_vars="atf_arch \ - atf_build_cc \ - atf_build_cflags \ - atf_build_cpp \ - atf_build_cppflags \ - atf_build_cxx \ - atf_build_cxxflags \ - atf_confdir \ - atf_includedir \ - atf_libdir \ - atf_libexecdir \ - atf_machine \ - atf_pkgdatadir \ - atf_shell \ - atf_workdir" -all_vars_no=15 - -atf_test_case list_all -list_all_head() -{ - atf_set "descr" "Tests that at atf-config prints all expected" \ - "variables, and not more" -} -list_all_body() -{ - atf_check -s eq:0 -o save:stdout -e empty atf-config - atf_check -s eq:0 -o empty -e empty \ - test "$(wc -l stdout | awk '{ print $1 }')" = "${all_vars_no}" - for v in ${all_vars}; do - atf_check -s eq:0 -o ignore -e empty grep "${v}" stdout - done -} - -atf_test_case query_one -query_one_head() -{ - atf_set "descr" "Tests that querying a single variable works" -} -query_one_body() -{ - for v in ${all_vars}; do - atf_check -s eq:0 -o save:stdout -o match:"${v}" -e empty \ - atf-config "${v}" - atf_check -s eq:0 -o empty -e empty \ - test "$(wc -l stdout | awk '{ print $1 }')" = 1 - done -} - -atf_test_case query_one_terse -query_one_terse_head() -{ - atf_set "descr" "Tests that querying a single variable in terse mode" \ - "works" -} -query_one_terse_body() -{ - for v in ${all_vars}; do - atf_check -s eq:0 -o save:stdout -o match:"${v}" -e empty \ - atf-config "${v}" - atf_check -s eq:0 -o empty -e empty \ - test "$(wc -l stdout | awk '{ print $1 }')" = 1 - atf_check -s eq:0 -o save:stdout -e empty cut -d ' ' -f 3- stdout - atf_check -s eq:0 -o empty -e empty mv stdout expout - atf_check -s eq:0 -o file:expout -e empty atf-config -t "${v}" - done -} - -atf_test_case query_multiple -query_multiple_head() -{ - atf_set "descr" "Tests that querying multiple variables works" -} -query_multiple_body() -{ - atf_check -s eq:0 -o save:stdout -o match:'atf_libexecdir' \ - -o match:'atf_shell' -e empty atf-config atf_libexecdir atf_shell - atf_check -s eq:0 -o empty -e empty \ - test "$(wc -l stdout | awk '{ print $1 }')" = 2 -} - -atf_test_case query_unknown -query_unknown_head() -{ - atf_set "descr" "Tests that querying an unknown variable delivers" \ - "the correct error" -} -query_unknown_body() -{ - atf_check -s eq:1 -o empty -e match:'Unknown variable.*non_existent' \ - atf-config non_existent -} - -atf_test_case query_mixture -query_mixture_head() -{ - atf_set "descr" "Tests that querying a known and an unknown variable" \ - "delivers the correct error" -} -query_mixture_body() -{ - for v in ${all_vars}; do - atf_check -s eq:1 -o empty -e match:'Unknown variable.*non_existent' \ - atf-config "${v}" non_existent - atf_check -s eq:1 -o empty -e match:'Unknown variable.*non_existent' \ - atf-config non_existent "${v}" - done -} - -atf_test_case override_env -override_env_head() -{ - atf_set "descr" "Tests that build-time variables can be overriden" \ - "through their corresponding environment variables" -} -override_env_body() -{ - for v in ${all_vars}; do - V=$(echo ${v} | tr '[a-z]' '[A-Z]') - atf_check -s eq:0 -o save:stdout -e empty -x "${V}=testval atf-config" - atf_check -s eq:0 -o empty -e empty mv stdout all - - atf_check -s eq:0 -o save:stdout -e empty grep "^${v} : " all - atf_check -s eq:0 -o empty -e empty mv stdout affected - atf_check -s eq:0 -o save:stdout -e empty grep -v "^${v} : " all - atf_check -s eq:0 -o empty -e empty mv stdout unaffected - - atf_check -s eq:0 -o empty -e empty \ - test "$(wc -l affected | awk '{ print $1 }')" = 1 - atf_check -s eq:0 -o empty -e empty \ - test "$(wc -l unaffected | awk '{ print $1 }')" = \ - "$((${all_vars_no} -1))" - - atf_check -s eq:0 -o ignore -e empty grep "^${v} : testval$" affected - atf_check -s eq:1 -o empty -e empty grep ' : testval$' unaffected - done -} - -atf_init_test_cases() -{ - atf_add_test_case list_all - - atf_add_test_case query_one - atf_add_test_case query_one_terse - atf_add_test_case query_multiple - atf_add_test_case query_unknown - atf_add_test_case query_mixture - - atf_add_test_case override_env -} - -# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 Index: vendor/NetBSD/atf/dist/dist/atf-config/Kyuafile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-config/Kyuafile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-config/Kyuafile (nonexistent) @@ -1,5 +0,0 @@ -syntax("kyuafile", 1) - -test_suite("atf") - -atf_test_program{name="integration_test"} Index: vendor/NetBSD/atf/dist/dist/atf-config/Atffile =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-config/Atffile (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-config/Atffile (nonexistent) @@ -1,5 +0,0 @@ -Content-Type: application/X-atf-atffile; version="1" - -prop: test-suite = atf - -tp-glob: *_test Index: vendor/NetBSD/atf/dist/dist/atf-config/atf-config.1 =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-config/atf-config.1 (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-config/atf-config.1 (nonexistent) @@ -1,184 +0,0 @@ -.\" -.\" Automated Testing Framework (atf) -.\" -.\" Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. -.\" 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 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. -.\" -.Dd March 14, 2009 -.Dt ATF-CONFIG 1 -.Os -.Sh NAME -.Nm atf-config -.Nd queries static configuration information of ATF -.Sh SYNOPSIS -.Nm -.Op Fl t -.Op Ar var1 Op Ar .. varN -.Nm -.Fl h -.Sh DESCRIPTION -.Nm -is a utility that queries static configuration information of ATF. -Static configuration refers to all those values for settings that -were built into the ATF binaries at build time. -.Pp -In the first synopsis form, -.Nm -will print variable-value pairs for all built-in static variables if -no variable names are provided as arguments. -If any is provided, it will only print the variable-value pairs for -those variables. -The output of the utility does not use the -.Sq = -symbol to separate the variable name from its corresponding value in -an attempt to avoid sourcing the output in shell scripts or Makefiles. -If you need to do that, the -.Fl t -flag allows you to query the value of individual variables without any -surrounding text. -.Pp -In the second synopsis form, -.Nm -will print information about all supported options and their purpose. -.Pp -The following options are available: -.Bl -tag -width flag -.It Fl h -Shows a short summary of all available options and their purpose. -.It Fl t -Changes the output of the utility to show the variable values, one -per line, without the variable names. -.El -.Ss Static configuration variables -The following list describes all the variables that are part of ATF's -static configuration: -.Bl -tag -width atfXbuildXcppflagsXX -.It Va atf_arch -The architecture name detected by ATF. -This is derived from -.Va atf_machine -because it is a subset of it. -Given that this name might be misdetected, it is provided to the user -as a configuration variable so that he can fix its value temporarily -until a real fix is incorporated into mainstream sources. -.It Va atf_build_cc -The C compiler used by the ATF checks that provide build-time tests. -.It Va atf_build_cflags -The C compiler flags used by the ATF checks that provide build-time tests. -.It Va atf_build_cpp -The C/C++ preprocessor used by the ATF checks that provide build-time tests. -.It Va atf_build_cppflags -The C/C++ preprocessor flags used by the ATF checks that provide build-time -tests. -.It Va atf_build_cxx -The C++ compiler used by the ATF checks that provide build-time tests. -.It Va atf_build_cxxflags -The C++ compiler flags used by the ATF checks that provide build-time tests. -.It Va atf_confdir -The path to the directory that contains the system-wide configuration -files for ATF. -.It Va atf_includedir -The path to the directory that contains the ATF header files. -.It Va atf_libdir -The path to the directory that contains the ATF libraries. -.It Va atf_libexecdir -The path to the directory that contains the auxiliary utilities of ATF, -used internally by the public tools. -.It Va atf_machine -The machine type name detected by ATF. -This should not be tunable but is provided for symmetry with -.Va atf_arch . -.It Va atf_pkgdatadir -The path to the directory that contains the files that form the ATF's -shell-scripting library. -.It Va atf_shell -The path to the shell interpreter that will be used by ATF. -.It Va atf_workdir -The path to the temporary directory that the utilities and the test -programs will use to store temporary files in. -.El -.Sh ENVIRONMENT -Every variable that is part of the static configuration can be -overridden at run-time by defining an environment variable. -This environment variable has the exact same name as the one shown by -.Nm -except that the name is all composed of uppercase letters. -.Pp -In general, empty values in the environment will be ignored unless -otherwise noted below. -.Pp -The recognized environment variables are: -.Bl -tag -width ATFXBUILDXCPPFLAGSXX -.It Ev ATF_ARCH -Overrides the built-in value of -.Va atf_arch . -.It Ev ATF_BUILD_CC -Overrides the built-in value of -.Va atf_build_cc . -.It Ev ATF_BUILD_CFLAGS -Overrides the built-in value of -.Va atf_build_cflags . -Empty values are allowed. -.It Ev ATF_BUILD_CPP -Overrides the built-in value of -.Va atf_build_cpp . -.It Ev ATF_BUILD_CPPFLAGS -Overrides the built-in value of -.Va atf_build_cppflags . -Empty values are allowed. -.It Ev ATF_BUILD_CXX -Overrides the built-in value of -.Va atf_build_cxx . -.It Ev ATF_BUILD_CXXFLAGS -Overrides the built-in value of -.Va atf_build_cxxflags . -Empty values are allowed. -.It Ev ATF_CONFDIR -Overrides the built-in value of -.Va atf_confdir . -.It Ev ATF_INCLUDEDIR -Overrides the built-in value of -.Va atf_includedir . -.It Ev ATF_LIBDIR -Overrides the built-in value of -.Va atf_libdir . -.It Ev ATF_LIBEXECDIR -Overrides the built-in value of -.Va atf_libexecdir . -.It Ev ATF_MACHINE -Overrides the built-in value of -.Va atf_machine . -.It Ev ATF_PKGDATADIR -Overrides the built-in value of -.Va atf_pkgdatadir . -.It Ev ATF_SHELL -Overrides the built-in value of -.Va atf_shell . -.It Ev ATF_WORKDIR -Overrides the built-in value of -.Va atf_workdir . -.El -.Sh SEE ALSO -.Xr atf 7 Index: vendor/NetBSD/atf/dist/dist/atf-config/atf-config.cpp =================================================================== --- vendor/NetBSD/atf/dist/dist/atf-config/atf-config.cpp (revision 240137) +++ vendor/NetBSD/atf/dist/dist/atf-config/atf-config.cpp (nonexistent) @@ -1,141 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007, 2008 The NetBSD Foundation, Inc. -// 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 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 -#include -#include -#include - -#include "atf-c++/config.hpp" - -#include "atf-c++/detail/application.hpp" -#include "atf-c++/detail/sanity.hpp" - -class atf_config : public atf::application::app { - static const char* m_description; - - bool m_tflag; - - void process_option(int, const char*); - std::string specific_args(void) const; - options_set specific_options(void) const; - - std::string format_var(const std::string&, const std::string&); - -public: - atf_config(void); - - int main(void); -}; - -const char* atf_config::m_description = - "atf-config is a tool that queries the value of several " - "installation-specific configuration values of the atf. " - "It can be used by external tools to discover where specific " - "internal atf files are installed."; - -atf_config::atf_config(void) : - app(m_description, "atf-config(1)", "atf(7)"), - m_tflag(false) -{ -} - -void -atf_config::process_option(int ch, const char* arg) -{ - switch (ch) { - case 't': - m_tflag = true; - break; - - default: - UNREACHABLE; - } -} - -std::string -atf_config::specific_args(void) - const -{ - return "[var1 [.. varN]]"; -} - -atf_config::options_set -atf_config::specific_options(void) - const -{ - using atf::application::option; - options_set opts; - opts.insert(option('t', "", "Terse output: show values only")); - return opts; -} - -std::string -atf_config::format_var(const std::string& name, const std::string& val) -{ - std::string str; - - if (m_tflag) - str = val; - else - str = name + " : " + val; - - return str; -} - -int -atf_config::main(void) -{ - if (m_argc < 1) { - std::map< std::string, std::string > cv = atf::config::get_all(); - - for (std::map< std::string, std::string >::const_iterator iter = - cv.begin(); iter != cv.end(); iter++) - std::cout << format_var((*iter).first, (*iter).second) << "\n"; - } else { - for (int i = 0; i < m_argc; i++) { - if (!atf::config::has(m_argv[i])) - throw std::runtime_error(std::string("Unknown variable `") + - m_argv[i] + "'"); - } - - for (int i = 0; i < m_argc; i++) { - std::cout << format_var(m_argv[i], atf::config::get(m_argv[i])) - << "\n"; - } - } - - return EXIT_SUCCESS; -} - -int -main(int argc, char* const* argv) -{ - return atf_config().run(argc, argv); -} Index: vendor/NetBSD/atf/dist/dist/AUTHORS =================================================================== --- vendor/NetBSD/atf/dist/dist/AUTHORS (revision 240137) +++ vendor/NetBSD/atf/dist/dist/AUTHORS (nonexistent) @@ -1,25 +0,0 @@ -Authors and contributors Automated Testing Framework -=========================================================================== - - -* Julio Merino - - Main developer. He started the work on this project when he took part in - the Google Summer of Code 2007 program as a student. - -* Martin Husemann - - Mentored this project during its development as part of the Google Summer - of Code 2007 program. - -* Lukasz Strzygowski - - Participant of the Google Summer of Code 2008 program. Mentored by The - NetBSD Foundation, he worked on the atfify NetBSD-SoC project and, as a - side-effect, he contributed to the ATF source code. He developed the - initial version of the atf-check utility and started the addition of the - ATF_REQUIRE family of macros in the C interface. - - -=========================================================================== -vim: filetype=text:textwidth=75:expandtab:shiftwidth=2:softtabstop=2 Index: vendor/NetBSD/atf/dist/libexec/atf-check/Makefile =================================================================== --- vendor/NetBSD/atf/dist/libexec/atf-check/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/libexec/atf-check/Makefile (nonexistent) @@ -1,21 +0,0 @@ -# $NetBSD: Makefile,v 1.2 2011/02/20 20:18:56 jmmv Exp $ - -.include - -SRCDIR= ${NETBSDSRCDIR}/external/bsd/atf/dist -.PATH: ${SRCDIR}/atf-sh - -BINDIR= /usr/libexec -PROG_CXX= atf-check -SRCS= atf-check.cpp -MAN= atf-check.1 - -LDADD+= -latf-c++ -latf-c -DPADD+= ${LIBATF_CXX} ${LIBATF_C} - -CPPFLAGS+= -DHAVE_CONFIG_H -CPPFLAGS+= -I${SRCDIR} - -WARNS?= 2 - -.include Index: vendor/NetBSD/atf/dist/libexec/Makefile =================================================================== --- vendor/NetBSD/atf/dist/libexec/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/libexec/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.4 2010/10/20 09:20:10 jmmv Exp $ - -SUBDIR= atf-check - -.include Index: vendor/NetBSD/atf/dist/Makefile =================================================================== --- vendor/NetBSD/atf/dist/Makefile (revision 240137) +++ vendor/NetBSD/atf/dist/Makefile (nonexistent) @@ -1,5 +0,0 @@ -# $NetBSD: Makefile,v 1.3 2010/10/20 09:20:09 jmmv Exp $ - -SUBDIR= etc lib .WAIT libexec share usr.bin tests - -.include