diff --git a/meson.build b/meson.build index fbb2a10..341346c 100644 --- a/meson.build +++ b/meson.build @@ -280,7 +280,7 @@ if get_option('tests') 'test/eierpecken.h', 'test/eierpecken.c', include_directories: 'src', - dependencies: [munit, dep_libutil, dep_libei, dep_libeis], + dependencies: [munit, dep_libutil, dep_libei, dep_libeis, dep_libreis], ) test('eierpecken', diff --git a/test/eierpecken.c b/test/eierpecken.c index 267739c..640c28d 100644 --- a/test/eierpecken.c +++ b/test/eierpecken.c @@ -48,9 +48,11 @@ struct peck { struct object object; struct ei *ei; struct eis *eis; + struct reis *reis; uint32_t eis_behavior; uint32_t ei_behavior; struct logger *logger; + int ei_socket_fd; /* The default seat/devices */ struct eis_seat *eis_seat; @@ -118,6 +120,7 @@ peck_destroy(struct peck *peck) ei_unref(peck->ei); eis_unref(peck->eis); + reis_unref(peck->reis); logger_unref(peck->logger); } @@ -126,6 +129,7 @@ OBJECT_IMPLEMENT_CREATE(peck); OBJECT_IMPLEMENT_UNREF(peck); OBJECT_IMPLEMENT_GETTER(peck, ei, struct ei*); OBJECT_IMPLEMENT_GETTER(peck, eis, struct eis*); +OBJECT_IMPLEMENT_GETTER(peck, reis, struct reis*); void peck_drop_ei(struct peck *peck) @@ -344,8 +348,8 @@ peck_log_handler(struct logger *logger, fprintf(stderr, "%s", ansi_colorcode[RESET]); } -struct peck * -peck_new_context(enum peck_ei_mode ei_mode) +static struct peck * +new_context(enum peck_ei_mode ei_mode, bool with_reis) { struct peck *peck = peck_create(NULL); @@ -369,14 +373,27 @@ peck_new_context(enum peck_ei_mode ei_mode) ei_log_set_handler(ei, peck_ei_log_handler); ei_log_set_priority(ei, EI_LOG_PRIORITY_DEBUG); ei_configure_name(ei, "eierpecken test context"); - rc = ei_setup_backend_fd(ei, fd); - munit_assert_int(rc, ==, 0); + /* Setting up a backend sends out the CONNECT event - if + we want libreis do so something beforehand we need to + keep the fd and set up the backend later */ + if (!with_reis) { + rc = ei_setup_backend_fd(ei, fd); + munit_assert_int(rc, ==, 0); + peck->ei_socket_fd = -1; + } else { + peck->ei_socket_fd = fd; + } peck->ei = ei; peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_HANDLE_CONNECT); peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTOSEAT); peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_AUTOSTART); peck_enable_ei_behavior(peck, PECK_EI_BEHAVIOR_HANDLE_FRAME); + if (with_reis) { + struct reis *reis = reis_new(fd); + peck->reis = reis; + } + peck->logger = logger_new("peck", peck); logger_set_handler(peck->logger, peck_log_handler); logger_set_priority(peck->logger, LOGGER_DEBUG); @@ -384,12 +401,35 @@ peck_new_context(enum peck_ei_mode ei_mode) return peck; } +struct peck * +peck_new_context(enum peck_ei_mode ei_mode) +{ + return new_context(ei_mode, false); +} + struct peck * peck_new(void) { return peck_new_context(PECK_EI_SENDER); } +struct peck * +peck_new_context_with_reis(enum peck_ei_mode ei_mode) +{ + return new_context(ei_mode, true); +} + +void +peck_ei_connect(struct peck *peck) +{ + assert(peck->ei_socket_fd != -1); + + struct ei *ei = peck->ei; + int rc = ei_setup_backend_fd(ei, peck->ei_socket_fd); + munit_assert_int(rc, ==, 0); + peck->ei_socket_fd = -1; +} + void peck_enable_eis_behavior(struct peck *peck, enum peck_eis_behavior behavior) { diff --git a/test/eierpecken.h b/test/eierpecken.h index b696dd6..7339516 100644 --- a/test/eierpecken.h +++ b/test/eierpecken.h @@ -29,6 +29,7 @@ #include "libei.h" #include "libeis.h" +#include "libreis.h" #include "util-mem.h" @@ -143,6 +144,12 @@ peck_new(void); struct peck * peck_new_context(enum peck_ei_mode ei_mode); +struct peck * +peck_new_context_with_reis(enum peck_ei_mode ei_mode); + +void +peck_ei_connect(struct peck *peck); + void _peck_mark(struct peck *peck, const char *func, int line); /** Add debug marker to the log output */ #define peck_mark(peck_) _peck_mark(peck_, __func__, __LINE__) @@ -156,6 +163,9 @@ peck_enable_ei_behavior(struct peck *peck, enum peck_ei_behavior behavior); struct ei * peck_get_ei(struct peck *peck); +struct reis * +peck_get_reis(struct peck *peck); + void peck_drop_ei(struct peck *peck); @@ -331,6 +341,7 @@ DEFINE_UNREF_CLEANUP_FUNC(eis_region); of a test handles server vs client */ #define with_server(peck_) for (struct eis *eis = peck_get_eis(peck_); eis; eis = NULL) #define with_client(peck_) for (struct ei *ei = peck_get_ei(peck_); ei; ei = NULL) +#define with_reis(peck_) for (struct reis *reis = peck_get_reis(peck_); reis; reis = NULL) #define with_emulation(d_) for (bool _loop = ({ ei_device_start_emulating(d_); true;});\ _loop; \ ({ ei_device_stop_emulating(d_); _loop = false; }))