| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/nacl/loader/nacl_ipc_adapter.h" | 5 #include "components/nacl/loader/nacl_ipc_adapter.h" |
| 6 | 6 |
| 7 #include <stddef.h> |
| 8 #include <stdint.h> |
| 7 #include <string.h> | 9 #include <string.h> |
| 8 | 10 |
| 9 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/thread_task_runner_handle.h" | 12 #include "base/thread_task_runner_handle.h" |
| 11 #include "base/threading/platform_thread.h" | 13 #include "base/threading/platform_thread.h" |
| 12 #include "base/threading/simple_thread.h" | 14 #include "base/threading/simple_thread.h" |
| 13 #include "ipc/ipc_test_sink.h" | 15 #include "ipc/ipc_test_sink.h" |
| 14 #include "native_client/src/public/nacl_desc_custom.h" | 16 #include "native_client/src/public/nacl_desc_custom.h" |
| 15 #include "native_client/src/trusted/service_runtime/include/sys/fcntl.h" | 17 #include "native_client/src/trusted/service_runtime/include/sys/fcntl.h" |
| 16 #include "ppapi/c/ppb_file_io.h" | 18 #include "ppapi/c/ppb_file_io.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 // In real life the adapter needs to take ownership so the channel can be | 68 // In real life the adapter needs to take ownership so the channel can be |
| 67 // destroyed on the right thread. | 69 // destroyed on the right thread. |
| 68 IPC::TestSink* sink_; | 70 IPC::TestSink* sink_; |
| 69 }; | 71 }; |
| 70 | 72 |
| 71 } // namespace | 73 } // namespace |
| 72 | 74 |
| 73 // Tests a simple message getting rewritten sent from native code to NaCl. | 75 // Tests a simple message getting rewritten sent from native code to NaCl. |
| 74 TEST_F(NaClIPCAdapterTest, SimpleReceiveRewriting) { | 76 TEST_F(NaClIPCAdapterTest, SimpleReceiveRewriting) { |
| 75 int routing_id = 0x89898989; | 77 int routing_id = 0x89898989; |
| 76 uint32 type = 0x55555555; | 78 uint32_t type = 0x55555555; |
| 77 IPC::Message input(routing_id, type, IPC::Message::PRIORITY_NORMAL); | 79 IPC::Message input(routing_id, type, IPC::Message::PRIORITY_NORMAL); |
| 78 uint32 flags = input.flags(); | 80 uint32_t flags = input.flags(); |
| 79 | 81 |
| 80 int value = 0x12345678; | 82 int value = 0x12345678; |
| 81 input.WriteInt(value); | 83 input.WriteInt(value); |
| 82 adapter_->OnMessageReceived(input); | 84 adapter_->OnMessageReceived(input); |
| 83 | 85 |
| 84 // Buffer just need to be big enough for our message with one int. | 86 // Buffer just need to be big enough for our message with one int. |
| 85 const int kBufSize = 64; | 87 const int kBufSize = 64; |
| 86 char buf[kBufSize]; | 88 char buf[kBufSize]; |
| 87 | 89 |
| 88 int bytes_read = BlockingReceive(buf, kBufSize); | 90 int bytes_read = BlockingReceive(buf, kBufSize); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 100 | 102 |
| 101 // Validate the payload. | 103 // Validate the payload. |
| 102 EXPECT_EQ(value, | 104 EXPECT_EQ(value, |
| 103 *reinterpret_cast<const int*>(&buf[ | 105 *reinterpret_cast<const int*>(&buf[ |
| 104 sizeof(NaClIPCAdapter::NaClMessageHeader)])); | 106 sizeof(NaClIPCAdapter::NaClMessageHeader)])); |
| 105 } | 107 } |
| 106 | 108 |
| 107 // Tests a simple message getting rewritten sent from NaCl to native code. | 109 // Tests a simple message getting rewritten sent from NaCl to native code. |
| 108 TEST_F(NaClIPCAdapterTest, SendRewriting) { | 110 TEST_F(NaClIPCAdapterTest, SendRewriting) { |
| 109 int routing_id = 0x89898989; | 111 int routing_id = 0x89898989; |
| 110 uint32 type = 0x55555555; | 112 uint32_t type = 0x55555555; |
| 111 int value = 0x12345678; | 113 int value = 0x12345678; |
| 112 | 114 |
| 113 // Send a message with one int inside it. | 115 // Send a message with one int inside it. |
| 114 const int buf_size = sizeof(NaClIPCAdapter::NaClMessageHeader) + sizeof(int); | 116 const int buf_size = sizeof(NaClIPCAdapter::NaClMessageHeader) + sizeof(int); |
| 115 char buf[buf_size] = {0}; | 117 char buf[buf_size] = {0}; |
| 116 | 118 |
| 117 NaClIPCAdapter::NaClMessageHeader* header = | 119 NaClIPCAdapter::NaClMessageHeader* header = |
| 118 reinterpret_cast<NaClIPCAdapter::NaClMessageHeader*>(buf); | 120 reinterpret_cast<NaClIPCAdapter::NaClMessageHeader*>(buf); |
| 119 header->payload_size = sizeof(int); | 121 header->payload_size = sizeof(int); |
| 120 header->routing = routing_id; | 122 header->routing = routing_id; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 ASSERT_EQ(1u, sink_->message_count()); | 168 ASSERT_EQ(1u, sink_->message_count()); |
| 167 msg = sink_->GetMessageAt(0); | 169 msg = sink_->GetMessageAt(0); |
| 168 EXPECT_EQ(sizeof(int), msg->payload_size()); | 170 EXPECT_EQ(sizeof(int), msg->payload_size()); |
| 169 EXPECT_EQ(header->routing, msg->routing_id()); | 171 EXPECT_EQ(header->routing, msg->routing_id()); |
| 170 EXPECT_EQ(header->type, msg->type()); | 172 EXPECT_EQ(header->type, msg->type()); |
| 171 } | 173 } |
| 172 | 174 |
| 173 // Tests when a buffer is too small to receive the entire message. | 175 // Tests when a buffer is too small to receive the entire message. |
| 174 TEST_F(NaClIPCAdapterTest, PartialReceive) { | 176 TEST_F(NaClIPCAdapterTest, PartialReceive) { |
| 175 int routing_id_1 = 0x89898989; | 177 int routing_id_1 = 0x89898989; |
| 176 uint32 type_1 = 0x55555555; | 178 uint32_t type_1 = 0x55555555; |
| 177 IPC::Message input_1(routing_id_1, type_1, IPC::Message::PRIORITY_NORMAL); | 179 IPC::Message input_1(routing_id_1, type_1, IPC::Message::PRIORITY_NORMAL); |
| 178 int value_1 = 0x12121212; | 180 int value_1 = 0x12121212; |
| 179 input_1.WriteInt(value_1); | 181 input_1.WriteInt(value_1); |
| 180 adapter_->OnMessageReceived(input_1); | 182 adapter_->OnMessageReceived(input_1); |
| 181 | 183 |
| 182 int routing_id_2 = 0x90909090; | 184 int routing_id_2 = 0x90909090; |
| 183 uint32 type_2 = 0x66666666; | 185 uint32_t type_2 = 0x66666666; |
| 184 IPC::Message input_2(routing_id_2, type_2, IPC::Message::PRIORITY_NORMAL); | 186 IPC::Message input_2(routing_id_2, type_2, IPC::Message::PRIORITY_NORMAL); |
| 185 int value_2 = 0x23232323; | 187 int value_2 = 0x23232323; |
| 186 input_2.WriteInt(value_2); | 188 input_2.WriteInt(value_2); |
| 187 adapter_->OnMessageReceived(input_2); | 189 adapter_->OnMessageReceived(input_2); |
| 188 | 190 |
| 189 const int kBufSize = 64; | 191 const int kBufSize = 64; |
| 190 char buf[kBufSize]; | 192 char buf[kBufSize]; |
| 191 | 193 |
| 192 // Read part of the first message. | 194 // Read part of the first message. |
| 193 int bytes_requested = 7; | 195 int bytes_requested = 7; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 216 EXPECT_EQ(sizeof(int), output_header->payload_size); | 218 EXPECT_EQ(sizeof(int), output_header->payload_size); |
| 217 EXPECT_EQ(routing_id_2, output_header->routing); | 219 EXPECT_EQ(routing_id_2, output_header->routing); |
| 218 EXPECT_EQ(type_2, output_header->type); | 220 EXPECT_EQ(type_2, output_header->type); |
| 219 } | 221 } |
| 220 | 222 |
| 221 // Tests sending messages that are too large. We test sends that are too | 223 // Tests sending messages that are too large. We test sends that are too |
| 222 // small implicitly here and in the success case because in that case it | 224 // small implicitly here and in the success case because in that case it |
| 223 // succeeds and buffers the data. | 225 // succeeds and buffers the data. |
| 224 TEST_F(NaClIPCAdapterTest, SendOverflow) { | 226 TEST_F(NaClIPCAdapterTest, SendOverflow) { |
| 225 int routing_id = 0x89898989; | 227 int routing_id = 0x89898989; |
| 226 uint32 type = 0x55555555; | 228 uint32_t type = 0x55555555; |
| 227 int value = 0x12345678; | 229 int value = 0x12345678; |
| 228 | 230 |
| 229 // Make a message with one int inside it. Reserve some extra space so | 231 // Make a message with one int inside it. Reserve some extra space so |
| 230 // we can test what happens when we send too much data. | 232 // we can test what happens when we send too much data. |
| 231 const int buf_size = sizeof(NaClIPCAdapter::NaClMessageHeader) + sizeof(int); | 233 const int buf_size = sizeof(NaClIPCAdapter::NaClMessageHeader) + sizeof(int); |
| 232 const int big_buf_size = buf_size + 4; | 234 const int big_buf_size = buf_size + 4; |
| 233 char buf[big_buf_size] = {0}; | 235 char buf[big_buf_size] = {0}; |
| 234 | 236 |
| 235 NaClIPCAdapter::NaClMessageHeader* header = | 237 NaClIPCAdapter::NaClMessageHeader* header = |
| 236 reinterpret_cast<NaClIPCAdapter::NaClMessageHeader*>(buf); | 238 reinterpret_cast<NaClIPCAdapter::NaClMessageHeader*>(buf); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 EXPECT_EQ(NACL_ABI_O_RDONLY, | 349 EXPECT_EQ(NACL_ABI_O_RDONLY, |
| 348 TranslatePepperFileReadWriteOpenFlagsForTesting( | 350 TranslatePepperFileReadWriteOpenFlagsForTesting( |
| 349 PP_FILEOPENFLAG_CREATE)); | 351 PP_FILEOPENFLAG_CREATE)); |
| 350 EXPECT_EQ(NACL_ABI_O_RDONLY, | 352 EXPECT_EQ(NACL_ABI_O_RDONLY, |
| 351 TranslatePepperFileReadWriteOpenFlagsForTesting( | 353 TranslatePepperFileReadWriteOpenFlagsForTesting( |
| 352 PP_FILEOPENFLAG_TRUNCATE)); | 354 PP_FILEOPENFLAG_TRUNCATE)); |
| 353 EXPECT_EQ(NACL_ABI_O_RDONLY, | 355 EXPECT_EQ(NACL_ABI_O_RDONLY, |
| 354 TranslatePepperFileReadWriteOpenFlagsForTesting( | 356 TranslatePepperFileReadWriteOpenFlagsForTesting( |
| 355 PP_FILEOPENFLAG_EXCLUSIVE)); | 357 PP_FILEOPENFLAG_EXCLUSIVE)); |
| 356 } | 358 } |
| OLD | NEW |