mirror of
https://gitlab.freedesktop.org/libinput/libei.git
synced 2026-02-04 20:00:28 +01:00
test: add a few more tests for disconnection behavior
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
eef9c51df3
commit
03e5a547f5
1 changed files with 204 additions and 0 deletions
204
test/test-ei.c
204
test/test-ei.c
|
|
@ -49,6 +49,33 @@ MUNIT_TEST(test_ei_disconnect_immediately)
|
|||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
MUNIT_TEST(test_ei_disconnect_self_immediately)
|
||||
{
|
||||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
/* Disconnect before server processed CONNECT */
|
||||
with_client(peck) {
|
||||
peck_drop_ei(peck);
|
||||
ei_unref(ei);
|
||||
}
|
||||
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
/* Expect the client to get a disconnect event */
|
||||
with_server(peck) {
|
||||
_unref_(eis_event) *connect =
|
||||
peck_eis_next_event(eis, EIS_EVENT_CLIENT_CONNECT);
|
||||
_unref_(eis_event) *disconnect =
|
||||
peck_eis_next_event(eis, EIS_EVENT_CLIENT_DISCONNECT);
|
||||
}
|
||||
|
||||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
|
||||
MUNIT_TEST(test_ei_disconnect_after_connect)
|
||||
{
|
||||
_unref_(peck) *peck = peck_new();
|
||||
|
|
@ -83,6 +110,102 @@ MUNIT_TEST(test_ei_disconnect_after_connect)
|
|||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
MUNIT_TEST(test_ei_disconnect_self_after_connect)
|
||||
{
|
||||
_unref_(peck) *peck = peck_new();
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_client(peck) {
|
||||
peck_drop_ei(peck);
|
||||
ei_unref(ei);
|
||||
}
|
||||
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_server(peck) {
|
||||
_unref_(eis_event) *connect =
|
||||
peck_eis_next_event(eis, EIS_EVENT_CLIENT_CONNECT);
|
||||
_unref_(eis_event) *disconnect =
|
||||
peck_eis_next_event(eis, EIS_EVENT_CLIENT_DISCONNECT);
|
||||
}
|
||||
|
||||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
MUNIT_TEST(test_ei_disconnect_after_seat)
|
||||
{
|
||||
_unref_(peck) *peck = peck_new();
|
||||
_unref_(eis_client) *client = NULL;
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_CLIENT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DEFAULT_SEAT);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_NONE);
|
||||
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_client(peck) {
|
||||
_unref_(ei_event) *connect =
|
||||
peck_ei_next_event(ei, EI_EVENT_CONNECT);
|
||||
_unref_(ei_event) *seat =
|
||||
peck_ei_next_event(ei, EI_EVENT_SEAT_ADDED);
|
||||
}
|
||||
|
||||
with_server(peck) {
|
||||
struct eis_client *client = peck_eis_get_default_client(peck);
|
||||
eis_client_disconnect(client);
|
||||
}
|
||||
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_client(peck) {
|
||||
_unref_(ei_event) *seat =
|
||||
peck_ei_next_event(ei, EI_EVENT_SEAT_REMOVED);
|
||||
_unref_(ei_event) *disconnect =
|
||||
peck_ei_next_event(ei, EI_EVENT_DISCONNECT);
|
||||
}
|
||||
|
||||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
MUNIT_TEST(test_ei_disconnect_self_after_seat)
|
||||
{
|
||||
_unref_(peck) *peck = peck_new();
|
||||
_unref_(eis_client) *client = NULL;
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_CLIENT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DEFAULT_SEAT);
|
||||
peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_NONE);
|
||||
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_client(peck) {
|
||||
_unref_(ei_event) *connect =
|
||||
peck_ei_next_event(ei, EI_EVENT_CONNECT);
|
||||
_unref_(ei_event) *seat =
|
||||
peck_ei_next_event(ei, EI_EVENT_SEAT_ADDED);
|
||||
peck_drop_ei(peck);
|
||||
/* Disconnect from client */
|
||||
ei_unref(ei);
|
||||
|
||||
/* There is no way to disconnect from the server without
|
||||
* destroying the context, so we don't care about the actual
|
||||
* events here
|
||||
*/
|
||||
}
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_NONE);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_server(peck) {
|
||||
_unref_(eis_event) *disconnect =
|
||||
peck_eis_next_event(eis, EIS_EVENT_CLIENT_DISCONNECT);
|
||||
}
|
||||
|
||||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
MUNIT_TEST(test_ei_disconnect_after_add_before_received)
|
||||
{
|
||||
_unref_(peck) *peck = peck_new();
|
||||
|
|
@ -119,6 +242,44 @@ MUNIT_TEST(test_ei_disconnect_after_add_before_received)
|
|||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
MUNIT_TEST(test_ei_disconnect_self_after_add_before_received)
|
||||
{
|
||||
_unref_(peck) *peck = peck_new();
|
||||
_unref_(eis_client) *client = NULL;
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_CLIENT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DEFAULT_SEAT);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_client(peck) {
|
||||
struct ei_seat *seat = peck_ei_get_default_seat(peck);
|
||||
_unref_(ei_device) *device = ei_device_new(seat);
|
||||
ei_device_configure_name(device, __func__);
|
||||
ei_device_configure_capability(device, EI_DEVICE_CAP_POINTER);
|
||||
ei_device_add(device);
|
||||
peck_drop_ei(peck);
|
||||
ei_unref(ei);
|
||||
}
|
||||
|
||||
peck_dispatch_eis(peck);
|
||||
|
||||
with_server(peck) {
|
||||
_unref_(eis_event) *added =
|
||||
peck_eis_next_event(eis, EIS_EVENT_DEVICE_ADDED);
|
||||
|
||||
/* Device is already gone, but let's say we add it anyway */
|
||||
struct eis_device *device = eis_event_get_device(added);
|
||||
eis_device_connect(device);
|
||||
|
||||
_unref_(eis_event) *removed =
|
||||
peck_eis_next_event(eis, EIS_EVENT_DEVICE_REMOVED);
|
||||
_unref_(eis_event) *disconnect =
|
||||
peck_eis_next_event(eis, EIS_EVENT_CLIENT_DISCONNECT);
|
||||
}
|
||||
|
||||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
MUNIT_TEST(test_ei_disconnect_after_add_after_received)
|
||||
{
|
||||
_unref_(peck) *peck = peck_new();
|
||||
|
|
@ -157,6 +318,49 @@ MUNIT_TEST(test_ei_disconnect_after_add_after_received)
|
|||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
MUNIT_TEST(test_ei_disconnect_self_after_add_after_received)
|
||||
{
|
||||
_unref_(peck) *peck = peck_new();
|
||||
_unref_(eis_client) *client = NULL;
|
||||
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_ACCEPT_CLIENT);
|
||||
peck_enable_eis_behavior(peck, PECK_EIS_BEHAVIOR_DEFAULT_SEAT);
|
||||
peck_dispatch_until_stable(peck);
|
||||
|
||||
with_client(peck) {
|
||||
struct ei_seat *seat = peck_ei_get_default_seat(peck);
|
||||
_unref_(ei_device) *device = ei_device_new(seat);
|
||||
ei_device_configure_name(device, __func__);
|
||||
ei_device_configure_capability(device, EI_DEVICE_CAP_POINTER);
|
||||
ei_device_add(device);
|
||||
}
|
||||
|
||||
peck_dispatch_eis(peck);
|
||||
|
||||
with_client(peck) {
|
||||
peck_drop_ei(peck);
|
||||
ei_unref(ei);
|
||||
}
|
||||
|
||||
peck_dispatch_eis(peck);
|
||||
|
||||
with_server(peck) {
|
||||
_unref_(eis_event) *added =
|
||||
peck_eis_next_event(eis, EIS_EVENT_DEVICE_ADDED);
|
||||
|
||||
/* Device is already gone, but let's say we add it anyway */
|
||||
struct eis_device *device = eis_event_get_device(added);
|
||||
eis_device_connect(device);
|
||||
|
||||
_unref_(eis_event) *removed =
|
||||
peck_eis_next_event(eis, EIS_EVENT_DEVICE_REMOVED);
|
||||
_unref_(eis_event) *disconnect =
|
||||
peck_eis_next_event(eis, EIS_EVENT_CLIENT_DISCONNECT);
|
||||
}
|
||||
|
||||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
MUNIT_TEST(test_ei_disconnect_after_remove_before_received)
|
||||
{
|
||||
_unref_(peck) *peck = peck_new();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue