public function testKeepRunningOnDamage() { $messages = array(); for ($i = 0; $i < 5; $i++) { $message = array('gateway' => 'test', 'date' => time(), 'order_id' => mt_rand(), 'box' => 'thing' . $i, 'creepiness' => mt_rand()); $messages[] = $message; $this->queue->push($message); } $consumer = new TestingQueueConsumer('test', 0, 3); $consumer->exception = new Exception('Kaboom!'); $count = 0; try { $count = $consumer->dequeueMessages(); } 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($consumer->processed), 'Called callback wrong number of times'); for ($i = 0; $i < 3; $i++) { $this->assertEquals($messages[$i], $consumer->processed[$i], 'Message mutated'); $damaged = $this->getDamagedQueueMessage($messages[$i]); $this->assertEquals($messages[$i], $damaged, 'Should move message to damaged queue when exception is thrown'); } $this->assertEquals($messages[3], $this->queue->pop(), 'message 4 should be at the head of the queue'); }