diff --git a/tests/test-umockdev.c b/tests/test-umockdev.c index 81c67dbb..cdadfced 100644 --- a/tests/test-umockdev.c +++ b/tests/test-umockdev.c @@ -205,6 +205,44 @@ t_testbed_add_device(UMockdevTestbedFixture * fixture, gconstpointer data) g_free(syspath); } +static void +t_testbed_add_devicev_fstat(UMockdevTestbedFixture * fixture, gconstpointer data) +{ + gboolean success; + GError *error = NULL; + gchar const* devnode; + int fd; + struct stat stat_from_fstat; + struct stat stat_from_stat; + struct udev *udev; + struct udev_monitor *udev_mon; + struct udev_device *device; + + /* Set up Udev monitor to check for added event */ + udev = udev_new(); + g_assert(udev != NULL); + udev_mon = udev_monitor_new_from_netlink(udev, "udev"); + g_assert(udev_mon != NULL); + g_assert_cmpint(udev_monitor_get_fd(udev_mon), >, 0); + g_assert_cmpint(udev_monitor_enable_receiving(udev_mon), ==, 0); + + success = umockdev_testbed_add_from_file(fixture->testbed, "tests/w740su-touchpad.umockdev", &error); + g_assert_no_error(error); + g_clear_error(&error); + g_assert(success); + + g_assert((device = udev_monitor_receive_device(udev_mon))!=NULL); + g_assert((devnode = udev_device_get_devnode(device))!=NULL); + g_assert_cmpint(fd = g_open(devnode, O_RDWR | O_NONBLOCK), >, 0); + g_assert_cmpint(fstat(fd, &stat_from_fstat), ==, 0); + g_assert_cmpint(stat(devnode, &stat_from_stat), ==, 0); + g_assert_cmpint(stat_from_stat.st_rdev, ==, stat_from_fstat.st_rdev); + + udev_device_unref(device); + udev_monitor_unref(udev_mon); + udev_unref(udev); +} + /* UMockdevTestbed add_device() with adding a child device */ static void t_testbed_child_device(UMockdevTestbedFixture * fixture, gconstpointer data) @@ -1938,6 +1976,8 @@ main(int argc, char **argv) t_testbed_add_devicev, t_testbed_fixture_teardown); g_test_add("/umockdev-testbed/add_device", UMockdevTestbedFixture, NULL, t_testbed_fixture_setup, t_testbed_add_device, t_testbed_fixture_teardown); + g_test_add("/umockdev-testbed/add_devicev_fstat", UMockdevTestbedFixture, NULL, t_testbed_fixture_setup, + t_testbed_add_devicev_fstat, t_testbed_fixture_teardown); g_test_add("/umockdev-testbed/add_block_device", UMockdevTestbedFixture, NULL, t_testbed_fixture_setup, t_testbed_add_block_device, t_testbed_fixture_teardown); g_test_add("/umockdev-testbed/add_device_errors", UMockdevTestbedFixture, NULL, t_testbed_fixture_setup, diff --git a/tests/w740su-touchpad.umockdev b/tests/w740su-touchpad.umockdev new file mode 100644 index 00000000..0a9c4dfb --- /dev/null +++ b/tests/w740su-touchpad.umockdev @@ -0,0 +1,128 @@ +P: /devices/platform/i8042/serio2/input/input10/event6 +N: input/event6 +S: input/by-path/platform-i8042-serio-2-event-mouse +E: DEVLINKS=/dev/input/by-path/platform-i8042-serio-2-event-mouse +E: DEVNAME=/dev/input/event6 +E: ID_INPUT=1 +E: ID_INPUT_HEIGHT_MM=58 +E: ID_INPUT_TOUCHPAD=1 +E: ID_INPUT_WIDTH_MM=96 +E: ID_PATH=platform-i8042-serio-2 +E: ID_PATH_TAG=platform-i8042-serio-2 +E: ID_SERIAL=noserial +E: MAJOR=13 +E: MINOR=70 +E: SUBSYSTEM=input +A: dev=13:70 +L: device=../../input10 +A: power/async=disabled +A: power/control=auto +A: power/runtime_active_kids=0 +A: power/runtime_active_time=0 +A: power/runtime_enabled=disabled +A: power/runtime_status=unsupported +A: power/runtime_suspended_time=0 +A: power/runtime_usage=0 + +P: /devices/platform/i8042/serio2/input/input10 +E: ABS=660800011000003 +E: EV=b +E: ID_FOR_SEAT=input-platform-i8042-serio-2 +E: ID_INPUT=1 +E: ID_INPUT_TOUCHPAD=1 +E: ID_PATH=platform-i8042-serio-2 +E: ID_PATH_TAG=platform-i8042-serio-2 +E: ID_SERIAL=noserial +E: KEY=e520 10000 0 0 0 0 +E: MODALIAS=input:b0011v0002p0007e01B1-e0,1,3,k110,145,148,14A,14D,14E,14F,ra0,1,18,1C,2F,35,36,39,3A,mlsfw +E: NAME="SynPS/2 Synaptics TouchPad" +E: PHYS="isa0060/serio2/input0" +E: PRODUCT=11/2/7/1b1 +E: PROP=5 +E: SUBSYSTEM=input +E: TAGS=:seat: +A: capabilities/abs=660800011000003 +A: capabilities/ev=b +A: capabilities/ff=0 +A: capabilities/key=e520 10000 0 0 0 0 +A: capabilities/led=0 +A: capabilities/msc=0 +A: capabilities/rel=0 +A: capabilities/snd=0 +A: capabilities/sw=0 +L: device=../../../serio2 +A: id/bustype=0011 +A: id/product=0007 +A: id/vendor=0002 +A: id/version=01b1 +A: modalias=input:b0011v0002p0007e01B1-e0,1,3,k110,145,148,14A,14D,14E,14F,ra0,1,18,1C,2F,35,36,39,3A,mlsfw +A: name=SynPS/2 Synaptics TouchPad +A: phys=isa0060/serio2/input0 +A: power/async=disabled +A: power/control=auto +A: power/runtime_active_kids=0 +A: power/runtime_active_time=0 +A: power/runtime_enabled=disabled +A: power/runtime_status=unsupported +A: power/runtime_suspended_time=0 +A: power/runtime_usage=0 +A: properties=5 +A: uniq= + +P: /devices/platform/i8042/serio2 +E: DRIVER=psmouse +E: MODALIAS=serio:ty01pr00id00ex00 +E: SERIO_EXTRA=00 +E: SERIO_FIRMWARE_ID=PNP: SYN1213 PNP0f13 +E: SERIO_ID=00 +E: SERIO_PROTO=00 +E: SERIO_TYPE=01 +E: SUBSYSTEM=serio +A: bind_mode=auto +A: description=i8042 AUX1 port +L: driver=../../../../bus/serio/drivers/psmouse +A: firmware_id=PNP: SYN1213 PNP0f13 +A: id/extra=00 +A: id/id=00 +A: id/proto=00 +A: id/type=01 +A: modalias=serio:ty01pr00id00ex00 +A: power/async=disabled +A: power/control=auto +A: power/runtime_active_kids=0 +A: power/runtime_active_time=0 +A: power/runtime_enabled=disabled +A: power/runtime_status=unsupported +A: power/runtime_suspended_time=0 +A: power/runtime_usage=0 +A: power/wakeup=disabled +A: power/wakeup_abort_count= +A: power/wakeup_active= +A: power/wakeup_active_count= +A: power/wakeup_count= +A: power/wakeup_expire_count= +A: power/wakeup_last_time_ms= +A: power/wakeup_max_time_ms= +A: power/wakeup_total_time_ms= +A: protocol=SynPS/2 +A: rate=80 +A: resetafter=5 +A: resolution=200 +A: resync_time=0 + +P: /devices/platform/i8042 +E: DRIVER=i8042 +E: MODALIAS=platform:i8042 +E: SUBSYSTEM=platform +L: driver=../../../bus/platform/drivers/i8042 +A: driver_override=(null) +A: modalias=platform:i8042 +A: power/async=disabled +A: power/control=auto +A: power/runtime_active_kids=0 +A: power/runtime_active_time=0 +A: power/runtime_enabled=disabled +A: power/runtime_status=unsupported +A: power/runtime_suspended_time=0 +A: power/runtime_usage=0 +