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

Side by Side Diff: mojo/edk/system/dispatcher_unittest.cc

Issue 1776033002: Implement MojoGetBufferInformation(), part 1. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: doh Created 4 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/edk/system/dispatcher.cc ('k') | mojo/edk/system/memory.cc » ('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 #include "mojo/edk/system/dispatcher.h" 5 #include "mojo/edk/system/dispatcher.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <thread> 8 #include <thread>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 d->BeginWriteData(NullUserPointer(), NullUserPointer(), 67 d->BeginWriteData(NullUserPointer(), NullUserPointer(),
68 MOJO_WRITE_DATA_FLAG_NONE)); 68 MOJO_WRITE_DATA_FLAG_NONE));
69 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, d->EndWriteData(0)); 69 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, d->EndWriteData(0));
70 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 70 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
71 d->ReadData(NullUserPointer(), NullUserPointer(), 71 d->ReadData(NullUserPointer(), NullUserPointer(),
72 MOJO_READ_DATA_FLAG_NONE)); 72 MOJO_READ_DATA_FLAG_NONE));
73 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 73 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
74 d->BeginReadData(NullUserPointer(), NullUserPointer(), 74 d->BeginReadData(NullUserPointer(), NullUserPointer(),
75 MOJO_READ_DATA_FLAG_NONE)); 75 MOJO_READ_DATA_FLAG_NONE));
76 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, d->EndReadData(0)); 76 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, d->EndReadData(0));
77 RefPtr<Dispatcher> new_dispatcher;
78 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
79 d->DuplicateBufferHandle(NullUserPointer(), &new_dispatcher));
80 EXPECT_FALSE(new_dispatcher);
81 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
82 d->GetBufferInformation(NullUserPointer(), 0u));
83 std::unique_ptr<PlatformSharedBufferMapping> mapping;
84 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
85 d->MapBuffer(0u, 1u, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
86 EXPECT_FALSE(mapping);
77 Waiter w; 87 Waiter w;
78 w.Init(); 88 w.Init();
79 HandleSignalsState hss; 89 HandleSignalsState hss;
80 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, 90 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION,
81 d->AddAwakable(&w, ~MOJO_HANDLE_SIGNAL_NONE, 0, &hss)); 91 d->AddAwakable(&w, ~MOJO_HANDLE_SIGNAL_NONE, 0, &hss));
82 EXPECT_EQ(0u, hss.satisfied_signals); 92 EXPECT_EQ(0u, hss.satisfied_signals);
83 EXPECT_EQ(0u, hss.satisfiable_signals); 93 EXPECT_EQ(0u, hss.satisfiable_signals);
84 // Okay to remove even if it wasn't added (or was already removed). 94 // Okay to remove even if it wasn't added (or was already removed).
85 hss = HandleSignalsState(); 95 hss = HandleSignalsState();
86 d->RemoveAwakable(&w, &hss); 96 d->RemoveAwakable(&w, &hss);
(...skipping 19 matching lines...) Expand all
106 d->BeginWriteData(NullUserPointer(), NullUserPointer(), 116 d->BeginWriteData(NullUserPointer(), NullUserPointer(),
107 MOJO_WRITE_DATA_FLAG_NONE)); 117 MOJO_WRITE_DATA_FLAG_NONE));
108 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, d->EndWriteData(0)); 118 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, d->EndWriteData(0));
109 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 119 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
110 d->ReadData(NullUserPointer(), NullUserPointer(), 120 d->ReadData(NullUserPointer(), NullUserPointer(),
111 MOJO_READ_DATA_FLAG_NONE)); 121 MOJO_READ_DATA_FLAG_NONE));
112 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 122 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
113 d->BeginReadData(NullUserPointer(), NullUserPointer(), 123 d->BeginReadData(NullUserPointer(), NullUserPointer(),
114 MOJO_READ_DATA_FLAG_NONE)); 124 MOJO_READ_DATA_FLAG_NONE));
115 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, d->EndReadData(0)); 125 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, d->EndReadData(0));
126 new_dispatcher = nullptr;
127 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
128 d->DuplicateBufferHandle(NullUserPointer(), &new_dispatcher));
129 EXPECT_FALSE(new_dispatcher);
130 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
131 d->GetBufferInformation(NullUserPointer(), 0u));
132 mapping.reset();
133 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
134 d->MapBuffer(0u, 1u, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
135 EXPECT_FALSE(mapping);
116 hss = HandleSignalsState(); 136 hss = HandleSignalsState();
117 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 137 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
118 d->AddAwakable(&w, ~MOJO_HANDLE_SIGNAL_NONE, 0, &hss)); 138 d->AddAwakable(&w, ~MOJO_HANDLE_SIGNAL_NONE, 0, &hss));
119 EXPECT_EQ(0u, hss.satisfied_signals); 139 EXPECT_EQ(0u, hss.satisfied_signals);
120 EXPECT_EQ(0u, hss.satisfiable_signals); 140 EXPECT_EQ(0u, hss.satisfiable_signals);
121 hss = HandleSignalsState(); 141 hss = HandleSignalsState();
122 d->RemoveAwakable(&w, &hss); 142 d->RemoveAwakable(&w, &hss);
123 EXPECT_EQ(0u, hss.satisfied_signals); 143 EXPECT_EQ(0u, hss.satisfied_signals);
124 EXPECT_EQ(0u, hss.satisfiable_signals); 144 EXPECT_EQ(0u, hss.satisfiable_signals);
125 } 145 }
126 146
127 enum class DispatcherOp { 147 enum class DispatcherOp {
128 CLOSE = 0, 148 CLOSE = 0,
129 WRITE_MESSAGE, 149 WRITE_MESSAGE,
130 READ_MESSAGE, 150 READ_MESSAGE,
131 WRITE_DATA, 151 WRITE_DATA,
132 BEGIN_WRITE_DATA, 152 BEGIN_WRITE_DATA,
133 END_WRITE_DATA, 153 END_WRITE_DATA,
134 READ_DATA, 154 READ_DATA,
135 BEGIN_READ_DATA, 155 BEGIN_READ_DATA,
136 END_READ_DATA, 156 END_READ_DATA,
137 DUPLICATE_BUFFER_HANDLE, 157 DUPLICATE_BUFFER_HANDLE,
158 GET_BUFFER_INFORMATION,
138 MAP_BUFFER, 159 MAP_BUFFER,
139 ADD_WAITER, 160 ADD_AWAKABLE,
140 REMOVE_WAITER, 161 REMOVE_AWAKABLE,
141 COUNT 162 COUNT
142 }; 163 };
143 164
144 void ThreadSafetyStressHelper(ManualResetWaitableEvent* event, 165 void ThreadSafetyStressHelper(ManualResetWaitableEvent* event,
145 RefPtr<Dispatcher>&& dispatcher, 166 RefPtr<Dispatcher>&& dispatcher,
146 DispatcherOp op) { 167 DispatcherOp op) {
147 CHECK_LE(0, static_cast<int>(op)); 168 CHECK_LE(0, static_cast<int>(op));
148 CHECK_LT(static_cast<int>(op), static_cast<int>(DispatcherOp::COUNT)); 169 CHECK_LT(static_cast<int>(op), static_cast<int>(DispatcherOp::COUNT));
149 170
150 event->Wait(); 171 event->Wait();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 break; 210 break;
190 case DispatcherOp::BEGIN_READ_DATA: 211 case DispatcherOp::BEGIN_READ_DATA:
191 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 212 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
192 dispatcher->BeginReadData(NullUserPointer(), NullUserPointer(), 213 dispatcher->BeginReadData(NullUserPointer(), NullUserPointer(),
193 MOJO_READ_DATA_FLAG_NONE)); 214 MOJO_READ_DATA_FLAG_NONE));
194 break; 215 break;
195 case DispatcherOp::END_READ_DATA: 216 case DispatcherOp::END_READ_DATA:
196 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, dispatcher->EndReadData(0)); 217 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, dispatcher->EndReadData(0));
197 break; 218 break;
198 case DispatcherOp::DUPLICATE_BUFFER_HANDLE: { 219 case DispatcherOp::DUPLICATE_BUFFER_HANDLE: {
199 RefPtr<Dispatcher> unused; 220 RefPtr<Dispatcher> new_dispatcher;
200 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, 221 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
201 dispatcher->DuplicateBufferHandle(NullUserPointer(), &unused)); 222 dispatcher->DuplicateBufferHandle(NullUserPointer(),
223 &new_dispatcher));
224 EXPECT_FALSE(new_dispatcher);
202 break; 225 break;
203 } 226 }
227 case DispatcherOp::GET_BUFFER_INFORMATION:
228 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
229 dispatcher->GetBufferInformation(NullUserPointer(), 0u));
230 break;
204 case DispatcherOp::MAP_BUFFER: { 231 case DispatcherOp::MAP_BUFFER: {
205 std::unique_ptr<PlatformSharedBufferMapping> unused; 232 std::unique_ptr<PlatformSharedBufferMapping> mapping;
206 EXPECT_EQ( 233 EXPECT_EQ(
207 MOJO_RESULT_INVALID_ARGUMENT, 234 MOJO_RESULT_INVALID_ARGUMENT,
208 dispatcher->MapBuffer(0u, 0u, MOJO_MAP_BUFFER_FLAG_NONE, &unused)); 235 dispatcher->MapBuffer(0u, 1u, MOJO_MAP_BUFFER_FLAG_NONE, &mapping));
236 EXPECT_FALSE(mapping);
209 break; 237 break;
210 } 238 }
211 case DispatcherOp::ADD_WAITER: { 239 case DispatcherOp::ADD_AWAKABLE: {
212 HandleSignalsState hss; 240 HandleSignalsState hss;
213 MojoResult r = 241 MojoResult r =
214 dispatcher->AddAwakable(&waiter, ~MOJO_HANDLE_SIGNAL_NONE, 0, &hss); 242 dispatcher->AddAwakable(&waiter, ~MOJO_HANDLE_SIGNAL_NONE, 0, &hss);
215 EXPECT_TRUE(r == MOJO_RESULT_FAILED_PRECONDITION || 243 EXPECT_TRUE(r == MOJO_RESULT_FAILED_PRECONDITION ||
216 r == MOJO_RESULT_INVALID_ARGUMENT); 244 r == MOJO_RESULT_INVALID_ARGUMENT);
217 EXPECT_EQ(0u, hss.satisfied_signals); 245 EXPECT_EQ(0u, hss.satisfied_signals);
218 EXPECT_EQ(0u, hss.satisfiable_signals); 246 EXPECT_EQ(0u, hss.satisfiable_signals);
219 break; 247 break;
220 } 248 }
221 case DispatcherOp::REMOVE_WAITER: { 249 case DispatcherOp::REMOVE_AWAKABLE: {
222 HandleSignalsState hss; 250 HandleSignalsState hss;
223 dispatcher->RemoveAwakable(&waiter, &hss); 251 dispatcher->RemoveAwakable(&waiter, &hss);
224 EXPECT_EQ(0u, hss.satisfied_signals); 252 EXPECT_EQ(0u, hss.satisfied_signals);
225 EXPECT_EQ(0u, hss.satisfiable_signals); 253 EXPECT_EQ(0u, hss.satisfiable_signals);
226 break; 254 break;
227 } 255 }
228 default: 256 default:
229 NOTREACHED(); 257 NOTREACHED();
230 break; 258 break;
231 } 259 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 for (auto& thread : threads) 316 for (auto& thread : threads)
289 thread.join(); 317 thread.join();
290 318
291 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 319 EXPECT_EQ(MOJO_RESULT_OK, d->Close());
292 } 320 }
293 } 321 }
294 322
295 } // namespace 323 } // namespace
296 } // namespace system 324 } // namespace system
297 } // namespace mojo 325 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/dispatcher.cc ('k') | mojo/edk/system/memory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698