1
0
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:
Benjamin Tissoires
2017-07-11 20:00:17 +02:00
parent 7b1e7dc4e7
commit 51d625244d
6 changed files with 42 additions and 12 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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