OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // Unit test for SyncChannel. | 5 // Unit test for SyncChannel. |
6 | 6 |
7 #include "ipc/ipc_sync_channel.h" | 7 #include "ipc/ipc_sync_channel.h" |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
799 // pumps messages while waiting for a response. | 799 // pumps messages while waiting for a response. |
800 TEST_F(IPCSyncChannelTest, QueuedReply) { | 800 TEST_F(IPCSyncChannelTest, QueuedReply) { |
801 QueuedReply(false); | 801 QueuedReply(false); |
802 QueuedReply(true); | 802 QueuedReply(true); |
803 } | 803 } |
804 | 804 |
805 //----------------------------------------------------------------------------- | 805 //----------------------------------------------------------------------------- |
806 | 806 |
807 namespace { | 807 namespace { |
808 | 808 |
809 void DropAssert(const std::string&) {} | |
810 | |
811 class BadServer : public Worker { | |
812 public: | |
813 explicit BadServer(bool pump_during_send) | |
814 : Worker(Channel::MODE_SERVER, "simpler_server"), | |
815 pump_during_send_(pump_during_send) { } | |
816 void Run() { | |
817 int answer = 0; | |
818 | |
819 SyncMessage* msg = new SyncMessage( | |
820 MSG_ROUTING_CONTROL, SyncChannelTestMsg_Double::ID, | |
821 Message::PRIORITY_NORMAL, NULL); | |
822 if (pump_during_send_) | |
823 msg->EnableMessagePumping(); | |
824 | |
825 // Temporarily ignore asserts so that the assertion in | |
826 // ipc_message_utils doesn't cause termination. | |
827 logging::SetLogAssertHandler(&DropAssert); | |
828 bool result = Send(msg); | |
829 logging::SetLogAssertHandler(NULL); | |
830 DCHECK(!result); | |
831 | |
832 // Need to send another message to get the client to call Done(). | |
833 result = Send(new SyncChannelTestMsg_AnswerToLife(&answer)); | |
834 DCHECK(result); | |
835 DCHECK_EQ(answer, 42); | |
836 | |
837 Done(); | |
838 } | |
839 | |
840 bool pump_during_send_; | |
841 }; | |
842 | |
843 void BadMessage(bool pump_during_send) { | |
844 std::vector<Worker*> workers; | |
845 workers.push_back(new BadServer(pump_during_send)); | |
846 workers.push_back(new SimpleClient()); | |
847 RunTest(workers); | |
848 } | |
849 | |
850 } // namespace | |
851 | |
852 #if defined(OS_WIN) | |
853 // Crashy on windows. See crbug.com/62511. | |
854 #define MAYBE_BadMessage DISABLED_BadMessage | |
855 #else | |
856 #define MAYBE_BadMessage BadMessage | |
857 #endif | |
858 | |
859 // Tests that if a message is not serialized correctly, the Send() will fail. | |
860 TEST_F(IPCSyncChannelTest, MAYBE_BadMessage) { | |
861 BadMessage(false); | |
862 BadMessage(true); | |
863 } | |
864 | |
865 //----------------------------------------------------------------------------- | |
866 | |
867 namespace { | |
868 | |
869 class ChattyClient : public Worker { | 809 class ChattyClient : public Worker { |
870 public: | 810 public: |
871 ChattyClient() : | 811 ChattyClient() : |
872 Worker(Channel::MODE_CLIENT, "chatty_client") { } | 812 Worker(Channel::MODE_CLIENT, "chatty_client") { } |
873 | 813 |
874 void OnAnswer(int* answer) { | 814 void OnAnswer(int* answer) { |
875 // The PostMessage limit is 10k. Send 20% more than that. | 815 // The PostMessage limit is 10k. Send 20% more than that. |
876 const int kMessageLimit = 10000; | 816 const int kMessageLimit = 10000; |
877 const int kMessagesToSend = kMessageLimit * 120 / 100; | 817 const int kMessagesToSend = kMessageLimit * 120 / 100; |
878 for (int i = 0; i < kMessagesToSend; ++i) { | 818 for (int i = 0; i < kMessagesToSend; ++i) { |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1318 std::vector<Worker*> workers; | 1258 std::vector<Worker*> workers; |
1319 workers.push_back(new NonRestrictedDispatchServer); | 1259 workers.push_back(new NonRestrictedDispatchServer); |
1320 workers.push_back(server); | 1260 workers.push_back(server); |
1321 workers.push_back( | 1261 workers.push_back( |
1322 new RestrictedDispatchClient(&sent_ping_event, server, &success)); | 1262 new RestrictedDispatchClient(&sent_ping_event, server, &success)); |
1323 RunTest(workers); | 1263 RunTest(workers); |
1324 EXPECT_EQ(3, success); | 1264 EXPECT_EQ(3, success); |
1325 } | 1265 } |
1326 | 1266 |
1327 } // namespace IPC | 1267 } // namespace IPC |
OLD | NEW |