Commit 707089c4 authored by Aravind Anbudurai's avatar Aravind Anbudurai Committed by Facebook Github Bot

fix flaky EventHandlerTest

Summary: Lets the kernel choose the port instead of hardcoding it.

Reviewed By: djwatson

Differential Revision: D3745911

fbshipit-source-id: d9680ec286e8015abb9274c30b572ff1d91548ce
parent a56309f5
...@@ -190,10 +190,9 @@ TEST_F(EventHandlerTest, many_concurrent_consumers) { ...@@ -190,10 +190,9 @@ TEST_F(EventHandlerTest, many_concurrent_consumers) {
#ifdef EV_PRI #ifdef EV_PRI
TEST(EventHandlerSocketTest, EPOLLPRI) { TEST(EventHandlerSocketTest, EPOLLPRI) {
std::promise<void> serverReady; std::promise<decltype(sockaddr_in::sin_port)> serverReady;
std::thread t([serverReadyFuture = serverReady.get_future()] { std::thread t([serverReadyFuture = serverReady.get_future()]() mutable {
// client // client
serverReadyFuture.wait();
LOG(INFO) << "Server is ready"; LOG(INFO) << "Server is ready";
int sockfd = socket(AF_INET, SOCK_STREAM, 0); int sockfd = socket(AF_INET, SOCK_STREAM, 0);
SCOPE_EXIT { SCOPE_EXIT {
...@@ -208,7 +207,7 @@ TEST(EventHandlerSocketTest, EPOLLPRI) { ...@@ -208,7 +207,7 @@ TEST(EventHandlerSocketTest, EPOLLPRI) {
memcpy(&server.sin_addr, he->h_addr_list[0], he->h_length); memcpy(&server.sin_addr, he->h_addr_list[0], he->h_length);
server.sin_family = AF_INET; server.sin_family = AF_INET;
server.sin_port = htons(12345); server.sin_port = serverReadyFuture.get();
PCHECK(::connect(sockfd, (struct sockaddr*)&server, sizeof(server)) == 0); PCHECK(::connect(sockfd, (struct sockaddr*)&server, sizeof(server)) == 0);
LOG(INFO) << "Server connection available"; LOG(INFO) << "Server connection available";
...@@ -228,14 +227,18 @@ TEST(EventHandlerSocketTest, EPOLLPRI) { ...@@ -228,14 +227,18 @@ TEST(EventHandlerSocketTest, EPOLLPRI) {
PCHECK(sockfd != -1) << "unable to open socket"; PCHECK(sockfd != -1) << "unable to open socket";
struct sockaddr_in sin; struct sockaddr_in sin;
sin.sin_port = htons(12345); sin.sin_port = htons(0);
sin.sin_addr.s_addr = INADDR_ANY; sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET; sin.sin_family = AF_INET;
PCHECK(::bind(sockfd, (struct sockaddr*)&sin, sizeof(sin)) >= 0) PCHECK(bind(sockfd, (struct sockaddr*)&sin, sizeof(sin)) >= 0)
<< "Can't bind to port"; << "Can't bind to port";
listen(sockfd, 5); listen(sockfd, 5);
serverReady.set_value();
struct sockaddr_in findSockName;
socklen_t sz = sizeof(findSockName);
getsockname(sockfd, (struct sockaddr*)&findSockName, &sz);
serverReady.set_value(findSockName.sin_port);
socklen_t clilen; socklen_t clilen;
struct sockaddr_in cli_addr; struct sockaddr_in cli_addr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment