/**
  * Test `started` manual callback
  */
 public function testStoppedManual()
 {
     $this->TaskClient->add('ls', '', array('-l'));
     $task = $this->TaskServer->getPending();
     $this->TaskServer->stopped($task, true);
     $startedTask = $this->TaskClient->find('first', array('conditions' => array('id' => $task['id'])));
     $this->assertEqual($startedTask['Task']['status'], TaskType::STOPPED);
 }
 /**
  * Test task restarting
  * 
  * @param array $task
  * @param int $taskId
  * @param array $newTask
  * @param string $exception
  * @dataProvider restartProvider
  */
 public function testRestart(array $task, $taskId, array $newTask, $exception)
 {
     if ($exception) {
         $this->expectException($exception);
     }
     if ($task) {
         $this->assertTrue((bool) $this->TaskClient->save($task), 'Can\'t save task for test');
     }
     $newTaskId = $this->TaskClient->restart($taskId);
     if (!$newTask) {
         $this->assertFalse($newTaskId);
     } else {
         $this->assertNotEquals($taskId, $newTask);
         $this->assertEqual($newTask, $this->TaskClient->find('first', array('fields' => array('id', 'process_id', 'server_id', 'command', 'path', 'arguments', 'hash', 'status', 'code', 'code_string', 'stdout', 'stderr', 'details', 'timeout', 'scheduled', 'started', 'stopped', 'errored', 'runtime', 'waittime'), 'conditions' => array('id' => $newTaskId), 'contain' => array('DependsOnTask' => array('fields' => array('id', 'process_id', 'server_id', 'command', 'path', 'arguments', 'hash', 'status', 'code', 'code_string', 'stdout', 'stderr', 'details', 'timeout', 'scheduled'))))));
     }
 }
 /**
  * Approximate runtime of the command
  * 
  * @param string $command
  * @return int
  */
 public function approximateRuntime($command)
 {
     $tasks = $this->Task->find('list', array('conditions' => array('command' => $command, 'status' => TaskType::FINISHED, 'runtime >' => 0), 'fields' => array('id', 'runtime'), 'limit' => Configure::read('Task.approximateLimit'), 'order' => array('id' => 'DESC')));
     return $tasks ? (int) round(array_sum($tasks) / count($tasks)) : 0;
 }