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

Side by Side Diff: mojo/public/c/system/tests/core_unittest.cc

Issue 2741033003: Mojo EDK: Introduce MojoQueryHandleSignalsState API (Closed)
Patch Set: fix stupid bad DCHECK Created 3 years, 9 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
« no previous file with comments | « mojo/public/c/system/functions.h ('k') | mojo/public/c/system/tests/core_unittest_pure_c.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 API. 5 // This file tests the C API.
6 6
7 #include "mojo/public/c/system/core.h" 7 #include "mojo/public/c/system/core.h"
8 8
9 #include <stdint.h> 9 #include <stdint.h>
10 #include <string.h> 10 #include <string.h>
(...skipping 23 matching lines...) Expand all
34 MojoHandleSignals sig; 34 MojoHandleSignals sig;
35 char buffer[10] = {0}; 35 char buffer[10] = {0};
36 uint32_t buffer_size; 36 uint32_t buffer_size;
37 void* write_pointer; 37 void* write_pointer;
38 const void* read_pointer; 38 const void* read_pointer;
39 39
40 // Close: 40 // Close:
41 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(MOJO_HANDLE_INVALID)); 41 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(MOJO_HANDLE_INVALID));
42 42
43 // Wait: 43 // Wait:
44 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 44 EXPECT_EQ(
45 MojoWait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, 1000000, 45 MOJO_RESULT_INVALID_ARGUMENT,
46 nullptr)); 46 MojoWait(MOJO_HANDLE_INVALID, ~MOJO_HANDLE_SIGNAL_NONE, 0, nullptr));
47 47
48 h0 = MOJO_HANDLE_INVALID; 48 h0 = MOJO_HANDLE_INVALID;
49 sig = ~MOJO_HANDLE_SIGNAL_NONE; 49 sig = ~MOJO_HANDLE_SIGNAL_NONE;
50 EXPECT_EQ( 50 EXPECT_EQ(
51 MOJO_RESULT_INVALID_ARGUMENT, 51 MOJO_RESULT_INVALID_ARGUMENT,
52 MojoWaitMany(&h0, &sig, 1, MOJO_DEADLINE_INDEFINITE, nullptr, nullptr)); 52 MojoWaitMany(&h0, &sig, 1, MOJO_DEADLINE_INDEFINITE, nullptr, nullptr));
53 53
54 // Message pipe: 54 // Message pipe:
55 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 55 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
56 MojoWriteMessage(h0, buffer, 3, nullptr, 0, 56 MojoWriteMessage(h0, buffer, 3, nullptr, 0,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 MojoHandleSignals sig; 91 MojoHandleSignals sig;
92 char buffer[10] = {0}; 92 char buffer[10] = {0};
93 uint32_t buffer_size; 93 uint32_t buffer_size;
94 94
95 h0 = MOJO_HANDLE_INVALID; 95 h0 = MOJO_HANDLE_INVALID;
96 h1 = MOJO_HANDLE_INVALID; 96 h1 = MOJO_HANDLE_INVALID;
97 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &h0, &h1)); 97 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateMessagePipe(nullptr, &h0, &h1));
98 EXPECT_NE(h0, MOJO_HANDLE_INVALID); 98 EXPECT_NE(h0, MOJO_HANDLE_INVALID);
99 EXPECT_NE(h1, MOJO_HANDLE_INVALID); 99 EXPECT_NE(h1, MOJO_HANDLE_INVALID);
100 100
101 // Shouldn't be readable, we haven't written anything. 101 // Shouldn't be readable, we haven't written anything. Should be writable.
102 MojoHandleSignalsState state; 102 MojoHandleSignalsState state;
103 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 103 EXPECT_EQ(MOJO_RESULT_OK, MojoQueryHandleSignalsState(h0, &state));
104 MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
105 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); 104 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
106 EXPECT_EQ(kSignalAll, state.satisfiable_signals); 105 EXPECT_EQ(kSignalAll, state.satisfiable_signals);
107 106
108 // Should be writable.
109 EXPECT_EQ(MOJO_RESULT_OK,
110 MojoWait(h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state));
111 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
112 EXPECT_EQ(kSignalAll, state.satisfiable_signals);
113
114 // Last parameter is optional. 107 // Last parameter is optional.
115 EXPECT_EQ(MOJO_RESULT_OK, 108 EXPECT_EQ(MOJO_RESULT_OK,
116 MojoWait(h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, nullptr)); 109 MojoWait(h0, MOJO_HANDLE_SIGNAL_WRITABLE, 0, nullptr));
117 110
118 // Try to read. 111 // Try to read.
119 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 112 buffer_size = static_cast<uint32_t>(sizeof(buffer));
120 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 113 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
121 MojoReadMessage(h0, buffer, &buffer_size, nullptr, nullptr, 114 MojoReadMessage(h0, buffer, &buffer_size, nullptr, nullptr,
122 MOJO_READ_MESSAGE_FLAG_NONE)); 115 MOJO_READ_MESSAGE_FLAG_NONE));
123 116
(...skipping 16 matching lines...) Expand all
140 133
141 // Read from |h0|. 134 // Read from |h0|.
142 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 135 buffer_size = static_cast<uint32_t>(sizeof(buffer));
143 EXPECT_EQ(MOJO_RESULT_OK, 136 EXPECT_EQ(MOJO_RESULT_OK,
144 MojoReadMessage(h0, buffer, &buffer_size, nullptr, nullptr, 137 MojoReadMessage(h0, buffer, &buffer_size, nullptr, nullptr,
145 MOJO_READ_MESSAGE_FLAG_NONE)); 138 MOJO_READ_MESSAGE_FLAG_NONE));
146 EXPECT_EQ(static_cast<uint32_t>(sizeof(kHello)), buffer_size); 139 EXPECT_EQ(static_cast<uint32_t>(sizeof(kHello)), buffer_size);
147 EXPECT_STREQ(kHello, buffer); 140 EXPECT_STREQ(kHello, buffer);
148 141
149 // |h0| should no longer be readable. 142 // |h0| should no longer be readable.
150 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 143 EXPECT_EQ(MOJO_RESULT_OK, MojoQueryHandleSignalsState(h0, &state));
151 MojoWait(h0, MOJO_HANDLE_SIGNAL_READABLE, 10, &state));
152
153 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); 144 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
154 EXPECT_EQ(kSignalAll, state.satisfiable_signals); 145 EXPECT_EQ(kSignalAll, state.satisfiable_signals);
155 146
156 // Close |h0|. 147 // Close |h0|.
157 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h0)); 148 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h0));
158 149
159 EXPECT_EQ(MOJO_RESULT_OK, 150 EXPECT_EQ(MOJO_RESULT_OK,
160 MojoWait(h1, MOJO_HANDLE_SIGNAL_PEER_CLOSED, 151 MojoWait(h1, MOJO_HANDLE_SIGNAL_PEER_CLOSED,
161 MOJO_DEADLINE_INDEFINITE, &state)); 152 MOJO_DEADLINE_INDEFINITE, &state));
162 153
163 // |h1| should no longer be readable or writable. 154 // |h1| should no longer be readable or writable.
164 EXPECT_EQ( 155 EXPECT_EQ(
165 MOJO_RESULT_FAILED_PRECONDITION, 156 MOJO_RESULT_FAILED_PRECONDITION,
166 MojoWait(h1, MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 157 MojoWait(h1, MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
167 1000, &state)); 158 MOJO_DEADLINE_INDEFINITE, &state));
168 159
169 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals); 160 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals);
170 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals); 161 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals);
171 162
172 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h1)); 163 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(h1));
173 } 164 }
174 165
175 TEST(CoreTest, BasicDataPipe) { 166 TEST(CoreTest, BasicDataPipe) {
176 MojoHandle hp, hc; 167 MojoHandle hp, hc;
177 MojoHandleSignals sig; 168 MojoHandleSignals sig;
178 char buffer[20] = {0}; 169 char buffer[20] = {0};
179 uint32_t buffer_size; 170 uint32_t buffer_size;
180 void* write_pointer; 171 void* write_pointer;
181 const void* read_pointer; 172 const void* read_pointer;
182 173
183 hp = MOJO_HANDLE_INVALID; 174 hp = MOJO_HANDLE_INVALID;
184 hc = MOJO_HANDLE_INVALID; 175 hc = MOJO_HANDLE_INVALID;
185 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &hp, &hc)); 176 EXPECT_EQ(MOJO_RESULT_OK, MojoCreateDataPipe(nullptr, &hp, &hc));
186 EXPECT_NE(hp, MOJO_HANDLE_INVALID); 177 EXPECT_NE(hp, MOJO_HANDLE_INVALID);
187 EXPECT_NE(hc, MOJO_HANDLE_INVALID); 178 EXPECT_NE(hc, MOJO_HANDLE_INVALID);
188 179
189 // The consumer |hc| shouldn't be readable. 180 // The consumer |hc| shouldn't be readable.
190 MojoHandleSignalsState state; 181 MojoHandleSignalsState state;
191 EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, 182 EXPECT_EQ(MOJO_RESULT_OK, MojoQueryHandleSignalsState(hc, &state));
192 MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 0, &state));
193
194 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals); 183 EXPECT_EQ(MOJO_HANDLE_SIGNAL_NONE, state.satisfied_signals);
195 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | 184 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
196 MOJO_HANDLE_SIGNAL_NEW_DATA_READABLE, 185 MOJO_HANDLE_SIGNAL_NEW_DATA_READABLE,
197 state.satisfiable_signals); 186 state.satisfiable_signals);
198 187
199 // The producer |hp| should be writable. 188 // The producer |hp| should be writable.
200 EXPECT_EQ(MOJO_RESULT_OK, 189 EXPECT_EQ(MOJO_RESULT_OK, MojoQueryHandleSignalsState(hp, &state));
201 MojoWait(hp, MOJO_HANDLE_SIGNAL_WRITABLE, 0, &state));
202
203 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals); 190 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, state.satisfied_signals);
204 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 191 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
205 state.satisfiable_signals); 192 state.satisfiable_signals);
206 193
207 // Try to read from |hc|. 194 // Try to read from |hc|.
208 buffer_size = static_cast<uint32_t>(sizeof(buffer)); 195 buffer_size = static_cast<uint32_t>(sizeof(buffer));
209 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT, 196 EXPECT_EQ(MOJO_RESULT_SHOULD_WAIT,
210 MojoReadData(hc, buffer, &buffer_size, MOJO_READ_DATA_FLAG_NONE)); 197 MojoReadData(hc, buffer, &buffer_size, MOJO_READ_DATA_FLAG_NONE));
211 198
212 // Try to begin a two-phase read from |hc|. 199 // Try to begin a two-phase read from |hc|.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 read_pointer = nullptr; 256 read_pointer = nullptr;
270 EXPECT_EQ(MOJO_RESULT_OK, MojoBeginReadData(hc, &read_pointer, &buffer_size, 257 EXPECT_EQ(MOJO_RESULT_OK, MojoBeginReadData(hc, &read_pointer, &buffer_size,
271 MOJO_READ_DATA_FLAG_NONE)); 258 MOJO_READ_DATA_FLAG_NONE));
272 ASSERT_LE(buffer_size, sizeof(buffer) - 1); 259 ASSERT_LE(buffer_size, sizeof(buffer) - 1);
273 memcpy(&buffer[1], read_pointer, buffer_size); 260 memcpy(&buffer[1], read_pointer, buffer_size);
274 EXPECT_EQ(MOJO_RESULT_OK, MojoEndReadData(hc, buffer_size)); 261 EXPECT_EQ(MOJO_RESULT_OK, MojoEndReadData(hc, buffer_size));
275 EXPECT_STREQ("hello world", buffer); 262 EXPECT_STREQ("hello world", buffer);
276 263
277 // |hc| should no longer be readable. 264 // |hc| should no longer be readable.
278 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 265 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
279 MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, 1000, &state)); 266 MojoWait(hc, MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE,
267 &state));
280 268
281 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals); 269 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfied_signals);
282 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals); 270 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, state.satisfiable_signals);
283 271
284 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hc)); 272 EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hc));
285 273
286 // TODO(vtl): Test the other way around -- closing the consumer should make 274 // TODO(vtl): Test the other way around -- closing the consumer should make
287 // the producer never-writable? 275 // the producer never-writable?
288 } 276 }
289 277
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 // This checks that things actually work in C (not C++). 327 // This checks that things actually work in C (not C++).
340 TEST(CoreTest, MinimalCTest) { 328 TEST(CoreTest, MinimalCTest) {
341 const char* failure = MinimalCTest(); 329 const char* failure = MinimalCTest();
342 EXPECT_FALSE(failure) << failure; 330 EXPECT_FALSE(failure) << failure;
343 } 331 }
344 332
345 // TODO(vtl): Add multi-threaded tests. 333 // TODO(vtl): Add multi-threaded tests.
346 334
347 } // namespace 335 } // namespace
348 } // namespace mojo 336 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/c/system/functions.h ('k') | mojo/public/c/system/tests/core_unittest_pure_c.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698