Add more unit test for thread pool

PiperOrigin-RevId: 780348093
This commit is contained in:
Guogang Li
2025-07-07 18:57:22 -07:00
committed by Copybara-Service
parent a2bcb2db27
commit 4d8a018b0e
2 changed files with 42 additions and 2 deletions
@@ -128,12 +128,12 @@ std::optional<uint64_t> ThreadPool::Run(Runnable task, absl::Duration delay,
if (task == nullptr) {
LOG(WARNING) << __func__ << ": Invalid task.";
return false;
return std::nullopt;
}
if (is_shut_down_) {
LOG(WARNING) << __func__ << ": Thread pool is shut down.";
return false;
return std::nullopt;
}
// Closing the timer within its callback is prohibited. The thread pool
@@ -189,6 +189,46 @@ TEST(ThreadPool, CancelRepeatedTaskInCallback) {
pool->ShutDown();
}
TEST(ThreadPool, CreateWithZeroMaxPoolSizeReturnsNull) {
auto pool = ThreadPool::Create(0);
EXPECT_EQ(pool, nullptr);
}
TEST(ThreadPool, RunNullTaskReturnsFalse) {
auto pool = ThreadPool::Create(1);
EXPECT_FALSE(pool->Run(nullptr));
pool->ShutDown();
}
TEST(ThreadPool, RunTaskAfterShutdownReturnsFalse) {
auto pool = ThreadPool::Create(1);
pool->ShutDown();
std::atomic_int value = 0;
EXPECT_FALSE(pool->Run([&]() { value += 1; }));
EXPECT_EQ(value, 0);
}
TEST(ThreadPool, RunDelayedTaskAfterShutdownReturnsNullOpt) {
auto pool = ThreadPool::Create(1);
pool->ShutDown();
std::atomic_int value = 0;
std::optional<uint64_t> delayed_task_id =
pool->Run([&]() { value += 1; }, absl::Seconds(1));
EXPECT_FALSE(delayed_task_id.has_value());
EXPECT_EQ(value, 0);
}
TEST(ThreadPool, ShutdownWithPendingDelayedTasks) {
auto pool = ThreadPool::Create(1);
std::atomic_int value = 0;
std::optional<uint64_t> delayed_task_id =
pool->Run([&]() { value += 1; }, absl::Seconds(2));
EXPECT_TRUE(delayed_task_id.has_value());
absl::SleepFor(absl::Milliseconds(100));
pool->ShutDown();
EXPECT_EQ(value, 0);
}
} // namespace
} // namespace windows
} // namespace nearby