1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4 This file is part of systemd.
6 Copyright 2011 Lennart Poettering
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
25 #include <systemd/sd-login.h>
30 static void test_login(void) {
33 char *seat, *type, *class, *display, *remote_user, *remote_host;
38 char **seats, **sessions, **machines;
44 assert_se(sd_pid_get_session(0, &session) == 0);
45 printf("session = %s\n", session);
47 assert_se(sd_pid_get_owner_uid(0, &u2) == 0);
48 printf("user = %lu\n", (unsigned long) u2);
50 r = sd_uid_get_sessions(u2, false, &sessions);
52 assert_se(r == (int) strv_length(sessions));
53 assert_se(t = strv_join(sessions, ", "));
55 printf("sessions = %s\n", t);
58 assert_se(r == sd_uid_get_sessions(u2, false, NULL));
60 r = sd_uid_get_seats(u2, false, &seats);
62 assert_se(r == (int) strv_length(seats));
63 assert_se(t = strv_join(seats, ", "));
65 printf("seats = %s\n", t);
68 assert_se(r == sd_uid_get_seats(u2, false, NULL));
70 r = sd_session_is_active(session);
72 printf("active = %s\n", yes_no(r));
74 r = sd_session_is_remote(session);
76 printf("remote = %s\n", yes_no(r));
78 r = sd_session_get_state(session, &state);
80 printf("state = %s\n", state);
83 assert_se(sd_session_get_uid(session, &u) >= 0);
84 printf("uid = %lu\n", (unsigned long) u);
87 assert_se(sd_session_get_type(session, &type) >= 0);
88 printf("type = %s\n", type);
91 assert_se(sd_session_get_class(session, &class) >= 0);
92 printf("class = %s\n", class);
95 assert_se(sd_session_get_display(session, &display) >= 0);
96 printf("display = %s\n", display);
99 assert_se(sd_session_get_remote_user(session, &remote_user) >= 0);
100 printf("remote_user = %s\n", remote_user);
103 assert_se(sd_session_get_remote_host(session, &remote_host) >= 0);
104 printf("remote_host = %s\n", remote_host);
107 assert_se(sd_session_get_seat(session, &seat) >= 0);
108 printf("seat = %s\n", seat);
110 r = sd_seat_can_multi_session(seat);
112 printf("can do multi session = %s\n", yes_no(r));
114 r = sd_seat_can_tty(seat);
116 printf("can do tty = %s\n", yes_no(r));
118 r = sd_seat_can_graphical(seat);
120 printf("can do graphical = %s\n", yes_no(r));
122 assert_se(sd_uid_get_state(u, &state) >= 0);
123 printf("state = %s\n", state);
125 assert_se(sd_uid_is_on_seat(u, 0, seat) > 0);
127 k = sd_uid_is_on_seat(u, 1, seat);
129 assert_se(!!r == !!r);
131 assert_se(sd_seat_get_active(seat, &session2, &u2) >= 0);
132 printf("session2 = %s\n", session2);
133 printf("uid2 = %lu\n", (unsigned long) u2);
135 r = sd_seat_get_sessions(seat, &sessions, &uids, &n);
137 printf("n_sessions = %i\n", r);
138 assert_se(r == (int) strv_length(sessions));
139 assert_se(t = strv_join(sessions, ", "));
141 printf("sessions = %s\n", t);
144 for (k = 0; k < (int) n; k++)
145 printf(" %lu", (unsigned long) uids[k]);
149 assert_se(sd_seat_get_sessions(seat, NULL, NULL, NULL) == r);
156 r = sd_get_seats(&seats);
158 assert_se(r == (int) strv_length(seats));
159 assert_se(t = strv_join(seats, ", "));
161 printf("n_seats = %i\n", r);
162 printf("seats = %s\n", t);
165 assert_se(sd_get_seats(NULL) == r);
167 r = sd_seat_get_active(NULL, &t, NULL);
169 printf("active session on current seat = %s\n", t);
172 r = sd_get_sessions(&sessions);
174 assert_se(r == (int) strv_length(sessions));
175 assert_se(t = strv_join(sessions, ", "));
177 printf("n_sessions = %i\n", r);
178 printf("sessions = %s\n", t);
181 assert_se(sd_get_sessions(NULL) == r);
183 r = sd_get_uids(&uids);
187 for (k = 0; k < r; k++)
188 printf(" %lu", (unsigned long) uids[k]);
192 printf("n_uids = %i\n", r);
193 assert_se(sd_get_uids(NULL) == r);
195 r = sd_get_machine_names(&machines);
197 assert_se(r == (int) strv_length(machines));
198 assert_se(t = strv_join(machines, ", "));
200 printf("n_machines = %i\n", r);
201 printf("machines = %s\n", t);
204 r = sd_login_monitor_new("session", &m);
207 for (n = 0; n < 5; n++) {
211 assert_se((pollfd.fd = sd_login_monitor_get_fd(m)) >= 0);
212 assert_se((pollfd.events = sd_login_monitor_get_events(m)) >= 0);
214 assert_se(sd_login_monitor_get_timeout(m, &timeout) >= 0);
216 nw = now(CLOCK_MONOTONIC);
219 timeout == (uint64_t) -1 ? -1 :
220 timeout > nw ? (int) ((timeout - nw) / 1000) :
225 sd_login_monitor_flush(m);
229 sd_login_monitor_unref(m);
232 int main(int argc, char* argv[]) {
233 log_parse_environment();