diff options
author | Enji Cooper <ngie@FreeBSD.org> | 2017-05-18 01:43:30 +0000 |
---|---|---|
committer | Enji Cooper <ngie@FreeBSD.org> | 2017-05-18 01:43:30 +0000 |
commit | 20d90b10b1510dd503348ec04268adcffce35591 (patch) | |
tree | 52ef16455fe9d9f2fbc29d8b269be59a71b1e188 /usr.bin/getconf | |
parent | ea642042132a319db70fb6f1f1912a345fff9e6a (diff) | |
download | src-test2-20d90b10b1510dd503348ec04268adcffce35591.tar.gz src-test2-20d90b10b1510dd503348ec04268adcffce35591.zip |
Notes
Diffstat (limited to 'usr.bin/getconf')
-rw-r--r-- | usr.bin/getconf/Makefile | 6 | ||||
-rw-r--r-- | usr.bin/getconf/getconf.h | 9 | ||||
-rw-r--r-- | usr.bin/getconf/tests/Makefile | 11 | ||||
-rw-r--r-- | usr.bin/getconf/tests/arch_type.c | 59 | ||||
-rwxr-xr-x | usr.bin/getconf/tests/getconf_test.sh | 120 |
5 files changed, 204 insertions, 1 deletions
diff --git a/usr.bin/getconf/Makefile b/usr.bin/getconf/Makefile index ca0f0c04530c..1670465a0878 100644 --- a/usr.bin/getconf/Makefile +++ b/usr.bin/getconf/Makefile @@ -1,5 +1,7 @@ # $FreeBSD$ +.include <src.opts.mk> + PROG= getconf SRCS= confstr.c getconf.c limits.c pathconf.c progenv.c sysconf.c @@ -35,4 +37,8 @@ conflicting.names: confstr.names limits.names sysconf.names unique.names: conflicting.names LC_ALL=C sort -u ${.ALLSRC} >${.TARGET} +.if ${MK_TESTS} != "no" +SUBDIR+= tests +.endif + .include <bsd.prog.mk> diff --git a/usr.bin/getconf/getconf.h b/usr.bin/getconf/getconf.h index 266a0ff3b051..53cf783cc40d 100644 --- a/usr.bin/getconf/getconf.h +++ b/usr.bin/getconf/getconf.h @@ -36,8 +36,15 @@ typedef long long intmax_t; #include <inttypes.h> #endif +typedef enum { + PROG_ENV_VALID_NO_ALT_PATH = -1, + PROG_ENV_INVALID = 0, + PROG_ENV_VALID_HAS_ALT_PATH = 1, + PROG_ENV_UNKNOWN = 2, +} prog_env_validity; + int find_confstr(const char *name, int *key); int find_limit(const char *name, intmax_t *value); int find_pathconf(const char *name, int *key); -int find_progenv(const char *name, const char **alt_path); +prog_env_validity find_progenv(const char *name, const char **alt_path); int find_sysconf(const char *name, int *key); diff --git a/usr.bin/getconf/tests/Makefile b/usr.bin/getconf/tests/Makefile new file mode 100644 index 000000000000..3b2fdafc7bd0 --- /dev/null +++ b/usr.bin/getconf/tests/Makefile @@ -0,0 +1,11 @@ +# $FreeBSD$ + +ATF_TESTS_SH+= getconf_test + +PROGS+= arch_type + +BINDIR= ${TESTSDIR} + +WARNS?= 6 + +.include <bsd.test.mk> diff --git a/usr.bin/getconf/tests/arch_type.c b/usr.bin/getconf/tests/arch_type.c new file mode 100644 index 000000000000..f443f0a0413a --- /dev/null +++ b/usr.bin/getconf/tests/arch_type.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2017 Ngie Cooper <ngie@FreeBSD.org> + * 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 <sys/cdefs.h> +__RCSID("$FreeBSD$"); + +#include <assert.h> +#include <stdbool.h> +#include <stdlib.h> +#include <stdio.h> + +int +main(void) +{ + bool known_arch_type; + + known_arch_type = false; +#ifdef __LP64__ + printf("LP64\n"); + known_arch_type = true; +#endif +#ifdef __LP32__ + printf("LP32\n"); + known_arch_type = true; +#endif +#ifdef __ILP32__ + printf("ILP32\n"); + known_arch_type = true; +#endif + + if (known_arch_type) + exit(0); + + fprintf(stderr, "unknown architecture type detected\n"); + assert(0); +} diff --git a/usr.bin/getconf/tests/getconf_test.sh b/usr.bin/getconf/tests/getconf_test.sh new file mode 100755 index 000000000000..c5b7fddb1b02 --- /dev/null +++ b/usr.bin/getconf/tests/getconf_test.sh @@ -0,0 +1,120 @@ +# +# Copyright (c) 2017 Dell EMC +# 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 AUTHOR 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 AUTHOR 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. +# +# $FreeBSD$ + +POSITIVE_EXP_EXPR_RE='match:[1-9][0-9]*' + +POSIX_CONSTANTS="ARG_MAX PAGESIZE" +POSIX_PATH_CONSTANTS="NAME_MAX PATH_MAX" +SUPPORTED_32BIT_PROGRAM_ENVS="POSIX_V6_ILP32_OFFBIG" +SUPPORTED_64BIT_PROGRAM_ENVS="POSIX_V6_LP64_OFF64" +UNAVAILABLE_PROGRAM_ENVS="I_AM_BOGUS" +UNSUPPORTED_32BIT_PROGRAM_ENVS="POSIX_V6_LP64_OFF64" +UNSUPPORTED_64BIT_PROGRAM_ENVS="POSIX_V6_ILP32_OFFBIG" + +XOPEN_CONSTANTS= + +# XXX: hardcoded sysexits +EX_USAGE=64 +EX_UNAVAILABLE=69 + +set_program_environments() +{ + atf_check -o save:arch_type.out $(atf_get_srcdir)/arch_type + arch_type=$(cat arch_type.out) + case "$arch_type" in + ILP32|LP32) + SUPPORTED_PROGRAM_ENVS="$SUPPORTED_PROGRAM_ENVS $SUPPORTED_32BIT_PROGRAM_ENVS" + UNSUPPORTED_PROGRAM_ENVS="$UNSUPPORTED_PROGRAM_ENVS $UNSUPPORTED_32BIT_PROGRAM_ENVS" + ;; + LP64) + SUPPORTED_PROGRAM_ENVS="$SUPPORTED_PROGRAM_ENVS $SUPPORTED_64BIT_PROGRAM_ENVS" + UNSUPPORTED_PROGRAM_ENVS="$UNSUPPORTED_PROGRAM_ENVS $UNSUPPORTED_64BIT_PROGRAM_ENVS" + ;; + *) + atf_fail "arch_type output unexpected: $arch_type" + ;; + esac +} + +atf_test_case no_programming_environment +no_programming_environment_head() +{ + atf_set "descr" "Test some POSIX constants as a positive functional test" +} + +no_programming_environment_body() +{ + for var in $POSIX_CONSTANTS; do + atf_check -o "$POSITIVE_EXP_EXPR_RE" getconf $var + done + for var in $POSIX_PATH_CONSTANTS; do + atf_check -o "$POSITIVE_EXP_EXPR_RE" getconf $var . + done +} + +atf_test_case programming_environment +programming_environment_head() +{ + atf_set "descr" "Test some constants with specific programming environments" +} + +programming_environment_body() +{ + set_program_environments + + for prog_env in ${SUPPORTED_PROGRAM_ENVS}; do + for var in $POSIX_CONSTANTS; do + atf_check -o "$POSITIVE_EXP_EXPR_RE" \ + getconf -v $prog_env $var + done + done +} + +atf_test_case programming_environment_unsupported +programming_environment_unsupported_head() +{ + atf_set "descr" "Test for unsupported environments" +} + +programming_environment_unsupported_body() +{ + set_program_environments + + for prog_env in ${UNSUPPORTED_PROGRAM_ENVS}; do + for var in $POSIX_CONSTANTS; do + atf_check -e not-empty -s exit:$EX_UNAVAILABLE \ + getconf -v $prog_env $var + done + done +} + +atf_init_test_cases() +{ + atf_add_test_case no_programming_environment + atf_add_test_case programming_environment + atf_add_test_case programming_environment_unsupported +} |