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