/* * Copyright (C) 2006 Aaron Stone * Copyright (c) 2005-2006 NFG Net Facilities Group BV support@nfg.nl * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * * * * * * * Basic unit-test framework for dbmail (www.dbmail.org) * * See http://check.sf.net for details and docs. * * * Run 'make check' to see some action. * */ #include #include "check_dbmail.h" extern char *configFile; extern db_param_t _db_params; extern int quiet; extern int reallyquiet; /* * * the test fixtures * */ void setup(void) { reallyquiet = 1; configure_debug(5,0); config_read(configFile); GetDBParams(&_db_params); db_connect(); auth_connect(); g_mime_init(0); } void teardown(void) { db_disconnect(); auth_disconnect(); g_mime_shutdown(); } START_TEST(test_g_strcasestr) { char *s = "asdfqwer"; fail_unless(g_strcasestr(s,"SD")!=NULL,"g_strcasestr failed 1"); fail_unless(g_strcasestr(s,"er")!=NULL,"g_strcasestr failed 2"); fail_unless(g_strcasestr(s,"As")!=NULL,"g_strcasestr failed 3"); } END_TEST START_TEST(test_mailbox_remove_namespace) { char *simple, *username, *namespace; char *patterns[] = { "#Users/foo/mailbox", "#Users/foo/*", "#Users/foo*", "#Users/", "#Users//", "#Users///", "#Users/%", "#Users*", "#Users", "#Public/foo/mailbox", "#Public/foo/*", "#Public/foo*", "#Public/", "#Public//", "#Public///", "#Public/%", "#Public*", "#Public", NULL }; char *expected[18][3] = { { NAMESPACE_USER, "foo", "mailbox" }, { NAMESPACE_USER, "foo", "*" }, { NAMESPACE_USER, "foo", "*" }, { NAMESPACE_USER, NULL, NULL }, { NAMESPACE_USER, NULL, NULL }, { NAMESPACE_USER, NULL, NULL }, { NAMESPACE_USER, NULL, NULL }, { NAMESPACE_USER, NULL, NULL }, { NAMESPACE_USER, NULL, NULL }, { NAMESPACE_PUBLIC, PUBLIC_FOLDER_USER, "foo/mailbox" }, { NAMESPACE_PUBLIC, PUBLIC_FOLDER_USER, "foo/*" }, { NAMESPACE_PUBLIC, PUBLIC_FOLDER_USER, "foo*" }, { NAMESPACE_PUBLIC, PUBLIC_FOLDER_USER, "" }, { NAMESPACE_PUBLIC, PUBLIC_FOLDER_USER, "/" }, { NAMESPACE_PUBLIC, PUBLIC_FOLDER_USER, "//" }, { NAMESPACE_PUBLIC, PUBLIC_FOLDER_USER, "%" }, { NAMESPACE_PUBLIC, PUBLIC_FOLDER_USER, "*" }, { NAMESPACE_PUBLIC, PUBLIC_FOLDER_USER, "" } }; int i; for (i = 0; patterns[i]; i++) { simple = (char *)mailbox_remove_namespace(patterns[i], &namespace, &username); fail_unless( ((simple == NULL && expected[i][2] == NULL) || strcmp(simple, expected[i][2])==0) && ((username== NULL && expected[i][1] == NULL) || strcmp(username, expected[i][1])==0) && ((namespace == NULL && expected[i][0] == NULL) || strcmp(namespace, expected[i][0])==0), "\n mailbox_remove_namespace failed on [%s]\n" " Expected: namespace [%s] user [%s] simple [%s]\n" " Received: namespace [%s] user [%s] simple [%s]", patterns[i], expected[i][0], expected[i][1], expected[i][2], namespace, username, simple); } } END_TEST START_TEST(test_dbmail_iconv_str_to_db) { const char *val = "=?windows-1251?B?0+/w4OLr5e335fHq6Okg8/fl8iDiIPHu4vDl7OXt7e7pIOru7O/g7ejo?="; const char *u71 = "Neue =?ISO-8859-1?Q?L=F6sung?= =?ISO-8859-1?Q?f=FCr?= unsere Kunden"; const char *u72 = "=?ISO-8859-1?Q?L=F6sung?="; const char *u73 = "=?ISO-8859-1?Q?f=FCr?="; const char *u74 = "... =?ISO-8859-1?Q?=DCbergabe?= ..."; const char *u75 = "=?iso-8859-1?q?a?="; const char *u76 = "=?utf-8?b?w6nDqcOp?="; const char *exp = "Neue Lösung für unsere Kunden"; const char *exp2 = "Lösung"; const char *exp3 = "für"; char *u8, *val2, *u82, *u83, *val3; u8 = g_mime_utils_header_decode_text(val); val2 = g_mime_utils_header_encode_text(u8); u82 = g_mime_utils_header_decode_text(val2); fail_unless(strcmp(u8,u82)==0,"decode/encode failed in test_dbmail_iconv_str_to_db"); val3 = dbmail_iconv_db_to_utf7(u8); u83 = g_mime_utils_header_decode_text(val3); fail_unless(strcmp(u8,u83)==0,"decode/encode failed in test_dbmail_iconv_str_to_db\n[%s]\n[%s]\n", u8, u83); g_free(u8); g_free(u82); g_free(u83); g_free(val2); g_free(val3); // // u8 = dbmail_iconv_decode_text(u71); fail_unless(strcmp(u8,exp)==0, "decode failed [%s] != [%s]", u8, exp); u82 = dbmail_iconv_decode_text(u8); fail_unless(strcmp(u82,exp)==0, "decode failed [%s] != [%s]", u82, exp); g_free(u8); g_free(u82); u8 = dbmail_iconv_decode_text(u72); fail_unless(strcmp(u8,exp2)==0,"decode failed [%s] != [%s]", u8, exp2); g_free(u8); u8 = dbmail_iconv_decode_text(u73); fail_unless(strcmp(u8,exp3)==0,"decode failed [%s] != [%s]", u8, exp3); g_free(u8); u8 = g_mime_utils_header_decode_text(u74); u82 = dbmail_iconv_decode_text(u74); fail_unless(strcmp(u8,u82)==0, "decode failed [%s] != [%s]", u8, u82); g_free(u8); g_free(u82); u8 = g_mime_utils_header_decode_text(u75); u82 = dbmail_iconv_decode_text(u75); fail_unless(strcmp(u8,u82)==0, "decode failed [%s] != [%s]", u8, u82); g_free(u8); g_free(u82); u8 = g_mime_utils_header_decode_text(u76); u82 = dbmail_iconv_decode_text(u76); fail_unless(strcmp(u8,u82)==0, "decode failed [%s] != [%s]", u8, u82); g_free(u8); g_free(u82); } END_TEST START_TEST(test_dbmail_iconv_decode_address) { const char *u71 = "=?iso-8859-1?Q?::_=5B_Arrty_=5D_::_=5B_Roy_=28L=29_St=E8phanie_=5D?= "; const char *ex1 = "\":: [ Arrty ] :: [ Roy (L) Stèphanie ]\" "; const char *u72 = "=?utf-8?Q?Jos=E9_M=2E_Mart=EDn?= "; // latin-1 masking as utf8 const char *ex2 = "\"Jos? M. Mart?n\" "; const char *u73 = "=?utf-8?B?Ik9ubGluZSBSZXplcnZhxI1uw60gU3lzdMOpbSBTTU9TSyI=?= "; char *ex3; char *u8; u8 = dbmail_iconv_decode_address(u71); fail_unless(strcmp(u8,ex1)==0,"decode failed\n[%s] != \n[%s]\n", u8, ex1); g_free(u8); u8 = dbmail_iconv_decode_address(u72); fail_unless(strcmp(u8,ex2)==0,"decode failed\n[%s] != \n[%s]\n", u8, ex2); g_free(u8); u8 = dbmail_iconv_decode_address(u73); ex3 = g_mime_utils_header_decode_text(u73); fail_unless(strcmp(u8,ex3)==0,"decode failed\n[%s] != \n[%s]\n", u8, ex3); g_free(u8); g_free(ex3); } END_TEST START_TEST(test_create_unique_id) { char *a = g_new0(char, 64); char *b = g_new0(char, 64); create_unique_id(a,0); create_unique_id(b,0); fail_unless(strlen(a)==32, "create_unique_id produced incorrect string length [%s]", a); fail_unless(strlen(b)==32, "create_unique_id produced incorrect string length [%s]", b); fail_unless(!MATCH(a,b),"create_unique_id shouldn't produce identical output"); g_free(a); g_free(b); } END_TEST START_TEST(test_dm_strtoull) { fail_unless(dm_strtoull("10",NULL,10)==10); fail_unless(dm_strtoull(" 10",NULL,10)==10); fail_unless(dm_strtoull("-10",NULL,10)==0); fail_unless(dm_strtoull("10",NULL,16)==16); fail_unless(dm_strtoull("10",NULL,2)==2); } END_TEST Suite *dbmail_misc_suite(void) { Suite *s = suite_create("Dbmail Misc"); TCase *tc_misc = tcase_create("Misc"); suite_add_tcase(s, tc_misc); tcase_add_checked_fixture(tc_misc, setup, teardown); tcase_add_test(tc_misc, test_g_strcasestr); tcase_add_test(tc_misc, test_mailbox_remove_namespace); tcase_add_test(tc_misc, test_dbmail_iconv_str_to_db); tcase_add_test(tc_misc, test_dbmail_iconv_decode_address); tcase_add_test(tc_misc, test_create_unique_id); tcase_add_test(tc_misc, test_dm_strtoull); return s; } int main(void) { int nf; Suite *s = dbmail_misc_suite(); SRunner *sr = srunner_create(s); srunner_run_all(sr, CK_NORMAL); nf = srunner_ntests_failed(sr); srunner_free(sr); return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; }