nvlist_free_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_free.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..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