Commit b7cdcf4e authored by Kenton Varda's avatar Kenton Varda

Add tests for actually receiving multiple signals and multiple polls at once,…

Add tests for actually receiving multiple signals and multiple polls at once, not just listening for them.
parent e5022cd0
...@@ -86,7 +86,7 @@ TEST_F(AsyncUnixTest, SignalWithValue) { ...@@ -86,7 +86,7 @@ TEST_F(AsyncUnixTest, SignalWithValue) {
} }
#endif #endif
TEST_F(AsyncUnixTest, SignalsMulti) { TEST_F(AsyncUnixTest, SignalsMultiListen) {
UnixEventLoop loop; UnixEventLoop loop;
DummyErrorHandler dummyHandler; DummyErrorHandler dummyHandler;
...@@ -102,6 +102,22 @@ TEST_F(AsyncUnixTest, SignalsMulti) { ...@@ -102,6 +102,22 @@ TEST_F(AsyncUnixTest, SignalsMulti) {
EXPECT_SI_CODE(SI_USER, info.si_code); EXPECT_SI_CODE(SI_USER, info.si_code);
} }
TEST_F(AsyncUnixTest, SignalsMultiReceive) {
UnixEventLoop loop;
DummyErrorHandler dummyHandler;
kill(getpid(), SIGUSR2);
kill(getpid(), SIGIO);
siginfo_t info = loop.wait(loop.onSignal(SIGUSR2));
EXPECT_EQ(SIGUSR2, info.si_signo);
EXPECT_SI_CODE(SI_USER, info.si_code);
info = loop.wait(loop.onSignal(SIGIO));
EXPECT_EQ(SIGIO, info.si_signo);
EXPECT_SI_CODE(SI_USER, info.si_code);
}
TEST_F(AsyncUnixTest, SignalsAsync) { TEST_F(AsyncUnixTest, SignalsAsync) {
// Arrange for another thread to wait on a UnixEventLoop... // Arrange for another thread to wait on a UnixEventLoop...
auto exitThread = newPromiseAndFulfiller<void>(); auto exitThread = newPromiseAndFulfiller<void>();
...@@ -145,7 +161,7 @@ TEST_F(AsyncUnixTest, Poll) { ...@@ -145,7 +161,7 @@ TEST_F(AsyncUnixTest, Poll) {
EXPECT_EQ(POLLIN, loop.wait(loop.onFdEvent(pipefds[0], POLLIN | POLLPRI))); EXPECT_EQ(POLLIN, loop.wait(loop.onFdEvent(pipefds[0], POLLIN | POLLPRI)));
} }
TEST_F(AsyncUnixTest, PollMulti) { TEST_F(AsyncUnixTest, PollMultiListen) {
UnixEventLoop loop; UnixEventLoop loop;
DummyErrorHandler dummyHandler; DummyErrorHandler dummyHandler;
...@@ -167,6 +183,24 @@ TEST_F(AsyncUnixTest, PollMulti) { ...@@ -167,6 +183,24 @@ TEST_F(AsyncUnixTest, PollMulti) {
EXPECT_EQ(POLLIN, loop.wait(loop.onFdEvent(pipefds[0], POLLIN | POLLPRI))); EXPECT_EQ(POLLIN, loop.wait(loop.onFdEvent(pipefds[0], POLLIN | POLLPRI)));
} }
TEST_F(AsyncUnixTest, PollMultiReceive) {
UnixEventLoop loop;
DummyErrorHandler dummyHandler;
int pipefds[2];
KJ_SYSCALL(pipe(pipefds));
KJ_DEFER({ close(pipefds[1]); close(pipefds[0]); });
KJ_SYSCALL(write(pipefds[1], "foo", 3));
int pipefds2[2];
KJ_SYSCALL(pipe(pipefds2));
KJ_DEFER({ close(pipefds2[1]); close(pipefds2[0]); });
KJ_SYSCALL(write(pipefds2[1], "bar", 3));
EXPECT_EQ(POLLIN, loop.wait(loop.onFdEvent(pipefds[0], POLLIN | POLLPRI)));
EXPECT_EQ(POLLIN, loop.wait(loop.onFdEvent(pipefds2[0], POLLIN | POLLPRI)));
}
TEST_F(AsyncUnixTest, PollAsync) { TEST_F(AsyncUnixTest, PollAsync) {
// Arrange for another thread to wait on a UnixEventLoop... // Arrange for another thread to wait on a UnixEventLoop...
auto exitThread = newPromiseAndFulfiller<void>(); auto exitThread = newPromiseAndFulfiller<void>();
......
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