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

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, 8 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')
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
4 * be found in the LICENSE file.
5 */
6
7 #include <arpa/inet.h>
8 #include <assert.h>
9 #include <errno.h>
10 #include <native_client/tests/glibc_socket_wrappers/irt_syscalls.h>
pasko-google - do not use 2012/04/24 09:24:15 this should go in double quotes and separated from
vissi 2012/04/24 10:01:54 in fact, it should take pre-installed irt_syscalls
11 #include <netdb.h>
12 #include <netinet/in.h>
13 #include <stdio.h>
14 #include <string.h>
15 #include <sys/socket.h>
16 #include <sys/types.h>
17
18 int test_var;
19 struct sockaddr_in s_in;
20
21 #define REGISTER_WRAPPER_IN_GLIBC(name) do { \
22 __nacl_irt_##name = __nacl_irt_##name##_wrap; \
23 } while (0)
24 #define WRAP(name) __nacl_irt_##name##_wrap
25
26 int WRAP(socket) (int domain, int type, int protocol, int* ret) {
27 ++test_var;
28 *ret = 51;
29 return 0;
30 }
31
32 int WRAP(accept)(int sockfd, struct sockaddr* addr, socklen_t* addrlen,
33 int* ret) {
34 ++test_var;
35 *addrlen = 52;
36 *ret = 23;
37 return 0;
38 }
39
40 int WRAP(bind) (int sockfd, const struct sockaddr* addr, socklen_t addrlen) {
41 ++test_var;
42 return sockfd > 0 ? 0 : -53;
pasko-google - do not use 2012/04/24 09:24:15 this is part of the test code, one of these cases
vissi 2012/04/24 10:01:54 Now covered.
43 }
44
45 int WRAP(listen) (int sockfd, int backlog) {
46 ++test_var;
47 return sockfd > 0 ? 0 : -54;
48 }
49
50 int WRAP(connect) (int sockfd, const struct sockaddr* addr,
51 socklen_t addrlen) {
52 ++test_var;
53 assert(reinterpret_cast<void*>(&s_in) == reinterpret_cast<void*>(addr));
pasko-google - do not use 2012/04/24 09:24:15 reinterpret_cast in C?
vissi 2012/04/24 10:01:54 no, it was a lint warning, removed now.
54 return sockfd > 0 ? 0 : -55;
55 }
56
57 int WRAP(send) (int sockfd, const void *buf, size_t len, int flags,
58 int* ret) {
59 ++test_var;
60 *ret = 56;
61 return 0;
62 }
63
64 int WRAP(sendto) (int sockfd, const void *buf, size_t len, int flags,
65 const struct sockaddr *dest_addr, socklen_t addrlen,
66 int* ret) {
67 ++test_var;
68 *ret = 57;
69 return 0;
70 }
71
72 int WRAP(sendmsg) (int sockfd, const struct msghdr *msg, int flags,
73 int* ret) {
74 ++test_var;
75 *ret = 58;
76 return 0;
77 }
78
79 int WRAP(recv) (int sockfd, void *buf, size_t len, int flags, int* ret) {
80 ++test_var;
81 *ret = 59;
82 return 0;
83 }
84
85 int WRAP(recvfrom) (int sockfd, void *buf, size_t len, int flags,
86 struct sockaddr *src_addr, socklen_t* addrlen,
87 int* ret) {
88 ++test_var;
89 *ret = 60;
90 return 0;
91 }
92
93 int WRAP(recvmsg) (int sockfd, struct msghdr *msg, int flags, int* ret) {
94 ++test_var;
95 *ret = 61;
96 return 0;
97 }
98
99 int WRAP(getsockname) (int sockfd, struct sockaddr *addr,
100 socklen_t* addrlen) {
101 ++test_var;
102 *addrlen = 62;
103 return 0;
104 }
105
106 int WRAP(getpeername) (int sockfd, struct sockaddr *addr,
107 socklen_t* addrlen) {
108 ++test_var;
109 *addrlen = 63;
110 return 0;
111 }
112
113 int WRAP(setsockopt) (int sockfd, int level, int optname, const void *optval,
114 socklen_t optlen) {
115 ++test_var;
116 return -64;
117 }
118
119 int WRAP(getsockopt) (int sockfd, int level, int optname, void *optval,
120 socklen_t* optlen) {
121 ++test_var;
122 return -65;
123 }
124
125 int WRAP(epoll_create) (int size, int *sd) {
126 ++test_var;
127 *sd = 5;
128 return -66;
129 }
130
131 int WRAP(epoll_ctl) (int epfd, int op, int fd, struct epoll_event *event) {
132 ++test_var;
133 return -67;
134 }
135
136 int WRAP(epoll_wait) (int epfd, struct epoll_event *events,
137 int maxevents, int timeout, int* count) {
138 ++test_var;
139 *count = 0;
140 return -68;
141 }
142
143 int WRAP(epoll_pwait) (int epfd, struct epoll_event *events,
144 int maxevents, int timeout, const sigset_t *sigmask,
145 size_t sigset_size, int *count) {
146 ++test_var;
147 *count = 0;
148 return -69;
149 }
150
151 int WRAP(poll) (struct pollfd *fds, nfds_t nfds, int timeout, int *count) {
152 ++test_var;
153 *count = 0;
154 return -70;
155 }
156
157 int WRAP(ppoll) (struct pollfd *fds, nfds_t nfds,
158 const struct timespec *timeout, const sigset_t *sigmask,
159 size_t sigset_size, int *count) {
160 ++test_var;
161 *count = 0;
162 return -71;
163 }
164
165 #define DIRSIZE 8192
166 #define PORT 0x1234
167 int main(int argc, char** argv) {
168 REGISTER_WRAPPER_IN_GLIBC(socket);
169 REGISTER_WRAPPER_IN_GLIBC(accept);
170 REGISTER_WRAPPER_IN_GLIBC(bind);
171 REGISTER_WRAPPER_IN_GLIBC(connect);
172 REGISTER_WRAPPER_IN_GLIBC(listen);
173 REGISTER_WRAPPER_IN_GLIBC(recv);
174 REGISTER_WRAPPER_IN_GLIBC(recvmsg);
175 REGISTER_WRAPPER_IN_GLIBC(recvfrom);
176 REGISTER_WRAPPER_IN_GLIBC(send);
177 REGISTER_WRAPPER_IN_GLIBC(sendto);
178 REGISTER_WRAPPER_IN_GLIBC(sendmsg);
179 REGISTER_WRAPPER_IN_GLIBC(setsockopt);
180 REGISTER_WRAPPER_IN_GLIBC(getsockopt);
181 REGISTER_WRAPPER_IN_GLIBC(getpeername);
182 REGISTER_WRAPPER_IN_GLIBC(getsockname);
183 REGISTER_WRAPPER_IN_GLIBC(epoll_create);
184 REGISTER_WRAPPER_IN_GLIBC(epoll_ctl);
185 REGISTER_WRAPPER_IN_GLIBC(epoll_wait);
186 REGISTER_WRAPPER_IN_GLIBC(epoll_pwait);
187 REGISTER_WRAPPER_IN_GLIBC(poll);
188 REGISTER_WRAPPER_IN_GLIBC(ppoll);
189
190 char dir[DIRSIZE];
191 int sd, sd_current, ret;
192 socklen_t addrlen;
193 struct sockaddr_in pin;
194 struct msghdr msg;
195 struct epoll_event event;
196 struct pollfd pollfds;
197 struct timespec timeout;
198 sigset_t sigmask;
199
200 int prev_var = test_var;
201 sd = socket(AF_INET, SOCK_STREAM, 0);
202 assert(sd == 51);
203 assert(test_var - prev_var == 1);
204
205 memset(&s_in, 0, sizeof(s_in));
206 s_in.sin_family = AF_INET;
207 s_in.sin_addr.s_addr = INADDR_ANY;
208 s_in.sin_port = htons(PORT);
209
210 prev_var = test_var;
211 ret = bind(sd, (struct sockaddr *) &s_in, sizeof(s_in));
212 assert(ret == 0);
213 assert(test_var - prev_var == 1);
214
215 prev_var = test_var;
216 ret = listen(-1, 5);
217 assert(errno == -54);
218 assert(test_var - prev_var == 1);
219
220 addrlen = sizeof(pin);
221 prev_var = test_var;
222 sd_current = accept(sd, (struct sockaddr *) &pin, &addrlen);
223 assert(addrlen == 52 && sd_current == 23);
224 assert(test_var - prev_var == 1);
225
226 prev_var = test_var;
227 errno = 0;
228 connect(sd_current, &s_in, addrlen);
229 ret = errno;
230 assert(ret == 0);
231 assert(test_var - prev_var == 1);
232
233 prev_var = test_var;
234 ret = recv(sd_current, dir, sizeof(dir), 0);
235 assert(ret == 59);
236 assert(test_var - prev_var == 1);
237
238 prev_var = test_var;
239 ret = send(sd_current, dir, sizeof(dir), 0);
240 assert(ret == 56);
241 assert(test_var - prev_var == 1);
242
243 prev_var = test_var;
244 ret = sendto(sd_current, dir, sizeof(dir), 0, &s_in, 0);
245 assert(ret == 57);
246 assert(test_var - prev_var == 1);
247
248 prev_var = test_var;
249 ret = recvfrom(sd_current, dir, sizeof(dir), 0, &s_in, &addrlen);
250 assert(ret == 60);
251 assert(test_var - prev_var == 1);
252
253 prev_var = test_var;
254 ret = recvmsg(sd_current, &msg, 0);
255 assert(ret == 61);
256 assert(test_var - prev_var == 1);
257
258 prev_var = test_var;
259 ret = sendmsg(sd_current, &msg, 0);
260 assert(ret == 58);
261 assert(test_var - prev_var == 1);
262
263 prev_var = test_var;
264 errno = 0;
265 getsockopt(sd, 0, 0, dir, &addrlen);
266 ret = errno;
267 assert(ret == -65);
268 assert(test_var - prev_var == 1);
269
270 prev_var = test_var;
271 errno = 0;
272 setsockopt(sd, 0, 0, dir, addrlen);
273 ret = errno;
274 assert(ret == -64);
275 assert(test_var - prev_var == 1);
276
277 prev_var = test_var;
278 getpeername(sd, &s_in, &addrlen);
279 assert(addrlen == 63);
280 assert(test_var - prev_var == 1);
281
282 prev_var = test_var;
283 getsockname(sd, &s_in, &addrlen);
284 assert(addrlen == 62);
285 assert(test_var - prev_var == 1);
286
287 prev_var = test_var;
288 errno = 0;
289 epoll_create(0);
290 ret = errno;
291 assert(ret == -66);
292 assert(test_var - prev_var == 1);
293
294 prev_var = test_var;
295 errno = 0;
296 epoll_ctl(0, 0, 0, &event);
297 ret = errno;
298 assert(ret == -67);
299 assert(test_var - prev_var == 1);
300
301 prev_var = test_var;
302 errno = 0;
303 epoll_wait(0, &event, 0, 0);
304 ret = errno;
305 assert(ret == -68);
306 assert(test_var - prev_var == 1);
307
308 prev_var = test_var;
309 errno = 0;
310 epoll_pwait(0, &event, 0, 0, &sigmask);
311 ret = errno;
312 assert(ret == -69);
313 assert(test_var - prev_var == 1);
314
315 prev_var = test_var;
316 errno = 0;
317 poll(&pollfds, 0, 0);
318 ret = errno;
319 assert(ret == -70);
320 assert(test_var - prev_var == 1);
321
322 prev_var = test_var;
323 errno = 0;
324 ppoll(&pollfds, 0, &timeout, &sigmask);
325 ret = errno;
326 assert(ret == -71);
327 assert(test_var - prev_var == 1);
328
329 return 0;
330 }
331
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