Mercurial > dovecot > core-2.2
annotate src/lib/test-istream.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:
19552
diff
changeset
|
1 /* Copyright (c) 2014-2017 Dovecot authors, see the included COPYING file */ |
17508
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "test-lib.h" |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "istream.h" |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 static void test_istream_children(void) |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 { |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 struct istream *parent, *child1, *child2; |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 const unsigned char *data; |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 size_t size; |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 test_begin("istream children"); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 parent = test_istream_create_data("123456789", 9); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 test_istream_set_max_buffer_size(parent, 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 child1 = i_stream_create_limit(parent, (uoff_t)-1); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 child2 = i_stream_create_limit(parent, (uoff_t)-1); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 /* child1 read beginning */ |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 test_assert(i_stream_read(child1) == 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 data = i_stream_get_data(child1, &size); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 test_assert(size == 3 && memcmp(data, "123", 3) == 0); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 i_stream_skip(child1, 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 /* child1 read middle.. */ |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 test_assert(i_stream_read(child1) == 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 data = i_stream_get_data(child1, &size); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 test_assert(size == 3 && memcmp(data, "456", 3) == 0); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 /* child2 read beginning.. */ |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 test_assert(i_stream_read(child2) == 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 data = i_stream_get_data(child2, &size); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 test_assert(size == 3 && memcmp(data, "123", 3) == 0); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 /* child1 check middle again.. the parent has been modified, |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 so it can't return the original data (without some code changes). */ |
18267
8d95e460094d
lib: Make static analyzer happier
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
35 test_assert(i_stream_get_data_size(child1) == 0); |
17508
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 i_stream_skip(child1, 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 /* child1 read end */ |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 test_assert(i_stream_read(child1) == 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 data = i_stream_get_data(child1, &size); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 test_assert(size == 3 && memcmp(data, "789", 3) == 0); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 i_stream_skip(child1, 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 test_assert(i_stream_read(child1) == -1); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 /* child2 check beginning again.. */ |
18267
8d95e460094d
lib: Make static analyzer happier
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
44 test_assert(i_stream_get_data_size(child1) == 0); |
17508
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 i_stream_skip(child2, 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 /* child2 read middle */ |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 test_assert(i_stream_read(child2) == 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 data = i_stream_get_data(child2, &size); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 test_assert(size == 3 && memcmp(data, "456", 3) == 0); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 i_stream_skip(child2, 3); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 i_stream_destroy(&child1); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 i_stream_destroy(&child2); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 i_stream_destroy(&parent); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 test_end(); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 } |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 void test_istream(void) |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 { |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 test_istream_children(); |
01061ac25fe1
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 } |