annotate src/lib/test-istream-unix.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) 2015-2018 Dovecot authors, see the included COPYING file */
18481
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "test-lib.h"
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "net.h"
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "fd-set-nonblock.h"
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "fdpass.h"
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "istream.h"
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "istream-unix.h"
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include <unistd.h>
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 #include <fcntl.h>
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 #include <sys/stat.h>
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 static int send_fd, send_fd2;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 static void write_one(int fd)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 {
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 if (write(fd, "1", 1) < 0)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 i_fatal("write() failed: %m");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 }
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 static void read_one(int fd)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 {
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 char buf;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 if (read(fd, &buf, 1) < 0)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 i_fatal("read() failed: m");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 }
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 static void
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 test_server_read_nofd(struct istream *input, unsigned int idx)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 {
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 const unsigned char *data;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 size_t size;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 test_assert_idx(i_stream_read_data(input, &data, &size, 0) == 1, idx);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 i_stream_skip(input, 1);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 test_assert_idx(i_stream_unix_get_read_fd(input) == -1, idx);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 }
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 static void
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 test_server_read_fd(struct istream *input, int wanted_fd, unsigned int idx)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 {
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 struct stat st1, st2;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 const unsigned char *data;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 size_t size;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 int recv_fd;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 test_assert_idx(i_stream_read_data(input, &data, &size, 0) == 1, idx);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 i_stream_skip(input, 1);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 test_assert_idx((recv_fd = i_stream_unix_get_read_fd(input)) != -1, idx);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 if (recv_fd != -1) {
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 if (fstat(recv_fd, &st1) < 0 || fstat(wanted_fd, &st2) < 0)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 i_fatal("fstat() failed: %m");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 test_assert_idx(st1.st_ino == st2.st_ino, idx);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 i_close_fd(&recv_fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 }
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 }
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 static void test_istream_unix_server(int fd)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 {
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 struct istream *input;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 const unsigned char *data;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 size_t size;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 input = i_stream_create_unix(fd, 1024);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 /* 1) simple read */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 test_server_read_nofd(input, 1);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 /* 2) fd was sent but we won't get it */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 test_server_read_nofd(input, 2);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 /* we still shouldn't have the fd */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 fd_set_nonblock(fd, TRUE);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 i_stream_unix_set_read_fd(input);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 test_assert(i_stream_read_data(input, &data, &size, 0) == 0);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 test_assert(i_stream_unix_get_read_fd(input) == -1);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 fd_set_nonblock(fd, FALSE);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 /* 3) the previous fd should be lost now */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 test_server_read_nofd(input, 3);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 /* 4) we should get the fd now */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 test_server_read_fd(input, send_fd2, 4);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 /* 5) the previous fd shouldn't be returned anymore */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 i_stream_unix_set_read_fd(input);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 test_server_read_nofd(input, 5);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 /* 6) with i_stream_unix_unset_read_fd() we shouldn't get fd anymore */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 i_stream_unix_unset_read_fd(input);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 test_server_read_nofd(input, 6);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 /* 7-8) two fds were sent, but we'll get only the first one */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 i_stream_unix_set_read_fd(input);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 test_server_read_fd(input, send_fd, 7);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 test_server_read_nofd(input, 8);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 /* 9-10) two fds were sent, and we'll get them both */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 i_stream_unix_set_read_fd(input);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 test_server_read_fd(input, send_fd, 9);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 i_stream_unix_set_read_fd(input);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109 test_server_read_fd(input, send_fd2, 10);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 i_stream_destroy(&input);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 i_close_fd(&fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 }
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116 static void test_istream_unix_client(int fd)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 {
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 /* 1) */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120 read_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 /* 2) */
18483
2c5b0ad65885 lib: Fixed test-istream-unix to not send uninitialized bytes.
Timo Sirainen <tss@iki.fi>
parents: 18481
diff changeset
123 if (fd_send(fd, send_fd, "1", 1) < 0)
18481
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 i_fatal("fd_send() failed: %m");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 read_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 /* 3) */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129 read_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
130
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131 /* 4) */
18483
2c5b0ad65885 lib: Fixed test-istream-unix to not send uninitialized bytes.
Timo Sirainen <tss@iki.fi>
parents: 18481
diff changeset
132 if (fd_send(fd, send_fd2, "1", 1) < 0)
18481
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
133 i_fatal("fd_send() failed: %m");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134 read_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 /* 5) */
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 write_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138 read_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140 /* 6) */
18483
2c5b0ad65885 lib: Fixed test-istream-unix to not send uninitialized bytes.
Timo Sirainen <tss@iki.fi>
parents: 18481
diff changeset
141 if (fd_send(fd, send_fd, "1", 1) < 0)
18481
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
142 i_fatal("fd_send() failed: %m");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
143 read_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145 /* 7-8) */
18483
2c5b0ad65885 lib: Fixed test-istream-unix to not send uninitialized bytes.
Timo Sirainen <tss@iki.fi>
parents: 18481
diff changeset
146 if (fd_send(fd, send_fd, "1", 1) < 0)
18481
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147 i_fatal("fd_send() failed: %m");
18483
2c5b0ad65885 lib: Fixed test-istream-unix to not send uninitialized bytes.
Timo Sirainen <tss@iki.fi>
parents: 18481
diff changeset
148 if (fd_send(fd, send_fd2, "1", 1) < 0)
18481
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
149 i_fatal("fd_send() failed: %m");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
150 read_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
151
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
152 /* 9-10) */
18483
2c5b0ad65885 lib: Fixed test-istream-unix to not send uninitialized bytes.
Timo Sirainen <tss@iki.fi>
parents: 18481
diff changeset
153 if (fd_send(fd, send_fd, "1", 1) < 0)
18481
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154 i_fatal("fd_send() failed: %m");
18483
2c5b0ad65885 lib: Fixed test-istream-unix to not send uninitialized bytes.
Timo Sirainen <tss@iki.fi>
parents: 18481
diff changeset
155 if (fd_send(fd, send_fd2, "1", 1) < 0)
18481
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
156 i_fatal("fd_send() failed: %m");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
157 read_one(fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159 i_close_fd(&fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
160 }
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
161
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
162 void test_istream_unix(void)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
163 {
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
164 int fd[2];
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166 test_begin("istream unix");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167 if ((send_fd = open("/dev/null", O_RDONLY)) == -1)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168 i_fatal("open(/dev/null) failed: %m");
18693
91bbd6753689 lib: Use /dev/zero instead of /dev/stderr in test-istream-unix unit test
Timo Sirainen <tss@iki.fi>
parents: 18483
diff changeset
169 if ((send_fd2 = open("/dev/zero", O_RDONLY)) == -1)
91bbd6753689 lib: Use /dev/zero instead of /dev/stderr in test-istream-unix unit test
Timo Sirainen <tss@iki.fi>
parents: 18483
diff changeset
170 i_fatal("open(/dev/zero) failed: %m");
18481
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
171 if (socketpair(AF_UNIX, SOCK_STREAM, 0, fd) < 0)
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
172 i_fatal("socketpair() failed: %m");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173 switch (fork()) {
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 case -1:
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
175 i_fatal("fork() failed: %m");
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176 case 0:
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
177 i_close_fd(&fd[0]);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
178 test_istream_unix_client(fd[1]);
20713
3d0aecd0b2bc lib-test: test-exit helper to stop valgrind complaining about fork()s
Phil Carmody <phil@dovecot.fi>
parents: 19552
diff changeset
179 test_exit(0);
18481
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
180 default:
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
181 i_close_fd(&fd[1]);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
182 test_istream_unix_server(fd[0]);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
183 break;
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
184 }
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
185 i_close_fd(&send_fd);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
186 i_close_fd(&send_fd2);
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
187 test_end();
21a2ce6f8f37 lib: Added istream-unix for reading fd sockets via istream.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
188 }