diff options
author | Sona Kurazyan <sona.kurazyan@qt.io> | 2019-05-21 14:16:15 +0200 |
---|---|---|
committer | Sona Kurazyan <sona.kurazyan@qt.io> | 2019-05-21 15:03:50 +0200 |
commit | 577ee1cc427308e42a8ff0289ca2500e18f0217e (patch) | |
tree | 1879c14a353a85728de7a33daa656d715d27f007 | |
parent | fd1bbe7e72158c6466915b48f7ba90dd58ebacf2 (diff) |
Add block option tests
Change-Id: I8f18562fd543f087bd9d5f4c1d9b3bce7146025e
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-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 |
3 files changed, 138 insertions, 2 deletions
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" |