Ejegg has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/303082

Change subject: WIP Subclass QueueConsumer instead of passing callback
......................................................................

WIP Subclass QueueConsumer instead of passing callback

Change-Id: I432d11414033ff27ef216241718c3e058912971c
TODO: convert maintenance scripts
---
R Core/QueueConsumers/BaseQueueConsumer.php
M Tests/QueueConsumerTest.php
A Tests/TestingQueueConsumer.php
3 files changed, 59 insertions(+), 39 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/SmashPig 
refs/changes/82/303082/1

diff --git a/Core/QueueConsumers/QueueConsumer.php 
b/Core/QueueConsumers/BaseQueueConsumer.php
similarity index 100%
rename from Core/QueueConsumers/QueueConsumer.php
rename to Core/QueueConsumers/BaseQueueConsumer.php
diff --git a/Tests/QueueConsumerTest.php b/Tests/QueueConsumerTest.php
index a26a8ef..43993d7 100644
--- a/Tests/QueueConsumerTest.php
+++ b/Tests/QueueConsumerTest.php
@@ -2,10 +2,11 @@
 
 namespace SmashPig\Tests;
 
+use Exception;
 use PDO;
 use PHPQueue\Interfaces\FifoQueueStore;
 use SmashPig\Core\DataStores\DamagedDatabase;
-use SmashPig\Core\DataStores\QueueConsumer;
+use SmashPig\Core\QueueConsumers\BaseQueueConsumer;
 
 class QueueConsumerTest extends BaseSmashPigUnitTestCase {
 
@@ -21,7 +22,7 @@
        public function setUp() {
                parent::setUp();
                $this->setConfig( 'default', __DIR__ . 
'/data/config_queue.yaml' );
-               $this->queue = QueueConsumer::getQueue( 'test' );
+               $this->queue = BaseQueueConsumer::getQueue( 'test' );
                $this->queue->createTable( 'test' );
                $this->damaged = DamagedDatabase::get()->getDatabase();
 
@@ -33,18 +34,13 @@
        }
 
        public function testEmptyQueue() {
-               $noOp = function( $unused ) {};
-               $consumer = new QueueConsumer( 'test', $noOp );
+               $consumer = new TestingQueueConsumer( 'test' );
                $count = $consumer->dequeueMessages();
                $this->assertEquals( 0, $count, 'Should report 0 messages 
processed' );
        }
 
        public function testOneMessage() {
-               $processed = array();
-               $cb = function( $message ) use ( &$processed ) {
-                       $processed[] = $message;
-               };
-               $consumer = new QueueConsumer( 'test', $cb );
+               $consumer = new TestingQueueConsumer( 'test' );
                $payload = array(
                        'wednesday' => 'addams',
                        'spookiness' => mt_rand(),
@@ -52,7 +48,7 @@
                $this->queue->push( $payload );
                $count = $consumer->dequeueMessages();
                $this->assertEquals( 1, $count, 'Should report 1 message 
processed' );
-               $this->assertEquals( array( $payload ), $processed, 'Bad 
message' );
+               $this->assertEquals( array( $payload ), $consumer->processed, 
'Bad message' );
                $this->assertNull( $this->queue->pop(),
                        'Should delete message when processing is successful'
                );
@@ -66,25 +62,23 @@
                        'cousin' => 'itt',
                        'kookiness' => mt_rand(),
                );
-               $self = $this;
-               $ran = false;
-               $cb = function( $message ) use ( &$ran, $payload, $self ) {
-                       $self->assertEquals( $message, $payload );
-                       $ran = true;
-                       throw new \Exception( 'kaboom!' );
-               };
 
-               $consumer = new QueueConsumer( 'test', $cb, 0, 0 );
+               $consumer = new TestingQueueConsumer( 'test' );
+               $consumer->exception = new Exception( 'kaboom!' );
 
                $this->queue->push( $payload );
                try {
                        $consumer->dequeueMessages();
-               } catch ( \Exception $ex ) {
+               } catch ( Exception $ex ) {
                        $this->fail(
                                'Exception should not have bubbled up: ' . 
$ex->getMessage()
                        );
                }
-               $this->assertTrue( $ran, 'Callback was not called' );
+               $this->assertEquals(
+                       array( $payload ),
+                       $consumer->processed,
+                       'Processing snafu'
+               );
 
                $damaged = $this->getDamagedQueueMessage( $payload );
                $this->assertEquals(
@@ -111,23 +105,29 @@
                        $messages[] = $message;
                        $this->queue->push( $message );
                }
-               $processedMessages = array();
-               $callback = function( $message ) use ( &$processedMessages ) {
-                       $processedMessages[] = $message;
-               };
                // Should work when you pass in the limits as strings.
-               $consumer = new QueueConsumer( 'test', $callback, 0, '3' );
+               $consumer = new TestingQueueConsumer( 'test', 0, '3' );
                $count = $consumer->dequeueMessages();
-               $this->assertEquals( 3, $count, 'dequeueMessages returned wrong 
count' );
-               $this->assertEquals( 3, count( $processedMessages ), 'Called 
callback wrong number of times' );
+               $this->assertEquals(
+                       3, $count, 'dequeueMessages returned wrong count'
+               );
+               $this->assertEquals(
+                       3,
+                       count( $consumer->processed ),
+                       'Called callback wrong number of times'
+               );
 
                for ( $i = 0; $i < 3; $i++ ) {
-                       $this->assertEquals( $messages[$i], 
$processedMessages[$i], 'Message mutated' );
+                       $this->assertEquals(
+                               $messages[$i],
+                               $consumer->processed[$i],
+                               'Message mutated'
+                       );
                }
                $this->assertEquals(
                        $messages[3],
                        $this->queue->pop(),
-                       'Messed with too many messages'
+                       'Dequeued too many messages'
                );
        }
 
@@ -144,26 +144,30 @@
                        $messages[] = $message;
                        $this->queue->push( $message );
                }
-               $processedMessages = array();
-               $cb = function( $message ) use ( &$processedMessages ) {
-                       $processedMessages[] = $message;
-                       throw new \Exception( 'kaboom!' );
-               };
 
-               $consumer = new QueueConsumer( 'test', $cb, 0, 3 );
+               $consumer = new TestingQueueConsumer( 'test', 0, 3 );
+               $consumer->exception = new Exception( 'Kaboom!' );
                $count = 0;
                try {
                        $count = $consumer->dequeueMessages();
-               } catch ( \Exception $ex ) {
+               } catch ( Exception $ex ) {
                        $this->fail(
                                'Exception should not have bubbled up: ' . 
$ex->getMessage()
                        );
                }
-               $this->assertEquals( 3, $count, 'dequeueMessages returned wrong 
count' );
-               $this->assertEquals( 3, count( $processedMessages ), 'Called 
callback wrong number of times' );
+               $this->assertEquals(
+                       3, $count, 'dequeueMessages returned wrong count'
+               );
+               $this->assertEquals(
+                       3,
+                       count( $consumer->processed ),
+                       'Called callback wrong number of times'
+               );
 
                for ( $i = 0; $i < 3; $i++ ) {
-                       $this->assertEquals( $messages[$i], 
$processedMessages[$i], 'Message mutated' );
+                       $this->assertEquals(
+                               $messages[$i], $consumer->processed[$i], 
'Message mutated'
+                       );
                        $damaged = $this->getDamagedQueueMessage( $messages[$i] 
);
                        $this->assertEquals(
                                $messages[$i],
diff --git a/Tests/TestingQueueConsumer.php b/Tests/TestingQueueConsumer.php
new file mode 100644
index 0000000..351edd9
--- /dev/null
+++ b/Tests/TestingQueueConsumer.php
@@ -0,0 +1,16 @@
+<?php namespace SmashPig\Tests;
+
+use SmashPig\Core\QueueConsumers\BaseQueueConsumer;
+
+class TestingQueueConsumer extends BaseQueueConsumer {
+
+       public $exception;
+       public $processed = array();
+
+       function processMessage( $message ) {
+               $this->processed[] = $message;
+               if ( $this->exception ) {
+                       throw $this->exception;
+               }
+       }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/303082
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I432d11414033ff27ef216241718c3e058912971c
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/SmashPig
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to