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

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
OLDNEW
(Empty)
1 /*
2 * Copyright 2010 The Native Client Authors. All rights reserved.
vissi 2012/04/16 11:20:48 2012
vissi 2012/04/18 16:28:33 Done.
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 <assert.h>
8 #include <errno.h>
9 #include <stdio.h>
10 #include <string.h>
11 #include <sys/types.h>
12 #include <sys/socket.h>
13 #include <netinet/in.h>
14 #include <arpa/inet.h>
15 #include <netdb.h>
16
17 #include "irt_syscalls.h"
18
19 #pragma GCC diagnostic ignored "-Wnonnull"
Evgeniy Stepanov 2012/04/16 11:26:50 Do you really need this?
pasko-google - do not use 2012/04/16 11:32:26 why so?
vissi 2012/04/18 16:28:33 no need, removed
20
21 int test_var;
22 #ifdef __cplusplus
23 extern "C" {
pasko-google - do not use 2012/04/16 11:32:26 there is no need for this in test
vissi 2012/04/18 16:28:33 Done.
24 #endif
25 #define DO_WRAP(name) do { \
pasko-google - do not use 2012/04/16 11:32:26 a better name would be REGISTER_WRAPPER_IN_GLIBC
vissi 2012/04/18 16:28:33 Done.
26 __nacl_irt_##name = __nacl_irt_##name##_wrap; \
27 } while (0)
28 #define WRAP(name) __nacl_irt_##name##_wrap
29
30 int WRAP(socket) (int domain, int type, int protocol) {
31 ++test_var;
Evgeniy Stepanov 2012/04/16 11:26:50 It might be easier to return a magic value or an e
vissi 2012/04/18 16:28:33 Done.
32 return -1;
33 }
34
35 int WRAP(accept) (int sockfd, struct sockaddr* addr, socklen_t* addrlen) {
Evgeniy Stepanov 2012/04/16 11:26:50 Please remove spaces before argument list and fix
vissi 2012/04/18 16:28:33 Done. Don't we use lint in glibc (irt_syscalls was
36 ++test_var;
37 return -1;
38 }
39
40 int WRAP(bind) (int sockfd, const struct sockaddr* addr, socklen_t addrlen) {
41 ++test_var;
42 return -1;
43 }
44
45 int WRAP(listen) (int sockfd, int backlog) {
46 ++test_var;
47 return -1;
48 }
49
50 int WRAP(connect) (int sockfd, const struct sockaddr* addr,
51 socklen_t addrlen) {
52 ++test_var;
53 return -1;
54 }
55
56 int WRAP(send) (int sockfd, const void *buf, size_t len, int flags,
57 int* ret) {
58 ++test_var;
59 return -1;
60 }
61
62 int WRAP(sendto) (int sockfd, const void *buf, size_t len, int flags,
63 const struct sockaddr *dest_addr, socklen_t addrlen,
64 int* ret) {
65 ++test_var;
66 return -1;
67 }
68
69 int WRAP(sendmsg) (int sockfd, const struct msghdr *msg, int flags,
70 int* ret) {
71 ++test_var;
72 return -1;
73 }
74
75 int WRAP(recv) (int sockfd, void *buf, size_t len, int flags, int* ret) {
76 ++test_var;
77 return -1;
78 }
79
80 int WRAP(recvfrom) (int sockfd, void *buf, size_t len, int flags,
81 struct sockaddr *src_addr, socklen_t *addrlen,
82 int* ret) {
83 ++test_var;
84 return -1;
85 }
86
87 int WRAP(recvmsg) (int sockfd, struct msghdr *msg, int flags, int* ret) {
88 ++test_var;
89 return -1;
90 }
91
92 int WRAP(getsockname) (int sockfd, struct sockaddr *addr,
93 socklen_t *addrlen) {
94 ++test_var;
95 return -1;
96 }
97
98 int WRAP(getpeername) (int sockfd, struct sockaddr *addr,
99 socklen_t *addrlen) {
100 ++test_var;
101 return -1;
102 }
103
104 int WRAP(setsockopt) (int sockfd, int level, int optname, const void *optval,
105 socklen_t optlen) {
106 ++test_var;
107 return -1;
108 }
109
110 int WRAP(getsockopt) (int sockfd, int level, int optname, void *optval,
111 socklen_t *optlen) {
112 ++test_var;
113 return -1;
114 }
115
116 int WRAP(epoll_create) (int size) {
117 ++test_var;
118 return -1;
119 }
120
121 int WRAP(epoll_ctl) (int epfd, int op, int fd, struct epoll_event *event) {
122 ++test_var;
123 return -1;
124 }
125
126 int WRAP(epoll_wait) (int epfd, struct epoll_event *events,
127 int maxevents, int timeout) {
128 ++test_var;
129 return -1;
130 }
131
132 int WRAP(epoll_pwait) (int epfd, struct epoll_event *events,
133 int maxevents, int timeout, const sigset_t *sigmask,
134 size_t sigset_size) {
135 ++test_var;
136 return -1;
137 }
138
139 int WRAP(poll) (struct pollfd *fds, nfds_t nfds, int timeout) {
140 ++test_var;
141 return -1;
142 }
143
144 int WRAP(ppoll) (struct pollfd *fds, nfds_t nfds,
145 const struct timespec *timeout, const sigset_t *sigmask,
146 size_t sigset_size) {
147 ++test_var;
148 return -1;
149 }
150
151 #ifdef __cplusplus
152 }
153 #endif
154
155 #define DIRSIZE 8192
156 #define PORT 0x1234
157 int main(int argc, char** argv) {
158 DO_WRAP(socket);
159 DO_WRAP(accept);
160 DO_WRAP(bind);
161 DO_WRAP(connect);
162 DO_WRAP(listen);
163 DO_WRAP(recv);
164 DO_WRAP(recvmsg);
165 DO_WRAP(recvfrom);
166 DO_WRAP(send);
167 DO_WRAP(sendto);
168 DO_WRAP(sendmsg);
169 DO_WRAP(setsockopt);
170 DO_WRAP(getsockopt);
171 DO_WRAP(getpeername);
172 DO_WRAP(getsockname);
173 DO_WRAP(epoll_create);
174 DO_WRAP(epoll_ctl);
175 DO_WRAP(epoll_wait);
176 DO_WRAP(epoll_pwait);
177 DO_WRAP(poll);
178 DO_WRAP(ppoll);
179
180 char dir[DIRSIZE];
181 int sd, sd_current;
182 socklen_t addrlen;
183 struct sockaddr_in sin;
184 struct sockaddr_in pin;
185 struct msghdr msg;
186 struct epoll_event event;
187 struct pollfd pollfds;
188 struct timespec timeout;
189 sigset_t sigmask;
190
191 int prev_var = test_var;
192 sd = socket(AF_INET, SOCK_STREAM, 0);
193 assert(test_var - prev_var == 1);
194
195 memset(&sin, 0, sizeof(sin));
196 sin.sin_family = AF_INET;
197 sin.sin_addr.s_addr = INADDR_ANY;
198 sin.sin_port = htons(PORT);
199
200 prev_var = test_var;
201 bind(sd, (struct sockaddr *) &sin, sizeof(sin));
202 assert(test_var - prev_var == 1);
203
204 prev_var = test_var;
205 listen(sd, 5);
206 assert(test_var - prev_var == 1);
207
208 addrlen = sizeof(pin);
209 prev_var = test_var;
210 sd_current = accept(sd, (struct sockaddr *) &pin, &addrlen);
211 assert(test_var - prev_var == 1);
212
213 prev_var = test_var;
214 recv(sd_current, dir, sizeof(dir), 0);
215 assert(test_var - prev_var == 1);
216
217 prev_var = test_var;
218 send(sd_current, dir, sizeof(dir), 0);
219 assert(test_var - prev_var == 1);
220
221 prev_var = test_var;
222 sendto(sd_current, dir, sizeof(dir), 0, &sin, 0);
223 assert(test_var - prev_var == 1);
224
225 prev_var = test_var;
226 recvfrom(sd_current, dir, sizeof(dir), 0, &sin, &addrlen);
227 assert(test_var - prev_var == 1);
228
229 prev_var = test_var;
230 recvmsg(sd_current, &msg, 0);
231 assert(test_var - prev_var == 1);
232
233 prev_var = test_var;
234 sendmsg(sd_current, &msg, 0);
235 assert(test_var - prev_var == 1);
236
237 prev_var = test_var;
238 getsockopt(sd, 0, 0, dir, &addrlen);
239 assert(test_var - prev_var == 1);
240
241 prev_var = test_var;
242 setsockopt(sd, 0, 0, dir, addrlen);
243 assert(test_var - prev_var == 1);
244
245 prev_var = test_var;
246 getpeername(sd, &sin, &addrlen);
247 assert(test_var - prev_var == 1);
248
249 prev_var = test_var;
250 getsockname(sd, &sin, &addrlen);
251 assert(test_var - prev_var == 1);
252
253 prev_var = test_var;
254 epoll_create(0);
255 assert(test_var - prev_var == 1);
256
257 prev_var = test_var;
258 epoll_ctl(0, 0, 0, &event);
259 assert(test_var - prev_var == 1);
260
261 prev_var = test_var;
262 epoll_wait(0, &event, 0, 0);
263 assert(test_var - prev_var == 1);
264
265 prev_var = test_var;
266 epoll_pwait(0, &event, 0, 0, &sigmask);
267 assert(test_var - prev_var == 1);
268
269 prev_var = test_var;
270 poll(&pollfds, 0, 0);
271 assert(test_var - prev_var == 1);
272
273 prev_var = test_var;
274 ppoll(&pollfds, 0, &timeout, &sigmask);
275 assert(test_var - prev_var == 1);
276
277 return 0;
278 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698