chiark / gitweb /
importd: add new bus calls for importing local tar and raw images
[elogind.git] / src / test / test-ring.c
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 /***
4   This file is part of systemd.
5
6   Copyright 2014 David Herrmann <dh.herrmann@gmail.com>
7
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.
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
16   Lesser General Public License for more details.
17
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/>.
20 ***/
21
22 #include <string.h>
23
24 #include "def.h"
25 #include "ring.h"
26
27 static void test_ring(void) {
28         static const char buf[8192];
29         Ring r;
30         size_t l;
31         struct iovec vec[2];
32         int s;
33
34         zero(r);
35
36         l = ring_peek(&r, vec);
37         assert_se(l == 0);
38
39         s = ring_push(&r, buf, 2048);
40         assert_se(!s);
41         assert_se(ring_get_size(&r) == 2048);
42
43         l = ring_peek(&r, vec);
44         assert_se(l == 1);
45         assert_se(vec[0].iov_len == 2048);
46         assert_se(!memcmp(vec[0].iov_base, buf, vec[0].iov_len));
47         assert_se(ring_get_size(&r) == 2048);
48
49         ring_pull(&r, 2048);
50         assert_se(ring_get_size(&r) == 0);
51
52         l = ring_peek(&r, vec);
53         assert_se(l == 0);
54         assert_se(ring_get_size(&r) == 0);
55
56         s = ring_push(&r, buf, 2048);
57         assert_se(!s);
58         assert_se(ring_get_size(&r) == 2048);
59
60         l = ring_peek(&r, vec);
61         assert_se(l == 1);
62         assert_se(vec[0].iov_len == 2048);
63         assert_se(!memcmp(vec[0].iov_base, buf, vec[0].iov_len));
64         assert_se(ring_get_size(&r) == 2048);
65
66         s = ring_push(&r, buf, 1);
67         assert_se(!s);
68         assert_se(ring_get_size(&r) == 2049);
69
70         l = ring_peek(&r, vec);
71         assert_se(l == 2);
72         assert_se(vec[0].iov_len == 2048);
73         assert_se(vec[1].iov_len == 1);
74         assert_se(!memcmp(vec[0].iov_base, buf, vec[0].iov_len));
75         assert_se(!memcmp(vec[1].iov_base, buf, vec[1].iov_len));
76         assert_se(ring_get_size(&r) == 2049);
77
78         ring_pull(&r, 2048);
79         assert_se(ring_get_size(&r) == 1);
80
81         l = ring_peek(&r, vec);
82         assert_se(l == 1);
83         assert_se(vec[0].iov_len == 1);
84         assert_se(!memcmp(vec[0].iov_base, buf, vec[0].iov_len));
85         assert_se(ring_get_size(&r) == 1);
86
87         ring_pull(&r, 1);
88         assert_se(ring_get_size(&r) == 0);
89
90         s = ring_push(&r, buf, 2048);
91         assert_se(!s);
92         assert_se(ring_get_size(&r) == 2048);
93
94         s = ring_push(&r, buf, 2049);
95         assert_se(!s);
96         assert_se(ring_get_size(&r) == 4097);
97
98         l = ring_peek(&r, vec);
99         assert_se(l == 1);
100         assert_se(vec[0].iov_len == 4097);
101         assert_se(!memcmp(vec[0].iov_base, buf, vec[0].iov_len));
102         assert_se(ring_get_size(&r) == 4097);
103
104         ring_pull(&r, 1);
105         assert_se(ring_get_size(&r) == 4096);
106
107         s = ring_push(&r, buf, 4096);
108         assert_se(!s);
109         assert_se(ring_get_size(&r) == 8192);
110
111         l = ring_peek(&r, vec);
112         assert_se(l == 2);
113         assert_se(vec[0].iov_len == 8191);
114         assert_se(vec[1].iov_len == 1);
115         assert_se(!memcmp(vec[0].iov_base, buf, vec[0].iov_len));
116         assert_se(!memcmp(vec[1].iov_base, buf, vec[1].iov_len));
117         assert_se(ring_get_size(&r) == 8192);
118
119         ring_clear(&r);
120         assert_se(ring_get_size(&r) == 0);
121 }
122
123 int main(int argc, char *argv[]) {
124         log_parse_environment();
125         log_open();
126
127         test_ring();
128
129         return 0;
130 }