xref: /netbsd-src/crypto/external/bsd/libsaslc/dist/test/t_dict.c (revision beea8b97d4a59f9d0f17f6dc5a9e6bda59e0bc43)
1*beea8b97Schristos /* $NetBSD: t_dict.c,v 1.4 2011/02/12 23:21:33 christos Exp $ */
2231558cbSagc 
3231558cbSagc /* Copyright (c) 2010 The NetBSD Foundation, Inc.
4231558cbSagc  * All rights reserved.
5231558cbSagc  *
6231558cbSagc  * This code is derived from software contributed to The NetBSD Foundation
7231558cbSagc  * by Mateusz Kocielski.
8231558cbSagc  *
9231558cbSagc  * Redistribution and use in source and binary forms, with or without
10231558cbSagc  * modification, are permitted provided that the following conditions
11231558cbSagc  * are met:
12231558cbSagc  * 1. Redistributions of source code must retain the above copyright
13231558cbSagc  *    notice, this list of conditions and the following disclaimer.
14231558cbSagc  * 2. Redistributions in binary form must reproduce the above copyright
15231558cbSagc  *    notice, this list of conditions and the following disclaimer in the
16231558cbSagc  *    documentation and/or other materials provided with the distribution.
17231558cbSagc  * 3. All advertising materials mentioning features or use of this software
18231558cbSagc  *    must display the following acknowledgement:
19231558cbSagc  *  	  This product includes software developed by the NetBSD
20231558cbSagc  *  	  Foundation, Inc. and its contributors.
21231558cbSagc  * 4. Neither the name of The NetBSD Foundation nor the names of its
22231558cbSagc  *    contributors may be used to endorse or promote products derived
23231558cbSagc  *    from this software without specific prior written permission.
24231558cbSagc  *
25231558cbSagc  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
26231558cbSagc  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27231558cbSagc  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28231558cbSagc  * PURPOSE ARE DISCLAIMED.	IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
29231558cbSagc  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30231558cbSagc  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31231558cbSagc  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32231558cbSagc  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33231558cbSagc  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34231558cbSagc  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35231558cbSagc  * POSSIBILITY OF SUCH DAMAGE.
36231558cbSagc  */
3719c14409Schristos #include <sys/cdefs.h>
38*beea8b97Schristos __RCSID("$NetBSD: t_dict.c,v 1.4 2011/02/12 23:21:33 christos Exp $");
39231558cbSagc 
40231558cbSagc #include <atf-c.h>
41231558cbSagc #include <stdio.h>
4219c14409Schristos 
4319c14409Schristos #include "dict.h"
4419c14409Schristos 
45231558cbSagc /* src/dict.c test cases */
46231558cbSagc 
47231558cbSagc /* saslc__dict_create() */
48231558cbSagc ATF_TC(t_saslc__dict_create);
ATF_TC_HEAD(t_saslc__dict_create,tc)49231558cbSagc ATF_TC_HEAD(t_saslc__dict_create, tc)
50231558cbSagc {
5119c14409Schristos 
52231558cbSagc 	atf_tc_set_md_var(tc, "descr", "saslc__dict_create() tests");
53231558cbSagc }
ATF_TC_BODY(t_saslc__dict_create,tc)54231558cbSagc ATF_TC_BODY(t_saslc__dict_create, tc)
55231558cbSagc {
5619c14409Schristos 
57231558cbSagc 	saslc__dict_t *dict;
58231558cbSagc 	ATF_REQUIRE(dict = saslc__dict_create());
59231558cbSagc 	saslc__dict_destroy(dict);
60231558cbSagc }
61231558cbSagc 
62231558cbSagc /* saslc__dict_insert() */
63231558cbSagc ATF_TC(t_saslc__dict_insert);
ATF_TC_HEAD(t_saslc__dict_insert,tc)64231558cbSagc ATF_TC_HEAD(t_saslc__dict_insert, tc)
65231558cbSagc {
6619c14409Schristos 
67231558cbSagc 	atf_tc_set_md_var(tc, "descr", "saslc__dict_insert() tests");
68231558cbSagc }
ATF_TC_BODY(t_saslc__dict_insert,tc)69231558cbSagc ATF_TC_BODY(t_saslc__dict_insert, tc)
70231558cbSagc {
7119c14409Schristos 
72231558cbSagc 	saslc__dict_t *dict;
73231558cbSagc 	ATF_REQUIRE(dict = saslc__dict_create());
74231558cbSagc 	ATF_CHECK_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_OK);
75231558cbSagc 	ATF_CHECK_EQ(saslc__dict_insert(dict, "bar", "blah"), DICT_OK);
76231558cbSagc 	ATF_CHECK_EQ(saslc__dict_insert(dict, " ", "bar"), DICT_KEYINVALID);
77231558cbSagc 	ATF_CHECK_EQ(saslc__dict_insert(dict, NULL, NULL), DICT_KEYINVALID);
78231558cbSagc 	ATF_CHECK_EQ(saslc__dict_insert(dict, "a", NULL), DICT_VALBAD);
79231558cbSagc 	ATF_CHECK_EQ(saslc__dict_insert(dict,
80231558cbSagc 	    "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",
81231558cbSagc 	     "zero"), DICT_OK);
82231558cbSagc 	ATF_CHECK_EQ(saslc__dict_insert(dict, "a", "b"), DICT_OK);
83231558cbSagc 	ATF_CHECK_EQ(saslc__dict_insert(dict, "a", "c"), DICT_KEYEXISTS);
84231558cbSagc 	ATF_CHECK_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_KEYEXISTS);
85231558cbSagc 	ATF_CHECK_EQ(saslc__dict_insert(dict, "&^#%$#", "bad"), DICT_KEYINVALID);
86231558cbSagc 	saslc__dict_destroy(dict);
87231558cbSagc }
88231558cbSagc 
89231558cbSagc /* saslc__dict_remove() */
90231558cbSagc ATF_TC(t_saslc__dict_remove);
ATF_TC_HEAD(t_saslc__dict_remove,tc)91231558cbSagc ATF_TC_HEAD(t_saslc__dict_remove, tc)
92231558cbSagc {
9319c14409Schristos 
94231558cbSagc 	atf_tc_set_md_var(tc, "descr", "saslc__dict_remove() tests");
95231558cbSagc }
ATF_TC_BODY(t_saslc__dict_remove,tc)96231558cbSagc ATF_TC_BODY(t_saslc__dict_remove, tc)
97231558cbSagc {
9819c14409Schristos 
99231558cbSagc 	saslc__dict_t *dict;
100231558cbSagc 	ATF_REQUIRE(dict = saslc__dict_create());
101231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_KEYNOTFOUND);
102231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_OK);
103231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_KEYNOTFOUND);
104231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "BAR", "bar"), DICT_OK);
105231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_OK);
106231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_KEYNOTFOUND);
107231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "BAR", "bar"), DICT_OK);
108231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "foo"), DICT_OK);
109231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "BAR"), DICT_OK);
110231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo", "bar"), DICT_OK);
111231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "foo"), DICT_OK);
112231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo1", "bar"), DICT_OK);
113231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo2", "bar"), DICT_OK);
114231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo3", "bar"), DICT_OK);
115231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "foo2"), DICT_OK);
116231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "foo1"), DICT_OK);
117231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "foo3"), DICT_OK);
118231558cbSagc 	ATF_CHECK_EQ(saslc__dict_remove(dict, "foo3"), DICT_KEYNOTFOUND);
119231558cbSagc 	saslc__dict_destroy(dict);
120231558cbSagc }
121231558cbSagc 
122231558cbSagc /* saslc__dict_get() */
123231558cbSagc ATF_TC(t_saslc__dict_get);
ATF_TC_HEAD(t_saslc__dict_get,tc)124231558cbSagc ATF_TC_HEAD(t_saslc__dict_get, tc)
125231558cbSagc {
12619c14409Schristos 
127231558cbSagc 	atf_tc_set_md_var(tc, "descr", "saslc__dict_get() tests");
128231558cbSagc }
ATF_TC_BODY(t_saslc__dict_get,tc)129231558cbSagc ATF_TC_BODY(t_saslc__dict_get, tc)
130231558cbSagc {
13119c14409Schristos 
132231558cbSagc 	saslc__dict_t *dict;
133231558cbSagc 	ATF_REQUIRE(dict = saslc__dict_create());
134231558cbSagc 	ATF_CHECK_EQ(saslc__dict_get(dict, "BAR"), NULL);
135231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo1", "bar1"), DICT_OK);
136231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo2", "bar2"), DICT_OK);
137231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo3", "bar3"), DICT_OK);
138231558cbSagc 	ATF_CHECK_STREQ(saslc__dict_get(dict, "foo1"), "bar1");
139231558cbSagc 	ATF_CHECK_STREQ(saslc__dict_get(dict, "foo2"), "bar2");
140231558cbSagc 	ATF_CHECK_STREQ(saslc__dict_get(dict, "foo3"), "bar3");
141231558cbSagc 	ATF_CHECK_EQ(saslc__dict_get(dict, "foo4"), NULL);
142231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_remove(dict, "foo2"), DICT_OK);
143231558cbSagc 	ATF_CHECK_STREQ(saslc__dict_get(dict, "foo1"), "bar1");
144231558cbSagc 	ATF_CHECK_EQ(saslc__dict_get(dict, "foo2"), NULL);
145231558cbSagc 	ATF_CHECK_STREQ(saslc__dict_get(dict, "foo3"), "bar3");
146231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_remove(dict, "foo1"), DICT_OK);
147231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_remove(dict, "foo3"), DICT_OK);
148231558cbSagc 	ATF_CHECK_EQ(saslc__dict_get(dict, "foo2"), NULL);
149231558cbSagc 	saslc__dict_destroy(dict);
150231558cbSagc }
151231558cbSagc 
152231558cbSagc /* saslc__dict_get_len() */
153231558cbSagc ATF_TC(t_saslc__dict_get_len);
ATF_TC_HEAD(t_saslc__dict_get_len,tc)154231558cbSagc ATF_TC_HEAD(t_saslc__dict_get_len, tc)
155231558cbSagc {
15619c14409Schristos 
157231558cbSagc 	atf_tc_set_md_var(tc, "descr", "saslc__dict_get_len() tests");
158231558cbSagc }
ATF_TC_BODY(t_saslc__dict_get_len,tc)159231558cbSagc ATF_TC_BODY(t_saslc__dict_get_len, tc)
160231558cbSagc {
16119c14409Schristos 
162231558cbSagc 	saslc__dict_t *dict;
163231558cbSagc 	ATF_REQUIRE(dict = saslc__dict_create());
164231558cbSagc 	ATF_CHECK_EQ(saslc__dict_get_len(dict, "BAR"), 0);
165231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo1", "1"), DICT_OK);
166231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo2", "1234567890"), DICT_OK);
167231558cbSagc 	ATF_REQUIRE_EQ(saslc__dict_insert(dict, "foo3", "12345678901234567890"), DICT_OK);
168231558cbSagc 	ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo4"), 0);
169231558cbSagc 	ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo1"), 1);
170231558cbSagc 	ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo2"), 10);
171231558cbSagc 	ATF_CHECK_EQ(saslc__dict_get_len(dict, "foo3"), 20);
172231558cbSagc 	saslc__dict_destroy(dict);
173231558cbSagc }
174231558cbSagc 
ATF_TP_ADD_TCS(tp)175231558cbSagc ATF_TP_ADD_TCS(tp)
176231558cbSagc {
177231558cbSagc 	/* constructors and destructors */
178231558cbSagc 	ATF_TP_ADD_TC(tp, t_saslc__dict_create);
179231558cbSagc 
180231558cbSagc 	/* modifiers */
181231558cbSagc 	ATF_TP_ADD_TC(tp, t_saslc__dict_insert);
182231558cbSagc 	ATF_TP_ADD_TC(tp, t_saslc__dict_remove);
183231558cbSagc 
184231558cbSagc 	/* getters */
185231558cbSagc 	ATF_TP_ADD_TC(tp, t_saslc__dict_get);
186231558cbSagc 	ATF_TP_ADD_TC(tp, t_saslc__dict_get_len);
187231558cbSagc 
188231558cbSagc 	return atf_no_error();
189231558cbSagc }
190