aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2020-11-09 00:36:13 +0100
committerAleksander Morgado <aleksander@aleksander.es>2020-11-14 22:55:52 +0100
commite112896994454d357861619c7db87fcea8b2d2fb (patch)
treeef820a8944c93b71a40144eca0df559b757ea640 /src
parent6e642418bb36c627b9ad6185b36f78216ecaccfe (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.c52
-rw-r--r--src/mm-context.c21
-rw-r--r--src/mm-context.h3
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 */