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

Unified Diff: mojo/system/message_pipe_dispatcher_unittest.cc

Issue 419973005: Convert WriteMessage...() to use the new user pointer handling (see r285350). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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
« no previous file with comments | « mojo/system/message_pipe_dispatcher.cc ('k') | mojo/system/message_pipe_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 675adcb3c6d70933f40af6246d0f81a95785475c..76408e210a9fff70eb52986e6f24915675b1e3e6 100644
--- a/mojo/system/message_pipe_dispatcher_unittest.cc
+++ b/mojo/system/message_pipe_dispatcher_unittest.cc
@@ -63,9 +63,8 @@ TEST(MessagePipeDispatcherTest, Basic) {
d0->AddWaiter(&w, MOJO_HANDLE_SIGNAL_READABLE, 1));
buffer[0] = 123456789;
EXPECT_EQ(MOJO_RESULT_OK,
- d1->WriteMessage(buffer, kBufferSize,
- NULL,
- MOJO_WRITE_MESSAGE_FLAG_NONE));
+ d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize,
+ NULL, MOJO_WRITE_MESSAGE_FLAG_NONE));
stopwatch.Start();
EXPECT_EQ(MOJO_RESULT_OK, w.Wait(MOJO_DEADLINE_INDEFINITE, &context));
EXPECT_EQ(1u, context);
@@ -128,16 +127,53 @@ TEST(MessagePipeDispatcherTest, InvalidParams) {
}
// |WriteMessage|:
- // Null buffer with nonzero buffer size.
- EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
- d0->WriteMessage(NULL, 1,
- NULL,
- MOJO_WRITE_MESSAGE_FLAG_NONE));
// Huge buffer size.
EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED,
- d0->WriteMessage(buffer, std::numeric_limits<uint32_t>::max(),
- NULL,
+ d0->WriteMessage(UserPointer<const void>(buffer),
+ std::numeric_limits<uint32_t>::max(), NULL,
+ MOJO_WRITE_MESSAGE_FLAG_NONE));
+
+ EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
+ EXPECT_EQ(MOJO_RESULT_OK, d1->Close());
+}
+
+// These test invalid arguments that should cause death if we're being paranoid
+// about checking arguments (which we would want to do if, e.g., we were in a
+// true "kernel" situation, but we might not want to do otherwise for
+// performance reasons). Probably blatant errors like passing in null pointers
+// (for required pointer arguments) will still cause death, but perhaps not
+// predictably.
+TEST(MessagePipeDispatcherTest, InvalidParamsDeath) {
+ const char kMemoryCheckFailedRegex[] = "Check failed";
+
+ scoped_refptr<MessagePipeDispatcher> d0(new MessagePipeDispatcher(
+ MessagePipeDispatcher::kDefaultCreateOptions));
+ scoped_refptr<MessagePipeDispatcher> d1(new MessagePipeDispatcher(
+ MessagePipeDispatcher::kDefaultCreateOptions));
+ {
+ scoped_refptr<MessagePipe> mp(new MessagePipe());
+ d0->Init(mp, 0);
+ d1->Init(mp, 1);
+ }
+
+ // |WriteMessage|:
+ // Null buffer with nonzero buffer size.
+ EXPECT_DEATH_IF_SUPPORTED(
+ d0->WriteMessage(NullUserPointer(), 1, NULL,
+ MOJO_WRITE_MESSAGE_FLAG_NONE),
+ kMemoryCheckFailedRegex);
+
+ // |ReadMessage|:
+ // Null buffer with nonzero buffer size.
+ // First write something so that we actually have something to read.
+ EXPECT_EQ(MOJO_RESULT_OK,
+ d1->WriteMessage(UserPointer<const void>("x"), 1, NULL,
MOJO_WRITE_MESSAGE_FLAG_NONE));
+ uint32_t buffer_size = 1;
+ EXPECT_DEATH_IF_SUPPORTED(
+ d0->ReadMessage(NullUserPointer(), MakeUserPointer(&buffer_size), 0, NULL,
+ MOJO_READ_MESSAGE_FLAG_NONE),
+ kMemoryCheckFailedRegex);
EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
EXPECT_EQ(MOJO_RESULT_OK, d1->Close());
@@ -165,14 +201,12 @@ TEST(MessagePipeDispatcherTest, BasicClosed) {
// Write (twice) to |d1|.
buffer[0] = 123456789;
EXPECT_EQ(MOJO_RESULT_OK,
- d1->WriteMessage(buffer, kBufferSize,
- NULL,
- MOJO_WRITE_MESSAGE_FLAG_NONE));
+ d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize,
+ NULL, MOJO_WRITE_MESSAGE_FLAG_NONE));
buffer[0] = 234567890;
EXPECT_EQ(MOJO_RESULT_OK,
- d1->WriteMessage(buffer, kBufferSize,
- NULL,
- MOJO_WRITE_MESSAGE_FLAG_NONE));
+ d1->WriteMessage(UserPointer<const void>(buffer), kBufferSize,
+ NULL, MOJO_WRITE_MESSAGE_FLAG_NONE));
// Try waiting for readable on |d0|; should fail (already satisfied).
w.Init();
@@ -242,9 +276,8 @@ TEST(MessagePipeDispatcherTest, BasicClosed) {
// Try writing to |d0|; should fail (other end closed).
buffer[0] = 345678901;
EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
- d0->WriteMessage(buffer, kBufferSize,
- NULL,
- MOJO_WRITE_MESSAGE_FLAG_NONE));
+ d0->WriteMessage(UserPointer<const void>(buffer), kBufferSize,
+ NULL, MOJO_WRITE_MESSAGE_FLAG_NONE));
EXPECT_EQ(MOJO_RESULT_OK, d0->Close());
}
@@ -291,9 +324,8 @@ TEST(MessagePipeDispatcherTest, MAYBE_BasicThreaded) {
// Wake it up by writing to |d0|.
buffer[0] = 123456789;
EXPECT_EQ(MOJO_RESULT_OK,
- d0->WriteMessage(buffer, kBufferSize,
- NULL,
- MOJO_WRITE_MESSAGE_FLAG_NONE));
+ d0->WriteMessage(UserPointer<const void>(buffer), kBufferSize,
+ NULL, MOJO_WRITE_MESSAGE_FLAG_NONE));
} // Joins the thread.
elapsed = stopwatch.Elapsed();
EXPECT_GT(elapsed, (2-1) * test::EpsilonTimeout());
@@ -421,16 +453,16 @@ class WriterThread : public base::SimpleThread {
uint32_t bytes_to_write = static_cast<uint32_t>(
base::RandInt(1, static_cast<int>(kMaxMessageSize)));
EXPECT_EQ(MOJO_RESULT_OK,
- write_dispatcher_->WriteMessage(buffer, bytes_to_write,
- NULL,
+ write_dispatcher_->WriteMessage(UserPointer<const void>(buffer),
+ bytes_to_write, NULL,
MOJO_WRITE_MESSAGE_FLAG_NONE));
*bytes_written_ += bytes_to_write;
}
// Write one last "quit" message.
EXPECT_EQ(MOJO_RESULT_OK,
- write_dispatcher_->WriteMessage("quit", 4,
- NULL,
+ write_dispatcher_->WriteMessage(UserPointer<const void>("quit"),
+ 4, NULL,
MOJO_WRITE_MESSAGE_FLAG_NONE));
}
« no previous file with comments | « mojo/system/message_pipe_dispatcher.cc ('k') | mojo/system/message_pipe_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698