/* * Copyright (c) 2018-present, Facebook, Inc. * * 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 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 sonarEventBase = new EventBase(); auto connectionEventBase = new EventBase(); auto sonarThread = std::thread([sonarEventBase](){ sonarEventBase->loopForever(); }); auto connectionThread = std::thread([connectionEventBase](){ connectionEventBase->loopForever(); }); auto config = FlipperInitConfig { DeviceData {}, sonarEventBase, connectionEventBase }; auto instance = std::make_shared(config, state, contextStore); instance->start(); sonarEventBase->terminateLoopSoon(); connectionEventBase->terminateLoopSoon(); sonarThread.join(); connectionThread.join(); } } // namespace test } // namespace flipper } // namespace facebook