]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/test-journal.c
journal: use a macro to check for file header flags
[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
LP
31
32int main(int argc, char *argv[]) {
33 dual_timestamp ts;
34 JournalFile *f;
35 struct iovec iovec;
36 static const char test[] = "test", test2[] = "test2";
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
16e9f408 46 assert_se(journal_file_open("test.journal", O_RDWR|O_CREAT, 0666, true, true, 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
b0af6f41 62 journal_file_append_tag(f);
87d2c1ff
LP
63 journal_file_dump(f);
64
de190aef 65 assert(journal_file_next_entry(f, NULL, 0, DIRECTION_DOWN, &o, &p) == 1);
87d2c1ff
LP
66 assert(le64toh(o->entry.seqnum) == 1);
67
de190aef 68 assert(journal_file_next_entry(f, o, p, DIRECTION_DOWN, &o, &p) == 1);
87d2c1ff
LP
69 assert(le64toh(o->entry.seqnum) == 2);
70
de190aef 71 assert(journal_file_next_entry(f, o, p, DIRECTION_DOWN, &o, &p) == 1);
87d2c1ff
LP
72 assert(le64toh(o->entry.seqnum) == 3);
73
de190aef 74 assert(journal_file_next_entry(f, o, p, DIRECTION_DOWN, &o, &p) == 0);
87d2c1ff 75
de190aef 76 assert(journal_file_next_entry(f, NULL, 0, DIRECTION_DOWN, &o, &p) == 1);
87d2c1ff
LP
77 assert(le64toh(o->entry.seqnum) == 1);
78
de190aef 79 assert(journal_file_skip_entry(f, o, p, 2, &o, &p) == 1);
87d2c1ff
LP
80 assert(le64toh(o->entry.seqnum) == 3);
81
de190aef
LP
82 assert(journal_file_skip_entry(f, o, p, -2, &o, &p) == 1);
83 assert(le64toh(o->entry.seqnum) == 1);
84
85 assert(journal_file_skip_entry(f, o, p, -2, &o, &p) == 1);
86 assert(le64toh(o->entry.seqnum) == 1);
87
88 assert(journal_file_find_data_object(f, test, strlen(test), NULL, &p) == 1);
89 assert(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_DOWN, &o, NULL) == 1);
90 assert(le64toh(o->entry.seqnum) == 1);
91
92 assert(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_UP, &o, NULL) == 1);
93 assert(le64toh(o->entry.seqnum) == 3);
94
95 assert(journal_file_find_data_object(f, test2, strlen(test2), NULL, &p) == 1);
96 assert(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_UP, &o, NULL) == 1);
87d2c1ff
LP
97 assert(le64toh(o->entry.seqnum) == 2);
98
de190aef 99 assert(journal_file_next_entry_for_data(f, NULL, 0, p, DIRECTION_DOWN, &o, NULL) == 1);
87d2c1ff
LP
100 assert(le64toh(o->entry.seqnum) == 2);
101
de190aef 102 assert(journal_file_find_data_object(f, "quux", 4, NULL, &p) == 0);
87d2c1ff 103
de190aef 104 assert(journal_file_move_to_entry_by_seqnum(f, 1, DIRECTION_DOWN, &o, NULL) == 1);
87d2c1ff
LP
105 assert(le64toh(o->entry.seqnum) == 1);
106
de190aef 107 assert(journal_file_move_to_entry_by_seqnum(f, 3, DIRECTION_DOWN, &o, NULL) == 1);
87d2c1ff
LP
108 assert(le64toh(o->entry.seqnum) == 3);
109
de190aef 110 assert(journal_file_move_to_entry_by_seqnum(f, 2, DIRECTION_DOWN, &o, NULL) == 1);
87d2c1ff
LP
111 assert(le64toh(o->entry.seqnum) == 2);
112
de190aef 113 assert(journal_file_move_to_entry_by_seqnum(f, 10, DIRECTION_DOWN, &o, NULL) == 0);
87d2c1ff 114
7560fffc
LP
115 journal_file_rotate(&f, true, true);
116 journal_file_rotate(&f, true, true);
0ac38b70 117
87d2c1ff
LP
118 journal_file_close(f);
119
0ac38b70
LP
120 journal_directory_vacuum(".", 3000000, 0);
121
6ad1d1c3
LP
122 log_error("Exiting...");
123
ab060556 124 assert_se(rm_rf_dangerous(t, false, true, false) >= 0);
95ea1b90 125
87d2c1ff
LP
126 return 0;
127}