/**
  * @group retry
  */
 public function testRetry()
 {
     $job = new Job('jms-job-queue:sometimes-failing-cmd', array(time()));
     $job->setMaxRetries(5);
     $this->em->persist($job);
     $this->em->flush($job);
     $this->doRun(array('--max-runtime' => 12, '--verbose' => null));
     $this->assertEquals('finished', $job->getState());
     $this->assertCount(2, $job->getRetryJobs());
     $this->assertEquals(1, $job->getExitCode());
     $this->assertEquals('failed', $job->getRetryJobs()->get(0)->getState());
     $this->assertEquals(1, $job->getRetryJobs()->get(0)->getExitCode());
     $this->assertEquals('finished', $job->getRetryJobs()->get(1)->getState());
     $this->assertEquals(0, $job->getRetryJobs()->get(1)->getExitCode());
 }
 public function testIsRetryAllowed()
 {
     $job = new Job('a');
     $this->assertFalse($job->isRetryAllowed());
     $job->setMaxRetries(1);
     $this->assertTrue($job->isRetryAllowed());
     $job->setState('running');
     $retry = new Job('a');
     $job->addRetryJob($retry);
     $this->assertFalse($job->isRetryAllowed());
 }
 public function testCloseJobDoesNotCreateMoreThanAllowedRetries()
 {
     $a = new Job('a');
     $a->setMaxRetries(2);
     $a->setState('running');
     $this->em->persist($a);
     $this->em->flush();
     $this->dispatcher->expects($this->at(0))->method('dispatch')->with('jms_job_queue.job_state_change', new StateChangeEvent($a, 'failed'));
     $this->dispatcher->expects($this->at(1))->method('dispatch')->with('jms_job_queue.job_state_change', new \PHPUnit_Framework_Constraint_Not($this->equalTo(new StateChangeEvent($a, 'failed'))));
     $this->dispatcher->expects($this->at(2))->method('dispatch')->with('jms_job_queue.job_state_change', new \PHPUnit_Framework_Constraint_Not($this->equalTo(new StateChangeEvent($a, 'failed'))));
     $this->assertCount(0, $a->getRetryJobs());
     $this->repo->closeJob($a, 'failed');
     $this->assertEquals('running', $a->getState());
     $this->assertCount(1, $a->getRetryJobs());
     $a->getRetryJobs()->first()->setState('running');
     $this->repo->closeJob($a->getRetryJobs()->first(), 'failed');
     $this->assertCount(2, $a->getRetryJobs());
     $this->assertEquals('failed', $a->getRetryJobs()->first()->getState());
     $this->assertEquals('running', $a->getState());
     $a->getRetryJobs()->last()->setState('running');
     $this->repo->closeJob($a->getRetryJobs()->last(), 'terminated');
     $this->assertCount(2, $a->getRetryJobs());
     $this->assertEquals('terminated', $a->getRetryJobs()->last()->getState());
     $this->assertEquals('terminated', $a->getState());
     $this->em->clear();
     $reloadedA = $this->em->find('JMSJobQueueBundle:Job', $a->getId());
     $this->assertCount(2, $reloadedA->getRetryJobs());
 }