diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2017-10-31 19:09:35 +0100 |
---|---|---|
committer | André Hartmann <aha_1980@gmx.de> | 2017-11-08 10:06:36 +0000 |
commit | 9de99ca2d395037a092a9003cad3dbb7bb5fde98 (patch) | |
tree | e64f63deea118356577f16680af3db8ca12a5368 /tests | |
parent | 7272faaa857a31db6b2098af74f7f28202b353d6 (diff) |
QCanBusFrame: Validate CAN FD payload lengths
In contrast to CAN 2.0 which allows all payload
sizes between 0 and 8, CAN FD only has discrete
payload lengths: 0..8, 12, 16, 20, 24, 32, 48, and 64.
[ChangeLog][QCanBusFrame] QCanBusFrame::isValid() now
checks for invalid CAN FD payload lengths. E.g. 24 is
a valid CAN FD payload length, but 28 is not. Frames
with invalid data field size may therefore be discarded
by QCanBusDevice::writeFrame() as it is impossible to
transmit them on a real CAN bus.
Task-number: QTBUG-63294
Change-Id: I2598194061f7f8b15f4ee5eabbf41e3134b92d4f
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Reviewed-by: Rolf Eike Beer <eb@emlix.com>
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qcanbusframe/tst_qcanbusframe.cpp | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/tests/auto/qcanbusframe/tst_qcanbusframe.cpp b/tests/auto/qcanbusframe/tst_qcanbusframe.cpp index 38c3784..1771325 100644 --- a/tests/auto/qcanbusframe/tst_qcanbusframe.cpp +++ b/tests/auto/qcanbusframe/tst_qcanbusframe.cpp @@ -54,6 +54,8 @@ private slots: void tst_isValid_data(); void tst_isValid(); + void tst_isValidSize_data(); + void tst_isValidSize(); void tst_toString_data(); void tst_toString(); @@ -330,7 +332,7 @@ void tst_QCanBusFrame::tst_isValid_data() << QByteArray(9, 0) << 512u << false << false; QTest::newRow("data frame CAN FD long payload") << QCanBusFrame::DataFrame << true - << QByteArray(9, 0) << 512u << false << true; + << QByteArray(12, 0) << 512u << false << true; QTest::newRow("data frame CAN FD too long payload") << QCanBusFrame::DataFrame << false << QByteArray(65, 0) << 512u << false << true; @@ -362,6 +364,46 @@ void tst_QCanBusFrame::tst_isValid() QCOMPARE(QCanBusFrame::InvalidFrame, frame.frameType()); } +void tst_QCanBusFrame::tst_isValidSize_data() +{ + QTest::addColumn<int>("payloadLength"); + QTest::addColumn<bool>("isFlexibleDataRate"); + QTest::addColumn<bool>("isValid"); + + QTest::newRow("2.0-0") << 0 << false << true; + QTest::newRow("2.0-8") << 8 << false << true; + QTest::newRow("2.0-9") << 9 << false << false; + + QTest::newRow("FD-0") << 0 << true << true; + QTest::newRow("FD-8") << 8 << true << true; + QTest::newRow("FD-9") << 9 << true << false; + QTest::newRow("FD-11") << 11 << true << false; + QTest::newRow("FD-12") << 12 << true << true; + QTest::newRow("FD-13") << 13 << true << false; + QTest::newRow("FD-16") << 16 << true << true; + + QTest::newRow("FD-20") << 20 << true << true; + QTest::newRow("FD-24") << 24 << true << true; + QTest::newRow("FD-32") << 32 << true << true; + QTest::newRow("FD-48") << 48 << true << true; + + QTest::newRow("FD-63") << 63 << true << false; + QTest::newRow("FD-64") << 64 << true << true; + QTest::newRow("FD-65") << 65 << true << false; +} + +void tst_QCanBusFrame::tst_isValidSize() +{ + QFETCH(int, payloadLength); + QFETCH(bool, isFlexibleDataRate); + QFETCH(bool, isValid); + + QCanBusFrame frame(0, QByteArray(payloadLength, ' ')); + frame.setFlexibleDataRateFormat(isFlexibleDataRate); + + QCOMPARE(frame.isValid(), isValid); +} + void tst_QCanBusFrame::tst_toString_data() { QTest::addColumn<QCanBusFrame::FrameType>("frameType"); |