public function testDestroy() { $instance1 = Registry::getInstance(); Registry::destroy(); $instance2 = Registry::getInstance(); $this->assertNotSame($instance1, $instance2); }
public function testProcess() { $past = time() - 100; // only past should run $job = $this->getJob(Repository\Job::STATUS_PENDING, $past); $cron = $this->getMock('Yalesov\\Cron\\Service\\Cron', array('getPending'))->setEm($this->em); $cron->expects($this->any())->method('getPending')->will($this->returnValue(array($job))); $dummy = $this->getDummy(); $dummy->expects($this->once())->method('run'); $cron->register('time', '* * * * *', array($dummy, 'run'), array()); $cron->process(); $this->assertSame(Repository\Job::STATUS_SUCCESS, $job->getStatus()); $this->assertSame(null, $job->getErrorMsg()); $this->assertSame(null, $job->getStackTrace()); $this->assertNotEmpty($job->getExecuteTime()); $this->assertNotEmpty($job->getFinishTime()); // future should not run $job = $this->getJob(Repository\Job::STATUS_PENDING, time() + 100); $cron = $this->getMock('Yalesov\\Cron\\Service\\Cron', array('getPending'))->setEm($this->em); $cron->expects($this->any())->method('getPending')->will($this->returnValue(array($job))); $dummy = $this->getDummy(); $dummy->expects($this->never())->method('run'); $cron->register('time', '* * * * *', array($dummy, 'run'), array()); $cron->process(); $this->assertSame(Repository\Job::STATUS_PENDING, $job->getStatus()); $this->assertSame(null, $job->getErrorMsg()); $this->assertSame(null, $job->getStackTrace()); $this->assertNull($job->getExecuteTime()); $this->assertNull($job->getFinishTime()); // cron job throwing exceptions $job = $this->getJob(Repository\Job::STATUS_PENDING, $past); $cron = $this->getMock('Yalesov\\Cron\\Service\\Cron', array('getPending'))->setEm($this->em); $cron->expects($this->any())->method('getPending')->will($this->returnValue(array($job))); $dummy = $this->getDummy(); $dummy->expects($this->once())->method('run')->will($this->throwException(new \RuntimeException('foo runtime exception'))); $cron->register('time', '* * * * *', array($dummy, 'run'), array()); $cron->process(); $this->assertSame(Repository\Job::STATUS_ERROR, $job->getStatus()); $this->assertSame('foo runtime exception', $job->getErrorMsg()); $this->assertNotEmpty($job->getStackTrace()); $this->assertNotEmpty($job->getExecuteTime()); $this->assertNull($job->getFinishTime()); // too late for job $job = $this->getJob(Repository\Job::STATUS_PENDING, $past); $cron = $this->getMock('Yalesov\\Cron\\Service\\Cron', array('getPending'))->setScheduleLifetime(0)->setEm($this->em); $cron->expects($this->any())->method('getPending')->will($this->returnValue(array($job))); $dummy = $this->getDummy(); $dummy->expects($this->never())->method('run'); $cron->register('time', '* * * * *', array($dummy, 'run'), array()); $cron->process(); $this->assertSame(Repository\Job::STATUS_MISSED, $job->getStatus()); $this->assertSame('too late for job', $job->getErrorMsg()); $this->assertNotEmpty($job->getStackTrace()); $this->assertNull($job->getExecuteTime()); $this->assertNull($job->getFinishTime()); // job not registered $job = $this->getJob(Repository\Job::STATUS_PENDING, $past); $cron = $this->getMock('Yalesov\\Cron\\Service\\Cron', array('getPending'))->setEm($this->em); $cron->expects($this->any())->method('getPending')->will($this->returnValue(array($job))); $dummy = $this->getDummy(); $dummy->expects($this->never())->method('run'); Registry::destroy(); $cron->process(); $this->assertSame(Repository\Job::STATUS_ERROR, $job->getStatus()); $this->assertSame('job "time" undefined in cron registry', $job->getErrorMsg()); $this->assertNotEmpty($job->getStackTrace()); $this->assertNull($job->getExecuteTime()); $this->assertNull($job->getFinishTime()); }