blob: 611bfe835a7f09dcf594c40f15a9469ede89d97b [file] [log] [blame]
morrita@chromium.org15996aa2014-08-05 08:44:17 +09001// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ipc/ipc_test_channel_listener.h"
6
Gabriel Charette274bec82017-07-26 21:36:23 +09007#include "base/run_loop.h"
morrita@chromium.org15996aa2014-08-05 08:44:17 +09008#include "ipc/ipc_message.h"
9#include "ipc/ipc_sender.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12namespace IPC {
13
14// static
15void TestChannelListener::SendOneMessage(IPC::Sender* sender,
16 const char* text) {
17 static int message_index = 0;
18
19 IPC::Message* message = new IPC::Message(0,
20 2,
21 IPC::Message::PRIORITY_NORMAL);
22 message->WriteInt(message_index++);
23 message->WriteString(std::string(text));
24
25 // Make sure we can handle large messages.
26 char junk[kLongMessageStringNumBytes];
27 memset(junk, 'a', sizeof(junk)-1);
28 junk[sizeof(junk)-1] = 0;
29 message->WriteString(std::string(junk));
30
31 sender->Send(message);
32}
33
34
35bool TestChannelListener::OnMessageReceived(const IPC::Message& message) {
brettwf3146202015-06-03 13:29:25 +090036 base::PickleIterator iter(message);
morrita@chromium.org15996aa2014-08-05 08:44:17 +090037
38 int ignored;
39 EXPECT_TRUE(iter.ReadInt(&ignored));
40 std::string data;
41 EXPECT_TRUE(iter.ReadString(&data));
42 std::string big_string;
43 EXPECT_TRUE(iter.ReadString(&big_string));
44 EXPECT_EQ(kLongMessageStringNumBytes - 1, big_string.length());
45
46 SendNextMessage();
47 return true;
48}
49
50void TestChannelListener::OnChannelError() {
51 // There is a race when closing the channel so the last message may be lost.
52 EXPECT_LE(messages_left_, 1);
Gabriel Charette274bec82017-07-26 21:36:23 +090053 base::RunLoop::QuitCurrentWhenIdleDeprecated();
morrita@chromium.org15996aa2014-08-05 08:44:17 +090054}
55
56void TestChannelListener::SendNextMessage() {
57 if (--messages_left_ <= 0)
Gabriel Charette274bec82017-07-26 21:36:23 +090058 base::RunLoop::QuitCurrentWhenIdleDeprecated();
morrita@chromium.org15996aa2014-08-05 08:44:17 +090059 else
60 SendOneMessage(sender_, "Foo");
61}
62
63}