diff options
author | Samuel Gaist <samuel.gaist@edeltech.ch> | 2016-11-04 00:36:53 +0100 |
---|---|---|
committer | Samuel Gaist <samuel.gaist@edeltech.ch> | 2016-11-04 18:47:28 +0000 |
commit | 1683fc48e1ee63c9e5687bcdf55d45bcafe8e6f8 (patch) | |
tree | 5248e9fd1ebbcea4e32ffca3e21ae5db25948a99 /tests | |
parent | 0d31e8cd10d09fd2b28052c89a4f96c32c104848 (diff) |
Fix handling of byte count fields
The various byte count fields are all unsigned byte however the incoming
data are loaded in a QByteArray which returns signed char. This patch
fixes this by converting the field value to quint8.
[ChangeLog][Modbus] Fixed handling of packets with payloads longer than
127 bytes.
Task-number: QTBUG-54834
Change-Id: I699c4cf0cea9933bef6c040c573d2d6e6a113920
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp b/tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp index 76bfea3..9c74a6c 100644 --- a/tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp +++ b/tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp @@ -803,6 +803,25 @@ private slots: quint8(0xff)); // dummy additional data QCOMPARE(QModbusResponse::calculateDataSize(rdi), 22); } + + void testCalculateLongDataSize() + { + QByteArray longData = QByteArray(128, ' '); + longData[0] = longData.size(); + const QModbusResponse response(QModbusResponse::ReadCoils, longData); + QCOMPARE(QModbusResponse::calculateDataSize(response), 1 + longData.size()); + + const QModbusRequest wfrRequest(QModbusPdu::WriteFileRecord, longData); + QCOMPARE(QModbusRequest::calculateDataSize(wfrRequest), 1 + longData.size()); + + longData = QByteArray(4 + 128, ' '); + longData[4] = 128; + const QModbusRequest wmcRequest(QModbusPdu::WriteMultipleCoils, longData); + QCOMPARE(QModbusRequest::calculateDataSize(wmcRequest), 1 + longData.size()); + + const QModbusRequest wmrRequest(QModbusPdu::WriteMultipleRegisters, longData); + QCOMPARE(QModbusRequest::calculateDataSize(wmrRequest), 1 + longData.size()); + } }; QTEST_MAIN(tst_QModbusPdu) |