annotate src/lib/test-istream-sized.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 bc16d43aed49
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21685
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
1 /* Copyright (c) 2016 Dovecot authors, see the included COPYING file */
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
2
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
3 #include "test-lib.h"
21687
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
4 #include "istream.h"
21685
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
5 #include "istream-sized.h"
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
6
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
7 static const struct {
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
8 const char *input;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
9 uoff_t size;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
10 int stream_errno;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
11 } tests[] = {
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
12 { "", 0, 0 },
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
13 { "", 1, EPIPE },
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
14 { "a", 1, 0 },
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
15 { "ab", 1, EINVAL },
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
16 { "ab", 0, EINVAL },
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
17 { "ab", (uoff_t)-1, EPIPE },
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
18 };
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
19
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
20 static void
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
21 run_test(const char *sized_input, uoff_t sized_size, int stream_errno)
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
22 {
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
23 unsigned int sized_input_len = strlen(sized_input);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
24 struct istream *input_data, *input;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
25 const unsigned char *data;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
26 size_t i, size;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
27 int ret = 0;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
28
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
29 input_data = test_istream_create_data(sized_input, sized_input_len);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
30 test_istream_set_allow_eof(input_data, FALSE);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
31 input = i_stream_create_sized(input_data, sized_size);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
32
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
33 for (i = 1; i < sized_input_len; i++) {
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
34 test_istream_set_size(input_data, i);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
35 while ((ret = i_stream_read(input)) > 0) ;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
36 if (ret == -1 && stream_errno != 0)
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
37 break;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
38 test_assert(ret == 0);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
39 }
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
40 if (ret == 0) {
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
41 test_istream_set_allow_eof(input_data, TRUE);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
42 test_istream_set_size(input_data, i);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
43 while ((ret = i_stream_read(input)) > 0) ;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
44 }
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
45 test_assert(ret == -1);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
46 test_assert(input->stream_errno == stream_errno);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
47
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
48 data = i_stream_get_data(input, &size);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
49 test_assert(size == I_MIN(sized_input_len, sized_size));
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
50 if (size > 0)
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
51 test_assert(memcmp(data, sized_input, size) == 0);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
52 i_stream_unref(&input);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
53 i_stream_unref(&input_data);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
54 }
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
55
21687
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
56 static void test_istream_sized_full(bool exact)
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
57 {
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
58 const unsigned char test_data[10] = "1234567890";
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
59 struct istream *test_input, *input;
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
60 unsigned int i, j;
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
61 int expected_errno;
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
62
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
63 for (i = 1; i < sizeof(test_data)*2; i++) {
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
64 test_input = test_istream_create_data(test_data, sizeof(test_data));
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
65 test_istream_set_allow_eof(test_input, FALSE);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
66 test_istream_set_size(test_input, 0);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
67
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
68 if (exact)
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
69 input = i_stream_create_sized(test_input, i);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
70 else
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
71 input = i_stream_create_min_sized(test_input, i);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
72 for (j = 1; j <= I_MIN(i, sizeof(test_data)); j++) {
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
73 test_assert_idx(i_stream_read(input) == 0, j);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
74 test_istream_set_size(test_input, j);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
75 test_assert_idx(i_stream_read(input) == 1, j);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
76 }
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
77 test_assert_idx(i_stream_read(input) == 0, i);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
78 if (j <= sizeof(test_data))
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
79 test_istream_set_size(test_input, j);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
80 else
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
81 test_istream_set_allow_eof(test_input, TRUE);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
82 test_assert_idx(i_stream_read(input) == -1 && input->eof, i);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
83 if (i > sizeof(test_data))
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
84 expected_errno = EPIPE;
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
85 else if (i < sizeof(test_data) && exact)
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
86 expected_errno = EINVAL;
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
87 else
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
88 expected_errno = 0;
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
89 test_assert_idx(input->stream_errno == expected_errno, i);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
90 i_stream_unref(&input);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
91 i_stream_unref(&test_input);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
92 }
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
93 }
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
94
21685
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
95 void test_istream_sized(void)
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
96 {
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
97 unsigned int i;
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
98
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
99 for (i = 0; i < N_ELEMENTS(tests); i++) {
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
100 test_begin(t_strdup_printf("istream sized %u", i+1));
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
101 run_test(tests[i].input, tests[i].size, tests[i].stream_errno);
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
102 test_end();
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
103 }
21687
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
104 test_begin("istream sized");
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
105 test_istream_sized_full(TRUE);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
106 test_end();
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
107
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
108 test_begin("istream sized min");
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
109 test_istream_sized_full(FALSE);
bc16d43aed49 lib: Added i_stream_create_min_sized*()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21685
diff changeset
110 test_end();
21685
5eb922a4fdf6 lib: istream-sized - set stream_errno=EPIPE if stream is too small
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
111 }