Mercurial > dovecot > core-2.2
annotate src/lib/test-multiplex.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:
22596
diff
changeset
|
1 /* Copyright (c) 2017-2018 Dovecot authors, see the included COPYING file */ |
22553
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
2 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
3 #include "test-lib.h" |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
4 #include "ioloop.h" |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
5 #include "str.h" |
22577
c6c9c24d6182
lib: iostream-multiplex tests - Fix hangs by setting the pipe fds non-blocking
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22553
diff
changeset
|
6 #include "fd-set-nonblock.h" |
22553
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
7 #include "istream.h" |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
8 #include "istream-multiplex.h" |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
9 #include "ostream.h" |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
10 #include "ostream-multiplex.h" |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
11 #include "ostream.h" |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
12 #include "randgen.h" |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
13 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
14 #include <unistd.h> |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
15 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
16 struct test_channel { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
17 int fds[2]; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
18 unsigned int cid; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
19 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
20 struct istream *in; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
21 struct ostream *out; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
22 struct io *io; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
23 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
24 struct istream *in_alt; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
25 struct ostream *out_alt; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
26 struct io *io_alt; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
27 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
28 buffer_t *received; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
29 buffer_t *received_alt; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
30 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
31 unsigned int counter; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
32 }; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
33 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
34 static struct test_channel test_channel[2]; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
35 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
36 static void test_multiplex_channel_write(struct test_channel *channel) |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
37 { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
38 unsigned char buf[128]; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
39 size_t len = rand() % sizeof(buf); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
40 random_fill(buf, len); |
22596
1a7bbda6284b
iostream-multiplex: Check return values in tests
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
22577
diff
changeset
|
41 o_stream_nsend(channel->out, buf, len); |
1a7bbda6284b
iostream-multiplex: Check return values in tests
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
22577
diff
changeset
|
42 o_stream_nsend(channel->out_alt, buf, len); |
22553
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
43 } |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
44 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
45 static void test_multiplex_stream_write(struct ostream *channel ATTR_UNUSED) |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
46 { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
47 if (test_channel[0].received->used > 1000 && |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
48 test_channel[1].received->used > 1000) |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
49 io_loop_stop(current_ioloop); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
50 else |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
51 test_multiplex_channel_write(&test_channel[rand() % 2]); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
52 } |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
53 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
54 static void test_istream_multiplex_stream_read(struct test_channel *channel) |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
55 { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
56 const unsigned char *data = NULL; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
57 size_t siz = 0; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
58 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
59 if (i_stream_read(channel->in) > 0) { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
60 data = i_stream_get_data(channel->in, &siz); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
61 buffer_append(channel->received, data, siz); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
62 i_stream_skip(channel->in, siz); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
63 } |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
64 } |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
65 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
66 static void test_istream_read_alt(struct test_channel *channel) |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
67 { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
68 const unsigned char *data = NULL; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
69 size_t siz = 0; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
70 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
71 if (i_stream_read(channel->in_alt) > 0) { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
72 data = i_stream_get_data(channel->in_alt, &siz); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
73 buffer_append(channel->received_alt, data, siz); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
74 i_stream_skip(channel->in_alt, siz); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
75 } |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
76 } |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
77 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
78 static void setup_channel(struct test_channel *channel, |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
79 struct istream *is, struct ostream *os) |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
80 { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
81 /* setup first channel */ |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
82 channel->in = is; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
83 channel->out = os; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
84 channel->io = io_add_istream(is, test_istream_multiplex_stream_read, |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
85 channel); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
86 test_assert(pipe(channel->fds) == 0); |
22577
c6c9c24d6182
lib: iostream-multiplex tests - Fix hangs by setting the pipe fds non-blocking
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22553
diff
changeset
|
87 fd_set_nonblock(channel->fds[0], TRUE); |
c6c9c24d6182
lib: iostream-multiplex tests - Fix hangs by setting the pipe fds non-blocking
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22553
diff
changeset
|
88 fd_set_nonblock(channel->fds[1], TRUE); |
22553
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
89 channel->in_alt = i_stream_create_fd(channel->fds[0], (size_t)-1, FALSE); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
90 channel->out_alt = o_stream_create_fd(channel->fds[1], IO_BLOCK_SIZE, FALSE); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
91 channel->io_alt = io_add_istream(channel->in_alt, test_istream_read_alt, |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
92 channel); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
93 channel->received = buffer_create_dynamic(default_pool, 32768); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
94 channel->received_alt = buffer_create_dynamic(default_pool, 32768); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
95 } |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
96 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
97 static void teardown_channel(struct test_channel *channel) |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
98 { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
99 test_assert(memcmp(channel->received->data, |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
100 channel->received_alt->data, |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
101 channel->received->used) == 0); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
102 test_assert(channel->received->used == channel->received_alt->used); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
103 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
104 buffer_free(&channel->received); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
105 buffer_free(&channel->received_alt); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
106 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
107 io_remove(&channel->io); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
108 io_remove(&channel->io_alt); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
109 i_stream_unref(&channel->in); |
22596
1a7bbda6284b
iostream-multiplex: Check return values in tests
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
22577
diff
changeset
|
110 test_assert(o_stream_nfinish(channel->out) == 0); |
22553
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
111 o_stream_unref(&channel->out); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
112 i_stream_unref(&channel->in_alt); |
22596
1a7bbda6284b
iostream-multiplex: Check return values in tests
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
22577
diff
changeset
|
113 test_assert(o_stream_nfinish(channel->out_alt) == 0); |
22553
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
114 o_stream_unref(&channel->out_alt); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
115 i_close_fd(&channel->fds[0]); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
116 i_close_fd(&channel->fds[1]); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
117 } |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
118 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
119 static void test_multiplex_stream(void) { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
120 test_begin("test multiplex (stream)"); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
121 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
122 struct ioloop *ioloop = io_loop_create(); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
123 io_loop_set_current(ioloop); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
124 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
125 int fds[2]; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
126 test_assert(pipe(fds) == 0); |
22577
c6c9c24d6182
lib: iostream-multiplex tests - Fix hangs by setting the pipe fds non-blocking
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22553
diff
changeset
|
127 fd_set_nonblock(fds[0], TRUE); |
c6c9c24d6182
lib: iostream-multiplex tests - Fix hangs by setting the pipe fds non-blocking
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22553
diff
changeset
|
128 fd_set_nonblock(fds[1], TRUE); |
22553
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
129 struct ostream *os = o_stream_create_fd(fds[1], (size_t)-1, FALSE); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
130 struct istream *is = i_stream_create_fd(fds[0], (size_t)-1, FALSE); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
131 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
132 struct istream *ichan0 = i_stream_create_multiplex(is, (size_t)-1); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
133 struct istream *ichan1 = i_stream_multiplex_add_channel(ichan0, 1); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
134 i_stream_unref(&is); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
135 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
136 struct ostream *ochan0 = o_stream_create_multiplex(os, 1024); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
137 struct ostream *ochan1 = o_stream_multiplex_add_channel(ochan0, 1); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
138 o_stream_unref(&os); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
139 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
140 struct io *io = io_add(fds[1], IO_WRITE, test_multiplex_stream_write, os); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
141 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
142 setup_channel(&test_channel[0], ichan0, ochan0); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
143 setup_channel(&test_channel[1], ichan1, ochan1); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
144 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
145 test_channel[0].cid = 0; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
146 test_channel[1].cid = 1; |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
147 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
148 io_loop_run(current_ioloop); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
149 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
150 io_remove(&io); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
151 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
152 teardown_channel(&test_channel[0]); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
153 teardown_channel(&test_channel[1]); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
154 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
155 io_loop_destroy(&ioloop); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
156 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
157 i_close_fd(&fds[0]); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
158 i_close_fd(&fds[1]); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
159 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
160 test_end(); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
161 } |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
162 |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
163 void test_multiplex(void) { |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
164 random_init(); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
165 test_multiplex_stream(); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
166 random_deinit(); |
7db517071db5
lib: Add multiplex stream support
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff
changeset
|
167 } |