diff options
author | Andrew O'Doherty <andrew.odoherty@qt.io> | 2018-10-09 15:29:20 +0200 |
---|---|---|
committer | Andrew O'Doherty <andrew.odoherty@qt.io> | 2018-10-25 11:41:38 +0000 |
commit | 9f264e426760d9d02b7be86b9ec04a0b9cc80b61 (patch) | |
tree | 9ec10f71f4512a9a8dbedc95df6f3309f15fe9ef | |
parent | e275b354afde8f1b8349623834df2afde93fe1b0 (diff) |
Extend autotest tst_QKnxNetIpTunnelingRequest
Change-Id: Ieaa2a0510ea786fdb0191cb0658563012660b7f2
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r-- | tests/auto/qknxnetiptunnelingrequest/tst_qknxnetiptunnelingrequest.cpp | 98 |
1 files changed, 97 insertions, 1 deletions
diff --git a/tests/auto/qknxnetiptunnelingrequest/tst_qknxnetiptunnelingrequest.cpp b/tests/auto/qknxnetiptunnelingrequest/tst_qknxnetiptunnelingrequest.cpp index 7a134dc..9f8a5e7 100644 --- a/tests/auto/qknxnetiptunnelingrequest/tst_qknxnetiptunnelingrequest.cpp +++ b/tests/auto/qknxnetiptunnelingrequest/tst_qknxnetiptunnelingrequest.cpp @@ -28,6 +28,10 @@ #include <QtCore/qdebug.h> #include <QtTest/qtest.h> +#include <QtKnx/qknxnetip.h> +#include <QtKnx/qknxnamespace.h> +#include <QtKnx/QKnxNetIpConnectionHeader> +#include <QtKnx/qknxlinklayerframebuilder.h> #include <QtKnx/qknxnetiptunnelingrequest.h> static QString s_msg; @@ -43,6 +47,7 @@ class tst_QKnxNetIpTunnelingRequest: public QObject private slots: void testDefaultConstructor(); void testConstructor(); + void testValidationTunnelingRequest(); void testDebugStream(); }; @@ -59,7 +64,98 @@ void tst_QKnxNetIpTunnelingRequest::testDefaultConstructor() void tst_QKnxNetIpTunnelingRequest::testConstructor() { - // TODO: implement + quint8 channelId = 15; + quint8 sequenceNumber = 10; + + // L_data.req + static const auto bytes = QKnxByteArray::fromHex("1100b4e000000002010000"); + auto cemi = QKnxLinkLayerFrame::builder() + .setData(bytes) + .setMedium(QKnx::MediumType::NetIP) + .createFrame(); + + auto reqFrame = QKnxNetIpTunnelingRequestProxy::builder() + .setChannelId(channelId) + .setSequenceNumber(sequenceNumber) + .setCemi(cemi) + .create(); + + QCOMPARE(reqFrame.isValid(), true); + QCOMPARE(reqFrame.channelId(), channelId); + QCOMPARE(reqFrame.sequenceNumber(), sequenceNumber); + QCOMPARE(reqFrame.data(), bytes); + + const QKnxNetIpTunnelingRequestProxy view(reqFrame); + QCOMPARE(view.isValid(), true); + QCOMPARE(view.channelId(), channelId); + QCOMPARE(view.sequenceNumber(), sequenceNumber); + QCOMPARE(view.cemi().bytes(), bytes); +} + +void tst_QKnxNetIpTunnelingRequest::testValidationTunnelingRequest() +{ + quint8 channelId = 15; + quint8 sequenceNumber = 10; + // L_data.req + static const auto bytes = QKnxByteArray::fromHex("1100b4e000000002010000"); + auto cemi = QKnxLinkLayerFrame::builder() + .setData(bytes) + .setMedium(QKnx::MediumType::NetIP) + .createFrame(); + { + // test tunneling request frame with wrong service type set + auto reqFrame = QKnxNetIpTunnelingRequestProxy::builder() + .setChannelId(channelId) + .setSequenceNumber(sequenceNumber) + .setCemi(cemi) + .create(); + QCOMPARE(reqFrame.isValid(), true); + const QKnxNetIpTunnelingRequestProxy view(reqFrame); + QCOMPARE(view.isValid(), true); + reqFrame.setServiceType(QKnxNetIp::ServiceType::TunnelingAcknowledge); + QCOMPARE(view.isValid(), false); + } + { + // missing channelId parameter and sequence number in header + QKnxNetIpConnectionHeader header; + QCOMPARE(header.size(), 0); + QCOMPARE(header.isValid(), false); + QKnxNetIpFrame frame = { QKnxNetIp::ServiceType::TunnelingAcknowledge, + header, + cemi.bytes() + }; + QVERIFY(frame.size() != 10); + QCOMPARE(frame.isValid(), false); + const QKnxNetIpTunnelingRequestProxy view(frame); + QCOMPARE(view.isValid(), false); + } + { + // missing KNX frame bytes after header in QKnxNetIpFrame + QKnxNetIpConnectionHeader header { channelId, sequenceNumber }; + QCOMPARE(header.size(), 4); + QCOMPARE(header.isValid(), true); + QKnxNetIpFrame frame = { QKnxNetIp::ServiceType::TunnelingRequest, + header + }; + QCOMPARE(frame.size(), 10); + QCOMPARE(frame.isValid(), true); + const QKnxNetIpTunnelingRequestProxy view(frame); + QCOMPARE(view.isValid(), false); + } + { + // valid Tunneling Request + QKnxNetIpConnectionHeader header { channelId, sequenceNumber }; + QCOMPARE(header.size(), 4); + QCOMPARE(header.isValid(), true); + QKnxNetIpFrame frame = { QKnxNetIp::ServiceType::TunnelingRequest, + header, + cemi.bytes() + }; + QCOMPARE(frame.size(), 21); + QCOMPARE(frame.isValid(), true); + const QKnxNetIpTunnelingRequestProxy view(frame); + QCOMPARE(view.isValid(), true); + } } void tst_QKnxNetIpTunnelingRequest::testDebugStream() |