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

Unified Diff: mojo/edk/system/waiter_unittest.cc

Issue 2075353002: Plumb the handle signals state out of Waiter::Wait(). (Closed) Base URL: https://github.com/domokit/mojo.git@work795_wait_set_4.3-x-work794_wait_set_4.2
Patch Set: Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« mojo/edk/system/waiter.cc ('K') | « mojo/edk/system/waiter_test_utils.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/edk/system/waiter_unittest.cc
diff --git a/mojo/edk/system/waiter_unittest.cc b/mojo/edk/system/waiter_unittest.cc
index cfb0c31b306a02bbf7dd45e62db55e4ef25f514d..436207251c84eb36e92f474069c915d737561928 100644
--- a/mojo/edk/system/waiter_unittest.cc
+++ b/mojo/edk/system/waiter_unittest.cc
@@ -44,6 +44,7 @@ class WaitingThread : public test::SimpleTestThread {
void WaitUntilDone(MojoResult* result,
uint64_t* context,
+ HandleSignalsState* signals_state,
MojoDeadline* elapsed) {
for (;;) {
{
@@ -51,6 +52,7 @@ class WaitingThread : public test::SimpleTestThread {
if (done_) {
*result = result_;
*context = context_;
+ *signals_state = signals_state_;
*elapsed = elapsed_;
break;
}
@@ -67,10 +69,11 @@ class WaitingThread : public test::SimpleTestThread {
Stopwatch stopwatch;
MojoResult result;
uint64_t context = static_cast<uint64_t>(-1);
+ HandleSignalsState signals_state;
MojoDeadline elapsed;
stopwatch.Start();
- result = waiter_.Wait(deadline_, &context);
+ result = waiter_.Wait(deadline_, &context, &signals_state);
elapsed = stopwatch.Elapsed();
{
@@ -78,6 +81,7 @@ class WaitingThread : public test::SimpleTestThread {
done_ = true;
result_ = result;
context_ = context;
+ signals_state_ = signals_state;
elapsed_ = elapsed;
}
}
@@ -89,6 +93,7 @@ class WaitingThread : public test::SimpleTestThread {
bool done_ MOJO_GUARDED_BY(mutex_);
MojoResult result_ MOJO_GUARDED_BY(mutex_);
uint64_t context_ MOJO_GUARDED_BY(mutex_);
+ HandleSignalsState signals_state_ MOJO_GUARDED_BY(mutex_);
MojoDeadline elapsed_ MOJO_GUARDED_BY(mutex_);
MOJO_DISALLOW_COPY_AND_ASSIGN(WaitingThread);
@@ -97,6 +102,7 @@ class WaitingThread : public test::SimpleTestThread {
TEST(WaiterTest, Basic) {
MojoResult result;
uint64_t context;
+ HandleSignalsState hss;
MojoDeadline elapsed;
// Finite deadline.
@@ -106,10 +112,13 @@ TEST(WaiterTest, Basic) {
WaitingThread thread(10 * test::EpsilonTimeout());
thread.Start();
thread.waiter()->Awake(1, Awakable::AwakeReason::SATISFIED,
- HandleSignalsState());
- thread.WaitUntilDone(&result, &context, &elapsed);
+ HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE));
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_OK, result);
EXPECT_EQ(1u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE)));
EXPECT_LT(elapsed, test::EpsilonTimeout());
}
@@ -117,11 +126,14 @@ TEST(WaiterTest, Basic) {
{
WaitingThread thread(10 * test::EpsilonTimeout());
thread.waiter()->Awake(2, Awakable::AwakeReason::CANCELLED,
- HandleSignalsState());
+ HandleSignalsState(MOJO_HANDLE_SIGNAL_NONE,
+ MOJO_HANDLE_SIGNAL_WRITABLE));
thread.Start();
- thread.WaitUntilDone(&result, &context, &elapsed);
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
EXPECT_EQ(2u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState(MOJO_HANDLE_SIGNAL_NONE,
+ MOJO_HANDLE_SIGNAL_WRITABLE)));
EXPECT_LT(elapsed, test::EpsilonTimeout());
}
@@ -131,10 +143,15 @@ TEST(WaiterTest, Basic) {
thread.Start();
ThreadSleep(2 * test::EpsilonTimeout());
thread.waiter()->Awake(3, Awakable::AwakeReason::SATISFIED,
- HandleSignalsState());
- thread.WaitUntilDone(&result, &context, &elapsed);
+ HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE |
+ MOJO_HANDLE_SIGNAL_WRITABLE));
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_OK, result);
EXPECT_EQ(3u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState(
+ MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE)));
EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout());
EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout());
}
@@ -146,9 +163,10 @@ TEST(WaiterTest, Basic) {
ThreadSleep(5 * test::EpsilonTimeout());
thread.waiter()->Awake(4, Awakable::AwakeReason::UNSATISFIABLE,
HandleSignalsState());
- thread.WaitUntilDone(&result, &context, &elapsed);
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
EXPECT_EQ(4u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState()));
EXPECT_GT(elapsed, (5 - 1) * test::EpsilonTimeout());
EXPECT_LT(elapsed, (5 + 1) * test::EpsilonTimeout());
}
@@ -157,7 +175,7 @@ TEST(WaiterTest, Basic) {
{
WaitingThread thread(2 * test::EpsilonTimeout());
thread.Start();
- thread.WaitUntilDone(&result, &context, &elapsed);
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, result);
EXPECT_EQ(static_cast<uint64_t>(-1), context);
EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout());
@@ -171,10 +189,13 @@ TEST(WaiterTest, Basic) {
WaitingThread thread(MOJO_DEADLINE_INDEFINITE);
thread.Start();
thread.waiter()->Awake(5, Awakable::AwakeReason::SATISFIED,
- HandleSignalsState());
- thread.WaitUntilDone(&result, &context, &elapsed);
+ HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE));
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_OK, result);
EXPECT_EQ(5u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE)));
EXPECT_LT(elapsed, test::EpsilonTimeout());
}
@@ -184,9 +205,10 @@ TEST(WaiterTest, Basic) {
thread.waiter()->Awake(6, Awakable::AwakeReason::CANCELLED,
HandleSignalsState());
thread.Start();
- thread.WaitUntilDone(&result, &context, &elapsed);
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
EXPECT_EQ(6u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState()));
EXPECT_LT(elapsed, test::EpsilonTimeout());
}
@@ -196,10 +218,13 @@ TEST(WaiterTest, Basic) {
thread.Start();
ThreadSleep(2 * test::EpsilonTimeout());
thread.waiter()->Awake(7, Awakable::AwakeReason::UNSATISFIABLE,
- HandleSignalsState());
- thread.WaitUntilDone(&result, &context, &elapsed);
+ HandleSignalsState(MOJO_HANDLE_SIGNAL_NONE,
+ MOJO_HANDLE_SIGNAL_WRITABLE));
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
EXPECT_EQ(7u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState(MOJO_HANDLE_SIGNAL_NONE,
+ MOJO_HANDLE_SIGNAL_WRITABLE)));
EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout());
EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout());
}
@@ -210,10 +235,13 @@ TEST(WaiterTest, Basic) {
thread.Start();
ThreadSleep(5 * test::EpsilonTimeout());
thread.waiter()->Awake(8, Awakable::AwakeReason::CANCELLED,
- HandleSignalsState());
- thread.WaitUntilDone(&result, &context, &elapsed);
+ HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE));
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
EXPECT_EQ(8u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE)));
EXPECT_GT(elapsed, (5 - 1) * test::EpsilonTimeout());
EXPECT_LT(elapsed, (5 + 1) * test::EpsilonTimeout());
}
@@ -228,7 +256,7 @@ TEST(WaiterTest, TimeOut) {
waiter.Init();
stopwatch.Start();
- EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, &context));
+ EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, &context, nullptr));
elapsed = stopwatch.Elapsed();
EXPECT_LT(elapsed, test::EpsilonTimeout());
EXPECT_EQ(123u, context);
@@ -236,7 +264,7 @@ TEST(WaiterTest, TimeOut) {
waiter.Init();
stopwatch.Start();
EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
- waiter.Wait(2 * test::EpsilonTimeout(), &context));
+ waiter.Wait(2 * test::EpsilonTimeout(), &context, nullptr));
elapsed = stopwatch.Elapsed();
EXPECT_GT(elapsed, (2 - 1) * test::EpsilonTimeout());
EXPECT_LT(elapsed, (2 + 1) * test::EpsilonTimeout());
@@ -245,7 +273,7 @@ TEST(WaiterTest, TimeOut) {
waiter.Init();
stopwatch.Start();
EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED,
- waiter.Wait(5 * test::EpsilonTimeout(), &context));
+ waiter.Wait(5 * test::EpsilonTimeout(), &context, nullptr));
elapsed = stopwatch.Elapsed();
EXPECT_GT(elapsed, (5 - 1) * test::EpsilonTimeout());
EXPECT_LT(elapsed, (5 + 1) * test::EpsilonTimeout());
@@ -256,18 +284,22 @@ TEST(WaiterTest, TimeOut) {
TEST(WaiterTest, MultipleAwakes) {
MojoResult result;
uint64_t context;
+ HandleSignalsState hss;
MojoDeadline elapsed;
{
WaitingThread thread(MOJO_DEADLINE_INDEFINITE);
thread.Start();
thread.waiter()->Awake(1, Awakable::AwakeReason::SATISFIED,
- HandleSignalsState());
+ HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE));
thread.waiter()->Awake(2, Awakable::AwakeReason::UNSATISFIABLE,
HandleSignalsState());
- thread.WaitUntilDone(&result, &context, &elapsed);
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_OK, result);
EXPECT_EQ(1u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE)));
EXPECT_LT(elapsed, test::EpsilonTimeout());
}
@@ -277,10 +309,12 @@ TEST(WaiterTest, MultipleAwakes) {
HandleSignalsState());
thread.Start();
thread.waiter()->Awake(4, Awakable::AwakeReason::SATISFIED,
- HandleSignalsState());
- thread.WaitUntilDone(&result, &context, &elapsed);
+ HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE));
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
EXPECT_EQ(3u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState()));
EXPECT_LT(elapsed, test::EpsilonTimeout());
}
@@ -291,10 +325,12 @@ TEST(WaiterTest, MultipleAwakes) {
HandleSignalsState());
ThreadSleep(2 * test::EpsilonTimeout());
thread.waiter()->Awake(6, Awakable::AwakeReason::UNSATISFIABLE,
- HandleSignalsState());
- thread.WaitUntilDone(&result, &context, &elapsed);
+ HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE));
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_CANCELLED, result);
EXPECT_EQ(5u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState()));
EXPECT_LT(elapsed, test::EpsilonTimeout());
}
@@ -306,10 +342,12 @@ TEST(WaiterTest, MultipleAwakes) {
HandleSignalsState());
ThreadSleep(2 * test::EpsilonTimeout());
thread.waiter()->Awake(8, Awakable::AwakeReason::SATISFIED,
- HandleSignalsState());
- thread.WaitUntilDone(&result, &context, &elapsed);
+ HandleSignalsState(MOJO_HANDLE_SIGNAL_READABLE,
+ MOJO_HANDLE_SIGNAL_READABLE));
+ thread.WaitUntilDone(&result, &context, &hss, &elapsed);
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result);
EXPECT_EQ(7u, context);
+ EXPECT_TRUE(hss.equals(HandleSignalsState()));
EXPECT_GT(elapsed, (1 - 1) * test::EpsilonTimeout());
EXPECT_LT(elapsed, (1 + 1) * test::EpsilonTimeout());
}
« mojo/edk/system/waiter.cc ('K') | « mojo/edk/system/waiter_test_utils.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698