summaryrefslogtreecommitdiffstats
path: root/mojo/edk/system/core_test_base.cc
diff options
context:
space:
mode:
Diffstat (limited to 'mojo/edk/system/core_test_base.cc')
-rw-r--r--mojo/edk/system/core_test_base.cc373
1 files changed, 373 insertions, 0 deletions
diff --git a/mojo/edk/system/core_test_base.cc b/mojo/edk/system/core_test_base.cc
new file mode 100644
index 0000000..9962767
--- /dev/null
+++ b/mojo/edk/system/core_test_base.cc
@@ -0,0 +1,373 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "mojo/edk/system/core_test_base.h"
+
+#include <vector>
+
+#include "base/logging.h"
+#include "base/memory/ref_counted.h"
+#include "mojo/edk/system/configuration.h"
+#include "mojo/edk/system/core.h"
+#include "mojo/edk/system/dispatcher.h"
+#include "mojo/public/cpp/system/macros.h"
+
+namespace mojo {
+namespace edk {
+namespace test {
+
+namespace {
+
+// MockDispatcher --------------------------------------------------------------
+
+class MockDispatcher : public Dispatcher {
+ public:
+ static scoped_refptr<MockDispatcher> Create(
+ CoreTestBase::MockHandleInfo* info) {
+ return make_scoped_refptr(new MockDispatcher(info));
+ }
+
+ // |Dispatcher| private methods:
+ Type GetType() const override { return Type::UNKNOWN; }
+
+ private:
+ explicit MockDispatcher(CoreTestBase::MockHandleInfo* info) : info_(info) {
+ CHECK(info_);
+ info_->IncrementCtorCallCount();
+ }
+
+ ~MockDispatcher() override { info_->IncrementDtorCallCount(); }
+
+ // |Dispatcher| protected methods:
+ void CloseImplNoLock() override {
+ info_->IncrementCloseCallCount();
+ lock().AssertAcquired();
+ }
+
+ MojoResult WriteMessageImplNoLock(
+ const void* bytes,
+ uint32_t num_bytes,
+ std::vector<DispatcherTransport>* transports,
+ MojoWriteMessageFlags /*flags*/) override {
+ info_->IncrementWriteMessageCallCount();
+ lock().AssertAcquired();
+
+ if (num_bytes > GetConfiguration().max_message_num_bytes)
+ return MOJO_RESULT_RESOURCE_EXHAUSTED;
+
+ if (transports)
+ return MOJO_RESULT_UNIMPLEMENTED;
+
+ return MOJO_RESULT_OK;
+ }
+
+ MojoResult ReadMessageImplNoLock(void* bytes,
+ uint32_t* num_bytes,
+ DispatcherVector* dispatchers,
+ uint32_t* num_dispatchers,
+ MojoReadMessageFlags /*flags*/) override {
+ info_->IncrementReadMessageCallCount();
+ lock().AssertAcquired();
+
+ if (num_dispatchers) {
+ *num_dispatchers = 1;
+ if (dispatchers) {
+ // Okay to leave an invalid dispatcher.
+ dispatchers->resize(1);
+ }
+ }
+
+ return MOJO_RESULT_OK;
+ }
+
+ MojoResult WriteDataImplNoLock(const void* /*elements*/,
+ uint32_t* /*num_bytes*/,
+ MojoWriteDataFlags /*flags*/) override {
+ info_->IncrementWriteDataCallCount();
+ lock().AssertAcquired();
+ return MOJO_RESULT_UNIMPLEMENTED;
+ }
+
+ MojoResult BeginWriteDataImplNoLock(
+ void** /*buffer*/,
+ uint32_t* /*buffer_num_bytes*/,
+ MojoWriteDataFlags /*flags*/) override {
+ info_->IncrementBeginWriteDataCallCount();
+ lock().AssertAcquired();
+ return MOJO_RESULT_UNIMPLEMENTED;
+ }
+
+ MojoResult EndWriteDataImplNoLock(uint32_t /*num_bytes_written*/) override {
+ info_->IncrementEndWriteDataCallCount();
+ lock().AssertAcquired();
+ return MOJO_RESULT_UNIMPLEMENTED;
+ }
+
+ MojoResult ReadDataImplNoLock(void* /*elements*/,
+ uint32_t* /*num_bytes*/,
+ MojoReadDataFlags /*flags*/) override {
+ info_->IncrementReadDataCallCount();
+ lock().AssertAcquired();
+ return MOJO_RESULT_UNIMPLEMENTED;
+ }
+
+ MojoResult BeginReadDataImplNoLock(const void** /*buffer*/,
+ uint32_t* /*buffer_num_bytes*/,
+ MojoReadDataFlags /*flags*/) override {
+ info_->IncrementBeginReadDataCallCount();
+ lock().AssertAcquired();
+ return MOJO_RESULT_UNIMPLEMENTED;
+ }
+
+ MojoResult EndReadDataImplNoLock(uint32_t /*num_bytes_read*/) override {
+ info_->IncrementEndReadDataCallCount();
+ lock().AssertAcquired();
+ return MOJO_RESULT_UNIMPLEMENTED;
+ }
+
+ MojoResult AddAwakableImplNoLock(Awakable* awakable,
+ MojoHandleSignals /*signals*/,
+ uint32_t /*context*/,
+ HandleSignalsState* signals_state) override {
+ info_->IncrementAddAwakableCallCount();
+ lock().AssertAcquired();
+ if (signals_state)
+ *signals_state = HandleSignalsState();
+ if (info_->IsAddAwakableAllowed()) {
+ info_->AwakableWasAdded(awakable);
+ return MOJO_RESULT_OK;
+ }
+
+ return MOJO_RESULT_FAILED_PRECONDITION;
+ }
+
+ void RemoveAwakableImplNoLock(Awakable* /*awakable*/,
+ HandleSignalsState* signals_state) override {
+ info_->IncrementRemoveAwakableCallCount();
+ lock().AssertAcquired();
+ if (signals_state)
+ *signals_state = HandleSignalsState();
+ }
+
+ void CancelAllAwakablesNoLock() override {
+ info_->IncrementCancelAllAwakablesCallCount();
+ lock().AssertAcquired();
+ }
+
+ scoped_refptr<Dispatcher> CreateEquivalentDispatcherAndCloseImplNoLock()
+ override {
+ return Create(info_);
+ }
+
+ CoreTestBase::MockHandleInfo* const info_;
+
+ MOJO_DISALLOW_COPY_AND_ASSIGN(MockDispatcher);
+};
+
+} // namespace
+
+// CoreTestBase ----------------------------------------------------------------
+
+CoreTestBase::CoreTestBase() {
+}
+
+CoreTestBase::~CoreTestBase() {
+}
+
+MojoHandle CoreTestBase::CreateMockHandle(CoreTestBase::MockHandleInfo* info) {
+ scoped_refptr<MockDispatcher> dispatcher = MockDispatcher::Create(info);
+ return core()->AddDispatcher(dispatcher);
+}
+
+// CoreTestBase_MockHandleInfo -------------------------------------------------
+
+CoreTestBase_MockHandleInfo::CoreTestBase_MockHandleInfo()
+ : ctor_call_count_(0),
+ dtor_call_count_(0),
+ close_call_count_(0),
+ write_message_call_count_(0),
+ read_message_call_count_(0),
+ write_data_call_count_(0),
+ begin_write_data_call_count_(0),
+ end_write_data_call_count_(0),
+ read_data_call_count_(0),
+ begin_read_data_call_count_(0),
+ end_read_data_call_count_(0),
+ add_awakable_call_count_(0),
+ remove_awakable_call_count_(0),
+ cancel_all_awakables_call_count_(0),
+ add_awakable_allowed_(false) {
+}
+
+CoreTestBase_MockHandleInfo::~CoreTestBase_MockHandleInfo() {
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetCtorCallCount() const {
+ base::AutoLock locker(lock_);
+ return ctor_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetDtorCallCount() const {
+ base::AutoLock locker(lock_);
+ return dtor_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetCloseCallCount() const {
+ base::AutoLock locker(lock_);
+ return close_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetWriteMessageCallCount() const {
+ base::AutoLock locker(lock_);
+ return write_message_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetReadMessageCallCount() const {
+ base::AutoLock locker(lock_);
+ return read_message_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetWriteDataCallCount() const {
+ base::AutoLock locker(lock_);
+ return write_data_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetBeginWriteDataCallCount() const {
+ base::AutoLock locker(lock_);
+ return begin_write_data_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetEndWriteDataCallCount() const {
+ base::AutoLock locker(lock_);
+ return end_write_data_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetReadDataCallCount() const {
+ base::AutoLock locker(lock_);
+ return read_data_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetBeginReadDataCallCount() const {
+ base::AutoLock locker(lock_);
+ return begin_read_data_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetEndReadDataCallCount() const {
+ base::AutoLock locker(lock_);
+ return end_read_data_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetAddAwakableCallCount() const {
+ base::AutoLock locker(lock_);
+ return add_awakable_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetRemoveAwakableCallCount() const {
+ base::AutoLock locker(lock_);
+ return remove_awakable_call_count_;
+}
+
+unsigned CoreTestBase_MockHandleInfo::GetCancelAllAwakablesCallCount() const {
+ base::AutoLock locker(lock_);
+ return cancel_all_awakables_call_count_;
+}
+
+size_t CoreTestBase_MockHandleInfo::GetAddedAwakableSize() const {
+ base::AutoLock locker(lock_);
+ return added_awakables_.size();
+}
+
+Awakable* CoreTestBase_MockHandleInfo::GetAddedAwakableAt(unsigned i) const {
+ base::AutoLock locker(lock_);
+ return added_awakables_[i];
+}
+
+void CoreTestBase_MockHandleInfo::IncrementCtorCallCount() {
+ base::AutoLock locker(lock_);
+ ctor_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementDtorCallCount() {
+ base::AutoLock locker(lock_);
+ dtor_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementCloseCallCount() {
+ base::AutoLock locker(lock_);
+ close_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementWriteMessageCallCount() {
+ base::AutoLock locker(lock_);
+ write_message_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementReadMessageCallCount() {
+ base::AutoLock locker(lock_);
+ read_message_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementWriteDataCallCount() {
+ base::AutoLock locker(lock_);
+ write_data_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementBeginWriteDataCallCount() {
+ base::AutoLock locker(lock_);
+ begin_write_data_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementEndWriteDataCallCount() {
+ base::AutoLock locker(lock_);
+ end_write_data_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementReadDataCallCount() {
+ base::AutoLock locker(lock_);
+ read_data_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementBeginReadDataCallCount() {
+ base::AutoLock locker(lock_);
+ begin_read_data_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementEndReadDataCallCount() {
+ base::AutoLock locker(lock_);
+ end_read_data_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementAddAwakableCallCount() {
+ base::AutoLock locker(lock_);
+ add_awakable_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementRemoveAwakableCallCount() {
+ base::AutoLock locker(lock_);
+ remove_awakable_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::IncrementCancelAllAwakablesCallCount() {
+ base::AutoLock locker(lock_);
+ cancel_all_awakables_call_count_++;
+}
+
+void CoreTestBase_MockHandleInfo::AllowAddAwakable(bool alllow) {
+ base::AutoLock locker(lock_);
+ add_awakable_allowed_ = alllow;
+}
+
+bool CoreTestBase_MockHandleInfo::IsAddAwakableAllowed() const {
+ base::AutoLock locker(lock_);
+ return add_awakable_allowed_;
+}
+
+void CoreTestBase_MockHandleInfo::AwakableWasAdded(Awakable* awakable) {
+ base::AutoLock locker(lock_);
+ added_awakables_.push_back(awakable);
+}
+
+} // namespace test
+} // namespace edk
+} // namespace mojo