]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/test-journal.c
journald: do not free space when disk space runs low
[thirdparty/systemd.git] / src / journal / test-journal.c
CommitLineData
87d2c1ff
LP
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
5430f7f2
LP
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
87d2c1ff
LP
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
5430f7f2 16 Lesser General Public License for more details.
87d2c1ff 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
87d2c1ff
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
22#include <fcntl.h>
0ac38b70 23#include <unistd.h>
87d2c1ff 24
81527be1
LP
25#include <systemd/sd-journal.h>
26
87d2c1ff 27#include "log.h"
0284adc6
LP
28#include "journal-file.h"
29#include "journal-authenticate.h"
30#include "journal-vacuum.h"
87d2c1ff 31
6eb7a9a0
ZJS
32static bool arg_keep = false;
33
34static void test_non_empty(void) {
87d2c1ff
LP
35 dual_timestamp ts;
36 JournalFile *f;
37 struct iovec iovec;
3c1668da 38 static const char test[] = "TEST1=1", test2[] = "TEST2=2";
87d2c1ff 39 Object *o;
de190aef 40 uint64_t p;
95ea1b90 41 char t[] = "/tmp/journal-XXXXXX";
87d2c1ff
LP
42
43 log_set_max_level(LOG_DEBUG);
44
95ea1b90
LP
45 assert_se(mkdtemp(t));
46 assert_se(chdir(t) >= 0);
0ac38b70 47
16e9f408 48 assert_se(journal_file_open("test.journal", O_RDWR|O_CREAT, 0666, true, true, NULL, NULL, NULL, &f) == 0);
87d2c1ff
LP
49
50 dual_timestamp_get(&ts);
51
52 iovec.iov_base = (void*) test;
53 iovec.iov_len = strlen(test);
c2373f84 54 assert_se(journal_file_append_entry(f, &ts, &iovec, 1, NULL, NULL, NULL) == 0);
87d2c1ff
LP
55
56 iovec.iov_base = (void*) test2;
57 iovec.iov_len = strlen(test2);
c2373f84 58 assert_se(journal_file_append_entry(f, &ts, &iovec, 1, NULL, NULL, NULL) == 0);
87d2c1ff
LP
59
60 iovec.iov_base = (void*) test;
61 iovec.iov_len = strlen(test);
c2373f84 62 assert_se(journal_file_append_entry(f, &ts, &iovec, 1, NULL, NULL, NULL) == 0);
87d2c1ff 63
feb12d3e 64#ifdef HAVE_GCRYPT
b0af6f41 65 journal_file_append_tag(f);
feb12d3e 66#endif
87d2c1ff
LP
67 journal_file_dump(f);
68
de190aef 69 assert(journal_file_next_entry(f, NULL, 0, DIRECTION_DOWN, &o, &p) == 1);
87d2c1ff
LP
70 assert(le64toh(o->entry.seqnum) == 1);
71
de190aef 72 assert(journal_file_next_entry(f, o, p, DIRECTION_DOWN, &o, &p) == 1);
87d2c1ff
LP
73 assert(le64toh(o->entry.seqnum) == 2);
74
de190aef 75 assert(journal_file_next_entry(f, o, p, DIRECTION_DOWN, &o, &p) == 1);
87d2c1ff
LP
76 assert(le64toh(o->entry.seqnum) == 3);
77
de190aef 78 assert(journal_file_next_entry(f, o, p, DIRECTION_DOWN, &o, &p) == 0);
87d2c1ff 79
de190aef 80 assert(journal_file_next_entry(f, NULL, 0, DIRECTION_DOWN, &o, &p) == 1);
87d2c1ff
LP
81 assert(le64toh(o->entry.seqnum) == 1);
82
de190aef 83 assert(journal_file_skip_entry(f, o, p, 2, &o, &p) == 1);
87d2c1ff
LP
84 assert(le64toh(o->entry.seqnum) == 3);
85
de190aef
LP
86 assert(journal_file_skip_entry(f, o, p, -2, &o, &p) == 1);
87 assert(le64toh(o->entry.seqnum) == 1);
88
89 assert(journal_file_skip_entry(f, o, p, -2, &o, &p) == 1);
90 assert(le64toh(o->entry.seqnum) == 1);
91
92 assert(journal_file_find_data_object(f, test, strlen(test), NULL, &p) == 1);
93 assert(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_DOWN, &o, NULL) == 1);
94 assert(le64toh(o->entry.seqnum) == 1);
95
96 assert(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_UP, &o, NULL) == 1);
97 assert(le64toh(o->entry.seqnum) == 3);
98
99 assert(journal_file_find_data_object(f, test2, strlen(test2), NULL, &p) == 1);
100 assert(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_UP, &o, NULL) == 1);
87d2c1ff
LP
101 assert(le64toh(o->entry.seqnum) == 2);
102
de190aef 103 assert(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_DOWN, &o, NULL) == 1);
87d2c1ff
LP
104 assert(le64toh(o->entry.seqnum) == 2);
105
de190aef 106 assert(journal_file_find_data_object(f, "quux", 4, NULL, &p) == 0);
87d2c1ff 107
de190aef 108 assert(journal_file_move_to_entry_by_seqnum(f, 1, DIRECTION_DOWN, &o, NULL) == 1);
87d2c1ff
LP
109 assert(le64toh(o->entry.seqnum) == 1);
110
de190aef 111 assert(journal_file_move_to_entry_by_seqnum(f, 3, DIRECTION_DOWN, &o, NULL) == 1);
87d2c1ff
LP
112 assert(le64toh(o->entry.seqnum) == 3);
113
de190aef 114 assert(journal_file_move_to_entry_by_seqnum(f, 2, DIRECTION_DOWN, &o, NULL) == 1);
87d2c1ff
LP
115 assert(le64toh(o->entry.seqnum) == 2);
116
de190aef 117 assert(journal_file_move_to_entry_by_seqnum(f, 10, DIRECTION_DOWN, &o, NULL) == 0);
87d2c1ff 118
7560fffc
LP
119 journal_file_rotate(&f, true, true);
120 journal_file_rotate(&f, true, true);
0ac38b70 121
87d2c1ff
LP
122 journal_file_close(f);
123
6eb7a9a0
ZJS
124 log_info("Done...");
125
126 if (arg_keep)
127 log_info("Not removing %s", t);
128 else {
348ced90 129 journal_directory_vacuum(".", 3000000, 0, NULL);
6eb7a9a0
ZJS
130
131 assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
132 }
133
134 puts("------------------------------------------------------------");
135}
136
137static void test_empty(void) {
138 JournalFile *f1, *f2, *f3, *f4;
139 char t[] = "/tmp/journal-XXXXXX";
140
141 log_set_max_level(LOG_DEBUG);
0ac38b70 142
6eb7a9a0
ZJS
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 {
348ced90 168 journal_directory_vacuum(".", 3000000, 0, NULL);
6eb7a9a0
ZJS
169
170 assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
171 }
510b857f
LP
172
173 journal_file_close(f1);
174 journal_file_close(f2);
175 journal_file_close(f3);
176 journal_file_close(f4);
6eb7a9a0
ZJS
177}
178
179int main(int argc, char *argv[]) {
180 arg_keep = argc > 1;
6ad1d1c3 181
143bfdaf
HHPF
182 /* journal_file_open requires a valid machine id */
183 if (access("/etc/machine-id", F_OK) != 0)
184 return EXIT_TEST_SKIP;
185
6eb7a9a0
ZJS
186 test_non_empty();
187 test_empty();
95ea1b90 188
87d2c1ff
LP
189 return 0;
190}