OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 // This file tests the C++ Mojo system core wrappers. | 5 // This file tests the C++ Mojo system core wrappers. |
6 // TODO(vtl): Maybe rename "CoreCppTest" -> "CoreTest" if/when this gets | 6 // TODO(vtl): Maybe rename "CoreCppTest" -> "CoreTest" if/when this gets |
7 // compiled into a different binary from the C API tests. | 7 // compiled into a different binary from the C API tests. |
8 | 8 |
9 #include "mojo/public/cpp/system/core.h" | 9 #include "mojo/public/cpp/system/core.h" |
10 | 10 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 | 92 |
93 EXPECT_EQ(kInvalidHandleValue, h.get().value()); | 93 EXPECT_EQ(kInvalidHandleValue, h.get().value()); |
94 | 94 |
95 // This should be a no-op. | 95 // This should be a no-op. |
96 Close(h.Pass()); | 96 Close(h.Pass()); |
97 | 97 |
98 // It should still be invalid. | 98 // It should still be invalid. |
99 EXPECT_EQ(kInvalidHandleValue, h.get().value()); | 99 EXPECT_EQ(kInvalidHandleValue, h.get().value()); |
100 | 100 |
101 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 101 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
102 Wait(h.get(), MOJO_WAIT_FLAG_EVERYTHING, 1000000)); | 102 Wait(h.get(), ~MOJO_HANDLE_SIGNAL_NONE, 1000000)); |
103 | 103 |
104 std::vector<Handle> wh; | 104 std::vector<Handle> wh; |
105 wh.push_back(h.get()); | 105 wh.push_back(h.get()); |
106 std::vector<MojoHandleSignals> sigs; | 106 std::vector<MojoHandleSignals> sigs; |
107 sigs.push_back(MOJO_WAIT_FLAG_EVERYTHING); | 107 sigs.push_back(~MOJO_HANDLE_SIGNAL_NONE); |
108 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 108 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
109 WaitMany(wh, sigs, MOJO_DEADLINE_INDEFINITE)); | 109 WaitMany(wh, sigs, MOJO_DEADLINE_INDEFINITE)); |
110 } | 110 } |
111 | 111 |
112 // |MakeScopedHandle| (just compilation tests): | 112 // |MakeScopedHandle| (just compilation tests): |
113 { | 113 { |
114 EXPECT_FALSE(MakeScopedHandle(Handle()).is_valid()); | 114 EXPECT_FALSE(MakeScopedHandle(Handle()).is_valid()); |
115 EXPECT_FALSE(MakeScopedHandle(MessagePipeHandle()).is_valid()); | 115 EXPECT_FALSE(MakeScopedHandle(MessagePipeHandle()).is_valid()); |
116 EXPECT_FALSE(MakeScopedHandle(DataPipeProducerHandle()).is_valid()); | 116 EXPECT_FALSE(MakeScopedHandle(DataPipeProducerHandle()).is_valid()); |
117 EXPECT_FALSE(MakeScopedHandle(DataPipeConsumerHandle()).is_valid()); | 117 EXPECT_FALSE(MakeScopedHandle(DataPipeConsumerHandle()).is_valid()); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 CreateMessagePipe(NULL, &h0, &h1); | 156 CreateMessagePipe(NULL, &h0, &h1); |
157 EXPECT_TRUE(h0.get().is_valid()); | 157 EXPECT_TRUE(h0.get().is_valid()); |
158 EXPECT_TRUE(h1.get().is_valid()); | 158 EXPECT_TRUE(h1.get().is_valid()); |
159 EXPECT_NE(h0.get().value(), h1.get().value()); | 159 EXPECT_NE(h0.get().value(), h1.get().value()); |
160 // Save the handle values, so we can check that things got closed | 160 // Save the handle values, so we can check that things got closed |
161 // correctly. | 161 // correctly. |
162 hv0 = h0.get().value(); | 162 hv0 = h0.get().value(); |
163 MojoHandle hv1 = h1.get().value(); | 163 MojoHandle hv1 = h1.get().value(); |
164 | 164 |
165 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, | 165 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, |
166 Wait(h0.get(), MOJO_WAIT_FLAG_READABLE, 0)); | 166 Wait(h0.get(), MOJO_HANDLE_SIGNAL_READABLE, 0)); |
167 std::vector<Handle> wh; | 167 std::vector<Handle> wh; |
168 wh.push_back(h0.get()); | 168 wh.push_back(h0.get()); |
169 wh.push_back(h1.get()); | 169 wh.push_back(h1.get()); |
170 std::vector<MojoHandleSignals> sigs; | 170 std::vector<MojoHandleSignals> sigs; |
171 sigs.push_back(MOJO_WAIT_FLAG_READABLE); | 171 sigs.push_back(MOJO_HANDLE_SIGNAL_READABLE); |
172 sigs.push_back(MOJO_WAIT_FLAG_WRITABLE); | 172 sigs.push_back(MOJO_HANDLE_SIGNAL_WRITABLE); |
173 EXPECT_EQ(1, WaitMany(wh, sigs, 1000)); | 173 EXPECT_EQ(1, WaitMany(wh, sigs, 1000)); |
174 | 174 |
175 // Test closing |h1| explicitly. | 175 // Test closing |h1| explicitly. |
176 Close(h1.Pass()); | 176 Close(h1.Pass()); |
177 EXPECT_FALSE(h1.get().is_valid()); | 177 EXPECT_FALSE(h1.get().is_valid()); |
178 | 178 |
179 // Make sure |h1| is closed. | 179 // Make sure |h1| is closed. |
180 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 180 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
181 MojoWait(hv1, MOJO_WAIT_FLAG_EVERYTHING, | 181 MojoWait(hv1, ~MOJO_HANDLE_SIGNAL_NONE, |
182 MOJO_DEADLINE_INDEFINITE)); | 182 MOJO_DEADLINE_INDEFINITE)); |
183 | 183 |
184 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 184 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
185 Wait(h0.get(), MOJO_WAIT_FLAG_READABLE, | 185 Wait(h0.get(), MOJO_HANDLE_SIGNAL_READABLE, |
186 MOJO_DEADLINE_INDEFINITE)); | 186 MOJO_DEADLINE_INDEFINITE)); |
187 } | 187 } |
188 // |hv0| should have been closed when |h0| went out of scope, so this close | 188 // |hv0| should have been closed when |h0| went out of scope, so this close |
189 // should fail. | 189 // should fail. |
190 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(hv0)); | 190 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(hv0)); |
191 | 191 |
192 // Actually test writing/reading messages. | 192 // Actually test writing/reading messages. |
193 { | 193 { |
194 ScopedMessagePipeHandle h0; | 194 ScopedMessagePipeHandle h0; |
195 ScopedMessagePipeHandle h1; | 195 ScopedMessagePipeHandle h1; |
196 CreateMessagePipe(NULL, &h0, &h1); | 196 CreateMessagePipe(NULL, &h0, &h1); |
197 | 197 |
198 const char kHello[] = "hello"; | 198 const char kHello[] = "hello"; |
199 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); | 199 const uint32_t kHelloSize = static_cast<uint32_t>(sizeof(kHello)); |
200 EXPECT_EQ(MOJO_RESULT_OK, | 200 EXPECT_EQ(MOJO_RESULT_OK, |
201 WriteMessageRaw(h0.get(), | 201 WriteMessageRaw(h0.get(), |
202 kHello, kHelloSize, | 202 kHello, kHelloSize, |
203 NULL, 0, | 203 NULL, 0, |
204 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 204 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
205 EXPECT_EQ(MOJO_RESULT_OK, | 205 EXPECT_EQ(MOJO_RESULT_OK, |
206 Wait(h1.get(), MOJO_WAIT_FLAG_READABLE, | 206 Wait(h1.get(), MOJO_HANDLE_SIGNAL_READABLE, |
207 MOJO_DEADLINE_INDEFINITE)); | 207 MOJO_DEADLINE_INDEFINITE)); |
208 char buffer[10] = { 0 }; | 208 char buffer[10] = { 0 }; |
209 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 209 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
210 EXPECT_EQ(MOJO_RESULT_OK, | 210 EXPECT_EQ(MOJO_RESULT_OK, |
211 ReadMessageRaw(h1.get(), | 211 ReadMessageRaw(h1.get(), |
212 buffer, &buffer_size, | 212 buffer, &buffer_size, |
213 NULL, NULL, | 213 NULL, NULL, |
214 MOJO_READ_MESSAGE_FLAG_NONE)); | 214 MOJO_READ_MESSAGE_FLAG_NONE)); |
215 EXPECT_EQ(kHelloSize, buffer_size); | 215 EXPECT_EQ(kHelloSize, buffer_size); |
216 EXPECT_STREQ(kHello, buffer); | 216 EXPECT_STREQ(kHello, buffer); |
(...skipping 21 matching lines...) Expand all Loading... |
238 EXPECT_EQ(MOJO_RESULT_OK, | 238 EXPECT_EQ(MOJO_RESULT_OK, |
239 WriteMessageRaw(h1.get(), | 239 WriteMessageRaw(h1.get(), |
240 kHello, kHelloSize, | 240 kHello, kHelloSize, |
241 handles, handles_count, | 241 handles, handles_count, |
242 MOJO_WRITE_MESSAGE_FLAG_NONE)); | 242 MOJO_WRITE_MESSAGE_FLAG_NONE)); |
243 // |handles[0]| should actually be invalid now. | 243 // |handles[0]| should actually be invalid now. |
244 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(handles[0])); | 244 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(handles[0])); |
245 | 245 |
246 // Read "hello" and the sent handle. | 246 // Read "hello" and the sent handle. |
247 EXPECT_EQ(MOJO_RESULT_OK, | 247 EXPECT_EQ(MOJO_RESULT_OK, |
248 Wait(h0.get(), MOJO_WAIT_FLAG_READABLE, | 248 Wait(h0.get(), MOJO_HANDLE_SIGNAL_READABLE, |
249 MOJO_DEADLINE_INDEFINITE)); | 249 MOJO_DEADLINE_INDEFINITE)); |
250 memset(buffer, 0, sizeof(buffer)); | 250 memset(buffer, 0, sizeof(buffer)); |
251 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 251 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
252 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) | 252 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) |
253 handles[i] = kInvalidHandleValue; | 253 handles[i] = kInvalidHandleValue; |
254 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); | 254 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); |
255 EXPECT_EQ(MOJO_RESULT_OK, | 255 EXPECT_EQ(MOJO_RESULT_OK, |
256 ReadMessageRaw(h0.get(), | 256 ReadMessageRaw(h0.get(), |
257 buffer, &buffer_size, | 257 buffer, &buffer_size, |
258 handles, &handles_count, | 258 handles, &handles_count, |
259 MOJO_READ_MESSAGE_FLAG_NONE)); | 259 MOJO_READ_MESSAGE_FLAG_NONE)); |
260 EXPECT_EQ(kHelloSize, buffer_size); | 260 EXPECT_EQ(kHelloSize, buffer_size); |
261 EXPECT_STREQ(kHello, buffer); | 261 EXPECT_STREQ(kHello, buffer); |
262 EXPECT_EQ(1u, handles_count); | 262 EXPECT_EQ(1u, handles_count); |
263 EXPECT_NE(kInvalidHandleValue, handles[0]); | 263 EXPECT_NE(kInvalidHandleValue, handles[0]); |
264 | 264 |
265 // Read from the sent/received handle. | 265 // Read from the sent/received handle. |
266 mp.handle1.reset(MessagePipeHandle(handles[0])); | 266 mp.handle1.reset(MessagePipeHandle(handles[0])); |
267 // Save |handles[0]| to check that it gets properly closed. | 267 // Save |handles[0]| to check that it gets properly closed. |
268 hv0 = handles[0]; | 268 hv0 = handles[0]; |
269 EXPECT_EQ(MOJO_RESULT_OK, | 269 EXPECT_EQ(MOJO_RESULT_OK, |
270 Wait(mp.handle1.get(), MOJO_WAIT_FLAG_READABLE, | 270 Wait(mp.handle1.get(), MOJO_HANDLE_SIGNAL_READABLE, |
271 MOJO_DEADLINE_INDEFINITE)); | 271 MOJO_DEADLINE_INDEFINITE)); |
272 memset(buffer, 0, sizeof(buffer)); | 272 memset(buffer, 0, sizeof(buffer)); |
273 buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 273 buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
274 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) | 274 for (size_t i = 0; i < MOJO_ARRAYSIZE(handles); i++) |
275 handles[i] = kInvalidHandleValue; | 275 handles[i] = kInvalidHandleValue; |
276 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); | 276 handles_count = static_cast<uint32_t>(MOJO_ARRAYSIZE(handles)); |
277 EXPECT_EQ(MOJO_RESULT_OK, | 277 EXPECT_EQ(MOJO_RESULT_OK, |
278 ReadMessageRaw(mp.handle1.get(), | 278 ReadMessageRaw(mp.handle1.get(), |
279 buffer, &buffer_size, | 279 buffer, &buffer_size, |
280 handles, &handles_count, | 280 handles, &handles_count, |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 | 410 |
411 buffer1 = buffer1.Pass(); | 411 buffer1 = buffer1.Pass(); |
412 | 412 |
413 EXPECT_TRUE(buffer1.is_valid()); | 413 EXPECT_TRUE(buffer1.is_valid()); |
414 } | 414 } |
415 | 415 |
416 // TODO(vtl): Write data pipe tests. | 416 // TODO(vtl): Write data pipe tests. |
417 | 417 |
418 } // namespace | 418 } // namespace |
419 } // namespace mojo | 419 } // namespace mojo |
OLD | NEW |