]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/test-journal.c
Add SPDX license identifiers to source files under the LGPL
[thirdparty/systemd.git] / src / journal / test-journal.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
87d2c1ff
LP
2/***
3 This file is part of systemd.
4
5 Copyright 2011 Lennart Poettering
6
7 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
8 under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 2.1 of the License, or
87d2c1ff
LP
10 (at your option) any later version.
11
12 systemd is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 15 Lesser General Public License for more details.
87d2c1ff 16
5430f7f2 17 You should have received a copy of the GNU Lesser General Public License
87d2c1ff
LP
18 along with systemd; If not, see <http://www.gnu.org/licenses/>.
19***/
20
21#include <fcntl.h>
0ac38b70 22#include <unistd.h>
87d2c1ff 23
0284adc6 24#include "journal-authenticate.h"
cf0fbc49 25#include "journal-file.h"
0284adc6 26#include "journal-vacuum.h"
cf0fbc49
TA
27#include "log.h"
28#include "rm-rf.h"
87d2c1ff 29
6eb7a9a0
ZJS
30static bool arg_keep = false;
31
32static void test_non_empty(void) {
87d2c1ff
LP
33 dual_timestamp ts;
34 JournalFile *f;
35 struct iovec iovec;
3c1668da 36 static const char test[] = "TEST1=1", test2[] = "TEST2=2";
87d2c1ff 37 Object *o;
de190aef 38 uint64_t p;
95ea1b90 39 char t[] = "/tmp/journal-XXXXXX";
87d2c1ff
LP
40
41 log_set_max_level(LOG_DEBUG);
42
95ea1b90
LP
43 assert_se(mkdtemp(t));
44 assert_se(chdir(t) >= 0);
0ac38b70 45
5d1ce257 46 assert_se(journal_file_open(-1, "test.journal", O_RDWR|O_CREAT, 0666, true, true, NULL, NULL, NULL, NULL, &f) == 0);
87d2c1ff
LP
47
48 dual_timestamp_get(&ts);
49
50 iovec.iov_base = (void*) test;
51 iovec.iov_len = strlen(test);
c2373f84 52 assert_se(journal_file_append_entry(f, &ts, &iovec, 1, NULL, NULL, NULL) == 0);
87d2c1ff
LP
53
54 iovec.iov_base = (void*) test2;
55 iovec.iov_len = strlen(test2);
c2373f84 56 assert_se(journal_file_append_entry(f, &ts, &iovec, 1, NULL, NULL, NULL) == 0);
87d2c1ff
LP
57
58 iovec.iov_base = (void*) test;
59 iovec.iov_len = strlen(test);
c2373f84 60 assert_se(journal_file_append_entry(f, &ts, &iovec, 1, NULL, NULL, NULL) == 0);
87d2c1ff 61
349cc4a5 62#if HAVE_GCRYPT
b0af6f41 63 journal_file_append_tag(f);
feb12d3e 64#endif
87d2c1ff
LP
65 journal_file_dump(f);
66
f534928a 67 assert_se(journal_file_next_entry(f, 0, DIRECTION_DOWN, &o, &p) == 1);
787784c4 68 assert_se(le64toh(o->entry.seqnum) == 1);
87d2c1ff 69
f534928a 70 assert_se(journal_file_next_entry(f, p, DIRECTION_DOWN, &o, &p) == 1);
787784c4 71 assert_se(le64toh(o->entry.seqnum) == 2);
87d2c1ff 72
f534928a 73 assert_se(journal_file_next_entry(f, p, DIRECTION_DOWN, &o, &p) == 1);
787784c4 74 assert_se(le64toh(o->entry.seqnum) == 3);
87d2c1ff 75
f534928a 76 assert_se(journal_file_next_entry(f, p, DIRECTION_DOWN, &o, &p) == 0);
87d2c1ff 77
f534928a 78 assert_se(journal_file_next_entry(f, 0, DIRECTION_DOWN, &o, &p) == 1);
787784c4 79 assert_se(le64toh(o->entry.seqnum) == 1);
87d2c1ff 80
787784c4
RC
81 assert_se(journal_file_find_data_object(f, test, strlen(test), NULL, &p) == 1);
82 assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_DOWN, &o, NULL) == 1);
83 assert_se(le64toh(o->entry.seqnum) == 1);
de190aef 84
787784c4
RC
85 assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_UP, &o, NULL) == 1);
86 assert_se(le64toh(o->entry.seqnum) == 3);
de190aef 87
787784c4
RC
88 assert_se(journal_file_find_data_object(f, test2, strlen(test2), NULL, &p) == 1);
89 assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_UP, &o, NULL) == 1);
90 assert_se(le64toh(o->entry.seqnum) == 2);
87d2c1ff 91
787784c4
RC
92 assert_se(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_DOWN, &o, NULL) == 1);
93 assert_se(le64toh(o->entry.seqnum) == 2);
87d2c1ff 94
787784c4 95 assert_se(journal_file_find_data_object(f, "quux", 4, NULL, &p) == 0);
87d2c1ff 96
787784c4
RC
97 assert_se(journal_file_move_to_entry_by_seqnum(f, 1, DIRECTION_DOWN, &o, NULL) == 1);
98 assert_se(le64toh(o->entry.seqnum) == 1);
87d2c1ff 99
787784c4
RC
100 assert_se(journal_file_move_to_entry_by_seqnum(f, 3, DIRECTION_DOWN, &o, NULL) == 1);
101 assert_se(le64toh(o->entry.seqnum) == 3);
87d2c1ff 102
787784c4
RC
103 assert_se(journal_file_move_to_entry_by_seqnum(f, 2, DIRECTION_DOWN, &o, NULL) == 1);
104 assert_se(le64toh(o->entry.seqnum) == 2);
87d2c1ff 105
787784c4 106 assert_se(journal_file_move_to_entry_by_seqnum(f, 10, DIRECTION_DOWN, &o, NULL) == 0);
87d2c1ff 107
b58c888f
VC
108 journal_file_rotate(&f, true, true, NULL);
109 journal_file_rotate(&f, true, true, NULL);
0ac38b70 110
69a3a6fd 111 (void) journal_file_close(f);
87d2c1ff 112
6eb7a9a0
ZJS
113 log_info("Done...");
114
115 if (arg_keep)
116 log_info("Not removing %s", t);
117 else {
8580d1f7 118 journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
6eb7a9a0 119
c6878637 120 assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
6eb7a9a0
ZJS
121 }
122
123 puts("------------------------------------------------------------");
124}
125
126static void test_empty(void) {
127 JournalFile *f1, *f2, *f3, *f4;
128 char t[] = "/tmp/journal-XXXXXX";
129
130 log_set_max_level(LOG_DEBUG);
0ac38b70 131
6eb7a9a0
ZJS
132 assert_se(mkdtemp(t));
133 assert_se(chdir(t) >= 0);
134
5d1ce257 135 assert_se(journal_file_open(-1, "test.journal", O_RDWR|O_CREAT, 0666, false, false, NULL, NULL, NULL, NULL, &f1) == 0);
6eb7a9a0 136
5d1ce257 137 assert_se(journal_file_open(-1, "test-compress.journal", O_RDWR|O_CREAT, 0666, true, false, NULL, NULL, NULL, NULL, &f2) == 0);
6eb7a9a0 138
5d1ce257 139 assert_se(journal_file_open(-1, "test-seal.journal", O_RDWR|O_CREAT, 0666, false, true, NULL, NULL, NULL, NULL, &f3) == 0);
6eb7a9a0 140
5d1ce257 141 assert_se(journal_file_open(-1, "test-seal-compress.journal", O_RDWR|O_CREAT, 0666, true, true, NULL, NULL, NULL, NULL, &f4) == 0);
6eb7a9a0
ZJS
142
143 journal_file_print_header(f1);
144 puts("");
145 journal_file_print_header(f2);
146 puts("");
147 journal_file_print_header(f3);
148 puts("");
149 journal_file_print_header(f4);
150 puts("");
151
152 log_info("Done...");
153
154 if (arg_keep)
155 log_info("Not removing %s", t);
156 else {
8580d1f7 157 journal_directory_vacuum(".", 3000000, 0, 0, NULL, true);
6eb7a9a0 158
c6878637 159 assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
6eb7a9a0 160 }
510b857f 161
69a3a6fd
VC
162 (void) journal_file_close(f1);
163 (void) journal_file_close(f2);
164 (void) journal_file_close(f3);
165 (void) journal_file_close(f4);
6eb7a9a0
ZJS
166}
167
168int main(int argc, char *argv[]) {
169 arg_keep = argc > 1;
6ad1d1c3 170
143bfdaf
HHPF
171 /* journal_file_open requires a valid machine id */
172 if (access("/etc/machine-id", F_OK) != 0)
173 return EXIT_TEST_SKIP;
174
6eb7a9a0
ZJS
175 test_non_empty();
176 test_empty();
95ea1b90 177
87d2c1ff
LP
178 return 0;
179}