/**
  * Get the Singleton Object
  *
  * @return tx_caretaker_TestResultRepository
  */
 public function getInstance()
 {
     if (!self::$instance) {
         self::$instance = new tx_caretaker_TestResultRepository();
     }
     return self::$instance;
 }
 function test_getResultRange()
 {
     $instance = new tx_caretaker_InstanceNode(1, 'title', false, '');
     $test = new tx_caretaker_TestNode(0, 'title', $instance, 'tx_caretaker_ping', '');
     $test_result_repository = tx_caretaker_TestResultRepository::getInstance();
     $result_range = $test_result_repository->getRangeByNode($test, time() - 10000, time());
     $this->assertNotNull(count($result_range), 'there are tests found in range');
 }
 /**
  * @param tx_caretaker_TestResult $result
  * @return tx_caretaker_TestResult
  */
 public function getPreviousDifferingResult($result)
 {
     $testResultRepository = tx_caretaker_TestResultRepository::getInstance();
     return $testResultRepository->getPreviousDifferingResult($this, $result);
 }
 /**
  *
  * @param tx_caretaker_TestServiceInterface $testService
  * @param tx_caretaker_TestNode $node
  * @param tx_caretaker_NodeResult $latestTestResult
  * @param array $options
  * @return tx_caretaker_NodeResult
  */
 protected function executeTestServiceRun($testService, $node, $latestTestResult, $options)
 {
     // check wether the test can be executed
     if ($testService && $testService->isExecutable()) {
         try {
             $result = $testService->runTest();
         } catch (Exception $e) {
             $result = tx_caretaker_TestResult::create(tx_caretaker_Constants::state_error, 0, '{LLL:EXT:caretaker/locallang_fe.xml:service_exception}' . $e->getMessage);
         }
         // retry if not ok and retrying is enabled
         if ($result->getState() != 0 && $node->getTestRetry() > 0) {
             $round = 0;
             while ($round < $node->getTestRetry() && $result->getState() != 0) {
                 // TODO make sleep time between retry configurable
                 sleep(1);
                 try {
                     $result = $testService->runTest();
                 } catch (Exception $e) {
                     $result = tx_caretaker_TestResult::create(tx_caretaker_Constants::state_error, 0, '{LLL:EXT:caretaker/locallang_fe.xml:service_exception}' . $e->getMessage);
                 }
                 $round++;
             }
             $result->addSubMessage(new tx_caretaker_ResultMessage('LLL:EXT:caretaker/locallang_fe.xml:retry_info', array('number' => $round)));
         }
         // save to repository after reading the previous result
         $resultRepository = tx_caretaker_TestResultRepository::getInstance();
         $resultRepository->saveTestResultForNode($node, $result);
         // trigger notification
         $node->notify('updatedTestResult', $result, $latestTestResult);
         return $result;
     } else {
         $result = tx_caretaker_TestResult::undefined();
         $result->addSubMessage(new tx_caretaker_ResultMessage('test service was not executable this time so the cached result is used'));
         $node->notify('cachedTestResult', $result, $latestTestResult);
         return $latestTestResult;
     }
 }
 /**
  * Get the TestResultRange for the Offset and Limit
  *
  * @see caretaker/trunk/classes/nodes/tx_caretaker_AbstractNode#getTestResultRange()
  * @param int $offset
  * @param boolean $graph True by default. Used in the result range repository the specify the handling of the last result. For more information see tx_caretaker_testResultRepository.
  * @return tx_caretaker_TestResultRange
  */
 public function getTestResultRangeByOffset($offset = 0, $limit = 10)
 {
     $test_result_repository = tx_caretaker_TestResultRepository::getInstance();
     $resultRange = $test_result_repository->getResultRangeByNodeAndOffset($this, $offset, $limit);
     return $resultRange;
 }