]> git.ozlabs.org Git - ccan/blob - ccan/tdb2/test/run-add-remove-flags.c
tdb2: Make TDB1 code use TDB2's open flags.
[ccan] / ccan / tdb2 / test / run-add-remove-flags.c
1 #include "tdb2-source.h"
2 #include <ccan/tap/tap.h>
3 #include "logging.h"
4
5 int main(int argc, char *argv[])
6 {
7         unsigned int i;
8         struct tdb_context *tdb;
9         int flags[] = { TDB_INTERNAL, TDB_DEFAULT, TDB_NOMMAP,
10                         TDB_INTERNAL|TDB_CONVERT, TDB_CONVERT, 
11                         TDB_NOMMAP|TDB_CONVERT };
12
13         plan_tests(87);
14         for (i = 0; i < sizeof(flags) / sizeof(flags[0]); i++) {
15                 tdb = tdb_open("run-add-remove-flags.tdb", flags[i],
16                                O_RDWR|O_CREAT|O_TRUNC, 0600, &tap_log_attr);
17                 ok1(tdb);
18                 if (!tdb)
19                         continue;
20
21                 ok1(tdb_get_flags(tdb) == tdb->flags);
22                 tap_log_messages = 0;
23                 tdb_add_flag(tdb, TDB_NOLOCK);
24                 if (flags[i] & TDB_INTERNAL)
25                         ok1(tap_log_messages == 1);
26                 else {
27                         ok1(tap_log_messages == 0);
28                         ok1(tdb_get_flags(tdb) & TDB_NOLOCK);
29                 }
30
31                 tap_log_messages = 0;
32                 tdb_add_flag(tdb, TDB_NOMMAP);
33                 if (flags[i] & TDB_INTERNAL)
34                         ok1(tap_log_messages == 1);
35                 else {
36                         ok1(tap_log_messages == 0);
37                         ok1(tdb_get_flags(tdb) & TDB_NOMMAP);
38                         ok1(tdb->file->map_ptr == NULL);
39                 }
40
41                 tap_log_messages = 0;
42                 tdb_add_flag(tdb, TDB_NOSYNC);
43                 if (flags[i] & TDB_INTERNAL)
44                         ok1(tap_log_messages == 1);
45                 else {
46                         ok1(tap_log_messages == 0);
47                         ok1(tdb_get_flags(tdb) & TDB_NOSYNC);
48                 }
49
50                 ok1(tdb_get_flags(tdb) == tdb->flags);
51
52                 tap_log_messages = 0;
53                 tdb_remove_flag(tdb, TDB_NOLOCK);
54                 if (flags[i] & TDB_INTERNAL)
55                         ok1(tap_log_messages == 1);
56                 else {
57                         ok1(tap_log_messages == 0);
58                         ok1(!(tdb_get_flags(tdb) & TDB_NOLOCK));
59                 }
60
61                 tap_log_messages = 0;
62                 tdb_remove_flag(tdb, TDB_NOMMAP);
63                 if (flags[i] & TDB_INTERNAL)
64                         ok1(tap_log_messages == 1);
65                 else {
66                         ok1(tap_log_messages == 0);
67                         ok1(!(tdb_get_flags(tdb) & TDB_NOMMAP));
68                         ok1(tdb->file->map_ptr != NULL);
69                 }
70
71                 tap_log_messages = 0;
72                 tdb_remove_flag(tdb, TDB_NOSYNC);
73                 if (flags[i] & TDB_INTERNAL)
74                         ok1(tap_log_messages == 1);
75                 else {
76                         ok1(tap_log_messages == 0);
77                         ok1(!(tdb_get_flags(tdb) & TDB_NOSYNC));
78                 }
79
80                 tdb_close(tdb);
81         }
82
83         ok1(tap_log_messages == 0);
84         return exit_status();
85 }