xref: /netbsd-src/tests/lib/libppath/t_ppath.c (revision 8012ca3f0e0935df89028ef98e60992407bddc93)
1*8012ca3fSmsaitoh /* $Id: t_ppath.c,v 1.2 2020/05/14 08:34:18 msaitoh Exp $ */
2199cc6c1Sdyoung 
3199cc6c1Sdyoung /* Copyright (c) 2010 David Young.  All rights reserved. */
4199cc6c1Sdyoung 
5199cc6c1Sdyoung #include <sys/cdefs.h>
6*8012ca3fSmsaitoh __RCSID("$Id: t_ppath.c,v 1.2 2020/05/14 08:34:18 msaitoh Exp $");
7199cc6c1Sdyoung 
8199cc6c1Sdyoung #include <assert.h>
9199cc6c1Sdyoung #include <atf-c.h>
10199cc6c1Sdyoung #include <errno.h>
11199cc6c1Sdyoung #include <stdlib.h>
12199cc6c1Sdyoung #include <string.h>
13199cc6c1Sdyoung 
14199cc6c1Sdyoung #include <ppath/ppath.h>
15199cc6c1Sdyoung #include "personnel.h"
16199cc6c1Sdyoung 
17199cc6c1Sdyoung void test_ppath_extant_inc(void);
18199cc6c1Sdyoung void test_ppath_extant_dec(void);
19199cc6c1Sdyoung void test_ppath_component_extant_inc(void);
20199cc6c1Sdyoung void test_ppath_component_extant_dec(void);
21199cc6c1Sdyoung 
22199cc6c1Sdyoung __strong_alias(ppath_extant_inc, test_ppath_extant_inc);
23199cc6c1Sdyoung __strong_alias(ppath_extant_dec, test_ppath_extant_dec);
24199cc6c1Sdyoung __strong_alias(ppath_component_extant_inc, test_ppath_component_extant_inc);
25199cc6c1Sdyoung __strong_alias(ppath_component_extant_dec, test_ppath_component_extant_dec);
26199cc6c1Sdyoung 
27199cc6c1Sdyoung static uint64_t nppath = 0, nppath_component = 0;
28199cc6c1Sdyoung 
29199cc6c1Sdyoung static bool
dictionary_equals(prop_dictionary_t ld,prop_dictionary_t rd)30199cc6c1Sdyoung dictionary_equals(prop_dictionary_t ld, prop_dictionary_t rd)
31199cc6c1Sdyoung {
32199cc6c1Sdyoung 	bool eq;
33199cc6c1Sdyoung 	char *lt, *rt;
34199cc6c1Sdyoung 
35199cc6c1Sdyoung 	lt = prop_dictionary_externalize(ld);
36199cc6c1Sdyoung 	rt = prop_dictionary_externalize(rd);
37199cc6c1Sdyoung 
38199cc6c1Sdyoung 	assert(lt != NULL && rt != NULL);
39199cc6c1Sdyoung 
40199cc6c1Sdyoung 	eq = (strcmp(lt, rt) == 0);
41199cc6c1Sdyoung 
42199cc6c1Sdyoung 	free(lt);
43199cc6c1Sdyoung 	free(rt);
44199cc6c1Sdyoung 
45199cc6c1Sdyoung 	return eq;
46199cc6c1Sdyoung }
47199cc6c1Sdyoung 
48199cc6c1Sdyoung static void
assert_no_ppath_extant(void)49199cc6c1Sdyoung assert_no_ppath_extant(void)
50199cc6c1Sdyoung {
51199cc6c1Sdyoung 	ATF_CHECK_EQ(nppath, 0);
52199cc6c1Sdyoung }
53199cc6c1Sdyoung 
54199cc6c1Sdyoung static void
assert_no_ppath_component_extant(void)55199cc6c1Sdyoung assert_no_ppath_component_extant(void)
56199cc6c1Sdyoung {
57199cc6c1Sdyoung 	ATF_CHECK_EQ(nppath_component, 0);
58199cc6c1Sdyoung }
59199cc6c1Sdyoung 
60199cc6c1Sdyoung void
test_ppath_extant_inc(void)61199cc6c1Sdyoung test_ppath_extant_inc(void)
62199cc6c1Sdyoung {
63199cc6c1Sdyoung 	if (++nppath == 0)
64199cc6c1Sdyoung 		atf_tc_fail("count of extant paths overflowed");
65199cc6c1Sdyoung }
66199cc6c1Sdyoung 
67199cc6c1Sdyoung void
test_ppath_extant_dec(void)68199cc6c1Sdyoung test_ppath_extant_dec(void)
69199cc6c1Sdyoung {
70199cc6c1Sdyoung 	if (nppath-- == 0)
71199cc6c1Sdyoung 		atf_tc_fail("count of extant path underflowed");
72199cc6c1Sdyoung }
73199cc6c1Sdyoung 
74199cc6c1Sdyoung void
test_ppath_component_extant_inc(void)75199cc6c1Sdyoung test_ppath_component_extant_inc(void)
76199cc6c1Sdyoung {
77199cc6c1Sdyoung 	if (++nppath_component == 0)
78199cc6c1Sdyoung 		atf_tc_fail("count of extant path components overflowed");
79199cc6c1Sdyoung }
80199cc6c1Sdyoung 
81199cc6c1Sdyoung void
test_ppath_component_extant_dec(void)82199cc6c1Sdyoung test_ppath_component_extant_dec(void)
83199cc6c1Sdyoung {
84199cc6c1Sdyoung 	if (nppath_component-- == 0)
85199cc6c1Sdyoung 		atf_tc_fail("count of extant path components underflowed");
86199cc6c1Sdyoung }
87199cc6c1Sdyoung 
88199cc6c1Sdyoung ATF_TC(push_until_full);
89199cc6c1Sdyoung 
ATF_TC_HEAD(push_until_full,tc)90199cc6c1Sdyoung ATF_TC_HEAD(push_until_full, tc)
91199cc6c1Sdyoung {
92199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_push() returns error "
93199cc6c1Sdyoung 	    "after ppath_t reaches maximum length");
94199cc6c1Sdyoung }
95199cc6c1Sdyoung 
ATF_TC_BODY(push_until_full,tc)96199cc6c1Sdyoung ATF_TC_BODY(push_until_full, tc)
97199cc6c1Sdyoung {
98199cc6c1Sdyoung 	ppath_t *p, *rp;
99199cc6c1Sdyoung 	ppath_component_t *pc;
100199cc6c1Sdyoung 	int i;
101199cc6c1Sdyoung 
102199cc6c1Sdyoung 	assert_no_ppath_extant();
103199cc6c1Sdyoung 	assert_no_ppath_component_extant();
104199cc6c1Sdyoung 
105199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
106199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
107199cc6c1Sdyoung 
108199cc6c1Sdyoung 	if ((pc = ppath_idx(0)) == NULL)
109199cc6c1Sdyoung 		atf_tc_fail("ppath_idx failed");
110199cc6c1Sdyoung 
111199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
112199cc6c1Sdyoung 		rp = ppath_push(p, pc);
113199cc6c1Sdyoung 		ATF_CHECK_EQ(rp, p);
114199cc6c1Sdyoung 	}
115199cc6c1Sdyoung 
116199cc6c1Sdyoung 	rp = ppath_push(p, pc);
117199cc6c1Sdyoung 	ATF_CHECK_EQ(rp, NULL);
118199cc6c1Sdyoung 
119199cc6c1Sdyoung 	rp = ppath_push(p, pc);
120199cc6c1Sdyoung 	ATF_CHECK_EQ(rp, NULL);
121199cc6c1Sdyoung 
122199cc6c1Sdyoung 	ppath_component_release(pc);
123199cc6c1Sdyoung 	ppath_release(p);
124199cc6c1Sdyoung 
125199cc6c1Sdyoung 	assert_no_ppath_extant();
126199cc6c1Sdyoung 	assert_no_ppath_component_extant();
127199cc6c1Sdyoung }
128199cc6c1Sdyoung 
129199cc6c1Sdyoung ATF_TC(pop_until_empty);
ATF_TC_HEAD(pop_until_empty,tc)130199cc6c1Sdyoung ATF_TC_HEAD(pop_until_empty, tc)
131199cc6c1Sdyoung {
132199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_pop() returns error "
133199cc6c1Sdyoung 	    "after ppath_t is empty");
134199cc6c1Sdyoung }
135199cc6c1Sdyoung 
ATF_TC_BODY(pop_until_empty,tc)136199cc6c1Sdyoung ATF_TC_BODY(pop_until_empty, tc)
137199cc6c1Sdyoung {
138199cc6c1Sdyoung 	ppath_t *p, *rp;
139199cc6c1Sdyoung 	ppath_component_t *pc, *rpc;
140199cc6c1Sdyoung 	int i;
141199cc6c1Sdyoung 
142199cc6c1Sdyoung 	assert_no_ppath_extant();
143199cc6c1Sdyoung 	assert_no_ppath_component_extant();
144199cc6c1Sdyoung 
145199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
146199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
147199cc6c1Sdyoung 
148199cc6c1Sdyoung 	if ((pc = ppath_idx(0)) == NULL)
149199cc6c1Sdyoung 		atf_tc_fail("ppath_idx failed");
150199cc6c1Sdyoung 
151199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
152199cc6c1Sdyoung 		rp = ppath_push(p, pc);
153199cc6c1Sdyoung 		ATF_CHECK_EQ(rp, p);
154199cc6c1Sdyoung 	}
155199cc6c1Sdyoung 
156199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
157199cc6c1Sdyoung 		rp = ppath_pop(p, &rpc);
158199cc6c1Sdyoung 		ATF_CHECK_EQ(rp, p);
159199cc6c1Sdyoung 		ATF_CHECK_EQ(rpc, pc);
160199cc6c1Sdyoung 		ppath_component_release(rpc);
161199cc6c1Sdyoung 	}
162199cc6c1Sdyoung 
163199cc6c1Sdyoung 	rp = ppath_pop(p, &rpc);
164199cc6c1Sdyoung 	ATF_CHECK_EQ(rp, NULL);
165199cc6c1Sdyoung 	rp = ppath_pop(p, &rpc);
166199cc6c1Sdyoung 	ATF_CHECK_EQ(rp, NULL);
167199cc6c1Sdyoung 
168199cc6c1Sdyoung 	ppath_component_release(pc);
169199cc6c1Sdyoung 	ppath_release(p);
170199cc6c1Sdyoung 
171199cc6c1Sdyoung 	assert_no_ppath_extant();
172199cc6c1Sdyoung 	assert_no_ppath_component_extant();
173199cc6c1Sdyoung }
174199cc6c1Sdyoung 
175199cc6c1Sdyoung ATF_TC(length);
176199cc6c1Sdyoung 
ATF_TC_HEAD(length,tc)177199cc6c1Sdyoung ATF_TC_HEAD(length, tc)
178199cc6c1Sdyoung {
179199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check that ppath_push() "
180199cc6c1Sdyoung 	    "and ppath_pop() affect ppath_length() correctly");
181199cc6c1Sdyoung }
182199cc6c1Sdyoung 
ATF_TC_BODY(length,tc)183199cc6c1Sdyoung ATF_TC_BODY(length, tc)
184199cc6c1Sdyoung {
185199cc6c1Sdyoung 	ppath_t *p, *rp;
186199cc6c1Sdyoung 	ppath_component_t *pc;
187199cc6c1Sdyoung 	unsigned int i, len;
188199cc6c1Sdyoung 
189199cc6c1Sdyoung 	assert_no_ppath_extant();
190199cc6c1Sdyoung 	assert_no_ppath_component_extant();
191199cc6c1Sdyoung 
192199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
193199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
194199cc6c1Sdyoung 
195199cc6c1Sdyoung 	if ((pc = ppath_idx(0)) == NULL)
196199cc6c1Sdyoung 		atf_tc_fail("ppath_idx failed");
197199cc6c1Sdyoung 
198199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
199199cc6c1Sdyoung 		len = ppath_length(p);
200199cc6c1Sdyoung 		ATF_CHECK_EQ(len, i);
201199cc6c1Sdyoung 		rp = ppath_push(p, pc);
202199cc6c1Sdyoung 		ATF_CHECK_EQ(rp, p);
203199cc6c1Sdyoung 	}
204199cc6c1Sdyoung 
205199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
206199cc6c1Sdyoung 		len = ppath_length(p);
207199cc6c1Sdyoung 		ATF_CHECK_EQ(len, PPATH_MAX_COMPONENTS - i);
208199cc6c1Sdyoung 		rp = ppath_pop(p, NULL);
209199cc6c1Sdyoung 		ATF_CHECK_EQ(rp, p);
210199cc6c1Sdyoung 	}
211199cc6c1Sdyoung 	ppath_component_release(pc);
212199cc6c1Sdyoung 	ppath_release(p);
213199cc6c1Sdyoung 
214199cc6c1Sdyoung 	assert_no_ppath_extant();
215199cc6c1Sdyoung 	assert_no_ppath_component_extant();
216199cc6c1Sdyoung }
217199cc6c1Sdyoung 
218199cc6c1Sdyoung ATF_TC(component_at);
219199cc6c1Sdyoung 
ATF_TC_HEAD(component_at,tc)220199cc6c1Sdyoung ATF_TC_HEAD(component_at, tc)
221199cc6c1Sdyoung {
222199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check that ppath_component_at() "
223199cc6c1Sdyoung 	    "returns the expected component");
224199cc6c1Sdyoung }
225199cc6c1Sdyoung 
ATF_TC_BODY(component_at,tc)226199cc6c1Sdyoung ATF_TC_BODY(component_at, tc)
227199cc6c1Sdyoung {
228199cc6c1Sdyoung 	ppath_t *p, *rp;
229199cc6c1Sdyoung 	ppath_component_t *pc;
230199cc6c1Sdyoung 	unsigned int i;
231199cc6c1Sdyoung 
232199cc6c1Sdyoung 	assert_no_ppath_extant();
233199cc6c1Sdyoung 	assert_no_ppath_component_extant();
234199cc6c1Sdyoung 
235199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
236199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
237199cc6c1Sdyoung 
238199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
239199cc6c1Sdyoung 		if ((pc = ppath_idx(i)) == NULL)
240199cc6c1Sdyoung 			atf_tc_fail("ppath_idx failed");
241199cc6c1Sdyoung 		rp = ppath_push(p, pc);
242199cc6c1Sdyoung 		ppath_component_release(pc);
243199cc6c1Sdyoung 		ATF_CHECK_EQ(rp, p);
244199cc6c1Sdyoung 	}
245199cc6c1Sdyoung 
246199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
247199cc6c1Sdyoung 		pc = ppath_component_at(p, i);
248199cc6c1Sdyoung 		ATF_CHECK_EQ(ppath_component_idx(pc), (int)i);
249199cc6c1Sdyoung 		ppath_component_release(pc);
250199cc6c1Sdyoung 	}
251199cc6c1Sdyoung 	ppath_release(p);
252199cc6c1Sdyoung 
253199cc6c1Sdyoung 	assert_no_ppath_extant();
254199cc6c1Sdyoung 	assert_no_ppath_component_extant();
255199cc6c1Sdyoung }
256199cc6c1Sdyoung 
257199cc6c1Sdyoung ATF_TC(get_idx_key);
258199cc6c1Sdyoung 
ATF_TC_HEAD(get_idx_key,tc)259199cc6c1Sdyoung ATF_TC_HEAD(get_idx_key, tc)
260199cc6c1Sdyoung {
261199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check that ppath_component_idx() "
262199cc6c1Sdyoung 	    "and ppath_component_key() return -1 and NULL, respectively, if "
263199cc6c1Sdyoung 	    "the component is a key or an index, respectively.");
264199cc6c1Sdyoung }
265199cc6c1Sdyoung 
ATF_TC_BODY(get_idx_key,tc)266199cc6c1Sdyoung ATF_TC_BODY(get_idx_key, tc)
267199cc6c1Sdyoung {
268199cc6c1Sdyoung 	ppath_component_t *idx, *key;
269199cc6c1Sdyoung 
270199cc6c1Sdyoung 	assert_no_ppath_extant();
271199cc6c1Sdyoung 	assert_no_ppath_component_extant();
272199cc6c1Sdyoung 
273199cc6c1Sdyoung 	if ((idx = ppath_idx(0)) == NULL)
274199cc6c1Sdyoung 		atf_tc_fail("ppath_idx failed");
275199cc6c1Sdyoung 	if ((key = ppath_key("key")) == NULL)
276199cc6c1Sdyoung 		atf_tc_fail("ppath_idx failed");
277199cc6c1Sdyoung 
278199cc6c1Sdyoung 	ATF_CHECK_EQ(ppath_component_key(idx), NULL);
279199cc6c1Sdyoung 	ATF_CHECK_EQ(ppath_component_idx(key), -1);
280199cc6c1Sdyoung 
281199cc6c1Sdyoung 	ppath_component_release(idx);
282199cc6c1Sdyoung 	ppath_component_release(key);
283199cc6c1Sdyoung 
284199cc6c1Sdyoung 	assert_no_ppath_extant();
285199cc6c1Sdyoung 	assert_no_ppath_component_extant();
286199cc6c1Sdyoung }
287199cc6c1Sdyoung 
288199cc6c1Sdyoung ATF_TC(ppath_copy);
289199cc6c1Sdyoung 
ATF_TC_HEAD(ppath_copy,tc)290199cc6c1Sdyoung ATF_TC_HEAD(ppath_copy, tc)
291199cc6c1Sdyoung {
292199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check that ppath_copy() "
293199cc6c1Sdyoung 	    "creates an exact replica of a path, and that no "
294199cc6c1Sdyoung 	    "resources are leaked.");
295199cc6c1Sdyoung }
296199cc6c1Sdyoung 
ATF_TC_BODY(ppath_copy,tc)297199cc6c1Sdyoung ATF_TC_BODY(ppath_copy, tc)
298199cc6c1Sdyoung {
299199cc6c1Sdyoung 	ppath_component_t *pc, *cpc;
300199cc6c1Sdyoung 	ppath_t *p, *cp, *rp;
301199cc6c1Sdyoung 	unsigned int i;
302199cc6c1Sdyoung 
303199cc6c1Sdyoung 	assert_no_ppath_extant();
304199cc6c1Sdyoung 	assert_no_ppath_component_extant();
305199cc6c1Sdyoung 
306199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
307199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
308199cc6c1Sdyoung 
309199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
310199cc6c1Sdyoung 		if ((pc = ppath_idx(i)) == NULL)
311199cc6c1Sdyoung 			atf_tc_fail("ppath_idx failed");
312199cc6c1Sdyoung 		rp = ppath_push(p, pc);
313199cc6c1Sdyoung 		ppath_component_release(pc);
314199cc6c1Sdyoung 		ATF_CHECK_EQ(rp, p);
315199cc6c1Sdyoung 	}
316199cc6c1Sdyoung 
317199cc6c1Sdyoung 	if ((cp = ppath_copy(p)) == NULL)
318199cc6c1Sdyoung 		atf_tc_fail("ppath_copy failed");
319199cc6c1Sdyoung 
320199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
321199cc6c1Sdyoung 		pc = ppath_component_at(p, i);
322199cc6c1Sdyoung 		cpc = ppath_component_at(cp, i);
323199cc6c1Sdyoung 		ATF_CHECK_EQ(pc, cpc);
324199cc6c1Sdyoung 		ppath_component_release(pc);
325199cc6c1Sdyoung 		ppath_component_release(cpc);
326199cc6c1Sdyoung 	}
327199cc6c1Sdyoung 
328199cc6c1Sdyoung 	ppath_release(cp);
329199cc6c1Sdyoung 	ppath_release(p);
330199cc6c1Sdyoung 
331199cc6c1Sdyoung 	assert_no_ppath_extant();
332199cc6c1Sdyoung 	assert_no_ppath_component_extant();
333199cc6c1Sdyoung }
334199cc6c1Sdyoung 
335199cc6c1Sdyoung ATF_TC(replace);
336199cc6c1Sdyoung 
ATF_TC_HEAD(replace,tc)337199cc6c1Sdyoung ATF_TC_HEAD(replace, tc)
338199cc6c1Sdyoung {
339199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check that ppath_replace_idx() "
340199cc6c1Sdyoung 	    "and ppath_replace_key() produce the paths we expect without "
341199cc6c1Sdyoung 	    "leaking resources.");
342199cc6c1Sdyoung }
343199cc6c1Sdyoung 
ATF_TC_BODY(replace,tc)344199cc6c1Sdyoung ATF_TC_BODY(replace, tc)
345199cc6c1Sdyoung {
346199cc6c1Sdyoung 	ppath_component_t *pc;
347199cc6c1Sdyoung 	ppath_t *p, *cp, *rp;
348199cc6c1Sdyoung 	unsigned int i;
349199cc6c1Sdyoung 
350199cc6c1Sdyoung 	assert_no_ppath_extant();
351199cc6c1Sdyoung 	assert_no_ppath_component_extant();
352199cc6c1Sdyoung 
353199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
354199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
355199cc6c1Sdyoung 
356199cc6c1Sdyoung 	/* index replacement fails on an empty path */
357199cc6c1Sdyoung 	rp = ppath_replace_idx(p, 0);
358199cc6c1Sdyoung 	ATF_CHECK_EQ(rp, NULL);
359199cc6c1Sdyoung 
360199cc6c1Sdyoung 	/* key replacement fails on an empty path */
361199cc6c1Sdyoung 	rp = ppath_replace_key(p, "key");
362199cc6c1Sdyoung 	ATF_CHECK_EQ(rp, NULL);
363199cc6c1Sdyoung 
364199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS; i++) {
365199cc6c1Sdyoung 		if ((pc = ppath_idx(i)) == NULL)
366199cc6c1Sdyoung 			atf_tc_fail("ppath_idx failed");
367199cc6c1Sdyoung 		rp = ppath_push(p, pc);
368199cc6c1Sdyoung 		ppath_component_release(pc);
369199cc6c1Sdyoung 		ATF_CHECK_EQ(rp, p);
370199cc6c1Sdyoung 	}
371199cc6c1Sdyoung 
372199cc6c1Sdyoung 	if ((cp = ppath_copy(p)) == NULL)
373199cc6c1Sdyoung 		atf_tc_fail("ppath_copy failed");
374199cc6c1Sdyoung 
375199cc6c1Sdyoung 	rp = ppath_pop(cp, NULL);
376199cc6c1Sdyoung 	ATF_CHECK_EQ(rp, cp);
377199cc6c1Sdyoung 	rp = ppath_push_key(cp, "key");
378199cc6c1Sdyoung 	ATF_CHECK_EQ(rp, cp);
379199cc6c1Sdyoung 
380199cc6c1Sdyoung 	ppath_replace_idx(p, 0);
381199cc6c1Sdyoung 
382199cc6c1Sdyoung 	if ((pc = ppath_component_at(p, PPATH_MAX_COMPONENTS - 1)) == NULL)
383199cc6c1Sdyoung 		atf_tc_fail("ppath_idx failed");
384199cc6c1Sdyoung 	ATF_CHECK_EQ(ppath_component_idx(pc), 0);
385199cc6c1Sdyoung 	ppath_component_release(pc);
386199cc6c1Sdyoung 
387199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS - 1; i++) {
388199cc6c1Sdyoung 		if ((pc = ppath_component_at(p, i)) == NULL)
389199cc6c1Sdyoung 			atf_tc_fail("ppath_idx failed");
390199cc6c1Sdyoung 		ATF_CHECK_EQ(ppath_component_idx(pc), (int)i);
391199cc6c1Sdyoung 		ppath_component_release(pc);
392199cc6c1Sdyoung 	}
393199cc6c1Sdyoung 
394199cc6c1Sdyoung 	for (i = 0; i < PPATH_MAX_COMPONENTS - 1; i++) {
395199cc6c1Sdyoung 		if ((pc = ppath_component_at(cp, i)) == NULL)
396199cc6c1Sdyoung 			atf_tc_fail("ppath_idx failed");
397199cc6c1Sdyoung 		ATF_CHECK_EQ(ppath_component_idx(pc), (int)i);
398199cc6c1Sdyoung 		ppath_component_release(pc);
399199cc6c1Sdyoung 	}
400199cc6c1Sdyoung 
401199cc6c1Sdyoung 	if ((pc = ppath_component_at(cp, PPATH_MAX_COMPONENTS - 1)) == NULL)
402199cc6c1Sdyoung 		atf_tc_fail("ppath_idx failed");
403199cc6c1Sdyoung 	if (ppath_component_key(pc) == NULL ||
404199cc6c1Sdyoung 	    strcmp(ppath_component_key(pc), "key") != 0)
405199cc6c1Sdyoung 		atf_tc_fail("last path component expected to be \"key\"");
406199cc6c1Sdyoung 	ppath_component_release(pc);
407199cc6c1Sdyoung 	ppath_release(p);
408199cc6c1Sdyoung 	ppath_release(cp);
409199cc6c1Sdyoung 
410199cc6c1Sdyoung 	assert_no_ppath_extant();
411199cc6c1Sdyoung 	assert_no_ppath_component_extant();
412199cc6c1Sdyoung }
413199cc6c1Sdyoung 
414199cc6c1Sdyoung ATF_TC(copyset_object_twice_success);
415199cc6c1Sdyoung 
ATF_TC_HEAD(copyset_object_twice_success,tc)416199cc6c1Sdyoung ATF_TC_HEAD(copyset_object_twice_success, tc)
417199cc6c1Sdyoung {
418199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr",
419199cc6c1Sdyoung 	    "check that after back-to-back ppath_copyset_object() calls, "
420199cc6c1Sdyoung 	    "changing the \"u.s. citizen\" property and the first property "
421199cc6c1Sdyoung 	    "in \"children\" in the \"John Doe\" record in the "
422199cc6c1Sdyoung 	    "\"personnel\" property list, the properties are changed "
423199cc6c1Sdyoung 	    "in the new dictionary and unchanged in the old dictionary");
424199cc6c1Sdyoung }
425199cc6c1Sdyoung 
ATF_TC_BODY(copyset_object_twice_success,tc)426199cc6c1Sdyoung ATF_TC_BODY(copyset_object_twice_success, tc)
427199cc6c1Sdyoung {
428199cc6c1Sdyoung 	const char *s;
429199cc6c1Sdyoung 	char *oext, *next;
430199cc6c1Sdyoung 	int rc;
431199cc6c1Sdyoung 	bool v = false;
432199cc6c1Sdyoung 	prop_dictionary_t d, od;
433199cc6c1Sdyoung 	prop_object_t nd = NULL, ond;
434199cc6c1Sdyoung 	prop_object_t r, or;
435199cc6c1Sdyoung 	ppath_t *p, *p2, *p3;
436199cc6c1Sdyoung 
437199cc6c1Sdyoung 	assert_no_ppath_extant();
438199cc6c1Sdyoung 	assert_no_ppath_component_extant();
439199cc6c1Sdyoung 
440199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
441199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
442199cc6c1Sdyoung 	od = prop_dictionary_copy(d);
443199cc6c1Sdyoung 
444199cc6c1Sdyoung 	if (!dictionary_equals(od, d)) {
445199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
446199cc6c1Sdyoung 		next = prop_dictionary_externalize(d);
447199cc6c1Sdyoung 		atf_tc_fail("dictionaries are unequal from the outset, argh! "
448199cc6c1Sdyoung 		    "original\n%s\nnew\n%s", oext, next);
449199cc6c1Sdyoung 		free(oext);
450199cc6c1Sdyoung 		free(next);
451199cc6c1Sdyoung 	}
452199cc6c1Sdyoung 
453199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL || (p2 = ppath_create()) == NULL ||
454199cc6c1Sdyoung 	    (p3 = ppath_create()) == NULL)
455199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
456199cc6c1Sdyoung 
457199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
458199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
459199cc6c1Sdyoung 	if (ppath_push_key(p, "u.s. citizen") == NULL)
460199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
461199cc6c1Sdyoung 
462199cc6c1Sdyoung 	if (ppath_push_key(p2, "John Doe") == NULL)
463199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
464199cc6c1Sdyoung 	if (ppath_push_key(p2, "children") == NULL)
465199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
466199cc6c1Sdyoung 	if (ppath_push_idx(p2, 0) == NULL)
467199cc6c1Sdyoung 		atf_tc_fail("ppath_push_idx failed");
468199cc6c1Sdyoung 
469199cc6c1Sdyoung 	if (ppath_push_key(p3, "John Doe") == NULL)
470199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
471199cc6c1Sdyoung 
472199cc6c1Sdyoung 	v = false;
473199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
474199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
475199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
476199cc6c1Sdyoung 
477199cc6c1Sdyoung 	s = "";
478199cc6c1Sdyoung 	rc = ppath_get_string(d, p2, &s);
479199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
480199cc6c1Sdyoung 	ATF_CHECK_STREQ(s, "Jane Doe");
481199cc6c1Sdyoung 
482199cc6c1Sdyoung 	rc = ppath_copyset_bool(d, &nd, p, false);
483199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
484199cc6c1Sdyoung 
485199cc6c1Sdyoung 	rc = ppath_get_object(nd, p3, &r);
486199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
487199cc6c1Sdyoung 
488199cc6c1Sdyoung 	ond = nd;
489199cc6c1Sdyoung 
490199cc6c1Sdyoung 	rc = ppath_copyset_string(d, &nd, p2, "Martha Doe");
491199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
492199cc6c1Sdyoung 
493199cc6c1Sdyoung 	ATF_CHECK_EQ(nd, ond);
494199cc6c1Sdyoung 
495199cc6c1Sdyoung 	rc = ppath_get_object(nd, p3, &or);
496199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
497199cc6c1Sdyoung 
498199cc6c1Sdyoung 	ATF_CHECK_EQ(r, or);
499199cc6c1Sdyoung 
500199cc6c1Sdyoung 	v = true;
501199cc6c1Sdyoung 	rc = ppath_get_bool(nd, p, &v);
502199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
503199cc6c1Sdyoung 	ATF_CHECK_EQ(v, false);
504199cc6c1Sdyoung 
505199cc6c1Sdyoung 	s = "";
506199cc6c1Sdyoung 	rc = ppath_get_string(nd, p2, &s);
507199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
508199cc6c1Sdyoung 	ATF_CHECK_STREQ(s, "Martha Doe");
509199cc6c1Sdyoung 
510199cc6c1Sdyoung 	if (!dictionary_equals(od, d)) {
511199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
512199cc6c1Sdyoung 		next = prop_dictionary_externalize(d);
513199cc6c1Sdyoung 		atf_tc_fail("copydel modified original dictionary, "
514199cc6c1Sdyoung 		    "original\n%s\nnew\n%s", oext, next);
515199cc6c1Sdyoung 		free(oext);
516199cc6c1Sdyoung 		free(next);
517199cc6c1Sdyoung 	}
518199cc6c1Sdyoung 
519199cc6c1Sdyoung 	if (dictionary_equals(od, nd)) {
520199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
521199cc6c1Sdyoung 		next = prop_dictionary_externalize(nd);
522199cc6c1Sdyoung 		atf_tc_fail("copydel made no change to the new "
523199cc6c1Sdyoung 		    "dictionary, original\n%s\nnew\n%s", oext, next);
524199cc6c1Sdyoung 		free(oext);
525199cc6c1Sdyoung 		free(next);
526199cc6c1Sdyoung 	}
527199cc6c1Sdyoung 
528199cc6c1Sdyoung 	rc = ppath_set_bool(od, p, false);
529199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
530199cc6c1Sdyoung 
531199cc6c1Sdyoung 	rc = ppath_set_string(od, p2, "Martha Doe");
532199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
533199cc6c1Sdyoung 
534199cc6c1Sdyoung 	if (!dictionary_equals(od, nd)) {
535199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
536199cc6c1Sdyoung 		next = prop_dictionary_externalize(nd);
537199cc6c1Sdyoung 		atf_tc_fail("copydel made an out-of-bounds change to the new "
538199cc6c1Sdyoung 		    "dictionary, original\n%s\nnew\n%s", oext, next);
539199cc6c1Sdyoung 		free(oext);
540199cc6c1Sdyoung 		free(next);
541199cc6c1Sdyoung 	}
542199cc6c1Sdyoung 
543199cc6c1Sdyoung 	ppath_release(p);
544199cc6c1Sdyoung 	ppath_release(p2);
545199cc6c1Sdyoung 	ppath_release(p3);
546199cc6c1Sdyoung 	prop_object_release(d);
547199cc6c1Sdyoung 	prop_object_release(od);
548199cc6c1Sdyoung 	prop_object_release(nd);
549199cc6c1Sdyoung 	assert_no_ppath_extant();
550199cc6c1Sdyoung 	assert_no_ppath_component_extant();
551199cc6c1Sdyoung }
552199cc6c1Sdyoung 
553199cc6c1Sdyoung ATF_TC(copydel_object_twice_success);
554199cc6c1Sdyoung 
ATF_TC_HEAD(copydel_object_twice_success,tc)555199cc6c1Sdyoung ATF_TC_HEAD(copydel_object_twice_success, tc)
556199cc6c1Sdyoung {
557199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr",
558199cc6c1Sdyoung 	    "check that after back-to-back ppath_copydel_object() calls, "
559199cc6c1Sdyoung 	    "removing the \"u.s. citizen\" property and the first property "
560199cc6c1Sdyoung 	    "in \"children\" from the \"John Doe\" record in the "
561199cc6c1Sdyoung 	    "\"personnel\" property list, the properties are missing "
562199cc6c1Sdyoung 	    "from the new dictionary and unchanged in the old dictionary");
563199cc6c1Sdyoung }
564199cc6c1Sdyoung 
ATF_TC_BODY(copydel_object_twice_success,tc)565199cc6c1Sdyoung ATF_TC_BODY(copydel_object_twice_success, tc)
566199cc6c1Sdyoung {
567199cc6c1Sdyoung 	const char *s;
568199cc6c1Sdyoung 	char *oext, *next;
569199cc6c1Sdyoung 	int rc;
570199cc6c1Sdyoung 	bool v = false;
571199cc6c1Sdyoung 	prop_dictionary_t d, od;
572199cc6c1Sdyoung 	prop_object_t nd = NULL, ond;
573199cc6c1Sdyoung 	prop_object_t r, or;
574199cc6c1Sdyoung 	ppath_t *p, *p2, *p3;
575199cc6c1Sdyoung 
576199cc6c1Sdyoung 	assert_no_ppath_extant();
577199cc6c1Sdyoung 	assert_no_ppath_component_extant();
578199cc6c1Sdyoung 
579199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
580199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
581199cc6c1Sdyoung 	od = prop_dictionary_copy(d);
582199cc6c1Sdyoung 
583199cc6c1Sdyoung 	if (!dictionary_equals(od, d)) {
584199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
585199cc6c1Sdyoung 		next = prop_dictionary_externalize(d);
586199cc6c1Sdyoung 		atf_tc_fail("dictionaries are unequal from the outset, argh! "
587199cc6c1Sdyoung 		    "original\n%s\nnew\n%s", oext, next);
588199cc6c1Sdyoung 		free(oext);
589199cc6c1Sdyoung 		free(next);
590199cc6c1Sdyoung 	}
591199cc6c1Sdyoung 
592199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL || (p2 = ppath_create()) == NULL ||
593199cc6c1Sdyoung 	    (p3 = ppath_create()) == NULL)
594199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
595199cc6c1Sdyoung 
596199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
597199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
598199cc6c1Sdyoung 	if (ppath_push_key(p, "u.s. citizen") == NULL)
599199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
600199cc6c1Sdyoung 
601199cc6c1Sdyoung 	if (ppath_push_key(p2, "John Doe") == NULL)
602199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
603199cc6c1Sdyoung 	if (ppath_push_key(p2, "children") == NULL)
604199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
605199cc6c1Sdyoung 	if (ppath_push_idx(p2, 0) == NULL)
606199cc6c1Sdyoung 		atf_tc_fail("ppath_push_idx failed");
607199cc6c1Sdyoung 
608199cc6c1Sdyoung 	if (ppath_push_key(p3, "John Doe") == NULL)
609199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
610199cc6c1Sdyoung 
611199cc6c1Sdyoung 	v = false;
612199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
613199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
614199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
615199cc6c1Sdyoung 
616199cc6c1Sdyoung 	s = "";
617199cc6c1Sdyoung 	rc = ppath_get_string(d, p2, &s);
618199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
619199cc6c1Sdyoung 	ATF_CHECK_STREQ(s, "Jane Doe");
620199cc6c1Sdyoung 
621199cc6c1Sdyoung 	rc = ppath_copydel_bool(d, &nd, p);
622199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
623199cc6c1Sdyoung 
624199cc6c1Sdyoung 	ond = nd;
625199cc6c1Sdyoung 
626199cc6c1Sdyoung 	rc = ppath_get_object(nd, p3, &r);
627199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
628199cc6c1Sdyoung 
629199cc6c1Sdyoung 	rc = ppath_copydel_string(d, &nd, p2);
630199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
631199cc6c1Sdyoung 
632199cc6c1Sdyoung 	ATF_CHECK_EQ(nd, ond);
633199cc6c1Sdyoung 
634199cc6c1Sdyoung 	rc = ppath_get_object(nd, p3, &or);
635199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
636199cc6c1Sdyoung 
637199cc6c1Sdyoung 	ATF_CHECK_EQ(r, or);
638199cc6c1Sdyoung 
639199cc6c1Sdyoung 	v = true;
640199cc6c1Sdyoung 	rc = ppath_get_bool(nd, p, &v);
641199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
642199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
643199cc6c1Sdyoung 
644199cc6c1Sdyoung 	if (!dictionary_equals(od, d)) {
645199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
646199cc6c1Sdyoung 		next = prop_dictionary_externalize(d);
647199cc6c1Sdyoung 		atf_tc_fail("copydel modified original dictionary, "
648199cc6c1Sdyoung 		    "original\n%s\nnew\n%s", oext, next);
649199cc6c1Sdyoung 		free(oext);
650199cc6c1Sdyoung 		free(next);
651199cc6c1Sdyoung 	}
652199cc6c1Sdyoung 
653199cc6c1Sdyoung 	if (dictionary_equals(od, nd)) {
654199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
655199cc6c1Sdyoung 		next = prop_dictionary_externalize(nd);
656199cc6c1Sdyoung 		atf_tc_fail("copydel made no change to the new "
657199cc6c1Sdyoung 		    "dictionary, original\n%s\nnew\n%s", oext, next);
658199cc6c1Sdyoung 		free(oext);
659199cc6c1Sdyoung 		free(next);
660199cc6c1Sdyoung 	}
661199cc6c1Sdyoung 
662199cc6c1Sdyoung 	rc = ppath_delete_bool(od, p);
663199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
664199cc6c1Sdyoung 
665199cc6c1Sdyoung 	rc = ppath_delete_string(od, p2);
666199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
667199cc6c1Sdyoung 
668199cc6c1Sdyoung 	if (!dictionary_equals(od, nd)) {
669199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
670199cc6c1Sdyoung 		next = prop_dictionary_externalize(nd);
671199cc6c1Sdyoung 		atf_tc_fail("copydel made an out-of-bounds change to the new "
672199cc6c1Sdyoung 		    "dictionary, original\n%s\nnew\n%s", oext, next);
673199cc6c1Sdyoung 		free(oext);
674199cc6c1Sdyoung 		free(next);
675199cc6c1Sdyoung 	}
676199cc6c1Sdyoung 
677199cc6c1Sdyoung 	ppath_release(p);
678199cc6c1Sdyoung 	ppath_release(p2);
679199cc6c1Sdyoung 	ppath_release(p3);
680199cc6c1Sdyoung 	prop_object_release(d);
681199cc6c1Sdyoung 	prop_object_release(od);
682199cc6c1Sdyoung 	prop_object_release(nd);
683199cc6c1Sdyoung 	assert_no_ppath_extant();
684199cc6c1Sdyoung 	assert_no_ppath_component_extant();
685199cc6c1Sdyoung }
686199cc6c1Sdyoung 
687199cc6c1Sdyoung ATF_TC(copydel_bool_success);
688199cc6c1Sdyoung 
ATF_TC_HEAD(copydel_bool_success,tc)689199cc6c1Sdyoung ATF_TC_HEAD(copydel_bool_success, tc)
690199cc6c1Sdyoung {
691199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_copydel_bool() deletes "
692199cc6c1Sdyoung 	    "the \"u.s. citizen\" property in the \"John Doe\" record in the "
693199cc6c1Sdyoung 	    "\"personnel\" property list and verifies the value is missing "
694199cc6c1Sdyoung 	    "from the new dictionary and unchanged in the old dictionary");
695199cc6c1Sdyoung }
696199cc6c1Sdyoung 
ATF_TC_BODY(copydel_bool_success,tc)697199cc6c1Sdyoung ATF_TC_BODY(copydel_bool_success, tc)
698199cc6c1Sdyoung {
699199cc6c1Sdyoung 	char *oext, *next;
700199cc6c1Sdyoung 	int rc;
701199cc6c1Sdyoung 	bool v = false;
702199cc6c1Sdyoung 	prop_dictionary_t d, od;
703199cc6c1Sdyoung 	prop_object_t nd = NULL;
704199cc6c1Sdyoung 	ppath_t *p;
705199cc6c1Sdyoung 
706199cc6c1Sdyoung 	assert_no_ppath_extant();
707199cc6c1Sdyoung 	assert_no_ppath_component_extant();
708199cc6c1Sdyoung 
709199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
710199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
711199cc6c1Sdyoung 	od = prop_dictionary_copy(d);
712199cc6c1Sdyoung 
713199cc6c1Sdyoung 	if (!dictionary_equals(od, d)) {
714199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
715199cc6c1Sdyoung 		next = prop_dictionary_externalize(d);
716199cc6c1Sdyoung 		atf_tc_fail("dictionaries are unequal from the outset, argh! "
717199cc6c1Sdyoung 		    "original\n%s\nnew\n%s", oext, next);
718199cc6c1Sdyoung 		free(oext);
719199cc6c1Sdyoung 		free(next);
720199cc6c1Sdyoung 	}
721199cc6c1Sdyoung 
722199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
723199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
724199cc6c1Sdyoung 
725199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
726199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
727199cc6c1Sdyoung 	if (ppath_push_key(p, "u.s. citizen") == NULL)
728199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
729199cc6c1Sdyoung 
730199cc6c1Sdyoung 	v = false;
731199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
732199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
733199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
734199cc6c1Sdyoung 
735199cc6c1Sdyoung 	rc = ppath_copydel_bool(d, &nd, p);
736199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
737199cc6c1Sdyoung 
738199cc6c1Sdyoung 	v = true;
739199cc6c1Sdyoung 	rc = ppath_get_bool(nd, p, &v);
740199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
741199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
742199cc6c1Sdyoung 
743199cc6c1Sdyoung 	if (!dictionary_equals(od, d)) {
744199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
745199cc6c1Sdyoung 		next = prop_dictionary_externalize(d);
746199cc6c1Sdyoung 		atf_tc_fail("copydel modified original dictionary, "
747199cc6c1Sdyoung 		    "original\n%s\nnew\n%s", oext, next);
748199cc6c1Sdyoung 		free(oext);
749199cc6c1Sdyoung 		free(next);
750199cc6c1Sdyoung 	}
751199cc6c1Sdyoung 
752199cc6c1Sdyoung 	if (dictionary_equals(od, nd)) {
753199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
754199cc6c1Sdyoung 		next = prop_dictionary_externalize(nd);
755199cc6c1Sdyoung 		atf_tc_fail("copydel made no change to the new "
756199cc6c1Sdyoung 		    "dictionary, original\n%s\nnew\n%s", oext, next);
757199cc6c1Sdyoung 		free(oext);
758199cc6c1Sdyoung 		free(next);
759199cc6c1Sdyoung 	}
760199cc6c1Sdyoung 
761199cc6c1Sdyoung 	rc = ppath_delete_bool(od, p);
762199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
763199cc6c1Sdyoung 
764199cc6c1Sdyoung 	if (!dictionary_equals(od, nd)) {
765199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
766199cc6c1Sdyoung 		next = prop_dictionary_externalize(nd);
767199cc6c1Sdyoung 		atf_tc_fail("copydel made an out-of-bounds change to the new "
768199cc6c1Sdyoung 		    "dictionary, original\n%s\nnew\n%s", oext, next);
769199cc6c1Sdyoung 		free(oext);
770199cc6c1Sdyoung 		free(next);
771199cc6c1Sdyoung 	}
772199cc6c1Sdyoung 
773199cc6c1Sdyoung 	ppath_release(p);
774199cc6c1Sdyoung 	prop_object_release(d);
775199cc6c1Sdyoung 	prop_object_release(od);
776199cc6c1Sdyoung 	prop_object_release(nd);
777199cc6c1Sdyoung 	assert_no_ppath_extant();
778199cc6c1Sdyoung 	assert_no_ppath_component_extant();
779199cc6c1Sdyoung }
780199cc6c1Sdyoung 
781199cc6c1Sdyoung ATF_TC(copyset_bool_success);
782199cc6c1Sdyoung 
ATF_TC_HEAD(copyset_bool_success,tc)783199cc6c1Sdyoung ATF_TC_HEAD(copyset_bool_success, tc)
784199cc6c1Sdyoung {
785199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_copyset_bool() sets "
786199cc6c1Sdyoung 	    "the \"u.s. citizen\" property in the \"John Doe\" record in the "
787199cc6c1Sdyoung 	    "\"personnel\" property list to false and verifies the new value "
788199cc6c1Sdyoung 	    "in the new dictionary and that the old dictionary is unchanged");
789199cc6c1Sdyoung }
790199cc6c1Sdyoung 
ATF_TC_BODY(copyset_bool_success,tc)791199cc6c1Sdyoung ATF_TC_BODY(copyset_bool_success, tc)
792199cc6c1Sdyoung {
793199cc6c1Sdyoung 	char *oext, *next;
794199cc6c1Sdyoung 	int rc;
795199cc6c1Sdyoung 	bool v = false;
796199cc6c1Sdyoung 	prop_dictionary_t d, od;
797199cc6c1Sdyoung 	prop_object_t nd = NULL;
798199cc6c1Sdyoung 	ppath_t *p;
799199cc6c1Sdyoung 
800199cc6c1Sdyoung 	assert_no_ppath_extant();
801199cc6c1Sdyoung 	assert_no_ppath_component_extant();
802199cc6c1Sdyoung 
803199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
804199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
805199cc6c1Sdyoung 	od = prop_dictionary_copy(d);
806199cc6c1Sdyoung 
807199cc6c1Sdyoung 	if (!dictionary_equals(od, d)) {
808199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
809199cc6c1Sdyoung 		next = prop_dictionary_externalize(d);
810199cc6c1Sdyoung 		atf_tc_fail("dictionaries are unequal from the outset, argh! "
811199cc6c1Sdyoung 		    "original\n%s\nnew\n%s", oext, next);
812199cc6c1Sdyoung 		free(oext);
813199cc6c1Sdyoung 		free(next);
814199cc6c1Sdyoung 	}
815199cc6c1Sdyoung 
816199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
817199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
818199cc6c1Sdyoung 
819199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
820199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
821199cc6c1Sdyoung 	if (ppath_push_key(p, "u.s. citizen") == NULL)
822199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
823199cc6c1Sdyoung 
824199cc6c1Sdyoung 	v = false;
825199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
826199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
827199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
828199cc6c1Sdyoung 
829199cc6c1Sdyoung 	rc = ppath_copyset_bool(d, &nd, p, false);
830199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
831199cc6c1Sdyoung 
832199cc6c1Sdyoung 	v = true;
833199cc6c1Sdyoung 	rc = ppath_get_bool(nd, p, &v);
834199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
835199cc6c1Sdyoung 	ATF_CHECK_EQ(v, false);
836199cc6c1Sdyoung 
837199cc6c1Sdyoung 	if (!dictionary_equals(od, d)) {
838199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
839199cc6c1Sdyoung 		next = prop_dictionary_externalize(d);
840199cc6c1Sdyoung 		atf_tc_fail("copyset modified original dictionary, "
841199cc6c1Sdyoung 		    "original\n%s\nnew\n%s", oext, next);
842199cc6c1Sdyoung 		free(oext);
843199cc6c1Sdyoung 		free(next);
844199cc6c1Sdyoung 	}
845199cc6c1Sdyoung 
846199cc6c1Sdyoung 	if (dictionary_equals(od, nd)) {
847199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
848199cc6c1Sdyoung 		next = prop_dictionary_externalize(nd);
849199cc6c1Sdyoung 		atf_tc_fail("copyset made no change to the new "
850199cc6c1Sdyoung 		    "dictionary, original\n%s\nnew\n%s", oext, next);
851199cc6c1Sdyoung 		free(oext);
852199cc6c1Sdyoung 		free(next);
853199cc6c1Sdyoung 	}
854199cc6c1Sdyoung 
855199cc6c1Sdyoung 	rc = ppath_set_bool(nd, p, true);
856199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
857199cc6c1Sdyoung 
858199cc6c1Sdyoung 	if (!dictionary_equals(od, nd)) {
859199cc6c1Sdyoung 		oext = prop_dictionary_externalize(od);
860199cc6c1Sdyoung 		next = prop_dictionary_externalize(nd);
861199cc6c1Sdyoung 		atf_tc_fail("copyset made an out-of-bounds change to the new "
862199cc6c1Sdyoung 		    "dictionary, original\n%s\nnew\n%s", oext, next);
863199cc6c1Sdyoung 		free(oext);
864199cc6c1Sdyoung 		free(next);
865199cc6c1Sdyoung 	}
866199cc6c1Sdyoung 
867199cc6c1Sdyoung 	ppath_release(p);
868199cc6c1Sdyoung 	prop_object_release(d);
869199cc6c1Sdyoung 	prop_object_release(od);
870199cc6c1Sdyoung 	prop_object_release(nd);
871199cc6c1Sdyoung 	assert_no_ppath_extant();
872199cc6c1Sdyoung 	assert_no_ppath_component_extant();
873199cc6c1Sdyoung }
874199cc6c1Sdyoung 
875199cc6c1Sdyoung ATF_TC(set_bool_eftype);
876199cc6c1Sdyoung 
ATF_TC_HEAD(set_bool_eftype,tc)877199cc6c1Sdyoung ATF_TC_HEAD(set_bool_eftype, tc)
878199cc6c1Sdyoung {
879199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_set_bool() does not "
880199cc6c1Sdyoung 	    "overwrite with a bool "
881199cc6c1Sdyoung 	    "the \"job title\" property in the \"John Doe\" record in "
882199cc6c1Sdyoung 	    "the "
883199cc6c1Sdyoung 	    "\"personnel\" property list");
884199cc6c1Sdyoung }
885199cc6c1Sdyoung 
ATF_TC_BODY(set_bool_eftype,tc)886199cc6c1Sdyoung ATF_TC_BODY(set_bool_eftype, tc)
887199cc6c1Sdyoung {
888199cc6c1Sdyoung 	int rc;
889199cc6c1Sdyoung 	bool v = false;
890199cc6c1Sdyoung 	prop_dictionary_t d;
891199cc6c1Sdyoung 	ppath_t *p;
892199cc6c1Sdyoung 
893199cc6c1Sdyoung 	assert_no_ppath_extant();
894199cc6c1Sdyoung 	assert_no_ppath_component_extant();
895199cc6c1Sdyoung 
896199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
897199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
898199cc6c1Sdyoung 
899199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
900199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
901199cc6c1Sdyoung 
902199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
903199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
904199cc6c1Sdyoung 	if (ppath_push_key(p, "job title") == NULL)
905199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
906199cc6c1Sdyoung 
907199cc6c1Sdyoung 	v = false;
908199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
909199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, EFTYPE);
910199cc6c1Sdyoung 	ATF_CHECK_EQ(v, false);
911199cc6c1Sdyoung 
912199cc6c1Sdyoung 	rc = ppath_set_bool(d, p, false);
913199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, EFTYPE);
914199cc6c1Sdyoung 
915199cc6c1Sdyoung 	v = true;
916199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
917199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, EFTYPE);
918199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
919199cc6c1Sdyoung 
920199cc6c1Sdyoung 	ppath_release(p);
921199cc6c1Sdyoung 	prop_object_release(d);
922199cc6c1Sdyoung 	assert_no_ppath_extant();
923199cc6c1Sdyoung 	assert_no_ppath_component_extant();
924199cc6c1Sdyoung }
925199cc6c1Sdyoung 
926199cc6c1Sdyoung ATF_TC(set_bool_enoent);
927199cc6c1Sdyoung 
ATF_TC_HEAD(set_bool_enoent,tc)928199cc6c1Sdyoung ATF_TC_HEAD(set_bool_enoent, tc)
929199cc6c1Sdyoung {
930199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_set_bool() does not create "
931199cc6c1Sdyoung 	    "the \"russian citizen\" property in the \"John Doe\" record in "
932199cc6c1Sdyoung 	    "the "
933199cc6c1Sdyoung 	    "\"personnel\" property list");
934199cc6c1Sdyoung }
935199cc6c1Sdyoung 
ATF_TC_BODY(set_bool_enoent,tc)936199cc6c1Sdyoung ATF_TC_BODY(set_bool_enoent, tc)
937199cc6c1Sdyoung {
938199cc6c1Sdyoung 	int rc;
939199cc6c1Sdyoung 	bool v = false;
940199cc6c1Sdyoung 	prop_dictionary_t d;
941199cc6c1Sdyoung 	ppath_t *p;
942199cc6c1Sdyoung 
943199cc6c1Sdyoung 	assert_no_ppath_extant();
944199cc6c1Sdyoung 	assert_no_ppath_component_extant();
945199cc6c1Sdyoung 
946199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
947199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
948199cc6c1Sdyoung 
949199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
950199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
951199cc6c1Sdyoung 
952199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
953199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
954199cc6c1Sdyoung 	if (ppath_push_key(p, "russian citizen") == NULL)
955199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
956199cc6c1Sdyoung 
957199cc6c1Sdyoung 	v = false;
958199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
959199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
960199cc6c1Sdyoung 	ATF_CHECK_EQ(v, false);
961199cc6c1Sdyoung 
962199cc6c1Sdyoung 	rc = ppath_set_bool(d, p, false);
963199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
964199cc6c1Sdyoung 
965199cc6c1Sdyoung 	v = true;
966199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
967199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
968199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
969199cc6c1Sdyoung 
970199cc6c1Sdyoung 	ppath_release(p);
971199cc6c1Sdyoung 	prop_object_release(d);
972199cc6c1Sdyoung 	assert_no_ppath_extant();
973199cc6c1Sdyoung 	assert_no_ppath_component_extant();
974199cc6c1Sdyoung }
975199cc6c1Sdyoung 
976199cc6c1Sdyoung ATF_TC(create_bool_eexist);
977199cc6c1Sdyoung 
ATF_TC_HEAD(create_bool_eexist,tc)978199cc6c1Sdyoung ATF_TC_HEAD(create_bool_eexist, tc)
979199cc6c1Sdyoung {
980199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_create_bool() returns "
981199cc6c1Sdyoung 	    "EEXIST because the \"u.s. citizen\" property in the "
982199cc6c1Sdyoung 	    "\"John Doe\" record in the \"personnel\" property list "
983199cc6c1Sdyoung 	    "already exists");
984199cc6c1Sdyoung }
985199cc6c1Sdyoung 
ATF_TC_BODY(create_bool_eexist,tc)986199cc6c1Sdyoung ATF_TC_BODY(create_bool_eexist, tc)
987199cc6c1Sdyoung {
988199cc6c1Sdyoung 	int rc;
989199cc6c1Sdyoung 	bool v = false;
990199cc6c1Sdyoung 	prop_dictionary_t d;
991199cc6c1Sdyoung 	ppath_t *p;
992199cc6c1Sdyoung 
993199cc6c1Sdyoung 	assert_no_ppath_extant();
994199cc6c1Sdyoung 	assert_no_ppath_component_extant();
995199cc6c1Sdyoung 
996199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
997199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
998199cc6c1Sdyoung 
999199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1000199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1001199cc6c1Sdyoung 
1002199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1003199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1004199cc6c1Sdyoung 	if (ppath_push_key(p, "u.s. citizen") == NULL)
1005199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1006199cc6c1Sdyoung 
1007199cc6c1Sdyoung 	v = false;
1008199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1009199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1010199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
1011199cc6c1Sdyoung 
1012199cc6c1Sdyoung 	rc = ppath_create_bool(d, p, false);
1013199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, EEXIST);
1014199cc6c1Sdyoung 
1015199cc6c1Sdyoung 	v = false;
1016199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1017199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1018199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
1019199cc6c1Sdyoung 
1020199cc6c1Sdyoung 	ppath_release(p);
1021199cc6c1Sdyoung 	prop_object_release(d);
1022199cc6c1Sdyoung 	assert_no_ppath_extant();
1023199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1024199cc6c1Sdyoung }
1025199cc6c1Sdyoung 
1026199cc6c1Sdyoung ATF_TC(create_bool_success);
1027199cc6c1Sdyoung 
ATF_TC_HEAD(create_bool_success,tc)1028199cc6c1Sdyoung ATF_TC_HEAD(create_bool_success, tc)
1029199cc6c1Sdyoung {
1030199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_create_bool() creates "
1031199cc6c1Sdyoung 	    "the \"russian citizen\" property in the \"John Doe\" record in "
1032199cc6c1Sdyoung 	    "the \"personnel\" property list and sets it to false");
1033199cc6c1Sdyoung }
1034199cc6c1Sdyoung 
ATF_TC_BODY(create_bool_success,tc)1035199cc6c1Sdyoung ATF_TC_BODY(create_bool_success, tc)
1036199cc6c1Sdyoung {
1037199cc6c1Sdyoung 	int rc;
1038199cc6c1Sdyoung 	bool v = false;
1039199cc6c1Sdyoung 	prop_dictionary_t d;
1040199cc6c1Sdyoung 	ppath_t *p;
1041199cc6c1Sdyoung 
1042199cc6c1Sdyoung 	assert_no_ppath_extant();
1043199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1044199cc6c1Sdyoung 
1045199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1046199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1047199cc6c1Sdyoung 
1048199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1049199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1050199cc6c1Sdyoung 
1051199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1052199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1053199cc6c1Sdyoung 	if (ppath_push_key(p, "russian citizen") == NULL)
1054199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1055199cc6c1Sdyoung 
1056199cc6c1Sdyoung 	v = false;
1057199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1058199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
1059199cc6c1Sdyoung 	ATF_CHECK_EQ(v, false);
1060199cc6c1Sdyoung 
1061199cc6c1Sdyoung 	rc = ppath_create_bool(d, p, false);
1062199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1063199cc6c1Sdyoung 
1064199cc6c1Sdyoung 	v = true;
1065199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1066199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1067199cc6c1Sdyoung 	ATF_CHECK_EQ(v, false);
1068199cc6c1Sdyoung 
1069199cc6c1Sdyoung 	ppath_release(p);
1070199cc6c1Sdyoung 	prop_object_release(d);
1071199cc6c1Sdyoung 	assert_no_ppath_extant();
1072199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1073199cc6c1Sdyoung }
1074199cc6c1Sdyoung 
1075199cc6c1Sdyoung ATF_TC(set_bool_success);
1076199cc6c1Sdyoung 
ATF_TC_HEAD(set_bool_success,tc)1077199cc6c1Sdyoung ATF_TC_HEAD(set_bool_success, tc)
1078199cc6c1Sdyoung {
1079199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_set_bool() sets "
1080199cc6c1Sdyoung 	    "the \"u.s. citizen\" property in the \"John Doe\" record in the "
1081199cc6c1Sdyoung 	    "\"personnel\" property list to false and verifies the new value");
1082199cc6c1Sdyoung }
1083199cc6c1Sdyoung 
ATF_TC_BODY(set_bool_success,tc)1084199cc6c1Sdyoung ATF_TC_BODY(set_bool_success, tc)
1085199cc6c1Sdyoung {
1086199cc6c1Sdyoung 	int rc;
1087199cc6c1Sdyoung 	bool v = false;
1088199cc6c1Sdyoung 	prop_dictionary_t d;
1089199cc6c1Sdyoung 	ppath_t *p;
1090199cc6c1Sdyoung 
1091199cc6c1Sdyoung 	assert_no_ppath_extant();
1092199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1093199cc6c1Sdyoung 
1094199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1095199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1096199cc6c1Sdyoung 
1097199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1098199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1099199cc6c1Sdyoung 
1100199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1101199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1102199cc6c1Sdyoung 	if (ppath_push_key(p, "u.s. citizen") == NULL)
1103199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1104199cc6c1Sdyoung 
1105199cc6c1Sdyoung 	v = false;
1106199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1107199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1108199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
1109199cc6c1Sdyoung 
1110199cc6c1Sdyoung 	rc = ppath_set_bool(d, p, v);
1111199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1112199cc6c1Sdyoung 
1113199cc6c1Sdyoung 	v = true;
1114199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1115199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1116199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
1117199cc6c1Sdyoung 
1118199cc6c1Sdyoung 	ppath_release(p);
1119199cc6c1Sdyoung 	prop_object_release(d);
1120199cc6c1Sdyoung 	assert_no_ppath_extant();
1121199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1122199cc6c1Sdyoung }
1123199cc6c1Sdyoung 
1124199cc6c1Sdyoung ATF_TC(get_bool_success);
1125199cc6c1Sdyoung 
ATF_TC_HEAD(get_bool_success,tc)1126199cc6c1Sdyoung ATF_TC_HEAD(get_bool_success, tc)
1127199cc6c1Sdyoung {
1128199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_get_bool() fetches "
1129199cc6c1Sdyoung 	    "the \"u.s. citizen\" property from the \"John Doe\" record in the "
1130199cc6c1Sdyoung 	    "\"personnel\" property list, and compares it with the expected "
1131199cc6c1Sdyoung 	    "value, true");
1132199cc6c1Sdyoung }
1133199cc6c1Sdyoung 
ATF_TC_BODY(get_bool_success,tc)1134199cc6c1Sdyoung ATF_TC_BODY(get_bool_success, tc)
1135199cc6c1Sdyoung {
1136199cc6c1Sdyoung 	int rc;
1137199cc6c1Sdyoung 	bool v = false;
1138199cc6c1Sdyoung 	prop_dictionary_t d;
1139199cc6c1Sdyoung 	ppath_t *p;
1140199cc6c1Sdyoung 
1141199cc6c1Sdyoung 	assert_no_ppath_extant();
1142199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1143199cc6c1Sdyoung 
1144199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1145199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1146199cc6c1Sdyoung 
1147199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1148199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1149199cc6c1Sdyoung 
1150199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1151199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1152199cc6c1Sdyoung 	if (ppath_push_key(p, "u.s. citizen") == NULL)
1153199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1154199cc6c1Sdyoung 
1155199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1156199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1157199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
1158199cc6c1Sdyoung 
1159199cc6c1Sdyoung 	ppath_release(p);
1160199cc6c1Sdyoung 	prop_object_release(d);
1161199cc6c1Sdyoung 	assert_no_ppath_extant();
1162199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1163199cc6c1Sdyoung }
1164199cc6c1Sdyoung 
1165199cc6c1Sdyoung ATF_TC(delete_bool_success);
1166199cc6c1Sdyoung 
ATF_TC_HEAD(delete_bool_success,tc)1167199cc6c1Sdyoung ATF_TC_HEAD(delete_bool_success, tc)
1168199cc6c1Sdyoung {
1169199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_delete_bool() succeeds "
1170199cc6c1Sdyoung 	    "for the path (\"John Doe\", \"u.s. citizen\") in the "
1171199cc6c1Sdyoung 	    "\"personnel\" property list");
1172199cc6c1Sdyoung }
1173199cc6c1Sdyoung 
ATF_TC_BODY(delete_bool_success,tc)1174199cc6c1Sdyoung ATF_TC_BODY(delete_bool_success, tc)
1175199cc6c1Sdyoung {
1176199cc6c1Sdyoung 	int rc;
1177199cc6c1Sdyoung 	prop_dictionary_t d;
1178199cc6c1Sdyoung 	ppath_t *p;
1179199cc6c1Sdyoung 
1180199cc6c1Sdyoung 	assert_no_ppath_extant();
1181199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1182199cc6c1Sdyoung 
1183199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1184199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1185199cc6c1Sdyoung 
1186199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1187199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1188199cc6c1Sdyoung 
1189199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1190199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1191199cc6c1Sdyoung 	if (ppath_push_key(p, "u.s. citizen") == NULL)
1192199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1193199cc6c1Sdyoung 
1194199cc6c1Sdyoung 	rc = ppath_delete_bool(d, p);
1195199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1196199cc6c1Sdyoung 
1197199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, NULL);
1198199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
1199199cc6c1Sdyoung 
1200199cc6c1Sdyoung 	ppath_release(p);
1201199cc6c1Sdyoung 	prop_object_release(d);
1202199cc6c1Sdyoung 	assert_no_ppath_extant();
1203199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1204199cc6c1Sdyoung }
1205199cc6c1Sdyoung 
1206199cc6c1Sdyoung ATF_TC(delete_bool_eftype);
1207199cc6c1Sdyoung 
ATF_TC_HEAD(delete_bool_eftype,tc)1208199cc6c1Sdyoung ATF_TC_HEAD(delete_bool_eftype, tc)
1209199cc6c1Sdyoung {
1210199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_delete_bool() returns "
1211199cc6c1Sdyoung 	    "EFTYPE for the path (\"John Doe\", \"job title\") in the "
1212199cc6c1Sdyoung 	    "\"personnel\" property list and does not delete the path");
1213199cc6c1Sdyoung }
1214199cc6c1Sdyoung 
ATF_TC_BODY(delete_bool_eftype,tc)1215199cc6c1Sdyoung ATF_TC_BODY(delete_bool_eftype, tc)
1216199cc6c1Sdyoung {
1217199cc6c1Sdyoung 	int rc;
1218199cc6c1Sdyoung 	prop_dictionary_t d;
1219199cc6c1Sdyoung 	ppath_t *p;
1220199cc6c1Sdyoung 
1221199cc6c1Sdyoung 	assert_no_ppath_extant();
1222199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1223199cc6c1Sdyoung 
1224199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1225199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1226199cc6c1Sdyoung 
1227199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1228199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1229199cc6c1Sdyoung 
1230199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1231199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1232199cc6c1Sdyoung 	if (ppath_push_key(p, "job title") == NULL)
1233199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1234199cc6c1Sdyoung 
1235199cc6c1Sdyoung 	rc = ppath_delete_bool(d, p);
1236199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, EFTYPE);
1237199cc6c1Sdyoung 
1238199cc6c1Sdyoung 	rc = ppath_get_object(d, p, NULL);
1239199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1240199cc6c1Sdyoung 
1241199cc6c1Sdyoung 	ppath_release(p);
1242199cc6c1Sdyoung 	prop_object_release(d);
1243199cc6c1Sdyoung 	assert_no_ppath_extant();
1244199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1245199cc6c1Sdyoung }
1246199cc6c1Sdyoung 
1247199cc6c1Sdyoung ATF_TC(delete_bool_enoent);
1248199cc6c1Sdyoung 
ATF_TC_HEAD(delete_bool_enoent,tc)1249199cc6c1Sdyoung ATF_TC_HEAD(delete_bool_enoent, tc)
1250199cc6c1Sdyoung {
1251199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_delete_bool() returns "
1252199cc6c1Sdyoung 	    "ENOENT for the path (\"John Doe\", \"citizen\") in the "
1253199cc6c1Sdyoung 	    "\"personnel\" property list");
1254199cc6c1Sdyoung }
1255199cc6c1Sdyoung 
ATF_TC_BODY(delete_bool_enoent,tc)1256199cc6c1Sdyoung ATF_TC_BODY(delete_bool_enoent, tc)
1257199cc6c1Sdyoung {
1258199cc6c1Sdyoung 	int rc;
1259199cc6c1Sdyoung 	prop_dictionary_t d;
1260199cc6c1Sdyoung 	ppath_t *p;
1261199cc6c1Sdyoung 
1262199cc6c1Sdyoung 	assert_no_ppath_extant();
1263199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1264199cc6c1Sdyoung 
1265199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1266199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1267199cc6c1Sdyoung 
1268199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1269199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1270199cc6c1Sdyoung 
1271199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1272199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1273199cc6c1Sdyoung 	if (ppath_push_key(p, "citizen") == NULL)
1274199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1275199cc6c1Sdyoung 
1276199cc6c1Sdyoung 	rc = ppath_delete_bool(d, p);
1277199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
1278199cc6c1Sdyoung 
1279199cc6c1Sdyoung 	ppath_release(p);
1280199cc6c1Sdyoung 	prop_object_release(d);
1281199cc6c1Sdyoung 	assert_no_ppath_extant();
1282199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1283199cc6c1Sdyoung }
1284199cc6c1Sdyoung 
1285199cc6c1Sdyoung ATF_TC(get_bool_enoent);
1286199cc6c1Sdyoung 
ATF_TC_HEAD(get_bool_enoent,tc)1287199cc6c1Sdyoung ATF_TC_HEAD(get_bool_enoent, tc)
1288199cc6c1Sdyoung {
1289199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_get_bool() returns "
1290199cc6c1Sdyoung 	    "ENOENT for the path (\"John Doe\", \"citizen\") in the "
1291199cc6c1Sdyoung 	    "\"personnel\" property list, and the bool * argument is "
1292199cc6c1Sdyoung 	    "unchanged");
1293199cc6c1Sdyoung }
1294199cc6c1Sdyoung 
ATF_TC_BODY(get_bool_enoent,tc)1295199cc6c1Sdyoung ATF_TC_BODY(get_bool_enoent, tc)
1296199cc6c1Sdyoung {
1297199cc6c1Sdyoung 	int rc;
1298199cc6c1Sdyoung 	bool v;
1299199cc6c1Sdyoung 	prop_dictionary_t d;
1300199cc6c1Sdyoung 	ppath_t *p;
1301199cc6c1Sdyoung 
1302199cc6c1Sdyoung 	assert_no_ppath_extant();
1303199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1304199cc6c1Sdyoung 
1305199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1306199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1307199cc6c1Sdyoung 
1308199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1309199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1310199cc6c1Sdyoung 
1311199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1312199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1313199cc6c1Sdyoung 	if (ppath_push_key(p, "citizen") == NULL)
1314199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1315199cc6c1Sdyoung 
1316199cc6c1Sdyoung 	v = true;
1317199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1318199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
1319199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
1320199cc6c1Sdyoung 
1321199cc6c1Sdyoung 	v = false;
1322199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1323199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
1324199cc6c1Sdyoung 	ATF_CHECK_EQ(v, false);
1325199cc6c1Sdyoung 
1326199cc6c1Sdyoung 	ppath_release(p);
1327199cc6c1Sdyoung 	prop_object_release(d);
1328199cc6c1Sdyoung 	assert_no_ppath_extant();
1329199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1330199cc6c1Sdyoung }
1331199cc6c1Sdyoung 
1332199cc6c1Sdyoung ATF_TC(get_bool_eftype);
1333199cc6c1Sdyoung 
ATF_TC_HEAD(get_bool_eftype,tc)1334199cc6c1Sdyoung ATF_TC_HEAD(get_bool_eftype, tc)
1335199cc6c1Sdyoung {
1336199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_get_bool() returns "
1337199cc6c1Sdyoung 	    "EFTYPE for the path (\"John Doe\", \"job title\") in the "
1338199cc6c1Sdyoung 	    "\"personnel\" property list, and the bool * argument is "
1339199cc6c1Sdyoung 	    "unchanged");
1340199cc6c1Sdyoung }
1341199cc6c1Sdyoung 
ATF_TC_BODY(get_bool_eftype,tc)1342199cc6c1Sdyoung ATF_TC_BODY(get_bool_eftype, tc)
1343199cc6c1Sdyoung {
1344199cc6c1Sdyoung 	int rc;
1345199cc6c1Sdyoung 	bool v;
1346199cc6c1Sdyoung 	prop_dictionary_t d;
1347199cc6c1Sdyoung 	ppath_t *p;
1348199cc6c1Sdyoung 
1349199cc6c1Sdyoung 	assert_no_ppath_extant();
1350199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1351199cc6c1Sdyoung 
1352199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1353199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1354199cc6c1Sdyoung 
1355199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1356199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1357199cc6c1Sdyoung 
1358199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1359199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1360199cc6c1Sdyoung 	if (ppath_push_key(p, "job title") == NULL)
1361199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1362199cc6c1Sdyoung 
1363199cc6c1Sdyoung 	v = true;
1364199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1365199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, EFTYPE);
1366199cc6c1Sdyoung 	ATF_CHECK_EQ(v, true);
1367199cc6c1Sdyoung 
1368199cc6c1Sdyoung 	v = false;
1369199cc6c1Sdyoung 	rc = ppath_get_bool(d, p, &v);
1370199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, EFTYPE);
1371199cc6c1Sdyoung 	ATF_CHECK_EQ(v, false);
1372199cc6c1Sdyoung 
1373199cc6c1Sdyoung 	ppath_release(p);
1374199cc6c1Sdyoung 	prop_object_release(d);
1375199cc6c1Sdyoung 	assert_no_ppath_extant();
1376199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1377199cc6c1Sdyoung }
1378199cc6c1Sdyoung 
1379199cc6c1Sdyoung ATF_TC(get_string_eftype);
1380199cc6c1Sdyoung 
ATF_TC_HEAD(get_string_eftype,tc)1381199cc6c1Sdyoung ATF_TC_HEAD(get_string_eftype, tc)
1382199cc6c1Sdyoung {
1383199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_get_string() returns "
1384199cc6c1Sdyoung 	    "EFTYPE for the path (\"John Doe\", \"u.s. citizen\") in the "
1385199cc6c1Sdyoung 	    "\"personnel\" property list, and the const char ** argument is "
1386199cc6c1Sdyoung 	    "unchanged");
1387199cc6c1Sdyoung }
1388199cc6c1Sdyoung 
ATF_TC_BODY(get_string_eftype,tc)1389199cc6c1Sdyoung ATF_TC_BODY(get_string_eftype, tc)
1390199cc6c1Sdyoung {
1391199cc6c1Sdyoung 	int rc;
1392199cc6c1Sdyoung 	const char *v;
1393199cc6c1Sdyoung 	prop_dictionary_t d;
1394199cc6c1Sdyoung 	ppath_t *p;
1395199cc6c1Sdyoung 
1396199cc6c1Sdyoung 	assert_no_ppath_extant();
1397199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1398199cc6c1Sdyoung 
1399199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1400199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1401199cc6c1Sdyoung 
1402199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1403199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1404199cc6c1Sdyoung 
1405199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1406199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1407199cc6c1Sdyoung 	if (ppath_push_key(p, "u.s. citizen") == NULL)
1408199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1409199cc6c1Sdyoung 
1410199cc6c1Sdyoung 	v = NULL;
1411199cc6c1Sdyoung 	rc = ppath_get_string(d, p, &v);
1412199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, EFTYPE);
1413199cc6c1Sdyoung 	ATF_CHECK_EQ(v, NULL);
1414199cc6c1Sdyoung 
1415199cc6c1Sdyoung 	v = "xyz";
1416199cc6c1Sdyoung 	rc = ppath_get_string(d, p, &v);
1417199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, EFTYPE);
1418199cc6c1Sdyoung 	ATF_CHECK_STREQ(v, "xyz");
1419199cc6c1Sdyoung 
1420199cc6c1Sdyoung 	ppath_release(p);
1421199cc6c1Sdyoung 	prop_object_release(d);
1422199cc6c1Sdyoung 	assert_no_ppath_extant();
1423199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1424199cc6c1Sdyoung }
1425199cc6c1Sdyoung 
1426199cc6c1Sdyoung ATF_TC(get_string_enoent);
1427199cc6c1Sdyoung 
ATF_TC_HEAD(get_string_enoent,tc)1428199cc6c1Sdyoung ATF_TC_HEAD(get_string_enoent, tc)
1429199cc6c1Sdyoung {
1430199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_get_string() returns "
1431199cc6c1Sdyoung 	    "ENOENT for the path (\"John Doe\", \"title\") in the "
1432199cc6c1Sdyoung 	    "\"personnel\" property list, and the const char ** argument is "
1433199cc6c1Sdyoung 	    "unchanged");
1434199cc6c1Sdyoung }
1435199cc6c1Sdyoung 
ATF_TC_BODY(get_string_enoent,tc)1436199cc6c1Sdyoung ATF_TC_BODY(get_string_enoent, tc)
1437199cc6c1Sdyoung {
1438199cc6c1Sdyoung 	int rc;
1439199cc6c1Sdyoung 	const char *v;
1440199cc6c1Sdyoung 	prop_dictionary_t d;
1441199cc6c1Sdyoung 	ppath_t *p;
1442199cc6c1Sdyoung 
1443199cc6c1Sdyoung 	assert_no_ppath_extant();
1444199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1445199cc6c1Sdyoung 
1446199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1447199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1448199cc6c1Sdyoung 
1449199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1450199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1451199cc6c1Sdyoung 
1452199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1453199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1454199cc6c1Sdyoung 	if (ppath_push_key(p, "title") == NULL)
1455199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1456199cc6c1Sdyoung 
1457199cc6c1Sdyoung 	v = NULL;
1458199cc6c1Sdyoung 	rc = ppath_get_string(d, p, &v);
1459199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
1460199cc6c1Sdyoung 	ATF_CHECK_EQ(v, NULL);
1461199cc6c1Sdyoung 
1462199cc6c1Sdyoung 	v = "xyz";
1463199cc6c1Sdyoung 	rc = ppath_get_string(d, p, &v);
1464199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, ENOENT);
1465199cc6c1Sdyoung 	ATF_CHECK_STREQ(v, "xyz");
1466199cc6c1Sdyoung 
1467199cc6c1Sdyoung 	ppath_release(p);
1468199cc6c1Sdyoung 	prop_object_release(d);
1469199cc6c1Sdyoung 	assert_no_ppath_extant();
1470199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1471199cc6c1Sdyoung }
1472199cc6c1Sdyoung 
1473199cc6c1Sdyoung ATF_TC(get_string_success);
1474199cc6c1Sdyoung 
ATF_TC_HEAD(get_string_success,tc)1475199cc6c1Sdyoung ATF_TC_HEAD(get_string_success, tc)
1476199cc6c1Sdyoung {
1477199cc6c1Sdyoung 	atf_tc_set_md_var(tc, "descr", "check ppath_get_string() fetches "
1478199cc6c1Sdyoung 	    "the \"job title\" property from the \"John Doe\" record in the "
1479199cc6c1Sdyoung 	    "\"personnel\" property list and compares it with the expected "
1480199cc6c1Sdyoung 	    "value, \"computer programmer\"");
1481199cc6c1Sdyoung }
1482199cc6c1Sdyoung 
ATF_TC_BODY(get_string_success,tc)1483199cc6c1Sdyoung ATF_TC_BODY(get_string_success, tc)
1484199cc6c1Sdyoung {
1485199cc6c1Sdyoung 	int rc;
1486*8012ca3fSmsaitoh 	const char *v = NULL;
1487199cc6c1Sdyoung 	prop_dictionary_t d;
1488199cc6c1Sdyoung 	ppath_t *p;
1489199cc6c1Sdyoung 
1490199cc6c1Sdyoung 	assert_no_ppath_extant();
1491199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1492199cc6c1Sdyoung 
1493199cc6c1Sdyoung 	if ((d = prop_dictionary_internalize(personnel)) == NULL)
1494199cc6c1Sdyoung 		atf_tc_fail("prop_dictionary_internalize failed");
1495199cc6c1Sdyoung 
1496199cc6c1Sdyoung 	if ((p = ppath_create()) == NULL)
1497199cc6c1Sdyoung 		atf_tc_fail("ppath_create failed");
1498199cc6c1Sdyoung 
1499199cc6c1Sdyoung 	if (ppath_push_key(p, "John Doe") == NULL)
1500199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1501199cc6c1Sdyoung 	if (ppath_push_key(p, "job title") == NULL)
1502199cc6c1Sdyoung 		atf_tc_fail("ppath_push_key failed");
1503199cc6c1Sdyoung 
1504199cc6c1Sdyoung 	rc = ppath_get_string(d, p, &v);
1505199cc6c1Sdyoung 	ATF_CHECK_EQ(rc, 0);
1506199cc6c1Sdyoung 	ATF_CHECK_STREQ(v, "computer programmer");
1507199cc6c1Sdyoung 
1508199cc6c1Sdyoung 	ppath_release(p);
1509199cc6c1Sdyoung 	prop_object_release(d);
1510199cc6c1Sdyoung 	assert_no_ppath_extant();
1511199cc6c1Sdyoung 	assert_no_ppath_component_extant();
1512199cc6c1Sdyoung }
1513199cc6c1Sdyoung 
ATF_TP_ADD_TCS(tp)1514199cc6c1Sdyoung ATF_TP_ADD_TCS(tp)
1515199cc6c1Sdyoung {
1516199cc6c1Sdyoung 
1517199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, push_until_full);
1518199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, pop_until_empty);
1519199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, length);
1520199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, component_at);
1521199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, get_idx_key);
1522199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, ppath_copy);
1523199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, replace);
1524199cc6c1Sdyoung 
1525199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, delete_bool_eftype);
1526199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, delete_bool_enoent);
1527199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, delete_bool_success);
1528199cc6c1Sdyoung 
1529199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, get_bool_eftype);
1530199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, get_bool_enoent);
1531199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, get_bool_success);
1532199cc6c1Sdyoung 
1533199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, copydel_bool_success);
1534199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, copydel_object_twice_success);
1535199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, copyset_object_twice_success);
1536199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, copyset_bool_success);
1537199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, create_bool_eexist);
1538199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, create_bool_success);
1539199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, set_bool_enoent);
1540199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, set_bool_eftype);
1541199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, set_bool_success);
1542199cc6c1Sdyoung 
1543199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, get_string_eftype);
1544199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, get_string_enoent);
1545199cc6c1Sdyoung 	ATF_TP_ADD_TC(tp, get_string_success);
1546199cc6c1Sdyoung 
1547199cc6c1Sdyoung 	return atf_no_error();
1548199cc6c1Sdyoung }
1549