forked from drath/libratbag
ratbagd: add a method to reset the test device to its defaults
Make sure we keep the defaults as such by duplicating them in driver-test.c (and mark the input data as const). Add a dbus method to reset the test device from the caller. This is much useful when running tests given we have no guarantees on the ordering. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
This commit is contained in:
@@ -188,7 +188,7 @@ static int ratbagd_get_themes(sd_bus *bus,
|
||||
/* A pre-setup sane device. Use for sanity testing by toggling the various
|
||||
* error conditions.
|
||||
*/
|
||||
static struct ratbag_test_device ratbagd_test_device_descr = {
|
||||
static const struct ratbag_test_device ratbagd_test_device_descr = {
|
||||
.num_profiles = 3,
|
||||
.num_resolutions = 3,
|
||||
.num_buttons = 4,
|
||||
@@ -290,12 +290,26 @@ static struct ratbag_test_device ratbagd_test_device_descr = {
|
||||
.destroyed_data = NULL,
|
||||
};
|
||||
|
||||
static int ratbagd_create_test_device(struct ratbagd *ctx)
|
||||
static int ratbagd_reset_test_device(sd_bus_message *m,
|
||||
void *userdata,
|
||||
sd_bus_error *error)
|
||||
{
|
||||
struct ratbagd_device *ratbagd_test_device = NULL;
|
||||
static struct ratbagd_device *ratbagd_test_device = NULL;
|
||||
struct ratbagd *ctx = userdata;
|
||||
struct ratbag_device *device;
|
||||
int r;
|
||||
|
||||
if (ratbagd_test_device) {
|
||||
(void) sd_bus_emit_signal(ctx->bus,
|
||||
RATBAGD_OBJ_ROOT,
|
||||
RATBAGD_NAME_ROOT ".Manager",
|
||||
"DeviceRemoved",
|
||||
"o",
|
||||
ratbagd_device_get_path(ratbagd_test_device));
|
||||
ratbagd_device_unlink(ratbagd_test_device);
|
||||
ratbagd_device_free(ratbagd_test_device);
|
||||
}
|
||||
|
||||
device = ratbag_device_new_test_device(ctx->lib_ctx, &ratbagd_test_device_descr);
|
||||
|
||||
r = ratbagd_device_new(&ratbagd_test_device, ctx, "test_device", device);
|
||||
@@ -309,6 +323,15 @@ static int ratbagd_create_test_device(struct ratbagd *ctx)
|
||||
}
|
||||
|
||||
ratbagd_device_link(ratbagd_test_device);
|
||||
if (m) {
|
||||
(void) sd_bus_emit_signal(ctx->bus,
|
||||
RATBAGD_OBJ_ROOT,
|
||||
RATBAGD_NAME_ROOT ".Manager",
|
||||
"DeviceNew",
|
||||
"o",
|
||||
ratbagd_device_get_path(ratbagd_test_device));
|
||||
sd_bus_reply_method_return(m, "u", r);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -317,7 +340,7 @@ static void ratbagd_init_test_device(struct ratbagd *ctx)
|
||||
{
|
||||
setenv("RATBAG_TEST", "1", 0);
|
||||
|
||||
ratbagd_create_test_device(ctx);
|
||||
ratbagd_reset_test_device(NULL, ctx, NULL);
|
||||
}
|
||||
|
||||
#else /* RATBAG_DEVELOPER_EDITION */
|
||||
@@ -330,6 +353,9 @@ static const sd_bus_vtable ratbagd_vtable[] = {
|
||||
SD_BUS_PROPERTY("Themes", "as", ratbagd_get_themes, 0, 0),
|
||||
SD_BUS_SIGNAL("DeviceNew", "o", 0),
|
||||
SD_BUS_SIGNAL("DeviceRemoved", "o", 0),
|
||||
#ifdef RATBAG_DEVELOPER_EDITION
|
||||
SD_BUS_METHOD("ResetTestDevice", "", "u", ratbagd_reset_test_device, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||
#endif /* RATBAG_DEVELOPER_EDITION */
|
||||
SD_BUS_VTABLE_END,
|
||||
};
|
||||
|
||||
|
||||
@@ -184,9 +184,12 @@ test_fake_probe(struct ratbag_device *device)
|
||||
}
|
||||
|
||||
static int
|
||||
test_probe(struct ratbag_device *device, void *data)
|
||||
test_probe(struct ratbag_device *device, const void *data)
|
||||
{
|
||||
struct ratbag_test_device *test_device = data;
|
||||
struct ratbag_test_device *test_device;
|
||||
|
||||
test_device = zalloc(sizeof(*test_device));
|
||||
memcpy(test_device, data, sizeof(*test_device));
|
||||
|
||||
ratbag_set_drv_data(device, test_device);
|
||||
ratbag_device_init_profiles(device,
|
||||
@@ -210,6 +213,7 @@ test_remove(struct ratbag_device *device)
|
||||
if (d->destroyed)
|
||||
d->destroyed(device, d->destroyed_data);
|
||||
ratbag_set_drv_data(device, NULL);
|
||||
free(d);
|
||||
}
|
||||
|
||||
struct ratbag_driver test_driver = {
|
||||
|
||||
@@ -224,7 +224,7 @@ struct ratbag_driver {
|
||||
unsigned int brightness);
|
||||
|
||||
/* private */
|
||||
int (*test_probe)(struct ratbag_device *device, void *data);
|
||||
int (*test_probe)(struct ratbag_device *device, const void *data);
|
||||
|
||||
struct list link;
|
||||
};
|
||||
@@ -503,7 +503,7 @@ ratbag_device_get_udev_property(const struct ratbag_device* device,
|
||||
bool
|
||||
ratbag_assign_driver(struct ratbag_device *device,
|
||||
const struct input_id *dev_id,
|
||||
struct ratbag_test_device *test_device);
|
||||
const struct ratbag_test_device *test_device);
|
||||
|
||||
void
|
||||
ratbag_register_driver(struct ratbag *ratbag, struct ratbag_driver *driver);
|
||||
|
||||
@@ -50,7 +50,7 @@ ratbag_register_test_drivers(struct ratbag *ratbag)
|
||||
|
||||
LIBRATBAG_EXPORT struct ratbag_device*
|
||||
ratbag_device_new_test_device(struct ratbag *ratbag,
|
||||
struct ratbag_test_device *test_device)
|
||||
const struct ratbag_test_device *test_device)
|
||||
{
|
||||
struct ratbag_device* device = NULL;
|
||||
#if BUILD_TESTS
|
||||
|
||||
@@ -82,5 +82,5 @@ struct ratbag_test_device {
|
||||
};
|
||||
|
||||
struct ratbag_device* ratbag_device_new_test_device(struct ratbag *ratbag,
|
||||
struct ratbag_test_device *test_device);
|
||||
const struct ratbag_test_device *test_device);
|
||||
|
||||
|
||||
@@ -290,7 +290,7 @@ static inline bool
|
||||
ratbag_test_driver(struct ratbag_device *device,
|
||||
const struct input_id *dev_id,
|
||||
const char *driver_name,
|
||||
struct ratbag_test_device *test_device)
|
||||
const struct ratbag_test_device *test_device)
|
||||
{
|
||||
struct ratbag *ratbag = device->ratbag;
|
||||
struct ratbag_driver *driver;
|
||||
@@ -353,7 +353,7 @@ ratbag_driver_fallback_logitech(struct ratbag_device *device,
|
||||
bool
|
||||
ratbag_assign_driver(struct ratbag_device *device,
|
||||
const struct input_id *dev_id,
|
||||
struct ratbag_test_device *test_device)
|
||||
const struct ratbag_test_device *test_device)
|
||||
{
|
||||
bool rc;
|
||||
const char *driver_name;
|
||||
|
||||
Reference in New Issue
Block a user