summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2017-10-31 19:09:35 +0100
committerAndré Hartmann <aha_1980@gmx.de>2017-11-08 10:06:36 +0000
commit9de99ca2d395037a092a9003cad3dbb7bb5fde98 (patch)
treee64f63deea118356577f16680af3db8ca12a5368 /tests
parent7272faaa857a31db6b2098af74f7f28202b353d6 (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.cpp44
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");