Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: mojo/public/tests/bindings_connector_unittest.cc

Issue 54743003: Mojo: bindings connector (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove errant line from mojo.gyp Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/public/bindings/lib/message_queue.cc ('k') | mojo/public/tests/simple_bindings_support.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 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 <stdlib.h>
6 #include <string.h>
7
8 #include "mojo/public/bindings/lib/bindings_support.h"
9 #include "mojo/public/bindings/lib/connector.h"
10 #include "mojo/public/bindings/lib/message_queue.h"
11 #include "mojo/public/tests/simple_bindings_support.h"
12 #include "mojo/public/tests/test_support.h"
13
14 namespace mojo {
15 namespace test {
16
17 class MessageAccumulator : public MessageReceiver {
18 public:
19 MessageAccumulator() {
20 }
21
22 virtual bool Accept(Message* message) MOJO_OVERRIDE {
23 queue_.Push(message);
24 return true;
25 }
26
27 bool IsEmpty() const {
28 return queue_.IsEmpty();
29 }
30
31 void Pop(Message* message) {
32 queue_.Pop(message);
33 }
34
35 private:
36 MessageQueue queue_;
37 };
38
39 class BindingsConnectorTest : public TestBase {
40 public:
41 BindingsConnectorTest()
42 : handle0_(kInvalidHandle),
43 handle1_(kInvalidHandle) {
44 }
45
46 virtual void SetUp() OVERRIDE {
47 CreateMessagePipe(&handle0_, &handle1_);
48 }
49
50 virtual void TearDown() OVERRIDE {
51 Close(handle0_);
52 Close(handle1_);
53 }
54
55 void AllocMessage(const char* text, Message* message) {
56 size_t payload_size = strlen(text) + 1; // Plus null terminator.
57 size_t num_bytes = sizeof(MessageHeader) + payload_size;
58 message->data = static_cast<MessageData*>(malloc(num_bytes));
59 message->data->header.num_bytes = num_bytes;
60 message->data->header.name = 1;
61 memcpy(message->data->payload, text, payload_size);
62 }
63
64 void PumpMessages() {
65 bindings_support_.Process();
66 }
67
68 protected:
69 Handle handle0_;
70 Handle handle1_;
71
72 private:
73 SimpleBindingsSupport bindings_support_;
74 };
75
76 TEST_F(BindingsConnectorTest, Basic) {
77 Connector connector0(handle0_);
78 Connector connector1(handle1_);
79
80 const char kText[] = "hello world";
81
82 Message message;
83 AllocMessage(kText, &message);
84
85 connector0.Accept(&message);
86
87 MessageAccumulator accumulator;
88 connector1.SetIncomingReceiver(&accumulator);
89
90 PumpMessages();
91
92 ASSERT_FALSE(accumulator.IsEmpty());
93
94 Message message_received;
95 accumulator.Pop(&message_received);
96
97 EXPECT_EQ(std::string(kText),
98 std::string(
99 reinterpret_cast<char*>(message_received.data->payload)));
100 }
101
102 TEST_F(BindingsConnectorTest, Basic_EarlyIncomingReceiver) {
103 Connector connector0(handle0_);
104 Connector connector1(handle1_);
105
106 MessageAccumulator accumulator;
107 connector1.SetIncomingReceiver(&accumulator);
108
109 const char kText[] = "hello world";
110
111 Message message;
112 AllocMessage(kText, &message);
113
114 connector0.Accept(&message);
115
116 PumpMessages();
117
118 ASSERT_FALSE(accumulator.IsEmpty());
119
120 Message message_received;
121 accumulator.Pop(&message_received);
122
123 EXPECT_EQ(std::string(kText),
124 std::string(
125 reinterpret_cast<char*>(message_received.data->payload)));
126 }
127
128 TEST_F(BindingsConnectorTest, Basic_TwoMessages) {
129 Connector connector0(handle0_);
130 Connector connector1(handle1_);
131
132 const char* kText[] = { "hello", "world" };
133
134 for (size_t i = 0; i < arraysize(kText); ++i) {
135 Message message;
136 AllocMessage(kText[i], &message);
137
138 connector0.Accept(&message);
139 }
140
141 MessageAccumulator accumulator;
142 connector1.SetIncomingReceiver(&accumulator);
143
144 PumpMessages();
145
146 for (size_t i = 0; i < arraysize(kText); ++i) {
147 ASSERT_FALSE(accumulator.IsEmpty());
148
149 Message message_received;
150 accumulator.Pop(&message_received);
151
152 EXPECT_EQ(std::string(kText[i]),
153 std::string(
154 reinterpret_cast<char*>(message_received.data->payload)));
155 }
156 }
157
158 TEST_F(BindingsConnectorTest, WriteToClosedPipe) {
159 Connector connector0(handle0_);
160
161 const char kText[] = "hello world";
162
163 Message message;
164 AllocMessage(kText, &message);
165
166 Close(handle0_); // Close the handle before writing to it.
167
168 bool ok = connector0.Accept(&message);
169 EXPECT_FALSE(ok);
170
171 EXPECT_TRUE(connector0.EncounteredError());
172 }
173
174 } // namespace test
175 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/bindings/lib/message_queue.cc ('k') | mojo/public/tests/simple_bindings_support.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698