diff options
Diffstat (limited to 'simpleperf/IOEventLoop_test.cpp')
-rw-r--r-- | simpleperf/IOEventLoop_test.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/simpleperf/IOEventLoop_test.cpp b/simpleperf/IOEventLoop_test.cpp index 09f64522..658fe820 100644 --- a/simpleperf/IOEventLoop_test.cpp +++ b/simpleperf/IOEventLoop_test.cpp @@ -250,3 +250,45 @@ TEST(IOEventLoop, exit_before_loop) { IOEventLoop loop; ASSERT_TRUE(loop.ExitLoop()); } + +TEST(IOEventLoop, priority) { + int low_priority_fd[2]; + ASSERT_EQ(0, pipe(low_priority_fd)); + int high_priority_fd[2]; + ASSERT_EQ(0, pipe(high_priority_fd)); + + IOEventLoop loop; + int count = 0; + + ASSERT_NE(nullptr, loop.AddReadEvent( + low_priority_fd[0], + [&]() { + char c; + read(low_priority_fd[0], &c, 1); + CHECK_EQ(count, 1); + count++; + return loop.ExitLoop(); + }, + IOEventLowPriority)); + + ASSERT_NE(nullptr, loop.AddReadEvent( + high_priority_fd[0], + [&]() { + char c; + read(high_priority_fd[0], &c, 1); + CHECK_EQ(count, 0); + count++; + return true; + }, + IOEventHighPriority)); + + char c; + CHECK_EQ(write(low_priority_fd[1], &c, 1), 1); + CHECK_EQ(write(high_priority_fd[1], &c, 1), 1); + ASSERT_TRUE(loop.RunLoop()); + ASSERT_EQ(2, count); + for (int i = 0; i < 2; i++) { + close(low_priority_fd[i]); + close(high_priority_fd[i]); + } +} |