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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }