From 793dbbb870657541c1d9b7c2ccd7628214d4a3fb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thiemo=20M=C3=A4ttig?= Date: Fri, 15 Jan 2016 10:28:30 +0100 Subject: [PATCH] More complete, more straightforward JobQueueMemoryTest I created a basic test yesterday to cover two bugs. Now the test covers all public methods. I was also able to get rid of the test double. Change-Id: I53110280e3ef7b7a72d175b11b7fc4ccf1d648b3 --- includes/jobqueue/JobQueueMemory.php | 66 ++++++++++++++++++- .../includes/jobqueue/JobQueueMemoryTest.php | 51 +++++++++++--- 2 files changed, 106 insertions(+), 11 deletions(-) diff --git a/includes/jobqueue/JobQueueMemory.php b/includes/jobqueue/JobQueueMemory.php index d9b30c729e..7dad748798 100644 --- a/includes/jobqueue/JobQueueMemory.php +++ b/includes/jobqueue/JobQueueMemory.php @@ -33,10 +33,15 @@ class JobQueueMemory extends JobQueue { /** @var array[] */ protected static $data = array(); + /** + * @see JobQueue::doBatchPush + * + * @param IJobSpecification[] $jobs + * @param int $flags + */ protected function doBatchPush( array $jobs, $flags ) { $unclaimed =& $this->getQueueData( 'unclaimed', array() ); - /** @var IJobSpecification[] $jobs */ foreach ( $jobs as $job ) { if ( $job->ignoreDuplicates() ) { $sha1 = Wikimedia\base_convert( @@ -52,30 +57,60 @@ class JobQueueMemory extends JobQueue { } } + /** + * @see JobQueue::supportedOrders + * + * @return string[] + */ protected function supportedOrders() { return array( 'random', 'timestamp', 'fifo' ); } + /** + * @see JobQueue::optimalOrder + * + * @return string + */ protected function optimalOrder() { return 'fifo'; } + /** + * @see JobQueue::doIsEmpty + * + * @return bool + */ protected function doIsEmpty() { return ( $this->doGetSize() == 0 ); } + /** + * @see JobQueue::doGetSize + * + * @return int + */ protected function doGetSize() { $unclaimed = $this->getQueueData( 'unclaimed' ); return $unclaimed ? count( $unclaimed ) : 0; } + /** + * @see JobQueue::doGetAcquiredCount + * + * @return int + */ protected function doGetAcquiredCount() { $claimed = $this->getQueueData( 'claimed' ); return $claimed ? count( $claimed ) : 0; } + /** + * @see JobQueue::doPop + * + * @return Job|bool + */ protected function doPop() { if ( $this->doGetSize() == 0 ) { return false; @@ -103,6 +138,11 @@ class JobQueueMemory extends JobQueue { return $job; } + /** + * @see JobQueue::doAck + * + * @param Job $job + */ protected function doAck( Job $job ) { if ( $this->getAcquiredCount() == 0 ) { return; @@ -112,6 +152,9 @@ class JobQueueMemory extends JobQueue { unset( $claimed[$job->metadata['claimId']] ); } + /** + * @see JobQueue::doDelete + */ protected function doDelete() { if ( isset( self::$data[$this->type][$this->wiki] ) ) { unset( self::$data[$this->type][$this->wiki] ); @@ -121,6 +164,11 @@ class JobQueueMemory extends JobQueue { } } + /** + * @see JobQueue::getAllQueuedJobs + * + * @return Iterator of Job objects. + */ public function getAllQueuedJobs() { $unclaimed = $this->getQueueData( 'unclaimed' ); if ( !$unclaimed ) { @@ -136,6 +184,11 @@ class JobQueueMemory extends JobQueue { ); } + /** + * @see JobQueue::getAllAcquiredJobs + * + * @return Iterator of Job objects. + */ public function getAllAcquiredJobs() { $claimed = $this->getQueueData( 'claimed' ); if ( !$claimed ) { @@ -151,10 +204,21 @@ class JobQueueMemory extends JobQueue { ); } + /** + * @param IJobSpecification $spec + * + * @return Job + */ public function jobFromSpecInternal( IJobSpecification $spec ) { return Job::factory( $spec->getType(), $spec->getTitle(), $spec->getParams() ); } + /** + * @param string $field + * @param mixed $init + * + * @return mixed + */ private function &getQueueData( $field, $init = null ) { if ( !isset( self::$data[$this->type][$this->wiki][$field] ) ) { if ( $init !== null ) { diff --git a/tests/phpunit/includes/jobqueue/JobQueueMemoryTest.php b/tests/phpunit/includes/jobqueue/JobQueueMemoryTest.php index a9f7e0edc5..178a6a603a 100644 --- a/tests/phpunit/includes/jobqueue/JobQueueMemoryTest.php +++ b/tests/phpunit/includes/jobqueue/JobQueueMemoryTest.php @@ -10,21 +10,52 @@ */ class JobQueueMemoryTest extends PHPUnit_Framework_TestCase { - public function testGetAllQueuedJobs() { - $instance = JobQueueMemoryDouble::newInstance( array( - 'wiki' => null, - 'type' => null, + /** + * @return JobQueueMemory + */ + private function newJobQueue() { + return JobQueue::factory( array( + 'class' => 'JobQueueMemory', + 'wiki' => wfWikiID(), + 'type' => 'null', ) ); - $actual = $instance->getAllQueuedJobs(); - $this->assertEquals( new ArrayIterator(), $actual ); } -} + private function newJobSpecification() { + return new JobSpecification( + 'null', + array( 'customParameter' => null ), + array(), + Title::newFromText( 'Custom title' ) + ); + } + + public function testGetAllQueuedJobs() { + $queue = $this->newJobQueue(); + $this->assertCount( 0, $queue->getAllQueuedJobs() ); -class JobQueueMemoryDouble extends JobQueueMemory { + $queue->push( $this->newJobSpecification() ); + $this->assertCount( 1, $queue->getAllQueuedJobs() ); + } + + public function testGetAllAcquiredJobs() { + $queue = $this->newJobQueue(); + $this->assertCount( 0, $queue->getAllAcquiredJobs() ); + + $queue->push( $this->newJobSpecification() ); + $this->assertCount( 0, $queue->getAllAcquiredJobs() ); + + $queue->pop(); + $this->assertCount( 1, $queue->getAllAcquiredJobs() ); + } - public static function newInstance( array $params ) { - return new self( $params ); + public function testJobFromSpecInternal() { + $queue = $this->newJobQueue(); + $job = $queue->jobFromSpecInternal( $this->newJobSpecification() ); + $this->assertInstanceOf( 'Job', $job ); + $this->assertSame( 'null', $job->getType() ); + $this->assertArrayHasKey( 'customParameter', $job->getParams() ); + $this->assertSame( 'Custom title', $job->getTitle()->getText() ); } } -- 2.20.1