Mercurial > dovecot > core-2.2
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 |
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 } |