From 18b34d0bc00491068f103f4c4cede1ef97ad3c81 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 16 Jul 2025 12:46:29 +1000 Subject: [PATCH] test: split some tablet tests into new groups Our CI pipeline fails 9 times out of 10 on the valgrind tests. The tests seem to finish in either 35 min or exceed the 60 min timeout limit, with nothing in between. To avoid this let's split into more groups so we can a) run those more in parallel and b) are less likely to hit the timeout when run slowly. Analysis of recent logs shows the eraser button tests to be the worst offender, taking 752s (due to the combinatorial explosion) alone. The various tip and proximity tests together also take some time so let's group those out. Part-of: --- .gitlab-ci.yml | 55 ++++++++++++++++++++++++ .gitlab-ci/config.yml | 7 ++++ meson.build | 3 ++ test/test-tablet.c | 98 +++++++++++++++++++++++++------------------ 4 files changed, 123 insertions(+), 40 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c5bcea3e..75fe8f64 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -705,6 +705,32 @@ vm-tablet_left_handed-no-libwacom: variables: MESON_ARGS: '-Dlibwacom=false' +vm-tablet_proximity_tip: + extends: + - .fedora:42@test-suite-vm + variables: + SUITE_NAMES: 'tablet_proximity tablet_tip' + +vm-tablet_proximity_tip-no-libwacom: + extends: + - vm-tablet_proximity_tip + stage: test-suite-no-libwacom + variables: + MESON_ARGS: '-Dlibwacom=false' + +vm-tablet_eraser: + extends: + - .fedora:42@test-suite-vm + variables: + SUITE_NAMES: 'tablet_eraser' + +vm-tablet_eraser-no-libwacom: + extends: + - vm-tablet_eraser + stage: test-suite-no-libwacom + variables: + MESON_ARGS: '-Dlibwacom=false' + vm-gestures: extends: - .fedora:42@test-suite-vm @@ -888,6 +914,32 @@ vm-valgrind-tablet_left_handed: rules: - if: $GITLAB_USER_LOGIN != "marge-bot" +vm-valgrind-tablet_proximity_tip: + stage: valgrind + extends: + - vm-tablet_proximity_tip + - .policy-retry-on-failure + variables: + MESON_TEST_ARGS: '--setup=valgrind' + LITEST_JOBS: 0 + retry: + max: 2 + rules: + - if: $GITLAB_USER_LOGIN != "marge-bot" + +vm-valgrind-tablet_eraser: + stage: valgrind + extends: + - vm-tablet_eraser + - .policy-retry-on-failure + variables: + MESON_TEST_ARGS: '--setup=valgrind' + LITEST_JOBS: 0 + retry: + max: 2 + rules: + - if: $GITLAB_USER_LOGIN != "marge-bot" + vm-valgrind-gestures: stage: valgrind extends: @@ -1093,6 +1145,9 @@ check-test-suites: libinput-test-suite-touchpad_buttons libinput-test-suite-tablet libinput-test-suite-tablet_left_handed + libinput-test-suite-tablet_proximity + libinput-test-suite-tablet_tip + libinput-test-suite-tablet_eraser libinput-test-suite-gestures libinput-test-suite-path libinput-test-suite-udev diff --git a/.gitlab-ci/config.yml b/.gitlab-ci/config.yml index 42624594..1ff1df6c 100644 --- a/.gitlab-ci/config.yml +++ b/.gitlab-ci/config.yml @@ -195,6 +195,13 @@ test_suites: - name: tablet_left_handed suites: - tablet_left_handed + - name: tablet_proximity_tip + suites: + - tablet_proximity + - tablet_tip + - name: tablet_eraser + suites: + - tablet_eraser - name: gestures suites: - gestures diff --git a/meson.build b/meson.build index f7f2660b..716f6d26 100644 --- a/meson.build +++ b/meson.build @@ -1023,7 +1023,10 @@ if get_option('tests') 'quirks', 'switch', 'tablet', + 'tablet_eraser', 'tablet_left_handed', + 'tablet_proximity', + 'tablet_tip', 'totem', 'touch', 'touchpad', diff --git a/test/test-tablet.c b/test/test-tablet.c index 0778ddd4..c99d4648 100644 --- a/test/test-tablet.c +++ b/test/test-tablet.c @@ -7473,41 +7473,10 @@ TEST_COLLECTION(tablet) litest_add_no_device(tools_with_serials); litest_add_no_device(tools_without_serials); litest_add_for_device(tool_delayed_serial, LITEST_WACOM_HID4800_PEN); - litest_add(proximity_out_clear_buttons, LITEST_TABLET, LITEST_FORCED_PROXOUT); - litest_add(proximity_in_out, LITEST_TABLET, LITEST_ANY); - litest_add(proximity_in_button_down, LITEST_TABLET, LITEST_ANY); - litest_add(proximity_out_button_up, LITEST_TABLET, LITEST_ANY); - litest_add(proximity_has_axes, LITEST_TABLET, LITEST_ANY); - litest_add(bad_distance_events, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY); - litest_add(proximity_range_enter, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); - litest_add(proximity_range_in_out, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); - litest_add(proximity_range_button_click, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); - litest_add(proximity_range_button_press, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); - litest_add(proximity_range_button_release, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); - litest_add(proximity_out_slow_event, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY); - litest_add(proximity_out_not_during_contact, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY); - litest_add(proximity_out_not_during_buttonpress, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY); - litest_add(proximity_out_disables_forced, LITEST_TABLET, LITEST_FORCED_PROXOUT|LITEST_TOTEM); - litest_add(proximity_out_disables_forced_after_forced, LITEST_TABLET, LITEST_FORCED_PROXOUT|LITEST_TOTEM); litest_add_no_device(proximity_out_on_delete); litest_add(button_down_up, LITEST_TABLET, LITEST_ANY); litest_add(button_seat_count, LITEST_TABLET, LITEST_ANY); litest_add_no_device(button_up_on_delete); - litest_add(tip_down_up, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); - litest_add(tip_down_prox_in, LITEST_TABLET, LITEST_ANY); - litest_add(tip_up_prox_out, LITEST_TABLET, LITEST_ANY); - litest_add(tip_down_btn_change, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); - litest_add(tip_up_btn_change, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); - litest_add(tip_down_motion, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); - litest_add(tip_up_motion, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); - litest_add(tip_down_up_eraser, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); - litest_with_parameters(params, "axis", 'I', 2, litest_named_i32(ABS_X), litest_named_i32(ABS_Y)) { - litest_add_parametrized(tip_up_motion_one_axis, LITEST_TABLET|LITEST_HOVER, LITEST_ANY, params); - } - litest_add(tip_state_proximity, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); - litest_add(tip_state_axis, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); - litest_add(tip_state_button, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); - litest_add_no_device(tip_up_on_delete); litest_add(motion, LITEST_TABLET, LITEST_ANY); litest_add(motion_event_state, LITEST_TABLET, LITEST_ANY); litest_add_for_device(motion_outside_bounds, LITEST_WACOM_CINTIQ_24HD_PEN); @@ -7526,6 +7495,7 @@ TEST_COLLECTION(tablet) litest_add(mouse_buttons, LITEST_TABLET | LITEST_TOOL_MOUSE, LITEST_ANY); litest_add(mouse_rotation, LITEST_TABLET | LITEST_TOOL_MOUSE, LITEST_ANY); litest_add(mouse_wheel, LITEST_TABLET | LITEST_TOOL_MOUSE, LITEST_WHEEL); + litest_add(airbrush_tool, LITEST_TABLET, LITEST_ANY); litest_add(airbrush_slider, LITEST_TABLET, LITEST_ANY); litest_add(artpen_tool, LITEST_TABLET, LITEST_ANY); @@ -7604,15 +7574,6 @@ TEST_COLLECTION(tablet) } litest_add_for_device(tablet_smoothing, LITEST_WACOM_HID4800_PEN); - - litest_with_parameters(params, - "with-tip-down", 'b', - "configure-while-out-of-prox", 'b', - "down-when-in-prox", 'b', - "down-when-out-of-prox", 'b', - "with-motion-events", 'b') { - litest_add_parametrized(tablet_eraser_button_disabled, LITEST_TABLET, LITEST_TOTEM|LITEST_FORCED_PROXOUT, params); - } /* clang-format on */ } @@ -7639,3 +7600,60 @@ TEST_COLLECTION(tablet_left_handed) } /* clang-format on */ } + +TEST_COLLECTION(tablet_eraser) +{ + /* clang-format off */ + litest_with_parameters(params, + "with-tip-down", 'b', + "configure-while-out-of-prox", 'b', + "down-when-in-prox", 'b', + "down-when-out-of-prox", 'b', + "with-motion-events", 'b') { + litest_add_parametrized(tablet_eraser_button_disabled, LITEST_TABLET, LITEST_TOTEM|LITEST_FORCED_PROXOUT, params); + } + /* clang-format on */ +} + +TEST_COLLECTION(tablet_proximity) +{ + /* clang-format off */ + litest_add(proximity_out_clear_buttons, LITEST_TABLET, LITEST_FORCED_PROXOUT); + litest_add(proximity_in_out, LITEST_TABLET, LITEST_ANY); + litest_add(proximity_in_button_down, LITEST_TABLET, LITEST_ANY); + litest_add(proximity_out_button_up, LITEST_TABLET, LITEST_ANY); + litest_add(proximity_has_axes, LITEST_TABLET, LITEST_ANY); + litest_add(bad_distance_events, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY); + litest_add(proximity_range_enter, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); + litest_add(proximity_range_in_out, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); + litest_add(proximity_range_button_click, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); + litest_add(proximity_range_button_press, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); + litest_add(proximity_range_button_release, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); + litest_add(proximity_out_slow_event, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY); + litest_add(proximity_out_not_during_contact, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY); + litest_add(proximity_out_not_during_buttonpress, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY); + litest_add(proximity_out_disables_forced, LITEST_TABLET, LITEST_FORCED_PROXOUT|LITEST_TOTEM); + litest_add(proximity_out_disables_forced_after_forced, LITEST_TABLET, LITEST_FORCED_PROXOUT|LITEST_TOTEM); + /* clang-format on */ +} + +TEST_COLLECTION(tablet_tip) +{ + /* clang-format off */ + litest_add(tip_down_up, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); + litest_add(tip_down_prox_in, LITEST_TABLET, LITEST_ANY); + litest_add(tip_up_prox_out, LITEST_TABLET, LITEST_ANY); + litest_add(tip_down_btn_change, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); + litest_add(tip_up_btn_change, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); + litest_add(tip_down_motion, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); + litest_add(tip_up_motion, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); + litest_add(tip_down_up_eraser, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); + litest_with_parameters(params, "axis", 'I', 2, litest_named_i32(ABS_X), litest_named_i32(ABS_Y)) { + litest_add_parametrized(tip_up_motion_one_axis, LITEST_TABLET|LITEST_HOVER, LITEST_ANY, params); + } + litest_add(tip_state_proximity, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); + litest_add(tip_state_axis, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); + litest_add(tip_state_button, LITEST_TABLET|LITEST_HOVER, LITEST_ANY); + litest_add_no_device(tip_up_on_delete); + /* clang-format on */ +}