diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2020-11-09 00:36:13 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2020-11-14 22:55:52 +0100 |
commit | e112896994454d357861619c7db87fcea8b2d2fb (patch) | |
tree | ef820a8944c93b71a40144eca0df559b757ea640 /src | |
parent | 6e642418bb36c627b9ad6185b36f78216ecaccfe (diff) |
base-manager: allow forcing the testing without udev
Even if udev support is really built and available.
This is extremely useful to test the udev-less setup without fully
recompiling the whole daemon.
E.g.: the daemon can be run like this:
$ sudo /usr/sbin/ModemManager --debug --test-no-udev
And then, the kernel events may be reported using mmcli like this:
$ sudo mmcli --report-kernel-event-auto-scan
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-base-manager.c | 52 | ||||
-rw-r--r-- | src/mm-context.c | 21 | ||||
-rw-r--r-- | src/mm-context.h | 3 |
3 files changed, 52 insertions, 24 deletions
diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c index 27e7404b..071d92e2 100644 --- a/src/mm-base-manager.c +++ b/src/mm-base-manager.c @@ -388,10 +388,11 @@ handle_kernel_event (MMBaseManager *self, mm_obj_dbg (self, " uid: %s", uid ? uid : "n/a"); #if defined WITH_UDEV - kernel_device = mm_kernel_device_udev_new_from_properties (properties, error); -#else - kernel_device = mm_kernel_device_generic_new (properties, error); + if (!mm_context_get_test_no_udev ()) + kernel_device = mm_kernel_device_udev_new_from_properties (properties, error); + else #endif + kernel_device = mm_kernel_device_generic_new (properties, error); if (!kernel_device) return FALSE; @@ -541,12 +542,13 @@ mm_base_manager_start (MMBaseManager *self, } #if defined WITH_UDEV - mm_obj_dbg (self, "starting %s device scan...", manual_scan ? "manual" : "automatic"); - process_scan (self, manual_scan); - mm_obj_dbg (self, "finished device scan..."); -#else - mm_obj_dbg (self, "unsupported %s device scan...", manual_scan ? "manual" : "automatic"); + if (!mm_context_get_test_no_udev ()) { + mm_obj_dbg (self, "starting %s device scan...", manual_scan ? "manual" : "automatic"); + process_scan (self, manual_scan); + mm_obj_dbg (self, "finished device scan..."); + } else #endif + mm_obj_dbg (self, "unsupported %s device scan...", manual_scan ? "manual" : "automatic"); } /*****************************************************************************/ @@ -725,16 +727,17 @@ scan_devices_auth_ready (MMAuthProvider *authp, g_dbus_method_invocation_take_error (ctx->invocation, error); else { #if defined WITH_UDEV - /* Otherwise relaunch device scan */ - mm_base_manager_start (MM_BASE_MANAGER (ctx->self), TRUE); - mm_gdbus_org_freedesktop_modem_manager1_complete_scan_devices ( - MM_GDBUS_ORG_FREEDESKTOP_MODEM_MANAGER1 (ctx->self), - ctx->invocation); -#else - g_dbus_method_invocation_return_error_literal ( - ctx->invocation, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, - "Cannot request manual scan of devices: unsupported"); + if (!mm_context_get_test_no_udev ()) { + /* Otherwise relaunch device scan */ + mm_base_manager_start (MM_BASE_MANAGER (ctx->self), TRUE); + mm_gdbus_org_freedesktop_modem_manager1_complete_scan_devices ( + MM_GDBUS_ORG_FREEDESKTOP_MODEM_MANAGER1 (ctx->self), + ctx->invocation); + } else #endif + g_dbus_method_invocation_return_error_literal ( + ctx->invocation, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, + "Cannot request manual scan of devices: unsupported"); } scan_devices_context_free (ctx); @@ -788,7 +791,7 @@ report_kernel_event_auth_ready (MMAuthProvider *authp, goto out; #if defined WITH_UDEV - if (ctx->self->priv->auto_scan) { + if (!mm_context_get_test_no_udev () && ctx->self->priv->auto_scan) { error = g_error_new_literal (MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED, "Cannot report kernel event: " "udev monitoring already in place"); @@ -1397,12 +1400,13 @@ initable_init (GInitable *initable, return FALSE; #if defined WITH_UDEV - /* Create udev client based on the subsystems requested by the plugins */ - self->priv->udev = g_udev_client_new (mm_plugin_manager_get_subsystems (self->priv->plugin_manager)); - - /* If autoscan enabled, list for udev events */ - if (self->priv->auto_scan) - g_signal_connect_swapped (self->priv->udev, "uevent", G_CALLBACK (handle_uevent), initable); + if (!mm_context_get_test_no_udev ()) { + /* Create udev client based on the subsystems requested by the plugins */ + self->priv->udev = g_udev_client_new (mm_plugin_manager_get_subsystems (self->priv->plugin_manager)); + /* If autoscan enabled, list for udev events */ + if (self->priv->auto_scan) + g_signal_connect_swapped (self->priv->udev, "uevent", G_CALLBACK (handle_uevent), initable); + } #endif /* Export the manager interface */ diff --git a/src/mm-context.c b/src/mm-context.c index 8f20d2e8..79091e87 100644 --- a/src/mm-context.c +++ b/src/mm-context.c @@ -222,6 +222,9 @@ mm_context_get_log_relative_timestamps (void) static gboolean test_session; static gboolean test_enable; static gchar *test_plugin_dir; +#if defined WITH_UDEV +static gboolean test_no_udev; +#endif static const GOptionEntry test_entries[] = { { @@ -239,6 +242,13 @@ static const GOptionEntry test_entries[] = { "Path to look for plugins", "[PATH]" }, +#if defined WITH_UDEV + { + "test-no-udev", 0, 0, G_OPTION_ARG_NONE, &test_no_udev, + "Run without udev support even if available", + NULL + }, +#endif { NULL } }; @@ -274,6 +284,14 @@ mm_context_get_test_plugin_dir (void) return test_plugin_dir ? test_plugin_dir : PLUGINDIR; } +#if defined WITH_UDEV +gboolean +mm_context_get_test_no_udev (void) +{ + return test_no_udev; +} +#endif + /*****************************************************************************/ static void @@ -345,5 +363,8 @@ mm_context_init (gint argc, g_warning ("error: --initial-kernel-events must be used only if --no-auto-scan is also used"); exit (1); } + /* Force skipping autoscan if running test without udev */ + if (test_no_udev) + no_auto_scan = TRUE; #endif } diff --git a/src/mm-context.h b/src/mm-context.h index ff5f1343..1d02e296 100644 --- a/src/mm-context.h +++ b/src/mm-context.h @@ -46,5 +46,8 @@ gboolean mm_context_get_log_relative_timestamps (void); gboolean mm_context_get_test_session (void); gboolean mm_context_get_test_enable (void); const gchar *mm_context_get_test_plugin_dir (void); +#if defined WITH_UDEV +gboolean mm_context_get_test_no_udev (void); +#endif #endif /* MM_CONTEXT_H */ |