| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "dbus/message.h" | 5 #include "dbus/message.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/eintr_wrapper.h" | 8 #include "base/eintr_wrapper.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 if (!dbus::kDBusTypeUnixFdIsSupported) { | 100 if (!dbus::kDBusTypeUnixFdIsSupported) { |
| 101 LOG(WARNING) << "FD passing is not supported"; | 101 LOG(WARNING) << "FD passing is not supported"; |
| 102 return; | 102 return; |
| 103 } | 103 } |
| 104 | 104 |
| 105 scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); | 105 scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); |
| 106 dbus::MessageWriter writer(message.get()); | 106 dbus::MessageWriter writer(message.get()); |
| 107 | 107 |
| 108 // Append stdout. | 108 // Append stdout. |
| 109 dbus::FileDescriptor temp(1); | 109 dbus::FileDescriptor temp(1); |
| 110 // Descriptor should not be valid until checked. |
| 111 ASSERT_FALSE(temp.is_valid()); |
| 112 // NB: thread IO requirements not relevant for unit tests. |
| 113 temp.CheckValidity(); |
| 114 ASSERT_TRUE(temp.is_valid()); |
| 110 writer.AppendFileDescriptor(temp); | 115 writer.AppendFileDescriptor(temp); |
| 111 | 116 |
| 112 dbus::FileDescriptor fd_value; | 117 dbus::FileDescriptor fd_value; |
| 113 | 118 |
| 114 dbus::MessageReader reader(message.get()); | 119 dbus::MessageReader reader(message.get()); |
| 115 ASSERT_TRUE(reader.HasMoreData()); | 120 ASSERT_TRUE(reader.HasMoreData()); |
| 116 ASSERT_TRUE(reader.PopFileDescriptor(&fd_value)); | 121 ASSERT_TRUE(reader.PopFileDescriptor(&fd_value)); |
| 117 ASSERT_FALSE(reader.HasMoreData()); | 122 ASSERT_FALSE(reader.HasMoreData()); |
| 123 // Descriptor is not valid until explicitly checked. |
| 124 ASSERT_FALSE(fd_value.is_valid()); |
| 125 fd_value.CheckValidity(); |
| 126 ASSERT_TRUE(fd_value.is_valid()); |
| 118 | 127 |
| 119 // Stdout should be returned but we cannot check the descriptor | 128 // Stdout should be returned but we cannot check the descriptor |
| 120 // value because stdout will be dup'd. Instead check st_rdev | 129 // value because stdout will be dup'd. Instead check st_rdev |
| 121 // which should be identical. | 130 // which should be identical. |
| 122 struct stat sb_stdout; | 131 struct stat sb_stdout; |
| 123 int status_stdout = HANDLE_EINTR(fstat(1, &sb_stdout)); | 132 int status_stdout = HANDLE_EINTR(fstat(1, &sb_stdout)); |
| 124 ASSERT_TRUE(status_stdout >= 0); | 133 ASSERT_TRUE(status_stdout >= 0); |
| 125 struct stat sb_fd; | 134 struct stat sb_fd; |
| 126 int status_fd = HANDLE_EINTR(fstat(fd_value.value(), &sb_fd)); | 135 int status_fd = HANDLE_EINTR(fstat(fd_value.value(), &sb_fd)); |
| 127 ASSERT_TRUE(status_fd >= 0); | 136 ASSERT_TRUE(status_fd >= 0); |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 | 576 |
| 568 EXPECT_EQ("org.chromium.destination", message->GetDestination()); | 577 EXPECT_EQ("org.chromium.destination", message->GetDestination()); |
| 569 EXPECT_EQ(dbus::ObjectPath("/org/chromium/path"), message->GetPath()); | 578 EXPECT_EQ(dbus::ObjectPath("/org/chromium/path"), message->GetPath()); |
| 570 EXPECT_EQ("org.chromium.interface", message->GetInterface()); | 579 EXPECT_EQ("org.chromium.interface", message->GetInterface()); |
| 571 EXPECT_EQ("member", message->GetMember()); | 580 EXPECT_EQ("member", message->GetMember()); |
| 572 EXPECT_EQ("org.chromium.error", message->GetErrorName()); | 581 EXPECT_EQ("org.chromium.error", message->GetErrorName()); |
| 573 EXPECT_EQ(":1.2", message->GetSender()); | 582 EXPECT_EQ(":1.2", message->GetSender()); |
| 574 EXPECT_EQ(123U, message->GetSerial()); | 583 EXPECT_EQ(123U, message->GetSerial()); |
| 575 EXPECT_EQ(456U, message->GetReplySerial()); | 584 EXPECT_EQ(456U, message->GetReplySerial()); |
| 576 } | 585 } |
| OLD | NEW |