/**
  * Tests a direct-exchange binding with two explicit connections in order
  * to to leverage the autoDelete functionality of the server.
  *
  * @test
  */
 public function testDirectExchangeBindingWithTwoConnections()
 {
     $messageBody = 'message binding using two separate connections';
     $routingKey = 'txqueue_unit_routing';
     $this->service->setPersistentDeliveryMode(FALSE);
     $this->admin->declareExchange(new Tx_Amqp_Messaging_DirectExchange(self::TEST_EXCHANGE, FALSE, TRUE));
     $queue = $this->admin->declareQueue();
     $binding = new Tx_Amqp_Messaging_Binding($queue->getName(), Tx_Amqp_Messaging_Binding::DESTINATION_QUEUE, self::TEST_EXCHANGE, $routingKey);
     $this->admin->declareBinding($binding);
     $producerService = new Tx_Amqp_Messaging_AMQPService($this->connectionFactory);
     $producerService->send(new \PhpAmqpLib\Message\AMQPMessage($messageBody), self::TEST_EXCHANGE, $routingKey);
     sleep(2);
     // wait for message to sync (required because of message polling)
     $responseMessage = $this->service->receive($queue->getName());
     $this->assertEquals($messageBody, $responseMessage->body);
     $this->admin->deleteQueue($queue->getName());
 }
 protected function getConnectionStatus()
 {
     try {
         $service = new Tx_Amqp_Messaging_AMQPService(Tx_Amqp_Util_ConfigurationHelper::getConnectionFactory());
         $admin = new Tx_Amqp_Messaging_AMQPAdmin($service);
         $queue = $admin->declareQueue();
         $messageBody = 'ping ' . microtime(TRUE);
         $service->send(new \PhpAmqpLib\Message\AMQPMessage($messageBody), Tx_Amqp_Messaging_Exchange::DEFAULT_EXCHANGE, $queue->getName());
         $receivedMessage = $service->receive($queue->getName());
         $admin->deleteQueue($queue->getName());
         if ($messageBody !== $receivedMessage->body) {
             return new tx_reports_reports_status_Status('AMQP', 'Warning', sprintf('Send and receive not identical. Message sent [%s] differs from received message [%s]', $messageBody, $receivedMessage->body), tx_reports_reports_status_Status::WARNING);
         }
         return new tx_reports_reports_status_Status('AMQP', 'OK', 'Connection successful. Send and receive OK.', tx_reports_reports_status_Status::OK);
     } catch (\Exception $e) {
         $statusMessage = $e->getMessage() . ' (' . get_class($e) . ')';
         return new tx_reports_reports_status_Status('AMQP', 'Error', 'Unable to send and receive messages. Reason: ' . $statusMessage, tx_reports_reports_status_Status::ERROR);
     }
 }