]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/journal/test-mmap-cache.c
tree-wide: drop 'This file is part of systemd' blurb
[thirdparty/systemd.git] / src / journal / test-mmap-cache.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 /***
3 Copyright 2012 Lennart Poettering
4 ***/
5
6 #include <fcntl.h>
7 #include <stdlib.h>
8 #include <sys/mman.h>
9 #include <unistd.h>
10
11 #include "fd-util.h"
12 #include "fileio.h"
13 #include "macro.h"
14 #include "mmap-cache.h"
15 #include "util.h"
16
17 int main(int argc, char *argv[]) {
18 MMapFileDescriptor *fx;
19 int x, y, z, r;
20 char px[] = "/tmp/testmmapXXXXXXX", py[] = "/tmp/testmmapYXXXXXX", pz[] = "/tmp/testmmapZXXXXXX";
21 MMapCache *m;
22 void *p, *q;
23
24 assert_se(m = mmap_cache_new());
25
26 x = mkostemp_safe(px);
27 assert_se(x >= 0);
28 unlink(px);
29
30 assert_se(fx = mmap_cache_add_fd(m, x));
31
32 y = mkostemp_safe(py);
33 assert_se(y >= 0);
34 unlink(py);
35
36 z = mkostemp_safe(pz);
37 assert_se(z >= 0);
38 unlink(pz);
39
40 r = mmap_cache_get(m, fx, PROT_READ, 0, false, 1, 2, NULL, &p, NULL);
41 assert_se(r >= 0);
42
43 r = mmap_cache_get(m, fx, PROT_READ, 0, false, 2, 2, NULL, &q, NULL);
44 assert_se(r >= 0);
45
46 assert_se((uint8_t*) p + 1 == (uint8_t*) q);
47
48 r = mmap_cache_get(m, fx, PROT_READ, 1, false, 3, 2, NULL, &q, NULL);
49 assert_se(r >= 0);
50
51 assert_se((uint8_t*) p + 2 == (uint8_t*) q);
52
53 r = mmap_cache_get(m, fx, PROT_READ, 0, false, 16ULL*1024ULL*1024ULL, 2, NULL, &p, NULL);
54 assert_se(r >= 0);
55
56 r = mmap_cache_get(m, fx, PROT_READ, 1, false, 16ULL*1024ULL*1024ULL+1, 2, NULL, &q, NULL);
57 assert_se(r >= 0);
58
59 assert_se((uint8_t*) p + 1 == (uint8_t*) q);
60
61 mmap_cache_free_fd(m, fx);
62 mmap_cache_unref(m);
63
64 safe_close(x);
65 safe_close(y);
66 safe_close(z);
67
68 return 0;
69 }