/**
* @test
*/
public function basicRulesAndTasksWork()
{
$task1 = new ProcessCallbackTask(function () {
touch(__DIR__ . "/task1.temp");
for ($i = 0; $i < 10; $i++) {
usleep(50000);
}
unlink(__DIR__ . "/task1.temp");
});
$task2 = new ProcessCallbackTask(function () {
touch(__DIR__ . "/task2.temp");
for ($i = 0; $i < 10; $i++) {
usleep(50000);
}
unlink(__DIR__ . "/task2.temp");
});
$rule = new InMemoryRule();
$rule->setProcesses(1);
$rule->setMinimumProcessorUsage(0);
$rule->setMaximumProcessorUsage(100);
$added = false;
$this->manager->addRule($rule);
$this->manager->addTask($task1);
while ($this->manager->tick()) {
usleep(50000);
if (!$added) {
$this->manager->addTask($task2);
$added = true;
}
if (file_exists(__DIR__ . "/task1.temp") && file_exists(__DIR__ . "/task2.temp")) {
$this->fail("Tasks should not be run concurrently");
}
}
$this->manager->removeRule($rule);
$this->manager->addTask($task1);
$this->manager->addTask($task2);
if ($this->manager->tick()) {
usleep(50000);
if (!file_exists(__DIR__ . "/task1.temp") || !file_exists(__DIR__ . "/task2.temp")) {
$this->fail("Tasks should be run concurrently");
}
}
}