2
* Copyright 2013 Canonical Ltd.
5
* Charles Kerr <charles.kerr@canonical.com>
7
* This program is free software: you can redistribute it and/or modify it
8
* under the terms of the GNU General Public License version 3, as published
9
* by the Free Software Foundation.
11
* This program is distributed in the hope that it will be useful, but
12
* WITHOUT ANY WARRANTY; without even the implied warranties of
13
* MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
14
* PURPOSE. See the GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License along
17
* with this program. If not, see <http://www.gnu.org/licenses/>.
20
#include "mock-login1-manager.h"
21
#include "mock-login1-seat.h"
22
#include "mock-user.h"
26
const char * const BUS_NAME = "org.freedesktop.login1";
28
const char * const BUS_PATH = "/org/freedesktop/login1";
36
MockLogin1Manager :: emit_session_new (MockLogin1Seat * seat, int tag) const
40
seat->get_session_id_and_path_for_tag (tag, id, path);
42
login1_manager_emit_session_new (my_skeleton, id.c_str(), path.c_str());
46
MockLogin1Manager :: add_session (MockLogin1Seat * seat, MockUser * user)
48
g_assert (my_seats.count(seat) == 1);
50
const int session_tag = seat->add_session (user);
51
emit_session_new (seat, session_tag);
56
MockLogin1Manager :: emit_session_removed (MockLogin1Seat * seat, int tag) const
60
seat->get_session_id_and_path_for_tag (tag, id, path);
62
login1_manager_emit_session_removed (my_skeleton, id.c_str(), path.c_str());
66
MockLogin1Manager :: remove_session (MockLogin1Seat * seat, int session_tag)
68
seat->remove_session (session_tag);
69
emit_session_removed (seat, session_tag);
73
MockLogin1Manager :: add_seat (MockLogin1Seat * seat)
75
g_assert (my_seats.count(seat) == 0);
77
my_seats.insert (seat);
78
std::set<int> sessions = seat->sessions ();
79
for (auto tag : sessions)
80
emit_session_new (seat, tag);
88
MockLogin1Manager :: list_sessions () const
92
g_variant_builder_init (&b, G_VARIANT_TYPE("a(susso)"));
94
for (auto seat : my_seats)
96
GVariant * seat_sessions = seat->list_sessions ();
99
g_variant_iter_init (&iter, seat_sessions);
101
while ((child = g_variant_iter_next_value (&iter)))
103
g_variant_builder_add_value (&b, child);
104
g_variant_unref (child);
108
return g_variant_builder_end (&b);
112
**** Skeleton Handlers
116
MockLogin1Manager :: handle_list_sessions (Login1Manager * m,
117
GDBusMethodInvocation * inv,
120
GVariant * sessions = static_cast<MockLogin1Manager*>(gself)->list_sessions();
121
login1_manager_complete_list_sessions (m, inv, sessions);
126
MockLogin1Manager :: handle_can_suspend (Login1Manager * m,
127
GDBusMethodInvocation * inv,
130
const std::string& s = static_cast<MockLogin1Manager*>(gself)->can_suspend();
131
login1_manager_complete_can_suspend (m, inv, s.c_str());
136
MockLogin1Manager :: handle_can_hibernate (Login1Manager * m,
137
GDBusMethodInvocation * inv,
140
const std::string& s = static_cast<MockLogin1Manager*>(gself)->can_hibernate();
141
login1_manager_complete_can_hibernate (m, inv, s.c_str());
146
MockLogin1Manager :: handle_reboot (Login1Manager * m,
147
GDBusMethodInvocation * inv,
148
gboolean interactive G_GNUC_UNUSED,
151
static_cast<MockLogin1Manager*>(gself)->my_last_action = "reboot";
152
login1_manager_complete_reboot (m, inv);
157
MockLogin1Manager :: handle_power_off (Login1Manager * m,
158
GDBusMethodInvocation * inv,
159
gboolean interactive G_GNUC_UNUSED,
162
static_cast<MockLogin1Manager*>(gself)->my_last_action = "power-off";
163
login1_manager_complete_power_off (m, inv);
168
MockLogin1Manager :: handle_suspend (Login1Manager * m,
169
GDBusMethodInvocation * inv,
170
gboolean interactive G_GNUC_UNUSED,
173
static_cast<MockLogin1Manager*>(gself)->my_last_action = "suspend";
174
login1_manager_complete_suspend (m, inv);
179
MockLogin1Manager :: handle_hibernate (Login1Manager * m,
180
GDBusMethodInvocation * inv,
181
gboolean interactive G_GNUC_UNUSED,
184
static_cast<MockLogin1Manager*>(gself)->my_last_action = "hibernate";
185
login1_manager_complete_hibernate (m, inv);
194
MockLogin1Manager :: can_suspend () const
196
return my_can_suspend;
200
MockLogin1Manager :: can_hibernate () const
202
return my_can_hibernate;
209
MockLogin1Manager :: MockLogin1Manager (GMainLoop * loop,
210
GDBusConnection * conn):
211
MockObject (loop, conn, BUS_NAME, BUS_PATH),
212
my_skeleton (login1_manager_skeleton_new ()),
213
my_can_suspend ("yes"),
214
my_can_hibernate ("yes")
216
g_signal_connect (my_skeleton, "handle-can-suspend",
217
G_CALLBACK(handle_can_suspend), this);
218
g_signal_connect (my_skeleton, "handle-can-hibernate",
219
G_CALLBACK(handle_can_hibernate), this);
220
g_signal_connect (my_skeleton, "handle_reboot",
221
G_CALLBACK(handle_reboot), this);
222
g_signal_connect (my_skeleton, "handle-power-off",
223
G_CALLBACK(handle_power_off), this);
224
g_signal_connect (my_skeleton, "handle-suspend",
225
G_CALLBACK(handle_suspend), this);
226
g_signal_connect (my_skeleton, "handle-hibernate",
227
G_CALLBACK(handle_hibernate), this);
228
g_signal_connect (my_skeleton, "handle-list-sessions",
229
G_CALLBACK(handle_list_sessions), this);
231
set_skeleton (G_DBUS_INTERFACE_SKELETON(my_skeleton));
234
MockLogin1Manager :: ~MockLogin1Manager ()
236
for (auto seat : my_seats)
239
g_signal_handlers_disconnect_by_data (my_skeleton, this);
240
g_clear_object (&my_skeleton);