Mercurial > dovecot > core-2.2
annotate src/lib/test-istream.c @ 23007:36e01285b5b8
lib: buffer - Improve header comment for buffer_insert() and buffer_delete().
author | Stephan Bosch <stephan.bosch@dovecot.fi> |
---|---|
date | Mon, 18 Mar 2019 00:52:37 +0100 |
parents | cb108f786fb4 |
children |
rev | line source |
---|---|
22713
cb108f786fb4
Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21390
diff
changeset
|
1 /* Copyright (c) 2014-2018 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 } |