From 9f264e426760d9d02b7be86b9ec04a0b9cc80b61 Mon Sep 17 00:00:00 2001 From: Andrew O'Doherty Date: Tue, 9 Oct 2018 15:29:20 +0200 Subject: Extend autotest tst_QKnxNetIpTunnelingRequest Change-Id: Ieaa2a0510ea786fdb0191cb0658563012660b7f2 Reviewed-by: Karsten Heimrich --- .../tst_qknxnetiptunnelingrequest.cpp | 98 +++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) 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 #include +#include +#include +#include +#include #include 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() -- cgit v1.2.3