From e41845d13acfc356aaaac83091c810c8609446db Mon Sep 17 00:00:00 2001 From: Josef 'Jeff' Sipek Date: Wed, 28 Dec 2016 10:49:49 -0500 Subject: [PATCH] lib-mail: refactor header filter test code --- src/lib-mail/test-istream-header-filter.c | 55 ++++++++++++++++------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/src/lib-mail/test-istream-header-filter.c b/src/lib-mail/test-istream-header-filter.c index 317486d699..15adc9d558 100644 --- a/src/lib-mail/test-istream-header-filter.c +++ b/src/lib-mail/test-istream-header-filter.c @@ -24,20 +24,52 @@ static void run_callback(struct header_filter_istream *input, 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_istream_run(struct istream *test_istream, 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); } -- 2.47.3