dovecot-2.2: lib: test-istream-crlf - fix expected output string...

dovecot at dovecot.org dovecot at dovecot.org
Wed Nov 4 09:40:52 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/5717e416f31f
changeset: 19342:5717e416f31f
user:      Phil Carmody <phil at dovecot.fi>
date:      Wed Nov 04 11:39:58 2015 +0200
description:
lib: test-istream-crlf - fix expected output strings, add more coverage
Fix an out-by-one which was missing trailing carriage returns in _lf mode.

Debug: input = [19]:``...........N.N....R''
Debug: output= [19]:``...........N.N....R''
Debug: data  = [18]:``...........N.N....''
test-istream-crlf.c:78: Assert(#20) failed: size == str_len(output)

Add some randomised tests to get better coverage of all possibilities.

Signed-off-by: Phil Carmody <phil at dovecot.fi>

diffstat:

 src/lib/test-istream-crlf.c |  27 ++++++++++++++++++++++++---
 1 files changed, 24 insertions(+), 3 deletions(-)

diffs (50 lines):

diff -r 1e7fe403dd50 -r 5717e416f31f src/lib/test-istream-crlf.c
--- a/src/lib/test-istream-crlf.c	Tue Oct 27 21:54:26 2015 -0600
+++ b/src/lib/test-istream-crlf.c	Wed Nov 04 11:39:58 2015 +0200
@@ -24,7 +24,7 @@
 			crlf_istream = i_stream_create_lf(istream);
 			for (i = 0; i < input_len; i++) {
 				if (input[i] == '\r' &&
-				    (i == input_len || input[i+1] == '\n'))
+				    (i == input_len-1 || input[i+1] == '\n'))
 					;
 				else
 					str_append_c(output, input[i]);
@@ -66,9 +66,9 @@
 				test_assert(pos + (unsigned int)ret1 == size);
 				pos += ret1;
 			}
-			test_assert(memcmp(data, str_data(output), size) == 0);
+			test_assert_idx(memcmp(data, str_data(output), size) == 0, j*10000+i);
 		}
-		test_assert(size == str_len(output));
+		test_assert_idx(size == str_len(output), j*10000+i);
 		i_stream_unref(&crlf_istream);
 		i_stream_unref(&istream);
 	}
@@ -89,4 +89,25 @@
 	for (i = 0; i < N_ELEMENTS(input); i++)
 		test_istream_crlf_input(input[i]);
 	test_end();
+
+#define ISTREAM_CRLF_TEST_REPS 1000
+	test_begin("istream crlf(random)");
+	for (i = 0; i < ISTREAM_CRLF_TEST_REPS; i++) T_BEGIN {
+		char buf[100];
+		size_t len = 0;
+		while (len < sizeof(buf) - 1) {
+			switch(rand()%16) {
+			case 0: goto outahere;
+			case 1: buf[len] = '\r'; break;
+			case 2: buf[len] = '\n'; break;
+			default: buf[len]= '.'; break;
+			}
+			len++;
+		}
+	outahere:
+		buf[len] = '\0';
+		if (len > 0)
+			test_istream_crlf_input(buf);
+	} T_END;
+	test_end();
 }


More information about the dovecot-cvs mailing list