From be410559e0c955aa6b70397d7088f263686ff447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20G=C5=82=C4=85b?= Date: Wed, 23 Oct 2024 12:02:36 +0200 Subject: [PATCH 1/4] [nrf fromtree] tests: drivers: can: api: Add negative test for can_add_rx_filter() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Check that error is reported when CAN filter is added without callback function. Signed-off-by: Sebastian Głąb (cherry picked from commit dbc8eaa5359bb23c00cebf92dc049ddbc312bd02) --- tests/drivers/can/api/src/classic.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/drivers/can/api/src/classic.c b/tests/drivers/can/api/src/classic.c index b762137f8cd2..c3e85015a658 100644 --- a/tests/drivers/can/api/src/classic.c +++ b/tests/drivers/can/api/src/classic.c @@ -615,6 +615,19 @@ ZTEST(can_classic, test_add_filter) can_remove_rx_filter(can_dev, filter_id); } +/** + * @brief Test adding filter without callback. + */ +ZTEST(can_classic, test_add_filter_without_callback) +{ + int err; + + Z_TEST_SKIP_IFNDEF(CONFIG_RUNTIME_ERROR_CHECKS); + + err = can_add_rx_filter(can_dev, NULL, NULL, &test_std_filter_1); + zassert_equal(err, -EINVAL, "added filter with NULL callback"); +} + /** * @brief Test adding an invalid CAN RX filter. * From c506fb0a464628ce32b3a82e082fee7c90a57590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20G=C5=82=C4=85b?= Date: Wed, 23 Oct 2024 12:05:25 +0200 Subject: [PATCH 2/4] [nrf fromtree] tests: drivers: can: api: Add negative test for can_set_bitrate() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There is negative test for too high bitrate. Add test that checks too low bitrate. Signed-off-by: Sebastian Głąb (cherry picked from commit 13fbac86eb41702e9071552feea1d8f5f446dcbf) --- tests/drivers/can/api/src/classic.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/drivers/can/api/src/classic.c b/tests/drivers/can/api/src/classic.c index c3e85015a658..cf852487aa96 100644 --- a/tests/drivers/can/api/src/classic.c +++ b/tests/drivers/can/api/src/classic.c @@ -486,6 +486,31 @@ ZTEST_USER(can_classic, test_bitrate_limits) zassert_true(min <= max, "min bitrate must be lower or equal to max bitrate"); } +/** + * @brief Test setting a too low bitrate. + */ +ZTEST_USER(can_classic, test_set_bitrate_too_low) +{ + uint32_t min = can_get_bitrate_min(can_dev); + int err; + + if (min == 0) { + ztest_test_skip(); + } + + err = can_stop(can_dev); + zassert_equal(err, 0, "failed to stop CAN controller (err %d)", err); + + err = can_set_bitrate(can_dev, min - 1); + zassert_equal(err, -ENOTSUP, "too low bitrate accepted"); + + err = can_set_bitrate(can_dev, CONFIG_CAN_DEFAULT_BITRATE); + zassert_equal(err, 0, "failed to restore default bitrate"); + + err = can_start(can_dev); + zassert_equal(err, 0, "failed to start CAN controller (err %d)", err); +} + /** * @brief Test setting a too high bitrate. */ From c39e1346a7f104c2dd612a304645b99e6d501f92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20G=C5=82=C4=85b?= Date: Wed, 23 Oct 2024 12:07:24 +0200 Subject: [PATCH 3/4] [nrf fromtree] tests: drivers: can: api: Add negative test for can_set_bitrate_data() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There is negative test for too high data bitrate. Add test that checks too low data bitrate. Signed-off-by: Sebastian Głąb (cherry picked from commit 2616720ee2a0c45732f6debba5581d9a8da0fffc) --- tests/drivers/can/api/src/canfd.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/drivers/can/api/src/canfd.c b/tests/drivers/can/api/src/canfd.c index 80703655d1fb..38f7cc7346dc 100644 --- a/tests/drivers/can/api/src/canfd.c +++ b/tests/drivers/can/api/src/canfd.c @@ -395,6 +395,31 @@ ZTEST_USER(canfd, test_set_timing_data_min) zassert_equal(err, 0, "failed to start CAN controller (err %d)", err); } +/** + * @brief Test setting a too low data phase bitrate. + */ +ZTEST_USER(canfd, test_set_bitrate_data_too_low) +{ + uint32_t min = can_get_bitrate_min(can_dev); + int err; + + if (min == 0) { + ztest_test_skip(); + } + + err = can_stop(can_dev); + zassert_equal(err, 0, "failed to stop CAN controller (err %d)", err); + + err = can_set_bitrate_data(can_dev, min - 1); + zassert_equal(err, -ENOTSUP, "too low data phase bitrate accepted"); + + err = can_set_bitrate_data(can_dev, CONFIG_CAN_DEFAULT_BITRATE_DATA); + zassert_equal(err, 0, "failed to restore default data bitrate"); + + err = can_start(can_dev); + zassert_equal(err, 0, "failed to start CAN controller (err %d)", err); +} + /** * @brief Test setting a too high data phase bitrate. */ From dbfa14f0ecd8a5396bd0afd3d0996782578f9ec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20G=C5=82=C4=85b?= Date: Wed, 23 Oct 2024 12:10:49 +0200 Subject: [PATCH 4/4] [nrf fromtree] tests: drivers: can: api: Add negative test for can_send() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Check error codes when sending invalid frames: - too big data payload; - wrong set of flags. Signed-off-by: Sebastian Głąb (cherry picked from commit 8023a58c2a463cfcda1ffeaf41b0ea853bba0178) --- tests/drivers/can/api/src/canfd.c | 39 +++++++++++++++++++++++++++++ tests/drivers/can/api/src/classic.c | 27 ++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/tests/drivers/can/api/src/canfd.c b/tests/drivers/can/api/src/canfd.c index 38f7cc7346dc..50e5d43add84 100644 --- a/tests/drivers/can/api/src/canfd.c +++ b/tests/drivers/can/api/src/canfd.c @@ -238,6 +238,45 @@ ZTEST(canfd, test_canfd_get_capabilities) "CAN FD loopback mode not supported"); } +/** + * @brief Test sending CAN FD frame with too big payload. + */ +ZTEST(canfd, test_send_fd_dlc_out_of_range) +{ + struct can_frame frame = { + .flags = CAN_FRAME_FDF | CAN_FRAME_BRS, + .id = TEST_CAN_STD_ID_1, + .dlc = CANFD_MAX_DLC + 1U, + }; + int err; + + Z_TEST_SKIP_IFNDEF(CONFIG_RUNTIME_ERROR_CHECKS); + + err = can_send(can_dev, &frame, TEST_SEND_TIMEOUT, NULL, NULL); + zassert_equal(err, -EINVAL, "wrong error on sending invalid frame (err %d)", err); +} + +/** + * @brief Test error when CAN FD Error State Indicator (ESI) is send without FD format flag (FDF). + * + * CAN FD Error State Indicator (ESI) indicates that the transmitting node is + * in error-passive state. Only valid in combination with CAN_FRAME_FDF. + */ +ZTEST(canfd, test_send_fd_incorrect_esi) +{ + struct can_frame frame = { + .flags = CAN_FRAME_ESI, + .id = TEST_CAN_STD_ID_1, + .dlc = 0, + }; + int err; + + Z_TEST_SKIP_IFNDEF(CONFIG_RUNTIME_ERROR_CHECKS); + + err = can_send(can_dev, &frame, TEST_SEND_TIMEOUT, NULL, NULL); + zassert_equal(err, -ENOTSUP, "wrong error on sending invalid frame (err %d)", err); +} + /** * @brief Test send/receive with standard (11-bit) CAN IDs and classic CAN frames. */ diff --git a/tests/drivers/can/api/src/classic.c b/tests/drivers/can/api/src/classic.c index cf852487aa96..9192d6612bc6 100644 --- a/tests/drivers/can/api/src/classic.c +++ b/tests/drivers/can/api/src/classic.c @@ -856,6 +856,33 @@ ZTEST(can_classic, test_send_ext_id_out_of_range) send_invalid_frame(can_dev, &frame); } +/** + * @brief Test sending standard (11-bit ID) CAN frame with too big payload. + */ +ZTEST(can_classic, test_send_std_id_dlc_of_range) +{ + struct can_frame frame = { + .id = TEST_CAN_STD_ID_1, + .dlc = CAN_MAX_DLC + 1U, + }; + + send_invalid_frame(can_dev, &frame); +} + +/** + * @brief Test sending extended (29-bit ID) CAN frame with too big payload. + */ +ZTEST(can_classic, test_send_ext_id_dlc_of_range) +{ + struct can_frame frame = { + .flags = CAN_FRAME_IDE, + .id = TEST_CAN_EXT_ID_1, + .dlc = CAN_MAX_DLC + 1U, + }; + + send_invalid_frame(can_dev, &frame); +} + /** * @brief Test send/receive with standard (11-bit) CAN IDs. */