diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2013-11-22 13:47:11 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2014-02-13 13:41:25 +0100 |
commit | 65f87561c58571bce8fca18c568a03f53f3d40eb (patch) | |
tree | fadc0bce5c3e09682627a9ac24ba653a484cfc5b | |
parent | 243720414e2d7a1b1c6d42bed3275296b4bc1da0 (diff) |
context: new '--test-enable' to enable the Test interface
-rw-r--r-- | data/tests/org.freedesktop.ModemManager1.service.in | 2 | ||||
-rw-r--r-- | src/Makefile.am | 5 | ||||
-rw-r--r-- | src/main.c | 1 | ||||
-rw-r--r-- | src/mm-context.c | 8 | ||||
-rw-r--r-- | src/mm-context.h | 1 | ||||
-rw-r--r-- | src/mm-manager.c | 63 | ||||
-rw-r--r-- | src/mm-manager.h | 6 |
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 \ @@ -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, |