]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/journal/test-journal.c
2 This file is part of systemd.
4 Copyright 2011 Lennart Poettering
6 systemd is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
11 systemd is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public License
17 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23 #include "journal-authenticate.h"
24 #include "journal-file.h"
25 #include "journal-vacuum.h"
29 static bool arg_keep
= false;
31 static void test_non_empty(void) {
35 static const char test
[] = "TEST1=1", test2
[] = "TEST2=2";
38 char t
[] = "/tmp/journal-XXXXXX";
40 log_set_max_level(LOG_DEBUG
);
42 assert_se(mkdtemp(t
));
43 assert_se(chdir(t
) >= 0);
45 assert_se(journal_file_open(-1, "test.journal", O_RDWR
|O_CREAT
, 0666, true, true, NULL
, NULL
, NULL
, NULL
, &f
) == 0);
47 dual_timestamp_get(&ts
);
49 iovec
.iov_base
= (void*) test
;
50 iovec
.iov_len
= strlen(test
);
51 assert_se(journal_file_append_entry(f
, &ts
, &iovec
, 1, NULL
, NULL
, NULL
) == 0);
53 iovec
.iov_base
= (void*) test2
;
54 iovec
.iov_len
= strlen(test2
);
55 assert_se(journal_file_append_entry(f
, &ts
, &iovec
, 1, NULL
, NULL
, NULL
) == 0);
57 iovec
.iov_base
= (void*) test
;
58 iovec
.iov_len
= strlen(test
);
59 assert_se(journal_file_append_entry(f
, &ts
, &iovec
, 1, NULL
, NULL
, NULL
) == 0);
62 journal_file_append_tag(f
);
66 assert_se(journal_file_next_entry(f
, 0, DIRECTION_DOWN
, &o
, &p
) == 1);
67 assert_se(le64toh(o
->entry
.seqnum
) == 1);
69 assert_se(journal_file_next_entry(f
, p
, DIRECTION_DOWN
, &o
, &p
) == 1);
70 assert_se(le64toh(o
->entry
.seqnum
) == 2);
72 assert_se(journal_file_next_entry(f
, p
, DIRECTION_DOWN
, &o
, &p
) == 1);
73 assert_se(le64toh(o
->entry
.seqnum
) == 3);
75 assert_se(journal_file_next_entry(f
, p
, DIRECTION_DOWN
, &o
, &p
) == 0);
77 assert_se(journal_file_next_entry(f
, 0, DIRECTION_DOWN
, &o
, &p
) == 1);
78 assert_se(le64toh(o
->entry
.seqnum
) == 1);
80 assert_se(journal_file_find_data_object(f
, test
, strlen(test
), NULL
, &p
) == 1);
81 assert_se(journal_file_next_entry_for_data(f
, NULL
, 0, p
, DIRECTION_DOWN
, &o
, NULL
) == 1);
82 assert_se(le64toh(o
->entry
.seqnum
) == 1);
84 assert_se(journal_file_next_entry_for_data(f
, NULL
, 0, p
, DIRECTION_UP
, &o
, NULL
) == 1);
85 assert_se(le64toh(o
->entry
.seqnum
) == 3);
87 assert_se(journal_file_find_data_object(f
, test2
, strlen(test2
), NULL
, &p
) == 1);
88 assert_se(journal_file_next_entry_for_data(f
, NULL
, 0, p
, DIRECTION_UP
, &o
, NULL
) == 1);
89 assert_se(le64toh(o
->entry
.seqnum
) == 2);
91 assert_se(journal_file_next_entry_for_data(f
, NULL
, 0, p
, DIRECTION_DOWN
, &o
, NULL
) == 1);
92 assert_se(le64toh(o
->entry
.seqnum
) == 2);
94 assert_se(journal_file_find_data_object(f
, "quux", 4, NULL
, &p
) == 0);
96 assert_se(journal_file_move_to_entry_by_seqnum(f
, 1, DIRECTION_DOWN
, &o
, NULL
) == 1);
97 assert_se(le64toh(o
->entry
.seqnum
) == 1);
99 assert_se(journal_file_move_to_entry_by_seqnum(f
, 3, DIRECTION_DOWN
, &o
, NULL
) == 1);
100 assert_se(le64toh(o
->entry
.seqnum
) == 3);
102 assert_se(journal_file_move_to_entry_by_seqnum(f
, 2, DIRECTION_DOWN
, &o
, NULL
) == 1);
103 assert_se(le64toh(o
->entry
.seqnum
) == 2);
105 assert_se(journal_file_move_to_entry_by_seqnum(f
, 10, DIRECTION_DOWN
, &o
, NULL
) == 0);
107 journal_file_rotate(&f
, true, true, NULL
);
108 journal_file_rotate(&f
, true, true, NULL
);
110 (void) journal_file_close(f
);
115 log_info("Not removing %s", t
);
117 journal_directory_vacuum(".", 3000000, 0, 0, NULL
, true);
119 assert_se(rm_rf(t
, REMOVE_ROOT
|REMOVE_PHYSICAL
) >= 0);
122 puts("------------------------------------------------------------");
125 static void test_empty(void) {
126 JournalFile
*f1
, *f2
, *f3
, *f4
;
127 char t
[] = "/tmp/journal-XXXXXX";
129 log_set_max_level(LOG_DEBUG
);
131 assert_se(mkdtemp(t
));
132 assert_se(chdir(t
) >= 0);
134 assert_se(journal_file_open(-1, "test.journal", O_RDWR
|O_CREAT
, 0666, false, false, NULL
, NULL
, NULL
, NULL
, &f1
) == 0);
136 assert_se(journal_file_open(-1, "test-compress.journal", O_RDWR
|O_CREAT
, 0666, true, false, NULL
, NULL
, NULL
, NULL
, &f2
) == 0);
138 assert_se(journal_file_open(-1, "test-seal.journal", O_RDWR
|O_CREAT
, 0666, false, true, NULL
, NULL
, NULL
, NULL
, &f3
) == 0);
140 assert_se(journal_file_open(-1, "test-seal-compress.journal", O_RDWR
|O_CREAT
, 0666, true, true, NULL
, NULL
, NULL
, NULL
, &f4
) == 0);
142 journal_file_print_header(f1
);
144 journal_file_print_header(f2
);
146 journal_file_print_header(f3
);
148 journal_file_print_header(f4
);
154 log_info("Not removing %s", t
);
156 journal_directory_vacuum(".", 3000000, 0, 0, NULL
, true);
158 assert_se(rm_rf(t
, REMOVE_ROOT
|REMOVE_PHYSICAL
) >= 0);
161 (void) journal_file_close(f1
);
162 (void) journal_file_close(f2
);
163 (void) journal_file_close(f3
);
164 (void) journal_file_close(f4
);
167 int main(int argc
, char *argv
[]) {
170 /* journal_file_open requires a valid machine id */
171 if (access("/etc/machine-id", F_OK
) != 0)
172 return EXIT_TEST_SKIP
;