/**
  * @test delivery is created from envelope properties
  */
 public function deliveryFromEnvelope()
 {
     $properties = ['deliveryTag' => 'tag-value', 'exchangeName' => 'exchange.name', 'routingKey' => 'routing.key'];
     $envelope = $this->createEnvelope($properties);
     $envelope->expects($this->any())->method('isRedelivery')->will($this->returnValue(true));
     $delivery = PeclMessageUtils::createDelivery($envelope, 'query');
     $this->assertEquals($properties['deliveryTag'], $delivery->getTag());
     $this->assertEquals($properties['exchangeName'], $delivery->getExchange());
     $this->assertEquals($properties['routingKey'], $delivery->getRoutingKey());
     $this->assertTrue($delivery->isRedelivered());
     $this->assertEquals('query', $delivery->getQueue());
 }
 /**
  * {@inheritDoc}
  */
 public function consume($queue, callable $callback, $timeout)
 {
     $oldTimeout = $this->connection->getReadTimeout();
     $this->connection->setReadTimeout($timeout);
     try {
         $this->getQueue($queue)->consume(function (\AMQPEnvelope $envelope) use($callback, $queue) {
             return call_user_func($callback, PeclMessageUtils::createDelivery($envelope, $queue));
         });
         $this->connection->setReadTimeout($oldTimeout);
         $this->closeChannel();
     } catch (\AMQPConnectionException $e) {
         $this->connection->setReadTimeout($oldTimeout);
         $expectedErrors = array('interrupted system call', 'resource temporarily unavailable');
         foreach ($expectedErrors as $expectedError) {
             if (stripos($e->getMessage(), $expectedError) !== false) {
                 return;
             }
         }
         throw new DriverException('Unexpected error while consuming', $e);
     }
 }