]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/journal/test-journal.c
tests: use assert_se instead of assert
[thirdparty/systemd.git] / src / journal / test-journal.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 <fcntl.h>
23 #include <unistd.h>
24
25 #include "systemd/sd-journal.h"
26
27 #include "log.h"
28 #include "journal-file.h"
29 #include "journal-authenticate.h"
30 #include "journal-vacuum.h"
31
32 static bool arg_keep = false;
33
34 static void test_non_empty(void) {
35 dual_timestamp ts;
36 JournalFile *f;
37 struct iovec iovec;
38 static const char test[] = "TEST1=1", test2[] = "TEST2=2";
39 Object *o;
40 uint64_t p;
41 char t[] = "/tmp/journal-XXXXXX";
42
43 log_set_max_level(LOG_DEBUG);
44
45 assert_se(mkdtemp(t));
46 assert_se(chdir(t) >= 0);
47
48 assert_se(journal_file_open("test.journal", O_RDWR|O_CREAT, 0666, true, true, NULL, NULL, NULL, &f) == 0);
49
50 dual_timestamp_get(&ts);
51
52 iovec.iov_base = (void*) test;
53 iovec.iov_len = strlen(test);
54 assert_se(journal_file_append_entry(f, &ts, &iovec, 1, NULL, NULL, NULL) == 0);
55
56 iovec.iov_base = (void*) test2;
57 iovec.iov_len = strlen(test2);
58 assert_se(journal_file_append_entry(f, &ts, &iovec, 1, NULL, NULL, NULL) == 0);
59
60 iovec.iov_base = (void*) test;
61 iovec.iov_len = strlen(test);
62 assert_se(journal_file_append_entry(f, &ts, &iovec, 1, NULL, NULL, NULL) == 0);
63
64 #ifdef HAVE_GCRYPT
65 journal_file_append_tag(f);
66 #endif
67 journal_file_dump(f);
68
69 assert_se(journal_file_next_entry(f, NULL, 0, DIRECTION_DOWN, &o, &p) == 1);
70 assert_se(le64toh(o->entry.seqnum) == 1);
71
72 assert_se(journal_file_next_entry(f, o, p, DIRECTION_DOWN, &o, &p) == 1);
73 assert_se(le64toh(o->entry.seqnum) == 2);
74
75 assert_se(journal_file_next_entry(f, o, p, DIRECTION_DOWN, &o, &p) == 1);
76 assert_se(le64toh(o->entry.seqnum) == 3);
77
78 assert_se(journal_file_next_entry(f, o, p, DIRECTION_DOWN, &o, &p) == 0);
79
80 assert_se(journal_file_next_entry(f, NULL, 0, DIRECTION_DOWN, &o, &p) == 1);
81 assert_se(le64toh(o->entry.seqnum) == 1);
82
83 assert_se(journal_file_skip_entry(f, o, p, 2, &o, &p) == 1);
84 assert_se(le64toh(o->entry.seqnum) == 3);
85
86 assert_se(journal_file_skip_entry(f, o, p, -2, &o, &p) == 1);
87 assert_se(le64toh(o->entry.seqnum) == 1);
88
89 assert_se(journal_file_skip_entry(f, o, p, -2, &o, &p) == 1);
90 assert_se(le64toh(o->entry.seqnum) == 1);
91
92 assert_se(journal_file_find_data_object(f, test, strlen(test), NULL, &p) == 1);
93 assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_DOWN, &o, NULL) == 1);
94 assert_se(le64toh(o->entry.seqnum) == 1);
95
96 assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_UP, &o, NULL) == 1);
97 assert_se(le64toh(o->entry.seqnum) == 3);
98
99 assert_se(journal_file_find_data_object(f, test2, strlen(test2), NULL, &p) == 1);
100 assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_UP, &o, NULL) == 1);
101 assert_se(le64toh(o->entry.seqnum) == 2);
102
103 assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_DOWN, &o, NULL) == 1);
104 assert_se(le64toh(o->entry.seqnum) == 2);
105
106 assert_se(journal_file_find_data_object(f, "quux", 4, NULL, &p) == 0);
107
108 assert_se(journal_file_move_to_entry_by_seqnum(f, 1, DIRECTION_DOWN, &o, NULL) == 1);
109 assert_se(le64toh(o->entry.seqnum) == 1);
110
111 assert_se(journal_file_move_to_entry_by_seqnum(f, 3, DIRECTION_DOWN, &o, NULL) == 1);
112 assert_se(le64toh(o->entry.seqnum) == 3);
113
114 assert_se(journal_file_move_to_entry_by_seqnum(f, 2, DIRECTION_DOWN, &o, NULL) == 1);
115 assert_se(le64toh(o->entry.seqnum) == 2);
116
117 assert_se(journal_file_move_to_entry_by_seqnum(f, 10, DIRECTION_DOWN, &o, NULL) == 0);
118
119 journal_file_rotate(&f, true, true);
120 journal_file_rotate(&f, true, true);
121
122 journal_file_close(f);
123
124 log_info("Done...");
125
126 if (arg_keep)
127 log_info("Not removing %s", t);
128 else {
129 journal_directory_vacuum(".", 3000000, 0, NULL, true);
130
131 assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
132 }
133
134 puts("------------------------------------------------------------");
135 }
136
137 static void test_empty(void) {
138 JournalFile *f1, *f2, *f3, *f4;
139 char t[] = "/tmp/journal-XXXXXX";
140
141 log_set_max_level(LOG_DEBUG);
142
143 assert_se(mkdtemp(t));
144 assert_se(chdir(t) >= 0);
145
146 assert_se(journal_file_open("test.journal", O_RDWR|O_CREAT, 0666, false, false, NULL, NULL, NULL, &f1) == 0);
147
148 assert_se(journal_file_open("test-compress.journal", O_RDWR|O_CREAT, 0666, true, false, NULL, NULL, NULL, &f2) == 0);
149
150 assert_se(journal_file_open("test-seal.journal", O_RDWR|O_CREAT, 0666, false, true, NULL, NULL, NULL, &f3) == 0);
151
152 assert_se(journal_file_open("test-seal-compress.journal", O_RDWR|O_CREAT, 0666, true, true, NULL, NULL, NULL, &f4) == 0);
153
154 journal_file_print_header(f1);
155 puts("");
156 journal_file_print_header(f2);
157 puts("");
158 journal_file_print_header(f3);
159 puts("");
160 journal_file_print_header(f4);
161 puts("");
162
163 log_info("Done...");
164
165 if (arg_keep)
166 log_info("Not removing %s", t);
167 else {
168 journal_directory_vacuum(".", 3000000, 0, NULL, true);
169
170 assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
171 }
172
173 journal_file_close(f1);
174 journal_file_close(f2);
175 journal_file_close(f3);
176 journal_file_close(f4);
177 }
178
179 int main(int argc, char *argv[]) {
180 arg_keep = argc > 1;
181
182 /* journal_file_open requires a valid machine id */
183 if (access("/etc/machine-id", F_OK) != 0)
184 return EXIT_TEST_SKIP;
185
186 test_non_empty();
187 test_empty();
188
189 return 0;
190 }