10#include <unordered_map>
12#include <userver/components/component_fwd.hpp>
13#include <userver/concurrent/variable.hpp>
14#include <userver/engine/task/task_with_result.hpp>
16USERVER_NAMESPACE_BEGIN
20class TaskNotFound
final :
public std::runtime_error {
21 using std::runtime_error::runtime_error;
24class TaskAlreadyRunning
final :
public std::runtime_error {
25 using std::runtime_error::runtime_error;
37class TestsuiteTasks
final {
40 using TaskCallback = std::function<
void()>;
42 explicit TestsuiteTasks(
bool is_enabled);
96 std::atomic<
bool> running_flag{
false};
97 TaskCallback callback;
101 std::atomic<
bool> busy_flag{
false};
106 std::shared_ptr<Entry> GetEntryFor(
const std::string& name);
107 std::shared_ptr<SpawnedTask> GetSpawnedFor(
const std::string& task_id);
109 const bool is_enabled_;
111 using TasksMap = std::unordered_map<std::string, std::shared_ptr<Entry>>;
112 concurrent::Variable<TasksMap> tasks_;
115 std::unordered_map<std::string, std::shared_ptr<SpawnedTask>>;
116 concurrent::Variable<SpawnedMap> spawned_;
122 const components::ComponentContext& component_context);