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