test: set up libreis support in eierpecken

The basic set of functions and macros to have access to a libreis
context for our to-be-client.

Since we connect the ei context to a backend during peck_new(), we need
a new function for the case where we do want to have libreis in the
mix.
This commit is contained in:
Peter Hutterer 2022-07-28 15:59:40 +10:00
parent 223d65858d
commit b4efd0fa5f
3 changed files with 56 additions and 5 deletions

View file

@ -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',

View file

@ -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)
{

View file

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