test-imap-url.c revision e9c433c5b8ef9a1b4246ebe10beb90fa01e05caf
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2013-2014 Dovecot authors, see the included COPYING file */
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen const char *url;
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen/* Valid IMAP URL tests */
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainenstatic const struct valid_imap_url_test valid_url_tests[] = {
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen .url = "imap://%68endri%6B;AUTH=GSS%41PI@%65%78%61%6d%70%6c%65.com",
aeaf818613081b9a9ff8c9fd4306e8dbfab4fd86Timo Sirainen .url = "imap://beelzebub@666.4example.com:999",
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen .url = "imap://user@example.com/INBOX/Trash/..",
498eecf19b1b408d5321cb048697744d7cee90b2Timo Sirainen .url = "imap://user@example.com/INBOX/Trash/../",
11d72d764c104b4f1a8c44ec8a5fee420517645bTimo Sirainen .url = "imap://user@example.com/INBOX/Trash/../..",
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen .url = "imap://user@example.com/INBOX%3BTrash",
12e5ac049bd74f8b98d9dc62adcb0bf3217beef6Martti Rannanjärvi .url = "imap://user@example.com/INBOX;UIDVALIDITY=1341",
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen .url = "imap://user@example.com/INBOX/;UIDVALIDITY=23423",
11d72d764c104b4f1a8c44ec8a5fee420517645bTimo Sirainen .url = "imap://user@example.com/INBOX/Drafts;UIDVALIDITY=6567",
5f237cf1915127fe143ac4c1d3cb4d1139f3b97dTimo Sirainen .mailbox = "INBOX/Drafts", .uidvalidity = 6567 }
11d72d764c104b4f1a8c44ec8a5fee420517645bTimo Sirainen .url = "imap://user@example.com/INBOX/Drafts;UIDVALIDITY=788/;UID=16",
11d72d764c104b4f1a8c44ec8a5fee420517645bTimo Sirainen .mailbox = "INBOX/Drafts", .uidvalidity = 788,
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen .url = "imap://user@example.com/INBOX/Drafts;UIDVALIDITY=788/;UID=16/..",
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen .mailbox = "INBOX/Drafts", .uidvalidity = 788,
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen .url = "imap://user@example.com/INBOX/Drafts;UIDVALIDITY=788/;UID=16/../..",
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen .url = "imap://user@example.com/INBOX/Junk;UIDVALIDITY=27667/"
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen ";UID=434/;SECTION=HEADER",
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen .mailbox = "INBOX/Junk", .uidvalidity = 27667,
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen .url = "imap://user@example.com/INBOX/Important/"
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen ";UID=437/;SECTION=1.2.MIME",
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen .url = "imap://user@example.com/INBOX/Important/;UID=56/;SECTION=AA/BB",
f148466c7b648669b99bf20c651ae7fc81d28659Timo Sirainen .url = "imap://user@example.com/INBOX/Important/;UID=56/;SECTION=AA/BB/..",
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen .url = "imap://user@example.com/INBOX/Important/;UID=56/"
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen ";SECTION=AA/BB/../..",
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen .url = "imap://user@example.com/INBOX/Important/;UID=234/"
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen ";SECTION=HEADER.FIELDS%20(%22To%22%20%22From%22)",
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen .uid = 234, .section = "HEADER.FIELDS (\"To\" \"From\")" }
aeaf818613081b9a9ff8c9fd4306e8dbfab4fd86Timo Sirainen .url = "imap://user@example.com/INBOX/Important/;UID=234/"
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen ";PARTIAL=10.250",
6df4a174b4cbdc439ed435a0cdc71d4a0126d54aTimo Sirainen .uid = 234, .section = NULL, .partial_offset = 10, .partial_size = 250 }
6df4a174b4cbdc439ed435a0cdc71d4a0126d54aTimo Sirainen .url = "imap://hendrik@example.com/INBOX/Important/;UID=34534/"
6df4a174b4cbdc439ed435a0cdc71d4a0126d54aTimo Sirainen ";SECTION=1.3.TEXT/;PARTIAL=0.34254",
6df4a174b4cbdc439ed435a0cdc71d4a0126d54aTimo Sirainen .url = "imap://hendrik@example.com/INBOX/Sent"
6df4a174b4cbdc439ed435a0cdc71d4a0126d54aTimo Sirainen ";UIDVALIDITY=534?SUBJECT%20%22Frop?%22",
6df4a174b4cbdc439ed435a0cdc71d4a0126d54aTimo Sirainen .mailbox = "INBOX/Accounts/user@example.com" }
7195d775e5e943af90d24a615847c733a104e3d4Timo Sirainen .url = "../../%23news;UIDVALIDITY=546/;UID=456",
aeaf818613081b9a9ff8c9fd4306e8dbfab4fd86Timo Sirainen .have_partial = TRUE, .partial_offset = 0, .partial_size = 1024 },
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen .have_partial = TRUE, .partial_offset = 1024, .partial_size = 1024 }
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen .have_partial = TRUE, .partial_offset = 1024, .partial_size = 1024 },
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen .have_partial = TRUE, .partial_offset = 0, .partial_size = 512 }
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen .url = "imap://user@example.com/INBOX/;UID=377;URLAUTH=anonymous",
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen .uauth_rumpurl = "imap://user@example.com/INBOX/;UID=377"
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen ";URLAUTH=anonymous",
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen .url = "imap://user@example.com/INBOX/;UID=377"
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen ";URLAUTH=anonymous:internal:4142434445464748494A4B4C4D4E4F5051525354",
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen .uauth_rumpurl = "imap://user@example.com/INBOX/;UID=377"
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen ";URLAUTH=anonymous",
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen .uauth_token = (const unsigned char *)"ABCDEFGHIJKLMNOPQRST",
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen .url = "imap://user@example.com/INBOX/;UID=377"
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen ";EXPIRE=2011-02-12T12:45:14+01:00"
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen ";URLAUTH=user+frop:internal:4142434445464748494A4B4C4D4E4F5051525354",
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen .uauth_rumpurl = "imap://user@example.com/INBOX/;UID=377"
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen ";EXPIRE=2011-02-12T12:45:14+01:00;URLAUTH=user+frop",
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen .uauth_token = (const unsigned char *)"ABCDEFGHIJKLMNOPQRST",
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainenstatic const unsigned int valid_url_test_count = N_ELEMENTS(valid_url_tests);
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainenstatic void test_imap_url_valid(void)
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen unsigned int i;
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen for (i = 0; i < valid_url_test_count; i++) T_BEGIN {
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen enum imap_url_parse_flags flags = valid_url_tests[i].flags;
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen const struct imap_url *urlt = &valid_url_tests[i].url_parsed;
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen const struct imap_url *urlb = &valid_url_tests[i].url_base;
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_begin(t_strdup_printf("imap url valid [%d]", i));
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen if (imap_url_parse(url, urlb, flags, &urlp, &error) < 0)
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out_reason(t_strdup_printf("imap_url_parse(%s)",
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen valid_url_tests[i].url), urlp != NULL, error);
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen if (urlp->host_name == NULL || urlt->host_name == NULL) {
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out(t_strdup_printf("url->host_name = %s", urlp->host_name),
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out(t_strdup_printf("url->host_name = %s", urlp->host_name),
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen strcmp(urlp->host_name, urlt->host_name) == 0);
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen if (urlp->userid == NULL || urlt->userid == NULL) {
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out(t_strdup_printf("url->userid = %s", urlp->userid),
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out(t_strdup_printf("url->userid = %s", urlp->userid),
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen if (urlp->auth_type == NULL || urlt->auth_type == NULL) {
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out(t_strdup_printf("url->auth_type = %s", urlp->auth_type),
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out(t_strdup_printf("url->auth_type = %s", urlp->auth_type),
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen strcmp(urlp->auth_type, urlt->auth_type) == 0);
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out(t_strdup_printf("url->port = %u", urlp->port),
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen urlp->have_port == urlt->have_port && urlp->port == urlt->port);
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen if (urlp->mailbox == NULL || urlt->mailbox == NULL) {
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out(t_strdup_printf("url->mailbox = %s", urlp->mailbox),
aeaf818613081b9a9ff8c9fd4306e8dbfab4fd86Timo Sirainen test_out(t_strdup_printf("url->mailbox = %s", urlp->mailbox),
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out(t_strdup_printf("url->uidvalidity = %u", urlp->uidvalidity),
12fd7a30563f3256642070ef9528dda0d089cb41Timo Sirainen test_out(t_strdup_printf("url->uid = %u", urlp->uid),
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen if (urlp->section == NULL || urlt->section == NULL) {
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen test_out(t_strdup_printf("url->section = %s", urlp->section),
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen test_out(t_strdup_printf("url->section = %s", urlp->section),
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen test_out(t_strdup_printf("url->partial = %"PRIuUOFF_T".%"PRIuUOFF_T,
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen urlp->partial_offset == urlt->partial_offset &&
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen if (urlp->search_program == NULL || urlt->search_program == NULL) {
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen "url->search_program = %s", urlp->search_program),
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen urlp->search_program == urlt->search_program);
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen "url->search_program = %s", urlp->search_program),
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen strcmp(urlp->search_program, urlt->search_program) == 0);
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen "url->uauth_rumpurl = %s", urlp->uauth_rumpurl), FALSE);
a4392e9d312e3b5973fe5dbaee7028197a700ff0Timo Sirainen "url->uauth_rumpurl = %s", urlp->uauth_rumpurl),
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen strcmp(urlp->uauth_rumpurl, urlt->uauth_rumpurl) == 0);
7d800c558b4a40f11748d4ebfc2bf89eb743f03cTimo Sirainen test_out(t_strdup_printf("url->uauth_access_application = %s",
6df4a174b4cbdc439ed435a0cdc71d4a0126d54aTimo Sirainen urlp->uauth_access_application == urlt->uauth_access_application);
7a12331c6360968b141a0888e0bf04dd24145f23Timo Sirainen test_out(t_strdup_printf("url->uauth_access_application = %s",
39025a2dabfcfaeee3790988b9ea00d19887a3d3Timo Sirainen test_out(t_strdup_printf("url->uauth_access_user = %s",
size_t i;
equal);
if (equal) {
equal);
test_end();
} T_END;
struct invalid_imap_url_test {
const char *url;
.url_base = {
#ifdef HAVE_IPV6
static void test_imap_url_invalid(void)
test_end();
} T_END;
static const char *parse_create_url_tests[] = {
"imap://host.example.com/",
#ifdef HAVE_IPV6
"imap://host.%23example.com/",
"imap://user%40example.com;AUTH=STR%23ANGE@host.example.com/",
static void test_imap_url_parse_create(void)
if (imap_url_parse
test_end();
} T_END;
int main(void)
static void (*test_functions[])(void) = {