| 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 "mojo/system/message_pipe.h" | 5 #include "mojo/system/message_pipe.h" |
| 6 | 6 |
| 7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
| 8 #include "base/threading/platform_thread.h" // For |Sleep()|. | 8 #include "base/threading/platform_thread.h" // For |Sleep()|. |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "mojo/system/waiter.h" | 10 #include "mojo/system/waiter.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 buffer_size = kBufferSize; | 52 buffer_size = kBufferSize; |
| 53 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 53 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 54 mp->ReadMessage(1, UserPointer<void>(buffer), | 54 mp->ReadMessage(1, UserPointer<void>(buffer), |
| 55 MakeUserPointer(&buffer_size), 0, NULL, | 55 MakeUserPointer(&buffer_size), 0, NULL, |
| 56 MOJO_READ_MESSAGE_FLAG_NONE)); | 56 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 57 | 57 |
| 58 // Write from port 1 (to port 0). | 58 // Write from port 1 (to port 0). |
| 59 buffer[0] = 789012345; | 59 buffer[0] = 789012345; |
| 60 buffer[1] = 0; | 60 buffer[1] = 0; |
| 61 EXPECT_EQ(MOJO_RESULT_OK, | 61 EXPECT_EQ(MOJO_RESULT_OK, |
| 62 mp->WriteMessage(1, | 62 mp->WriteMessage(1, UserPointer<const void>(buffer), |
| 63 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 63 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
| 64 NULL, | |
| 65 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 64 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 66 | 65 |
| 67 // Read from port 0. | 66 // Read from port 0. |
| 68 buffer[0] = 123; | 67 buffer[0] = 123; |
| 69 buffer[1] = 456; | 68 buffer[1] = 456; |
| 70 buffer_size = kBufferSize; | 69 buffer_size = kBufferSize; |
| 71 EXPECT_EQ(MOJO_RESULT_OK, | 70 EXPECT_EQ(MOJO_RESULT_OK, |
| 72 mp->ReadMessage(0, UserPointer<void>(buffer), | 71 mp->ReadMessage(0, UserPointer<void>(buffer), |
| 73 MakeUserPointer(&buffer_size), 0, NULL, | 72 MakeUserPointer(&buffer_size), 0, NULL, |
| 74 MOJO_READ_MESSAGE_FLAG_NONE)); | 73 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 75 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); | 74 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 76 EXPECT_EQ(789012345, buffer[0]); | 75 EXPECT_EQ(789012345, buffer[0]); |
| 77 EXPECT_EQ(456, buffer[1]); | 76 EXPECT_EQ(456, buffer[1]); |
| 78 | 77 |
| 79 // Read again from port 0 -- it should be empty. | 78 // Read again from port 0 -- it should be empty. |
| 80 buffer_size = kBufferSize; | 79 buffer_size = kBufferSize; |
| 81 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 80 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 82 mp->ReadMessage(0, UserPointer<void>(buffer), | 81 mp->ReadMessage(0, UserPointer<void>(buffer), |
| 83 MakeUserPointer(&buffer_size), 0, NULL, | 82 MakeUserPointer(&buffer_size), 0, NULL, |
| 84 MOJO_READ_MESSAGE_FLAG_NONE)); | 83 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 85 | 84 |
| 86 // Write two messages from port 0 (to port 1). | 85 // Write two messages from port 0 (to port 1). |
| 87 buffer[0] = 123456789; | 86 buffer[0] = 123456789; |
| 88 buffer[1] = 0; | 87 buffer[1] = 0; |
| 89 EXPECT_EQ(MOJO_RESULT_OK, | 88 EXPECT_EQ(MOJO_RESULT_OK, |
| 90 mp->WriteMessage(0, | 89 mp->WriteMessage(0, UserPointer<const void>(buffer), |
| 91 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 90 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
| 92 NULL, | |
| 93 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 91 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 94 buffer[0] = 234567890; | 92 buffer[0] = 234567890; |
| 95 buffer[1] = 0; | 93 buffer[1] = 0; |
| 96 EXPECT_EQ(MOJO_RESULT_OK, | 94 EXPECT_EQ(MOJO_RESULT_OK, |
| 97 mp->WriteMessage(0, | 95 mp->WriteMessage(0, UserPointer<const void>(buffer), |
| 98 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 96 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
| 99 NULL, | |
| 100 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 97 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 101 | 98 |
| 102 // Read from port 1 with buffer size 0 (should get the size of next message). | 99 // Read from port 1 with buffer size 0 (should get the size of next message). |
| 103 // Also test that giving a null buffer is okay when the buffer size is 0. | 100 // Also test that giving a null buffer is okay when the buffer size is 0. |
| 104 buffer_size = 0; | 101 buffer_size = 0; |
| 105 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 102 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 106 mp->ReadMessage(1, NullUserPointer(), MakeUserPointer(&buffer_size), | 103 mp->ReadMessage(1, NullUserPointer(), MakeUserPointer(&buffer_size), |
| 107 0, NULL, | 104 0, NULL, |
| 108 MOJO_READ_MESSAGE_FLAG_NONE)); | 105 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 109 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); | 106 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 buffer_size = kBufferSize; | 146 buffer_size = kBufferSize; |
| 150 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 147 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 151 mp->ReadMessage(1, UserPointer<void>(buffer), | 148 mp->ReadMessage(1, UserPointer<void>(buffer), |
| 152 MakeUserPointer(&buffer_size), 0, NULL, | 149 MakeUserPointer(&buffer_size), 0, NULL, |
| 153 MOJO_READ_MESSAGE_FLAG_NONE)); | 150 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 154 | 151 |
| 155 // Write from port 0 (to port 1). | 152 // Write from port 0 (to port 1). |
| 156 buffer[0] = 345678901; | 153 buffer[0] = 345678901; |
| 157 buffer[1] = 0; | 154 buffer[1] = 0; |
| 158 EXPECT_EQ(MOJO_RESULT_OK, | 155 EXPECT_EQ(MOJO_RESULT_OK, |
| 159 mp->WriteMessage(0, | 156 mp->WriteMessage(0, UserPointer<const void>(buffer), |
| 160 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 157 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
| 161 NULL, | |
| 162 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 158 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 163 | 159 |
| 164 // Close port 0. | 160 // Close port 0. |
| 165 mp->Close(0); | 161 mp->Close(0); |
| 166 | 162 |
| 167 // Try to write from port 1 (to port 0). | 163 // Try to write from port 1 (to port 0). |
| 168 buffer[0] = 456789012; | 164 buffer[0] = 456789012; |
| 169 buffer[1] = 0; | 165 buffer[1] = 0; |
| 170 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 166 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 171 mp->WriteMessage(1, | 167 mp->WriteMessage(1, UserPointer<const void>(buffer), |
| 172 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 168 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
| 173 NULL, | |
| 174 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 169 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 175 | 170 |
| 176 // Read from port 1; should still get message (even though port 0 was closed). | 171 // Read from port 1; should still get message (even though port 0 was closed). |
| 177 buffer[0] = 123; | 172 buffer[0] = 123; |
| 178 buffer[1] = 456; | 173 buffer[1] = 456; |
| 179 buffer_size = kBufferSize; | 174 buffer_size = kBufferSize; |
| 180 EXPECT_EQ(MOJO_RESULT_OK, | 175 EXPECT_EQ(MOJO_RESULT_OK, |
| 181 mp->ReadMessage(1, UserPointer<void>(buffer), | 176 mp->ReadMessage(1, UserPointer<void>(buffer), |
| 182 MakeUserPointer(&buffer_size), 0, NULL, | 177 MakeUserPointer(&buffer_size), 0, NULL, |
| 183 MOJO_READ_MESSAGE_FLAG_NONE)); | 178 MOJO_READ_MESSAGE_FLAG_NONE)); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 199 scoped_refptr<MessagePipe> mp(new MessagePipe()); | 194 scoped_refptr<MessagePipe> mp(new MessagePipe()); |
| 200 | 195 |
| 201 int32_t buffer[1]; | 196 int32_t buffer[1]; |
| 202 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); | 197 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
| 203 uint32_t buffer_size; | 198 uint32_t buffer_size; |
| 204 | 199 |
| 205 // Write some messages from port 1 (to port 0). | 200 // Write some messages from port 1 (to port 0). |
| 206 for (int32_t i = 0; i < 5; i++) { | 201 for (int32_t i = 0; i < 5; i++) { |
| 207 buffer[0] = i; | 202 buffer[0] = i; |
| 208 EXPECT_EQ(MOJO_RESULT_OK, | 203 EXPECT_EQ(MOJO_RESULT_OK, |
| 209 mp->WriteMessage(1, | 204 mp->WriteMessage(1, UserPointer<const void>(buffer), kBufferSize, |
| 210 buffer, kBufferSize, | 205 NULL, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 211 NULL, | |
| 212 MOJO_WRITE_MESSAGE_FLAG_NONE)); | |
| 213 } | 206 } |
| 214 | 207 |
| 215 // Port 0 shouldn't be empty. | 208 // Port 0 shouldn't be empty. |
| 216 buffer_size = 0; | 209 buffer_size = 0; |
| 217 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 210 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 218 mp->ReadMessage(0, NullUserPointer(), MakeUserPointer(&buffer_size), | 211 mp->ReadMessage(0, NullUserPointer(), MakeUserPointer(&buffer_size), |
| 219 0, NULL, | 212 0, NULL, |
| 220 MOJO_READ_MESSAGE_FLAG_NONE)); | 213 MOJO_READ_MESSAGE_FLAG_NONE)); |
| 221 EXPECT_EQ(kBufferSize, buffer_size); | 214 EXPECT_EQ(kBufferSize, buffer_size); |
| 222 | 215 |
| 223 // Close port 0 first, which should have outstanding (incoming) messages. | 216 // Close port 0 first, which should have outstanding (incoming) messages. |
| 224 mp->Close(0); | 217 mp->Close(0); |
| 225 mp->Close(1); | 218 mp->Close(1); |
| 226 } | 219 } |
| 227 | 220 |
| 228 TEST(MessagePipeTest, DiscardMode) { | 221 TEST(MessagePipeTest, DiscardMode) { |
| 229 scoped_refptr<MessagePipe> mp(new MessagePipe()); | 222 scoped_refptr<MessagePipe> mp(new MessagePipe()); |
| 230 | 223 |
| 231 int32_t buffer[2]; | 224 int32_t buffer[2]; |
| 232 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); | 225 const uint32_t kBufferSize = static_cast<uint32_t>(sizeof(buffer)); |
| 233 uint32_t buffer_size; | 226 uint32_t buffer_size; |
| 234 | 227 |
| 235 // Write from port 1 (to port 0). | 228 // Write from port 1 (to port 0). |
| 236 buffer[0] = 789012345; | 229 buffer[0] = 789012345; |
| 237 buffer[1] = 0; | 230 buffer[1] = 0; |
| 238 EXPECT_EQ(MOJO_RESULT_OK, | 231 EXPECT_EQ(MOJO_RESULT_OK, |
| 239 mp->WriteMessage(1, | 232 mp->WriteMessage(1, UserPointer<const void>(buffer), |
| 240 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 233 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
| 241 NULL, | |
| 242 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 234 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 243 | 235 |
| 244 // Read/discard from port 0 (no buffer); get size. | 236 // Read/discard from port 0 (no buffer); get size. |
| 245 buffer_size = 0; | 237 buffer_size = 0; |
| 246 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 238 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 247 mp->ReadMessage(0, NullUserPointer(), MakeUserPointer(&buffer_size), | 239 mp->ReadMessage(0, NullUserPointer(), MakeUserPointer(&buffer_size), |
| 248 0, NULL, | 240 0, NULL, |
| 249 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 241 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
| 250 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); | 242 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 251 | 243 |
| 252 // Read again from port 0 -- it should be empty. | 244 // Read again from port 0 -- it should be empty. |
| 253 buffer_size = kBufferSize; | 245 buffer_size = kBufferSize; |
| 254 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 246 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 255 mp->ReadMessage(0, UserPointer<void>(buffer), | 247 mp->ReadMessage(0, UserPointer<void>(buffer), |
| 256 MakeUserPointer(&buffer_size), 0, NULL, | 248 MakeUserPointer(&buffer_size), 0, NULL, |
| 257 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 249 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
| 258 | 250 |
| 259 // Write from port 1 (to port 0). | 251 // Write from port 1 (to port 0). |
| 260 buffer[0] = 890123456; | 252 buffer[0] = 890123456; |
| 261 buffer[1] = 0; | 253 buffer[1] = 0; |
| 262 EXPECT_EQ(MOJO_RESULT_OK, | 254 EXPECT_EQ(MOJO_RESULT_OK, |
| 263 mp->WriteMessage(1, | 255 mp->WriteMessage(1, UserPointer<const void>(buffer), |
| 264 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 256 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
| 265 NULL, | |
| 266 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 257 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 267 | 258 |
| 268 // Read from port 0 (buffer big enough). | 259 // Read from port 0 (buffer big enough). |
| 269 buffer[0] = 123; | 260 buffer[0] = 123; |
| 270 buffer[1] = 456; | 261 buffer[1] = 456; |
| 271 buffer_size = kBufferSize; | 262 buffer_size = kBufferSize; |
| 272 EXPECT_EQ(MOJO_RESULT_OK, | 263 EXPECT_EQ(MOJO_RESULT_OK, |
| 273 mp->ReadMessage(0, UserPointer<void>(buffer), | 264 mp->ReadMessage(0, UserPointer<void>(buffer), |
| 274 MakeUserPointer(&buffer_size), 0, NULL, | 265 MakeUserPointer(&buffer_size), 0, NULL, |
| 275 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 266 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
| 276 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); | 267 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 277 EXPECT_EQ(890123456, buffer[0]); | 268 EXPECT_EQ(890123456, buffer[0]); |
| 278 EXPECT_EQ(456, buffer[1]); | 269 EXPECT_EQ(456, buffer[1]); |
| 279 | 270 |
| 280 // Read again from port 0 -- it should be empty. | 271 // Read again from port 0 -- it should be empty. |
| 281 buffer_size = kBufferSize; | 272 buffer_size = kBufferSize; |
| 282 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 273 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 283 mp->ReadMessage(0, UserPointer<void>(buffer), | 274 mp->ReadMessage(0, UserPointer<void>(buffer), |
| 284 MakeUserPointer(&buffer_size), 0, NULL, | 275 MakeUserPointer(&buffer_size), 0, NULL, |
| 285 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 276 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
| 286 | 277 |
| 287 // Write from port 1 (to port 0). | 278 // Write from port 1 (to port 0). |
| 288 buffer[0] = 901234567; | 279 buffer[0] = 901234567; |
| 289 buffer[1] = 0; | 280 buffer[1] = 0; |
| 290 EXPECT_EQ(MOJO_RESULT_OK, | 281 EXPECT_EQ(MOJO_RESULT_OK, |
| 291 mp->WriteMessage(1, | 282 mp->WriteMessage(1, UserPointer<const void>(buffer), |
| 292 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 283 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
| 293 NULL, | |
| 294 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 284 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 295 | 285 |
| 296 // Read/discard from port 0 (buffer too small); get size. | 286 // Read/discard from port 0 (buffer too small); get size. |
| 297 buffer_size = 1; | 287 buffer_size = 1; |
| 298 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 288 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 299 mp->ReadMessage(0, UserPointer<void>(buffer), | 289 mp->ReadMessage(0, UserPointer<void>(buffer), |
| 300 MakeUserPointer(&buffer_size), 0, NULL, | 290 MakeUserPointer(&buffer_size), 0, NULL, |
| 301 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 291 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
| 302 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); | 292 EXPECT_EQ(static_cast<uint32_t>(sizeof(buffer[0])), buffer_size); |
| 303 | 293 |
| 304 // Read again from port 0 -- it should be empty. | 294 // Read again from port 0 -- it should be empty. |
| 305 buffer_size = kBufferSize; | 295 buffer_size = kBufferSize; |
| 306 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, | 296 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, |
| 307 mp->ReadMessage(0, UserPointer<void>(buffer), | 297 mp->ReadMessage(0, UserPointer<void>(buffer), |
| 308 MakeUserPointer(&buffer_size), 0, NULL, | 298 MakeUserPointer(&buffer_size), 0, NULL, |
| 309 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 299 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
| 310 | 300 |
| 311 // Write from port 1 (to port 0). | 301 // Write from port 1 (to port 0). |
| 312 buffer[0] = 123456789; | 302 buffer[0] = 123456789; |
| 313 buffer[1] = 0; | 303 buffer[1] = 0; |
| 314 EXPECT_EQ(MOJO_RESULT_OK, | 304 EXPECT_EQ(MOJO_RESULT_OK, |
| 315 mp->WriteMessage(1, | 305 mp->WriteMessage(1, UserPointer<const void>(buffer), |
| 316 buffer, static_cast<uint32_t>(sizeof(buffer[0])), | 306 static_cast<uint32_t>(sizeof(buffer[0])), NULL, |
| 317 NULL, | |
| 318 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 307 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 319 | 308 |
| 320 // Discard from port 0. | 309 // Discard from port 0. |
| 321 buffer_size = 1; | 310 buffer_size = 1; |
| 322 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, | 311 EXPECT_EQ(MOJO_RESULT_RESOURCE_EXHAUSTED, |
| 323 mp->ReadMessage(0, NullUserPointer(), NullUserPointer(), 0, NULL, | 312 mp->ReadMessage(0, NullUserPointer(), NullUserPointer(), 0, NULL, |
| 324 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); | 313 MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
| 325 | 314 |
| 326 // Read again from port 0 -- it should be empty. | 315 // Read again from port 0 -- it should be empty. |
| 327 buffer_size = kBufferSize; | 316 buffer_size = kBufferSize; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 357 // Not yet readable. | 346 // Not yet readable. |
| 358 waiter.Init(); | 347 waiter.Init(); |
| 359 ASSERT_EQ(MOJO_RESULT_OK, | 348 ASSERT_EQ(MOJO_RESULT_OK, |
| 360 mp->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 1)); | 349 mp->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 1)); |
| 361 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); | 350 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, waiter.Wait(0, NULL)); |
| 362 mp->RemoveWaiter(0, &waiter); | 351 mp->RemoveWaiter(0, &waiter); |
| 363 | 352 |
| 364 // Write from port 0 (to port 1), to make port 1 readable. | 353 // Write from port 0 (to port 1), to make port 1 readable. |
| 365 buffer[0] = 123456789; | 354 buffer[0] = 123456789; |
| 366 EXPECT_EQ(MOJO_RESULT_OK, | 355 EXPECT_EQ(MOJO_RESULT_OK, |
| 367 mp->WriteMessage(0, | 356 mp->WriteMessage(0, UserPointer<const void>(buffer), kBufferSize, |
| 368 buffer, kBufferSize, | 357 NULL, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 369 NULL, | |
| 370 MOJO_WRITE_MESSAGE_FLAG_NONE)); | |
| 371 | 358 |
| 372 // Port 1 should already be readable now. | 359 // Port 1 should already be readable now. |
| 373 waiter.Init(); | 360 waiter.Init(); |
| 374 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 361 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
| 375 mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 2)); | 362 mp->AddWaiter(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 2)); |
| 376 waiter.Init(); | 363 waiter.Init(); |
| 377 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, | 364 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
| 378 mp->AddWaiter(1, | 365 mp->AddWaiter(1, |
| 379 &waiter, | 366 &waiter, |
| 380 MOJO_HANDLE_SIGNAL_READABLE | | 367 MOJO_HANDLE_SIGNAL_READABLE | |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 | 416 |
| 430 thread.waiter()->Init(); | 417 thread.waiter()->Init(); |
| 431 ASSERT_EQ(MOJO_RESULT_OK, | 418 ASSERT_EQ(MOJO_RESULT_OK, |
| 432 mp->AddWaiter(1, thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, | 419 mp->AddWaiter(1, thread.waiter(), MOJO_HANDLE_SIGNAL_READABLE, |
| 433 1)); | 420 1)); |
| 434 thread.Start(); | 421 thread.Start(); |
| 435 | 422 |
| 436 buffer[0] = 123456789; | 423 buffer[0] = 123456789; |
| 437 // Write from port 0 (to port 1), which should wake up the waiter. | 424 // Write from port 0 (to port 1), which should wake up the waiter. |
| 438 EXPECT_EQ(MOJO_RESULT_OK, | 425 EXPECT_EQ(MOJO_RESULT_OK, |
| 439 mp->WriteMessage(0, | 426 mp->WriteMessage(0, UserPointer<const void>(buffer), kBufferSize, |
| 440 buffer, kBufferSize, | 427 NULL, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
| 441 NULL, | |
| 442 MOJO_WRITE_MESSAGE_FLAG_NONE)); | |
| 443 | 428 |
| 444 mp->RemoveWaiter(1, thread.waiter()); | 429 mp->RemoveWaiter(1, thread.waiter()); |
| 445 | 430 |
| 446 mp->Close(0); | 431 mp->Close(0); |
| 447 mp->Close(1); | 432 mp->Close(1); |
| 448 } // Joins |thread|. | 433 } // Joins |thread|. |
| 449 // The waiter should have woken up successfully. | 434 // The waiter should have woken up successfully. |
| 450 EXPECT_EQ(MOJO_RESULT_OK, result); | 435 EXPECT_EQ(MOJO_RESULT_OK, result); |
| 451 EXPECT_EQ(1u, context); | 436 EXPECT_EQ(1u, context); |
| 452 | 437 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 mp->CancelAllWaiters(1); | 479 mp->CancelAllWaiters(1); |
| 495 mp->Close(1); | 480 mp->Close(1); |
| 496 } // Joins |thread|. | 481 } // Joins |thread|. |
| 497 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); | 482 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, result); |
| 498 EXPECT_EQ(3u, context); | 483 EXPECT_EQ(3u, context); |
| 499 } | 484 } |
| 500 | 485 |
| 501 } // namespace | 486 } // namespace |
| 502 } // namespace system | 487 } // namespace system |
| 503 } // namespace mojo | 488 } // namespace mojo |
| OLD | NEW |