QCoapReply: add test for a chunked read

QCoapReply is a QIODevice, but it was not obvious if readData() is
implemented properly, or if it also needed to update pos().

This patch adds a unit test that checks a chunked read from the reply.
The test passes, so nothing needs to be fixed in the implementation.

Pick-to: 6.10 6.9 6.8 6.5
Change-Id: I0642718f21a31cf978a733bc3bc742ad1eb47b3a
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Ivan Solovev 2025-07-28 16:18:54 +02:00
parent a292490ba6
commit f310b4a5a2
1 changed files with 34 additions and 0 deletions

View File

@ -18,6 +18,7 @@ private Q_SLOTS:
void updateReply();
void requestData();
void abortRequest();
void readReplyChunked();
};
void tst_QCoapReply::updateReply_data()
@ -117,6 +118,39 @@ void tst_QCoapReply::abortRequest()
QVERIFY(arguments.at(0).toByteArray() == "token");
}
void tst_QCoapReply::readReplyChunked()
{
const QByteArray token = "\xAF\x01\xC2";
const quint16 id = 645;
const QByteArray payload = "this is some payload";
QScopedPointer<QCoapReply> reply(QCoapReplyPrivate::createCoapReply(QCoapRequest()));
QCoapMessage message;
message.setToken(token);
message.setMessageId(id);
message.setPayload(payload);
QMetaObject::invokeMethod(reply.data(), "_q_setContent",
Q_ARG(QHostAddress, QHostAddress()),
Q_ARG(QCoapMessage, message),
Q_ARG(QtCoap::ResponseCode, QtCoap::ResponseCode::Content));
QMetaObject::invokeMethod(reply.data(), "_q_setFinished",
Q_ARG(QtCoap::Error, QtCoap::Error::Ok));
QCOMPARE_EQ(reply->pos(), 0);
const qsizetype startBytes = 7;
const QByteArray start = reply->read(startBytes);
QCOMPARE_EQ(start, payload.first(startBytes));
QCOMPARE_EQ(reply->pos(), startBytes);
QByteArray last(100, Qt::Uninitialized);
const qint64 read = reply->read(last.data(), last.size());
QCOMPARE_EQ(read, payload.size() - startBytes);
QCOMPARE_EQ(reply->pos(), payload.size());
last.resize(read);
QCOMPARE_EQ(start + last, payload);
}
QTEST_MAIN(tst_QCoapReply)
#include "tst_qcoapreply.moc"