2 * Copyright (c) 2013 The FreeBSD Foundation
5 * This software was developed by Pawel Jakub Dawidek under sponsorship from
6 * the FreeBSD Foundation.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
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.
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
39 #define CHECK(expr) do { \
41 printf("ok # %d %s:%u\n", ntest, __FILE__, __LINE__); \
43 printf("not ok # %d %s:%u\n", ntest, __FILE__, __LINE__);\
54 nvl = nvlist_create(0);
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);
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"));
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"));
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"));
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"));
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"));
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"));
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"));
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"));
135 CHECK(nvlist_empty(nvl));
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);
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"));
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"));
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"));
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"));
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"));
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"));
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"));
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"));
216 CHECK(nvlist_empty(nvl));