Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: tests/glibc_socket_wrappers/test_sock.c

Issue 10096008: added a test to check glibc socket functions wrappers (Closed) Base URL: http://src.chromium.org/native_client/trunk/src/native_client/
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tests/glibc_socket_wrappers/nacl.scons ('k') | tests/glibc_socket_wrappers/test_sock_data » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 /*
2 * Copyright 2012 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6 /*
7 * Here we are testing that return values and errno's are correctly received
8 * from intercepted syscalls and parameter gets passed to syscall correctly.
9 */
10 #include <arpa/inet.h>
11 #include <assert.h>
12 #include <errno.h>
13 #include <netdb.h>
14 #include <netinet/in.h>
15 #include <stdio.h>
16 #include <string.h>
17 #include <sys/socket.h>
18 #include <sys/types.h>
19 #include <irt_syscalls.h>
20
21 int test_var;
22 struct sockaddr_in s_in;
23
24 #define REGISTER_WRAPPER_IN_GLIBC(name) do { \
25 __nacl_irt_##name = __nacl_irt_##name##_wrap; \
26 } while (0)
27 #define WRAP(name) __nacl_irt_##name##_wrap
28
29 int WRAP(socket) (int domain, int type, int protocol, int* ret) {
30 ++test_var;
31 *ret = 51;
32 return 0;
33 }
34
35 int WRAP(accept)(int sockfd, struct sockaddr* addr, socklen_t* addrlen,
36 int* ret) {
37 ++test_var;
38 *addrlen = 52;
39 *ret = 23;
40 return 0;
41 }
42
43 int WRAP(bind) (int sockfd, const struct sockaddr* addr, socklen_t addrlen) {
44 ++test_var;
45 return sockfd > 0 ? 0 : -53;
46 }
47
48 int WRAP(listen) (int sockfd, int backlog) {
49 ++test_var;
50 return sockfd > 0 ? 0 : -54;
51 }
52
53 int WRAP(connect) (int sockfd, const struct sockaddr* addr,
54 socklen_t addrlen) {
55 ++test_var;
56 assert((void*)&s_in == (void*)addr);
57 return sockfd > 0 ? 0 : -55;
58 }
59
60 int WRAP(send) (int sockfd, const void *buf, size_t len, int flags,
61 int* ret) {
62 ++test_var;
63 *ret = 56;
64 return 0;
65 }
66
67 int WRAP(sendto) (int sockfd, const void *buf, size_t len, int flags,
68 const struct sockaddr *dest_addr, socklen_t addrlen,
69 int* ret) {
70 ++test_var;
71 *ret = 57;
72 return 0;
73 }
74
75 int WRAP(sendmsg) (int sockfd, const struct msghdr *msg, int flags,
76 int* ret) {
77 ++test_var;
78 *ret = 58;
79 return 0;
80 }
81
82 int WRAP(recv) (int sockfd, void *buf, size_t len, int flags, int* ret) {
83 ++test_var;
84 *ret = 59;
85 return 0;
86 }
87
88 int WRAP(recvfrom) (int sockfd, void *buf, size_t len, int flags,
89 struct sockaddr *src_addr, socklen_t* addrlen,
90 int* ret) {
91 ++test_var;
92 *ret = 60;
93 return 0;
94 }
95
96 int WRAP(recvmsg) (int sockfd, struct msghdr *msg, int flags, int* ret) {
97 ++test_var;
98 *ret = 61;
99 return 0;
100 }
101
102 int WRAP(getsockname) (int sockfd, struct sockaddr *addr,
103 socklen_t* addrlen) {
104 ++test_var;
105 *addrlen = 62;
106 return 0;
107 }
108
109 int WRAP(getpeername) (int sockfd, struct sockaddr *addr,
110 socklen_t* addrlen) {
111 ++test_var;
112 *addrlen = 63;
113 return 0;
114 }
115
116 int WRAP(setsockopt) (int sockfd, int level, int optname, const void *optval,
117 socklen_t optlen) {
118 ++test_var;
119 return -64;
120 }
121
122 int WRAP(getsockopt) (int sockfd, int level, int optname, void *optval,
123 socklen_t* optlen) {
124 ++test_var;
125 return -65;
126 }
127
128 int WRAP(epoll_create) (int size, int *sd) {
129 ++test_var;
130 *sd = 5;
131 return -66;
132 }
133
134 int WRAP(epoll_ctl) (int epfd, int op, int fd, struct epoll_event *event) {
135 ++test_var;
136 return -67;
137 }
138
139 int WRAP(epoll_wait) (int epfd, struct epoll_event *events,
140 int maxevents, int timeout, int* count) {
141 ++test_var;
142 *count = 0;
143 return -68;
144 }
145
146 int WRAP(epoll_pwait) (int epfd, struct epoll_event *events,
147 int maxevents, int timeout, const sigset_t *sigmask,
148 size_t sigset_size, int *count) {
149 ++test_var;
150 *count = 0;
151 return -69;
152 }
153
154 int WRAP(poll) (struct pollfd *fds, nfds_t nfds, int timeout, int *count) {
155 ++test_var;
156 *count = 0;
157 return -70;
158 }
159
160 int WRAP(ppoll) (struct pollfd *fds, nfds_t nfds,
161 const struct timespec *timeout, const sigset_t *sigmask,
162 size_t sigset_size, int *count) {
163 ++test_var;
164 *count = 0;
165 return -71;
166 }
167
168 #define DIRSIZE 8192
169 #define PORT 0x1234
170 int main(int argc, char** argv) {
171 REGISTER_WRAPPER_IN_GLIBC(socket);
172 REGISTER_WRAPPER_IN_GLIBC(accept);
173 REGISTER_WRAPPER_IN_GLIBC(bind);
174 REGISTER_WRAPPER_IN_GLIBC(connect);
175 REGISTER_WRAPPER_IN_GLIBC(listen);
176 REGISTER_WRAPPER_IN_GLIBC(recv);
177 REGISTER_WRAPPER_IN_GLIBC(recvmsg);
178 REGISTER_WRAPPER_IN_GLIBC(recvfrom);
179 REGISTER_WRAPPER_IN_GLIBC(send);
180 REGISTER_WRAPPER_IN_GLIBC(sendto);
181 REGISTER_WRAPPER_IN_GLIBC(sendmsg);
182 REGISTER_WRAPPER_IN_GLIBC(setsockopt);
183 REGISTER_WRAPPER_IN_GLIBC(getsockopt);
184 REGISTER_WRAPPER_IN_GLIBC(getpeername);
185 REGISTER_WRAPPER_IN_GLIBC(getsockname);
186 REGISTER_WRAPPER_IN_GLIBC(epoll_create);
187 REGISTER_WRAPPER_IN_GLIBC(epoll_ctl);
188 REGISTER_WRAPPER_IN_GLIBC(epoll_wait);
189 REGISTER_WRAPPER_IN_GLIBC(epoll_pwait);
190 REGISTER_WRAPPER_IN_GLIBC(poll);
191 REGISTER_WRAPPER_IN_GLIBC(ppoll);
192
193 char dir[DIRSIZE];
194 int sd, sd_current, ret;
195 socklen_t addrlen;
196 struct sockaddr_in pin;
197 struct msghdr msg;
198 struct epoll_event event;
199 struct pollfd pollfds;
200 struct timespec timeout;
201 sigset_t sigmask;
202
203 int prev_var = test_var;
204 sd = socket(AF_INET, SOCK_STREAM, 0);
205 assert(sd == 51);
206 assert(test_var - prev_var == 1);
207
208 memset(&s_in, 0, sizeof(s_in));
209 s_in.sin_family = AF_INET;
210 s_in.sin_addr.s_addr = INADDR_ANY;
211 s_in.sin_port = htons(PORT);
212
213 prev_var = test_var;
214 ret = bind(sd, (struct sockaddr *) &s_in, sizeof(s_in));
215 assert(ret == 0);
216 assert(test_var - prev_var == 1);
217
218 prev_var = test_var;
219 errno = 0;
220 bind(-1, (struct sockaddr *) &s_in, sizeof(s_in));
221 ret = errno;
222 assert(ret == -53);
223 assert(test_var - prev_var == 1);
224
225 prev_var = test_var;
226 ret = listen(-1, 5);
227 assert(errno == -54);
228 assert(test_var - prev_var == 1);
229
230 addrlen = sizeof(pin);
231 prev_var = test_var;
232 sd_current = accept(sd, (struct sockaddr *) &pin, &addrlen);
233 assert(addrlen == 52 && sd_current == 23);
234 assert(test_var - prev_var == 1);
235
236 prev_var = test_var;
237 errno = 0;
238 connect(sd_current, &s_in, addrlen);
239 ret = errno;
240 assert(ret == 0);
241 assert(test_var - prev_var == 1);
242
243 prev_var = test_var;
244 ret = recv(sd_current, dir, sizeof(dir), 0);
245 assert(ret == 59);
246 assert(test_var - prev_var == 1);
247
248 prev_var = test_var;
249 ret = send(sd_current, dir, sizeof(dir), 0);
250 assert(ret == 56);
251 assert(test_var - prev_var == 1);
252
253 prev_var = test_var;
254 ret = sendto(sd_current, dir, sizeof(dir), 0, &s_in, 0);
255 assert(ret == 57);
256 assert(test_var - prev_var == 1);
257
258 prev_var = test_var;
259 ret = recvfrom(sd_current, dir, sizeof(dir), 0, &s_in, &addrlen);
260 assert(ret == 60);
261 assert(test_var - prev_var == 1);
262
263 prev_var = test_var;
264 ret = recvmsg(sd_current, &msg, 0);
265 assert(ret == 61);
266 assert(test_var - prev_var == 1);
267
268 prev_var = test_var;
269 ret = sendmsg(sd_current, &msg, 0);
270 assert(ret == 58);
271 assert(test_var - prev_var == 1);
272
273 prev_var = test_var;
274 errno = 0;
275 getsockopt(sd, 0, 0, dir, &addrlen);
276 ret = errno;
277 assert(ret == -65);
278 assert(test_var - prev_var == 1);
279
280 prev_var = test_var;
281 errno = 0;
282 setsockopt(sd, 0, 0, dir, addrlen);
283 ret = errno;
284 assert(ret == -64);
285 assert(test_var - prev_var == 1);
286
287 prev_var = test_var;
288 getpeername(sd, &s_in, &addrlen);
289 assert(addrlen == 63);
290 assert(test_var - prev_var == 1);
291
292 prev_var = test_var;
293 getsockname(sd, &s_in, &addrlen);
294 assert(addrlen == 62);
295 assert(test_var - prev_var == 1);
296
297 prev_var = test_var;
298 errno = 0;
299 epoll_create(0);
300 ret = errno;
301 assert(ret == -66);
302 assert(test_var - prev_var == 1);
303
304 prev_var = test_var;
305 errno = 0;
306 epoll_ctl(0, 0, 0, &event);
307 ret = errno;
308 assert(ret == -67);
309 assert(test_var - prev_var == 1);
310
311 prev_var = test_var;
312 errno = 0;
313 epoll_wait(0, &event, 0, 0);
314 ret = errno;
315 assert(ret == -68);
316 assert(test_var - prev_var == 1);
317
318 prev_var = test_var;
319 errno = 0;
320 epoll_pwait(0, &event, 0, 0, &sigmask);
321 ret = errno;
322 assert(ret == -69);
323 assert(test_var - prev_var == 1);
324
325 prev_var = test_var;
326 errno = 0;
327 poll(&pollfds, 0, 0);
328 ret = errno;
329 assert(ret == -70);
330 assert(test_var - prev_var == 1);
331
332 prev_var = test_var;
333 errno = 0;
334 ppoll(&pollfds, 0, &timeout, &sigmask);
335 ret = errno;
336 assert(ret == -71);
337 assert(test_var - prev_var == 1);
338
339 return 0;
340 }
341
OLDNEW
« no previous file with comments | « tests/glibc_socket_wrappers/nacl.scons ('k') | tests/glibc_socket_wrappers/test_sock_data » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698