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

Unified Diff: third_party/mojo/src/mojo/public/cpp/bindings/tests/binding_unittest.cc

Issue 1029113005: Update mojo sdk to rev cb6c5abfadfea0ca73dca466e2894554ac1ae144 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment Created 5 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 side-by-side diff with in-line comments
Download patch
Index: third_party/mojo/src/mojo/public/cpp/bindings/tests/binding_unittest.cc
diff --git a/third_party/mojo/src/mojo/public/cpp/bindings/tests/binding_unittest.cc b/third_party/mojo/src/mojo/public/cpp/bindings/tests/binding_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2e38f1314924005daae6c40be2dc50a892a68868
--- /dev/null
+++ b/third_party/mojo/src/mojo/public/cpp/bindings/tests/binding_unittest.cc
@@ -0,0 +1,116 @@
+// Copyright 2015 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/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/environment/environment.h"
+#include "mojo/public/cpp/utility/run_loop.h"
+#include "mojo/public/interfaces/bindings/tests/sample_service.mojom.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace mojo {
+namespace {
+
+class ServiceImpl : public sample::Service {
+ public:
+ ServiceImpl() {}
+ ~ServiceImpl() override {}
+
+ private:
+ // sample::Service implementation
+ void Frobinate(sample::FooPtr foo,
+ BazOptions options,
+ sample::PortPtr port,
+ const FrobinateCallback& callback) override {
+ callback.Run(1);
+ }
+ void GetPort(InterfaceRequest<sample::Port> port) override {}
+};
+
+class RecordingErrorHandler : public ErrorHandler {
+ public:
+ RecordingErrorHandler() : error_(false) {}
+ ~RecordingErrorHandler() override {}
+
+ bool encountered_error() const { return error_; }
+
+ private:
+ // ErrorHandler implementation.
+ void OnConnectionError() override { error_ = true; }
+
+ bool error_;
+};
+
+class BindingTest : public testing::Test {
+ public:
+ BindingTest() {}
+ ~BindingTest() override {}
+
+ protected:
+ RecordingErrorHandler handler_;
+ ServiceImpl impl_;
+ Environment env_;
+ RunLoop loop_;
+};
+
+// Tests that destroying a mojo::Binding closes the bound message pipe handle.
+TEST_F(BindingTest, DestroyClosesMessagePipe) {
+ sample::ServicePtr ptr;
+ auto request = GetProxy(&ptr);
+ ptr.set_error_handler(&handler_);
+ bool called = false;
+ auto called_cb = [&called](int32_t result) { called = true; };
+ {
+ Binding<sample::Service> binding(&impl_, request.Pass());
+ ptr->Frobinate(nullptr, sample::Service::BAZ_OPTIONS_REGULAR, nullptr,
+ called_cb);
+ loop_.RunUntilIdle();
+ EXPECT_TRUE(called);
+ EXPECT_FALSE(handler_.encountered_error());
+ }
+ // Now that the Binding is out of scope we should detect an error on the other
+ // end of the pipe.
+ loop_.RunUntilIdle();
+ EXPECT_TRUE(handler_.encountered_error());
+
+ // And calls should fail.
+ called = false;
+ ptr->Frobinate(nullptr, sample::Service::BAZ_OPTIONS_REGULAR, nullptr,
+ called_cb);
+ loop_.RunUntilIdle();
+ EXPECT_FALSE(called);
+}
+
+// Tests that explicitly calling Unbind followed by rebinding works.
+TEST_F(BindingTest, Unbind) {
+ sample::ServicePtr ptr;
+ Binding<sample::Service> binding(&impl_, GetProxy(&ptr));
+
+ bool called = false;
+ auto called_cb = [&called](int32_t result) { called = true; };
+ ptr->Frobinate(nullptr, sample::Service::BAZ_OPTIONS_REGULAR, nullptr,
+ called_cb);
+ loop_.RunUntilIdle();
+ EXPECT_TRUE(called);
+
+ called = false;
+ auto request = binding.Unbind();
+ EXPECT_FALSE(binding.is_bound());
+ // All calls should fail when not bound...
+ ptr->Frobinate(nullptr, sample::Service::BAZ_OPTIONS_REGULAR, nullptr,
+ called_cb);
+ loop_.RunUntilIdle();
+ EXPECT_FALSE(called);
+
+ called = false;
+ binding.Bind(request.Pass());
+ EXPECT_TRUE(binding.is_bound());
+ // ...and should succeed again when the rebound.
+ ptr->Frobinate(nullptr, sample::Service::BAZ_OPTIONS_REGULAR, nullptr,
+ called_cb);
+ loop_.RunUntilIdle();
+ EXPECT_TRUE(called);
+}
+
+} // namespace
+} // mojo

Powered by Google App Engine
This is Rietveld 408576698