mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 00:14:32 +09:00
test-sd-device: limit the number of iterations when testing device parent/child functions
The test "hangs" and times out on some arm64 machines. It actually works as expected, but the machine has 2016 children under /sys/devices/system/memory/, and the tests do a double loop over this, which is slow enough to hit the 120 s limit. Add a limit on the number of iterations. Another option would be to exclude "memory" subsystem. But we may have other subsystems which have the same problem in the future, so I think it'll be more robust to not try to limit the fix to a specific subsystem.
This commit is contained in:
@@ -480,12 +480,16 @@ static void check_parent_match(sd_device_enumerator *e, sd_device *dev) {
|
||||
|
||||
TEST(sd_device_enumerator_add_match_parent) {
|
||||
_cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
|
||||
/* Some devices have thousands of children. Avoid spending too much time in the double loop below. */
|
||||
unsigned iterations = 200;
|
||||
int r;
|
||||
|
||||
ASSERT_OK(sd_device_enumerator_new(&e));
|
||||
ASSERT_OK(sd_device_enumerator_allow_uninitialized(e));
|
||||
exclude_problematic_devices(e);
|
||||
|
||||
ASSERT_OK(sd_device_enumerator_add_match_subsystem(e, "memory", false));
|
||||
|
||||
if (!slow_tests_enabled())
|
||||
ASSERT_OK(sd_device_enumerator_add_match_subsystem(e, "block", true));
|
||||
|
||||
@@ -494,6 +498,9 @@ TEST(sd_device_enumerator_add_match_parent) {
|
||||
const char *syspath;
|
||||
sd_device *parent;
|
||||
|
||||
if (iterations-- == 0)
|
||||
break;
|
||||
|
||||
ASSERT_OK(sd_device_get_syspath(dev, &syspath));
|
||||
|
||||
r = sd_device_get_parent(dev, &parent);
|
||||
@@ -559,6 +566,8 @@ TEST(sd_device_enumerator_add_all_parents) {
|
||||
|
||||
TEST(sd_device_get_child) {
|
||||
_cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
|
||||
/* Some devices have thousands of children. Avoid spending too much time in the double loop below. */
|
||||
unsigned iterations = 3000;
|
||||
int r;
|
||||
|
||||
ASSERT_OK(sd_device_enumerator_new(&e));
|
||||
@@ -589,6 +598,9 @@ TEST(sd_device_get_child) {
|
||||
FOREACH_DEVICE_CHILD_WITH_SUFFIX(parent, child, suffix) {
|
||||
const char *s;
|
||||
|
||||
if (iterations-- == 0)
|
||||
return;
|
||||
|
||||
ASSERT_NOT_NULL(child);
|
||||
ASSERT_NOT_NULL(suffix);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user