From a5cf1d6164c8a338f758f84c97a5d0b084ca6262 Mon Sep 17 00:00:00 2001 From: Bartosz Golaszewski Date: Fri, 7 Apr 2023 16:32:22 +0200 Subject: [PATCH] tests: provide and use gpiod_test_chip_watch_line_info_or_fail() We can shrink the code a bit by wrapping the call to gpiod_chip_watch_line_info() and the subsequent checks in a helper macro. This also fixes a potential null-pointer dereference in one of the info event test cases. Signed-off-by: Bartosz Golaszewski --- tests/gpiod-test-helpers.h | 9 +++++++++ tests/tests-info-event.c | 22 +++++----------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/tests/gpiod-test-helpers.h b/tests/gpiod-test-helpers.h index 5b3476a..41791a3 100644 --- a/tests/gpiod-test-helpers.h +++ b/tests/gpiod-test-helpers.h @@ -88,6 +88,15 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(struct_gpiod_edge_event_buffer, _info; \ }) +#define gpiod_test_chip_watch_line_info_or_fail(_chip, _offset) \ + ({ \ + struct gpiod_line_info *_info = \ + gpiod_chip_watch_line_info(_chip, _offset); \ + g_assert_nonnull(_info); \ + gpiod_test_return_if_failed(); \ + _info; \ + }) + #define gpiod_test_create_line_settings_or_fail() \ ({ \ struct gpiod_line_settings *_settings = \ diff --git a/tests/tests-info-event.c b/tests/tests-info-event.c index 958d2b6..9f942eb 100644 --- a/tests/tests-info-event.c +++ b/tests/tests-info-event.c @@ -18,9 +18,7 @@ GPIOD_TEST_CASE(watching_info_events_returns_line_info) g_autoptr(struct_gpiod_line_info) info = NULL; chip = gpiod_test_open_chip_or_fail(g_gpiosim_chip_get_dev_path(sim)); - - info = gpiod_chip_watch_line_info(chip, 3); - g_assert_nonnull(info); + info = gpiod_test_chip_watch_line_info_or_fail(chip, 3); g_assert_cmpuint(gpiod_line_info_get_offset(info), ==, 3); } @@ -31,7 +29,6 @@ GPIOD_TEST_CASE(try_offset_out_of_range) g_autoptr(struct_gpiod_line_info) info = NULL; chip = gpiod_test_open_chip_or_fail(g_gpiosim_chip_get_dev_path(sim)); - info = gpiod_chip_watch_line_info(chip, 10); g_assert_null(info); gpiod_test_expect_errno(EINVAL); @@ -45,10 +42,7 @@ GPIOD_TEST_CASE(event_timeout) gint ret; chip = gpiod_test_open_chip_or_fail(g_gpiosim_chip_get_dev_path(sim)); - - info = gpiod_chip_watch_line_info(chip, 6); - g_assert_nonnull(info); - gpiod_test_return_if_failed(); + info = gpiod_test_chip_watch_line_info_or_fail(chip, 6); ret = gpiod_chip_wait_info_event(chip, 100000000); g_assert_cmpint(ret, ==, 0); @@ -121,9 +115,7 @@ GPIOD_TEST_CASE(request_reconfigure_release_events) line_cfg = gpiod_test_create_line_config_or_fail(); settings = gpiod_test_create_line_settings_or_fail(); - info = gpiod_chip_watch_line_info(chip, 3); - g_assert_nonnull(info); - gpiod_test_return_if_failed(); + info = gpiod_test_chip_watch_line_info_or_fail(chip, 3); g_assert_false(gpiod_line_info_is_used(info)); @@ -217,9 +209,7 @@ GPIOD_TEST_CASE(chip_fd_can_be_polled) settings = gpiod_test_create_line_settings_or_fail(); line_cfg = gpiod_test_create_line_config_or_fail(); - info = gpiod_chip_watch_line_info(chip, 3); - g_assert_nonnull(info); - gpiod_test_return_if_failed(); + info = gpiod_test_chip_watch_line_info_or_fail(chip, 3); g_assert_false(gpiod_line_info_is_used(info)); @@ -278,9 +268,7 @@ GPIOD_TEST_CASE(unwatch_and_check_that_no_events_are_generated) gpiod_test_line_config_add_line_settings_or_fail(line_cfg, &offset, 1, NULL); - info = gpiod_chip_watch_line_info(chip, 3); - g_assert_nonnull(info); - gpiod_test_return_if_failed(); + info = gpiod_test_chip_watch_line_info_or_fail(chip, 3); request = gpiod_test_chip_request_lines_or_fail(chip, NULL, line_cfg); -- 2.30.2