nvlist_exists_test.c revision 258070
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: head/tools/regression/lib/libnv/nvlist_exists.c 258070 2013-11-12 20:31:16Z pjd $
30 */
31
32#include <stdio.h>
33#include <unistd.h>
34
35#include <nv.h>
36
37static 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
47int
48main(void)
49{
50	nvlist_t *nvl;
51
52	printf("1..232\n");
53
54	nvl = nvlist_create(0);
55
56	CHECK(!nvlist_exists(nvl, "nvlist/null"));
57	CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
58	CHECK(!nvlist_exists_bool(nvl, "nvlist/null"));
59	CHECK(!nvlist_exists_number(nvl, "nvlist/null"));
60	CHECK(!nvlist_exists_string(nvl, "nvlist/null"));
61	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/null"));
62	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/null"));
63	CHECK(!nvlist_exists_binary(nvl, "nvlist/null"));
64	nvlist_add_null(nvl, "nvlist/null");
65	CHECK(nvlist_error(nvl) == 0);
66	CHECK(nvlist_exists(nvl, "nvlist/null"));
67	CHECK(nvlist_exists_null(nvl, "nvlist/null"));
68	CHECK(!nvlist_exists_bool(nvl, "nvlist/null"));
69	CHECK(!nvlist_exists_number(nvl, "nvlist/null"));
70	CHECK(!nvlist_exists_string(nvl, "nvlist/null"));
71	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/null"));
72	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/null"));
73	CHECK(!nvlist_exists_binary(nvl, "nvlist/null"));
74
75	CHECK(!nvlist_exists(nvl, "nvlist/bool"));
76	CHECK(!nvlist_exists_null(nvl, "nvlist/bool"));
77	CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
78	CHECK(!nvlist_exists_number(nvl, "nvlist/bool"));
79	CHECK(!nvlist_exists_string(nvl, "nvlist/bool"));
80	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/bool"));
81	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/bool"));
82	CHECK(!nvlist_exists_binary(nvl, "nvlist/bool"));
83	nvlist_add_bool(nvl, "nvlist/bool", true);
84	CHECK(nvlist_error(nvl) == 0);
85	CHECK(nvlist_exists(nvl, "nvlist/bool"));
86	CHECK(!nvlist_exists_null(nvl, "nvlist/bool"));
87	CHECK(nvlist_exists_bool(nvl, "nvlist/bool"));
88	CHECK(!nvlist_exists_number(nvl, "nvlist/bool"));
89	CHECK(!nvlist_exists_string(nvl, "nvlist/bool"));
90	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/bool"));
91	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/bool"));
92	CHECK(!nvlist_exists_binary(nvl, "nvlist/bool"));
93
94	CHECK(!nvlist_exists(nvl, "nvlist/number"));
95	CHECK(!nvlist_exists_null(nvl, "nvlist/number"));
96	CHECK(!nvlist_exists_bool(nvl, "nvlist/number"));
97	CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
98	CHECK(!nvlist_exists_string(nvl, "nvlist/number"));
99	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/number"));
100	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/number"));
101	CHECK(!nvlist_exists_binary(nvl, "nvlist/number"));
102	nvlist_add_number(nvl, "nvlist/number", 0);
103	CHECK(nvlist_error(nvl) == 0);
104	CHECK(nvlist_exists(nvl, "nvlist/number"));
105	CHECK(!nvlist_exists_null(nvl, "nvlist/number"));
106	CHECK(!nvlist_exists_bool(nvl, "nvlist/number"));
107	CHECK(nvlist_exists_number(nvl, "nvlist/number"));
108	CHECK(!nvlist_exists_string(nvl, "nvlist/number"));
109	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/number"));
110	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/number"));
111	CHECK(!nvlist_exists_binary(nvl, "nvlist/number"));
112
113	CHECK(!nvlist_exists(nvl, "nvlist/string"));
114	CHECK(!nvlist_exists_null(nvl, "nvlist/string"));
115	CHECK(!nvlist_exists_bool(nvl, "nvlist/string"));
116	CHECK(!nvlist_exists_number(nvl, "nvlist/string"));
117	CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
118	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/string"));
119	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/string"));
120	CHECK(!nvlist_exists_binary(nvl, "nvlist/string"));
121	nvlist_add_string(nvl, "nvlist/string", "test");
122	CHECK(nvlist_error(nvl) == 0);
123	CHECK(nvlist_exists(nvl, "nvlist/string"));
124	CHECK(!nvlist_exists_null(nvl, "nvlist/string"));
125	CHECK(!nvlist_exists_bool(nvl, "nvlist/string"));
126	CHECK(!nvlist_exists_number(nvl, "nvlist/string"));
127	CHECK(nvlist_exists_string(nvl, "nvlist/string"));
128	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/string"));
129	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/string"));
130	CHECK(!nvlist_exists_binary(nvl, "nvlist/string"));
131
132	CHECK(!nvlist_exists(nvl, "nvlist/nvlist"));
133	CHECK(!nvlist_exists_null(nvl, "nvlist/nvlist"));
134	CHECK(!nvlist_exists_bool(nvl, "nvlist/nvlist"));
135	CHECK(!nvlist_exists_number(nvl, "nvlist/nvlist"));
136	CHECK(!nvlist_exists_string(nvl, "nvlist/nvlist"));
137	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
138	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/nvlist"));
139	CHECK(!nvlist_exists_binary(nvl, "nvlist/nvlist"));
140	nvlist_add_nvlist(nvl, "nvlist/nvlist", nvl);
141	CHECK(nvlist_error(nvl) == 0);
142	CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
143	CHECK(!nvlist_exists_null(nvl, "nvlist/nvlist"));
144	CHECK(!nvlist_exists_bool(nvl, "nvlist/nvlist"));
145	CHECK(!nvlist_exists_number(nvl, "nvlist/nvlist"));
146	CHECK(!nvlist_exists_string(nvl, "nvlist/nvlist"));
147	CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
148	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/nvlist"));
149	CHECK(!nvlist_exists_binary(nvl, "nvlist/nvlist"));
150
151	CHECK(!nvlist_exists(nvl, "nvlist/descriptor"));
152	CHECK(!nvlist_exists_null(nvl, "nvlist/descriptor"));
153	CHECK(!nvlist_exists_bool(nvl, "nvlist/descriptor"));
154	CHECK(!nvlist_exists_number(nvl, "nvlist/descriptor"));
155	CHECK(!nvlist_exists_string(nvl, "nvlist/descriptor"));
156	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/descriptor"));
157	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
158	CHECK(!nvlist_exists_binary(nvl, "nvlist/descriptor"));
159	nvlist_add_descriptor(nvl, "nvlist/descriptor", STDERR_FILENO);
160	CHECK(nvlist_error(nvl) == 0);
161	CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
162	CHECK(!nvlist_exists_null(nvl, "nvlist/descriptor"));
163	CHECK(!nvlist_exists_bool(nvl, "nvlist/descriptor"));
164	CHECK(!nvlist_exists_number(nvl, "nvlist/descriptor"));
165	CHECK(!nvlist_exists_string(nvl, "nvlist/descriptor"));
166	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/descriptor"));
167	CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
168	CHECK(!nvlist_exists_binary(nvl, "nvlist/descriptor"));
169
170	CHECK(!nvlist_exists(nvl, "nvlist/binary"));
171	CHECK(!nvlist_exists_null(nvl, "nvlist/binary"));
172	CHECK(!nvlist_exists_bool(nvl, "nvlist/binary"));
173	CHECK(!nvlist_exists_number(nvl, "nvlist/binary"));
174	CHECK(!nvlist_exists_string(nvl, "nvlist/binary"));
175	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/binary"));
176	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/binary"));
177	CHECK(!nvlist_exists_binary(nvl, "nvlist/binary"));
178	nvlist_add_binary(nvl, "nvlist/binary", "test", 4);
179	CHECK(nvlist_error(nvl) == 0);
180	CHECK(nvlist_exists(nvl, "nvlist/binary"));
181	CHECK(!nvlist_exists_null(nvl, "nvlist/binary"));
182	CHECK(!nvlist_exists_bool(nvl, "nvlist/binary"));
183	CHECK(!nvlist_exists_number(nvl, "nvlist/binary"));
184	CHECK(!nvlist_exists_string(nvl, "nvlist/binary"));
185	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/binary"));
186	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/binary"));
187	CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
188
189	CHECK(nvlist_exists(nvl, "nvlist/null"));
190	CHECK(nvlist_exists(nvl, "nvlist/bool"));
191	CHECK(nvlist_exists(nvl, "nvlist/number"));
192	CHECK(nvlist_exists(nvl, "nvlist/string"));
193	CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
194	CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
195	CHECK(nvlist_exists(nvl, "nvlist/binary"));
196	CHECK(nvlist_exists_null(nvl, "nvlist/null"));
197	CHECK(nvlist_exists_bool(nvl, "nvlist/bool"));
198	CHECK(nvlist_exists_number(nvl, "nvlist/number"));
199	CHECK(nvlist_exists_string(nvl, "nvlist/string"));
200	CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
201	CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
202	CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
203
204	nvlist_free_null(nvl, "nvlist/null");
205	CHECK(!nvlist_exists(nvl, "nvlist/null"));
206	CHECK(nvlist_exists(nvl, "nvlist/bool"));
207	CHECK(nvlist_exists(nvl, "nvlist/number"));
208	CHECK(nvlist_exists(nvl, "nvlist/string"));
209	CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
210	CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
211	CHECK(nvlist_exists(nvl, "nvlist/binary"));
212	CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
213	CHECK(nvlist_exists_bool(nvl, "nvlist/bool"));
214	CHECK(nvlist_exists_number(nvl, "nvlist/number"));
215	CHECK(nvlist_exists_string(nvl, "nvlist/string"));
216	CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
217	CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
218	CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
219
220	nvlist_free_bool(nvl, "nvlist/bool");
221	CHECK(!nvlist_exists(nvl, "nvlist/null"));
222	CHECK(!nvlist_exists(nvl, "nvlist/bool"));
223	CHECK(nvlist_exists(nvl, "nvlist/number"));
224	CHECK(nvlist_exists(nvl, "nvlist/string"));
225	CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
226	CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
227	CHECK(nvlist_exists(nvl, "nvlist/binary"));
228	CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
229	CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
230	CHECK(nvlist_exists_number(nvl, "nvlist/number"));
231	CHECK(nvlist_exists_string(nvl, "nvlist/string"));
232	CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
233	CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
234	CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
235
236	nvlist_free_number(nvl, "nvlist/number");
237	CHECK(!nvlist_exists(nvl, "nvlist/null"));
238	CHECK(!nvlist_exists(nvl, "nvlist/bool"));
239	CHECK(!nvlist_exists(nvl, "nvlist/number"));
240	CHECK(nvlist_exists(nvl, "nvlist/string"));
241	CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
242	CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
243	CHECK(nvlist_exists(nvl, "nvlist/binary"));
244	CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
245	CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
246	CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
247	CHECK(nvlist_exists_string(nvl, "nvlist/string"));
248	CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
249	CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
250	CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
251
252	nvlist_free_string(nvl, "nvlist/string");
253	CHECK(!nvlist_exists(nvl, "nvlist/null"));
254	CHECK(!nvlist_exists(nvl, "nvlist/bool"));
255	CHECK(!nvlist_exists(nvl, "nvlist/number"));
256	CHECK(!nvlist_exists(nvl, "nvlist/string"));
257	CHECK(nvlist_exists(nvl, "nvlist/nvlist"));
258	CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
259	CHECK(nvlist_exists(nvl, "nvlist/binary"));
260	CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
261	CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
262	CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
263	CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
264	CHECK(nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
265	CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
266	CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
267
268	nvlist_free_nvlist(nvl, "nvlist/nvlist");
269	CHECK(!nvlist_exists(nvl, "nvlist/null"));
270	CHECK(!nvlist_exists(nvl, "nvlist/bool"));
271	CHECK(!nvlist_exists(nvl, "nvlist/number"));
272	CHECK(!nvlist_exists(nvl, "nvlist/string"));
273	CHECK(!nvlist_exists(nvl, "nvlist/nvlist"));
274	CHECK(nvlist_exists(nvl, "nvlist/descriptor"));
275	CHECK(nvlist_exists(nvl, "nvlist/binary"));
276	CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
277	CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
278	CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
279	CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
280	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
281	CHECK(nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
282	CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
283
284	nvlist_free_descriptor(nvl, "nvlist/descriptor");
285	CHECK(!nvlist_exists(nvl, "nvlist/null"));
286	CHECK(!nvlist_exists(nvl, "nvlist/bool"));
287	CHECK(!nvlist_exists(nvl, "nvlist/number"));
288	CHECK(!nvlist_exists(nvl, "nvlist/string"));
289	CHECK(!nvlist_exists(nvl, "nvlist/nvlist"));
290	CHECK(!nvlist_exists(nvl, "nvlist/descriptor"));
291	CHECK(nvlist_exists(nvl, "nvlist/binary"));
292	CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
293	CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
294	CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
295	CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
296	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
297	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
298	CHECK(nvlist_exists_binary(nvl, "nvlist/binary"));
299
300	nvlist_free_binary(nvl, "nvlist/binary");
301	CHECK(!nvlist_exists(nvl, "nvlist/null"));
302	CHECK(!nvlist_exists(nvl, "nvlist/bool"));
303	CHECK(!nvlist_exists(nvl, "nvlist/number"));
304	CHECK(!nvlist_exists(nvl, "nvlist/string"));
305	CHECK(!nvlist_exists(nvl, "nvlist/nvlist"));
306	CHECK(!nvlist_exists(nvl, "nvlist/descriptor"));
307	CHECK(!nvlist_exists(nvl, "nvlist/binary"));
308	CHECK(!nvlist_exists_null(nvl, "nvlist/null"));
309	CHECK(!nvlist_exists_bool(nvl, "nvlist/bool"));
310	CHECK(!nvlist_exists_number(nvl, "nvlist/number"));
311	CHECK(!nvlist_exists_string(nvl, "nvlist/string"));
312	CHECK(!nvlist_exists_nvlist(nvl, "nvlist/nvlist"));
313	CHECK(!nvlist_exists_descriptor(nvl, "nvlist/descriptor"));
314	CHECK(!nvlist_exists_binary(nvl, "nvlist/binary"));
315
316	CHECK(nvlist_empty(nvl));
317
318	nvlist_destroy(nvl);
319
320	return (0);
321}
322