MCPcopy Create free account
hub / github.com/apache/brpc / TEST

Function TEST

test/bthread_dispatcher_unittest.cpp:208–318  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

206}
207
208TEST(DispatcherTest, dispatch_tasks) {
209 client_stop = false;
210 server_stop = false;
211
212 const size_t NEPOLL = 1;
213 const size_t NCLIENT = 16;
214
215 int epfd[NEPOLL];
216 bthread_t eth[NEPOLL];
217 EpollMeta* em[NEPOLL];
218 int fds[2 * NCLIENT];
219 pthread_t cth[NCLIENT];
220 ClientMeta* cm[NCLIENT];
221 SocketMeta* sm[NCLIENT];
222
223 for (size_t i = 0; i < NEPOLL; ++i) {
224#if defined(OS_LINUX)
225 epfd[i] = epoll_create(1024);
226#elif defined(OS_MACOSX)
227 epfd[i] = kqueue();
228#endif
229 ASSERT_GT(epfd[i], 0);
230 }
231
232 for (size_t i = 0; i < NCLIENT; ++i) {
233 ASSERT_EQ(0, socketpair(AF_UNIX, SOCK_STREAM, 0, fds + 2 * i));
234 SocketMeta* m = new SocketMeta;
235 m->fd = fds[i * 2];
236 m->epfd = epfd[fmix32(i) % NEPOLL];
237 m->req = 0;
238 m->buf_cap = 32768;
239 m->buf = (char*)malloc(m->buf_cap);
240 m->bytes = 0;
241 m->times = 0;
242 ASSERT_EQ(0, butil::make_non_blocking(m->fd));
243 sm[i] = m;
244
245#if defined(OS_LINUX)
246 epoll_event evt = { (uint32_t)(EPOLLIN | EPOLLET), { m } };
247 ASSERT_EQ(0, epoll_ctl(m->epfd, EPOLL_CTL_ADD, m->fd, &evt));
248#elif defined(OS_MACOSX)
249 struct kevent kqueue_event;
250 EV_SET(&kqueue_event, m->fd, EVFILT_READ, EV_ADD | EV_ENABLE | EV_CLEAR, 0, 0, m);
251 ASSERT_EQ(0, kevent(m->epfd, &kqueue_event, 1, NULL, 0, NULL));
252#endif
253
254 cm[i] = new ClientMeta;
255 cm[i]->fd = fds[i * 2 + 1];
256 cm[i]->times = 0;
257 cm[i]->bytes = 0;
258 ASSERT_EQ(0, pthread_create(&cth[i], NULL, client_thread, cm[i]));
259 }
260
261 ProfilerStart("dispatcher.prof");
262 butil::Timer tm;
263 tm.start();
264
265 for (size_t i = 0; i < NEPOLL; ++i) {

Callers

nothing calls this directly

Calls 12

make_non_blockingFunction · 0.85
ProfilerStartFunction · 0.85
bthread_start_backgroundFunction · 0.85
ProfilerStopFunction · 0.85
bthread_joinFunction · 0.85
bthread_usleepFunction · 0.85
u_elapsedMethod · 0.80
fmix32Function · 0.70
keventClass · 0.70
startMethod · 0.45
stopMethod · 0.45

Tested by

no test coverage detected