diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-06-03 15:36:06 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-06-03 15:36:06 +0200 |
commit | 2e929f27541c8bd7795bfc21e308cb08a4c1e7f1 (patch) | |
tree | 883c13cbe6497eea8c8f67a81ccd74cda436196c | |
parent | 06eb746c1b1a41254af5f20aed19ba634120e827 (diff) | |
parent | 577ee1cc427308e42a8ff0289ca2500e18f0217e (diff) |
Merge remote-tracking branch 'origin/5.13' into dev
Change-Id: I3f152700a2abdc36593418cd599ccf82c4577bb8
-rw-r--r-- | examples/coap/coap.pro | 8 | ||||
-rw-r--r-- | src/coap/qcoapclient.cpp | 5 | ||||
-rw-r--r-- | src/coap/qcoapconnection.cpp | 6 | ||||
-rw-r--r-- | src/coap/qcoapinternalmessage.cpp | 1 | ||||
-rw-r--r-- | src/coap/qcoapinternalrequest.cpp | 1 | ||||
-rw-r--r-- | tests/auto/qcoapinternalrequest/tst_qcoapinternalrequest.cpp | 138 |
6 files changed, 152 insertions, 7 deletions
diff --git a/examples/coap/coap.pro b/examples/coap/coap.pro index ba1d57a..006c281 100644 --- a/examples/coap/coap.pro +++ b/examples/coap/coap.pro @@ -1,7 +1,11 @@ TEMPLATE = subdirs SUBDIRS += \ - quicksecureclient \ - quickmulticastclient \ simplecoapclient \ consolecoapclient + +qtHaveModule(quick) { + SUBDIRS += \ + quicksecureclient \ + quickmulticastclient +} diff --git a/src/coap/qcoapclient.cpp b/src/coap/qcoapclient.cpp index dc02464..999c5ea 100644 --- a/src/coap/qcoapclient.cpp +++ b/src/coap/qcoapclient.cpp @@ -460,7 +460,10 @@ QCoapResourceDiscoveryReply *QCoapClient::discover(const QUrl &url, const QStrin */ QCoapReply *QCoapClient::observe(const QCoapRequest &request) { - QCoapRequest copyRequest = QCoapRequestPrivate::createRequest(request, QtCoap::Method::Get); + Q_D(QCoapClient); + + QCoapRequest copyRequest = QCoapRequestPrivate::createRequest(request, QtCoap::Method::Get, + d->connection->isSecure()); copyRequest.enableObserve(); return get(copyRequest); diff --git a/src/coap/qcoapconnection.cpp b/src/coap/qcoapconnection.cpp index 23cb0d9..f74ceab 100644 --- a/src/coap/qcoapconnection.cpp +++ b/src/coap/qcoapconnection.cpp @@ -243,8 +243,10 @@ void QCoapConnection::startToSendRequest() Q_D(QCoapConnection); Q_ASSERT(!d->framesToSend.isEmpty()); - const CoapFrame frame = d->framesToSend.dequeue(); - writeData(frame.currentPdu, frame.host, frame.port); + while (!d->framesToSend.isEmpty()) { + const CoapFrame frame = d->framesToSend.dequeue(); + writeData(frame.currentPdu, frame.host, frame.port); + } } /*! diff --git a/src/coap/qcoapinternalmessage.cpp b/src/coap/qcoapinternalmessage.cpp index 121ee74..271ab30 100644 --- a/src/coap/qcoapinternalmessage.cpp +++ b/src/coap/qcoapinternalmessage.cpp @@ -123,7 +123,6 @@ void QCoapInternalMessage::setFromDescriptiveBlockOption(const QCoapOption &opti { Q_D(QCoapInternalMessage); - //! TODO Cover with tests const quint8 *optionData = reinterpret_cast<const quint8 *>(option.opaqueValue().data()); const quint8 lastByte = optionData[option.length() - 1]; quint32 blockNumber = 0; diff --git a/src/coap/qcoapinternalrequest.cpp b/src/coap/qcoapinternalrequest.cpp index ff6354c..01fd058 100644 --- a/src/coap/qcoapinternalrequest.cpp +++ b/src/coap/qcoapinternalrequest.cpp @@ -315,7 +315,6 @@ QCoapOption QCoapInternalRequest::blockOption(QCoapOption::OptionName name, uint { Q_D(const QCoapInternalRequest); - //! TODO Cover this in tests Q_ASSERT((blockSize & (blockSize - 1)) == 0); // is a power of two Q_ASSERT(!(blockSize >> 11)); // blockSize <= 1024 diff --git a/tests/auto/qcoapinternalrequest/tst_qcoapinternalrequest.cpp b/tests/auto/qcoapinternalrequest/tst_qcoapinternalrequest.cpp index d14edc1..d1c53e3 100644 --- a/tests/auto/qcoapinternalrequest/tst_qcoapinternalrequest.cpp +++ b/tests/auto/qcoapinternalrequest/tst_qcoapinternalrequest.cpp @@ -50,6 +50,10 @@ private Q_SLOTS: void invalidUrls(); void isMulticast_data(); void isMulticast(); + void parseBlockOption_data(); + void parseBlockOption(); + void createBlockOption_data(); + void createBlockOption(); }; void tst_QCoapInternalRequest::requestToFrame_data() @@ -313,6 +317,140 @@ void tst_QCoapInternalRequest::isMulticast() QCOMPARE(internalRequest.isMulticast(), result); } +void tst_QCoapInternalRequest::parseBlockOption_data() +{ + QTest::addColumn<QByteArray>("value"); + QTest::addColumn<uint>("blockNumber"); + QTest::addColumn<bool>("hasNext"); + QTest::addColumn<uint>("blockSize"); + + QTest::newRow("block_option_1byte_more_blocks") << QByteArray::fromHex("3B") + << 3u + << true + << 128u; + QTest::newRow("block_option_1byte_no_more_blocks") << QByteArray::fromHex("93") + << 9u + << false + << 128u; + QTest::newRow("block_option_2bytes_more_blocks") << QByteArray::fromHex("12A") + << 18u + << true + << 64u; + QTest::newRow("block_option_2bytes_no_more_blocks") << QByteArray::fromHex("132") + << 19u + << false + << 64u; + QTest::newRow("block_option_3bytes_more_blocks") << QByteArray::fromHex("3AB2A") + << 15026u + << true + << 64u; + QTest::newRow("block_option_3bytes_no_more_blocks") << QByteArray::fromHex("3AB22") + << 15026u + << false + << 64u; +} + +void tst_QCoapInternalRequest::parseBlockOption() +{ + QFETCH(QByteArray, value); + QFETCH(uint, blockNumber); + QFETCH(bool, hasNext); + QFETCH(uint, blockSize); + + QCoapInternalRequest request; + request.addOption(QCoapOption::Block1, value); + + QCOMPARE(request.currentBlockNumber(), blockNumber); + QCOMPARE(request.hasMoreBlocksToReceive(), hasNext); + QCOMPARE(request.blockSize(), blockSize); +} + +void tst_QCoapInternalRequest::createBlockOption_data() +{ + QTest::addColumn<QByteArray>("payload"); + QTest::addColumn<uint>("blockNumber"); + QTest::addColumn<uint>("blockSize"); + QTest::addColumn<QCoapOption>("expectedOption"); + + QByteArray data; + for (uint i = 0; i < 1024; ++i) + data.append(0xF); + + QByteArray largeData; + for (uint i = 0; i < 32; ++i) + largeData.append(data); + + QTest::newRow("block1_option_1byte_more_blocks") + << data + << 3u + << 64u + << QCoapOption(QCoapOption::Block1, QByteArray::fromHex("3A")); + QTest::newRow("block1_option_1byte_no_more_blocks") + << data + << 8u + << 128u + << QCoapOption(QCoapOption::Block1, QByteArray::fromHex("83")); + QTest::newRow("block2_option_1byte") + << data + << 3u + << 64u + << QCoapOption(QCoapOption::Block2, QByteArray::fromHex("32")); + QTest::newRow("block1_option_2bytes_more_blocks") + << data + << 29u + << 32u + << QCoapOption(QCoapOption::Block1, QByteArray::fromHex("1D9")); + QTest::newRow("block1_option_2bytes_no_more_blocks") + << data + << 32u + << 32u + << QCoapOption(QCoapOption::Block1, QByteArray::fromHex("201")); + QTest::newRow("block2_option_2bytes") + << data + << 29u + << 32u + << QCoapOption(QCoapOption::Block2, QByteArray::fromHex("1D1")); + QTest::newRow("block1_option_3bytes_more_blocks") + << largeData + << 4096u + << 4u + << QCoapOption(QCoapOption::Block1, QByteArray::fromHex("10008")); + QTest::newRow("block1_option_3bytes_no_more_blocks") + << largeData + << 8192u + << 4u + << QCoapOption(QCoapOption::Block1, QByteArray::fromHex("20000")); + QTest::newRow("block2_option_3bytes") + << largeData + << 4096u + << 4u + << QCoapOption(QCoapOption::Block2, QByteArray::fromHex("10000")); +} + +void tst_QCoapInternalRequest::createBlockOption() +{ + QFETCH(QByteArray, payload); + QFETCH(uint, blockNumber); + QFETCH(uint, blockSize); + QFETCH(QCoapOption, expectedOption); + + QCoapRequest request; + request.setPayload(payload); + QCoapInternalRequest internalRequest(request); + if (expectedOption.name() == QCoapOption::Block1) + internalRequest.setToSendBlock(blockNumber, blockSize); + else if (expectedOption.name() == QCoapOption::Block2) + internalRequest.setToRequestBlock(blockNumber, blockSize); + else + QFAIL("Incorrect option, the test expects Block1 or Block2 options."); + + QCOMPARE(internalRequest.message()->options().size(), 1); + + const auto option = internalRequest.message()->options().back(); + QCOMPARE(option.name(), expectedOption.name()); + QCOMPARE(option.opaqueValue(), expectedOption.opaqueValue()); +} + QTEST_APPLESS_MAIN(tst_QCoapInternalRequest) #include "tst_qcoapinternalrequest.moc" |