Index: mojo/system/message_pipe_dispatcher_unittest.cc |
diff --git a/mojo/system/message_pipe_dispatcher_unittest.cc b/mojo/system/message_pipe_dispatcher_unittest.cc |
index 3ef26bf18d0ff4625f5e27093edc7d7ae9652ddf..999d20c60370be09c56fd4016569be040498abbc 100644 |
--- a/mojo/system/message_pipe_dispatcher_unittest.cc |
+++ b/mojo/system/message_pipe_dispatcher_unittest.cc |
@@ -3,8 +3,9 @@ |
// found in the LICENSE file. |
// NOTE(vtl): Some of these tests are inherently flaky (e.g., if run on a |
-// heavily-loaded system). Sorry. |kEpsilonMicros| may be increased to increase |
-// tolerance and reduce observed flakiness. |
+// heavily-loaded system). Sorry. |test::EpsilonTimeout()| may be increased to |
+// increase tolerance and reduce observed flakiness (though doing so reduces the |
+// meaningfulness of the test). |
#include "mojo/system/message_pipe_dispatcher.h" |
@@ -28,15 +29,11 @@ namespace mojo { |
namespace system { |
namespace { |
-const int64_t kMicrosPerMs = 1000; |
-const int64_t kEpsilonMicros = 30 * kMicrosPerMs; // 30 ms. |
- |
TEST(MessagePipeDispatcherTest, Basic) { |
test::Stopwatch stopwatch; |
int32_t buffer[1]; |
const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
uint32_t buffer_size; |
- int64_t elapsed_micros; |
// Run this test both with |d0| as port 0, |d1| as port 1 and vice versa. |
for (unsigned i = 0; i < 2; i++) { |
@@ -67,8 +64,7 @@ TEST(MessagePipeDispatcherTest, Basic) { |
MOJO_WRITE_MESSAGE_FLAG_NONE)); |
stopwatch.Start(); |
EXPECT_EQ(1, w.Wait(MOJO_DEADLINE_INDEFINITE)); |
- elapsed_micros = stopwatch.Elapsed(); |
- EXPECT_LT(elapsed_micros, kEpsilonMicros); |
+ EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
d0->RemoveWaiter(&w); |
// Try adding a readable waiter when already readable (from above). |
@@ -93,8 +89,7 @@ TEST(MessagePipeDispatcherTest, Basic) { |
d0->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 3)); |
stopwatch.Start(); |
EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(0)); |
- elapsed_micros = stopwatch.Elapsed(); |
- EXPECT_LT(elapsed_micros, kEpsilonMicros); |
+ EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
d0->RemoveWaiter(&w); |
// Wait for non-zero, finite time for readability on |d0| (will time out). |
@@ -102,10 +97,11 @@ TEST(MessagePipeDispatcherTest, Basic) { |
EXPECT_EQ(MOJO_RESULT_OK, |
d0->AddWaiter(&w, MOJO_WAIT_FLAG_READABLE, 3)); |
stopwatch.Start(); |
- EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, w.Wait(2 * kEpsilonMicros)); |
- elapsed_micros = stopwatch.Elapsed(); |
- EXPECT_GT(elapsed_micros, (2-1) * kEpsilonMicros); |
- EXPECT_LT(elapsed_micros, (2+1) * kEpsilonMicros); |
+ EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
+ w.Wait(2 * test::EpsilonTimeout().InMicroseconds())); |
+ base::TimeDelta elapsed = stopwatch.Elapsed(); |
+ EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); |
+ EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); |
d0->RemoveWaiter(&w); |
EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); |
@@ -258,9 +254,9 @@ TEST(MessagePipeDispatcherTest, BasicThreaded) { |
int32_t buffer[1]; |
const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
uint32_t buffer_size; |
+ base::TimeDelta elapsed; |
bool did_wait; |
MojoResult result; |
- int64_t elapsed_micros; |
// Run this test both with |d0| as port 0, |d1| as port 1 and vice versa. |
for (unsigned i = 0; i < 2; i++) { |
@@ -281,8 +277,7 @@ TEST(MessagePipeDispatcherTest, BasicThreaded) { |
&did_wait, &result); |
stopwatch.Start(); |
thread.Start(); |
- base::PlatformThread::Sleep( |
- base::TimeDelta::FromMicroseconds(2 * kEpsilonMicros)); |
+ base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); |
// Wake it up by writing to |d0|. |
buffer[0] = 123456789; |
EXPECT_EQ(MOJO_RESULT_OK, |
@@ -290,11 +285,11 @@ TEST(MessagePipeDispatcherTest, BasicThreaded) { |
NULL, |
MOJO_WRITE_MESSAGE_FLAG_NONE)); |
} // Joins the thread. |
- elapsed_micros = stopwatch.Elapsed(); |
+ elapsed = stopwatch.Elapsed(); |
+ EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); |
+ EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); |
EXPECT_TRUE(did_wait); |
EXPECT_EQ(0, result); |
- EXPECT_GT(elapsed_micros, (2-1) * kEpsilonMicros); |
- EXPECT_LT(elapsed_micros, (2+1) * kEpsilonMicros); |
// Now |d1| is already readable. Try waiting for it again. |
{ |
@@ -306,10 +301,9 @@ TEST(MessagePipeDispatcherTest, BasicThreaded) { |
stopwatch.Start(); |
thread.Start(); |
} // Joins the thread. |
- elapsed_micros = stopwatch.Elapsed(); |
+ EXPECT_LT(stopwatch.Elapsed(), test::EpsilonTimeout()); |
EXPECT_FALSE(did_wait); |
EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, result); |
- EXPECT_LT(elapsed_micros, kEpsilonMicros); |
// Consume what we wrote to |d0|. |
buffer[0] = 0; |
@@ -331,15 +325,14 @@ TEST(MessagePipeDispatcherTest, BasicThreaded) { |
&did_wait, &result); |
stopwatch.Start(); |
thread.Start(); |
- base::PlatformThread::Sleep( |
- base::TimeDelta::FromMicroseconds(2 * kEpsilonMicros)); |
+ base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); |
EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); |
} // Joins the thread. |
- elapsed_micros = stopwatch.Elapsed(); |
+ elapsed = stopwatch.Elapsed(); |
+ EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); |
+ EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); |
EXPECT_TRUE(did_wait); |
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); |
- EXPECT_GT(elapsed_micros, (2-1) * kEpsilonMicros); |
- EXPECT_LT(elapsed_micros, (2+1) * kEpsilonMicros); |
EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); |
} |
@@ -363,15 +356,14 @@ TEST(MessagePipeDispatcherTest, BasicThreaded) { |
&did_wait, &result); |
stopwatch.Start(); |
thread.Start(); |
- base::PlatformThread::Sleep( |
- base::TimeDelta::FromMicroseconds(2 * kEpsilonMicros)); |
+ base::PlatformThread::Sleep(2 * test::EpsilonTimeout()); |
EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); |
} // Joins the thread. |
- elapsed_micros = stopwatch.Elapsed(); |
+ elapsed = stopwatch.Elapsed(); |
+ EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout()); |
+ EXPECT_LT(elapsed, (2+1) * test::EpsilonTimeout()); |
EXPECT_TRUE(did_wait); |
EXPECT_EQ(MOJO_RESULT_CANCELLED, result); |
- EXPECT_GT(elapsed_micros, (2-1) * kEpsilonMicros); |
- EXPECT_LT(elapsed_micros, (2+1) * kEpsilonMicros); |
EXPECT_EQ(MOJO_RESULT_OK, d0->Close()); |
} |