Branch data Line data Source code
1 : : /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
2 : : *
3 : : * Copyright © 2018 Endless Mobile, Inc.
4 : : *
5 : : * This library is free software; you can redistribute it and/or
6 : : * modify it under the terms of the GNU Lesser General Public
7 : : * License as published by the Free Software Foundation; either
8 : : * version 2.1 of the License, or (at your option) any later version.
9 : : *
10 : : * This library is distributed in the hope that it will be useful,
11 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 : : * Lesser General Public License for more details.
14 : : *
15 : : * You should have received a copy of the GNU Lesser General Public
16 : : * License along with this library; if not, write to the Free Software
17 : : * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 : : *
19 : : * Authors:
20 : : * - Philip Withnall <withnall@endlessm.com>
21 : : */
22 : :
23 : : #include "config.h"
24 : :
25 : : #include <glib.h>
26 : : #include <gio/gio.h>
27 : : #include <libmogwai-schedule-client/scheduler.h>
28 : : #include <locale.h>
29 : :
30 : :
31 : : typedef struct
32 : : {
33 : : GTestDBus *bus; /* (owned) */
34 : : GDBusConnection *connection; /* (owned) */
35 : : } Fixture;
36 : :
37 : : static void
38 : 3 : setup (Fixture *fixture,
39 : : gconstpointer test_data)
40 : : {
41 : 2 : g_autoptr(GError) error = NULL;
42 : :
43 : 3 : fixture->bus = g_test_dbus_new (G_TEST_DBUS_NONE);
44 : 3 : g_test_dbus_up (fixture->bus);
45 : :
46 : 2 : fixture->connection = g_dbus_connection_new_for_address_sync (g_test_dbus_get_bus_address (fixture->bus),
47 : : G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT |
48 : : G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION,
49 : : NULL,
50 : : NULL,
51 : : &error);
52 [ - + ]: 2 : g_assert_no_error (error);
53 : 2 : }
54 : :
55 : : static void
56 : 2 : teardown (Fixture *fixture,
57 : : gconstpointer test_data)
58 : : {
59 [ + - ]: 2 : if (fixture->connection != NULL)
60 : 2 : g_dbus_connection_close_sync (fixture->connection, NULL, NULL);
61 [ + - ]: 2 : g_clear_object (&fixture->connection);
62 : :
63 : 2 : g_test_dbus_down (fixture->bus);
64 [ + - ]: 2 : g_clear_object (&fixture->bus);
65 : 2 : }
66 : :
67 : : static void
68 : 1 : async_result_cb (GObject *obj,
69 : : GAsyncResult *result,
70 : : gpointer user_data)
71 : : {
72 : 1 : GAsyncResult **result_out = user_data;
73 : 1 : *result_out = g_object_ref (result);
74 : 1 : }
75 : :
76 : : /* Test asynchronously constructing an #MwscScheduler object with invalid
77 : : * arguments. */
78 : : static void
79 : 1 : test_service_construction_async_error (Fixture *fixture,
80 : : gconstpointer test_data)
81 : : {
82 : 1 : g_autoptr(GAsyncResult) result = NULL;
83 : 1 : g_autoptr(GError) error = NULL;
84 : :
85 : 1 : mwsc_scheduler_new_full_async (fixture->connection,
86 : : "com.endlessm.MogwaiSchedule1.Nonexistent",
87 : : "/com/endlessm/DownloadManager1/Nonexistent",
88 : : NULL, /* cancellable */
89 : : async_result_cb,
90 : : &result);
91 : :
92 [ + + ]: 4 : while (result == NULL)
93 : 3 : g_main_context_iteration (NULL, TRUE);
94 : :
95 : 1 : g_autoptr(MwscScheduler) scheduler = NULL;
96 : 1 : scheduler = mwsc_scheduler_new_full_finish (result, &error);
97 [ + - + - : 1 : g_assert_error (error, MWSC_SCHEDULER_ERROR, MWSC_SCHEDULER_ERROR_INVALIDATED);
- + ]
98 [ - + ]: 1 : g_assert_null (scheduler);
99 : 1 : }
100 : :
101 : : /* Test synchronously constructing an #MwscScheduler object with invalid
102 : : * arguments. */
103 : : static void
104 : 1 : test_service_construction_sync_error (Fixture *fixture,
105 : : gconstpointer test_data)
106 : : {
107 : 1 : g_autoptr(MwscScheduler) scheduler = NULL;
108 : 1 : g_autoptr(GError) error = NULL;
109 : :
110 : 1 : scheduler = mwsc_scheduler_new_full (fixture->connection,
111 : : "com.endlessm.MogwaiSchedule1.Nonexistent",
112 : : "/com/endlessm/DownloadManager1/Nonexistent",
113 : : NULL, /* cancellable */
114 : : &error);
115 [ + - + - : 1 : g_assert_error (error, MWSC_SCHEDULER_ERROR, MWSC_SCHEDULER_ERROR_INVALIDATED);
- + ]
116 [ - + ]: 1 : g_assert_null (scheduler);
117 : 1 : }
118 : :
119 : : int
120 : 2 : main (int argc,
121 : : char **argv)
122 : : {
123 : 2 : setlocale (LC_ALL, "");
124 : 2 : g_test_init (&argc, &argv, NULL);
125 : :
126 : 2 : g_test_add ("/scheduler/construction/async/error", Fixture, NULL, setup,
127 : : test_service_construction_async_error, teardown);
128 : 2 : g_test_add ("/scheduler/construction/sync/error", Fixture, NULL, setup,
129 : : test_service_construction_sync_error, teardown);
130 : :
131 : 2 : return g_test_run ();
132 : : }
|