dovecot-2.0: Added unit test for istream-tee.
dovecot at dovecot.org
dovecot at dovecot.org
Fri Aug 14 03:04:00 EEST 2009
details: http://hg.dovecot.org/dovecot-2.0/rev/57ae66e0fd38
changeset: 9786:57ae66e0fd38
user: Timo Sirainen <tss at iki.fi>
date: Thu Aug 13 20:03:52 2009 -0400
description:
Added unit test for istream-tee.
diffstat:
4 files changed, 120 insertions(+)
src/lib/Makefile.am | 1
src/lib/test-istream-tee.c | 117 ++++++++++++++++++++++++++++++++++++++++++++
src/lib/test-lib.c | 1
src/lib/test-lib.h | 1
diffs (154 lines):
diff -r bba7c46359ac -r 57ae66e0fd38 src/lib/Makefile.am
--- a/src/lib/Makefile.am Thu Aug 13 19:03:52 2009 -0400
+++ b/src/lib/Makefile.am Thu Aug 13 20:03:52 2009 -0400
@@ -220,6 +220,7 @@ test_lib_SOURCES = \
test-buffer.c \
test-hex-binary.c \
test-istream-crlf.c \
+ test-istream-tee.c \
test-mempool-alloconly.c \
test-network.c \
test-primes.c \
diff -r bba7c46359ac -r 57ae66e0fd38 src/lib/test-istream-tee.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib/test-istream-tee.c Thu Aug 13 20:03:52 2009 -0400
@@ -0,0 +1,117 @@
+/* Copyright (c) 2009 Dovecot authors, see the included COPYING file */
+
+#include "test-lib.h"
+#include "str.h"
+#include "istream-internal.h"
+#include "istream-tee.h"
+
+#include <stdlib.h>
+
+#define TEST_BUF_SIZE I_STREAM_MIN_SIZE
+#define TEST_STR_LEN (TEST_BUF_SIZE*3)
+#define CHILD_COUNT 5
+
+static void test_istream_tee_tailing(const char *str)
+{
+ struct istream *test_input, *child_input[CHILD_COUNT];
+ struct tee_istream *tee;
+ unsigned int i, len;
+
+ test_input = test_istream_create(str);
+ test_istream_set_max_buffer_size(test_input, TEST_BUF_SIZE);
+
+ test_begin("istream tee tailing");
+ tee = tee_i_stream_create(test_input);
+ for (i = 0; i < CHILD_COUNT; i++)
+ child_input[i] = tee_i_stream_create_child(tee);
+
+ test_istream_set_allow_eof(test_input, FALSE);
+ for (len = 1; len < TEST_BUF_SIZE; len++) {
+ test_istream_set_size(test_input, len);
+ for (i = 0; i < CHILD_COUNT; i++) {
+ test_assert(i_stream_read(child_input[i]) == 1);
+ test_assert(i_stream_read(child_input[i]) == 0);
+ }
+ }
+
+ test_istream_set_size(test_input, len);
+ for (i = 0; i < CHILD_COUNT; i++) {
+ test_assert(i_stream_read(child_input[i]) == 1);
+ test_assert(i_stream_read(child_input[i]) == -2);
+ }
+
+ for (len++; len <= TEST_STR_LEN; len++) {
+ test_istream_set_size(test_input, len);
+ for (i = 0; i < CHILD_COUNT; i++)
+ test_assert(i_stream_read(child_input[i]) == -2);
+ for (i = 0; i < CHILD_COUNT-1; i++) {
+ i_stream_skip(child_input[i], 1);
+ test_assert(i_stream_read(child_input[i]) == 0);
+ }
+ i_stream_skip(child_input[i], 1);
+ for (i = 0; i < CHILD_COUNT; i++) {
+ test_assert(i_stream_read(child_input[i]) == 1);
+ test_assert(i_stream_read(child_input[i]) == -2);
+ }
+ }
+
+ for (i = 0; i < CHILD_COUNT; i++) {
+ i_stream_skip(child_input[i], 1);
+ test_assert(i_stream_read(child_input[i]) == 0);
+ }
+ test_istream_set_allow_eof(test_input, TRUE);
+ for (i = 0; i < CHILD_COUNT; i++) {
+ test_assert(i_stream_read(child_input[i]) == -1);
+ i_stream_unref(&child_input[i]);
+ }
+ i_stream_unref(&test_input);
+
+ test_end();
+}
+
+static void test_istream_tee_blocks(const char *str)
+{
+ struct istream *test_input, *child_input[CHILD_COUNT];
+ struct tee_istream *tee;
+ unsigned int i, j;
+
+ test_input = test_istream_create(str);
+ test_istream_set_max_buffer_size(test_input, TEST_BUF_SIZE);
+
+ test_begin("istream tee blocks");
+ tee = tee_i_stream_create(test_input);
+ for (i = 0; i < CHILD_COUNT; i++)
+ child_input[i] = tee_i_stream_create_child(tee);
+
+ test_istream_set_allow_eof(test_input, FALSE);
+ for (j = 1; j <= 3; j++) {
+ test_istream_set_size(test_input, TEST_BUF_SIZE*j);
+ for (i = 0; i < CHILD_COUNT; i++) {
+ test_assert(i_stream_read(child_input[i]) == TEST_BUF_SIZE);
+ i_stream_skip(child_input[i], TEST_BUF_SIZE);
+ }
+ }
+ test_istream_set_allow_eof(test_input, TRUE);
+ for (i = 0; i < CHILD_COUNT; i++) {
+ test_assert(i_stream_read(child_input[i]) == -1);
+ i_stream_unref(&child_input[i]);
+ }
+ i_stream_unref(&test_input);
+
+ test_end();
+}
+
+void test_istream_tee(void)
+{
+ string_t *str;
+ unsigned int i;
+
+ str = str_new(default_pool, TEST_STR_LEN);
+ for (i = 0; i < TEST_STR_LEN; i++)
+ str_append_c(str, 'a' + i%26);
+
+ test_istream_tee_tailing(str_c(str));
+ test_istream_tee_blocks(str_c(str));
+
+ str_free(&str);
+}
diff -r bba7c46359ac -r 57ae66e0fd38 src/lib/test-lib.c
--- a/src/lib/test-lib.c Thu Aug 13 19:03:52 2009 -0400
+++ b/src/lib/test-lib.c Thu Aug 13 20:03:52 2009 -0400
@@ -12,6 +12,7 @@ int main(void)
test_buffer,
test_hex_binary,
test_istream_crlf,
+ test_istream_tee,
test_mempool_alloconly,
test_network,
test_primes,
diff -r bba7c46359ac -r 57ae66e0fd38 src/lib/test-lib.h
--- a/src/lib/test-lib.h Thu Aug 13 19:03:52 2009 -0400
+++ b/src/lib/test-lib.h Thu Aug 13 20:03:52 2009 -0400
@@ -11,6 +11,7 @@ void test_buffer(void);
void test_buffer(void);
void test_hex_binary(void);
void test_istream_crlf(void);
+void test_istream_tee(void);
void test_mempool_alloconly(void);
void test_network(void);
void test_primes(void);
More information about the dovecot-cvs
mailing list