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