From 84746ff77c0216951edf9121ebc3b251dbceb7b5 Mon Sep 17 00:00:00 2001 From: Matt Broadstone Date: Wed, 10 Sep 2014 22:38:06 -0400 Subject: [PATCH] handle messages with empty payloads If a message is delivered with an empty body, we were not previously enqueuing the message. This fixes issue #43 --- src/qamqpqueue.cpp | 7 +++++++ tests/auto/qamqpqueue/tst_qamqpqueue.cpp | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/qamqpqueue.cpp b/src/qamqpqueue.cpp index 804e878..822ba5e 100644 --- a/src/qamqpqueue.cpp +++ b/src/qamqpqueue.cpp @@ -78,6 +78,7 @@ bool QueuePrivate::_q_method(const Frame::Method &frame) void QueuePrivate::_q_content(const Frame::Content &frame) { + Q_Q(Queue); Q_ASSERT(frame.channel() == channelNumber); if (frame.channel() != channelNumber) return; @@ -96,6 +97,12 @@ void QueuePrivate::_q_content(const Frame::Content &frame) currentMessage.d->headers = (it.value()).toHash(); currentMessage.d->properties[property] = it.value(); } + + if (currentMessage.d->leftSize == 0) { + // message with an empty body + q->enqueue(currentMessage); + Q_EMIT q->messageReceived(); + } } void QueuePrivate::_q_body(const Frame::ContentBody &frame) diff --git a/tests/auto/qamqpqueue/tst_qamqpqueue.cpp b/tests/auto/qamqpqueue/tst_qamqpqueue.cpp index b7c7031..9487190 100644 --- a/tests/auto/qamqpqueue/tst_qamqpqueue.cpp +++ b/tests/auto/qamqpqueue/tst_qamqpqueue.cpp @@ -46,6 +46,7 @@ private Q_SLOTS: void invalidRoutingKey(); void tableFieldDataTypes(); void messageProperties(); + void emptyMessage(); private: QScopedPointer client; @@ -639,5 +640,19 @@ void tst_QAMQPQueue::messageProperties() QCOMPARE(message.property(Message::ClusterID).toString(), QLatin1String("some-cluster-id")); } +void tst_QAMQPQueue::emptyMessage() +{ + Queue *queue = client->createQueue("test-issue-43"); + declareQueueAndVerifyConsuming(queue); + + Exchange *defaultExchange = client->createExchange(); + defaultExchange->publish("", "test-issue-43"); + + QVERIFY(waitForSignal(queue, SIGNAL(messageReceived()))); + Message message = queue->dequeue(); + verifyStandardMessageHeaders(message, "test-issue-43"); + QVERIFY(message.payload().isEmpty()); +} + QTEST_MAIN(tst_QAMQPQueue) #include "tst_qamqpqueue.moc"