/**
  * Set the current queue to finished
  * Will archive the task after execution
  * @param string id (optional)
  * @param mixed result to save back
  * @return boolean success
  */
 private function __setFinished($id = null, $result = null)
 {
     if ($id) {
         $this->id = $id;
     }
     if (!$this->exists()) {
         return $this->__errorAndExit("QueueTask {$this->id} not found.");
     }
     $save_result = json_encode($result);
     $this->saveField('status', 3);
     $this->saveField('result', $save_result);
     $this->saveField('end_time', microtime(true));
     $this->saveField('executed', $this->str2datetime());
     QueueUtil::writeLog('Finished Execution on Task: ' . $this->id . "\nTook: " . $this->field('execution_time') . "\nResult:\n\n" . $save_result);
     if (QueueUtil::getConfig('archiveAfterExecute')) {
         $this->archive($this->id);
     }
     return true;
 }
 public function test_typeValidateAllowed()
 {
     QueueUtil::getConfig('allowedTypes');
     QueueUtil::$configs['allowedTypes'] = array(1, 2);
     $data = array('QueueTask' => array('type' => 3, 'command' => '/url/to/queue'));
     $count = $this->QueueTask->find('count');
     $result = $this->QueueTask->save($data);
     $this->assertFalse($result);
     $this->assertEqual($this->QueueTask->find('count'), $count);
     $this->assertTrue(!empty($this->QueueTask->validationErrors['type']));
     //But a valid type works
     $data = array('QueueTask' => array('type' => 1, 'command' => 'Model::action()'));
     $result = $this->QueueTask->save($data);
     $this->assertTrue(!empty($result));
     $this->assertEqual($this->QueueTask->find('count'), $count + 1);
     $this->assertTrue(empty($this->QueueTask->validationErrors['type']));
 }