summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew O'Doherty <andrew.odoherty@qt.io>2018-10-09 15:29:20 +0200
committerAndrew O'Doherty <andrew.odoherty@qt.io>2018-10-25 11:41:38 +0000
commit9f264e426760d9d02b7be86b9ec04a0b9cc80b61 (patch)
tree9ec10f71f4512a9a8dbedc95df6f3309f15fe9ef
parente275b354afde8f1b8349623834df2afde93fe1b0 (diff)
Extend autotest tst_QKnxNetIpTunnelingRequest
Change-Id: Ieaa2a0510ea786fdb0191cb0658563012660b7f2 Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r--tests/auto/qknxnetiptunnelingrequest/tst_qknxnetiptunnelingrequest.cpp98
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()