Merge lp:~charlesk/dbus-test-runner/support-gtestdbus-and-dbusmock-templates into lp:dbus-test-runner/15.10

Proposed by Charles Kerr
Status: Needs review
Proposed branch: lp:~charlesk/dbus-test-runner/support-gtestdbus-and-dbusmock-templates
Merge into: lp:dbus-test-runner/15.10
Diff against target: 1683 lines (+389/-560)
21 files modified
Makefile.am (+0/-1)
configure.ac (+0/-1)
data/Makefile.am (+0/-5)
data/session.conf (+0/-42)
data/system.conf (+0/-42)
debian/libdbustest1.symbols (+2/-3)
libdbustest/Makefile.am (+2/-4)
libdbustest/bustle.c (+4/-4)
libdbustest/dbus-mock.c (+66/-16)
libdbustest/dbus-mock.h (+1/-0)
libdbustest/process.c (+7/-7)
libdbustest/service.c (+293/-379)
libdbustest/service.h (+3/-7)
libdbustest/task.c (+2/-2)
libdbustest/watchdog.c (+2/-2)
po/Makefile.in.in (+5/-6)
src/Makefile.am (+0/-1)
src/dbus-test-runner.c (+0/-16)
tests/Makefile.am (+2/-2)
tests/test-libdbustest-mock.c (+0/-14)
tests/test-libdbustest.c (+0/-6)
To merge this branch: bzr merge lp:~charlesk/dbus-test-runner/support-gtestdbus-and-dbusmock-templates
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Needs Fixing
Ted Gould Pending
Review via email: mp+271834@code.launchpad.net

Commit message

Add support for dbusmock templates and for working with externally-managed DBuses and GTestDBuses.

Description of the change

Add support for dbusmock templates and for working with externally-managed DBuses and GTestDBuses.

To post a comment you must log in.
Revision history for this message
Ted Gould (ted) wrote :

Quick review, some comments below

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
113. By Charles Kerr

we're removing some public functions and adding others, so bump both ABI and API

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)

Unmerged revisions

113. By Charles Kerr

we're removing some public functions and adding others, so bump both ABI and API

112. By Charles Kerr

copyediting: tidy up the new comments a little

111. By Charles Kerr

remove unused macro

110. By Charles Kerr

and while we're in the neighborhood, update DbusTestService to use G_DEFINE_TYPE_WITH_PRIVATE

109. By Charles Kerr

revert dbus_test_service_new() to take an address argument, as with the current ABI

108. By Charles Kerr

in libdbustest/, get the mock class working with the new template property

107. By Charles Kerr

in debian/libdbustest1.symbols, add dbus_test_dbus_mock_new_from_template()

106. By Charles Kerr

in libdbustest, add new method dbus_test_dbus_mock_new_from_template()

105. By Charles Kerr

in libdbustest/service.c, copyediting -- make whitespace of new code more consistent with existing code

104. By Charles Kerr

remove now-unused method dbus_test_service_set_keep_environment()

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'Makefile.am'
--- Makefile.am 2012-04-23 15:45:16 +0000
+++ Makefile.am 2015-09-21 17:10:37 +0000
@@ -1,5 +1,4 @@
1SUBDIRS = \1SUBDIRS = \
2 data \
3 libdbustest \2 libdbustest \
4 src \3 src \
5 tests \4 tests \
65
=== modified file 'configure.ac'
--- configure.ac 2015-01-20 22:26:38 +0000
+++ configure.ac 2015-09-21 17:10:37 +0000
@@ -76,7 +76,6 @@
76po/Makefile.in76po/Makefile.in
77libdbustest/Makefile77libdbustest/Makefile
78src/Makefile78src/Makefile
79data/Makefile
80tests/Makefile79tests/Makefile
81])80])
8281
8382
=== removed directory 'data'
=== removed file 'data/Makefile.am'
--- data/Makefile.am 2014-11-06 19:48:03 +0000
+++ data/Makefile.am 1970-01-01 00:00:00 +0000
@@ -1,5 +0,0 @@
1
2sessionconfdir = $(datadir)/dbus-test-runner/
3sessionconf_DATA = session.conf system.conf
4
5EXTRA_DIST = session.conf system.conf
60
=== removed file 'data/session.conf'
--- data/session.conf 2012-02-20 18:24:44 +0000
+++ data/session.conf 1970-01-01 00:00:00 +0000
@@ -1,42 +0,0 @@
1<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
2 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
3<busconfig>
4 <!-- If we fork, keep the user's original umask to avoid affecting
5 the behavior of child processes. -->
6 <keep_umask/>
7
8 <type>session</type>
9
10 <listen>unix:tmpdir=/tmp</listen>
11
12 <standard_session_servicedirs />
13
14 <policy context="default">
15 <!-- Allow everything to be sent -->
16 <allow send_destination="*" eavesdrop="true"/>
17 <!-- Allow everything to be received -->
18 <allow eavesdrop="true"/>
19 <!-- Allow anyone to own anything -->
20 <allow own="*"/>
21 </policy>
22
23 <!-- raise the service start timeout to 40 seconds as it can timeout
24 on the live cd on slow machines -->
25 <limit name="service_start_timeout">60000</limit>
26
27 <!-- the memory limits are 1G instead of say 4G because they can't exceed 32-bit signed int max -->
28 <limit name="max_incoming_bytes">1000000000</limit>
29 <limit name="max_outgoing_bytes">1000000000</limit>
30 <limit name="max_message_size">1000000000</limit>
31 <limit name="service_start_timeout">120000</limit>
32 <limit name="auth_timeout">240000</limit>
33 <limit name="max_completed_connections">100000</limit>
34 <limit name="max_incomplete_connections">10000</limit>
35 <limit name="max_connections_per_user">100000</limit>
36 <limit name="max_pending_service_starts">10000</limit>
37 <limit name="max_names_per_connection">50000</limit>
38 <limit name="max_match_rules_per_connection">50000</limit>
39 <limit name="max_replies_per_connection">50000</limit>
40 <limit name="reply_timeout">300000</limit>
41
42</busconfig>
430
=== removed file 'data/system.conf'
--- data/system.conf 2014-11-06 19:54:27 +0000
+++ data/system.conf 1970-01-01 00:00:00 +0000
@@ -1,42 +0,0 @@
1<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
2 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
3<busconfig>
4 <!-- If we fork, keep the user's original umask to avoid affecting
5 the behavior of child processes. -->
6 <keep_umask/>
7
8 <type>system</type>
9
10 <listen>unix:tmpdir=/tmp</listen>
11
12 <standard_session_servicedirs />
13
14 <policy context="default">
15 <!-- Allow everything to be sent -->
16 <allow send_destination="*" eavesdrop="true"/>
17 <!-- Allow everything to be received -->
18 <allow eavesdrop="true"/>
19 <!-- Allow anyone to own anything -->
20 <allow own="*"/>
21 </policy>
22
23 <!-- raise the service start timeout to 40 seconds as it can timeout
24 on the live cd on slow machines -->
25 <limit name="service_start_timeout">60000</limit>
26
27 <!-- the memory limits are 1G instead of say 4G because they can't exceed 32-bit signed int max -->
28 <limit name="max_incoming_bytes">1000000000</limit>
29 <limit name="max_outgoing_bytes">1000000000</limit>
30 <limit name="max_message_size">1000000000</limit>
31 <limit name="service_start_timeout">120000</limit>
32 <limit name="auth_timeout">240000</limit>
33 <limit name="max_completed_connections">100000</limit>
34 <limit name="max_incomplete_connections">10000</limit>
35 <limit name="max_connections_per_user">100000</limit>
36 <limit name="max_pending_service_starts">10000</limit>
37 <limit name="max_names_per_connection">50000</limit>
38 <limit name="max_match_rules_per_connection">50000</limit>
39 <limit name="max_replies_per_connection">50000</limit>
40 <limit name="reply_timeout">300000</limit>
41
42</busconfig>
430
=== modified file 'debian/libdbustest1.symbols'
--- debian/libdbustest1.symbols 2015-02-18 03:44:59 +0000
+++ debian/libdbustest1.symbols 2015-09-21 17:10:37 +0000
@@ -5,6 +5,7 @@
5 dbus_test_dbus_mock_get_object@Base 15.04.0+15.04.201412095 dbus_test_dbus_mock_get_object@Base 15.04.0+15.04.20141209
6 dbus_test_dbus_mock_get_type@Base 15.04.0+15.04.201412096 dbus_test_dbus_mock_get_type@Base 15.04.0+15.04.20141209
7 dbus_test_dbus_mock_new@Base 15.04.0+15.04.201412097 dbus_test_dbus_mock_new@Base 15.04.0+15.04.20141209
8 dbus_test_dbus_mock_new_from_template@Base 0replaceme
8 dbus_test_dbus_mock_object_add_method@Base 15.04.0+15.04.201412099 dbus_test_dbus_mock_object_add_method@Base 15.04.0+15.04.20141209
9 dbus_test_dbus_mock_object_add_property@Base 15.04.0+15.04.2014120910 dbus_test_dbus_mock_object_add_property@Base 15.04.0+15.04.20141209
10 dbus_test_dbus_mock_object_check_method_call@Base 15.04.0+15.04.2014120911 dbus_test_dbus_mock_object_check_method_call@Base 15.04.0+15.04.20141209
@@ -20,12 +21,10 @@
20 dbus_test_service_add_task_with_priority@Base 15.04.0+15.04.2014120921 dbus_test_service_add_task_with_priority@Base 15.04.0+15.04.20141209
21 dbus_test_service_get_type@Base 15.04.0+15.04.2014120922 dbus_test_service_get_type@Base 15.04.0+15.04.20141209
22 dbus_test_service_new@Base 15.04.0+15.04.2014120923 dbus_test_service_new@Base 15.04.0+15.04.20141209
24 dbus_test_service_new_with_test_bus@ 0replaceme
23 dbus_test_service_remove_task@Base 15.04.0+15.04.2015021825 dbus_test_service_remove_task@Base 15.04.0+15.04.20150218
24 dbus_test_service_run@Base 15.04.0+15.04.2014120926 dbus_test_service_run@Base 15.04.0+15.04.20141209
25 dbus_test_service_set_bus@Base 15.04.0+15.04.2014120927 dbus_test_service_set_bus@Base 15.04.0+15.04.20141209
26 dbus_test_service_set_conf_file@Base 15.04.0+15.04.20141209
27 dbus_test_service_set_daemon@Base 15.04.0+15.04.20141209
28 dbus_test_service_set_keep_environment@Base 15.04.0+15.04.20141209
29 dbus_test_service_start_tasks@Base 15.04.0+15.04.2014120928 dbus_test_service_start_tasks@Base 15.04.0+15.04.20141209
30 dbus_test_service_stop@Base 15.04.0+15.04.2014120929 dbus_test_service_stop@Base 15.04.0+15.04.20141209
31 dbus_test_task_get_bus@Base 15.04.0+15.04.2014120930 dbus_test_task_get_bus@Base 15.04.0+15.04.20141209
3231
=== modified file 'libdbustest/Makefile.am'
--- libdbustest/Makefile.am 2014-11-06 19:51:07 +0000
+++ libdbustest/Makefile.am 2015-09-21 17:10:37 +0000
@@ -1,8 +1,8 @@
11
2lib_LTLIBRARIES = libdbustest.la2lib_LTLIBRARIES = libdbustest.la
33
4ABI_VERSION = 14ABI_VERSION = 2
5API_VERSION = 15API_VERSION = 2
66
7AM_CFLAGS = -Wall7AM_CFLAGS = -Wall
88
@@ -35,8 +35,6 @@
35 $(COVERAGE_CFLAGS) \35 $(COVERAGE_CFLAGS) \
36 -I$(top_srcdir) \36 -I$(top_srcdir) \
37 -I$(builddir) \37 -I$(builddir) \
38 -DDEFAULT_SESSION_CONF="\"$(datadir)/dbus-test-runner/session.conf\"" \
39 -DDEFAULT_SYSTEM_CONF="\"$(datadir)/dbus-test-runner/system.conf\"" \
40 -DBUSTLE_DUAL_MONITOR="\"$(pkgdatadir)/dbus-test-bustle-handler\"" \38 -DBUSTLE_DUAL_MONITOR="\"$(pkgdatadir)/dbus-test-bustle-handler\"" \
41 -DWATCHDOG="\"$(pkglibexecdir)/dbus-test-watchdog\"" \39 -DWATCHDOG="\"$(pkglibexecdir)/dbus-test-watchdog\"" \
42 -DG_LOG_DOMAIN=\"libdbustest\" \40 -DG_LOG_DOMAIN=\"libdbustest\" \
4341
=== modified file 'libdbustest/bustle.c'
--- libdbustest/bustle.c 2013-12-06 10:04:57 +0000
+++ libdbustest/bustle.c 2015-09-21 17:10:37 +0000
@@ -51,7 +51,7 @@
51 GIOCondition condition,51 GIOCondition condition,
52 gpointer data);52 gpointer data);
5353
54G_DEFINE_TYPE (DbusTestBustle, dbus_test_bustle, DBUS_TEST_TYPE_TASK);54G_DEFINE_TYPE (DbusTestBustle, dbus_test_bustle, DBUS_TEST_TYPE_TASK)
5555
56static void56static void
57dbus_test_bustle_class_init (DbusTestBustleClass *klass)57dbus_test_bustle_class_init (DbusTestBustleClass *klass)
@@ -114,7 +114,7 @@
114114
115 if (bustler->priv->stderr != NULL) {115 if (bustler->priv->stderr != NULL) {
116 while (G_IO_IN & g_io_channel_get_buffer_condition(bustler->priv->stderr)) {116 while (G_IO_IN & g_io_channel_get_buffer_condition(bustler->priv->stderr)) {
117 bustle_write_error(bustler->priv->stderr, 0 /* unused */, bustler);117 bustle_write_error(bustler->priv->stderr, (GIOCondition)0 /* unused */, bustler);
118 }118 }
119119
120 g_clear_pointer(&bustler->priv->stderr, g_io_channel_unref);120 g_clear_pointer(&bustler->priv->stderr, g_io_channel_unref);
@@ -248,7 +248,7 @@
248 bustle_monitor, /* argv */248 bustle_monitor, /* argv */
249 NULL, /* envp */249 NULL, /* envp */
250 /* G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL, */ /* flags */250 /* G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL, */ /* flags */
251 G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, /* flags */251 (GSpawnFlags)(G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD), /* flags */
252 NULL, /* child setup func */252 NULL, /* child setup func */
253 NULL, /* child setup data */253 NULL, /* child setup data */
254 &bustler->priv->pid, /* PID */254 &bustler->priv->pid, /* PID */
@@ -279,7 +279,7 @@
279279
280 bustler->priv->stderr = g_io_channel_unix_new(bustle_stderr_num);280 bustler->priv->stderr = g_io_channel_unix_new(bustle_stderr_num);
281 g_io_add_watch(bustler->priv->stderr,281 g_io_add_watch(bustler->priv->stderr,
282 G_IO_IN | G_IO_HUP | G_IO_ERR, /* conditions */282 (GIOCondition)(G_IO_IN | G_IO_HUP | G_IO_ERR), /* conditions */
283 bustle_write_error, /* func */283 bustle_write_error, /* func */
284 bustler); /* func data */284 bustler); /* func data */
285285
286286
=== modified file 'libdbustest/dbus-mock.c'
--- libdbustest/dbus-mock.c 2015-01-30 02:43:44 +0000
+++ libdbustest/dbus-mock.c 2015-09-21 17:10:37 +0000
@@ -30,6 +30,7 @@
3030
31struct _DbusTestDbusMockPrivate {31struct _DbusTestDbusMockPrivate {
32 gchar * name;32 gchar * name;
33 gchar * template_pathname;
33 _DbusMockIfaceOrgFreedesktopDBusMock * proxy;34 _DbusMockIfaceOrgFreedesktopDBusMock * proxy;
34 /* Entries of DbusTestDbusMockObject */35 /* Entries of DbusTestDbusMockObject */
35 GList * objects;36 GList * objects;
@@ -65,9 +66,12 @@
65enum {66enum {
66 PROP_0,67 PROP_0,
67 PROP_DBUS_NAME,68 PROP_DBUS_NAME,
69 PROP_TEMPLATE_PATHNAME,
68 NUM_PROPS70 NUM_PROPS
69};71};
7072
73static GParamSpec * properties[NUM_PROPS];
74
71enum {75enum {
72 ERROR_METHOD_NOT_FOUND,76 ERROR_METHOD_NOT_FOUND,
73 NUM_ERRORS77 NUM_ERRORS
@@ -96,8 +100,8 @@
96static void method_free (gpointer data);100static void method_free (gpointer data);
97static void property_free (gpointer data);101static void property_free (gpointer data);
98102
99G_DEFINE_TYPE (DbusTestDbusMock, dbus_test_dbus_mock, DBUS_TEST_TYPE_PROCESS);103G_DEFINE_TYPE (DbusTestDbusMock, dbus_test_dbus_mock, DBUS_TEST_TYPE_PROCESS)
100G_DEFINE_QUARK("dbus-test-dbus-mock", _dbus_mock);104G_DEFINE_QUARK("dbus-test-dbus-mock", _dbus_mock)
101105
102/* Initialize Class */106/* Initialize Class */
103static void107static void
@@ -113,12 +117,23 @@
113 object_class->set_property = set_property;117 object_class->set_property = set_property;
114 object_class->constructed = constructed;118 object_class->constructed = constructed;
115119
116 g_object_class_install_property (object_class, PROP_DBUS_NAME,120 properties[PROP_0] = NULL;
117 g_param_spec_string("dbus-name",121
118 "DBus Name",122 properties[PROP_DBUS_NAME] = g_param_spec_string(
119 "The well known name for dbusmock on the session bus",123 "dbus-name",
120 "com.canonical.DBusTestRunner.DBusMock", /* default */124 "DBus Name",
121 G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));125 "The well known name for dbusmock on the session bus",
126 "com.canonical.DBusTestRunner.DBusMock", /* default */
127 (GParamFlags)(G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
128
129 properties[PROP_TEMPLATE_PATHNAME] = g_param_spec_string(
130 "template-pathname",
131 "Template Pathname",
132 "If using a dbusmock template, the full pathname for its file",
133 NULL, /* default */
134 (GParamFlags)(G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
135
136 g_object_class_install_properties (object_class, NUM_PROPS, properties);
122137
123 DbusTestTaskClass * tclass = DBUS_TEST_TASK_CLASS(klass);138 DbusTestTaskClass * tclass = DBUS_TEST_TASK_CLASS(klass);
124139
@@ -202,6 +217,9 @@
202 case PROP_DBUS_NAME:217 case PROP_DBUS_NAME:
203 g_value_set_string(value, self->priv->name);218 g_value_set_string(value, self->priv->name);
204 break;219 break;
220 case PROP_TEMPLATE_PATHNAME:
221 g_value_set_string(value, self->priv->template_pathname);
222 break;
205 default:223 default:
206 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);224 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
207 }225 }
@@ -220,6 +238,10 @@
220 g_free(self->priv->name);238 g_free(self->priv->name);
221 self->priv->name = g_value_dup_string(value);239 self->priv->name = g_value_dup_string(value);
222 break;240 break;
241 case PROP_TEMPLATE_PATHNAME:
242 g_free(self->priv->template_pathname);
243 self->priv->template_pathname = g_value_dup_string(value);
244 break;
223 default:245 default:
224 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);246 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
225 }247 }
@@ -350,7 +372,7 @@
350372
351 if (add_object) {373 if (add_object) {
352 proxy = _dbus_mock_iface_org_freedesktop_dbus_mock_proxy_new_sync(mock->priv->bus,374 proxy = _dbus_mock_iface_org_freedesktop_dbus_mock_proxy_new_sync(mock->priv->bus,
353 G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,375 (GDBusProxyFlags)(G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START),
354 mock->priv->name,376 mock->priv->name,
355 object->object_path, /* path */377 object->object_path, /* path */
356 mock->priv->cancel,378 mock->priv->cancel,
@@ -442,9 +464,14 @@
442 paramval = "--system"; g_array_append_val(params, paramval);464 paramval = "--system"; g_array_append_val(params, paramval);
443 }465 }
444466
445 g_array_append_val(params, self->priv->name);467 if (self->priv->template_pathname != NULL) {
446 paramval = "/"; g_array_append_val(params, paramval);468 paramval = "--template"; g_array_append_val(params, paramval);
447 paramval = "com.canonical.DbusTest.DbusMock"; g_array_append_val(params, paramval);469 paramval = self->priv->template_pathname; g_array_append_val(params, paramval);
470 } else {
471 g_array_append_val(params, self->priv->name);
472 paramval = "/"; g_array_append_val(params, paramval);
473 paramval = "com.canonical.DbusTest.DbusMock"; g_array_append_val(params, paramval);
474 }
448475
449 g_object_set(G_OBJECT(self), "parameters", params, NULL);476 g_object_set(G_OBJECT(self), "parameters", params, NULL);
450 g_array_unref(params);477 g_array_unref(params);
@@ -478,7 +505,7 @@
478505
479 /* Zero, Setup the proxy */506 /* Zero, Setup the proxy */
480 self->priv->proxy = _dbus_mock_iface_org_freedesktop_dbus_mock_proxy_new_sync(self->priv->bus,507 self->priv->proxy = _dbus_mock_iface_org_freedesktop_dbus_mock_proxy_new_sync(self->priv->bus,
481 G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,508 (GDBusProxyFlags)(G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START),
482 self->priv->name,509 self->priv->name,
483 "/", /* path */510 "/", /* path */
484 self->priv->cancel,511 self->priv->cancel,
@@ -517,7 +544,6 @@
517 /* Second, Install Objects */544 /* Second, Install Objects */
518 GList * lobj = self->priv->objects;545 GList * lobj = self->priv->objects;
519 for (lobj = self->priv->objects; lobj != NULL; lobj = g_list_next(lobj)) {546 for (lobj = self->priv->objects; lobj != NULL; lobj = g_list_next(lobj)) {
520 GError * error = NULL;
521547
522 DbusTestDbusMockObject * obj = (DbusTestDbusMockObject *)lobj->data;548 DbusTestDbusMockObject * obj = (DbusTestDbusMockObject *)lobj->data;
523 install_object(self, obj, &error);549 install_object(self, obj, &error);
@@ -554,6 +580,30 @@
554}580}
555581
556/**582/**
583 * dbus_test_dbus_mock_new:
584 * @bus_name: The name dbus mock should get on the bus
585 *
586 * Creates a new dbus mock process with the given dbusmock template.
587 * As with dbus_test_dbus_mock_new(), this function doesn't start
588 * the process -- it queues up a mock to be started when the DBusTest
589 * framework is run.
590 *
591 * Return value: A new dbus mock instance
592 */
593DbusTestDbusMock *
594dbus_test_dbus_mock_new_from_template (const gchar * template_pathname)
595{
596 g_return_val_if_fail(template_pathname != NULL, NULL);
597 g_return_val_if_fail(*template_pathname != '\0', NULL);
598
599 DbusTestDbusMock * mock = g_object_new(DBUS_TEST_TYPE_DBUS_MOCK,
600 "template-pathname", template_pathname,
601 NULL);
602
603 return mock;
604}
605
606/**
557 * dbus_test_dbus_mock_get_object:607 * dbus_test_dbus_mock_get_object:
558 * @mock: A #DbusTestDbusMock instance608 * @mock: A #DbusTestDbusMock instance
559 * @path: DBus path of the object609 * @path: DBus path of the object
@@ -666,7 +716,7 @@
666 * Return value: Whether it was registered successfully716 * Return value: Whether it was registered successfully
667 */717 */
668gboolean718gboolean
669dbus_test_dbus_mock_object_add_method (DbusTestDbusMock * mock, DbusTestDbusMockObject * obj, const gchar * method, const GVariantType * inparams, const GVariantType * outparams, const gchar * python_code, G_GNUC_UNUSED GError ** error)719dbus_test_dbus_mock_object_add_method (DbusTestDbusMock * mock, DbusTestDbusMockObject * obj, const gchar * method, const GVariantType * inparams, const GVariantType * outparams, const gchar * python_code, GError ** error)
670{720{
671 g_return_val_if_fail(DBUS_TEST_IS_DBUS_MOCK(mock), FALSE);721 g_return_val_if_fail(DBUS_TEST_IS_DBUS_MOCK(mock), FALSE);
672 g_return_val_if_fail(obj != NULL, FALSE);722 g_return_val_if_fail(obj != NULL, FALSE);
@@ -942,7 +992,7 @@
942 * Return value: Whether it was added992 * Return value: Whether it was added
943 */993 */
944gboolean994gboolean
945dbus_test_dbus_mock_object_add_property (DbusTestDbusMock * mock, DbusTestDbusMockObject * obj, const gchar * name, const GVariantType * type, GVariant * value, G_GNUC_UNUSED GError ** error)995dbus_test_dbus_mock_object_add_property (DbusTestDbusMock * mock, DbusTestDbusMockObject * obj, const gchar * name, const GVariantType * type, GVariant * value, GError ** error)
946{996{
947 g_return_val_if_fail(DBUS_TEST_IS_DBUS_MOCK(mock), FALSE);997 g_return_val_if_fail(DBUS_TEST_IS_DBUS_MOCK(mock), FALSE);
948 g_return_val_if_fail(obj != NULL, FALSE);998 g_return_val_if_fail(obj != NULL, FALSE);
949999
=== modified file 'libdbustest/dbus-mock.h'
--- libdbustest/dbus-mock.h 2013-11-01 01:16:08 +0000
+++ libdbustest/dbus-mock.h 2015-09-21 17:10:37 +0000
@@ -61,6 +61,7 @@
6161
62DbusTestDbusMock * dbus_test_dbus_mock_new (const gchar * bus_name);62DbusTestDbusMock * dbus_test_dbus_mock_new (const gchar * bus_name);
6363
64DbusTestDbusMock * dbus_test_dbus_mock_new_from_template (const char * template_pathname);
6465
65/* Object stuff */66/* Object stuff */
6667
6768
=== modified file 'libdbustest/process.c'
--- libdbustest/process.c 2013-12-20 21:49:44 +0000
+++ libdbustest/process.c 2015-09-21 17:10:37 +0000
@@ -64,7 +64,7 @@
64 const GValue * value,64 const GValue * value,
65 GParamSpec * pspec);65 GParamSpec * pspec);
6666
67G_DEFINE_TYPE (DbusTestProcess, dbus_test_process, DBUS_TEST_TYPE_TASK);67G_DEFINE_TYPE (DbusTestProcess, dbus_test_process, DBUS_TEST_TYPE_TASK)
6868
69static void69static void
70dbus_test_process_class_init (DbusTestProcessClass *klass)70dbus_test_process_class_init (DbusTestProcessClass *klass)
@@ -83,13 +83,13 @@
83 "Executable Name",83 "Executable Name",
84 "The executable being run by the process object",84 "The executable being run by the process object",
85 "", /* default */85 "", /* default */
86 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));86 (GParamFlags)(G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
87 g_object_class_install_property (object_class, PROP_PARAMETERS,87 g_object_class_install_property (object_class, PROP_PARAMETERS,
88 g_param_spec_boxed("parameters",88 g_param_spec_boxed("parameters",
89 "Parameters",89 "Parameters",
90 "Parameters to pass to the executable",90 "Parameters to pass to the executable",
91 G_TYPE_ARRAY,91 G_TYPE_ARRAY,
92 G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));92 (GParamFlags)(G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE)));
9393
94 DbusTestTaskClass * task_class = DBUS_TEST_TASK_CLASS(klass);94 DbusTestTaskClass * task_class = DBUS_TEST_TASK_CLASS(klass);
9595
@@ -194,7 +194,7 @@
194194
195/* Get a property */195/* Get a property */
196static void196static void
197get_property (GObject * object, guint property_id, G_GNUC_UNUSED GValue * value, GParamSpec * pspec)197get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec)
198{198{
199 DbusTestProcess * self = DBUS_TEST_PROCESS(object);199 DbusTestProcess * self = DBUS_TEST_PROCESS(object);
200200
@@ -214,7 +214,7 @@
214214
215/* Set a property */215/* Set a property */
216static void216static void
217set_property (GObject * object, guint property_id, G_GNUC_UNUSED const GValue * value, GParamSpec * pspec)217set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec)
218{218{
219 if (get_state(DBUS_TEST_TASK(object)) == DBUS_TEST_TASK_STATE_RUNNING) {219 if (get_state(DBUS_TEST_TASK(object)) == DBUS_TEST_TASK_STATE_RUNNING) {
220 g_warning("Can't set properties on a running process");220 g_warning("Can't set properties on a running process");
@@ -324,7 +324,7 @@
324 g_spawn_async_with_pipes(current_dir,324 g_spawn_async_with_pipes(current_dir,
325 argv, /* argv */325 argv, /* argv */
326 NULL, /* envp */326 NULL, /* envp */
327 G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, /* flags */327 (GSpawnFlags)(G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD), /* flags */
328 NULL, /* child setup func */328 NULL, /* child setup func */
329 NULL, /* child setup data */329 NULL, /* child setup data */
330 &(process->priv->pid), /* PID */330 &(process->priv->pid), /* PID */
@@ -352,7 +352,7 @@
352 process->priv->io_chan = g_io_channel_unix_new(proc_stdout);352 process->priv->io_chan = g_io_channel_unix_new(proc_stdout);
353 g_io_channel_set_buffer_size(process->priv->io_chan, 10 * 1024 * 1024); /* 10 MB should be enough for anyone */353 g_io_channel_set_buffer_size(process->priv->io_chan, 10 * 1024 * 1024); /* 10 MB should be enough for anyone */
354 process->priv->io_watch = g_io_add_watch(process->priv->io_chan,354 process->priv->io_watch = g_io_add_watch(process->priv->io_chan,
355 G_IO_IN | G_IO_HUP | G_IO_ERR, /* conditions */355 (GIOCondition)(G_IO_IN | G_IO_HUP | G_IO_ERR), /* conditions */
356 proc_writes, /* func */356 proc_writes, /* func */
357 process); /* func data */357 process); /* func data */
358358
359359
=== modified file 'libdbustest/service.c'
--- libdbustest/service.c 2015-02-13 17:19:17 +0000
+++ libdbustest/service.c 2015-09-21 17:10:37 +0000
@@ -29,21 +29,27 @@
29#include "glib-compat.h"29#include "glib-compat.h"
3030
31#include "dbus-test.h"31#include "dbus-test.h"
32#include "watchdog.h"32
3333enum {
34typedef enum _ServiceState ServiceState;34 PROP_0,
35enum _ServiceState {35 PROP_ADDRESS,
36 PROP_TEST_DBUS,
37 PROP_LAST
38};
39
40static GParamSpec * properties[PROP_LAST];
41
42typedef enum _ServiceState {
36 STATE_INIT,43 STATE_INIT,
37 STATE_DAEMON_STARTING,44 STATE_BUS_STARTED,
38 STATE_DAEMON_STARTED,
39 STATE_DAEMON_FAILED,
40 STATE_STARTING,45 STATE_STARTING,
41 STATE_STARTED,46 STATE_STARTED,
42 STATE_RUNNING,47 STATE_RUNNING,
43 STATE_FINISHED48 STATE_FINISHED
44};49}
50ServiceState;
4551
46struct _DbusTestServicePrivate {52typedef struct DbusTestServicePrivate {
47 GQueue tasks_first;53 GQueue tasks_first;
48 GQueue tasks_normal;54 GQueue tasks_normal;
49 GQueue tasks_last;55 GQueue tasks_last;
@@ -51,36 +57,28 @@
51 GMainLoop * mainloop;57 GMainLoop * mainloop;
52 ServiceState state;58 ServiceState state;
5359
54 gboolean daemon_crashed;60 gchar * external_bus_address;
5561
56 GPid dbus;62 GTestDBus * test_dbus;
57 guint dbus_watch;63 gboolean test_dbus_started_here;
58 GIOChannel * dbus_io;
59 guint dbus_io_watch;
60 gchar * dbus_daemon;
61 gchar * dbus_configfile;
62
63 gboolean first_time;
64 gboolean keep_env;
65
66 DbusTestWatchdog * watchdog;
67 guint watchdog_source;
6864
69 DbusTestServiceBus bus_type;65 DbusTestServiceBus bus_type;
70};66}
67DbusTestServicePrivate;
7168
72#define SERVICE_CHANGE_HANDLER "dbus-test-service-change-handler"69#define SERVICE_CHANGE_HANDLER "dbus-test-service-change-handler"
7370
74#define DBUS_TEST_SERVICE_GET_PRIVATE(o) \
75(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUS_TEST_TYPE_SERVICE, DbusTestServicePrivate))
76
77static void dbus_test_service_class_init (DbusTestServiceClass *klass);71static void dbus_test_service_class_init (DbusTestServiceClass *klass);
78static void dbus_test_service_init (DbusTestService *self);72static void dbus_test_service_init (DbusTestService *self);
79static void dbus_test_service_dispose (GObject *object);73static void dbus_test_service_dispose (GObject *object);
80static void dbus_test_service_finalize (GObject *object);74static void dbus_test_service_finalize (GObject *object);
81static gboolean watchdog_ping (gpointer user_data);75static void dbus_test_service_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
8276static void dbus_test_service_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
83G_DEFINE_TYPE (DbusTestService, dbus_test_service, G_TYPE_OBJECT);77
78G_DEFINE_TYPE_WITH_PRIVATE(DbusTestService, dbus_test_service, G_TYPE_OBJECT)
79
80#define get_priv(service) ((DbusTestServicePrivate*)dbus_test_service_get_instance_private(service))
81
8482
85static void83static void
86dbus_test_service_class_init (DbusTestServiceClass *klass)84dbus_test_service_class_init (DbusTestServiceClass *klass)
@@ -91,6 +89,30 @@
9189
92 object_class->dispose = dbus_test_service_dispose;90 object_class->dispose = dbus_test_service_dispose;
93 object_class->finalize = dbus_test_service_finalize;91 object_class->finalize = dbus_test_service_finalize;
92 object_class->get_property = dbus_test_service_get_property;
93 object_class->set_property = dbus_test_service_set_property;
94
95 properties[PROP_0] = NULL;
96
97 properties[PROP_TEST_DBUS] = g_param_spec_object (
98 "test-dbus",
99 "Test DBus",
100 "Externally-owned test dbus. (Optional)",
101 G_TYPE_TEST_DBUS,
102 (GParamFlags)(G_PARAM_READWRITE |
103 G_PARAM_CONSTRUCT_ONLY |
104 G_PARAM_STATIC_STRINGS));
105
106 properties[PROP_ADDRESS] = g_param_spec_string (
107 "external-bus-address",
108 "External Bus Address",
109 "Address of externally-managed DBus for service to run on. (Optional)",
110 NULL,
111 (GParamFlags)(G_PARAM_READWRITE |
112 G_PARAM_CONSTRUCT_ONLY |
113 G_PARAM_STATIC_STRINGS));
114
115 g_object_class_install_properties (object_class, PROP_LAST, properties);
94116
95 return;117 return;
96}118}
@@ -98,35 +120,16 @@
98static void120static void
99dbus_test_service_init (DbusTestService *self)121dbus_test_service_init (DbusTestService *self)
100{122{
101 self->priv = DBUS_TEST_SERVICE_GET_PRIVATE(self);123 DbusTestServicePrivate * priv = get_priv(self);
102124
103 g_queue_init(&self->priv->tasks_first);125 g_queue_init(&priv->tasks_first);
104 g_queue_init(&self->priv->tasks_normal);126 g_queue_init(&priv->tasks_normal);
105 g_queue_init(&self->priv->tasks_last);127 g_queue_init(&priv->tasks_last);
106128
107 self->priv->mainloop = g_main_loop_new(NULL, FALSE);129 priv->mainloop = g_main_loop_new(NULL, FALSE);
108 self->priv->state = STATE_INIT;130 priv->state = STATE_INIT;
109131
110 self->priv->daemon_crashed = FALSE;132 priv->bus_type = DBUS_TEST_SERVICE_BUS_SESSION;
111
112 self->priv->dbus = 0;
113 self->priv->dbus_watch = 0;
114 self->priv->dbus_io = NULL;
115 self->priv->dbus_io_watch = 0;
116 self->priv->dbus_daemon = g_strdup("dbus-daemon");
117 self->priv->dbus_configfile = g_strdup(DEFAULT_SESSION_CONF);
118
119 self->priv->first_time = TRUE;
120 self->priv->keep_env = FALSE;
121
122 self->priv->watchdog = g_object_new(DBUS_TEST_TYPE_WATCHDOG, NULL);
123 self->priv->watchdog_source = g_timeout_add_seconds_full(G_PRIORITY_DEFAULT,
124 5,
125 watchdog_ping,
126 g_object_ref(self->priv->watchdog),
127 g_object_unref);
128
129 self->priv->bus_type = DBUS_TEST_SERVICE_BUS_SESSION;
130133
131 return;134 return;
132}135}
@@ -145,64 +148,36 @@
145 return;148 return;
146}149}
147150
151
148static void152static void
149dbus_test_service_dispose (GObject *object)153dbus_test_service_dispose (GObject *object)
150{154{
151 g_return_if_fail(DBUS_TEST_IS_SERVICE(object));155 g_return_if_fail(DBUS_TEST_IS_SERVICE(object));
152 DbusTestService * self = DBUS_TEST_SERVICE(object);156 DbusTestServicePrivate * priv = get_priv(DBUS_TEST_SERVICE(object));
153157
154 if (!g_queue_is_empty(&self->priv->tasks_last)) {158 if (!g_queue_is_empty(&priv->tasks_last)) {
155 g_queue_foreach(&self->priv->tasks_last, task_unref, NULL);159 g_queue_foreach(&priv->tasks_last, task_unref, NULL);
156 g_queue_clear(&self->priv->tasks_last);160 g_queue_clear(&priv->tasks_last);
157 }161 }
158162
159 if (!g_queue_is_empty(&self->priv->tasks_normal)) {163 if (!g_queue_is_empty(&priv->tasks_normal)) {
160 g_queue_foreach(&self->priv->tasks_normal, task_unref, NULL);164 g_queue_foreach(&priv->tasks_normal, task_unref, NULL);
161 g_queue_clear(&self->priv->tasks_normal);165 g_queue_clear(&priv->tasks_normal);
162 }166 }
163167
164 if (!g_queue_is_empty(&self->priv->tasks_first)) {168 if (!g_queue_is_empty(&priv->tasks_first)) {
165 g_queue_foreach(&self->priv->tasks_first, task_unref, NULL);169 g_queue_foreach(&priv->tasks_first, task_unref, NULL);
166 g_queue_clear(&self->priv->tasks_first);170 g_queue_clear(&priv->tasks_first);
167 }171 }
168172
169 if (self->priv->dbus_watch != 0) {173 if (priv->test_dbus_started_here) {
170 g_source_remove(self->priv->dbus_watch);174 priv->test_dbus_started_here = FALSE;
171 self->priv->dbus_watch = 0;175 g_test_dbus_down (priv->test_dbus);
172 }176 }
173177
174 if (self->priv->dbus_io_watch != 0) {178 g_clear_object(&priv->test_dbus);
175 g_source_remove(self->priv->dbus_io_watch);179
176 self->priv->dbus_io_watch = 0;180 g_clear_pointer(&priv->mainloop, g_main_loop_unref);
177 }
178
179 if (self->priv->dbus_io != NULL) {
180 g_io_channel_shutdown(self->priv->dbus_io, TRUE, NULL);
181 g_io_channel_unref(self->priv->dbus_io);
182 self->priv->dbus_io = NULL;
183 }
184
185 g_print("DBus daemon: Shutdown\n");
186 if (self->priv->dbus != 0) {
187 gchar * cmd = g_strdup_printf("kill -9 %d", self->priv->dbus);
188 g_spawn_command_line_async(cmd, NULL);
189 g_free(cmd);
190
191 g_spawn_close_pid(self->priv->dbus);
192 self->priv->dbus = 0;
193 }
194
195 if (self->priv->mainloop != NULL) {
196 g_main_loop_unref(self->priv->mainloop);
197 self->priv->mainloop = NULL;
198 }
199
200 g_clear_object(&self->priv->watchdog);
201
202 if (self->priv->watchdog_source != 0) {
203 g_source_remove(self->priv->watchdog_source);
204 self->priv->watchdog_source = 0;
205 }
206181
207 G_OBJECT_CLASS (dbus_test_service_parent_class)->dispose (object);182 G_OBJECT_CLASS (dbus_test_service_parent_class)->dispose (object);
208 return;183 return;
@@ -212,38 +187,100 @@
212dbus_test_service_finalize (GObject *object)187dbus_test_service_finalize (GObject *object)
213{188{
214 g_return_if_fail(DBUS_TEST_IS_SERVICE(object));189 g_return_if_fail(DBUS_TEST_IS_SERVICE(object));
215 DbusTestService * self = DBUS_TEST_SERVICE(object);190 DbusTestServicePrivate * priv = get_priv(DBUS_TEST_SERVICE(object));
216191
217 g_free(self->priv->dbus_daemon);192 g_clear_pointer(&priv->external_bus_address, g_free);
218 self->priv->dbus_daemon = NULL;193}
219 g_free(self->priv->dbus_configfile);194
220 self->priv->dbus_configfile = NULL;195static void
221196dbus_test_service_get_property (GObject *o, guint property_id, GValue *value, GParamSpec *pspec)
222 G_OBJECT_CLASS (dbus_test_service_parent_class)->finalize (object);197{
223 return;198 DbusTestServicePrivate * priv = get_priv(DBUS_TEST_SERVICE(o));
224}199
225200 switch (property_id) {
226DbusTestService *201 case PROP_ADDRESS:
227dbus_test_service_new (G_GNUC_UNUSED const gchar * address)202 g_value_set_string (value, priv->external_bus_address);
228{203 break;
229 DbusTestService * service = g_object_new(DBUS_TEST_TYPE_SERVICE,204
230 NULL);205 case PROP_TEST_DBUS:
231206 g_value_set_object (value, priv->test_dbus);
232 /* TODO: Use the address */207 break;
233208
234 return service;209 default:
235}210 G_OBJECT_WARN_INVALID_PROPERTY_ID (o, property_id, pspec);
236211 }
237/* Ping the watchdog so that it knows we're still alive */212}
238static gboolean213
239watchdog_ping (gpointer user_data)214static void
240{215dbus_test_service_set_property (GObject *o, guint property_id, const GValue *value, GParamSpec *pspec)
241 DbusTestWatchdog * watchdog = DBUS_TEST_WATCHDOG(user_data);216{
242217 DbusTestServicePrivate * priv = get_priv(DBUS_TEST_SERVICE(o));
243 dbus_test_watchdog_ping(watchdog);218
244219 switch (property_id) {
245 return TRUE;220 case PROP_ADDRESS:
246}221 g_free(priv->external_bus_address);
222 priv->external_bus_address = g_value_dup_string(value);
223 break;
224
225 case PROP_TEST_DBUS:
226 g_warn_if_fail(priv->test_dbus == NULL);
227 priv->test_dbus = g_value_dup_object(value);
228 break;
229
230 default:
231 G_OBJECT_WARN_INVALID_PROPERTY_ID (o, property_id, pspec);
232 }
233}
234
235/**
236 * dbus_test_service_new:
237 * @mock: A #DbusTestDbusMock instance
238 * @external_bus_address: Address of an externally-managed bus, or NULL
239 *
240 * Creates a new DbusTestService.
241 *
242 * The most common use case is for DbusTestService to create and manage
243 * its own test bus. To use an externally-managed bus instead, pass its
244 * address in the external_bus_address agument.
245 *
246 * Return Value: (transfer full): A new DbusTestService
247 */
248DbusTestService *
249dbus_test_service_new (const gchar* external_bus_address)
250{
251 DbusTestService * service;
252
253 if (external_bus_address && *external_bus_address)
254 service = g_object_new(DBUS_TEST_TYPE_SERVICE, "external-bus-address", external_bus_address, NULL);
255 else
256 service = g_object_new(DBUS_TEST_TYPE_SERVICE, NULL);
257
258 return service;
259}
260
261/**
262 * dbus_test_service_new_test_bus:
263 * @mock: A #DbusTestDbusMock instance
264 * @test_bus: An externally-owned GTestDBus
265 *
266 * Creates a new DbusTestService with uses the specified GTestDBus.
267 *
268 * Return Value: (transfer full): A new DbusTestService
269 */
270DbusTestService *
271dbus_test_service_new_with_test_bus (GTestDBus * test_dbus)
272{
273 g_return_val_if_fail(test_dbus != NULL, NULL);
274 g_return_val_if_fail(G_IS_TEST_DBUS(test_dbus), NULL);
275
276 DbusTestService * service = g_object_new(DBUS_TEST_TYPE_SERVICE, "test-dbus", test_dbus, NULL);
277
278 return service;
279}
280
281/***
282****
283***/
247284
248static gboolean285static gboolean
249all_tasks_finished_helper (G_GNUC_UNUSED DbusTestService * service, DbusTestTask * task, G_GNUC_UNUSED gpointer user_data)286all_tasks_finished_helper (G_GNUC_UNUSED DbusTestService * service, DbusTestTask * task, G_GNUC_UNUSED gpointer user_data)
@@ -273,9 +310,11 @@
273static gboolean310static gboolean
274all_tasks_bus_match (DbusTestService * service, DbusTestTask * task, G_GNUC_UNUSED gpointer user_data)311all_tasks_bus_match (DbusTestService * service, DbusTestTask * task, G_GNUC_UNUSED gpointer user_data)
275{312{
276 return service->priv->bus_type == DBUS_TEST_SERVICE_BUS_BOTH ||313 DbusTestServicePrivate * priv = get_priv(service);
314
315 return priv->bus_type == DBUS_TEST_SERVICE_BUS_BOTH ||
277 dbus_test_task_get_bus(task) == DBUS_TEST_SERVICE_BUS_BOTH ||316 dbus_test_task_get_bus(task) == DBUS_TEST_SERVICE_BUS_BOTH ||
278 dbus_test_task_get_bus(task) == service->priv->bus_type;317 dbus_test_task_get_bus(task) == priv->bus_type;
279}318}
280319
281typedef struct {320typedef struct {
@@ -301,6 +340,8 @@
301static gboolean340static gboolean
302all_tasks (DbusTestService * service, gboolean (*helper) (DbusTestService * service, DbusTestTask * task, gpointer user_data), gpointer user_data)341all_tasks (DbusTestService * service, gboolean (*helper) (DbusTestService * service, DbusTestTask * task, gpointer user_data), gpointer user_data)
303{342{
343 DbusTestServicePrivate * priv = get_priv(service);
344
304 all_tasks_helper_data_t data = {345 all_tasks_helper_data_t data = {
305 .passing = TRUE,346 .passing = TRUE,
306 .service = service,347 .service = service,
@@ -308,17 +349,17 @@
308 .user_data = user_data349 .user_data = user_data
309 };350 };
310351
311 g_queue_foreach(&service->priv->tasks_first, all_tasks_helper, &data);352 g_queue_foreach(&priv->tasks_first, all_tasks_helper, &data);
312 if (!data.passing) {353 if (!data.passing) {
313 return FALSE;354 return FALSE;
314 }355 }
315356
316 g_queue_foreach(&service->priv->tasks_normal, all_tasks_helper, &data);357 g_queue_foreach(&priv->tasks_normal, all_tasks_helper, &data);
317 if (!data.passing) {358 if (!data.passing) {
318 return FALSE;359 return FALSE;
319 }360 }
320361
321 g_queue_foreach(&service->priv->tasks_last, all_tasks_helper, &data);362 g_queue_foreach(&priv->tasks_last, all_tasks_helper, &data);
322 if (!data.passing) {363 if (!data.passing) {
323 return FALSE;364 return FALSE;
324 }365 }
@@ -354,15 +395,16 @@
354static void395static void
355normalize_name_lengths (DbusTestService * service)396normalize_name_lengths (DbusTestService * service)
356{397{
398 DbusTestServicePrivate * priv = get_priv(service);
357 glong length = 0;399 glong length = 0;
358400
359 g_queue_foreach(&service->priv->tasks_first, task_get_name_length, &length);401 g_queue_foreach(&priv->tasks_first, task_get_name_length, &length);
360 g_queue_foreach(&service->priv->tasks_normal, task_get_name_length, &length);402 g_queue_foreach(&priv->tasks_normal, task_get_name_length, &length);
361 g_queue_foreach(&service->priv->tasks_last, task_get_name_length, &length);403 g_queue_foreach(&priv->tasks_last, task_get_name_length, &length);
362404
363 g_queue_foreach(&service->priv->tasks_first, task_set_name_length, &length);405 g_queue_foreach(&priv->tasks_first, task_set_name_length, &length);
364 g_queue_foreach(&service->priv->tasks_normal, task_set_name_length, &length);406 g_queue_foreach(&priv->tasks_normal, task_set_name_length, &length);
365 g_queue_foreach(&service->priv->tasks_last, task_set_name_length, &length);407 g_queue_foreach(&priv->tasks_last, task_set_name_length, &length);
366408
367 return;409 return;
368}410}
@@ -377,198 +419,97 @@
377 return;419 return;
378}420}
379421
380static gboolean422static void
381dbus_writes (GIOChannel * channel, GIOCondition condition, gpointer data)423ensure_bus_is_up (DbusTestService * service)
382{424{
383 DbusTestService * service = DBUS_TEST_SERVICE(data);425 const gchar* address = NULL;
384426 DbusTestServicePrivate * priv = get_priv(service);
385 if (condition & G_IO_ERR) {427
386 g_critical("DBus writing failure!");428 if (priv->external_bus_address != NULL) {
387 return FALSE;429 /* if the client specified an externally-managed bus,
430 we don't have to start anything here... */
431 address = priv->external_bus_address;
432 } else {
433 /* if the client didn't provide a GTestDBus, create our own */
434 if (priv->test_dbus == NULL)
435 priv->test_dbus = g_test_dbus_new (G_TEST_DBUS_NONE);
436
437 /* start the test dbus */
438 const gboolean bus_is_up = g_test_dbus_get_bus_address(priv->test_dbus) != NULL;
439 if (!bus_is_up) {
440 g_test_dbus_up (priv->test_dbus);
441 priv->test_dbus_started_here = TRUE;
442 }
443
444 address = g_test_dbus_get_bus_address(priv->test_dbus);
388 }445 }
389446
390 gchar * line;447 /* set the environment variables */
391 gsize termloc;448 g_setenv("DBUS_STARTER_ADDRESS", address, TRUE);
392 GIOStatus status = g_io_channel_read_line (channel, &line, NULL, &termloc, NULL);449 switch (priv->bus_type) {
393 g_return_val_if_fail(status == G_IO_STATUS_NORMAL, FALSE);
394 line[termloc] = '\0';
395
396 g_print("DBus daemon: %s\n", line);
397
398 if (service->priv->first_time) {
399 service->priv->first_time = FALSE;
400
401 g_setenv("DBUS_STARTER_ADDRESS", line, TRUE);
402
403 switch (service->priv->bus_type) {
404 case DBUS_TEST_SERVICE_BUS_SESSION:450 case DBUS_TEST_SERVICE_BUS_SESSION:
405 g_setenv("DBUS_SESSION_BUS_ADDRESS", line, TRUE);451 g_setenv("DBUS_SESSION_BUS_ADDRESS", address, TRUE);
406 g_setenv("DBUS_STARTER_BUS_TYPE", "session", TRUE);452 g_setenv("DBUS_STARTER_BUS_TYPE", "session", TRUE);
407 break;453 break;
408 case DBUS_TEST_SERVICE_BUS_SYSTEM:454 case DBUS_TEST_SERVICE_BUS_SYSTEM:
409 g_setenv("DBUS_SYSTEM_BUS_ADDRESS", line, TRUE);455 g_setenv("DBUS_SYSTEM_BUS_ADDRESS", address, TRUE);
410 g_setenv("DBUS_STARTER_BUS_TYPE", "system", TRUE);456 g_setenv("DBUS_STARTER_BUS_TYPE", "system", TRUE);
411 break;457 break;
412 case DBUS_TEST_SERVICE_BUS_BOTH:458 case DBUS_TEST_SERVICE_BUS_BOTH:
413 g_setenv("DBUS_SESSION_BUS_ADDRESS", line, TRUE);459 g_setenv("DBUS_SESSION_BUS_ADDRESS", address, TRUE);
414 g_setenv("DBUS_SYSTEM_BUS_ADDRESS", line, TRUE);460 g_setenv("DBUS_SYSTEM_BUS_ADDRESS", address, TRUE);
415 g_setenv("DBUS_STARTER_BUS_TYPE", "session", TRUE);461 g_setenv("DBUS_STARTER_BUS_TYPE", "session", TRUE);
416 break;462 break;
417 }463 }
418464
419 if (service->priv->state == STATE_DAEMON_STARTING) {465 priv->state = STATE_BUS_STARTED;
420 g_main_loop_quit(service->priv->mainloop);466
421 }
422 }
423
424 g_free(line);
425
426 return TRUE;
427}
428
429static void
430dbus_watcher (GPid pid, G_GNUC_UNUSED gint status, gpointer data)
431{
432 DbusTestService * service = DBUS_TEST_SERVICE(data);
433 g_critical("DBus Daemon exited abruptly!");
434
435 service->priv->daemon_crashed = TRUE;
436 g_main_loop_quit(DBUS_TEST_SERVICE(data)->priv->mainloop);
437
438 if (pid != 0) {
439 g_spawn_close_pid(pid);
440 }
441
442 return;
443}
444
445static void
446dbus_child_setup ()
447{
448 setpgrp();
449}
450
451static void
452start_daemon (DbusTestService * service)
453{
454 if (service->priv->dbus != 0) {
455 return;
456 }
457
458 service->priv->state = STATE_DAEMON_STARTING;
459
460 gint dbus_stdout = 0;
461 GError * error = NULL;
462 gchar * blank[1] = {NULL};
463 gchar * current_dir = g_get_current_dir();
464 gchar * dbus_startup[] = {service->priv->dbus_daemon, "--config-file", service->priv->dbus_configfile, "--print-address", NULL};
465 g_spawn_async_with_pipes(current_dir,
466 dbus_startup, /* argv */
467 service->priv->keep_env ? NULL : blank, /* envp */
468 G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, /* flags */
469 (GSpawnChildSetupFunc) dbus_child_setup, /* child setup func */
470 NULL, /* child setup data */
471 &service->priv->dbus, /* PID */
472 NULL, /* stdin */
473 &dbus_stdout, /* stdout */
474 NULL, /* stderr */
475 &error); /* error */
476
477 g_free (current_dir);
478
479 if (error != NULL) {
480 g_critical("Unable to start dbus daemon: %s", error->message);
481 g_error_free(error);
482 service->priv->daemon_crashed = TRUE;
483 return;
484 }
485
486 dbus_test_watchdog_add_pid(service->priv->watchdog, service->priv->dbus);
487
488 service->priv->dbus_watch = g_child_watch_add(service->priv->dbus, dbus_watcher, service);
489
490 service->priv->dbus_io = g_io_channel_unix_new(dbus_stdout);
491 service->priv->dbus_io_watch = g_io_add_watch(service->priv->dbus_io,
492 G_IO_IN | G_IO_HUP | G_IO_ERR, /* conditions */
493 dbus_writes, /* func */
494 service); /* func data */
495
496 g_main_loop_run(service->priv->mainloop);
497
498 /* we should have a usable connection now, let's check */
499 const gchar * bus_address = NULL;
500 if (service->priv->bus_type == DBUS_TEST_SERVICE_BUS_SYSTEM) {
501 bus_address = g_getenv("DBUS_SYSTEM_BUS_ADDRESS");
502 } else {
503 bus_address = g_getenv("DBUS_SESSION_BUS_ADDRESS");
504 }
505 g_return_if_fail(bus_address != NULL);
506 gchar **tokens = g_strsplit (bus_address, ",", 0);
507
508 guint i;
509 gboolean is_valid = FALSE;
510 for (i = 0; i < g_strv_length (tokens); i++) {
511 if (strlen (tokens[i]) && g_dbus_is_supported_address (tokens[i], NULL)) {
512 is_valid = TRUE;
513 break;
514 }
515 }
516 g_strfreev(tokens);
517
518 if (!is_valid) {
519 service->priv->state = STATE_DAEMON_FAILED;
520 g_critical ("DBus daemon failed: Bus address is not supported");
521 g_error_free (error);
522 return;
523 }
524
525 service->priv->state = STATE_DAEMON_STARTED;
526 return;467 return;
527}468}
528469
529void470void
530dbus_test_service_start_tasks (DbusTestService * service)471dbus_test_service_start_tasks (DbusTestService * service)
531{472{
532 g_return_if_fail(DBUS_TEST_SERVICE(service));473 g_return_if_fail(DBUS_TEST_IS_SERVICE(service));
533 g_return_if_fail(all_tasks(service, all_tasks_bus_match, NULL));474 g_return_if_fail(all_tasks(service, all_tasks_bus_match, NULL));
534475
535 start_daemon(service);476 DbusTestServicePrivate * priv = get_priv(service);
536 g_return_if_fail(g_getenv("DBUS_SESSION_BUS_ADDRESS") != NULL ||477
537 g_getenv("DBUS_SYSTEM_BUS_ADDRESS") != NULL);478 ensure_bus_is_up(service);
538 g_return_if_fail(service->priv->state != STATE_DAEMON_FAILED);479 g_return_if_fail(g_getenv("DBUS_STARTER_ADDRESS") != NULL);
539480
540 if (all_tasks(service, all_tasks_started_helper, NULL)) {481 if (all_tasks(service, all_tasks_started_helper, NULL)) {
541 /* If we have all started we can mark it as such as long482 /* If we have all started we can mark it as such as long
542 as we understand where we could hit this case */483 as we understand where we could hit this case */
543 if (service->priv->state == STATE_INIT || service->priv->state == STATE_DAEMON_STARTED) {484 if (priv->state == STATE_INIT || priv->state == STATE_BUS_STARTED) {
544 service->priv->state = STATE_STARTED;485 priv->state = STATE_STARTED;
545 }486 }
546 return;487 return;
547 }488 }
548489
549 normalize_name_lengths(service);490 normalize_name_lengths(service);
550491
551 g_queue_foreach(&service->priv->tasks_first, task_starter, NULL);492 g_queue_foreach(&priv->tasks_first, task_starter, NULL);
552 if (!g_queue_is_empty(&service->priv->tasks_first)) {493 if (!g_queue_is_empty(&priv->tasks_first)) {
553 g_usleep(100000);494 g_usleep(100000);
554 }495 }
555496
556 g_queue_foreach(&service->priv->tasks_normal, task_starter, NULL);497 g_queue_foreach(&priv->tasks_normal, task_starter, NULL);
557498
558 if (!g_queue_is_empty(&service->priv->tasks_last)) {499 if (!g_queue_is_empty(&priv->tasks_last)) {
559 g_usleep(100000);500 g_usleep(100000);
560 }501 }
561 g_queue_foreach(&service->priv->tasks_last, task_starter, NULL);502 g_queue_foreach(&priv->tasks_last, task_starter, NULL);
562503
563 if (!all_tasks(service, all_tasks_started_helper, NULL)) {504 if (!all_tasks(service, all_tasks_started_helper, NULL)) {
564 service->priv->state = STATE_STARTING;505 priv->state = STATE_STARTING;
565 g_main_loop_run(service->priv->mainloop);506 g_main_loop_run(priv->mainloop);
566507
567 /* This should never happen, but let's be sure */508 /* This should never happen, but let's be sure */
568 g_return_if_fail(all_tasks(service, all_tasks_started_helper, NULL));509 g_return_if_fail(all_tasks(service, all_tasks_started_helper, NULL));
569 }510 }
570511
571 service->priv->state = STATE_STARTED;512 priv->state = STATE_STARTED;
572513
573 return;514 return;
574}515}
@@ -582,10 +523,6 @@
582static int523static int
583get_status (DbusTestService * service)524get_status (DbusTestService * service)
584{525{
585 if (service->priv->daemon_crashed || service->priv->state == STATE_DAEMON_FAILED) {
586 return -1;
587 }
588
589 if (all_tasks(service, all_tasks_passed_helper, NULL)) {526 if (all_tasks(service, all_tasks_passed_helper, NULL)) {
590 return 0;527 return 0;
591 } else {528 } else {
@@ -596,38 +533,41 @@
596int533int
597dbus_test_service_run (DbusTestService * service)534dbus_test_service_run (DbusTestService * service)
598{535{
599 g_return_val_if_fail(DBUS_TEST_SERVICE(service), -1);536 g_return_val_if_fail(DBUS_TEST_IS_SERVICE(service), -1);
537
538 DbusTestServicePrivate * priv = get_priv(service);
600539
601 dbus_test_service_start_tasks(service);540 dbus_test_service_start_tasks(service);
602 g_return_val_if_fail(service->priv->state == STATE_STARTED, get_status(service));541 g_return_val_if_fail(priv->state == STATE_STARTED, get_status(service));
603542
604 if (all_tasks(service, all_tasks_finished_helper, NULL)) {543 if (all_tasks(service, all_tasks_finished_helper, NULL)) {
605 return get_status(service);544 return get_status(service);
606 }545 }
607546
608 service->priv->state = STATE_RUNNING;547 priv->state = STATE_RUNNING;
609 g_main_loop_run(service->priv->mainloop);548 g_main_loop_run(priv->mainloop);
610549
611 /* This should never happen, but let's be sure */550 /* This should never happen, but let's be sure */
612 g_return_val_if_fail(all_tasks(service, all_tasks_finished_helper, NULL), -1);551 g_return_val_if_fail(all_tasks(service, all_tasks_finished_helper, NULL), -1);
613 service->priv->state = STATE_FINISHED;552 priv->state = STATE_FINISHED;
614553
615 return get_status(service);554 return get_status(service);
616}555}
617556
618static void557static void
619task_state_changed (G_GNUC_UNUSED DbusTestTask * task, G_GNUC_UNUSED DbusTestTaskState state, gpointer user_data)558task_state_changed (G_GNUC_UNUSED DbusTestTask * task, G_GNUC_UNUSED DbusTestTaskState state, gpointer gservice)
620{559{
621 g_return_if_fail(DBUS_TEST_IS_SERVICE(user_data));560 g_return_if_fail(DBUS_TEST_IS_SERVICE(gservice));
622 DbusTestService * service = DBUS_TEST_SERVICE(user_data);561 DbusTestService * service = DBUS_TEST_SERVICE(gservice);
562 DbusTestServicePrivate * priv = get_priv(service);
623563
624 if (service->priv->state == STATE_STARTING && all_tasks(service, all_tasks_started_helper, NULL)) {564 if (priv->state == STATE_STARTING && all_tasks(service, all_tasks_started_helper, NULL)) {
625 g_main_loop_quit(service->priv->mainloop);565 g_main_loop_quit(priv->mainloop);
626 return;566 return;
627 }567 }
628568
629 if (service->priv->state == STATE_RUNNING && all_tasks(service, all_tasks_finished_helper, NULL)) {569 if (priv->state == STATE_RUNNING && all_tasks(service, all_tasks_finished_helper, NULL)) {
630 g_main_loop_quit(service->priv->mainloop);570 g_main_loop_quit(priv->mainloop);
631 return;571 return;
632 }572 }
633573
@@ -637,7 +577,7 @@
637void577void
638dbus_test_service_add_task (DbusTestService * service, DbusTestTask * task)578dbus_test_service_add_task (DbusTestService * service, DbusTestTask * task)
639{579{
640 return dbus_test_service_add_task_with_priority(service, task, DBUS_TEST_SERVICE_PRIORITY_NORMAL);580 dbus_test_service_add_task_with_priority(service, task, DBUS_TEST_SERVICE_PRIORITY_NORMAL);
641}581}
642582
643void583void
@@ -650,17 +590,18 @@
650 goals for busness. Fail early. */590 goals for busness. Fail early. */
651 g_return_if_fail(all_tasks_bus_match(service, task, NULL));591 g_return_if_fail(all_tasks_bus_match(service, task, NULL));
652592
593 DbusTestServicePrivate * priv = get_priv(service);
653 GQueue * queue = NULL;594 GQueue * queue = NULL;
654595
655 switch (prio) {596 switch (prio) {
656 case DBUS_TEST_SERVICE_PRIORITY_FIRST:597 case DBUS_TEST_SERVICE_PRIORITY_FIRST:
657 queue = &service->priv->tasks_first;598 queue = &priv->tasks_first;
658 break;599 break;
659 case DBUS_TEST_SERVICE_PRIORITY_NORMAL:600 case DBUS_TEST_SERVICE_PRIORITY_NORMAL:
660 queue = &service->priv->tasks_normal;601 queue = &priv->tasks_normal;
661 break;602 break;
662 case DBUS_TEST_SERVICE_PRIORITY_LAST:603 case DBUS_TEST_SERVICE_PRIORITY_LAST:
663 queue = &service->priv->tasks_last;604 queue = &priv->tasks_last;
664 break;605 break;
665 default:606 default:
666 g_assert_not_reached();607 g_assert_not_reached();
@@ -690,10 +631,12 @@
690 g_return_val_if_fail(DBUS_TEST_IS_SERVICE(service), FALSE);631 g_return_val_if_fail(DBUS_TEST_IS_SERVICE(service), FALSE);
691 g_return_val_if_fail(DBUS_TEST_IS_TASK(task), FALSE);632 g_return_val_if_fail(DBUS_TEST_IS_TASK(task), FALSE);
692633
634 DbusTestServicePrivate * priv = get_priv(service);
635
693 guint count = 0;636 guint count = 0;
694 count += g_queue_remove_all(&service->priv->tasks_first, task);637 count += g_queue_remove_all(&priv->tasks_first, task);
695 count += g_queue_remove_all(&service->priv->tasks_normal, task);638 count += g_queue_remove_all(&priv->tasks_normal, task);
696 count += g_queue_remove_all(&service->priv->tasks_last, task);639 count += g_queue_remove_all(&priv->tasks_last, task);
697640
698 /* Checking the count here so that we can generate a warning. Guessing that641 /* Checking the count here so that we can generate a warning. Guessing that
699 this actually never happens, but it's easy to check */642 this actually never happens, but it's easy to check */
@@ -715,56 +658,27 @@
715}658}
716659
717void660void
718dbus_test_service_set_daemon (DbusTestService * service, const gchar * daemon)
719{
720 g_return_if_fail(DBUS_TEST_IS_SERVICE(service));
721 g_free(service->priv->dbus_daemon);
722 service->priv->dbus_daemon = g_strdup(daemon);
723 return;
724}
725
726void
727dbus_test_service_set_conf_file (DbusTestService * service, const gchar * conffile)
728{
729 g_return_if_fail(DBUS_TEST_IS_SERVICE(service));
730 g_free(service->priv->dbus_configfile);
731 service->priv->dbus_configfile = g_strdup(conffile);
732 return;
733}
734
735void
736dbus_test_service_set_keep_environment (DbusTestService * service, gboolean keep_env)
737{
738 g_return_if_fail(DBUS_TEST_IS_SERVICE(service));
739 service->priv->keep_env = keep_env;
740}
741
742void
743dbus_test_service_stop (DbusTestService * service)661dbus_test_service_stop (DbusTestService * service)
744{662{
745 g_return_if_fail(DBUS_TEST_IS_SERVICE(service));663 g_return_if_fail(DBUS_TEST_IS_SERVICE(service));
746 g_main_loop_quit(service->priv->mainloop);664
665 DbusTestServicePrivate * priv = get_priv(service);
666 g_main_loop_quit(priv->mainloop);
667
747 return;668 return;
748}669}
749670
750void dbus_test_service_set_bus (DbusTestService * service, DbusTestServiceBus bus)671void dbus_test_service_set_bus (DbusTestService * service, DbusTestServiceBus bus)
751{672{
752 g_return_if_fail(DBUS_TEST_IS_SERVICE(service));673 g_return_if_fail(DBUS_TEST_IS_SERVICE(service));
753 g_return_if_fail(service->priv->dbus == 0); /* we can't change after we're running */674
675 DbusTestServicePrivate * priv = get_priv(service);
676 g_return_if_fail(priv->state < STATE_BUS_STARTED); /* we can't change after the bus is started */
754677
755 if (bus == DBUS_TEST_SERVICE_BUS_BOTH) {678 if (bus == DBUS_TEST_SERVICE_BUS_BOTH) {
756 g_warning("Setting bus to BOTH, which is typically only used as a default value.");679 g_warning("Setting bus to BOTH, which is typically only used as a default value.");
757 }680 }
758681
759 service->priv->bus_type = bus;682 priv->bus_type = bus;
760 g_warn_if_fail(all_tasks(service, all_tasks_bus_match, NULL));683 g_warn_if_fail(all_tasks(service, all_tasks_bus_match, NULL));
761
762 if (bus == DBUS_TEST_SERVICE_BUS_SYSTEM) {
763 g_free(service->priv->dbus_configfile);
764 service->priv->dbus_configfile = g_strdup(DEFAULT_SYSTEM_CONF);
765 } else {
766 /* BOTH and SESSION get the session config — for backwards compatibility there */
767 g_free(service->priv->dbus_configfile);
768 service->priv->dbus_configfile = g_strdup(DEFAULT_SESSION_CONF);
769 }
770}684}
771685
=== modified file 'libdbustest/service.h'
--- libdbustest/service.h 2015-02-13 17:19:17 +0000
+++ libdbustest/service.h 2015-09-21 17:10:37 +0000
@@ -24,7 +24,7 @@
24#error "Please include #include <libdbustest/dbus-test.h> only"24#error "Please include #include <libdbustest/dbus-test.h> only"
25#endif25#endif
2626
27#include <glib-object.h>27#include <gio/gio.h>
2828
29#include "task.h"29#include "task.h"
3030
@@ -39,7 +39,6 @@
3939
40typedef struct _DbusTestService DbusTestService;40typedef struct _DbusTestService DbusTestService;
41typedef struct _DbusTestServiceClass DbusTestServiceClass;41typedef struct _DbusTestServiceClass DbusTestServiceClass;
42typedef struct _DbusTestServicePrivate DbusTestServicePrivate;
4342
44struct _DbusTestServiceClass {43struct _DbusTestServiceClass {
45 GObjectClass parent_class;44 GObjectClass parent_class;
@@ -47,7 +46,6 @@
4746
48struct _DbusTestService {47struct _DbusTestService {
49 GObject parent;48 GObject parent;
50 DbusTestServicePrivate * priv;
51};49};
5250
53typedef enum51typedef enum
@@ -65,7 +63,8 @@
65} DbusTestServiceBus;63} DbusTestServiceBus;
6664
67GType dbus_test_service_get_type (void);65GType dbus_test_service_get_type (void);
68DbusTestService * dbus_test_service_new (const gchar * address);66DbusTestService * dbus_test_service_new (const char* external_bus_addr);
67DbusTestService * dbus_test_service_new_with_test_bus(GTestDBus * test_bus);
69void dbus_test_service_start_tasks (DbusTestService * service);68void dbus_test_service_start_tasks (DbusTestService * service);
70int dbus_test_service_run (DbusTestService * service);69int dbus_test_service_run (DbusTestService * service);
71void dbus_test_service_stop (DbusTestService * service);70void dbus_test_service_stop (DbusTestService * service);
@@ -74,9 +73,6 @@
74void dbus_test_service_add_task_with_priority (DbusTestService * service, DbusTestTask * task, DbusTestServicePriority prio);73void dbus_test_service_add_task_with_priority (DbusTestService * service, DbusTestTask * task, DbusTestServicePriority prio);
75gboolean dbus_test_service_remove_task (DbusTestService * service, DbusTestTask * task);74gboolean dbus_test_service_remove_task (DbusTestService * service, DbusTestTask * task);
7675
77void dbus_test_service_set_daemon (DbusTestService * service, const gchar * daemon);
78void dbus_test_service_set_conf_file (DbusTestService * service, const gchar * conffile);
79void dbus_test_service_set_keep_environment (DbusTestService * service, gboolean keep_env);
80void dbus_test_service_set_bus (DbusTestService * service, DbusTestServiceBus bus);76void dbus_test_service_set_bus (DbusTestService * service, DbusTestServiceBus bus);
8177
82G_END_DECLS78G_END_DECLS
8379
=== modified file 'libdbustest/task.c'
--- libdbustest/task.c 2015-01-30 02:36:45 +0000
+++ libdbustest/task.c 2015-09-21 17:10:37 +0000
@@ -55,7 +55,7 @@
55static void dbus_test_task_dispose (GObject *object);55static void dbus_test_task_dispose (GObject *object);
56static void dbus_test_task_finalize (GObject *object);56static void dbus_test_task_finalize (GObject *object);
5757
58G_DEFINE_TYPE (DbusTestTask, dbus_test_task, G_TYPE_OBJECT);58G_DEFINE_TYPE (DbusTestTask, dbus_test_task, G_TYPE_OBJECT)
5959
60static guint signals[LAST_SIGNAL] = {0};60static guint signals[LAST_SIGNAL] = {0};
6161
@@ -192,7 +192,7 @@
192void192void
193dbus_test_task_set_wait_for (DbusTestTask * task, const gchar * dbus_name)193dbus_test_task_set_wait_for (DbusTestTask * task, const gchar * dbus_name)
194{194{
195 return dbus_test_task_set_wait_for_bus(task, dbus_name, DBUS_TEST_SERVICE_BUS_BOTH);195 dbus_test_task_set_wait_for_bus(task, dbus_name, DBUS_TEST_SERVICE_BUS_BOTH);
196}196}
197197
198void198void
199199
=== modified file 'libdbustest/watchdog.c'
--- libdbustest/watchdog.c 2013-01-29 19:38:21 +0000
+++ libdbustest/watchdog.c 2015-09-21 17:10:37 +0000
@@ -15,7 +15,7 @@
15static void dbus_test_watchdog_init (DbusTestWatchdog *self);15static void dbus_test_watchdog_init (DbusTestWatchdog *self);
16static void dbus_test_watchdog_finalize (GObject *object);16static void dbus_test_watchdog_finalize (GObject *object);
1717
18G_DEFINE_TYPE (DbusTestWatchdog, dbus_test_watchdog, G_TYPE_OBJECT);18G_DEFINE_TYPE (DbusTestWatchdog, dbus_test_watchdog, G_TYPE_OBJECT)
1919
20/* Initialize class */20/* Initialize class */
21static void21static void
@@ -32,7 +32,7 @@
3232
33/* Initialize instance data */33/* Initialize instance data */
34static void34static void
35dbus_test_watchdog_init (G_GNUC_UNUSED DbusTestWatchdog *self)35dbus_test_watchdog_init (DbusTestWatchdog *self)
36{36{
37 self->priv = DBUS_TEST_WATCHDOG_GET_PRIVATE(self);37 self->priv = DBUS_TEST_WATCHDOG_GET_PRIVATE(self);
3838
3939
=== modified file 'po/Makefile.in.in'
--- po/Makefile.in.in 2012-07-12 15:56:53 +0000
+++ po/Makefile.in.in 2015-09-21 17:10:37 +0000
@@ -33,8 +33,7 @@
33datadir = @datadir@33datadir = @datadir@
34datarootdir = @datarootdir@34datarootdir = @datarootdir@
35libdir = @libdir@35libdir = @libdir@
36DATADIRNAME = @DATADIRNAME@36localedir = @localedir@
37itlocaledir = $(prefix)/$(DATADIRNAME)/locale
38subdir = po37subdir = po
39install_sh = @install_sh@38install_sh = @install_sh@
40# Automake >= 1.8 provides @mkdir_p@.39# Automake >= 1.8 provides @mkdir_p@.
@@ -80,7 +79,7 @@
8079
81.po.pox:80.po.pox:
82 $(MAKE) $(GETTEXT_PACKAGE).pot81 $(MAKE) $(GETTEXT_PACKAGE).pot
83 $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox82 $(MSGMERGE) $* $(GETTEXT_PACKAGE).pot -o $*.pox
8483
85.po.mo:84.po.mo:
86 $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $<85 $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $<
@@ -108,7 +107,7 @@
108install-data-yes: all107install-data-yes: all
109 linguas="$(USE_LINGUAS)"; \108 linguas="$(USE_LINGUAS)"; \
110 for lang in $$linguas; do \109 for lang in $$linguas; do \
111 dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \110 dir=$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \
112 $(mkdir_p) $$dir; \111 $(mkdir_p) $$dir; \
113 if test -r $$lang.gmo; then \112 if test -r $$lang.gmo; then \
114 $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \113 $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
@@ -142,8 +141,8 @@
142uninstall:141uninstall:
143 linguas="$(USE_LINGUAS)"; \142 linguas="$(USE_LINGUAS)"; \
144 for lang in $$linguas; do \143 for lang in $$linguas; do \
145 rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \144 rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \
146 rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \145 rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \
147 done146 done
148147
149check: all $(GETTEXT_PACKAGE).pot148check: all $(GETTEXT_PACKAGE).pot
150149
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2012-10-02 03:15:57 +0000
+++ src/Makefile.am 2015-09-21 17:10:37 +0000
@@ -5,7 +5,6 @@
5dbus_test_runner_CFLAGS = $(DBUS_TEST_RUNNER_CFLAGS) \5dbus_test_runner_CFLAGS = $(DBUS_TEST_RUNNER_CFLAGS) \
6 $(COVERAGE_CFLAGS) \6 $(COVERAGE_CFLAGS) \
7 -I$(top_srcdir) \7 -I$(top_srcdir) \
8 -DDEFAULT_SESSION_CONF="\"$(datadir)/dbus-test-runner/session.conf\"" \
9 -Wall -Werror -Wextra8 -Wall -Werror -Wextra
10dbus_test_runner_LDADD = $(DBUS_TEST_RUNNER_LIBS) \9dbus_test_runner_LDADD = $(DBUS_TEST_RUNNER_LIBS) \
11 $(top_builddir)/libdbustest/libdbustest.la10 $(top_builddir)/libdbustest/libdbustest.la
1211
=== modified file 'src/dbus-test-runner.c'
--- src/dbus-test-runner.c 2014-12-09 22:24:27 +0000
+++ src/dbus-test-runner.c 2015-09-21 17:10:37 +0000
@@ -25,7 +25,6 @@
2525
26static DbusTestServiceBus bus_type = DBUS_TEST_SERVICE_BUS_SESSION;26static DbusTestServiceBus bus_type = DBUS_TEST_SERVICE_BUS_SESSION;
27static gint max_wait = 30;27static gint max_wait = 30;
28static gboolean keep_env = FALSE;
29static DbusTestProcess * last_task = NULL;28static DbusTestProcess * last_task = NULL;
30static DbusTestService * service = NULL;29static DbusTestService * service = NULL;
31static gboolean timeout = FALSE;30static gboolean timeout = FALSE;
@@ -194,18 +193,13 @@
194 return FALSE;193 return FALSE;
195}194}
196195
197static gchar * dbus_configfile = NULL;
198static gchar * dbus_daemon = NULL;
199static gchar * bustle_cmd = NULL;196static gchar * bustle_cmd = NULL;
200static gchar * bustle_datafile = NULL;197static gchar * bustle_datafile = NULL;
201198
202static GOptionEntry general_options[] = {199static GOptionEntry general_options[] = {
203 {"dbus-daemon", 0, 0, G_OPTION_ARG_FILENAME, &dbus_daemon, "Path to the DBus deamon to use. Defaults to 'dbus-daemon'.", "executable"},
204 {"dbus-config", 'd', 0, G_OPTION_ARG_FILENAME, &dbus_configfile, "Configuration file for newly created DBus server. Defaults to '" DEFAULT_SESSION_CONF "'.", "config_file"},
205 {"bustle-monitor", 0, 0, G_OPTION_ARG_FILENAME, &bustle_cmd, "Path to the Bustle DBus Monitor to use. Defaults to 'bustle-dbus-monitor'.", "executable"},200 {"bustle-monitor", 0, 0, G_OPTION_ARG_FILENAME, &bustle_cmd, "Path to the Bustle DBus Monitor to use. Defaults to 'bustle-dbus-monitor'.", "executable"},
206 {"bustle-data", 'b', 0, G_OPTION_ARG_FILENAME, &bustle_datafile, "A file to write out data from the bustle logger to.", "data_file"},201 {"bustle-data", 'b', 0, G_OPTION_ARG_FILENAME, &bustle_datafile, "A file to write out data from the bustle logger to.", "data_file"},
207 {"max-wait", 'm', 0, G_OPTION_ARG_INT, &max_wait, "The maximum amount of time the test runner will wait for the test to complete. Default is 30 seconds.", "seconds"},202 {"max-wait", 'm', 0, G_OPTION_ARG_INT, &max_wait, "The maximum amount of time the test runner will wait for the test to complete. Default is 30 seconds.", "seconds"},
208 {"keep-env", 0, 0, G_OPTION_ARG_NONE, &keep_env, "Whether to propagate the execution environment to the dbus-server and all the services activated by it. By default the environment is cleared.", NULL },
209 {"bus-type", 0, 0, G_OPTION_ARG_CALLBACK, option_bus_type, "Configures which buses are represented by the tool to the tasks. Default: session", "{session|system|both}" },203 {"bus-type", 0, 0, G_OPTION_ARG_CALLBACK, option_bus_type, "Configures which buses are represented by the tool to the tasks. Default: session", "{session|system|both}" },
210 { NULL, 0, 0, 0, NULL, NULL, NULL }204 { NULL, 0, 0, 0, NULL, NULL, NULL }
211};205};
@@ -250,14 +244,6 @@
250244
251 dbus_test_service_set_bus(service, bus_type);245 dbus_test_service_set_bus(service, bus_type);
252246
253 if (dbus_daemon != NULL) {
254 dbus_test_service_set_daemon(service, dbus_daemon);
255 }
256
257 if (dbus_configfile != NULL) {
258 dbus_test_service_set_conf_file(service, dbus_configfile);
259 }
260
261 if (bustle_datafile != NULL) {247 if (bustle_datafile != NULL) {
262 DbusTestBustle * bustler = dbus_test_bustle_new(bustle_datafile);248 DbusTestBustle * bustler = dbus_test_bustle_new(bustle_datafile);
263 /* We want to ensure that bustle captures all the data so start it first */249 /* We want to ensure that bustle captures all the data so start it first */
@@ -274,8 +260,6 @@
274 g_timeout_add_seconds(max_wait, max_wait_hit, NULL);260 g_timeout_add_seconds(max_wait, max_wait_hit, NULL);
275 }261 }
276262
277 dbus_test_service_set_keep_environment(service, keep_env);
278
279 /* These should all be in the service now */263 /* These should all be in the service now */
280 if (last_task != NULL) {264 if (last_task != NULL) {
281 g_object_unref(last_task);265 g_object_unref(last_task);
282266
=== modified file 'tests/Makefile.am'
--- tests/Makefile.am 2015-01-30 17:10:47 +0000
+++ tests/Makefile.am 2015-09-21 17:10:37 +0000
@@ -1,6 +1,6 @@
11
2DBUS_RUNNER=$(top_builddir)/src/dbus-test-runner --dbus-config $(srcdir)/../data/session.conf2DBUS_RUNNER=$(top_builddir)/src/dbus-test-runner
3DBUS_RUNNER_SYSTEM=$(top_builddir)/src/dbus-test-runner --dbus-config $(srcdir)/../data/system.conf3DBUS_RUNNER_SYSTEM=$(top_builddir)/src/dbus-test-runner
4TESTS = 4TESTS =
5DISTCLEANFILES = $(TESTS)5DISTCLEANFILES = $(TESTS)
6XFAIL_TESTS =6XFAIL_TESTS =
77
=== modified file 'tests/test-libdbustest-mock.c'
--- tests/test-libdbustest-mock.c 2015-02-02 15:52:49 +0000
+++ tests/test-libdbustest-mock.c 2015-09-21 17:10:37 +0000
@@ -58,8 +58,6 @@
58 DbusTestService * service = dbus_test_service_new(NULL);58 DbusTestService * service = dbus_test_service_new(NULL);
59 g_assert(service != NULL);59 g_assert(service != NULL);
6060
61 dbus_test_service_set_conf_file(service, SESSION_CONF);
62
63 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");61 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");
64 g_assert(mock != NULL);62 g_assert(mock != NULL);
6563
@@ -103,8 +101,6 @@
103 DbusTestService * service = dbus_test_service_new(NULL);101 DbusTestService * service = dbus_test_service_new(NULL);
104 g_assert(service != NULL);102 g_assert(service != NULL);
105103
106 dbus_test_service_set_conf_file(service, SESSION_CONF);
107
108 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");104 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");
109 g_assert(mock != NULL);105 g_assert(mock != NULL);
110106
@@ -275,8 +271,6 @@
275 DbusTestService * service = dbus_test_service_new(NULL);271 DbusTestService * service = dbus_test_service_new(NULL);
276 g_assert(service != NULL);272 g_assert(service != NULL);
277273
278 dbus_test_service_set_conf_file(service, SESSION_CONF);
279
280 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");274 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");
281 g_assert(mock != NULL);275 g_assert(mock != NULL);
282276
@@ -359,8 +353,6 @@
359 DbusTestService * service = dbus_test_service_new(NULL);353 DbusTestService * service = dbus_test_service_new(NULL);
360 g_assert(service != NULL);354 g_assert(service != NULL);
361355
362 dbus_test_service_set_conf_file(service, SESSION_CONF);
363
364 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");356 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");
365 g_assert(mock != NULL);357 g_assert(mock != NULL);
366358
@@ -430,8 +422,6 @@
430 DbusTestService * service = dbus_test_service_new(NULL);422 DbusTestService * service = dbus_test_service_new(NULL);
431 g_assert(service != NULL);423 g_assert(service != NULL);
432424
433 dbus_test_service_set_conf_file(service, SESSION_CONF);
434
435 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");425 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");
436 g_assert(mock != NULL);426 g_assert(mock != NULL);
437427
@@ -530,8 +520,6 @@
530 g_assert(service != NULL);520 g_assert(service != NULL);
531 dbus_test_service_set_bus(service, DBUS_TEST_SERVICE_BUS_SYSTEM);521 dbus_test_service_set_bus(service, DBUS_TEST_SERVICE_BUS_SYSTEM);
532522
533 dbus_test_service_set_conf_file(service, SESSION_CONF);
534
535 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");523 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");
536 g_assert(mock != NULL);524 g_assert(mock != NULL);
537 dbus_test_task_set_bus(DBUS_TEST_TASK(mock), DBUS_TEST_SERVICE_BUS_SYSTEM);525 dbus_test_task_set_bus(DBUS_TEST_TASK(mock), DBUS_TEST_SERVICE_BUS_SYSTEM);
@@ -598,8 +586,6 @@
598 DbusTestService * service = dbus_test_service_new(NULL);586 DbusTestService * service = dbus_test_service_new(NULL);
599 g_assert(service != NULL);587 g_assert(service != NULL);
600588
601 dbus_test_service_set_conf_file(service, SESSION_CONF);
602
603 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");589 DbusTestDbusMock * mock = dbus_test_dbus_mock_new("foo.test");
604 g_assert(mock != NULL);590 g_assert(mock != NULL);
605591
606592
=== modified file 'tests/test-libdbustest.c'
--- tests/test-libdbustest.c 2013-01-29 20:32:11 +0000
+++ tests/test-libdbustest.c 2015-09-21 17:10:37 +0000
@@ -8,8 +8,6 @@
8 DbusTestService * service = dbus_test_service_new(NULL);8 DbusTestService * service = dbus_test_service_new(NULL);
9 g_assert(service != NULL);9 g_assert(service != NULL);
1010
11 dbus_test_service_set_conf_file(service, SESSION_CONF);
12
13 g_unsetenv("DBUS_SESSION_BUS_ADDRESS");11 g_unsetenv("DBUS_SESSION_BUS_ADDRESS");
14 dbus_test_service_start_tasks(service);12 dbus_test_service_start_tasks(service);
15 g_assert(g_getenv("DBUS_SESSION_BUS_ADDRESS") != NULL);13 g_assert(g_getenv("DBUS_SESSION_BUS_ADDRESS") != NULL);
@@ -24,8 +22,6 @@
24 DbusTestService * service = dbus_test_service_new(NULL);22 DbusTestService * service = dbus_test_service_new(NULL);
25 g_assert(service != NULL);23 g_assert(service != NULL);
2624
27 dbus_test_service_set_conf_file(service, SESSION_CONF);
28
29 DbusTestTask * task = dbus_test_task_new();25 DbusTestTask * task = dbus_test_task_new();
30 g_assert(task != NULL);26 g_assert(task != NULL);
3127
@@ -46,8 +42,6 @@
46 DbusTestService * service = dbus_test_service_new(NULL);42 DbusTestService * service = dbus_test_service_new(NULL);
47 g_assert(service != NULL);43 g_assert(service != NULL);
4844
49 dbus_test_service_set_conf_file(service, SESSION_CONF);
50
51 DbusTestTask * task = dbus_test_task_new();45 DbusTestTask * task = dbus_test_task_new();
52 g_assert(task != NULL);46 g_assert(task != NULL);
5347

Subscribers

People subscribed via source and target branches