summaryrefslogtreecommitdiffstats
path: root/tests/auto/qknxtunnelframefactory/tst_qknxtunnelframefactory.cpp
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2018-02-05 00:39:47 +0100
committerKarsten Heimrich <karsten.heimrich@qt.io>2018-02-05 06:41:17 +0000
commit364d8915c9f3526e59e4f855c016ec419eaea90d (patch)
tree1778465e82d72ce68d8bca37f50401c7e3ac8a2e /tests/auto/qknxtunnelframefactory/tst_qknxtunnelframefactory.cpp
parent0c61b0d279cc58b976f954af8fea07600382c7e0 (diff)
Add A_DeviceDescriptor services to Link layer frame factory
Change-Id: Iafb526a705c50e1672f20f560a5d1ae5cd929202 Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
Diffstat (limited to 'tests/auto/qknxtunnelframefactory/tst_qknxtunnelframefactory.cpp')
-rw-r--r--tests/auto/qknxtunnelframefactory/tst_qknxtunnelframefactory.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/auto/qknxtunnelframefactory/tst_qknxtunnelframefactory.cpp b/tests/auto/qknxtunnelframefactory/tst_qknxtunnelframefactory.cpp
index fd894c6..4b5a636 100644
--- a/tests/auto/qknxtunnelframefactory/tst_qknxtunnelframefactory.cpp
+++ b/tests/auto/qknxtunnelframefactory/tst_qknxtunnelframefactory.cpp
@@ -41,6 +41,8 @@ private Q_SLOTS:
void testMemoryRead();
void testMemoryResponse();
void testMemoryWrite();
+ void testDeviceDescriptorRead();
+ void testDeviceDescriptorResponse();
};
void tst_QKnxLinkLayerFrameFactory::testGroupValueRead()
@@ -199,6 +201,77 @@ void tst_QKnxLinkLayerFrameFactory::testMemoryWrite()
QCOMPARE(frame.controlField().frameType(), QKnxControlField::FrameType::Standard);
}
+void tst_QKnxLinkLayerFrameFactory::testDeviceDescriptorRead()
+{
+ QKnxAddress source { QKnxAddress::Type::Individual, 0 };
+ QKnxAddress destination { QKnxAddress::Type::Individual, QString("1.2.3") };
+ QKnxTpduFactory::PointToPoint::Mode mode =
+ QKnxTpduFactory::PointToPoint::Mode::ConnectionOriented;
+ auto frame = QKnxLinkLayerFrameFactory::DeviceDescriptor::createReadRequest(source, destination, 3,
+ mode);
+ QCOMPARE(frame.extendedControlField().destinationAddressType(), QKnxAddress::Type::Individual);
+ QCOMPARE(frame.extendedControlField().bytes(), quint8(96));
+ QCOMPARE(frame.tpdu().bytes(), QVector<quint8>({ 0x43, 0x03 }));
+ QCOMPARE(frame.bytes(), QByteArray::fromHex("1100b46000001203014303"));
+ QCOMPARE(frame.controlField().frameType(), QKnxControlField::FrameType::Standard);
+
+ QKnxAddress destinationWrong = { QKnxAddress::Type::Group, QString("0.0.2") };
+ frame = QKnxLinkLayerFrameFactory::DeviceDescriptor::createReadRequest(source, destinationWrong, 3,
+ mode);
+ QCOMPARE(frame.bytes(), QKnxLinkLayerFrame().bytes());
+
+ source = { QKnxAddress::Type::Individual, QString("1.1.2") };
+ frame = QKnxLinkLayerFrameFactory::DeviceDescriptor::createReadConfirmation(source, destination, 3,
+ mode, 0, QKnxControlField::Confirm::NoError);
+ QCOMPARE(frame.bytes(), QByteArray::fromHex("2e00b46011021203014303"));
+ QCOMPARE(frame.controlField().frameType(), QKnxControlField::FrameType::Standard);
+
+ frame = QKnxLinkLayerFrameFactory::DeviceDescriptor::createReadIndication(source, destination, 3,
+ mode);
+ QCOMPARE(frame.bytes(), QByteArray::fromHex("2900b46011021203014303"));
+ QCOMPARE(frame.controlField().frameType(), QKnxControlField::FrameType::Standard);
+}
+
+void tst_QKnxLinkLayerFrameFactory::testDeviceDescriptorResponse()
+{
+ QVector<quint8> data({ 0x01, 0x02, 0x03 });
+ QKnxAddress source { QKnxAddress::Type::Individual, 0 };
+ QKnxAddress destination { QKnxAddress::Type::Individual, QString("1.2.3") };
+ QKnxTpduFactory::PointToPoint::Mode mode =
+ QKnxTpduFactory::PointToPoint::Mode::ConnectionOriented;
+ auto frame = QKnxLinkLayerFrameFactory::DeviceDescriptor::createResponseRequest(source,
+ destination, 3, data, mode);
+ QCOMPARE(frame.extendedControlField().destinationAddressType(), QKnxAddress::Type::Individual);
+ QCOMPARE(frame.extendedControlField().bytes(), quint8(96));
+ QCOMPARE(frame.tpdu().bytes(), QVector<quint8>({ 0x43, 0x43, 0x01, 0x02, 0x03 }));
+ QCOMPARE(frame.bytes(), QByteArray::fromHex("1100b46000001203044343010203"));
+ QCOMPARE(frame.controlField().frameType(), QKnxControlField::FrameType::Standard);
+
+ QKnxAddress destinationWrong = { QKnxAddress::Type::Group, QString("0.0.2") };
+ frame = QKnxLinkLayerFrameFactory::DeviceDescriptor::createResponseRequest(source,
+ destinationWrong, 3, data, mode);
+ QCOMPARE(frame.bytes(), QKnxLinkLayerFrame().bytes());
+
+ source = { QKnxAddress::Type::Individual, QString("1.1.2") };
+ frame = QKnxLinkLayerFrameFactory::DeviceDescriptor::createResponseConfirmation(source,
+ destination, 3, data, mode, 0, QKnxControlField::Confirm::NoError);
+ QCOMPARE(frame.bytes(), QByteArray::fromHex("2e00b46011021203044343010203"));
+ QCOMPARE(frame.controlField().frameType(), QKnxControlField::FrameType::Standard);
+
+ frame = QKnxLinkLayerFrameFactory::DeviceDescriptor::createResponseIndication(source, destination,
+ 3, data, mode);
+ QCOMPARE(frame.bytes(), QByteArray::fromHex("2900b46011021203044343010203"));
+ QCOMPARE(frame.controlField().frameType(), QKnxControlField::FrameType::Standard);
+
+ QVector<quint8> dataLong({ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11,
+ 0x12, 0x13, 0x14, 0x15, 0x16 });
+ frame = QKnxLinkLayerFrameFactory::DeviceDescriptor::createResponseIndication(source, destination,
+ 3, dataLong, mode);
+ QCOMPARE(frame.bytes(),
+ QByteArray::fromHex("29003c601102120311434301020304050607080910111213141516"));
+ QCOMPARE(frame.controlField().frameType(), QKnxControlField::FrameType::Extended);
+}
+
QTEST_APPLESS_MAIN(tst_QKnxLinkLayerFrameFactory)
#include "tst_qknxtunnelframefactory.moc"