xref: /aosp_15_r20/external/cronet/ipc/ipc_message_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_message.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <stddef.h>
8*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
9*6777b538SAndroid Build Coastguard Worker #include <string.h>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include <limits>
12*6777b538SAndroid Build Coastguard Worker #include <memory>
13*6777b538SAndroid Build Coastguard Worker #include <utility>
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker #include "base/memory/ptr_util.h"
16*6777b538SAndroid Build Coastguard Worker #include "base/strings/utf_string_conversions.h"
17*6777b538SAndroid Build Coastguard Worker #include "base/values.h"
18*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
19*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_message_utils.h"
20*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker // IPC messages for testing ----------------------------------------------------
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker #define IPC_MESSAGE_IMPL
25*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_message_macros.h"
26*6777b538SAndroid Build Coastguard Worker #include "ipc/ipc_message_start.h"
27*6777b538SAndroid Build Coastguard Worker 
28*6777b538SAndroid Build Coastguard Worker #define IPC_MESSAGE_START TestMsgStart
29*6777b538SAndroid Build Coastguard Worker 
30*6777b538SAndroid Build Coastguard Worker IPC_MESSAGE_CONTROL0(TestMsgClassEmpty)
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker IPC_MESSAGE_CONTROL1(TestMsgClassI, int)
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker IPC_SYNC_MESSAGE_CONTROL1_1(TestMsgClassIS, int, std::string)
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker namespace IPC {
37*6777b538SAndroid Build Coastguard Worker 
TEST(IPCMessageTest,BasicMessageTest)38*6777b538SAndroid Build Coastguard Worker TEST(IPCMessageTest, BasicMessageTest) {
39*6777b538SAndroid Build Coastguard Worker   int v1 = 10;
40*6777b538SAndroid Build Coastguard Worker   std::string v2("foobar");
41*6777b538SAndroid Build Coastguard Worker   std::u16string v3(u"hello world");
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker   IPC::Message m(0, 1, IPC::Message::PRIORITY_NORMAL);
44*6777b538SAndroid Build Coastguard Worker   m.WriteInt(v1);
45*6777b538SAndroid Build Coastguard Worker   m.WriteString(v2);
46*6777b538SAndroid Build Coastguard Worker   m.WriteString16(v3);
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker   base::PickleIterator iter(m);
49*6777b538SAndroid Build Coastguard Worker 
50*6777b538SAndroid Build Coastguard Worker   int vi;
51*6777b538SAndroid Build Coastguard Worker   std::string vs;
52*6777b538SAndroid Build Coastguard Worker   std::u16string vs16;
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(iter.ReadInt(&vi));
55*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(v1, vi);
56*6777b538SAndroid Build Coastguard Worker 
57*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(iter.ReadString(&vs));
58*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(v2, vs);
59*6777b538SAndroid Build Coastguard Worker 
60*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(iter.ReadString16(&vs16));
61*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(v3, vs16);
62*6777b538SAndroid Build Coastguard Worker 
63*6777b538SAndroid Build Coastguard Worker   // should fail
64*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(iter.ReadInt(&vi));
65*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(iter.ReadString(&vs));
66*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(iter.ReadString16(&vs16));
67*6777b538SAndroid Build Coastguard Worker }
68*6777b538SAndroid Build Coastguard Worker 
TEST(IPCMessageTest,Value)69*6777b538SAndroid Build Coastguard Worker TEST(IPCMessageTest, Value) {
70*6777b538SAndroid Build Coastguard Worker   auto expect_value_equals = [](const base::Value& input) {
71*6777b538SAndroid Build Coastguard Worker     IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
72*6777b538SAndroid Build Coastguard Worker     IPC::WriteParam(&msg, input);
73*6777b538SAndroid Build Coastguard Worker 
74*6777b538SAndroid Build Coastguard Worker     base::Value output;
75*6777b538SAndroid Build Coastguard Worker     base::PickleIterator iter(msg);
76*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(IPC::ReadParam(&msg, &iter, &output)) << input;
77*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(input, output);
78*6777b538SAndroid Build Coastguard Worker   };
79*6777b538SAndroid Build Coastguard Worker 
80*6777b538SAndroid Build Coastguard Worker   expect_value_equals(base::Value("foo"));
81*6777b538SAndroid Build Coastguard Worker   expect_value_equals(base::Value(42));
82*6777b538SAndroid Build Coastguard Worker   expect_value_equals(base::Value(0.07));
83*6777b538SAndroid Build Coastguard Worker   expect_value_equals(base::Value(true));
84*6777b538SAndroid Build Coastguard Worker   expect_value_equals(base::Value(base::Value::BlobStorage({'a', 'b', 'c'})));
85*6777b538SAndroid Build Coastguard Worker 
86*6777b538SAndroid Build Coastguard Worker   {
87*6777b538SAndroid Build Coastguard Worker     base::Value::Dict dict;
88*6777b538SAndroid Build Coastguard Worker     dict.Set("key1", 42);
89*6777b538SAndroid Build Coastguard Worker     dict.Set("key2", "hi");
90*6777b538SAndroid Build Coastguard Worker     expect_value_equals(base::Value(std::move(dict)));
91*6777b538SAndroid Build Coastguard Worker   }
92*6777b538SAndroid Build Coastguard Worker   {
93*6777b538SAndroid Build Coastguard Worker     base::Value::List list;
94*6777b538SAndroid Build Coastguard Worker     list.Append(42);
95*6777b538SAndroid Build Coastguard Worker     list.Append("hello");
96*6777b538SAndroid Build Coastguard Worker     expect_value_equals(base::Value(std::move(list)));
97*6777b538SAndroid Build Coastguard Worker   }
98*6777b538SAndroid Build Coastguard Worker 
99*6777b538SAndroid Build Coastguard Worker   // Also test the corrupt case.
100*6777b538SAndroid Build Coastguard Worker   IPC::Message bad_msg(1, 2, IPC::Message::PRIORITY_NORMAL);
101*6777b538SAndroid Build Coastguard Worker   bad_msg.WriteInt(99);
102*6777b538SAndroid Build Coastguard Worker   base::PickleIterator iter(bad_msg);
103*6777b538SAndroid Build Coastguard Worker   base::Value output;
104*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(IPC::ReadParam(&bad_msg, &iter, &output));
105*6777b538SAndroid Build Coastguard Worker }
106*6777b538SAndroid Build Coastguard Worker 
TEST(IPCMessageTest,ValueDict)107*6777b538SAndroid Build Coastguard Worker TEST(IPCMessageTest, ValueDict) {
108*6777b538SAndroid Build Coastguard Worker   base::Value::Dict input;
109*6777b538SAndroid Build Coastguard Worker   input.Set("null", base::Value());
110*6777b538SAndroid Build Coastguard Worker   input.Set("bool", true);
111*6777b538SAndroid Build Coastguard Worker   input.Set("int", 42);
112*6777b538SAndroid Build Coastguard Worker   input.Set("int.with.dot", 43);
113*6777b538SAndroid Build Coastguard Worker 
114*6777b538SAndroid Build Coastguard Worker   base::Value::Dict subdict;
115*6777b538SAndroid Build Coastguard Worker   subdict.Set("str", "forty two");
116*6777b538SAndroid Build Coastguard Worker   subdict.Set("bool", false);
117*6777b538SAndroid Build Coastguard Worker 
118*6777b538SAndroid Build Coastguard Worker   base::Value::List sublist;
119*6777b538SAndroid Build Coastguard Worker   sublist.Append(42.42);
120*6777b538SAndroid Build Coastguard Worker   sublist.Append("forty");
121*6777b538SAndroid Build Coastguard Worker   sublist.Append("two");
122*6777b538SAndroid Build Coastguard Worker   subdict.Set("list", std::move(sublist));
123*6777b538SAndroid Build Coastguard Worker 
124*6777b538SAndroid Build Coastguard Worker   input.Set("dict", std::move(subdict));
125*6777b538SAndroid Build Coastguard Worker 
126*6777b538SAndroid Build Coastguard Worker   IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
127*6777b538SAndroid Build Coastguard Worker   IPC::WriteParam(&msg, input);
128*6777b538SAndroid Build Coastguard Worker 
129*6777b538SAndroid Build Coastguard Worker   base::Value::Dict output;
130*6777b538SAndroid Build Coastguard Worker   base::PickleIterator iter(msg);
131*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(IPC::ReadParam(&msg, &iter, &output));
132*6777b538SAndroid Build Coastguard Worker 
133*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(input, output);
134*6777b538SAndroid Build Coastguard Worker 
135*6777b538SAndroid Build Coastguard Worker   // Also test the corrupt case.
136*6777b538SAndroid Build Coastguard Worker   IPC::Message bad_msg(1, 2, IPC::Message::PRIORITY_NORMAL);
137*6777b538SAndroid Build Coastguard Worker   bad_msg.WriteInt(99);
138*6777b538SAndroid Build Coastguard Worker   iter = base::PickleIterator(bad_msg);
139*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(IPC::ReadParam(&bad_msg, &iter, &output));
140*6777b538SAndroid Build Coastguard Worker }
141*6777b538SAndroid Build Coastguard Worker 
TEST(IPCMessageTest,FindNext)142*6777b538SAndroid Build Coastguard Worker TEST(IPCMessageTest, FindNext) {
143*6777b538SAndroid Build Coastguard Worker   IPC::Message message;
144*6777b538SAndroid Build Coastguard Worker   message.WriteString("Goooooooogle");
145*6777b538SAndroid Build Coastguard Worker   message.WriteInt(111);
146*6777b538SAndroid Build Coastguard Worker 
147*6777b538SAndroid Build Coastguard Worker   std::vector<char> message_data(message.size() + 7);
148*6777b538SAndroid Build Coastguard Worker   memcpy(message_data.data(), message.data(), message.size());
149*6777b538SAndroid Build Coastguard Worker 
150*6777b538SAndroid Build Coastguard Worker   const char* data_start = message_data.data();
151*6777b538SAndroid Build Coastguard Worker   const char* data_end = data_start + message.size();
152*6777b538SAndroid Build Coastguard Worker 
153*6777b538SAndroid Build Coastguard Worker   IPC::Message::NextMessageInfo next;
154*6777b538SAndroid Build Coastguard Worker 
155*6777b538SAndroid Build Coastguard Worker   // Data range contains the entire message plus some extra bytes
156*6777b538SAndroid Build Coastguard Worker   IPC::Message::FindNext(data_start, data_end + 1, &next);
157*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(next.message_found);
158*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(next.message_size, message.size());
159*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(next.pickle_end, data_end);
160*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(next.message_end, data_end);
161*6777b538SAndroid Build Coastguard Worker 
162*6777b538SAndroid Build Coastguard Worker   // Data range exactly contains the entire message
163*6777b538SAndroid Build Coastguard Worker   IPC::Message::FindNext(data_start, data_end, &next);
164*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(next.message_found);
165*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(next.message_size, message.size());
166*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(next.pickle_end, data_end);
167*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(next.message_end, data_end);
168*6777b538SAndroid Build Coastguard Worker 
169*6777b538SAndroid Build Coastguard Worker   // Data range doesn't contain the entire message
170*6777b538SAndroid Build Coastguard Worker   // (but contains the message header)
171*6777b538SAndroid Build Coastguard Worker   IPC::Message::FindNext(data_start, data_end - 1, &next);
172*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(next.message_found);
173*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(next.message_size, message.size());
174*6777b538SAndroid Build Coastguard Worker 
175*6777b538SAndroid Build Coastguard Worker   // Data range doesn't contain the message header
176*6777b538SAndroid Build Coastguard Worker   // (but contains the pickle header)
177*6777b538SAndroid Build Coastguard Worker   IPC::Message::FindNext(data_start,
178*6777b538SAndroid Build Coastguard Worker                          data_start + sizeof(IPC::Message::Header) - 1,
179*6777b538SAndroid Build Coastguard Worker                          &next);
180*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(next.message_found);
181*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(next.message_size, 0u);
182*6777b538SAndroid Build Coastguard Worker 
183*6777b538SAndroid Build Coastguard Worker   // Data range doesn't contain the pickle header
184*6777b538SAndroid Build Coastguard Worker   IPC::Message::FindNext(data_start,
185*6777b538SAndroid Build Coastguard Worker                          data_start + sizeof(base::Pickle::Header) - 1,
186*6777b538SAndroid Build Coastguard Worker                          &next);
187*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(next.message_found);
188*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(next.message_size, 0u);
189*6777b538SAndroid Build Coastguard Worker }
190*6777b538SAndroid Build Coastguard Worker 
TEST(IPCMessageTest,FindNextOverflow)191*6777b538SAndroid Build Coastguard Worker TEST(IPCMessageTest, FindNextOverflow) {
192*6777b538SAndroid Build Coastguard Worker   IPC::Message message;
193*6777b538SAndroid Build Coastguard Worker   message.WriteString("Data");
194*6777b538SAndroid Build Coastguard Worker   message.WriteInt(777);
195*6777b538SAndroid Build Coastguard Worker 
196*6777b538SAndroid Build Coastguard Worker   const char* data_start = reinterpret_cast<const char*>(message.data());
197*6777b538SAndroid Build Coastguard Worker   const char* data_end = data_start + message.size();
198*6777b538SAndroid Build Coastguard Worker 
199*6777b538SAndroid Build Coastguard Worker   IPC::Message::NextMessageInfo next;
200*6777b538SAndroid Build Coastguard Worker 
201*6777b538SAndroid Build Coastguard Worker   // Payload size is negative (defeats 'start + size > end' check)
202*6777b538SAndroid Build Coastguard Worker   message.header()->payload_size = static_cast<uint32_t>(-1);
203*6777b538SAndroid Build Coastguard Worker   IPC::Message::FindNext(data_start, data_end, &next);
204*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(next.message_found);
205*6777b538SAndroid Build Coastguard Worker   if (sizeof(size_t) > sizeof(uint32_t)) {
206*6777b538SAndroid Build Coastguard Worker     // No overflow, just insane message size
207*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(next.message_size,
208*6777b538SAndroid Build Coastguard Worker               message.header()->payload_size + sizeof(IPC::Message::Header));
209*6777b538SAndroid Build Coastguard Worker   } else {
210*6777b538SAndroid Build Coastguard Worker     // Actual overflow, reported as max size_t
211*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(next.message_size, std::numeric_limits<size_t>::max());
212*6777b538SAndroid Build Coastguard Worker   }
213*6777b538SAndroid Build Coastguard Worker 
214*6777b538SAndroid Build Coastguard Worker   // Payload size is max positive integer (defeats size < 0 check, while
215*6777b538SAndroid Build Coastguard Worker   // still potentially causing overflow down the road).
216*6777b538SAndroid Build Coastguard Worker   message.header()->payload_size = std::numeric_limits<int32_t>::max();
217*6777b538SAndroid Build Coastguard Worker   IPC::Message::FindNext(data_start, data_end, &next);
218*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(next.message_found);
219*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(next.message_size,
220*6777b538SAndroid Build Coastguard Worker             message.header()->payload_size + sizeof(IPC::Message::Header));
221*6777b538SAndroid Build Coastguard Worker }
222*6777b538SAndroid Build Coastguard Worker 
223*6777b538SAndroid Build Coastguard Worker namespace {
224*6777b538SAndroid Build Coastguard Worker 
225*6777b538SAndroid Build Coastguard Worker class IPCMessageParameterTest : public testing::Test {
226*6777b538SAndroid Build Coastguard Worker  public:
IPCMessageParameterTest()227*6777b538SAndroid Build Coastguard Worker   IPCMessageParameterTest() : extra_param_("extra_param"), called_(false) {}
228*6777b538SAndroid Build Coastguard Worker 
OnMessageReceived(const IPC::Message & message)229*6777b538SAndroid Build Coastguard Worker   bool OnMessageReceived(const IPC::Message& message) {
230*6777b538SAndroid Build Coastguard Worker     bool handled = true;
231*6777b538SAndroid Build Coastguard Worker     IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(IPCMessageParameterTest, message,
232*6777b538SAndroid Build Coastguard Worker                                      &extra_param_)
233*6777b538SAndroid Build Coastguard Worker       IPC_MESSAGE_HANDLER(TestMsgClassEmpty, OnEmpty)
234*6777b538SAndroid Build Coastguard Worker       IPC_MESSAGE_HANDLER(TestMsgClassI, OnInt)
235*6777b538SAndroid Build Coastguard Worker       //IPC_MESSAGE_HANDLER(TestMsgClassIS, OnSync)
236*6777b538SAndroid Build Coastguard Worker       IPC_MESSAGE_UNHANDLED(handled = false)
237*6777b538SAndroid Build Coastguard Worker     IPC_END_MESSAGE_MAP()
238*6777b538SAndroid Build Coastguard Worker 
239*6777b538SAndroid Build Coastguard Worker     return handled;
240*6777b538SAndroid Build Coastguard Worker   }
241*6777b538SAndroid Build Coastguard Worker 
OnEmpty(std::string * extra_param)242*6777b538SAndroid Build Coastguard Worker   void OnEmpty(std::string* extra_param) {
243*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(extra_param, &extra_param_);
244*6777b538SAndroid Build Coastguard Worker     called_ = true;
245*6777b538SAndroid Build Coastguard Worker   }
246*6777b538SAndroid Build Coastguard Worker 
OnInt(std::string * extra_param,int foo)247*6777b538SAndroid Build Coastguard Worker   void OnInt(std::string* extra_param, int foo) {
248*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(extra_param, &extra_param_);
249*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(foo, 42);
250*6777b538SAndroid Build Coastguard Worker     called_ = true;
251*6777b538SAndroid Build Coastguard Worker   }
252*6777b538SAndroid Build Coastguard Worker 
253*6777b538SAndroid Build Coastguard Worker   /* TODO: handle sync IPCs
254*6777b538SAndroid Build Coastguard Worker     void OnSync(std::string* extra_param, int foo, std::string* out) {
255*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(extra_param, &extra_param_);
256*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(foo, 42);
257*6777b538SAndroid Build Coastguard Worker     called_ = true;
258*6777b538SAndroid Build Coastguard Worker     *out = std::string("out");
259*6777b538SAndroid Build Coastguard Worker   }
260*6777b538SAndroid Build Coastguard Worker 
261*6777b538SAndroid Build Coastguard Worker   bool Send(IPC::Message* reply) {
262*6777b538SAndroid Build Coastguard Worker     delete reply;
263*6777b538SAndroid Build Coastguard Worker     return true;
264*6777b538SAndroid Build Coastguard Worker   }*/
265*6777b538SAndroid Build Coastguard Worker 
266*6777b538SAndroid Build Coastguard Worker   std::string extra_param_;
267*6777b538SAndroid Build Coastguard Worker   bool called_;
268*6777b538SAndroid Build Coastguard Worker };
269*6777b538SAndroid Build Coastguard Worker 
270*6777b538SAndroid Build Coastguard Worker }  // namespace
271*6777b538SAndroid Build Coastguard Worker 
TEST_F(IPCMessageParameterTest,EmptyDispatcherWithParam)272*6777b538SAndroid Build Coastguard Worker TEST_F(IPCMessageParameterTest, EmptyDispatcherWithParam) {
273*6777b538SAndroid Build Coastguard Worker   TestMsgClassEmpty message;
274*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(OnMessageReceived(message));
275*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(called_);
276*6777b538SAndroid Build Coastguard Worker }
277*6777b538SAndroid Build Coastguard Worker 
278*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_ANDROID)
279*6777b538SAndroid Build Coastguard Worker #define MAYBE_OneIntegerWithParam DISABLED_OneIntegerWithParam
280*6777b538SAndroid Build Coastguard Worker #else
281*6777b538SAndroid Build Coastguard Worker #define MAYBE_OneIntegerWithParam OneIntegerWithParam
282*6777b538SAndroid Build Coastguard Worker #endif
TEST_F(IPCMessageParameterTest,MAYBE_OneIntegerWithParam)283*6777b538SAndroid Build Coastguard Worker TEST_F(IPCMessageParameterTest, MAYBE_OneIntegerWithParam) {
284*6777b538SAndroid Build Coastguard Worker   TestMsgClassI message(42);
285*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(OnMessageReceived(message));
286*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(called_);
287*6777b538SAndroid Build Coastguard Worker }
288*6777b538SAndroid Build Coastguard Worker 
289*6777b538SAndroid Build Coastguard Worker /* TODO: handle sync IPCs
290*6777b538SAndroid Build Coastguard Worker TEST_F(IPCMessageParameterTest, Sync) {
291*6777b538SAndroid Build Coastguard Worker   std::string output;
292*6777b538SAndroid Build Coastguard Worker   TestMsgClassIS message(42, &output);
293*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(OnMessageReceived(message));
294*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(called_);
295*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(output, std::string("out"));
296*6777b538SAndroid Build Coastguard Worker }*/
297*6777b538SAndroid Build Coastguard Worker 
298*6777b538SAndroid Build Coastguard Worker }  // namespace IPC
299