Mercurial > dovecot > core-2.2
changeset 21360:063e6955617b
lib-mail: refactor header filter test code
author | Josef 'Jeff' Sipek <jeff.sipek@dovecot.fi> |
---|---|
date | Wed, 28 Dec 2016 10:49:49 -0500 |
parents | 3ebc6467c1a9 |
children | 8902229240d5 |
files | src/lib-mail/test-istream-header-filter.c |
diffstat | 1 files changed, 40 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-mail/test-istream-header-filter.c Wed Dec 21 07:53:52 2016 +0200 +++ b/src/lib-mail/test-istream-header-filter.c Wed Dec 28 10:49:49 2016 -0500 @@ -24,20 +24,52 @@ ctx->callback_called = TRUE; } +static inline void +test_istream_run_prep(struct run_ctx *run_ctx, + header_filter_callback *callback) +{ + i_zero(run_ctx); + run_ctx->callback = callback; + run_ctx->null_hdr_seen = FALSE; + run_ctx->callback_called = FALSE; +} + +static void +test_istream_run_check(struct run_ctx *run_ctx, + struct istream *filter, + const char *output, + bool first, + size_t *size_r) +{ + const unsigned char *data; + const struct stat *st; + + if (first) + test_assert(run_ctx->null_hdr_seen); + else + test_assert(run_ctx->null_hdr_seen == run_ctx->callback_called); + + data = i_stream_get_data(filter, size_r); + test_assert(*size_r == strlen(output) && + memcmp(data, output, *size_r) == 0); + + test_assert(i_stream_stat(filter, TRUE, &st) == 0 && + (uoff_t)st->st_size == *size_r); +} + static void test_istream_run(struct istream *test_istream, unsigned int input_len, const char *output, enum header_filter_flags flags, header_filter_callback *callback) { - struct run_ctx run_ctx = { .callback = callback, .null_hdr_seen = FALSE }; + struct run_ctx run_ctx; struct istream *filter; unsigned int i; - size_t output_len = strlen(output); - const struct stat *st; - const unsigned char *data; size_t size; + test_istream_run_prep(&run_ctx, callback); + filter = i_stream_create_header_filter(test_istream, flags, NULL, 0, run_callback, &run_ctx); @@ -49,22 +81,15 @@ test_assert(i_stream_read(filter) > 0); test_assert(i_stream_read(filter) == -1); - test_assert(run_ctx.null_hdr_seen); - run_ctx.null_hdr_seen = FALSE; - run_ctx.callback_called = FALSE; - - data = i_stream_get_data(filter, &size); - test_assert(size == output_len && memcmp(data, output, size) == 0); + test_istream_run_check(&run_ctx, filter, output, TRUE, &size); /* run again to make sure it's still correct the second time */ + test_istream_run_prep(&run_ctx, callback); + i_stream_skip(filter, size); i_stream_seek(filter, 0); while (i_stream_read(filter) > 0) ; - test_assert(run_ctx.null_hdr_seen == run_ctx.callback_called); - data = i_stream_get_data(filter, &size); - test_assert(size == output_len && memcmp(data, output, size) == 0); - test_assert(i_stream_stat(filter, TRUE, &st) == 0 && - (uoff_t)st->st_size == size); + test_istream_run_check(&run_ctx, filter, output, FALSE, &size); i_stream_unref(&filter); }