/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include #include #include #include namespace facebook { namespace flipper { namespace test { using folly::EventBase; class FlipperConnectionManagerImplTerminationTest : public ::testing::Test { protected: std::shared_ptr state; std::shared_ptr contextStore; void SetUp() override { // Folly singletons must be registered before they are used. // Without this, test fails in phabricator. folly::SingletonVault::singleton()->registrationComplete(); state = std::make_shared(); contextStore = std::make_shared(); } }; TEST_F( FlipperConnectionManagerImplTerminationTest, testNullEventBaseGetsRejected) { try { auto instance = std::make_shared( FlipperInitConfig{DeviceData{}, nullptr, new EventBase()}, state, contextStore); FAIL(); } catch (std::invalid_argument& e) { // Pass test } try { auto instance = std::make_shared( FlipperInitConfig{DeviceData{}, new EventBase(), nullptr}, state, contextStore); FAIL(); } catch (std::invalid_argument& e) { // Pass test } } TEST_F( FlipperConnectionManagerImplTerminationTest, testNonStartedEventBaseDoesntHang) { auto config = FlipperInitConfig{DeviceData{}, new EventBase(), new EventBase()}; auto instance = std::make_shared( config, state, contextStore); instance->start(); } TEST_F( FlipperConnectionManagerImplTerminationTest, testStartedEventBaseDoesntHang) { auto flipperEventBase = new EventBase(); auto connectionEventBase = new EventBase(); auto flipperThread = std::thread([flipperEventBase]() { flipperEventBase->loopForever(); }); auto connectionThread = std::thread( [connectionEventBase]() { connectionEventBase->loopForever(); }); auto config = FlipperInitConfig{DeviceData{}, flipperEventBase, connectionEventBase}; auto instance = std::make_shared( config, state, contextStore); instance->start(); flipperEventBase->terminateLoopSoon(); connectionEventBase->terminateLoopSoon(); flipperThread.join(); connectionThread.join(); } } // namespace test } // namespace flipper } // namespace facebook