chiark / gitweb /
logind: add support for automatic suspend/hibernate/shutdown on idle
[elogind.git] / src / login / test-login.c
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 /***
4   This file is part of systemd.
5
6   Copyright 2011 Lennart Poettering
7
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.
12
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.
17
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/>.
20 ***/
21
22 #include <sys/poll.h>
23 #include <string.h>
24
25 #include <systemd/sd-login.h>
26
27 #include "util.h"
28 #include "strv.h"
29
30 int main(int argc, char* argv[]) {
31         int r, k;
32         uid_t u, u2;
33         char *seat, *type, *class, *display;
34         char *session;
35         char *state;
36         char *session2;
37         char *t;
38         char **seats, **sessions;
39         uid_t *uids;
40         unsigned n;
41         struct pollfd pollfd;
42         sd_login_monitor *m;
43
44         assert_se(sd_pid_get_session(0, &session) == 0);
45         printf("session = %s\n", session);
46
47         assert_se(sd_pid_get_owner_uid(0, &u2) == 0);
48         printf("user = %lu\n", (unsigned long) u2);
49
50         r = sd_uid_get_sessions(u2, false, &sessions);
51         assert_se(r >= 0);
52         assert_se(r == (int) strv_length(sessions));
53         assert_se(t = strv_join(sessions, ", "));
54         strv_free(sessions);
55         printf("sessions = %s\n", t);
56         free(t);
57
58         assert_se(r == sd_uid_get_sessions(u2, false, NULL));
59
60         r = sd_uid_get_seats(u2, false, &seats);
61         assert_se(r >= 0);
62         assert_se(r == (int) strv_length(seats));
63         assert_se(t = strv_join(seats, ", "));
64         strv_free(seats);
65         printf("seats = %s\n", t);
66         free(t);
67
68         assert_se(r == sd_uid_get_seats(u2, false, NULL));
69
70         r = sd_session_is_active(session);
71         assert_se(r >= 0);
72         printf("active = %s\n", yes_no(r));
73
74         r = sd_session_get_state(session, &state);
75         assert_se(r >= 0);
76         printf("state = %s\n", state);
77         free(state);
78
79         assert_se(sd_session_get_uid(session, &u) >= 0);
80         printf("uid = %lu\n", (unsigned long) u);
81         assert_se(u == u2);
82
83         assert_se(sd_session_get_type(session, &type) >= 0);
84         printf("type = %s\n", type);
85         free(type);
86
87         assert_se(sd_session_get_class(session, &class) >= 0);
88         printf("class = %s\n", class);
89         free(class);
90
91         assert_se(sd_session_get_display(session, &display) >= 0);
92         printf("display = %s\n", display);
93         free(display);
94
95         assert_se(sd_session_get_seat(session, &seat) >= 0);
96         printf("seat = %s\n", seat);
97
98         r = sd_seat_can_multi_session(seat);
99         assert_se(r >= 0);
100         printf("can do multi session = %s\n", yes_no(r));
101
102         r = sd_seat_can_tty(seat);
103         assert_se(r >= 0);
104         printf("can do tty = %s\n", yes_no(r));
105
106         r = sd_seat_can_graphical(seat);
107         assert_se(r >= 0);
108         printf("can do graphical = %s\n", yes_no(r));
109
110         assert_se(sd_uid_get_state(u, &state) >= 0);
111         printf("state = %s\n", state);
112
113         assert_se(sd_uid_is_on_seat(u, 0, seat) > 0);
114
115         k = sd_uid_is_on_seat(u, 1, seat);
116         assert_se(k >= 0);
117         assert_se(!!r == !!r);
118
119         assert_se(sd_seat_get_active(seat, &session2, &u2) >= 0);
120         printf("session2 = %s\n", session2);
121         printf("uid2 = %lu\n", (unsigned long) u2);
122
123         r = sd_seat_get_sessions(seat, &sessions, &uids, &n);
124         assert_se(r >= 0);
125         printf("n_sessions = %i\n", r);
126         assert_se(r == (int) strv_length(sessions));
127         assert_se(t = strv_join(sessions, ", "));
128         strv_free(sessions);
129         printf("sessions = %s\n", t);
130         free(t);
131         printf("uids =");
132         for (k = 0; k < (int) n; k++)
133                 printf(" %lu", (unsigned long) uids[k]);
134         printf("\n");
135         free(uids);
136
137         assert_se(sd_seat_get_sessions(seat, NULL, NULL, NULL) == r);
138
139         free(session);
140         free(state);
141         free(session2);
142         free(seat);
143
144         r = sd_get_seats(&seats);
145         assert_se(r >= 0);
146         assert_se(r == (int) strv_length(seats));
147         assert_se(t = strv_join(seats, ", "));
148         strv_free(seats);
149         printf("n_seats = %i\n", r);
150         printf("seats = %s\n", t);
151         free(t);
152
153         assert_se(sd_get_seats(NULL) == r);
154
155         r = sd_seat_get_active(NULL, &t, NULL);
156         assert_se(r >= 0);
157         printf("active session on current seat = %s\n", t);
158         free(t);
159
160         r = sd_get_sessions(&sessions);
161         assert_se(r >= 0);
162         assert_se(r == (int) strv_length(sessions));
163         assert_se(t = strv_join(sessions, ", "));
164         strv_free(sessions);
165         printf("n_sessions = %i\n", r);
166         printf("sessions = %s\n", t);
167         free(t);
168
169         assert_se(sd_get_sessions(NULL) == r);
170
171         r = sd_get_uids(&uids);
172         assert_se(r >= 0);
173
174         printf("uids =");
175         for (k = 0; k < r; k++)
176                 printf(" %lu", (unsigned long) uids[k]);
177         printf("\n");
178         free(uids);
179
180         printf("n_uids = %i\n", r);
181         assert_se(sd_get_uids(NULL) == r);
182
183         r = sd_login_monitor_new("session", &m);
184         assert_se(r >= 0);
185
186         zero(pollfd);
187         pollfd.fd = sd_login_monitor_get_fd(m);
188         pollfd.events = POLLIN;
189
190         for (n = 0; n < 5; n++) {
191                 r = poll(&pollfd, 1, -1);
192                 assert_se(r >= 0);
193
194                 sd_login_monitor_flush(m);
195                 printf("Wake!\n");
196         }
197
198         sd_login_monitor_unref(m);
199
200         return 0;
201 }