]>
git.proxmox.com Git - systemd.git/blob - src/journal/test-journal.c
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4 This file is part of systemd.
6 Copyright 2011 Lennart Poettering
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.
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.
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/>.
27 #include "journal-file.h"
28 #include "journal-authenticate.h"
29 #include "journal-vacuum.h"
31 static bool arg_keep
= false;
33 static void test_non_empty(void) {
37 static const char test
[] = "TEST1=1", test2
[] = "TEST2=2";
40 char t
[] = "/tmp/journal-XXXXXX";
42 log_set_max_level(LOG_DEBUG
);
44 assert_se(mkdtemp(t
));
45 assert_se(chdir(t
) >= 0);
47 assert_se(journal_file_open("test.journal", O_RDWR
|O_CREAT
, 0666, true, true, NULL
, NULL
, NULL
, &f
) == 0);
49 dual_timestamp_get(&ts
);
51 iovec
.iov_base
= (void*) test
;
52 iovec
.iov_len
= strlen(test
);
53 assert_se(journal_file_append_entry(f
, &ts
, &iovec
, 1, NULL
, NULL
, NULL
) == 0);
55 iovec
.iov_base
= (void*) test2
;
56 iovec
.iov_len
= strlen(test2
);
57 assert_se(journal_file_append_entry(f
, &ts
, &iovec
, 1, NULL
, NULL
, NULL
) == 0);
59 iovec
.iov_base
= (void*) test
;
60 iovec
.iov_len
= strlen(test
);
61 assert_se(journal_file_append_entry(f
, &ts
, &iovec
, 1, NULL
, NULL
, NULL
) == 0);
64 journal_file_append_tag(f
);
68 assert_se(journal_file_next_entry(f
, 0, DIRECTION_DOWN
, &o
, &p
) == 1);
69 assert_se(le64toh(o
->entry
.seqnum
) == 1);
71 assert_se(journal_file_next_entry(f
, p
, DIRECTION_DOWN
, &o
, &p
) == 1);
72 assert_se(le64toh(o
->entry
.seqnum
) == 2);
74 assert_se(journal_file_next_entry(f
, p
, DIRECTION_DOWN
, &o
, &p
) == 1);
75 assert_se(le64toh(o
->entry
.seqnum
) == 3);
77 assert_se(journal_file_next_entry(f
, p
, DIRECTION_DOWN
, &o
, &p
) == 0);
79 assert_se(journal_file_next_entry(f
, 0, DIRECTION_DOWN
, &o
, &p
) == 1);
80 assert_se(le64toh(o
->entry
.seqnum
) == 1);
82 assert_se(journal_file_find_data_object(f
, test
, strlen(test
), NULL
, &p
) == 1);
83 assert_se(journal_file_next_entry_for_data(f
, NULL
, 0, p
, DIRECTION_DOWN
, &o
, NULL
) == 1);
84 assert_se(le64toh(o
->entry
.seqnum
) == 1);
86 assert_se(journal_file_next_entry_for_data(f
, NULL
, 0, p
, DIRECTION_UP
, &o
, NULL
) == 1);
87 assert_se(le64toh(o
->entry
.seqnum
) == 3);
89 assert_se(journal_file_find_data_object(f
, test2
, strlen(test2
), NULL
, &p
) == 1);
90 assert_se(journal_file_next_entry_for_data(f
, NULL
, 0, p
, DIRECTION_UP
, &o
, NULL
) == 1);
91 assert_se(le64toh(o
->entry
.seqnum
) == 2);
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
) == 2);
96 assert_se(journal_file_find_data_object(f
, "quux", 4, NULL
, &p
) == 0);
98 assert_se(journal_file_move_to_entry_by_seqnum(f
, 1, DIRECTION_DOWN
, &o
, NULL
) == 1);
99 assert_se(le64toh(o
->entry
.seqnum
) == 1);
101 assert_se(journal_file_move_to_entry_by_seqnum(f
, 3, DIRECTION_DOWN
, &o
, NULL
) == 1);
102 assert_se(le64toh(o
->entry
.seqnum
) == 3);
104 assert_se(journal_file_move_to_entry_by_seqnum(f
, 2, DIRECTION_DOWN
, &o
, NULL
) == 1);
105 assert_se(le64toh(o
->entry
.seqnum
) == 2);
107 assert_se(journal_file_move_to_entry_by_seqnum(f
, 10, DIRECTION_DOWN
, &o
, NULL
) == 0);
109 journal_file_rotate(&f
, true, true);
110 journal_file_rotate(&f
, true, true);
112 journal_file_close(f
);
117 log_info("Not removing %s", t
);
119 journal_directory_vacuum(".", 3000000, 0, 0, NULL
, true);
121 assert_se(rm_rf(t
, REMOVE_ROOT
|REMOVE_PHYSICAL
) >= 0);
124 puts("------------------------------------------------------------");
127 static void test_empty(void) {
128 JournalFile
*f1
, *f2
, *f3
, *f4
;
129 char t
[] = "/tmp/journal-XXXXXX";
131 log_set_max_level(LOG_DEBUG
);
133 assert_se(mkdtemp(t
));
134 assert_se(chdir(t
) >= 0);
136 assert_se(journal_file_open("test.journal", O_RDWR
|O_CREAT
, 0666, false, false, NULL
, NULL
, NULL
, &f1
) == 0);
138 assert_se(journal_file_open("test-compress.journal", O_RDWR
|O_CREAT
, 0666, true, false, NULL
, NULL
, NULL
, &f2
) == 0);
140 assert_se(journal_file_open("test-seal.journal", O_RDWR
|O_CREAT
, 0666, false, true, NULL
, NULL
, NULL
, &f3
) == 0);
142 assert_se(journal_file_open("test-seal-compress.journal", O_RDWR
|O_CREAT
, 0666, true, true, NULL
, NULL
, NULL
, &f4
) == 0);
144 journal_file_print_header(f1
);
146 journal_file_print_header(f2
);
148 journal_file_print_header(f3
);
150 journal_file_print_header(f4
);
156 log_info("Not removing %s", t
);
158 journal_directory_vacuum(".", 3000000, 0, 0, NULL
, true);
160 assert_se(rm_rf(t
, REMOVE_ROOT
|REMOVE_PHYSICAL
) >= 0);
163 journal_file_close(f1
);
164 journal_file_close(f2
);
165 journal_file_close(f3
);
166 journal_file_close(f4
);
169 int main(int argc
, char *argv
[]) {
172 /* journal_file_open requires a valid machine id */
173 if (access("/etc/machine-id", F_OK
) != 0)
174 return EXIT_TEST_SKIP
;