annotate src/lib/test-istream-try.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 708b4dda62dc
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22607
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
1 /* Copyright (c) 2009-2017 Dovecot authors, see the included COPYING file */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
2
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
3 #include "test-lib.h"
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
4 #include "istream.h"
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
5 #include "istream-try.h"
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
6
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
7 void test_istream_try(void)
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
8 {
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
9 bool finished = FALSE;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
10
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
11 test_begin("istream try");
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
12 for (unsigned int test = 0; test <= 10; test++) {
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
13 struct istream *test_inputs[3], *try_input;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
14
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
15 test_inputs[0] = test_istream_create("1");
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
16 test_inputs[1] = test_istream_create("2");
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
17 test_inputs[2] = NULL;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
18 test_istream_set_size(test_inputs[0], 0);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
19 test_istream_set_size(test_inputs[1], 0);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
20 try_input = istream_try_create(test_inputs);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
21
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
22 /* nonblocking read */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
23 test_assert_idx(i_stream_read(try_input) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
24
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
25 switch (test) {
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
26 case 0:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
27 /* stream 0 is available */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
28 test_istream_set_size(test_inputs[0], 1);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
29 test_assert_idx(i_stream_read(try_input) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
30 test_assert_idx(i_stream_get_data_size(test_inputs[0]) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
31 test_assert_idx(i_stream_get_data_size(test_inputs[1]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
32 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
33 case 1:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
34 /* stream 1 is available, but not used before 0 */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
35 test_istream_set_size(test_inputs[1], 1);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
36 test_assert_idx(i_stream_read(try_input) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
37 test_assert_idx(i_stream_get_data_size(test_inputs[0]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
38 test_assert_idx(i_stream_get_data_size(test_inputs[1]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
39 /* continue failing stream 0 -> 1 is available */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
40 test_inputs[0]->stream_errno = EINVAL;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
41 test_assert_idx(i_stream_read(try_input) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
42 test_assert_idx(i_stream_get_data_size(test_inputs[0]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
43 test_assert_idx(i_stream_get_data_size(test_inputs[1]) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
44 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
45 case 2:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
46 /* both streams are available - stream 0 is read */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
47 test_istream_set_size(test_inputs[0], 1);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
48 test_istream_set_size(test_inputs[1], 1);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
49 test_assert_idx(i_stream_read(try_input) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
50 test_assert_idx(i_stream_get_data_size(test_inputs[0]) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
51 test_assert_idx(i_stream_get_data_size(test_inputs[1]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
52 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
53 case 3:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
54 /* stream 0 fails */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
55 test_inputs[0]->stream_errno = EINVAL;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
56 test_assert_idx(i_stream_read(try_input) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
57 test_assert_idx(i_stream_get_data_size(test_inputs[0]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
58 test_assert_idx(i_stream_get_data_size(test_inputs[1]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
59 /* continue making stream 1 available */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
60 test_istream_set_size(test_inputs[1], 1);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
61 test_assert_idx(i_stream_read(try_input) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
62 test_assert_idx(i_stream_get_data_size(test_inputs[0]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
63 test_assert_idx(i_stream_get_data_size(test_inputs[1]) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
64 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
65 case 4:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
66 /* stream 1 fails */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
67 test_inputs[1]->stream_errno = EINVAL;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
68 test_assert_idx(i_stream_read(try_input) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
69 test_assert_idx(i_stream_get_data_size(test_inputs[0]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
70 test_assert_idx(i_stream_get_data_size(test_inputs[1]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
71 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
72 case 5:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
73 /* stream 0 fails, stream 1 is available */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
74 test_inputs[0]->stream_errno = EINVAL;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
75 test_istream_set_size(test_inputs[1], 1);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
76 test_assert_idx(i_stream_read(try_input) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
77 test_assert_idx(i_stream_get_data_size(test_inputs[0]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
78 test_assert_idx(i_stream_get_data_size(test_inputs[1]) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
79 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
80 case 6:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
81 /* stream 0 is available, stream 1 fails */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
82 test_inputs[1]->stream_errno = EINVAL;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
83 test_istream_set_size(test_inputs[0], 1);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
84 test_assert_idx(i_stream_read(try_input) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
85 test_assert_idx(i_stream_get_data_size(test_inputs[0]) == 1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
86 test_assert_idx(i_stream_get_data_size(test_inputs[1]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
87 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
88 case 7:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
89 /* both streams fail */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
90 test_inputs[0]->stream_errno = EINVAL;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
91 test_inputs[1]->stream_errno = EINVAL;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
92 test_assert_idx(i_stream_read(try_input) == -1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
93 test_assert_idx(try_input->stream_errno == EINVAL, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
94 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
95 case 8:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
96 /* stream 0 fails with EINVAL, stream 1 with EIO */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
97 test_inputs[0]->stream_errno = EINVAL;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
98 test_inputs[1]->stream_errno = EIO;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
99 test_assert_idx(i_stream_read(try_input) == -1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
100 test_assert_idx(try_input->stream_errno == EIO, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
101 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
102 case 9:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
103 /* stream 0 fails with EIO, stream 1 with EINVAL */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
104 test_inputs[0]->stream_errno = EIO;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
105 test_inputs[1]->stream_errno = EINVAL;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
106 test_assert_idx(i_stream_read(try_input) == -1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
107 test_assert_idx(try_input->stream_errno == EIO, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
108 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
109 case 10:
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
110 /* stream 0 fails with EIO, stream 1 would work.. */
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
111 test_inputs[0]->stream_errno = EIO;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
112 test_istream_set_size(test_inputs[1], 1);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
113 test_assert_idx(i_stream_read(try_input) == -1, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
114 test_assert_idx(try_input->stream_errno == EIO, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
115 test_assert_idx(i_stream_get_data_size(test_inputs[1]) == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
116
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
117 finished = TRUE;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
118 break;
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
119 }
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
120
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
121 test_assert_idx(test_inputs[0]->v_offset == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
122 test_assert_idx(test_inputs[1]->v_offset == 0, test);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
123
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
124 i_stream_unref(&test_inputs[0]);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
125 i_stream_unref(&test_inputs[1]);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
126 i_stream_unref(&try_input);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
127 }
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
128 i_assert(finished);
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
129 test_end();
708b4dda62dc lib: Add istream-try
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
130 }