diff options
Diffstat (limited to 'tests')
6 files changed, 298 insertions, 1 deletions
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 7f11ff3..2542d65 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -10,7 +10,9 @@ SUBDIRS += cmake \ qmodbusclient \ qmodbusserver \ qmodbuscommevent \ - qmodbusadu + qmodbusadu \ + qmodbusdeviceidentification \ + qmodbusrtuserialmaster qcanbus.depends += plugins qcanbusdevice.depends += plugins diff --git a/tests/auto/qmodbusdeviceidentification/qmodbusdeviceidentification.pro b/tests/auto/qmodbusdeviceidentification/qmodbusdeviceidentification.pro new file mode 100644 index 0000000..721b521 --- /dev/null +++ b/tests/auto/qmodbusdeviceidentification/qmodbusdeviceidentification.pro @@ -0,0 +1,7 @@ +QT = core testlib serialbus +TARGET = tst_qmodbusdeviceidentification +CONFIG += testcase c++11 + +CONFIG -= app_bundle + +SOURCES += tst_qmodbusdeviceidentification.cpp diff --git a/tests/auto/qmodbusdeviceidentification/tst_qmodbusdeviceidentification.cpp b/tests/auto/qmodbusdeviceidentification/tst_qmodbusdeviceidentification.cpp new file mode 100644 index 0000000..582b46d --- /dev/null +++ b/tests/auto/qmodbusdeviceidentification/tst_qmodbusdeviceidentification.cpp @@ -0,0 +1,172 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtSerialBus module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtSerialBus/qmodbusdeviceidentification.h> +#include <QtSerialBus/qmodbuspdu.h> + +#include <QtTest/QtTest> + +class tst_QModbusDeviceIdentification : public QObject +{ + Q_OBJECT + +private slots: + void testConstructor() + { + QModbusDeviceIdentification qmdi; + QCOMPARE(qmdi.isValid(), false); + QCOMPARE(qmdi.objectIds().isEmpty(), true); + for (int i = QModbusDeviceIdentification::VendorNameObjectId; + i < QModbusDeviceIdentification::UndefinedObjectId; ++i) { + QCOMPARE(qmdi.contains(i), false); + qmdi.remove(i); // force crash if the behavior changes + QCOMPARE(qmdi.value(i), QByteArray()); + } + QCOMPARE(qmdi.conformityLevel(), QModbusDeviceIdentification::BasicConformityLevel); + } + + void testIsValid() + { + QModbusDeviceIdentification qmdi; + QCOMPARE(qmdi.isValid(), false); + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::ReservedObjectId, "Reserved"), true); + QCOMPARE(qmdi.isValid(), false); + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::VendorNameObjectId, + "Company identification"), true); + QCOMPARE(qmdi.isValid(), false); + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::ProductCodeObjectId, "Product code"), + true); + QCOMPARE(qmdi.isValid(), false); + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::MajorMinorRevisionObjectId, "V2.11"), + true); + QCOMPARE(qmdi.isValid(), true); + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::MajorMinorRevisionObjectId, ""), true); + QCOMPARE(qmdi.isValid(), false); + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::MajorMinorRevisionObjectId, "V2.11"), + true); + QCOMPARE(qmdi.isValid(), true); + } + + void testRemoveAndContains() + { + QModbusDeviceIdentification qmdi; + QCOMPARE(qmdi.contains(QModbusDeviceIdentification::ReservedObjectId), false); + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::ReservedObjectId, "Reserved"), true); + QCOMPARE(qmdi.contains(QModbusDeviceIdentification::ReservedObjectId), true); + qmdi.remove(QModbusDeviceIdentification::ReservedObjectId); + QCOMPARE(qmdi.contains(QModbusDeviceIdentification::ReservedObjectId), false); + } + + void testInsertAndValue() + { + QModbusDeviceIdentification qmdi; + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::ProductDependentObjectId, "Test"), true); + QCOMPARE(qmdi.value(QModbusDeviceIdentification::ProductDependentObjectId), + QByteArray("Test")); + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::ProductDependentObjectId, + QByteArray(246, '@')), false); + QCOMPARE(qmdi.value(QModbusDeviceIdentification::ProductDependentObjectId), + QByteArray("Test")); + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::ProductDependentObjectId, + QByteArray(245, '@')), true); + QCOMPARE(qmdi.value(QModbusDeviceIdentification::ProductDependentObjectId), + QByteArray(245, '@')); + QCOMPARE(qmdi.insert(QModbusDeviceIdentification::UndefinedObjectId, "Test"), false); + QCOMPARE(qmdi.value(QModbusDeviceIdentification::UndefinedObjectId), QByteArray()); + } + + void testConformityLevel() + { + QModbusDeviceIdentification qmdi; + QCOMPARE(qmdi.conformityLevel(), QModbusDeviceIdentification::BasicConformityLevel); + qmdi.setConformityLevel(QModbusDeviceIdentification::BasicIndividualConformityLevel); + QCOMPARE(qmdi.conformityLevel(), QModbusDeviceIdentification::BasicIndividualConformityLevel); + } + + void testConstructFromByteArray() + { + const QByteArray vendorNameObject = "Company identification"; + QModbusResponse r(QModbusResponse::EncapsulatedInterfaceTransport, + QByteArray::fromHex("0e01010000010016") + vendorNameObject); + + { + QModbusDeviceIdentification qmdi = QModbusDeviceIdentification::fromByteArray(r.data()); + QCOMPARE(qmdi.isValid(), false); + QCOMPARE(qmdi.objectIds(), QList<int>() << QModbusDeviceIdentification::VendorNameObjectId); + QCOMPARE(qmdi.contains(QModbusDeviceIdentification::VendorNameObjectId), true); + QCOMPARE(qmdi.value(QModbusDeviceIdentification::VendorNameObjectId), vendorNameObject); + QCOMPARE(qmdi.conformityLevel(), QModbusDeviceIdentification::BasicConformityLevel); + } + + const QByteArray productCodeObject = "Product code"; + r.setData(QByteArray::fromHex("0e01010000020016") + vendorNameObject + + QByteArray::fromHex("010c") + productCodeObject); + { + QModbusDeviceIdentification qmdi = QModbusDeviceIdentification::fromByteArray(r.data()); + QCOMPARE(qmdi.isValid(), false); + QCOMPARE(qmdi.objectIds(), QList<int>() << QModbusDeviceIdentification::VendorNameObjectId + << QModbusDeviceIdentification::ProductCodeObjectId); + QCOMPARE(qmdi.contains(QModbusDeviceIdentification::VendorNameObjectId), true); + QCOMPARE(qmdi.contains(QModbusDeviceIdentification::ProductCodeObjectId), true); + QCOMPARE(qmdi.value(QModbusDeviceIdentification::VendorNameObjectId), vendorNameObject); + QCOMPARE(qmdi.value(QModbusDeviceIdentification::ProductCodeObjectId), productCodeObject); + QCOMPARE(qmdi.conformityLevel(), QModbusDeviceIdentification::BasicConformityLevel); + } + + const QByteArray majorMinorRevision = "V2.11"; + r.setData(QByteArray::fromHex("0e01010000030016") + vendorNameObject + + QByteArray::fromHex("010c") + productCodeObject + QByteArray::fromHex("0205") + + majorMinorRevision); + { + QModbusDeviceIdentification qmdi = QModbusDeviceIdentification::fromByteArray(r.data()); + QCOMPARE(qmdi.isValid(), true); + QCOMPARE(qmdi.objectIds(), QList<int>() << QModbusDeviceIdentification::VendorNameObjectId + << QModbusDeviceIdentification::ProductCodeObjectId + << QModbusDeviceIdentification::MajorMinorRevisionObjectId); + QCOMPARE(qmdi.contains(QModbusDeviceIdentification::VendorNameObjectId), true); + QCOMPARE(qmdi.contains(QModbusDeviceIdentification::ProductCodeObjectId), true); + QCOMPARE(qmdi.contains(QModbusDeviceIdentification::MajorMinorRevisionObjectId), true); + QCOMPARE(qmdi.value(QModbusDeviceIdentification::VendorNameObjectId), vendorNameObject); + QCOMPARE(qmdi.value(QModbusDeviceIdentification::ProductCodeObjectId), productCodeObject); + QCOMPARE(qmdi.value(QModbusDeviceIdentification::MajorMinorRevisionObjectId), majorMinorRevision); + QCOMPARE(qmdi.conformityLevel(), QModbusDeviceIdentification::BasicConformityLevel); + } + } +}; + +QTEST_MAIN(tst_QModbusDeviceIdentification) + +#include "tst_qmodbusdeviceidentification.moc" diff --git a/tests/auto/qmodbusrtuserialmaster/qmodbusrtuserialmaster.pro b/tests/auto/qmodbusrtuserialmaster/qmodbusrtuserialmaster.pro new file mode 100644 index 0000000..3125a27 --- /dev/null +++ b/tests/auto/qmodbusrtuserialmaster/qmodbusrtuserialmaster.pro @@ -0,0 +1,8 @@ +CONFIG -= app_bundle +CONFIG += testcase c++11 + +QT = core testlib serialbus + +TARGET = tst_qmodbusrtuserialmaster +SOURCES += tst_qmodbusrtuserialmaster.cpp + diff --git a/tests/auto/qmodbusrtuserialmaster/tst_qmodbusrtuserialmaster.cpp b/tests/auto/qmodbusrtuserialmaster/tst_qmodbusrtuserialmaster.cpp new file mode 100644 index 0000000..589ec46 --- /dev/null +++ b/tests/auto/qmodbusrtuserialmaster/tst_qmodbusrtuserialmaster.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtSerialBus module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtSerialBus/qmodbusrtuserialmaster.h> +#include <QtSerialPort/qserialport.h> + +#include <QtTest/QtTest> + +class tst_QModbusRtuSerialMaster : public QObject +{ + Q_OBJECT + +private slots: + void testInterFrameDelay() + { + QModbusRtuSerialMaster qmrsm; + QCOMPARE(qmrsm.interFrameDelay(), 2000); + qmrsm.setInterFrameDelay(1000); + QCOMPARE(qmrsm.interFrameDelay(), 2000); + qmrsm.setInterFrameDelay(3000); + QCOMPARE(qmrsm.interFrameDelay(), 3000); + qmrsm.setInterFrameDelay(-1); + QCOMPARE(qmrsm.interFrameDelay(), 2000); + } +}; + +QTEST_MAIN(tst_QModbusRtuSerialMaster) + +#include "tst_qmodbusrtuserialmaster.moc" diff --git a/tests/auto/qmodbusserver/tst_qmodbusserver.cpp b/tests/auto/qmodbusserver/tst_qmodbusserver.cpp index 114063a..2f5c231 100644 --- a/tests/auto/qmodbusserver/tst_qmodbusserver.cpp +++ b/tests/auto/qmodbusserver/tst_qmodbusserver.cpp @@ -37,6 +37,7 @@ #include <QtSerialBus/qmodbusserver.h> #include <QtSerialBus/qmodbusrtuserialslave.h> #include <QtSerialBus/qmodbustcpserver.h> +#include <QtSerialBus/qmodbusdeviceidentification.h> #include <QtCore/qdebug.h> #include <QtTest/QtTest> @@ -1198,6 +1199,51 @@ private slots: server.processRequest(QModbusRequest(QModbusRequest::Diagnostics, quint16(0x0014), quint16(0))); QCOMPARE(server.value(QModbusServer::DiagnosticRegister).value<quint16>(), quint16(0xfffe)); } + + void testProcessEncapsulatedInterfaceTransportRequest() + { + QModbusDeviceIdentification objectPool; + QCOMPARE(objectPool.insert(QModbusDeviceIdentification::VendorNameObjectId, + "Company identification"), true); + QCOMPARE(objectPool.isValid(), false); + QCOMPARE(objectPool.insert(QModbusDeviceIdentification::ProductCodeObjectId, + "Product code"), true); + QCOMPARE(objectPool.isValid(), false); + QCOMPARE(objectPool.insert(QModbusDeviceIdentification::MajorMinorRevisionObjectId, + "V2.11"), true); + QCOMPARE(objectPool.isValid(), true); + + QCOMPARE(server.setValue(QModbusServer::DeviceIdentification, + QVariant::fromValue<QModbusDeviceIdentification>(objectPool)), true); + + auto response = server + .processRequest(QModbusRequest(QModbusRequest::EncapsulatedInterfaceTransport, + QByteArray::fromHex("0e0100"))); + QCOMPARE(response.data(), QByteArray::fromHex("0e01010000030016") + + "Company identification" + QByteArray::fromHex("010c") + "Product code" + + QByteArray::fromHex("0205") + "V2.11"); + + QCOMPARE(objectPool.insert(QModbusDeviceIdentification::ProductCodeObjectId, QByteArray( + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")), true); + QCOMPARE(objectPool.isValid(), true); + + QCOMPARE(server.setValue(QModbusServer::DeviceIdentification, + QVariant::fromValue<QModbusDeviceIdentification>(objectPool)), true); + + response = server.processRequest(QModbusRequest(QModbusPdu::EncapsulatedInterfaceTransport, + QByteArray::fromHex("0e0100"))); + QCOMPARE(response.data(), QByteArray::fromHex("0e0101ff02020016") + + "Company identification" + QByteArray::fromHex("01dc") + QByteArray( + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")); + + response = server.processRequest(QModbusRequest(QModbusPdu::EncapsulatedInterfaceTransport, + QByteArray::fromHex("0e0102"))); + QCOMPARE(response.data(), QByteArray::fromHex("0e01010000010205") + "V2.11"); + } }; QTEST_MAIN(tst_QModbusServer) |