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.
5 #include "mojo/system/core_test_base.h"
9 #include "base/compiler_specific.h"
10 #include "base/logging.h"
11 #include "base/memory/ref_counted.h"
12 #include "mojo/system/constants.h"
13 #include "mojo/system/core.h"
14 #include "mojo/system/dispatcher.h"
15 #include "mojo/system/memory.h"
23 // MockDispatcher --------------------------------------------------------------
25 class MockDispatcher : public Dispatcher {
27 explicit MockDispatcher(CoreTestBase::MockHandleInfo* info) : info_(info) {
29 info_->IncrementCtorCallCount();
32 // |Dispatcher| private methods:
33 virtual Type GetType() const OVERRIDE { return kTypeUnknown; }
36 virtual ~MockDispatcher() { info_->IncrementDtorCallCount(); }
38 // |Dispatcher| protected methods:
39 virtual void CloseImplNoLock() OVERRIDE {
40 info_->IncrementCloseCallCount();
41 lock().AssertAcquired();
44 virtual MojoResult WriteMessageImplNoLock(
45 UserPointer<const void> bytes,
47 std::vector<DispatcherTransport>* transports,
48 MojoWriteMessageFlags /*flags*/) OVERRIDE {
49 info_->IncrementWriteMessageCallCount();
50 lock().AssertAcquired();
52 if (num_bytes > kMaxMessageNumBytes)
53 return MOJO_RESULT_RESOURCE_EXHAUSTED;
56 return MOJO_RESULT_UNIMPLEMENTED;
58 return MOJO_RESULT_OK;
61 virtual MojoResult ReadMessageImplNoLock(
62 UserPointer<void> bytes,
63 UserPointer<uint32_t> num_bytes,
64 DispatcherVector* dispatchers,
65 uint32_t* num_dispatchers,
66 MojoReadMessageFlags /*flags*/) OVERRIDE {
67 info_->IncrementReadMessageCallCount();
68 lock().AssertAcquired();
70 if (num_dispatchers) {
73 // Okay to leave an invalid dispatcher.
74 dispatchers->resize(1);
78 return MOJO_RESULT_OK;
81 virtual MojoResult WriteDataImplNoLock(
82 UserPointer<const void> /*elements*/,
83 UserPointer<uint32_t> /*num_bytes*/,
84 MojoWriteDataFlags /*flags*/) OVERRIDE {
85 info_->IncrementWriteDataCallCount();
86 lock().AssertAcquired();
87 return MOJO_RESULT_UNIMPLEMENTED;
90 virtual MojoResult BeginWriteDataImplNoLock(
91 UserPointer<void*> /*buffer*/,
92 UserPointer<uint32_t> /*buffer_num_bytes*/,
93 MojoWriteDataFlags /*flags*/) OVERRIDE {
94 info_->IncrementBeginWriteDataCallCount();
95 lock().AssertAcquired();
96 return MOJO_RESULT_UNIMPLEMENTED;
99 virtual MojoResult EndWriteDataImplNoLock(
100 uint32_t /*num_bytes_written*/) OVERRIDE {
101 info_->IncrementEndWriteDataCallCount();
102 lock().AssertAcquired();
103 return MOJO_RESULT_UNIMPLEMENTED;
106 virtual MojoResult ReadDataImplNoLock(UserPointer<void> /*elements*/,
107 UserPointer<uint32_t> /*num_bytes*/,
108 MojoReadDataFlags /*flags*/) OVERRIDE {
109 info_->IncrementReadDataCallCount();
110 lock().AssertAcquired();
111 return MOJO_RESULT_UNIMPLEMENTED;
114 virtual MojoResult BeginReadDataImplNoLock(
115 UserPointer<const void*> /*buffer*/,
116 UserPointer<uint32_t> /*buffer_num_bytes*/,
117 MojoReadDataFlags /*flags*/) OVERRIDE {
118 info_->IncrementBeginReadDataCallCount();
119 lock().AssertAcquired();
120 return MOJO_RESULT_UNIMPLEMENTED;
123 virtual MojoResult EndReadDataImplNoLock(
124 uint32_t /*num_bytes_read*/) OVERRIDE {
125 info_->IncrementEndReadDataCallCount();
126 lock().AssertAcquired();
127 return MOJO_RESULT_UNIMPLEMENTED;
130 virtual MojoResult AddWaiterImplNoLock(
132 MojoHandleSignals /*signals*/,
133 uint32_t /*context*/,
134 HandleSignalsState* signals_state) OVERRIDE {
135 info_->IncrementAddWaiterCallCount();
136 lock().AssertAcquired();
138 *signals_state = HandleSignalsState();
139 return MOJO_RESULT_FAILED_PRECONDITION;
142 virtual void RemoveWaiterImplNoLock(
144 HandleSignalsState* signals_state) OVERRIDE {
145 info_->IncrementRemoveWaiterCallCount();
146 lock().AssertAcquired();
148 *signals_state = HandleSignalsState();
151 virtual void CancelAllWaitersNoLock() OVERRIDE {
152 info_->IncrementCancelAllWaitersCallCount();
153 lock().AssertAcquired();
156 virtual scoped_refptr<Dispatcher>
157 CreateEquivalentDispatcherAndCloseImplNoLock() OVERRIDE {
158 return scoped_refptr<Dispatcher>(new MockDispatcher(info_));
161 CoreTestBase::MockHandleInfo* const info_;
163 DISALLOW_COPY_AND_ASSIGN(MockDispatcher);
168 // CoreTestBase ----------------------------------------------------------------
170 CoreTestBase::CoreTestBase() {
173 CoreTestBase::~CoreTestBase() {
176 void CoreTestBase::SetUp() {
180 void CoreTestBase::TearDown() {
185 MojoHandle CoreTestBase::CreateMockHandle(CoreTestBase::MockHandleInfo* info) {
187 scoped_refptr<MockDispatcher> dispatcher(new MockDispatcher(info));
188 return core_->AddDispatcher(dispatcher);
191 // CoreTestBase_MockHandleInfo -------------------------------------------------
193 CoreTestBase_MockHandleInfo::CoreTestBase_MockHandleInfo()
194 : ctor_call_count_(0),
196 close_call_count_(0),
197 write_message_call_count_(0),
198 read_message_call_count_(0),
199 write_data_call_count_(0),
200 begin_write_data_call_count_(0),
201 end_write_data_call_count_(0),
202 read_data_call_count_(0),
203 begin_read_data_call_count_(0),
204 end_read_data_call_count_(0),
205 add_waiter_call_count_(0),
206 remove_waiter_call_count_(0),
207 cancel_all_waiters_call_count_(0) {
210 CoreTestBase_MockHandleInfo::~CoreTestBase_MockHandleInfo() {
213 unsigned CoreTestBase_MockHandleInfo::GetCtorCallCount() const {
214 base::AutoLock locker(lock_);
215 return ctor_call_count_;
218 unsigned CoreTestBase_MockHandleInfo::GetDtorCallCount() const {
219 base::AutoLock locker(lock_);
220 return dtor_call_count_;
223 unsigned CoreTestBase_MockHandleInfo::GetCloseCallCount() const {
224 base::AutoLock locker(lock_);
225 return close_call_count_;
228 unsigned CoreTestBase_MockHandleInfo::GetWriteMessageCallCount() const {
229 base::AutoLock locker(lock_);
230 return write_message_call_count_;
233 unsigned CoreTestBase_MockHandleInfo::GetReadMessageCallCount() const {
234 base::AutoLock locker(lock_);
235 return read_message_call_count_;
238 unsigned CoreTestBase_MockHandleInfo::GetWriteDataCallCount() const {
239 base::AutoLock locker(lock_);
240 return write_data_call_count_;
243 unsigned CoreTestBase_MockHandleInfo::GetBeginWriteDataCallCount() const {
244 base::AutoLock locker(lock_);
245 return begin_write_data_call_count_;
248 unsigned CoreTestBase_MockHandleInfo::GetEndWriteDataCallCount() const {
249 base::AutoLock locker(lock_);
250 return end_write_data_call_count_;
253 unsigned CoreTestBase_MockHandleInfo::GetReadDataCallCount() const {
254 base::AutoLock locker(lock_);
255 return read_data_call_count_;
258 unsigned CoreTestBase_MockHandleInfo::GetBeginReadDataCallCount() const {
259 base::AutoLock locker(lock_);
260 return begin_read_data_call_count_;
263 unsigned CoreTestBase_MockHandleInfo::GetEndReadDataCallCount() const {
264 base::AutoLock locker(lock_);
265 return end_read_data_call_count_;
268 unsigned CoreTestBase_MockHandleInfo::GetAddWaiterCallCount() const {
269 base::AutoLock locker(lock_);
270 return add_waiter_call_count_;
273 unsigned CoreTestBase_MockHandleInfo::GetRemoveWaiterCallCount() const {
274 base::AutoLock locker(lock_);
275 return remove_waiter_call_count_;
278 unsigned CoreTestBase_MockHandleInfo::GetCancelAllWaitersCallCount() const {
279 base::AutoLock locker(lock_);
280 return cancel_all_waiters_call_count_;
283 void CoreTestBase_MockHandleInfo::IncrementCtorCallCount() {
284 base::AutoLock locker(lock_);
288 void CoreTestBase_MockHandleInfo::IncrementDtorCallCount() {
289 base::AutoLock locker(lock_);
293 void CoreTestBase_MockHandleInfo::IncrementCloseCallCount() {
294 base::AutoLock locker(lock_);
298 void CoreTestBase_MockHandleInfo::IncrementWriteMessageCallCount() {
299 base::AutoLock locker(lock_);
300 write_message_call_count_++;
303 void CoreTestBase_MockHandleInfo::IncrementReadMessageCallCount() {
304 base::AutoLock locker(lock_);
305 read_message_call_count_++;
308 void CoreTestBase_MockHandleInfo::IncrementWriteDataCallCount() {
309 base::AutoLock locker(lock_);
310 write_data_call_count_++;
313 void CoreTestBase_MockHandleInfo::IncrementBeginWriteDataCallCount() {
314 base::AutoLock locker(lock_);
315 begin_write_data_call_count_++;
318 void CoreTestBase_MockHandleInfo::IncrementEndWriteDataCallCount() {
319 base::AutoLock locker(lock_);
320 end_write_data_call_count_++;
323 void CoreTestBase_MockHandleInfo::IncrementReadDataCallCount() {
324 base::AutoLock locker(lock_);
325 read_data_call_count_++;
328 void CoreTestBase_MockHandleInfo::IncrementBeginReadDataCallCount() {
329 base::AutoLock locker(lock_);
330 begin_read_data_call_count_++;
333 void CoreTestBase_MockHandleInfo::IncrementEndReadDataCallCount() {
334 base::AutoLock locker(lock_);
335 end_read_data_call_count_++;
338 void CoreTestBase_MockHandleInfo::IncrementAddWaiterCallCount() {
339 base::AutoLock locker(lock_);
340 add_waiter_call_count_++;
343 void CoreTestBase_MockHandleInfo::IncrementRemoveWaiterCallCount() {
344 base::AutoLock locker(lock_);
345 remove_waiter_call_count_++;
348 void CoreTestBase_MockHandleInfo::IncrementCancelAllWaitersCallCount() {
349 base::AutoLock locker(lock_);
350 cancel_all_waiters_call_count_++;
354 } // namespace system