Add per-partition JobQueueRedis aggregation
[lhc/web/wiklou.git] / tests / phpunit / includes / jobqueue / JobQueueTest.php
index ea1a4f6..bb74e95 100644 (file)
@@ -19,8 +19,6 @@ class JobQueueTest extends MediaWikiTestCase {
                global $wgJobTypeConf;
                parent::setUp();
 
-               $this->setMwGlobals( 'wgMemc', new HashBagOStuff() );
-
                if ( $this->getCliArg( 'use-jobqueue' ) ) {
                        $name = $this->getCliArg( 'use-jobqueue' );
                        if ( !isset( $wgJobTypeConf[$name] ) ) {
@@ -128,8 +126,6 @@ class JobQueueTest extends MediaWikiTestCase {
                $queue->flushCaches();
                if ( $recycles ) {
                        $this->assertEquals( 1, $queue->getAcquiredCount(), "Active job count ($desc)" );
-               } else {
-                       $this->assertEquals( 0, $queue->getAcquiredCount(), "Active job count ($desc)" );
                }
 
                $job2 = $queue->pop();
@@ -139,8 +135,6 @@ class JobQueueTest extends MediaWikiTestCase {
                $queue->flushCaches();
                if ( $recycles ) {
                        $this->assertEquals( 2, $queue->getAcquiredCount(), "Active job count ($desc)" );
-               } else {
-                       $this->assertEquals( 0, $queue->getAcquiredCount(), "Active job count ($desc)" );
                }
 
                $queue->ack( $job1 );
@@ -148,8 +142,6 @@ class JobQueueTest extends MediaWikiTestCase {
                $queue->flushCaches();
                if ( $recycles ) {
                        $this->assertEquals( 1, $queue->getAcquiredCount(), "Active job count ($desc)" );
-               } else {
-                       $this->assertEquals( 0, $queue->getAcquiredCount(), "Active job count ($desc)" );
                }
 
                $queue->ack( $job2 );
@@ -215,8 +207,6 @@ class JobQueueTest extends MediaWikiTestCase {
                $this->assertEquals( 0, $queue->getSize(), "Queue is empty ($desc)" );
                if ( $recycles ) {
                        $this->assertEquals( 1, $queue->getAcquiredCount(), "Active job count ($desc)" );
-               } else {
-                       $this->assertEquals( 0, $queue->getAcquiredCount(), "Active job count ($desc)" );
                }
 
                $queue->ack( $job1 );
@@ -225,6 +215,29 @@ class JobQueueTest extends MediaWikiTestCase {
                $this->assertEquals( 0, $queue->getAcquiredCount(), "Active job count ($desc)" );
        }
 
+       /**
+        * @dataProvider provider_queueLists
+        * @covers JobQueue
+        */
+       public function testDeduplicationWhileClaimed( $queue, $recycles, $desc ) {
+               $queue = $this->$queue;
+               if ( !$queue ) {
+                       $this->markTestSkipped( $desc );
+               }
+
+               $job = $this->newDedupedJob();
+               $queue->push( $job );
+
+               // De-duplication does not apply to already-claimed jobs
+               $j = $queue->pop();
+               $queue->push( $job );
+               $queue->ack( $j );
+
+               $j = $queue->pop();
+               // Make sure ack() of the twin did not delete the sibling data
+               $this->assertType( 'NullJob', $j );
+       }
+
        /**
         * @dataProvider provider_queueLists
         * @covers JobQueue
@@ -319,6 +332,25 @@ class JobQueueTest extends MediaWikiTestCase {
                $this->assertEquals( 0, $queue->getAcquiredCount(), "No jobs active ($desc)" );
        }
 
+       /**
+        * @covers JobQueue
+        */
+       public function testQueueAggregateTable() {
+               $queue = $this->queueFifo;
+               if ( !$queue || !method_exists( $queue, 'getServerQueuesWithJobs' ) ) {
+                       $this->markTestSkipped();
+               }
+
+               $this->assertArrayEquals( array(), $queue->getServerQueuesWithJobs() );
+
+               $queue->push( $this->newJob( 0 ) );
+
+               $this->assertArrayEquals(
+                       array( array( $queue->getType(), $queue->getWiki() ) ),
+                       $queue->getServerQueuesWithJobs()
+               );
+       }
+
        public static function provider_queueLists() {
                return array(
                        array( 'queueRand', false, 'Random queue without ack()' ),