Author: ngie
Date: Tue Aug  5 18:41:27 2014
New Revision: 269603
URL: http://svnweb.freebsd.org/changeset/base/269603

Log:
  Integrate lib/libnv into the build/kyua
  
  Rename all of the TAP test applications from <test> to <test>_test
  to match the convention described in the TestSuite wiki page
  
  Phabric: D538
  Approved by: jmmv (mentor)
  Sponsored by: EMC / Isilon Storage Division

Added:
  head/lib/libnv/tests/
  head/lib/libnv/tests/Makefile   (contents, props changed)
  head/lib/libnv/tests/nvlist_add_test.c
     - copied unchanged from r269562, 
head/tools/regression/lib/libnv/nvlist_add.c
  head/lib/libnv/tests/nvlist_exists_test.c
     - copied unchanged from r269545, 
head/tools/regression/lib/libnv/nvlist_exists.c
  head/lib/libnv/tests/nvlist_free_test.c
     - copied unchanged from r269545, 
head/tools/regression/lib/libnv/nvlist_free.c
  head/lib/libnv/tests/nvlist_get_test.c
     - copied unchanged from r269545, 
head/tools/regression/lib/libnv/nvlist_get.c
  head/lib/libnv/tests/nvlist_move_test.c
     - copied unchanged from r269545, 
head/tools/regression/lib/libnv/nvlist_move.c
  head/lib/libnv/tests/nvlist_send_recv_test.c
     - copied unchanged from r269545, 
head/tools/regression/lib/libnv/nvlist_send_recv.c
Deleted:
  head/tools/regression/lib/libnv/
Modified:
  head/etc/mtree/BSD.tests.dist
  head/lib/libnv/Makefile

Modified: head/etc/mtree/BSD.tests.dist
==============================================================================
--- head/etc/mtree/BSD.tests.dist       Tue Aug  5 18:35:34 2014        
(r269602)
+++ head/etc/mtree/BSD.tests.dist       Tue Aug  5 18:41:27 2014        
(r269603)
@@ -87,6 +87,8 @@
             ..
             libmp
             ..
+            libnv
+            ..
         ..
         libexec
             atf

Modified: head/lib/libnv/Makefile
==============================================================================
--- head/lib/libnv/Makefile     Tue Aug  5 18:35:34 2014        (r269602)
+++ head/lib/libnv/Makefile     Tue Aug  5 18:41:27 2014        (r269603)
@@ -1,5 +1,7 @@
 # $FreeBSD$
 
+.include <src.opts.mk>
+
 LIB=   nv
 SHLIBDIR?= /lib
 SHLIB_MAJOR= 0
@@ -158,4 +160,8 @@ MLINKS+=nv.3 nvlist_existsv.3 \
 
 WARNS?=        6
 
+.if ${MK_TESTS} != "no"
+SUBDIR+=       tests
+.endif
+
 .include <bsd.lib.mk>

Added: head/lib/libnv/tests/Makefile
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/lib/libnv/tests/Makefile       Tue Aug  5 18:41:27 2014        
(r269603)
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+TESTSDIR=      ${TESTSBASE}/lib/libnv
+
+TAP_TESTS_C+=  nvlist_add_test
+TAP_TESTS_C+=  nvlist_exists_test
+TAP_TESTS_C+=  nvlist_free_test
+TAP_TESTS_C+=  nvlist_get_test
+TAP_TESTS_C+=  nvlist_move_test
+TAP_TESTS_C+=  nvlist_send_recv_test
+
+DPADD+=                ${LIBNV}
+LDADD+=                -lnv
+
+WARNS?=                6
+
+.include <bsd.test.mk>

Copied: head/lib/libnv/tests/nvlist_add_test.c (from r269562, 
head/tools/regression/lib/libnv/nvlist_add.c)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/lib/libnv/tests/nvlist_add_test.c      Tue Aug  5 18:41:27 2014        
(r269603, copy of r269562, head/tools/regression/lib/libnv/nvlist_add.c)
@@ -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);
+}

Copied: head/lib/libnv/tests/nvlist_exists_test.c (from r269545, 
head/tools/regression/lib/libnv/nvlist_exists.c)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/lib/libnv/tests/nvlist_exists_test.c   Tue Aug  5 18:41:27 2014        
(r269603, copy of r269545, head/tools/regression/lib/libnv/nvlist_exists.c)
@@ -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);
+}

Copied: head/lib/libnv/tests/nvlist_free_test.c (from r269545, 
head/tools/regression/lib/libnv/nvlist_free.c)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/lib/libnv/tests/nvlist_free_test.c     Tue Aug  5 18:41:27 2014        
(r269603, copy of r269545, head/tools/regression/lib/libnv/nvlist_free.c)
@@ -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);
+}

Copied: head/lib/libnv/tests/nvlist_get_test.c (from r269545, 
head/tools/regression/lib/libnv/nvlist_get.c)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/lib/libnv/tests/nvlist_get_test.c      Tue Aug  5 18:41:27 2014        
(r269603, copy of r269545, head/tools/regression/lib/libnv/nvlist_get.c)
@@ -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);
+}

Copied: head/lib/libnv/tests/nvlist_move_test.c (from r269545, 
head/tools/regression/lib/libnv/nvlist_move.c)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/lib/libnv/tests/nvlist_move_test.c     Tue Aug  5 18:41:27 2014        
(r269603, copy of r269545, head/tools/regression/lib/libnv/nvlist_move.c)
@@ -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.

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to