Mercurial > dovecot > core-2.2
annotate src/lib/test-istream-crlf.c @ 22664:fea53c2725c0
director: Fix director_max_parallel_moves/kicks type
Should be uint, not time.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 09 Nov 2017 12:24:16 +0200 |
parents | 2e2563132d5f |
children | cb108f786fb4 |
rev | line source |
---|---|
21390
2e2563132d5f
Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
20639
diff
changeset
|
1 /* Copyright (c) 2007-2017 Dovecot authors, see the included COPYING file */ |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "test-lib.h" |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "str.h" |
13529
cf77e448295c
Renamed lib/*-internal.h files to lib/*-private.h for consistency.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
5 #include "istream-private.h" |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "istream-crlf.h" |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 |
9790
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
8 static void test_istream_crlf_input(const char *input) |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 string_t *output; |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 const unsigned char *data; |
11076
fa08ed2b7560
Small code changes to make static analyzer happier.
Timo Sirainen <tss@iki.fi>
parents:
10582
diff
changeset
|
12 size_t size = 0; |
9790
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
13 ssize_t ret1, ret2; |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 unsigned int i, j, pos, input_len = strlen(input); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 struct istream *istream, *crlf_istream; |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 output = t_str_new(256); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 for (j = 0; j < 4; j++) { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 istream = i_stream_create_from_data(input, input_len); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 str_truncate(output, 0); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 if (j%2 == 0) { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 /* drop CRs */ |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 crlf_istream = i_stream_create_lf(istream); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 for (i = 0; i < input_len; i++) { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 if (input[i] == '\r' && |
19342
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
27 (i == input_len-1 || input[i+1] == '\n')) |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 ; |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 else |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 str_append_c(output, input[i]); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 } |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 } else { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 /* add missing CRs */ |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 crlf_istream = i_stream_create_crlf(istream); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 for (i = 0; i < input_len; i++) { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 if (input[i] == '\n' && |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 (i == 0 || input[i-1] != '\r')) |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 str_append_c(output, '\r'); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 str_append_c(output, input[i]); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 } |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 } |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 pos = 0; |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 for (i = 1; i <= input_len; i++) { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 if (j >= 2) { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 i_stream_unref(&istream); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 i_stream_unref(&crlf_istream); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 istream = i_stream_create_from_data(input, |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 input_len); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 crlf_istream = j%2 == 0 ? |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 i_stream_create_lf(istream) : |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 i_stream_create_crlf(istream); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 pos = 0; |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 } |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 istream->real_stream->pos = i; |
9790
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
56 ret1 = i_stream_read(crlf_istream); |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 if (crlf_istream->real_stream->buffer_size != 0) { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 /* this is pretty evil */ |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 crlf_istream->real_stream->buffer_size = |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 I_MAX(crlf_istream->real_stream->pos, i); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 } |
9790
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
62 ret2 = i_stream_read(crlf_istream); |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 data = i_stream_get_data(crlf_istream, &size); |
9790
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
64 if (ret1 > 0 || ret2 > 0) { |
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
65 ret1 = I_MAX(ret1, 0) + I_MAX(ret2, 0); |
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
66 test_assert(pos + (unsigned int)ret1 == size); |
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
67 pos += ret1; |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 } |
20639
d6124d30333c
lib,lib-test: stop calling memcmp and memcpy with NULL in tests
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents:
19552
diff
changeset
|
69 if (size > 0) |
d6124d30333c
lib,lib-test: stop calling memcmp and memcpy with NULL in tests
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents:
19552
diff
changeset
|
70 test_assert_idx(memcmp(data, str_data(output), |
d6124d30333c
lib,lib-test: stop calling memcmp and memcpy with NULL in tests
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents:
19552
diff
changeset
|
71 size) == 0, j*10000+i); |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 } |
19342
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
73 test_assert_idx(size == str_len(output), j*10000+i); |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 i_stream_unref(&crlf_istream); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 i_stream_unref(&istream); |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 } |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 } |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 |
9785
bba7c46359ac
Renamed test-istream.c to test-istream-crlf.c
Timo Sirainen <tss@iki.fi>
parents:
9425
diff
changeset
|
79 void test_istream_crlf(void) |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 const char *input[] = { |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 "\rfoo", |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 "foo\nbar\r\nbaz\r\r\n", |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 "\r\nfoo", |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 "\r\r\n", |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 "\nfoo" |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 }; |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 unsigned int i; |
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 |
9790
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
90 test_begin("istream crlf"); |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 for (i = 0; i < N_ELEMENTS(input); i++) |
9790
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
92 test_istream_crlf_input(input[i]); |
a13837027b29
lf-istream: Don't assert-crash if last character in buffer is CR, not followed by LF.
Timo Sirainen <tss@iki.fi>
parents:
9785
diff
changeset
|
93 test_end(); |
19342
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
94 |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
95 #define ISTREAM_CRLF_TEST_REPS 1000 |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
96 test_begin("istream crlf(random)"); |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
97 for (i = 0; i < ISTREAM_CRLF_TEST_REPS; i++) T_BEGIN { |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
98 char buf[100]; |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
99 size_t len = 0; |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
100 while (len < sizeof(buf) - 1) { |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
101 switch(rand()%16) { |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
102 case 0: goto outahere; |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
103 case 1: buf[len] = '\r'; break; |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
104 case 2: buf[len] = '\n'; break; |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
105 default: buf[len]= '.'; break; |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
106 } |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
107 len++; |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
108 } |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
109 outahere: |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
110 buf[len] = '\0'; |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
111 if (len > 0) |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
112 test_istream_crlf_input(buf); |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
113 } T_END; |
5717e416f31f
lib: test-istream-crlf - fix expected output strings, add more coverage
Phil Carmody <phil@dovecot.fi>
parents:
18137
diff
changeset
|
114 test_end(); |
9258
665ea7a8d26e
Tests are now run on "make check". Added initial tests for lib-index.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 } |