1 /*- 2 * Copyright (c) 2013 The FreeBSD Foundation 3 * All rights reserved. 4 * 5 * This software was developed by Pawel Jakub Dawidek under sponsorship from 6 * the FreeBSD Foundation. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 * $FreeBSD$ 30 */ 31 32 #include <stdio.h> 33 #include <unistd.h> 34 35 #include <nv.h> 36 37 static int ntest = 1; 38 39 #define CHECK(expr) do { \ 40 if ((expr)) \ 41 printf("ok # %d %s:%u\n", ntest, __FILE__, __LINE__); \ 42 else \ 43 printf("not ok # %d %s:%u\n", ntest, __FILE__, __LINE__);\ 44 ntest++; \ 45 } while (0) 46 47 int 48 main(void) 49 { 50 nvlist_t *nvl; 51 52 printf("1..114\n"); 53 54 nvl = nvlist_create(0); 55 56 nvlist_add_null(nvl, "nvlist/null"); 57 nvlist_add_bool(nvl, "nvlist/bool", true); 58 nvlist_add_number(nvl, "nvlist/number", 0); 59 nvlist_add_string(nvl, "nvlist/string", "test"); 60 nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl); 61 nvlist_add_descriptor(nvl, "nvlist/descriptor", STDERR_FILENO); 62 nvlist_add_binary(nvl, "nvlist/binary", "test", 4); 63 64 CHECK(nvlist_exists_null(nvl, "nvlist/null")); 65 CHECK(nvlist_exists_bool(nvl, "nvlist/bool")); 66 CHECK(nvlist_exists_number(nvl, "nvlist/number")); 67 CHECK(nvlist_exists_string(nvl, "nvlist/string")); 68 CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 69 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 70 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 71 72 nvlist_free_null(nvl, "nvlist/null"); 73 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 74 CHECK(nvlist_exists_bool(nvl, "nvlist/bool")); 75 CHECK(nvlist_exists_number(nvl, "nvlist/number")); 76 CHECK(nvlist_exists_string(nvl, "nvlist/string")); 77 CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 78 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 79 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 80 81 nvlist_free_bool(nvl, "nvlist/bool"); 82 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 83 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 84 CHECK(nvlist_exists_number(nvl, "nvlist/number")); 85 CHECK(nvlist_exists_string(nvl, "nvlist/string")); 86 CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 87 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 88 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 89 90 nvlist_free_number(nvl, "nvlist/number"); 91 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 92 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 93 CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 94 CHECK(nvlist_exists_string(nvl, "nvlist/string")); 95 CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 96 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 97 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 98 99 nvlist_free_string(nvl, "nvlist/string"); 100 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 101 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 102 CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 103 CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 104 CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 105 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 106 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 107 108 nvlist_free_nvlist(nvl, "nvlist/nvlist"); 109 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 110 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 111 CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 112 CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 113 CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 114 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 115 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 116 117 nvlist_free_descriptor(nvl, "nvlist/descriptor"); 118 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 119 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 120 CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 121 CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 122 CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 123 CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 124 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 125 126 nvlist_free_binary(nvl, "nvlist/binary"); 127 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 128 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 129 CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 130 CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 131 CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 132 CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 133 CHECK(!nvlist_exists_binary(nvl, "nvlist/binary")); 134 135 CHECK(nvlist_empty(nvl)); 136 137 nvlist_add_null(nvl, "nvlist/null"); 138 nvlist_add_bool(nvl, "nvlist/bool", true); 139 nvlist_add_number(nvl, "nvlist/number", 0); 140 nvlist_add_string(nvl, "nvlist/string", "test"); 141 nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl); 142 nvlist_add_descriptor(nvl, "nvlist/descriptor", STDERR_FILENO); 143 nvlist_add_binary(nvl, "nvlist/binary", "test", 4); 144 145 CHECK(nvlist_exists_null(nvl, "nvlist/null")); 146 CHECK(nvlist_exists_bool(nvl, "nvlist/bool")); 147 CHECK(nvlist_exists_number(nvl, "nvlist/number")); 148 CHECK(nvlist_exists_string(nvl, "nvlist/string")); 149 CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 150 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 151 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 152 153 nvlist_free(nvl, "nvlist/null"); 154 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 155 CHECK(nvlist_exists_bool(nvl, "nvlist/bool")); 156 CHECK(nvlist_exists_number(nvl, "nvlist/number")); 157 CHECK(nvlist_exists_string(nvl, "nvlist/string")); 158 CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 159 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 160 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 161 162 nvlist_free(nvl, "nvlist/bool"); 163 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 164 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 165 CHECK(nvlist_exists_number(nvl, "nvlist/number")); 166 CHECK(nvlist_exists_string(nvl, "nvlist/string")); 167 CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 168 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 169 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 170 171 nvlist_free(nvl, "nvlist/number"); 172 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 173 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 174 CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 175 CHECK(nvlist_exists_string(nvl, "nvlist/string")); 176 CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 177 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 178 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 179 180 nvlist_free(nvl, "nvlist/string"); 181 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 182 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 183 CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 184 CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 185 CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 186 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 187 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 188 189 nvlist_free(nvl, "nvlist/nvlist"); 190 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 191 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 192 CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 193 CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 194 CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 195 CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 196 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 197 198 nvlist_free(nvl, "nvlist/descriptor"); 199 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 200 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 201 CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 202 CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 203 CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 204 CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 205 CHECK(nvlist_exists_binary(nvl, "nvlist/binary")); 206 207 nvlist_free(nvl, "nvlist/binary"); 208 CHECK(!nvlist_exists_null(nvl, "nvlist/null")); 209 CHECK(!nvlist_exists_bool(nvl, "nvlist/bool")); 210 CHECK(!nvlist_exists_number(nvl, "nvlist/number")); 211 CHECK(!nvlist_exists_string(nvl, "nvlist/string")); 212 CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist")); 213 CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor")); 214 CHECK(!nvlist_exists_binary(nvl, "nvlist/binary")); 215 216 CHECK(nvlist_empty(nvl)); 217 218 nvlist_destroy(nvl); 219 220 return (0); 221 } 222