1 /*
2  *  Copyright (c) 2004-2012 NFG Net Facilities Group BV support@nfg.nl
3  *
4  *   This program is free software; you can redistribute it and/or
5  *   modify it under the terms of the GNU General Public License
6  *   as published by the Free Software Foundation; either
7  *   version 2 of the License, or (at your option) any later
8  *   version.
9  *
10  *   This program is distributed in the hope that it will be useful,
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *   GNU General Public License for more details.
14  *
15  *   You should have received a copy of the GNU General Public License
16  *   along with this program; if not, write to the Free Software
17  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  *
19  *
20  *
21  *
22  *
23  *
24  *
25  *   Basic unit-test framework for dbmail (www.dbmail.org)
26  *
27  *   See http://check.sf.net for details and docs.
28  *
29  *
30  *   Run 'make check' to see some action.
31  *
32  */
33 
34 #include <check.h>
35 #include <assert.h>
36 #include "check_dbmail.h"
37 
38 extern char *multipart_message;
39 extern char configFile[PATH_MAX];
40 extern DBParam_T db_params;
41 extern Mempool_T small_pool;
42 #define DBPFX db_params.pfx
43 
44 uint64_t empty_box = 0;
45 
46 /* we need this one because we can't directly link imapd.o */
47 int imap_before_smtp = 0;
48 
add_message(void)49 static void add_message(void)
50 {
51 	int result;
52 	DbmailMessage *message;
53 	Mempool_T pool = mempool_open();
54 	List_T dsnusers = p_list_new(pool);
55 	Delivery_T *dsnuser = g_new0(Delivery_T,1);
56 	GList *userids = NULL;
57 	uint64_t *uid;
58 
59 
60         uint64_t user_idnr;
61 	if (! (auth_user_exists("testuser1",&user_idnr)))
62 		auth_adduser("testuser1","test", "md5", 101, 1024000, &user_idnr);
63 
64 	uid = g_new0(uint64_t,1);
65 	*uid = user_idnr;
66 	userids = g_list_prepend(userids, uid);
67 
68 	message = dbmail_message_new(NULL);
69 	message = dbmail_message_init_with_string(message,multipart_message);
70 
71 	dsnuser_init(dsnuser);
72 	dsnuser->address = g_strdup("testuser1");
73 	dsnuser->userids = userids;
74 
75 	dsnusers = p_list_prepend(dsnusers, dsnuser);
76 
77 	result = insert_messages(message, dsnusers);
78 
79 	assert(result==0);
80 
81 	dsnuser_free_list(dsnusers);
82 	dbmail_message_free(message);
83 	mempool_close(&pool);
84 }
85 
tree_print(gpointer key,gpointer value,gpointer data UNUSED)86 static gboolean tree_print(gpointer key, gpointer value, gpointer data UNUSED)
87 {
88 	if (! (key && value))
89 		return TRUE;
90 
91 	uint64_t *k = (uint64_t *)key;
92 	uint64_t *v = (uint64_t *)value;
93 	printf("[%" PRIu64 ": %" PRIu64 "]\n", *k, *v);
94 	return FALSE;
95 }
96 
tree_dump(GTree * t)97 void tree_dump(GTree *t)
98 {
99 	TRACE(TRACE_DEBUG,"start");
100 	g_tree_foreach(t,(GTraverseFunc)tree_print,NULL);
101 	TRACE(TRACE_DEBUG,"done");
102 }
103 
_node_cat(uint64_t * key,uint64_t * value,GString ** s)104 static gboolean _node_cat(uint64_t *key, uint64_t *value, GString **s)
105 {
106 	if (! (key && value))
107 		return TRUE;
108 
109 	g_string_append_printf(*(GString **)s, "[%" PRIu64 ": %" PRIu64 "]\n", *key,*value);
110 
111 	return FALSE;
112 }
113 
tree_as_string(GTree * t)114 char * tree_as_string(GTree *t)
115 {
116 	char *result;
117 	GString *s = g_string_new("");
118 
119 	TRACE(TRACE_DEBUG,"start");
120 	g_tree_foreach(t,(GTraverseFunc)_node_cat,&s);
121 	TRACE(TRACE_DEBUG,"done");
122 
123 	result = s->str;
124 	g_string_free(s,FALSE);
125 	return result;
126 }
127 
get_mailbox_id(const char * name)128 static uint64_t get_mailbox_id(const char *name)
129 {
130 	uint64_t id, owner;
131 	auth_user_exists("testuser1",&owner);
132 	db_find_create_mailbox(name, BOX_COMMANDLINE, owner, &id);
133 	assert(id);
134 	return id;
135 }
136 
setup(void)137 void setup(void)
138 {
139 	config_get_file();
140 	config_read(configFile);
141 	configure_debug(NULL,511,0);
142 	GetDBParams();
143 	db_connect();
144 	auth_connect();
145 	small_pool = mempool_open();
146 	empty_box = get_mailbox_id("empty");
147 	add_message();
148 	add_message();
149 }
150 
teardown(void)151 void teardown(void)
152 {
153 	db_delete_mailbox(empty_box, 0, 0);
154 	auth_disconnect();
155 	db_disconnect();
156 	config_free();
157 	mempool_close(&small_pool);
158 }
159 
160 
161 /****************************************************************************************
162  *
163  *
164  * TestCases
165  *
166  *
167  ***************************************************************************************/
168 
START_TEST(test_dbmail_mailbox_new)169 START_TEST(test_dbmail_mailbox_new)
170 {
171 	DbmailMailbox *mb = dbmail_mailbox_new(NULL, get_mailbox_id("INBOX"));
172 	fail_unless(mb!=NULL, "dbmail_mailbox_new failed");
173 	dbmail_mailbox_free(mb);
174 }
175 END_TEST
176 
START_TEST(test_dbmail_mailbox_free)177 START_TEST(test_dbmail_mailbox_free)
178 {
179 	DbmailMailbox *mb = dbmail_mailbox_new(NULL, get_mailbox_id("INBOX"));
180 	dbmail_mailbox_free(mb);
181 }
182 END_TEST
183 
START_TEST(test_dbmail_mailbox_dump)184 START_TEST(test_dbmail_mailbox_dump)
185 {
186 	int c = 0;
187 	FILE *o = fopen("/dev/null","w");
188 	DbmailMailbox *mb = dbmail_mailbox_new(NULL, get_mailbox_id("INBOX"));
189 	c = dbmail_mailbox_dump(mb,o);
190 	fail_unless(c>=0,"dbmail_mailbox_dump failed");
191 	dbmail_mailbox_free(mb);
192 //	fprintf(stderr,"dumped [%d] messages\n", c);
193 }
194 END_TEST
195 
_build_search_keys(Mempool_T pool,const char * args,size_t * size)196 static String_T * _build_search_keys(Mempool_T pool, const char *args, size_t *size)
197 {
198 	int idx;
199 	String_T *search_keys;
200 	int arglen = 0;
201 	char **array;
202 	array = g_strsplit(args," ",0);
203 
204 	while (array[arglen++]);
205 	*size = sizeof(String_T) * arglen;
206 	search_keys = (String_T *)mempool_pop(pool, *size);
207 	for (idx=0; idx<arglen && array[idx]; idx++) {
208 		search_keys[idx] = p_string_new(pool, array[idx]);
209 	}
210 	g_strfreev(array);
211 	return search_keys;
212 }
213 
214 
START_TEST(test_dbmail_mailbox_build_imap_search)215 START_TEST(test_dbmail_mailbox_build_imap_search)
216 {
217 	String_T *search_keys;
218 	gboolean sorted = 1;
219 	size_t size;
220 	uint64_t idx;
221 
222 	Mempool_T pool = mempool_open();
223 	DbmailMailbox *mb, *mc, *md;
224 
225 	// first case
226 	search_keys = _build_search_keys(pool, "( arrival cc date reverse from size subject to ) us-ascii "
227 			"HEADER FROM paul@nfg.nl SINCE 1-Feb-1994", &size);
228 
229 	mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
230 
231 	idx = 0;
232 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
233 	mempool_push(pool, search_keys, size);
234 	dbmail_mailbox_free(mb);
235 
236 	// second case
237 	idx = 0;
238 	mc = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
239 	search_keys = _build_search_keys(pool, "( arrival ) ( cc ) us-ascii HEADER FROM paul@nfg.nl "
240 			"SINCE 1-Feb-1990", &size);
241 
242 	idx = 0;
243 	dbmail_mailbox_build_imap_search(mc, search_keys, &idx, sorted);
244 	mempool_push(pool, search_keys, size);
245 
246 	dbmail_mailbox_free(mc);
247 
248 	// third case
249 	idx = 0;
250 	md = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
251 	search_keys = _build_search_keys(pool, "( arrival cc date reverse from size subject to ) us-ascii "
252 			"HEADER FROM test ( SINCE 1-Feb-1995 OR HEADER SUBJECT test "
253 			"HEADER SUBJECT foo )", &size);
254 	dbmail_mailbox_build_imap_search(md, search_keys, &idx, sorted);
255 	fail_unless(g_node_max_height(g_node_get_root(md->search))==4,
256 			"build_search: tree too shallow");
257 
258 	mempool_push(pool, search_keys, size);
259 	dbmail_mailbox_free(md);
260 
261 	// fourth case
262 	idx = 0;
263 	md = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
264 	search_keys = _build_search_keys(pool, "1,* ( arrival cc date reverse from size subject to ) us-ascii "
265 			"HEADER FROM test ( SINCE 1-Feb-1995 OR HEADER SUBJECT test "
266 			"HEADER SUBJECT foo )", &size);
267 
268 	dbmail_mailbox_build_imap_search(md, search_keys, &idx, 1);
269 	fail_unless(g_node_max_height(g_node_get_root(md->search))==4,
270 			"build_search: tree too shallow");
271 
272 	dbmail_mailbox_free(md);
273 	mempool_push(pool, search_keys, size);
274 	mempool_close(&pool);
275 }
276 END_TEST
277 
START_TEST(test_dbmail_mailbox_sort)278 START_TEST(test_dbmail_mailbox_sort)
279 {
280 	String_T *search_keys;
281 	size_t size;
282 	uint64_t idx = 0;
283 	gboolean sorted = 1;
284 
285 	DbmailMailbox *mb;
286 	Mempool_T pool = mempool_open();
287 
288 	// first case
289 	mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
290 	search_keys = _build_search_keys(pool,
291 			"( arrival cc date reverse from size subject to )"
292 		       " us-ascii HEADER FROM test SINCE 1-Feb-1994", &size);
293 
294 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
295 	dbmail_mailbox_sort(mb);
296 
297 	dbmail_mailbox_free(mb);
298 	mempool_push(pool, search_keys, size);
299 	mempool_close(&pool);
300 }
301 END_TEST
302 
START_TEST(test_dbmail_mailbox_search)303 START_TEST(test_dbmail_mailbox_search)
304 {
305 	String_T *search_keys;
306 	size_t size;
307 	uint64_t idx = 0;
308 	gboolean sorted = 1;
309 	int all, found, notfound;
310 	DbmailMailbox *mb;
311 	Mempool_T pool = mempool_open();
312 
313 	// first case
314 	mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
315 	search_keys = _build_search_keys(pool, "( arrival cc date reverse from size subject to ) us-ascii "
316 			"HEADER FROM foo SINCE 1-Feb-1994 ( SENTSINCE 1-Feb-1995 OR BEFORE 1-Jan-2006 SINCE 1-Jan-2005 )",
317 			&size);
318 
319 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
320 	dbmail_mailbox_sort(mb);
321 	dbmail_mailbox_search(mb);
322 
323 	dbmail_mailbox_free(mb);
324 	mempool_push(pool, search_keys, size);
325 
326 	// second case
327 	//
328 	idx=0;
329 	sorted = 0;
330 	mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
331 	search_keys = _build_search_keys(pool, "1:*", &size);
332 
333 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
334 	dbmail_mailbox_search(mb);
335 	all = g_tree_nnodes(mb->found);
336 
337 	dbmail_mailbox_free(mb);
338 	mempool_push(pool, search_keys, size);
339 
340 	//
341 	idx=0;
342 	sorted = 0;
343 	mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
344 	search_keys = _build_search_keys(pool, "1:* TEXT @", &size);
345 
346 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
347 	dbmail_mailbox_search(mb);
348 	found = g_tree_nnodes(mb->found);
349 
350 	dbmail_mailbox_free(mb);
351 	mempool_push(pool, search_keys, size);
352 
353 	//
354 	idx=0;
355 	sorted = 0;
356 	mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
357 	search_keys = _build_search_keys(pool, "1:* NOT TEXT @", &size);
358 
359 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
360 	dbmail_mailbox_search(mb);
361 	notfound = g_tree_nnodes(mb->found);
362 
363 	dbmail_mailbox_free(mb);
364 	mempool_push(pool, search_keys, size);
365 
366 	fail_unless((all - found) == notfound, "dbmail_mailbox_search failed: SEARCH NOT (all: %d, found: %d, notfound: %d)", all, found, notfound);
367 
368 	// third case
369 	idx=0;
370 	sorted = 0;
371 	mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
372 	search_keys = _build_search_keys(pool, "UID 1,* BODY paul@nfg.nl", &size);
373 
374 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
375 	dbmail_mailbox_search(mb);
376 
377 	dbmail_mailbox_free(mb);
378 	mempool_push(pool, search_keys, size);
379 
380 	//
381 	idx=0;
382 	sorted = 0;
383 	mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
384 	search_keys = _build_search_keys(pool, "1", &size);
385 
386 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
387 	dbmail_mailbox_search(mb);
388 	found = g_tree_nnodes(mb->found);
389 	fail_unless(found==1,"dbmail_mailbox_search failed: SEARCH UID 1");
390 
391 	dbmail_mailbox_free(mb);
392 	mempool_push(pool, search_keys, size);
393 
394 	//
395 	idx=0;
396 	sorted = 0;
397 	mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
398 	search_keys = _build_search_keys(pool, "OR FROM myclient SUBJECT myclient", &size);
399 
400 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
401 	dbmail_mailbox_search(mb);
402 //	found = g_tree_nnodes(mb->ids);
403 //	fail_unless(found==1,"dbmail_mailbox_search failed: SEARCH UID 1");
404 
405 	dbmail_mailbox_free(mb);
406 	mempool_push(pool, search_keys, size);
407 	mempool_close(&pool);
408 }
409 END_TEST
410 
START_TEST(test_dbmail_mailbox_search_parsed_1)411 START_TEST(test_dbmail_mailbox_search_parsed_1)
412 {
413 	uint64_t idx=0;
414 	size_t size;
415 	gboolean sorted = 0;
416 	Mempool_T pool = mempool_open();
417 	DbmailMailbox *mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
418 	String_T *search_keys = _build_search_keys(pool, "UID 1 BODY unlikelyaddress@nfg.nl", &size);
419 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
420 	dbmail_mailbox_search(mb);
421 	dbmail_mailbox_free(mb);
422 	mempool_push(pool, search_keys, size);
423 	mempool_close(&pool);
424 }
425 END_TEST
426 
START_TEST(test_dbmail_mailbox_search_parsed_2)427 START_TEST(test_dbmail_mailbox_search_parsed_2)
428 {
429 	size_t size;
430 	uint64_t idx=0;
431 	gboolean sorted = 0;
432 	Mempool_T pool = mempool_open();
433 	DbmailMailbox *mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
434 	String_T *search_keys = _build_search_keys(pool, "UID 1,* BODY the", &size);
435 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, sorted);
436 	dbmail_mailbox_search(mb);
437 	dbmail_mailbox_free(mb);
438 	mempool_push(pool, search_keys, size);
439 	mempool_close(&pool);
440 }
441 END_TEST
442 
START_TEST(test_dbmail_mailbox_orderedsubject)443 START_TEST(test_dbmail_mailbox_orderedsubject)
444 {
445 	char *res;
446 	uint64_t idx = 0;
447 	size_t size;
448 	String_T *search_keys;
449 	Mempool_T pool = mempool_open();
450 	DbmailMailbox *mb = dbmail_mailbox_new(pool, get_mailbox_id("INBOX"));
451 
452 	search_keys = _build_search_keys(pool, "HEADER FROM foo.org ( SINCE 1-Jan-2005 )", &size);
453 
454 	dbmail_mailbox_build_imap_search(mb, search_keys, &idx, 0);
455 	dbmail_mailbox_search(mb);
456 
457 	dbmail_mailbox_set_uid(mb,TRUE);
458 	res = dbmail_mailbox_orderedsubject(mb);
459 	fail_unless(res!= NULL, "dbmail_mailbox_orderedsubject failed");
460 	g_free(res);
461 
462 	dbmail_mailbox_set_uid(mb,FALSE);
463 	res = dbmail_mailbox_orderedsubject(mb);
464 	fail_unless(res!= NULL, "dbmail_mailbox_orderedsubject failed");
465 	g_free(res);
466 
467 	dbmail_mailbox_free(mb);
468 	mempool_push(pool, search_keys, size);
469 	mempool_close(&pool);
470 
471 }
472 END_TEST
START_TEST(test_dbmail_mailbox_get_set)473 START_TEST(test_dbmail_mailbox_get_set)
474 {
475 	guint c, d, r;
476 	GTree *set;
477 	DbmailMailbox *mb = dbmail_mailbox_new(NULL, get_mailbox_id("INBOX"));
478 	dbmail_mailbox_set_uid(mb,TRUE);
479 	r = dbmail_mailbox_open(mb);
480 
481 	fail_unless(r == DM_SUCCESS, "dbmail_mailbox_open failed");
482 
483 	// basic tests;
484 	set = dbmail_mailbox_get_set(mb, "1:*", 0);
485 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
486 	c = g_tree_nnodes(set);
487 	fail_unless(c>1,"dbmail_mailbox_get_set failed [%d]", c);
488 	g_tree_destroy(set);
489 
490 	set = dbmail_mailbox_get_set(mb,"*:1",0);
491 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
492 	d = g_tree_nnodes(set);
493 	fail_unless(c==d,"dbmail_mailbox_get_set failed [%d != %d]", c, d);
494 	g_tree_destroy(set);
495 
496 	set = dbmail_mailbox_get_set(mb,"1,*",0);
497 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
498 	d = g_tree_nnodes(set);
499 	fail_unless(d==2,"mailbox_get_set failed [%d != 2]", d);
500 	g_tree_destroy(set);
501 
502 	set = dbmail_mailbox_get_set(mb,"*,1",0);
503 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
504 	d = g_tree_nnodes(set);
505 	fail_unless(d==2,"mailbox_get_set failed");
506 	g_tree_destroy(set);
507 
508 	set = dbmail_mailbox_get_set(mb,"1",0);
509 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
510 	d = g_tree_nnodes(set);
511 	fail_unless(d==1,"mailbox_get_set failed");
512 	g_tree_destroy(set);
513 
514 	set = dbmail_mailbox_get_set(mb,"-1:1",0);
515 	fail_unless(set == NULL);
516 	g_tree_destroy(set);
517 
518 	set = dbmail_mailbox_get_set(mb, "999999998:999999999", 0);
519 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
520 	c = g_tree_nnodes(set);
521 	fail_unless(c==0, "dbmail_mailbox_get_set failed [%d]", c);
522 	g_tree_destroy(set);
523 
524 	// UID sets
525 	char *s, *t;
526 
527 	set = dbmail_mailbox_get_set(mb, "0", 1);
528 	fail_unless(set == NULL);
529 	g_tree_destroy(set);
530 
531 	set = dbmail_mailbox_get_set(mb, "1:*", 1);
532 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
533 	s = tree_as_string(set);
534 	c = g_tree_nnodes(set);
535 	fail_unless(c>1,"dbmail_mailbox_get_set failed");
536 	g_tree_destroy(set);
537 
538 	set = dbmail_mailbox_get_set(mb, "1:*", 0);
539 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
540 	t = tree_as_string(set);
541 	fail_unless(strncmp(s,t,1024)==0,"mismatch between <1:*> and <UID 1:*>\n%s\n%s", s,t);
542 	g_tree_destroy(set);
543 	g_free(s);
544 	g_free(t);
545 
546 	set = dbmail_mailbox_get_set(mb, "999999998:999999999", 1);
547 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
548 	c = g_tree_nnodes(set);
549 	fail_unless(c==0, "dbmail_mailbox_get_set failed [%d]", c);
550 	g_tree_destroy(set);
551 
552 	dbmail_mailbox_free(mb);
553 
554 	// empty box
555 	mb = dbmail_mailbox_new(NULL, empty_box);
556 	dbmail_mailbox_open(mb);
557 
558 	set = dbmail_mailbox_get_set(mb, "1:*", 0);
559 	fail_unless(set == NULL,"dbmail_mailbox_get_set failed");
560 	g_tree_destroy(set);
561 
562 	set = dbmail_mailbox_get_set(mb, "*", 0);
563 	fail_unless(set == NULL,"dbmail_mailbox_get_set failed");
564 	g_tree_destroy(set);
565 
566 	set = dbmail_mailbox_get_set(mb, "1", 0);
567 	fail_unless(set == NULL,"dbmail_mailbox_get_set failed");
568 	g_tree_destroy(set);
569 
570 	set = dbmail_mailbox_get_set(mb, "1:*", 1);
571 	fail_unless(set != NULL);
572 	d = g_tree_nnodes(set);
573 	fail_unless(d==1, "expected 1, got %d", d);
574 	g_tree_destroy(set);
575 
576 	set = dbmail_mailbox_get_set(mb, "*:1", 1);
577 	fail_unless(set != NULL);
578 	d = g_tree_nnodes(set);
579 	fail_unless(d==1, "expected 1, got %d", d);
580 	g_tree_destroy(set);
581 
582 	set = dbmail_mailbox_get_set(mb, "1234567", 1);
583 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
584 	g_tree_destroy(set);
585 
586 	set = dbmail_mailbox_get_set(mb, "1:1", 1);
587 	fail_unless(set != NULL,"dbmail_mailbox_get_set failed");
588 	g_tree_destroy(set);
589 
590 	set = dbmail_mailbox_get_set(mb, "1:a*", 1);
591 	fail_unless(set == NULL,"dbmail_mailbox_get_set failed");
592 	g_tree_destroy(set);
593 
594 	set = dbmail_mailbox_get_set(mb, "a:*", 1);
595 	fail_unless(set == NULL,"dbmail_mailbox_get_set failed");
596 	g_tree_destroy(set);
597 
598 	set = dbmail_mailbox_get_set(mb, "*:a", 1);
599 	fail_unless(set == NULL,"dbmail_mailbox_get_set failed");
600 	g_tree_destroy(set);
601 
602 	dbmail_mailbox_free(mb);
603 }
604 END_TEST
605 
dbmail_mailbox_suite(void)606 Suite *dbmail_mailbox_suite(void)
607 {
608 	Suite *s = suite_create("Dbmail Mailbox");
609 
610 	TCase *tc_mailbox = tcase_create("Mailbox");
611 	suite_add_tcase(s, tc_mailbox);
612 	tcase_add_checked_fixture(tc_mailbox, setup, teardown);
613 	tcase_add_test(tc_mailbox, test_dbmail_mailbox_get_set);
614 	tcase_add_test(tc_mailbox, test_dbmail_mailbox_new);
615 	tcase_add_test(tc_mailbox, test_dbmail_mailbox_free);
616 	tcase_add_test(tc_mailbox, test_dbmail_mailbox_dump);
617 	tcase_add_test(tc_mailbox, test_dbmail_mailbox_build_imap_search);
618 	tcase_add_test(tc_mailbox, test_dbmail_mailbox_sort);
619 	tcase_add_test(tc_mailbox, test_dbmail_mailbox_search);
620 	tcase_add_test(tc_mailbox, test_dbmail_mailbox_search_parsed_1);
621 	tcase_add_test(tc_mailbox, test_dbmail_mailbox_search_parsed_2);
622 	tcase_add_test(tc_mailbox, test_dbmail_mailbox_orderedsubject);
623 
624 	return s;
625 }
626 
main(void)627 int main(void)
628 {
629 	int nf;
630 	Suite *s = dbmail_mailbox_suite();
631 	SRunner *sr = srunner_create(s);
632 	g_mime_init(GMIME_ENABLE_RFC2047_WORKAROUNDS);
633 	srunner_run_all(sr, CK_NORMAL);
634 	nf = srunner_ntests_failed(sr);
635 	srunner_free(sr);
636 	g_mime_shutdown();
637 	return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
638 }
639 
640 
641