aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/tests/org.freedesktop.ModemManager1.service.in2
-rw-r--r--src/Makefile.am5
-rw-r--r--src/main.c1
-rw-r--r--src/mm-context.c8
-rw-r--r--src/mm-context.h1
-rw-r--r--src/mm-manager.c63
-rw-r--r--src/mm-manager.h6
7 files changed, 82 insertions, 4 deletions
diff --git a/data/tests/org.freedesktop.ModemManager1.service.in b/data/tests/org.freedesktop.ModemManager1.service.in
index 2fa449bc..9a05a9c8 100644
--- a/data/tests/org.freedesktop.ModemManager1.service.in
+++ b/data/tests/org.freedesktop.ModemManager1.service.in
@@ -2,4 +2,4 @@
[D-BUS Service]
Name=org.freedesktop.ModemManager1
-Exec=@abs_top_builddir@/src/ModemManager --test-session --test-no-auto-scan
+Exec=@abs_top_builddir@/src/ModemManager --test-session --test-no-auto-scan --test-enable
diff --git a/src/Makefile.am b/src/Makefile.am
index 4a6cb457..5d67e058 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -141,6 +141,8 @@ ModemManager_CPPFLAGS = \
-I$(top_builddir)/libmm-glib \
-I${top_srcdir}/libmm-glib/generated \
-I${top_builddir}/libmm-glib/generated \
+ -I${top_srcdir}/libmm-glib/generated/tests \
+ -I${top_builddir}/libmm-glib/generated/tests \
-DPLUGINDIR=\"$(pkglibdir)\"
ModemManager_LDADD = \
@@ -148,7 +150,8 @@ ModemManager_LDADD = \
$(GUDEV_LIBS) \
$(builddir)/libmodem-helpers.la \
$(builddir)/libport.la \
- $(top_builddir)/libqcdm/src/libqcdm.la
+ $(top_builddir)/libqcdm/src/libqcdm.la \
+ $(top_builddir)/libmm-glib/generated/tests/libmm-test-generated.la
nodist_ModemManager_SOURCES = \
mm-daemon-enums-types.h \
diff --git a/src/main.c b/src/main.c
index 973dd469..7b1a6330 100644
--- a/src/main.c
+++ b/src/main.c
@@ -64,6 +64,7 @@ bus_acquired_cb (GDBusConnection *connection,
g_assert (!manager);
manager = mm_manager_new (connection,
!mm_context_get_test_no_auto_scan (),
+ mm_context_get_test_enable (),
&error);
if (!manager) {
mm_warn ("Could not create manager: %s", error->message);
diff --git a/src/mm-context.c b/src/mm-context.c
index 0a3a025e..dc0600ab 100644
--- a/src/mm-context.c
+++ b/src/mm-context.c
@@ -70,10 +70,12 @@ mm_context_get_relative_timestamps (void)
static gboolean test_session;
static gboolean test_no_auto_scan;
+static gboolean test_enable;
static const GOptionEntry test_entries[] = {
{ "test-session", 0, 0, G_OPTION_ARG_NONE, &test_session, "Run in session DBus", NULL },
{ "test-no-auto-scan", 0, 0, G_OPTION_ARG_NONE, &test_no_auto_scan, "Don't auto-scan looking for devices", NULL },
+ { "test-enable", 0, 0, G_OPTION_ARG_NONE, &test_enable, "Enable the Test interface in the daemon", NULL },
{ NULL }
};
@@ -103,6 +105,12 @@ mm_context_get_test_no_auto_scan (void)
return test_no_auto_scan;
}
+gboolean
+mm_context_get_test_enable (void)
+{
+ return test_enable;
+}
+
/*****************************************************************************/
void
diff --git a/src/mm-context.h b/src/mm-context.h
index 68fe20f6..a152d6ba 100644
--- a/src/mm-context.h
+++ b/src/mm-context.h
@@ -30,5 +30,6 @@ gboolean mm_context_get_relative_timestamps (void);
/* Testing support */
gboolean mm_context_get_test_session (void);
gboolean mm_context_get_test_no_auto_scan (void);
+gboolean mm_context_get_test_enable (void);
#endif /* MM_CONTEXT_H */
diff --git a/src/mm-manager.c b/src/mm-manager.c
index 32d7d835..30619012 100644
--- a/src/mm-manager.c
+++ b/src/mm-manager.c
@@ -25,6 +25,7 @@
#include <ModemManager.h>
#include <mm-errors-types.h>
#include <mm-gdbus-manager.h>
+#include <mm-gdbus-test.h>
#include "mm-manager.h"
#include "mm-device.h"
@@ -43,6 +44,7 @@ enum {
PROP_0,
PROP_CONNECTION,
PROP_AUTO_SCAN,
+ PROP_ENABLE_TEST,
LAST_PROP
};
@@ -51,6 +53,8 @@ struct _MMManagerPrivate {
GDBusConnection *connection;
/* Whether auto-scanning is enabled */
gboolean auto_scan;
+ /* Whether the test interface is enabled */
+ gboolean enable_test;
/* The UDev client */
GUdevClient *udev;
/* The authorization provider */
@@ -62,6 +66,9 @@ struct _MMManagerPrivate {
GHashTable *devices;
/* The Object Manager server */
GDBusObjectManagerServer *object_manager;
+
+ /* The Test interface support */
+ MmGdbusTest *test_skeleton;
};
/*****************************************************************************/
@@ -569,6 +576,7 @@ mm_manager_num_modems (MMManager *self)
}
/*****************************************************************************/
+/* Set logging */
typedef struct {
MMManager *self;
@@ -628,6 +636,7 @@ handle_set_logging (MmGdbusOrgFreedesktopModemManager1 *manager,
}
/*****************************************************************************/
+/* Manual scan */
typedef struct {
MMManager *self;
@@ -681,9 +690,28 @@ handle_scan_devices (MmGdbusOrgFreedesktopModemManager1 *manager,
return TRUE;
}
+/*****************************************************************************/
+/* Test profile setup */
+
+static gboolean
+handle_set_profile (MmGdbusTest *skeleton,
+ GDBusMethodInvocation *invocation,
+ const gchar *id,
+ const gchar *plugin_name,
+ const gchar *const *ports,
+ MMManager *self)
+{
+ mm_info ("Test profile set to: %s", profile);
+ mm_gdbus_test_complete_set_profile (skeleton, invocation);
+ return TRUE;
+}
+
+/*****************************************************************************/
+
MMManager *
mm_manager_new (GDBusConnection *connection,
gboolean auto_scan,
+ gboolean enable_test,
GError **error)
{
g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL);
@@ -693,6 +721,7 @@ mm_manager_new (GDBusConnection *connection,
error,
MM_MANAGER_CONNECTION, connection,
MM_MANAGER_AUTO_SCAN, auto_scan,
+ MM_MANAGER_ENABLE_TEST, enable_test,
NULL);
}
@@ -713,6 +742,9 @@ set_property (GObject *object,
case PROP_AUTO_SCAN:
priv->auto_scan = g_value_get_boolean (value);
break;
+ case PROP_ENABLE_TEST:
+ priv->enable_test = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -734,6 +766,9 @@ get_property (GObject *object,
case PROP_AUTO_SCAN:
g_value_set_boolean (value, priv->auto_scan);
break;
+ case PROP_ENABLE_TEST:
+ g_value_set_boolean (value, priv->enable_test);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -764,6 +799,9 @@ mm_manager_init (MMManager *manager)
/* By default, enable autoscan */
priv->auto_scan = TRUE;
+ /* By default, no test interface */
+ priv->enable_test = FALSE;
+
/* Setup Object Manager Server */
priv->object_manager = g_dbus_object_manager_server_new (MM_DBUS_PATH);
@@ -805,6 +843,20 @@ initable_init (GInitable *initable,
g_dbus_object_manager_server_set_connection (priv->object_manager,
priv->connection);
+ /* Setup the Test skeleton and export the interface */
+ if (priv->enable_test) {
+ priv->test_skeleton = mm_gdbus_test_skeleton_new ();
+ g_signal_connect (priv->test_skeleton,
+ "handle-set-profile",
+ G_CALLBACK (handle_set_profile),
+ initable);
+ if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->test_skeleton),
+ priv->connection,
+ MM_DBUS_PATH,
+ error))
+ return FALSE;
+ }
+
/* All good */
return TRUE;
}
@@ -825,6 +877,9 @@ finalize (GObject *object)
if (priv->object_manager)
g_object_unref (priv->object_manager);
+ if (priv->test_skeleton)
+ g_object_unref (priv->test_skeleton);
+
if (priv->connection)
g_object_unref (priv->connection);
@@ -872,4 +927,12 @@ mm_manager_class_init (MMManagerClass *manager_class)
"Automatically look for new devices",
TRUE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property
+ (object_class, PROP_ENABLE_TEST,
+ g_param_spec_boolean (MM_MANAGER_ENABLE_TEST,
+ "Enable tests",
+ "Enable the Test interface",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
}
diff --git a/src/mm-manager.h b/src/mm-manager.h
index 9262ce20..36672ebb 100644
--- a/src/mm-manager.h
+++ b/src/mm-manager.h
@@ -30,8 +30,9 @@
#define MM_IS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), MM_TYPE_MANAGER))
#define MM_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MM_TYPE_MANAGER, MMManagerClass))
-#define MM_MANAGER_CONNECTION "connection" /* Construct-only */
-#define MM_MANAGER_AUTO_SCAN "auto-scan" /* Construct-only */
+#define MM_MANAGER_CONNECTION "connection" /* Construct-only */
+#define MM_MANAGER_AUTO_SCAN "auto-scan" /* Construct-only */
+#define MM_MANAGER_ENABLE_TEST "enable-test" /* Construct-only */
typedef struct _MMManagerPrivate MMManagerPrivate;
@@ -48,6 +49,7 @@ GType mm_manager_get_type (void);
MMManager *mm_manager_new (GDBusConnection *bus,
gboolean auto_scan,
+ gboolean enable_test,
GError **error);
void mm_manager_start (MMManager *manager,