test: add a few more tests for disconnection behavior

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2020-10-27 13:46:07 +10:00
parent eef9c51df3
commit 03e5a547f5

View file

@ -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();