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

Side by Side Diff: mojo/edk/test/mojo_test_base.cc

Issue 1585493002: [mojo] Ports EDK (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months 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
OLDNEW
(Empty)
1 // Copyright 2016 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 "mojo/edk/test/mojo_test_base.h"
6
7 #include "base/message_loop/message_loop.h"
8 #include "base/run_loop.h"
9 #include "mojo/edk/embedder/embedder.h"
10 #include "mojo/edk/system/handle_signals_state.h"
11 #include "mojo/public/c/system/buffer.h"
12 #include "mojo/public/c/system/functions.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace mojo {
16 namespace edk {
17 namespace test {
18
19 MojoTestBase::MojoTestBase() {
20 }
21
22 MojoTestBase::~MojoTestBase() {}
23
24 MojoTestBase::ClientController& MojoTestBase::StartClient(
25 const std::string& client_name,
26 const HandlerCallback& callback) {
27 clients_.push_back(
28 make_scoped_ptr(new ClientController(client_name, this, callback)));
29 return *clients_.back();
30 }
31
32 MojoTestBase::ClientController::ClientController(
33 const std::string& client_name,
34 MojoTestBase* test,
35 const HandlerCallback& callback)
36 : test_(test) {
37 helper_.StartChild(client_name, callback);
38 }
39
40 MojoTestBase::ClientController::~ClientController() {
41 CHECK(was_shutdown_)
42 << "Test clients should be waited on explicitly with WaitForShutdown().";
43 }
44
45 int MojoTestBase::ClientController::WaitForShutdown() {
46 was_shutdown_ = true;
47 return helper_.WaitForChildShutdown();
48 }
49
50 // static
51 void MojoTestBase::CloseHandle(MojoHandle h) {
52 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h));
53 }
54
55 // static
56 void MojoTestBase::CreateMessagePipe(MojoHandle *p0, MojoHandle* p1) {
57 MojoCreateMessagePipe(nullptr, p0, p1);
58 CHECK_NE(*p0, MOJO_HANDLE_INVALID);
59 CHECK_NE(*p1, MOJO_HANDLE_INVALID);
60 }
61
62 // static
63 void MojoTestBase::WriteMessageWithHandles(MojoHandle mp,
64 const std::string& message,
65 const MojoHandle *handles,
66 uint32_t num_handles) {
67 CHECK_EQ(MojoWriteMessage(mp, message.data(),
68 static_cast<uint32_t>(message.size()),
69 handles, num_handles, MOJO_WRITE_MESSAGE_FLAG_NONE),
70 MOJO_RESULT_OK);
71 }
72
73 // static
74 void MojoTestBase::WriteMessage(MojoHandle mp, const std::string& message) {
75 WriteMessageWithHandles(mp, message, nullptr, 0);
76 }
77
78 // static
79 std::string MojoTestBase::ReadMessageWithHandles(
80 MojoHandle mp,
81 MojoHandle* handles,
82 uint32_t expected_num_handles) {
83 CHECK_EQ(MojoWait(mp, MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE,
84 nullptr),
85 MOJO_RESULT_OK);
86
87 uint32_t message_size = 0;
88 uint32_t num_handles = 0;
89 CHECK_EQ(MojoReadMessage(mp, nullptr, &message_size, nullptr, &num_handles,
90 MOJO_READ_MESSAGE_FLAG_NONE),
91 MOJO_RESULT_RESOURCE_EXHAUSTED);
92 CHECK_EQ(expected_num_handles, num_handles);
93
94 std::string message(message_size, 'x');
95 CHECK_EQ(MojoReadMessage(mp, &message[0], &message_size, handles,
96 &num_handles, MOJO_READ_MESSAGE_FLAG_NONE),
97 MOJO_RESULT_OK);
98 CHECK_EQ(message_size, message.size());
99 CHECK_EQ(num_handles, expected_num_handles);
100
101 return message;
102 }
103
104 // static
105 std::string MojoTestBase::ReadMessageWithOptionalHandle(MojoHandle mp,
106 MojoHandle* handle) {
107 CHECK_EQ(MojoWait(mp, MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE,
108 nullptr),
109 MOJO_RESULT_OK);
110
111 uint32_t message_size = 0;
112 uint32_t num_handles = 0;
113 CHECK_EQ(MojoReadMessage(mp, nullptr, &message_size, nullptr, &num_handles,
114 MOJO_READ_MESSAGE_FLAG_NONE),
115 MOJO_RESULT_RESOURCE_EXHAUSTED);
116 CHECK(num_handles == 0 || num_handles == 1);
117
118 CHECK(handle);
119
120 std::string message(message_size, 'x');
121 CHECK_EQ(MojoReadMessage(mp, &message[0], &message_size, handle,
122 &num_handles, MOJO_READ_MESSAGE_FLAG_NONE),
123 MOJO_RESULT_OK);
124 CHECK_EQ(message_size, message.size());
125 CHECK(num_handles == 0 || num_handles == 1);
126
127 if (num_handles)
128 CHECK_NE(*handle, MOJO_HANDLE_INVALID);
129 else
130 *handle = MOJO_HANDLE_INVALID;
131
132 return message;
133 }
134
135 // static
136 std::string MojoTestBase::ReadMessage(MojoHandle mp) {
137 return ReadMessageWithHandles(mp, nullptr, 0);
138 }
139
140 // static
141 void MojoTestBase::ReadMessage(MojoHandle mp,
142 char* data,
143 size_t num_bytes) {
144 CHECK_EQ(MojoWait(mp, MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE,
145 nullptr),
146 MOJO_RESULT_OK);
147
148 uint32_t message_size = 0;
149 uint32_t num_handles = 0;
150 CHECK_EQ(MojoReadMessage(mp, nullptr, &message_size, nullptr, &num_handles,
151 MOJO_READ_MESSAGE_FLAG_NONE),
152 MOJO_RESULT_RESOURCE_EXHAUSTED);
153 CHECK_EQ(num_handles, 0u);
154 CHECK_EQ(message_size, num_bytes);
155
156 CHECK_EQ(MojoReadMessage(mp, data, &message_size, nullptr, &num_handles,
157 MOJO_READ_MESSAGE_FLAG_NONE),
158 MOJO_RESULT_OK);
159 CHECK_EQ(num_handles, 0u);
160 CHECK_EQ(message_size, num_bytes);
161 }
162
163 // static
164 void MojoTestBase::VerifyTransmission(MojoHandle source,
165 MojoHandle dest,
166 const std::string& message) {
167 WriteMessage(source, message);
168
169 // We don't use EXPECT_EQ; failures on really long messages make life hard.
170 EXPECT_TRUE(message == ReadMessage(dest));
171 }
172
173 // static
174 void MojoTestBase::VerifyEcho(MojoHandle mp,
175 const std::string& message) {
176 VerifyTransmission(mp, mp, message);
177 }
178
179 // static
180 MojoHandle MojoTestBase::CreateBuffer(uint64_t size) {
181 MojoHandle h;
182 EXPECT_EQ(MojoCreateSharedBuffer(nullptr, size, &h), MOJO_RESULT_OK);
183 return h;
184 }
185
186 // static
187 MojoHandle MojoTestBase::DuplicateBuffer(MojoHandle h) {
188 MojoHandle new_handle;
189 EXPECT_EQ(MOJO_RESULT_OK,
190 MojoDuplicateBufferHandle(h, nullptr, &new_handle));
191 return new_handle;
192 }
193
194 // static
195 void MojoTestBase::WriteToBuffer(MojoHandle h,
196 size_t offset,
197 const base::StringPiece& s) {
198 char* data;
199 EXPECT_EQ(MOJO_RESULT_OK,
200 MojoMapBuffer(h, offset, s.size(), reinterpret_cast<void**>(&data),
201 MOJO_MAP_BUFFER_FLAG_NONE));
202 memcpy(data, s.data(), s.size());
203 EXPECT_EQ(MOJO_RESULT_OK, MojoUnmapBuffer(static_cast<void*>(data)));
204 }
205
206 // static
207 void MojoTestBase::ExpectBufferContents(MojoHandle h,
208 size_t offset,
209 const base::StringPiece& s) {
210 char* data;
211 EXPECT_EQ(MOJO_RESULT_OK,
212 MojoMapBuffer(h, offset, s.size(), reinterpret_cast<void**>(&data),
213 MOJO_MAP_BUFFER_FLAG_NONE));
214 EXPECT_EQ(s, base::StringPiece(data, s.size()));
215 EXPECT_EQ(MOJO_RESULT_OK, MojoUnmapBuffer(static_cast<void*>(data)));
216 }
217
218 } // namespace test
219 } // namespace edk
220 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698