/** @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(
}
}
+ /**
+ * @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;
return $job;
}
+ /**
+ * @see JobQueue::doAck
+ *
+ * @param Job $job
+ */
protected function doAck( Job $job ) {
if ( $this->getAcquiredCount() == 0 ) {
return;
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] );
}
}
+ /**
+ * @see JobQueue::getAllQueuedJobs
+ *
+ * @return Iterator of Job objects.
+ */
public function getAllQueuedJobs() {
$unclaimed = $this->getQueueData( 'unclaimed' );
if ( !$unclaimed ) {
);
}
+ /**
+ * @see JobQueue::getAllAcquiredJobs
+ *
+ * @return Iterator of Job objects.
+ */
public function getAllAcquiredJobs() {
$claimed = $this->getQueueData( 'claimed' );
if ( !$claimed ) {
);
}
+ /**
+ * @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 ) {
*/
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() );
}
}