From: Timo Sirainen Date: Sat, 11 Jun 2016 18:23:57 +0000 (+0300) Subject: lib-mail: Improved message-parser unit tests. X-Git-Tag: 2.2.25.rc1~160 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1f2c248dc374563a50beaab5024383541377612d;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: Improved message-parser unit tests. --- diff --git a/src/lib-mail/test-message-parser.c b/src/lib-mail/test-message-parser.c index 29fce70726..66360d4905 100644 --- a/src/lib-mail/test-message-parser.c +++ b/src/lib-mail/test-message-parser.c @@ -68,6 +68,32 @@ static bool msg_parts_cmp(struct message_part *p1, struct message_part *p2) return TRUE; } +static void test_parsed_parts(struct istream *input, struct message_part *parts) +{ + struct message_parser_ctx *parser; + struct message_block block; + struct message_part *parts2; + uoff_t i, input_size; + const char *error; + int ret; + + i_stream_seek(input, 0); + if (i_stream_get_size(input, TRUE, &input_size) < 0) + i_unreached(); + + parser = message_parser_init_from_parts(parts, input, 0, + MESSAGE_PARSER_FLAG_SKIP_BODY_BLOCK); + for (i = 1; i <= input_size*2+1; i++) { + test_istream_set_size(input, i/2); + if (i > TEST_MSG_LEN*2) + test_istream_set_allow_eof(input, TRUE); + while ((ret = message_parser_parse_next_block(parser, + &block)) > 0) ; + } + test_assert(message_parser_deinit_from_parts(&parser, &parts2, &error) == 0); + test_assert(msg_parts_cmp(parts, parts2)); +} + static void test_message_parser_small_blocks(void) { struct message_parser_ctx *parser; @@ -170,18 +196,25 @@ static const char input_msg[] = test_assert(message_parser_deinit(&parser, &parts) == 0); test_assert((parts->flags & MESSAGE_PART_FLAG_MULTIPART) != 0); + test_assert(parts->header_size.lines == 2); + test_assert(parts->header_size.physical_size == 48); + test_assert(parts->header_size.virtual_size == 48+2); test_assert(parts->body_size.lines == 8); test_assert(parts->body_size.physical_size == 112); test_assert(parts->body_size.virtual_size == 112+7); + test_assert(parts->children->physical_pos == 55); test_assert(parts->children->header_size.physical_size == 0); test_assert(parts->children->body_size.physical_size == 0); test_assert(parts->children->body_size.lines == 0); + test_assert(parts->children->next->physical_pos == 62); test_assert(parts->children->next->header_size.physical_size == 24); test_assert(parts->children->next->header_size.virtual_size == 24); test_assert(parts->children->next->header_size.lines == 0); + test_assert(parts->children->next->next->physical_pos == 94); test_assert(parts->children->next->next->header_size.physical_size == 24); test_assert(parts->children->next->next->header_size.virtual_size == 24); test_assert(parts->children->next->next->header_size.lines == 0); + test_assert(parts->children->next->next->next->physical_pos == 127); test_assert(parts->children->next->next->next->header_size.physical_size == 23); test_assert(parts->children->next->next->next->header_size.virtual_size == 23); test_assert(parts->children->next->next->next->header_size.lines == 0); @@ -191,6 +224,7 @@ static const char input_msg[] = } test_assert(parts->children->next->next->next->next == NULL); + test_parsed_parts(input, parts); i_stream_unref(&input); pool_unref(&pool); test_end(); @@ -251,6 +285,7 @@ static const char input_msg[] = test_assert(parts->children->next->body_size.virtual_size == 5+2); test_assert(parts->children->next->children == NULL); + test_parsed_parts(input, parts); i_stream_unref(&input); pool_unref(&pool); test_end(); @@ -285,6 +320,7 @@ static const char input_msg[] = test_assert(parts->children == NULL); + test_parsed_parts(input, parts); i_stream_unref(&input); pool_unref(&pool); test_end(); @@ -303,7 +339,7 @@ static const char input_msg[] = pool_t pool; int ret; - test_begin("message parser truncated mime headers 3"); + test_begin("message parser empty multipart"); pool = pool_alloconly_create("message parser", 10240); input = test_istream_create(input_msg); @@ -322,6 +358,7 @@ static const char input_msg[] = test_assert(parts->children == NULL); + test_parsed_parts(input, parts); i_stream_unref(&input); pool_unref(&pool); test_end(); @@ -379,6 +416,7 @@ static const char input_msg[] = test_assert(parts->children->children->body_size.physical_size == 5); test_assert(parts->children->children->body_size.virtual_size == 5+1); + test_parsed_parts(input, parts); i_stream_unref(&input); pool_unref(&pool); test_end(); @@ -436,6 +474,7 @@ static const char input_msg[] = test_assert(parts->children->children->body_size.physical_size == 5); test_assert(parts->children->children->body_size.virtual_size == 5+1); + test_parsed_parts(input, parts); i_stream_unref(&input); pool_unref(&pool); test_end(); @@ -493,6 +532,7 @@ static const char input_msg[] = test_assert(parts->children->children->body_size.physical_size == 5); test_assert(parts->children->children->body_size.virtual_size == 5+1); + test_parsed_parts(input, parts); i_stream_unref(&input); pool_unref(&pool); test_end(); @@ -568,6 +608,7 @@ static const char input_msg[] = test_assert(part->children == NULL); test_assert(part->next == NULL); + test_parsed_parts(input, parts); i_stream_unref(&input); pool_unref(&pool); test_end(); @@ -595,6 +636,7 @@ static void test_message_parser_no_eoh(void) test_assert(message_parser_parse_next_block(parser, &block) < 0); test_assert(message_parser_deinit(&parser, &parts) == 0); + test_parsed_parts(input, parts); i_stream_unref(&input); pool_unref(&pool); test_end();