From 6291bb7f4241abb0088db921723a4a47f0a56fc3 Mon Sep 17 00:00:00 2001 From: Matt Broadstone Date: Wed, 6 Aug 2014 22:30:42 -0400 Subject: [PATCH] add auto test for channel close improve code coverage for tests by including a test for Channel::closeChannel to both Exchange and Queue test suites --- src/amqp_channel.cpp | 20 ++++++++++++------- src/amqp_client.cpp | 3 +-- .../auto/qamqpexchange/tst_qamqpexchange.cpp | 11 ++++++++++ tests/auto/qamqpqueue/tst_qamqpqueue.cpp | 10 ++++++++++ 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/amqp_channel.cpp b/src/amqp_channel.cpp index 2a53db1..9da6da2 100644 --- a/src/amqp_channel.cpp +++ b/src/amqp_channel.cpp @@ -152,17 +152,22 @@ void ChannelPrivate::flowOk(const Frame::Method &frame) void ChannelPrivate::close(int code, const QString &text, int classId, int methodId) { - Frame::Method frame(Frame::fcChannel, miClose); QByteArray arguments; QDataStream stream(&arguments, QIODevice::WriteOnly); - Frame::writeAmqpField(stream, ShortString, client->virtualHost()); + if (!code) code = 200; + Frame::writeAmqpField(stream, ShortUint, code); + if (!text.isEmpty()) { + Frame::writeAmqpField(stream, ShortString, text); + } else { + Frame::writeAmqpField(stream, ShortString, QLatin1String("OK")); + } - stream << qint16(code); - Frame::writeAmqpField(stream, ShortString, text); - stream << qint16(classId); - stream << qint16(methodId); + Frame::writeAmqpField(stream, ShortUint, classId); + Frame::writeAmqpField(stream, ShortUint, methodId); + Frame::Method frame(Frame::fcChannel, miClose); + frame.setChannel(channelNumber); frame.setArguments(arguments); sendFrame(frame); } @@ -268,7 +273,8 @@ void Channel::closeChannel() void Channel::reopen() { Q_D(Channel); - closeChannel(); + if (d->opened) + closeChannel(); d->open(); } diff --git a/src/amqp_client.cpp b/src/amqp_client.cpp index 0e8c16d..901125e 100644 --- a/src/amqp_client.cpp +++ b/src/amqp_client.cpp @@ -505,15 +505,14 @@ void ClientPrivate::open() void ClientPrivate::close(int code, const QString &text, int classId, int methodId) { - Frame::Method frame(Frame::fcConnection, ClientPrivate::miClose); QByteArray arguments; QDataStream stream(&arguments, QIODevice::WriteOnly); - stream << qint16(code); Frame::writeAmqpField(stream, ShortString, text); stream << qint16(classId); stream << qint16(methodId); + Frame::Method frame(Frame::fcConnection, ClientPrivate::miClose); frame.setArguments(arguments); sendFrame(frame); } diff --git a/tests/auto/qamqpexchange/tst_qamqpexchange.cpp b/tests/auto/qamqpexchange/tst_qamqpexchange.cpp index 0c1278d..740d0f6 100644 --- a/tests/auto/qamqpexchange/tst_qamqpexchange.cpp +++ b/tests/auto/qamqpexchange/tst_qamqpexchange.cpp @@ -24,6 +24,7 @@ private Q_SLOTS: void removeIfUnused(); void invalidMandatoryRouting(); void invalidImmediateRouting(); + void closeChannel(); private: QScopedPointer client; @@ -168,5 +169,15 @@ void tst_QAMQPExchange::invalidImmediateRouting() QCOMPARE(client->error(), QAMQP::NotImplementedError); } +void tst_QAMQPExchange::closeChannel() +{ + Exchange *exchange = client->createExchange("test-close-channel"); + QVERIFY(waitForSignal(exchange, SIGNAL(opened()))); + exchange->declare(Exchange::Direct); + QVERIFY(waitForSignal(exchange, SIGNAL(declared()))); + exchange->closeChannel(); + QVERIFY(waitForSignal(exchange, SIGNAL(closed()))); +} + QTEST_MAIN(tst_QAMQPExchange) #include "tst_qamqpexchange.moc" diff --git a/tests/auto/qamqpqueue/tst_qamqpqueue.cpp b/tests/auto/qamqpqueue/tst_qamqpqueue.cpp index 5ef068a..0c66320 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 closeChannel(); private: void declareQueueAndVerifyConsuming(Queue *queue); @@ -664,6 +665,15 @@ void tst_QAMQPQueue::messageProperties() QCOMPARE(message.property(Message::ClusterID).toString(), QLatin1String("some-cluster-id")); } +void tst_QAMQPQueue::closeChannel() +{ + Queue *queue = client->createQueue("test-close-channel"); + QVERIFY(waitForSignal(queue, SIGNAL(opened()))); + declareQueueAndVerifyConsuming(queue); + + queue->closeChannel(); + QVERIFY(waitForSignal(queue, SIGNAL(closed()))); +} QTEST_MAIN(tst_QAMQPQueue) #include "tst_qamqpqueue.moc"