TEST(BasicThreadTest, Stop) { MockThread m; m.start(nullptr); boost::this_thread::sleep(boost::posix_time::milliseconds(100)); EXPECT_TRUE(m.isRunning()); m.stop(); EXPECT_TRUE(m.didBeforeStop); EXPECT_FALSE(m.isRunning()); }
TEST(BasicThreadTest, RunTimeManagement) { MockThread m; EXPECT_EQ(-1, m.count); std::shared_ptr<Barrier> barrier = std::make_shared<Barrier>(2); EXPECT_FALSE(m.didInitialize); EXPECT_FALSE(m.didStartUp); EXPECT_FALSE(m.isRunning()); m.start(barrier); boost::this_thread::sleep(boost::posix_time::milliseconds(100)); EXPECT_TRUE(m.isRunning()); EXPECT_TRUE(m.didInitialize); EXPECT_FALSE(m.didStartUp); barrier->wait(true); boost::this_thread::sleep(boost::posix_time::milliseconds(100)); EXPECT_TRUE(m.didInitialize); EXPECT_TRUE(m.didStartUp); barrier->wait(true); boost::this_thread::sleep(boost::posix_time::milliseconds(100)); m.stop(); }
TEST(BasicThreadTest, StopWithoutSleep) { for (int i = 0; i < 10; ++i) { MockThread m; m.count = 1000000; m.start(nullptr); // Stopping right away should not create a race condition. m.stop(); EXPECT_TRUE(m.didBeforeStop); EXPECT_FALSE(m.isRunning()); } }