summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorSamuel Gaist <samuel.gaist@edeltech.ch>2016-11-04 00:36:53 +0100
committerSamuel Gaist <samuel.gaist@edeltech.ch>2016-11-04 18:47:28 +0000
commit1683fc48e1ee63c9e5687bcdf55d45bcafe8e6f8 (patch)
tree5248e9fd1ebbcea4e32ffca3e21ae5db25948a99 /tests
parent0d31e8cd10d09fd2b28052c89a4f96c32c104848 (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.cpp19
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)