21
21
#include <liburl-dispatcher/url-dispatcher.h>
22
22
#include <libdbustest/dbus-test.h>
24
26
class ServiceTest : public ::testing::Test
27
29
DbusTestService * service = NULL;
28
30
DbusTestDbusMock * mock = NULL;
31
DbusTestDbusMock * dashmock = NULL;
29
32
DbusTestDbusMockObject * obj = NULL;
30
33
DbusTestDbusMockObject * jobobj = NULL;
31
34
DbusTestProcess * dispatcher = NULL;
35
38
g_setenv("UBUNTU_APP_LAUNCH_USE_SESSION", "1", TRUE);
36
39
g_setenv("URL_DISPATCHER_DISABLE_RECOVERABLE_ERROR", "1", TRUE);
38
43
service = dbus_test_service_new(NULL);
40
45
dispatcher = dbus_test_process_new(URL_DISPATCHER_SERVICE);
41
46
dbus_test_task_set_name(DBUS_TEST_TASK(dispatcher), "Dispatcher");
42
47
dbus_test_service_add_task(service, DBUS_TEST_TASK(dispatcher));
44
50
mock = dbus_test_dbus_mock_new("com.ubuntu.Upstart");
45
51
obj = dbus_test_dbus_mock_get_object(mock, "/com/ubuntu/Upstart", "com.ubuntu.Upstart0_6", NULL);
60
66
"ret = dbus.ObjectPath('/instance')", /* python */
69
dbus_test_task_set_name(DBUS_TEST_TASK(mock), "Upstart");
63
70
dbus_test_service_add_task(service, DBUS_TEST_TASK(mock));
73
dashmock = dbus_test_dbus_mock_new("com.canonical.UnityDash");
75
DbusTestDbusMockObject * fdoobj = dbus_test_dbus_mock_get_object(dashmock, "/unity8_2ddash", "org.freedesktop.Application", NULL);
76
dbus_test_dbus_mock_object_add_method(dashmock, fdoobj,
78
G_VARIANT_TYPE("(asa{sv})"),
82
dbus_test_task_set_name(DBUS_TEST_TASK(dashmock), "UnityDash");
83
dbus_test_service_add_task(service, DBUS_TEST_TASK(dashmock));
85
/* Start your engines! */
64
86
dbus_test_service_start_tasks(service);
66
88
bus = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL);
87
110
g_main_iteration(TRUE);
119
const gchar * cachedir = CMAKE_BINARY_DIR "/service-test-cache";
120
ASSERT_EQ(0, g_mkdir_with_parents(cachedir, 0700));
122
g_setenv("XDG_CACHE_HOME", cachedir, TRUE);
124
sqlite3 * db = url_db_create_database();
128
url_db_set_file_motification_time(db, "/unity8-dash.url-dispatcher", &time);
129
url_db_insert_url(db, "/unity8-dash.url-dispatcher", "scope", NULL);
134
g_spawn_command_line_sync("rm -rf " CMAKE_BINARY_DIR "/service-test-cache", NULL, NULL, NULL, NULL);
137
static gboolean quit_loop (gpointer ploop) {
138
g_main_loop_quit((GMainLoop *)ploop);
142
void pause (int time) {
143
GMainLoop * loop = g_main_loop_new(NULL, FALSE);
144
guint timer = g_timeout_add(time, quit_loop, loop);
145
g_main_loop_run(loop);
146
g_main_loop_unref(loop);
190
246
g_strfreev(errorappids);
250
focus_signal_cb (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data)
252
guint * focus_count = (guint *)user_data;
253
*focus_count = *focus_count + 1;
254
g_debug("Focus signaled: %d", *focus_count);
257
TEST_F(ServiceTest, Unity8DashTest) {
258
guint focus_count = 0;
259
GDBusConnection * bus = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL);
261
guint focus_signal = g_dbus_connection_signal_subscribe(bus,
263
"com.canonical.UbuntuAppLaunch",
266
"unity8-dash", /* arg0 */
267
G_DBUS_SIGNAL_FLAGS_NONE,
270
NULL); /* destroy func */
273
DbusTestDbusMockObject * fdoobj = dbus_test_dbus_mock_get_object(dashmock, "/unity8_2ddash", "org.freedesktop.Application", NULL);
274
GMainLoop * main = g_main_loop_new(NULL, FALSE);
276
/* Send an invalid URL */
277
url_dispatch_send("scope://foo-bar", simple_cb, main);
279
/* Give it some time to send and reply */
280
g_main_loop_run(main);
281
g_main_loop_unref(main);
284
const DbusTestDbusMockCall * calls = dbus_test_dbus_mock_object_get_method_calls(mock, jobobj, "Start", &callslen, NULL);
286
EXPECT_EQ(0, callslen);
289
calls = dbus_test_dbus_mock_object_get_method_calls(dashmock, fdoobj, "Open", &callslen, NULL);
291
EXPECT_EQ(1, callslen);
292
EXPECT_TRUE(g_variant_equal(calls[0].params, g_variant_new_parsed("(['scope://foo-bar'], @a{sv} {})")));
294
EXPECT_EQ(1, focus_count);
296
g_dbus_connection_signal_unsubscribe(bus, focus_signal);
297
g_clear_object(&bus);