mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2025-11-15 07:38:12 +00:00
tests: Add support for creating other virtual readers
Add support for creating more virtual readers.
This commit is contained in:
@@ -22,41 +22,60 @@
|
||||
|
||||
#include "test-utils.h"
|
||||
|
||||
void
|
||||
fpt_teardown_virtual_device_environment (void)
|
||||
struct
|
||||
{
|
||||
const char *path = g_getenv ("FP_VIRTUAL_IMAGE");
|
||||
const char *envvar;
|
||||
const char *driver_id;
|
||||
const char *device_id;
|
||||
} devtype_vars[FPT_NUM_VIRTUAL_DEVICE_TYPES] = {
|
||||
{ "FP_VIRTUAL_IMAGE", "virtual_image", "virtual_image" }, /* FPT_VIRTUAL_DEVICE_IMAGE */
|
||||
{ "FP_VIRTUAL_DEVICE", "virtual_device", "virtual_device" }, /* FPT_VIRTUAL_DEVICE */
|
||||
{ "FP_VIRTUAL_DEVICE_IDENT", "virtual_device", "virtual_device_ident" } /* FPT_VIRTUAL_DEVICE_IDENT */
|
||||
};
|
||||
|
||||
void
|
||||
fpt_teardown_virtual_device_environment (FptVirtualDeviceType devtype)
|
||||
{
|
||||
const char *path;
|
||||
|
||||
path = g_getenv (devtype_vars[devtype].envvar);
|
||||
|
||||
if (path)
|
||||
{
|
||||
g_autofree char *temp_dir = g_path_get_dirname (path);
|
||||
|
||||
g_unsetenv ("FP_VIRTUAL_IMAGE");
|
||||
g_unsetenv (devtype_vars[devtype].envvar);
|
||||
g_unlink (path);
|
||||
g_rmdir (temp_dir);
|
||||
}
|
||||
}
|
||||
|
||||
static FptVirtualDeviceType global_devtype;
|
||||
|
||||
static void
|
||||
on_signal_event (int sig)
|
||||
{
|
||||
fpt_teardown_virtual_device_environment ();
|
||||
fpt_teardown_virtual_device_environment (global_devtype);
|
||||
}
|
||||
|
||||
void
|
||||
fpt_setup_virtual_device_environment (void)
|
||||
fpt_setup_virtual_device_environment (FptVirtualDeviceType devtype)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autofree char *temp_dir = NULL;
|
||||
g_autofree char *temp_path = NULL;
|
||||
g_autofree char *filename = NULL;
|
||||
|
||||
g_assert_null (g_getenv ("FP_VIRTUAL_IMAGE"));
|
||||
g_assert_null (g_getenv (devtype_vars[devtype].envvar));
|
||||
|
||||
temp_dir = g_dir_make_tmp ("libfprint-XXXXXX", &error);
|
||||
g_assert_no_error (error);
|
||||
|
||||
temp_path = g_build_filename (temp_dir, "virtual-image.socket", NULL);
|
||||
g_setenv ("FP_VIRTUAL_IMAGE", temp_path, TRUE);
|
||||
filename = g_strdup_printf ("%s.socket", devtype_vars[devtype].device_id);
|
||||
temp_path = g_build_filename (temp_dir, filename, NULL);
|
||||
g_setenv (devtype_vars[devtype].envvar, temp_path, TRUE);
|
||||
|
||||
global_devtype = devtype;
|
||||
|
||||
signal (SIGKILL, on_signal_event);
|
||||
signal (SIGABRT, on_signal_event);
|
||||
@@ -78,13 +97,16 @@ fpt_context_new (void)
|
||||
}
|
||||
|
||||
FptContext *
|
||||
fpt_context_new_with_virtual_imgdev (void)
|
||||
fpt_context_new_with_virtual_device (FptVirtualDeviceType devtype)
|
||||
{
|
||||
FptContext *tctx;
|
||||
GPtrArray *devices;
|
||||
unsigned int i;
|
||||
|
||||
fpt_setup_virtual_device_environment ();
|
||||
g_assert_true (devtype >= FPT_VIRTUAL_DEVICE_IMAGE &&
|
||||
devtype < FPT_NUM_VIRTUAL_DEVICE_TYPES);
|
||||
|
||||
fpt_setup_virtual_device_environment (devtype);
|
||||
|
||||
tctx = fpt_context_new ();
|
||||
devices = fp_context_get_devices (tctx->fp_context);
|
||||
@@ -96,7 +118,7 @@ fpt_context_new_with_virtual_imgdev (void)
|
||||
{
|
||||
FpDevice *device = devices->pdata[i];
|
||||
|
||||
if (g_strcmp0 (fp_device_get_driver (device), "virtual_image") == 0)
|
||||
if (g_strcmp0 (fp_device_get_driver (device), devtype_vars[devtype].driver_id) == 0)
|
||||
{
|
||||
tctx->device = device;
|
||||
break;
|
||||
@@ -105,6 +127,7 @@ fpt_context_new_with_virtual_imgdev (void)
|
||||
|
||||
g_assert_true (FP_IS_DEVICE (tctx->device));
|
||||
g_object_add_weak_pointer (G_OBJECT (tctx->device), (gpointer) & tctx->device);
|
||||
g_object_set_data (G_OBJECT (tctx->fp_context), "devtype", GUINT_TO_POINTER (devtype));
|
||||
|
||||
return tctx;
|
||||
}
|
||||
@@ -112,6 +135,10 @@ fpt_context_new_with_virtual_imgdev (void)
|
||||
void
|
||||
fpt_context_free (FptContext *tctx)
|
||||
{
|
||||
FptVirtualDeviceType devtype;
|
||||
|
||||
devtype = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (tctx->fp_context), "devtype"));
|
||||
|
||||
if (tctx->device && fp_device_is_open (tctx->device))
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
@@ -123,5 +150,5 @@ fpt_context_free (FptContext *tctx)
|
||||
g_clear_object (&tctx->fp_context);
|
||||
g_free (tctx);
|
||||
|
||||
fpt_teardown_virtual_device_environment ();
|
||||
fpt_teardown_virtual_device_environment (devtype);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user