| // Copyright 2021 The Fuchsia 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 <lib/async-loop/cpp/loop.h> |
| #include <lib/async-loop/default.h> |
| #include <lib/fidl/cpp/wire/client_base.h> |
| #include <lib/fidl/cpp/wire/internal/transport_channel.h> |
| #include <lib/zx/channel.h> |
| |
| #include <sanitizer/lsan_interface.h> |
| #include <zxtest/zxtest.h> |
| |
| #include "lsan_disabler.h" |
| #include "mock_client_impl.h" |
| |
| using ::fidl_testing::TestProtocol; |
| |
| namespace fidl { |
| namespace internal { |
| |
| TEST(ClientController, BindingTwicePanics) { |
| async::Loop loop(&kAsyncLoopConfigNoAttachToCurrentThread); |
| zx::channel h1, h2; |
| ASSERT_OK(zx::channel::create(0, &h1, &h2)); |
| ClientController controller; |
| fidl::WireAsyncEventHandler<TestProtocol>* event_handler = nullptr; |
| |
| controller.Bind(MakeAnyTransport(std::move(h1)), loop.dispatcher(), |
| MakeAnyEventDispatcher(event_handler), event_handler, |
| fidl::AnyTeardownObserver::Noop(), |
| ThreadingPolicy::kCreateAndTeardownFromAnyThread); |
| |
| ASSERT_DEATH([&] { |
| fidl_testing::RunWithLsanDisabled([&] { |
| controller.Bind(MakeAnyTransport(std::move(h2)), loop.dispatcher(), |
| MakeAnyEventDispatcher(event_handler), event_handler, |
| fidl::AnyTeardownObserver::Noop(), |
| ThreadingPolicy::kCreateAndTeardownFromAnyThread); |
| }); |
| }); |
| } |
| |
| } // namespace internal |
| } // namespace fidl |