/*
* Copyright (C) 2006 Aaron Stone <aaron@serendipity.cx>
* 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 <check.h>
#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?= <over.there@hotmail.com>";
const char *ex1 = "\":: [ Arrty ] :: [ Roy (L) Stèphanie ]\" <over.there@hotmail.com>";
const char *u72 = "=?utf-8?Q?Jos=E9_M=2E_Mart=EDn?= <jmartin@onsager.ugr.es>"; // latin-1 masking as utf8
const char *ex2 = "\"Jos? M. Mart?n\" <jmartin@onsager.ugr.es>";
const char *u73 = "=?utf-8?B?Ik9ubGluZSBSZXplcnZhxI1uw60gU3lzdMOpbSBTTU9TSyI=?= <e@mail>";
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;
}
syntax highlighted by Code2HTML, v. 0.9.1