aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSona Kurazyan <sona.kurazyan@qt.io>2019-05-21 14:16:15 +0200
committerSona Kurazyan <sona.kurazyan@qt.io>2019-05-21 15:03:50 +0200
commit577ee1cc427308e42a8ff0289ca2500e18f0217e (patch)
tree1879c14a353a85728de7a33daa656d715d27f007
parentfd1bbe7e72158c6466915b48f7ba90dd58ebacf2 (diff)
Add block option tests
Change-Id: I8f18562fd543f087bd9d5f4c1d9b3bce7146025e Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r--src/coap/qcoapinternalmessage.cpp1
-rw-r--r--src/coap/qcoapinternalrequest.cpp1
-rw-r--r--tests/auto/qcoapinternalrequest/tst_qcoapinternalrequest.cpp138
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"