Regression tests for the libnv library.

Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Pawel Jakub Dawidek 2013-11-12 20:31:16 +00:00
parent 903093ecec
commit 3baf1859b4
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=258070
7 changed files with 1441 additions and 0 deletions

View File

@ -0,0 +1,35 @@
# $FreeBSD$
TESTS= nvlist_add
TESTS+= nvlist_exists
TESTS+= nvlist_free
TESTS+= nvlist_get
TESTS+= nvlist_move
TESTS+= nvlist_send_recv
CFLAGS= -O2 -pipe -fstack-protector
CFLAGS+=-Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter
CFLAGS+=-Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type
CFLAGS+=-Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter
CFLAGS+=-Wcast-align -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls
CFLAGS+=-Wold-style-definition -Wno-pointer-sign -Wextra
LDFLAGS+=-lnv
all: ${TESTS} ${TESTS:=.t}
.for TEST in ${TESTS}
${TEST}: ${TEST}.c
${CC} ${CFLAGS} ${LDFLAGS} ${@}.c -o $@
${TEST}.t: ${TEST}
@printf "#!/bin/sh\n\n%s/%s\n" ${.CURDIR} ${@:.t=} > $@
.endfor
test: all
@prove -r ${.CURDIR}
clean:
rm -f ${TESTS} ${TESTS:=.t}

View File

@ -0,0 +1,196 @@
/*-
* Copyright (c) 2013 The FreeBSD Foundation
* All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
*
* 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 AUTHORS 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 AUTHORS 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$
*/
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <nv.h>
static int ntest = 1;
#define CHECK(expr) do { \
if ((expr)) \
printf("ok # %d %s:%u\n", ntest, __FILE__, __LINE__); \
else \
printf("not ok # %d %s:%u\n", ntest, __FILE__, __LINE__);\
ntest++; \
} while (0)
int
main(void)
{
const nvlist_t *cnvl;
nvlist_t *nvl;
printf("1..94\n");
nvl = nvlist_create(0);
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
nvlist_add_null(nvl, "nvlist/null");
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool/true"));
nvlist_add_bool(nvl, "nvlist/bool/true", true);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_bool(nvl, "nvlist/bool/true"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool/false"));
nvlist_add_bool(nvl, "nvlist/bool/false", false);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_bool(nvl, "nvlist/bool/false"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number/0"));
nvlist_add_number(nvl, "nvlist/number/0", 0);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_number(nvl, "nvlist/number/0"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number/1"));
nvlist_add_number(nvl, "nvlist/number/1", 1);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_number(nvl, "nvlist/number/1"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number/-1"));
nvlist_add_number(nvl, "nvlist/number/-1", -1);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_number(nvl, "nvlist/number/-1"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number/UINT64_MAX"));
nvlist_add_number(nvl, "nvlist/number/UINT64_MAX", UINT64_MAX);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_number(nvl, "nvlist/number/UINT64_MAX"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number/INT64_MIN"));
nvlist_add_number(nvl, "nvlist/number/INT64_MIN", INT64_MIN);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_number(nvl, "nvlist/number/INT64_MIN"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number/INT64_MAX"));
nvlist_add_number(nvl, "nvlist/number/INT64_MAX", INT64_MAX);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_number(nvl, "nvlist/number/INT64_MAX"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string/"));
nvlist_add_string(nvl, "nvlist/string/", "");
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_string(nvl, "nvlist/string/"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string/x"));
nvlist_add_string(nvl, "nvlist/string/x", "x");
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_string(nvl, "nvlist/string/x"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz"));
nvlist_add_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz");
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz"));
CHECK(!nvlist_exists_string(nvl, "nvlist/stringf/"));
nvlist_add_stringf(nvl, "nvlist/stringf/", "%s", "");
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_string(nvl, "nvlist/stringf/"));
CHECK(!nvlist_exists_string(nvl, "nvlist/stringf/x"));
nvlist_add_stringf(nvl, "nvlist/stringf/x", "%s", "x");
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_string(nvl, "nvlist/stringf/x"));
CHECK(!nvlist_exists_string(nvl, "nvlist/stringf/666Xabc"));
nvlist_add_stringf(nvl, "nvlist/stringf/666Xabc", "%d%c%s", 666, 'X', "abc");
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_string(nvl, "nvlist/stringf/666Xabc"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO"));
nvlist_add_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO", STDERR_FILENO);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/binary/x"));
nvlist_add_binary(nvl, "nvlist/binary/x", "x", 1);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_binary(nvl, "nvlist/binary/x"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz"));
nvlist_add_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz"));
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_null(nvl, "nvlist/null"));
CHECK(nvlist_exists_bool(nvl, "nvlist/bool/true"));
CHECK(nvlist_exists_bool(nvl, "nvlist/bool/false"));
CHECK(nvlist_exists_number(nvl, "nvlist/number/0"));
CHECK(nvlist_exists_number(nvl, "nvlist/number/1"));
CHECK(nvlist_exists_number(nvl, "nvlist/number/-1"));
CHECK(nvlist_exists_number(nvl, "nvlist/number/UINT64_MAX"));
CHECK(nvlist_exists_number(nvl, "nvlist/number/INT64_MIN"));
CHECK(nvlist_exists_number(nvl, "nvlist/number/INT64_MAX"));
CHECK(nvlist_exists_string(nvl, "nvlist/string/"));
CHECK(nvlist_exists_string(nvl, "nvlist/string/x"));
CHECK(nvlist_exists_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz"));
CHECK(nvlist_exists_string(nvl, "nvlist/stringf/"));
CHECK(nvlist_exists_string(nvl, "nvlist/stringf/x"));
CHECK(nvlist_exists_string(nvl, "nvlist/stringf/666Xabc"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary/x"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
cnvl = nvlist_get_nvlist(nvl, "nvlist/nvlist");
CHECK(nvlist_exists_null(cnvl, "nvlist/null"));
CHECK(nvlist_exists_bool(cnvl, "nvlist/bool/true"));
CHECK(nvlist_exists_bool(cnvl, "nvlist/bool/false"));
CHECK(nvlist_exists_number(cnvl, "nvlist/number/0"));
CHECK(nvlist_exists_number(cnvl, "nvlist/number/1"));
CHECK(nvlist_exists_number(cnvl, "nvlist/number/-1"));
CHECK(nvlist_exists_number(cnvl, "nvlist/number/UINT64_MAX"));
CHECK(nvlist_exists_number(cnvl, "nvlist/number/INT64_MIN"));
CHECK(nvlist_exists_number(cnvl, "nvlist/number/INT64_MAX"));
CHECK(nvlist_exists_string(cnvl, "nvlist/string/"));
CHECK(nvlist_exists_string(cnvl, "nvlist/string/x"));
CHECK(nvlist_exists_string(cnvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz"));
CHECK(nvlist_exists_string(cnvl, "nvlist/stringf/"));
CHECK(nvlist_exists_string(cnvl, "nvlist/stringf/x"));
CHECK(nvlist_exists_string(cnvl, "nvlist/stringf/666Xabc"));
CHECK(nvlist_exists_descriptor(cnvl, "nvlist/descriptor/STDERR_FILENO"));
CHECK(nvlist_exists_binary(cnvl, "nvlist/binary/x"));
CHECK(nvlist_exists_binary(cnvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz"));
nvlist_destroy(nvl);
return (0);
}

View File

@ -0,0 +1,321 @@
/*-
* Copyright (c) 2013 The FreeBSD Foundation
* All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
*
* 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 AUTHORS 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 AUTHORS 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$
*/
#include <stdio.h>
#include <unistd.h>
#include <nv.h>
static int ntest = 1;
#define CHECK(expr) do { \
if ((expr)) \
printf("ok # %d %s:%u\n", ntest, __FILE__, __LINE__); \
else \
printf("not ok # %d %s:%u\n", ntest, __FILE__, __LINE__);\
ntest++; \
} while (0)
int
main(void)
{
nvlist_t *nvl;
printf("1..232\n");
nvl = nvlist_create(0);
CHECK(!nvlist_exists(nvl, "nvlist/null"));
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/null"));
CHECK(!nvlist_exists_number(nvl, "nvlist/null"));
CHECK(!nvlist_exists_string(nvl, "nvlist/null"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/null"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/null"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/null"));
nvlist_add_null(nvl, "nvlist/null");
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists(nvl, "nvlist/null"));
CHECK(nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/null"));
CHECK(!nvlist_exists_number(nvl, "nvlist/null"));
CHECK(!nvlist_exists_string(nvl, "nvlist/null"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/null"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/null"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/null"));
CHECK(!nvlist_exists(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_null(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_string(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/bool"));
nvlist_add_bool(nvl, "nvlist/bool", true);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_null(nvl, "nvlist/bool"));
CHECK(nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_string(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/bool"));
CHECK(!nvlist_exists(nvl, "nvlist/number"));
CHECK(!nvlist_exists_null(nvl, "nvlist/number"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/number"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/number"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/number"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/number"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/number"));
nvlist_add_number(nvl, "nvlist/number", 0);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists(nvl, "nvlist/number"));
CHECK(!nvlist_exists_null(nvl, "nvlist/number"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/number"));
CHECK(nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/number"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/number"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/number"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/number"));
CHECK(!nvlist_exists(nvl, "nvlist/string"));
CHECK(!nvlist_exists_null(nvl, "nvlist/string"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/string"));
CHECK(!nvlist_exists_number(nvl, "nvlist/string"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/string"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/string"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/string"));
nvlist_add_string(nvl, "nvlist/string", "test");
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists(nvl, "nvlist/string"));
CHECK(!nvlist_exists_null(nvl, "nvlist/string"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/string"));
CHECK(!nvlist_exists_number(nvl, "nvlist/string"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/string"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/string"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/string"));
CHECK(!nvlist_exists(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_null(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_number(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_string(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/nvlist"));
nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_null(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_number(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_string(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_null(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_number(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_string(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/descriptor"));
nvlist_add_descriptor(nvl, "nvlist/descriptor", STDERR_FILENO);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_null(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_number(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_string(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_null(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_number(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_string(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_add_binary(nvl, "nvlist/binary", "test", 4);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_null(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_number(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_string(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/binary"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
CHECK(nvlist_exists(nvl, "nvlist/null"));
CHECK(nvlist_exists(nvl, "nvlist/bool"));
CHECK(nvlist_exists(nvl, "nvlist/number"));
CHECK(nvlist_exists(nvl, "nvlist/string"));
CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists(nvl, "nvlist/binary"));
CHECK(nvlist_exists_null(nvl, "nvlist/null"));
CHECK(nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_null(nvl, "nvlist/null");
CHECK(!nvlist_exists(nvl, "nvlist/null"));
CHECK(nvlist_exists(nvl, "nvlist/bool"));
CHECK(nvlist_exists(nvl, "nvlist/number"));
CHECK(nvlist_exists(nvl, "nvlist/string"));
CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_bool(nvl, "nvlist/bool");
CHECK(!nvlist_exists(nvl, "nvlist/null"));
CHECK(!nvlist_exists(nvl, "nvlist/bool"));
CHECK(nvlist_exists(nvl, "nvlist/number"));
CHECK(nvlist_exists(nvl, "nvlist/string"));
CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_number(nvl, "nvlist/number");
CHECK(!nvlist_exists(nvl, "nvlist/null"));
CHECK(!nvlist_exists(nvl, "nvlist/bool"));
CHECK(!nvlist_exists(nvl, "nvlist/number"));
CHECK(nvlist_exists(nvl, "nvlist/string"));
CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_string(nvl, "nvlist/string");
CHECK(!nvlist_exists(nvl, "nvlist/null"));
CHECK(!nvlist_exists(nvl, "nvlist/bool"));
CHECK(!nvlist_exists(nvl, "nvlist/number"));
CHECK(!nvlist_exists(nvl, "nvlist/string"));
CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_nvlist(nvl, "nvlist/nvlist");
CHECK(!nvlist_exists(nvl, "nvlist/null"));
CHECK(!nvlist_exists(nvl, "nvlist/bool"));
CHECK(!nvlist_exists(nvl, "nvlist/number"));
CHECK(!nvlist_exists(nvl, "nvlist/string"));
CHECK(!nvlist_exists(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_descriptor(nvl, "nvlist/descriptor");
CHECK(!nvlist_exists(nvl, "nvlist/null"));
CHECK(!nvlist_exists(nvl, "nvlist/bool"));
CHECK(!nvlist_exists(nvl, "nvlist/number"));
CHECK(!nvlist_exists(nvl, "nvlist/string"));
CHECK(!nvlist_exists(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_binary(nvl, "nvlist/binary");
CHECK(!nvlist_exists(nvl, "nvlist/null"));
CHECK(!nvlist_exists(nvl, "nvlist/bool"));
CHECK(!nvlist_exists(nvl, "nvlist/number"));
CHECK(!nvlist_exists(nvl, "nvlist/string"));
CHECK(!nvlist_exists(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists(nvl, "nvlist/binary"));
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/binary"));
CHECK(nvlist_empty(nvl));
nvlist_destroy(nvl);
return (0);
}

View File

@ -0,0 +1,221 @@
/*-
* Copyright (c) 2013 The FreeBSD Foundation
* All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
*
* 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 AUTHORS 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 AUTHORS 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$
*/
#include <stdio.h>
#include <unistd.h>
#include <nv.h>
static int ntest = 1;
#define CHECK(expr) do { \
if ((expr)) \
printf("ok # %d %s:%u\n", ntest, __FILE__, __LINE__); \
else \
printf("not ok # %d %s:%u\n", ntest, __FILE__, __LINE__);\
ntest++; \
} while (0)
int
main(void)
{
nvlist_t *nvl;
printf("1..114\n");
nvl = nvlist_create(0);
nvlist_add_null(nvl, "nvlist/null");
nvlist_add_bool(nvl, "nvlist/bool", true);
nvlist_add_number(nvl, "nvlist/number", 0);
nvlist_add_string(nvl, "nvlist/string", "test");
nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl);
nvlist_add_descriptor(nvl, "nvlist/descriptor", STDERR_FILENO);
nvlist_add_binary(nvl, "nvlist/binary", "test", 4);
CHECK(nvlist_exists_null(nvl, "nvlist/null"));
CHECK(nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_null(nvl, "nvlist/null");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_bool(nvl, "nvlist/bool");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_number(nvl, "nvlist/number");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_string(nvl, "nvlist/string");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_nvlist(nvl, "nvlist/nvlist");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_descriptor(nvl, "nvlist/descriptor");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free_binary(nvl, "nvlist/binary");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/binary"));
CHECK(nvlist_empty(nvl));
nvlist_add_null(nvl, "nvlist/null");
nvlist_add_bool(nvl, "nvlist/bool", true);
nvlist_add_number(nvl, "nvlist/number", 0);
nvlist_add_string(nvl, "nvlist/string", "test");
nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl);
nvlist_add_descriptor(nvl, "nvlist/descriptor", STDERR_FILENO);
nvlist_add_binary(nvl, "nvlist/binary", "test", 4);
CHECK(nvlist_exists_null(nvl, "nvlist/null"));
CHECK(nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free(nvl, "nvlist/null");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free(nvl, "nvlist/bool");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free(nvl, "nvlist/number");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free(nvl, "nvlist/string");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free(nvl, "nvlist/nvlist");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free(nvl, "nvlist/descriptor");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
nvlist_free(nvl, "nvlist/binary");
CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/binary"));
CHECK(nvlist_empty(nvl));
nvlist_destroy(nvl);
return (0);
}

View File

@ -0,0 +1,182 @@
/*-
* Copyright (c) 2013 The FreeBSD Foundation
* All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
*
* 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 AUTHORS 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 AUTHORS 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$
*/
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <nv.h>
static int ntest = 1;
#define CHECK(expr) do { \
if ((expr)) \
printf("ok # %d %s:%u\n", ntest, __FILE__, __LINE__); \
else \
printf("not ok # %d %s:%u\n", ntest, __FILE__, __LINE__);\
ntest++; \
} while (0)
#define fd_is_valid(fd) (fcntl((fd), F_GETFL) != -1 || errno != EBADF)
int
main(void)
{
const nvlist_t *cnvl;
nvlist_t *nvl;
size_t size;
printf("1..83\n");
nvl = nvlist_create(0);
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool/true"));
nvlist_add_bool(nvl, "nvlist/bool/true", true);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_get_bool(nvl, "nvlist/bool/true") == true);
CHECK(!nvlist_exists_bool(nvl, "nvlist/bool/false"));
nvlist_add_bool(nvl, "nvlist/bool/false", false);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_get_bool(nvl, "nvlist/bool/false") == false);
CHECK(!nvlist_exists_number(nvl, "nvlist/number/0"));
nvlist_add_number(nvl, "nvlist/number/0", 0);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_get_number(nvl, "nvlist/number/0") == 0);
CHECK(!nvlist_exists_number(nvl, "nvlist/number/1"));
nvlist_add_number(nvl, "nvlist/number/1", 1);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_get_number(nvl, "nvlist/number/1") == 1);
CHECK(!nvlist_exists_number(nvl, "nvlist/number/-1"));
nvlist_add_number(nvl, "nvlist/number/-1", -1);
CHECK(nvlist_error(nvl) == 0);
CHECK((int)nvlist_get_number(nvl, "nvlist/number/-1") == -1);
CHECK(!nvlist_exists_number(nvl, "nvlist/number/UINT64_MAX"));
nvlist_add_number(nvl, "nvlist/number/UINT64_MAX", UINT64_MAX);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_get_number(nvl, "nvlist/number/UINT64_MAX") == UINT64_MAX);
CHECK(!nvlist_exists_number(nvl, "nvlist/number/INT64_MIN"));
nvlist_add_number(nvl, "nvlist/number/INT64_MIN", INT64_MIN);
CHECK(nvlist_error(nvl) == 0);
CHECK((int64_t)nvlist_get_number(nvl, "nvlist/number/INT64_MIN") == INT64_MIN);
CHECK(!nvlist_exists_number(nvl, "nvlist/number/INT64_MAX"));
nvlist_add_number(nvl, "nvlist/number/INT64_MAX", INT64_MAX);
CHECK(nvlist_error(nvl) == 0);
CHECK((int64_t)nvlist_get_number(nvl, "nvlist/number/INT64_MAX") == INT64_MAX);
CHECK(!nvlist_exists_string(nvl, "nvlist/string/"));
nvlist_add_string(nvl, "nvlist/string/", "");
CHECK(nvlist_error(nvl) == 0);
CHECK(strcmp(nvlist_get_string(nvl, "nvlist/string/"), "") == 0);
CHECK(!nvlist_exists_string(nvl, "nvlist/string/x"));
nvlist_add_string(nvl, "nvlist/string/x", "x");
CHECK(nvlist_error(nvl) == 0);
CHECK(strcmp(nvlist_get_string(nvl, "nvlist/string/x"), "x") == 0);
CHECK(!nvlist_exists_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz"));
nvlist_add_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz");
CHECK(nvlist_error(nvl) == 0);
CHECK(strcmp(nvlist_get_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz"), "abcdefghijklmnopqrstuvwxyz") == 0);
CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO"));
nvlist_add_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO", STDERR_FILENO);
CHECK(nvlist_error(nvl) == 0);
CHECK(fd_is_valid(nvlist_get_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO")));
CHECK(!nvlist_exists_binary(nvl, "nvlist/binary/x"));
nvlist_add_binary(nvl, "nvlist/binary/x", "x", 1);
CHECK(nvlist_error(nvl) == 0);
CHECK(memcmp(nvlist_get_binary(nvl, "nvlist/binary/x", NULL), "x", 1) == 0);
CHECK(memcmp(nvlist_get_binary(nvl, "nvlist/binary/x", &size), "x", 1) == 0);
CHECK(size == 1);
CHECK(!nvlist_exists_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz"));
nvlist_add_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz"));
CHECK(nvlist_error(nvl) == 0);
CHECK(memcmp(nvlist_get_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz", NULL), "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")) == 0);
CHECK(memcmp(nvlist_get_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz", &size), "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")) == 0);
CHECK(size == sizeof("abcdefghijklmnopqrstuvwxyz"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl);
CHECK(nvlist_error(nvl) == 0);
cnvl = nvlist_get_nvlist(nvl, "nvlist/nvlist");
CHECK(nvlist_get_bool(cnvl, "nvlist/bool/true") == true);
CHECK(nvlist_get_bool(cnvl, "nvlist/bool/false") == false);
CHECK(nvlist_get_number(cnvl, "nvlist/number/0") == 0);
CHECK(nvlist_get_number(cnvl, "nvlist/number/1") == 1);
CHECK((int)nvlist_get_number(cnvl, "nvlist/number/-1") == -1);
CHECK(nvlist_get_number(cnvl, "nvlist/number/UINT64_MAX") == UINT64_MAX);
CHECK((int64_t)nvlist_get_number(cnvl, "nvlist/number/INT64_MIN") == INT64_MIN);
CHECK((int64_t)nvlist_get_number(cnvl, "nvlist/number/INT64_MAX") == INT64_MAX);
CHECK(strcmp(nvlist_get_string(cnvl, "nvlist/string/"), "") == 0);
CHECK(strcmp(nvlist_get_string(cnvl, "nvlist/string/x"), "x") == 0);
CHECK(strcmp(nvlist_get_string(cnvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz"), "abcdefghijklmnopqrstuvwxyz") == 0);
/* TODO */
CHECK(memcmp(nvlist_get_binary(cnvl, "nvlist/binary/x", NULL), "x", 1) == 0);
CHECK(memcmp(nvlist_get_binary(cnvl, "nvlist/binary/x", &size), "x", 1) == 0);
CHECK(size == 1);
CHECK(memcmp(nvlist_get_binary(cnvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz", NULL), "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")) == 0);
CHECK(memcmp(nvlist_get_binary(cnvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz", &size), "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")) == 0);
CHECK(size == sizeof("abcdefghijklmnopqrstuvwxyz"));
CHECK(nvlist_get_bool(nvl, "nvlist/bool/true") == true);
CHECK(nvlist_get_bool(nvl, "nvlist/bool/false") == false);
CHECK(nvlist_get_number(nvl, "nvlist/number/0") == 0);
CHECK(nvlist_get_number(nvl, "nvlist/number/1") == 1);
CHECK((int)nvlist_get_number(nvl, "nvlist/number/-1") == -1);
CHECK(nvlist_get_number(nvl, "nvlist/number/UINT64_MAX") == UINT64_MAX);
CHECK((int64_t)nvlist_get_number(nvl, "nvlist/number/INT64_MIN") == INT64_MIN);
CHECK((int64_t)nvlist_get_number(nvl, "nvlist/number/INT64_MAX") == INT64_MAX);
CHECK(strcmp(nvlist_get_string(nvl, "nvlist/string/"), "") == 0);
CHECK(strcmp(nvlist_get_string(nvl, "nvlist/string/x"), "x") == 0);
CHECK(strcmp(nvlist_get_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz"), "abcdefghijklmnopqrstuvwxyz") == 0);
CHECK(fd_is_valid(nvlist_get_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO")));
CHECK(memcmp(nvlist_get_binary(nvl, "nvlist/binary/x", NULL), "x", 1) == 0);
CHECK(memcmp(nvlist_get_binary(nvl, "nvlist/binary/x", &size), "x", 1) == 0);
CHECK(size == 1);
CHECK(memcmp(nvlist_get_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz", NULL), "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")) == 0);
CHECK(memcmp(nvlist_get_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz", &size), "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")) == 0);
CHECK(size == sizeof("abcdefghijklmnopqrstuvwxyz"));
nvlist_destroy(nvl);
return (0);
}

View File

@ -0,0 +1,161 @@
/*-
* Copyright (c) 2013 The FreeBSD Foundation
* All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
*
* 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 AUTHORS 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 AUTHORS 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$
*/
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <nv.h>
static int ntest = 1;
#define CHECK(expr) do { \
if ((expr)) \
printf("ok # %d %s:%u\n", ntest, __FILE__, __LINE__); \
else \
printf("not ok # %d %s:%u\n", ntest, __FILE__, __LINE__);\
ntest++; \
} while (0)
int
main(void)
{
const nvlist_t *cnvl;
nvlist_t *nvl;
void *ptr;
size_t size;
int fd;
printf("1..52\n");
nvl = nvlist_create(0);
CHECK(!nvlist_exists_string(nvl, "nvlist/string/"));
ptr = strdup("");
CHECK(ptr != NULL);
nvlist_move_string(nvl, "nvlist/string/", ptr);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_string(nvl, "nvlist/string/"));
CHECK(ptr == nvlist_get_string(nvl, "nvlist/string/"));
CHECK(!nvlist_exists_string(nvl, "nvlist/string/x"));
ptr = strdup("x");
CHECK(ptr != NULL);
nvlist_move_string(nvl, "nvlist/string/x", ptr);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_string(nvl, "nvlist/string/x"));
CHECK(ptr == nvlist_get_string(nvl, "nvlist/string/x"));
CHECK(!nvlist_exists_string(nvl,
"nvlist/string/abcdefghijklmnopqrstuvwxyz"));
ptr = strdup("abcdefghijklmnopqrstuvwxyz");
CHECK(ptr != NULL);
nvlist_move_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz",
ptr);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_string(nvl,
"nvlist/string/abcdefghijklmnopqrstuvwxyz"));
CHECK(ptr ==
nvlist_get_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz"));
CHECK(!nvlist_exists_descriptor(nvl,
"nvlist/descriptor/STDERR_FILENO"));
fd = dup(STDERR_FILENO);
CHECK(fd >= 0);
nvlist_move_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO", fd);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO"));
CHECK(fd ==
nvlist_get_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO"));
CHECK(!nvlist_exists_binary(nvl, "nvlist/binary/x"));
ptr = malloc(1);
CHECK(ptr != NULL);
memcpy(ptr, "x", 1);
nvlist_move_binary(nvl, "nvlist/binary/x", ptr, 1);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_binary(nvl, "nvlist/binary/x"));
CHECK(ptr == nvlist_get_binary(nvl, "nvlist/binary/x", NULL));
CHECK(ptr == nvlist_get_binary(nvl, "nvlist/binary/x", &size));
CHECK(size == 1);
CHECK(!nvlist_exists_binary(nvl,
"nvlist/binary/abcdefghijklmnopqrstuvwxyz"));
ptr = malloc(sizeof("abcdefghijklmnopqrstuvwxyz"));
CHECK(ptr != NULL);
memcpy(ptr, "abcdefghijklmnopqrstuvwxyz",
sizeof("abcdefghijklmnopqrstuvwxyz"));
nvlist_move_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz",
ptr, sizeof("abcdefghijklmnopqrstuvwxyz"));
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_binary(nvl,
"nvlist/binary/abcdefghijklmnopqrstuvwxyz"));
CHECK(ptr == nvlist_get_binary(nvl,
"nvlist/binary/abcdefghijklmnopqrstuvwxyz", NULL));
CHECK(ptr == nvlist_get_binary(nvl,
"nvlist/binary/abcdefghijklmnopqrstuvwxyz", &size));
CHECK(size == sizeof("abcdefghijklmnopqrstuvwxyz"));
CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
ptr = nvlist_clone(nvl);
CHECK(ptr != NULL);
nvlist_move_nvlist(nvl, "nvlist/nvlist", ptr);
CHECK(nvlist_error(nvl) == 0);
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
CHECK(ptr == nvlist_get_nvlist(nvl, "nvlist/nvlist"));
CHECK(nvlist_exists_string(nvl, "nvlist/string/"));
CHECK(nvlist_exists_string(nvl, "nvlist/string/x"));
CHECK(nvlist_exists_string(nvl,
"nvlist/string/abcdefghijklmnopqrstuvwxyz"));
CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO"));
CHECK(nvlist_exists_binary(nvl, "nvlist/binary/x"));
CHECK(nvlist_exists_binary(nvl,
"nvlist/binary/abcdefghijklmnopqrstuvwxyz"));
CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
cnvl = nvlist_get_nvlist(nvl, "nvlist/nvlist");
CHECK(nvlist_exists_string(cnvl, "nvlist/string/"));
CHECK(nvlist_exists_string(cnvl, "nvlist/string/x"));
CHECK(nvlist_exists_string(cnvl,
"nvlist/string/abcdefghijklmnopqrstuvwxyz"));
CHECK(nvlist_exists_descriptor(cnvl,
"nvlist/descriptor/STDERR_FILENO"));
CHECK(nvlist_exists_binary(cnvl, "nvlist/binary/x"));
CHECK(nvlist_exists_binary(cnvl,
"nvlist/binary/abcdefghijklmnopqrstuvwxyz"));
nvlist_destroy(nvl);
return (0);
}

View File

@ -0,0 +1,325 @@
/*-
* Copyright (c) 2013 The FreeBSD Foundation
* All rights reserved.
*
* This software was developed by Pawel Jakub Dawidek under sponsorship from
* the FreeBSD Foundation.
*
* 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 AUTHORS 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 AUTHORS 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$
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <nv.h>
static int ntest = 1;
#define CHECK(expr) do { \
if ((expr)) \
printf("ok # %d %s:%u\n", ntest, __FILE__, __LINE__); \
else \
printf("not ok # %d %s:%u\n", ntest, __FILE__, __LINE__);\
ntest++; \
} while (0)
#define fd_is_valid(fd) (fcntl((fd), F_GETFL) != -1 || errno != EBADF)
static void
child(int sock)
{
nvlist_t *nvl;
nvl = nvlist_create(0);
nvlist_add_bool(nvl, "nvlist/bool/true", true);
nvlist_add_bool(nvl, "nvlist/bool/false", false);
nvlist_add_number(nvl, "nvlist/number/0", 0);
nvlist_add_number(nvl, "nvlist/number/1", 1);
nvlist_add_number(nvl, "nvlist/number/-1", -1);
nvlist_add_number(nvl, "nvlist/number/UINT64_MAX", UINT64_MAX);
nvlist_add_number(nvl, "nvlist/number/INT64_MIN", INT64_MIN);
nvlist_add_number(nvl, "nvlist/number/INT64_MAX", INT64_MAX);
nvlist_add_string(nvl, "nvlist/string/", "");
nvlist_add_string(nvl, "nvlist/string/x", "x");
nvlist_add_string(nvl, "nvlist/string/abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz");
nvlist_add_descriptor(nvl, "nvlist/descriptor/STDERR_FILENO", STDERR_FILENO);
nvlist_add_binary(nvl, "nvlist/binary/x", "x", 1);
nvlist_add_binary(nvl, "nvlist/binary/abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz"));
nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl);
nvlist_send(sock, nvl);
nvlist_destroy(nvl);
}
static void
parent(int sock)
{
nvlist_t *nvl;
const nvlist_t *cnvl;
const char *name, *cname;
void *cookie, *ccookie;
int type, ctype;
size_t size;
nvl = nvlist_recv(sock);
CHECK(nvlist_error(nvl) == 0);
if (nvlist_error(nvl) != 0)
err(1, "nvlist_recv() failed");
cookie = NULL;
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_BOOL);
CHECK(strcmp(name, "nvlist/bool/true") == 0);
CHECK(nvlist_get_bool(nvl, name) == true);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_BOOL);
CHECK(strcmp(name, "nvlist/bool/false") == 0);
CHECK(nvlist_get_bool(nvl, name) == false);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_NUMBER);
CHECK(strcmp(name, "nvlist/number/0") == 0);
CHECK(nvlist_get_number(nvl, name) == 0);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_NUMBER);
CHECK(strcmp(name, "nvlist/number/1") == 0);
CHECK(nvlist_get_number(nvl, name) == 1);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_NUMBER);
CHECK(strcmp(name, "nvlist/number/-1") == 0);
CHECK((int)nvlist_get_number(nvl, name) == -1);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_NUMBER);
CHECK(strcmp(name, "nvlist/number/UINT64_MAX") == 0);
CHECK(nvlist_get_number(nvl, name) == UINT64_MAX);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_NUMBER);
CHECK(strcmp(name, "nvlist/number/INT64_MIN") == 0);
CHECK((int64_t)nvlist_get_number(nvl, name) == INT64_MIN);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_NUMBER);
CHECK(strcmp(name, "nvlist/number/INT64_MAX") == 0);
CHECK((int64_t)nvlist_get_number(nvl, name) == INT64_MAX);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_STRING);
CHECK(strcmp(name, "nvlist/string/") == 0);
CHECK(strcmp(nvlist_get_string(nvl, name), "") == 0);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_STRING);
CHECK(strcmp(name, "nvlist/string/x") == 0);
CHECK(strcmp(nvlist_get_string(nvl, name), "x") == 0);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_STRING);
CHECK(strcmp(name, "nvlist/string/abcdefghijklmnopqrstuvwxyz") == 0);
CHECK(strcmp(nvlist_get_string(nvl, name), "abcdefghijklmnopqrstuvwxyz") == 0);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_DESCRIPTOR);
CHECK(strcmp(name, "nvlist/descriptor/STDERR_FILENO") == 0);
CHECK(fd_is_valid(nvlist_get_descriptor(nvl, name)));
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_BINARY);
CHECK(strcmp(name, "nvlist/binary/x") == 0);
CHECK(memcmp(nvlist_get_binary(nvl, name, NULL), "x", 1) == 0);
CHECK(memcmp(nvlist_get_binary(nvl, name, &size), "x", 1) == 0);
CHECK(size == 1);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_BINARY);
CHECK(strcmp(name, "nvlist/binary/abcdefghijklmnopqrstuvwxyz") == 0);
CHECK(memcmp(nvlist_get_binary(nvl, name, NULL), "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")) == 0);
CHECK(memcmp(nvlist_get_binary(nvl, name, &size), "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")) == 0);
CHECK(size == sizeof("abcdefghijklmnopqrstuvwxyz"));
name = nvlist_next(nvl, &type, &cookie);
CHECK(name != NULL);
CHECK(type == NV_TYPE_NVLIST);
CHECK(strcmp(name, "nvlist/nvlist") == 0);
cnvl = nvlist_get_nvlist(nvl, name);
ccookie = NULL;
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_BOOL);
CHECK(strcmp(cname, "nvlist/bool/true") == 0);
CHECK(nvlist_get_bool(cnvl, cname) == true);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_BOOL);
CHECK(strcmp(cname, "nvlist/bool/false") == 0);
CHECK(nvlist_get_bool(cnvl, cname) == false);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_NUMBER);
CHECK(strcmp(cname, "nvlist/number/0") == 0);
CHECK(nvlist_get_number(cnvl, cname) == 0);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_NUMBER);
CHECK(strcmp(cname, "nvlist/number/1") == 0);
CHECK(nvlist_get_number(cnvl, cname) == 1);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_NUMBER);
CHECK(strcmp(cname, "nvlist/number/-1") == 0);
CHECK((int)nvlist_get_number(cnvl, cname) == -1);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_NUMBER);
CHECK(strcmp(cname, "nvlist/number/UINT64_MAX") == 0);
CHECK(nvlist_get_number(cnvl, cname) == UINT64_MAX);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_NUMBER);
CHECK(strcmp(cname, "nvlist/number/INT64_MIN") == 0);
CHECK((int64_t)nvlist_get_number(cnvl, cname) == INT64_MIN);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_NUMBER);
CHECK(strcmp(cname, "nvlist/number/INT64_MAX") == 0);
CHECK((int64_t)nvlist_get_number(cnvl, cname) == INT64_MAX);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_STRING);
CHECK(strcmp(cname, "nvlist/string/") == 0);
CHECK(strcmp(nvlist_get_string(cnvl, cname), "") == 0);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_STRING);
CHECK(strcmp(cname, "nvlist/string/x") == 0);
CHECK(strcmp(nvlist_get_string(cnvl, cname), "x") == 0);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_STRING);
CHECK(strcmp(cname, "nvlist/string/abcdefghijklmnopqrstuvwxyz") == 0);
CHECK(strcmp(nvlist_get_string(cnvl, cname), "abcdefghijklmnopqrstuvwxyz") == 0);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_DESCRIPTOR);
CHECK(strcmp(cname, "nvlist/descriptor/STDERR_FILENO") == 0);
CHECK(fd_is_valid(nvlist_get_descriptor(cnvl, cname)));
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_BINARY);
CHECK(strcmp(cname, "nvlist/binary/x") == 0);
CHECK(memcmp(nvlist_get_binary(cnvl, cname, NULL), "x", 1) == 0);
CHECK(memcmp(nvlist_get_binary(cnvl, cname, &size), "x", 1) == 0);
CHECK(size == 1);
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname != NULL);
CHECK(ctype == NV_TYPE_BINARY);
CHECK(strcmp(cname, "nvlist/binary/abcdefghijklmnopqrstuvwxyz") == 0);
CHECK(memcmp(nvlist_get_binary(cnvl, cname, NULL), "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")) == 0);
CHECK(memcmp(nvlist_get_binary(cnvl, cname, &size), "abcdefghijklmnopqrstuvwxyz", sizeof("abcdefghijklmnopqrstuvwxyz")) == 0);
CHECK(size == sizeof("abcdefghijklmnopqrstuvwxyz"));
cname = nvlist_next(cnvl, &ctype, &ccookie);
CHECK(cname == NULL);
name = nvlist_next(nvl, &type, &cookie);
CHECK(name == NULL);
}
int
main(void)
{
int status, socks[2];
pid_t pid;
printf("1..126\n");
fflush(stdout);
if (socketpair(PF_UNIX, SOCK_STREAM, 0, socks) < 0)
err(1, "socketpair() failed");
pid = fork();
switch (pid) {
case -1:
/* Failure. */
err(1, "unable to fork");
case 0:
/* Child. */
close(socks[0]);
child(socks[1]);
return (0);
default:
/* Parent. */
close(socks[1]);
parent(socks[0]);
break;
}
if (waitpid(pid, &status, 0) < 0)
err(1, "waitpid() failed");
return (0);
}