| OLD | NEW |
| 1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 request->header.msgh_size); | 217 request->header.msgh_size); |
| 218 if (options_.client_reply_port_type == Options::kReplyPortNormal) { | 218 if (options_.client_reply_port_type == Options::kReplyPortNormal) { |
| 219 EXPECT_EQ(RemotePort(), request->header.msgh_remote_port); | 219 EXPECT_EQ(RemotePort(), request->header.msgh_remote_port); |
| 220 } | 220 } |
| 221 EXPECT_EQ(LocalPort(), request->header.msgh_local_port); | 221 EXPECT_EQ(LocalPort(), request->header.msgh_local_port); |
| 222 EXPECT_EQ(kRequestMessageId, request->header.msgh_id); | 222 EXPECT_EQ(kRequestMessageId, request->header.msgh_id); |
| 223 if (options_.client_send_complex) { | 223 if (options_.client_send_complex) { |
| 224 EXPECT_EQ(1u, request->body.msgh_descriptor_count); | 224 EXPECT_EQ(1u, request->body.msgh_descriptor_count); |
| 225 EXPECT_NE(kMachPortNull, request->port_descriptor.name); | 225 EXPECT_NE(kMachPortNull, request->port_descriptor.name); |
| 226 parent_complex_message_port_ = request->port_descriptor.name; | 226 parent_complex_message_port_ = request->port_descriptor.name; |
| 227 EXPECT_EQ(static_cast<mach_msg_type_name_t>(MACH_MSG_TYPE_MOVE_SEND), | 227 EXPECT_EQ(implicit_cast<mach_msg_type_name_t>(MACH_MSG_TYPE_MOVE_SEND), |
| 228 request->port_descriptor.disposition); | 228 request->port_descriptor.disposition); |
| 229 EXPECT_EQ( | 229 EXPECT_EQ( |
| 230 static_cast<mach_msg_descriptor_type_t>(MACH_MSG_PORT_DESCRIPTOR), | 230 implicit_cast<mach_msg_descriptor_type_t>(MACH_MSG_PORT_DESCRIPTOR), |
| 231 request->port_descriptor.type); | 231 request->port_descriptor.type); |
| 232 } else { | 232 } else { |
| 233 EXPECT_EQ(0u, request->body.msgh_descriptor_count); | 233 EXPECT_EQ(0u, request->body.msgh_descriptor_count); |
| 234 EXPECT_EQ(kMachPortNull, request->port_descriptor.name); | 234 EXPECT_EQ(kMachPortNull, request->port_descriptor.name); |
| 235 EXPECT_EQ(0u, request->port_descriptor.disposition); | 235 EXPECT_EQ(0u, request->port_descriptor.disposition); |
| 236 EXPECT_EQ(0u, request->port_descriptor.type); | 236 EXPECT_EQ(0u, request->port_descriptor.type); |
| 237 } | 237 } |
| 238 EXPECT_EQ(0, memcmp(&request->ndr, &NDR_record, sizeof(NDR_record))); | 238 EXPECT_EQ(0, memcmp(&request->ndr, &NDR_record, sizeof(NDR_record))); |
| 239 EXPECT_EQ(requests_, request->number); | 239 EXPECT_EQ(requests_, request->number); |
| 240 | 240 |
| 241 // Look for the trailer in the right spot, depending on whether the request | 241 // Look for the trailer in the right spot, depending on whether the request |
| 242 // message was a RequestMessage or a LargeRequestMessage. | 242 // message was a RequestMessage or a LargeRequestMessage. |
| 243 const mach_msg_trailer_t* trailer; | 243 const mach_msg_trailer_t* trailer; |
| 244 if (options_.client_send_large) { | 244 if (options_.client_send_large) { |
| 245 const ReceiveLargeRequestMessage* large_request = | 245 const ReceiveLargeRequestMessage* large_request = |
| 246 reinterpret_cast<const ReceiveLargeRequestMessage*>(request); | 246 reinterpret_cast<const ReceiveLargeRequestMessage*>(request); |
| 247 for (size_t index = 0; index < sizeof(large_request->data); ++index) { | 247 for (size_t index = 0; index < sizeof(large_request->data); ++index) { |
| 248 EXPECT_EQ('!', large_request->data[index]); | 248 EXPECT_EQ('!', large_request->data[index]); |
| 249 } | 249 } |
| 250 trailer = &large_request->trailer; | 250 trailer = &large_request->trailer; |
| 251 } else { | 251 } else { |
| 252 trailer = &request->trailer; | 252 trailer = &request->trailer; |
| 253 } | 253 } |
| 254 | 254 |
| 255 EXPECT_EQ(static_cast<mach_msg_trailer_type_t>(MACH_MSG_TRAILER_FORMAT_0), | 255 EXPECT_EQ(implicit_cast<mach_msg_trailer_type_t>(MACH_MSG_TRAILER_FORMAT_0), |
| 256 trailer->msgh_trailer_type); | 256 trailer->msgh_trailer_type); |
| 257 EXPECT_EQ(MACH_MSG_TRAILER_MINIMUM_SIZE, trailer->msgh_trailer_size); | 257 EXPECT_EQ(MACH_MSG_TRAILER_MINIMUM_SIZE, trailer->msgh_trailer_size); |
| 258 | 258 |
| 259 ++requests_; | 259 ++requests_; |
| 260 | 260 |
| 261 ReplyMessage* reply = reinterpret_cast<ReplyMessage*>(out); | 261 ReplyMessage* reply = reinterpret_cast<ReplyMessage*>(out); |
| 262 reply->Head.msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0); | 262 reply->Head.msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0); |
| 263 reply->Head.msgh_size = sizeof(*reply); | 263 reply->Head.msgh_size = sizeof(*reply); |
| 264 reply->Head.msgh_remote_port = request->header.msgh_remote_port; | 264 reply->Head.msgh_remote_port = request->header.msgh_remote_port; |
| 265 reply->Head.msgh_local_port = MACH_PORT_NULL; | 265 reply->Head.msgh_local_port = MACH_PORT_NULL; |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 ReceiveReplyMessage reply = {}; | 518 ReceiveReplyMessage reply = {}; |
| 519 kern_return_t kr = mach_msg(&reply.Head, | 519 kern_return_t kr = mach_msg(&reply.Head, |
| 520 MACH_RCV_MSG, | 520 MACH_RCV_MSG, |
| 521 0, | 521 0, |
| 522 sizeof(reply), | 522 sizeof(reply), |
| 523 LocalPort(), | 523 LocalPort(), |
| 524 MACH_MSG_TIMEOUT_NONE, | 524 MACH_MSG_TIMEOUT_NONE, |
| 525 MACH_PORT_NULL); | 525 MACH_PORT_NULL); |
| 526 ASSERT_EQ(MACH_MSG_SUCCESS, kr) << MachErrorMessage(kr, "mach_msg"); | 526 ASSERT_EQ(MACH_MSG_SUCCESS, kr) << MachErrorMessage(kr, "mach_msg"); |
| 527 | 527 |
| 528 ASSERT_EQ(static_cast<mach_msg_bits_t>( | 528 ASSERT_EQ(implicit_cast<mach_msg_bits_t>( |
| 529 MACH_MSGH_BITS(0, MACH_MSG_TYPE_MOVE_SEND)), reply.Head.msgh_bits); | 529 MACH_MSGH_BITS(0, MACH_MSG_TYPE_MOVE_SEND)), reply.Head.msgh_bits); |
| 530 ASSERT_EQ(sizeof(ReplyMessage), reply.Head.msgh_size); | 530 ASSERT_EQ(sizeof(ReplyMessage), reply.Head.msgh_size); |
| 531 ASSERT_EQ(kMachPortNull, reply.Head.msgh_remote_port); | 531 ASSERT_EQ(kMachPortNull, reply.Head.msgh_remote_port); |
| 532 ASSERT_EQ(LocalPort(), reply.Head.msgh_local_port); | 532 ASSERT_EQ(LocalPort(), reply.Head.msgh_local_port); |
| 533 ASSERT_EQ(kReplyMessageId, reply.Head.msgh_id); | 533 ASSERT_EQ(kReplyMessageId, reply.Head.msgh_id); |
| 534 ASSERT_EQ(0, memcmp(&reply.NDR, &NDR_record, sizeof(NDR_record))); | 534 ASSERT_EQ(0, memcmp(&reply.NDR, &NDR_record, sizeof(NDR_record))); |
| 535 ASSERT_EQ(options_.server_mig_retcode, reply.RetCode); | 535 ASSERT_EQ(options_.server_mig_retcode, reply.RetCode); |
| 536 ASSERT_EQ(replies_, reply.number); | 536 ASSERT_EQ(replies_, reply.number); |
| 537 ASSERT_EQ(static_cast<mach_msg_trailer_type_t>(MACH_MSG_TRAILER_FORMAT_0), | 537 ASSERT_EQ(implicit_cast<mach_msg_trailer_type_t>(MACH_MSG_TRAILER_FORMAT_0), |
| 538 reply.trailer.msgh_trailer_type); | 538 reply.trailer.msgh_trailer_type); |
| 539 ASSERT_EQ(MACH_MSG_TRAILER_MINIMUM_SIZE, reply.trailer.msgh_trailer_size); | 539 ASSERT_EQ(MACH_MSG_TRAILER_MINIMUM_SIZE, reply.trailer.msgh_trailer_size); |
| 540 | 540 |
| 541 ++replies_; | 541 ++replies_; |
| 542 } | 542 } |
| 543 | 543 |
| 544 // For test types where the child needs to notify the server in the parent | 544 // For test types where the child needs to notify the server in the parent |
| 545 // that the child is ready, this method will send a byte via the POSIX pipe. | 545 // that the child is ready, this method will send a byte via the POSIX pipe. |
| 546 // The parent will be waiting in a read() on this pipe, and will proceed to | 546 // The parent will be waiting in a read() on this pipe, and will proceed to |
| 547 // running MachMessageServer() once it’s received. | 547 // running MachMessageServer() once it’s received. |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 824 TestMachMessageServer::Options options; | 824 TestMachMessageServer::Options options; |
| 825 options.server_options = MACH_RCV_LARGE; | 825 options.server_options = MACH_RCV_LARGE; |
| 826 options.client_send_large = true; | 826 options.client_send_large = true; |
| 827 TestMachMessageServer test_mach_message_server(options); | 827 TestMachMessageServer test_mach_message_server(options); |
| 828 test_mach_message_server.Test(); | 828 test_mach_message_server.Test(); |
| 829 } | 829 } |
| 830 | 830 |
| 831 } // namespace | 831 } // namespace |
| 832 } // namespace test | 832 } // namespace test |
| 833 } // namespace crashpad | 833 } // namespace crashpad |
| OLD | NEW |