s3:registry: do not use regdb functions during db upgrade
[Samba/gebeck_regimport.git] / lib / tdb2 / test / run-50-multiple-freelists.c
blob81c52e76c0e45fa9623b1a8430f671acc940ad97
1 #include "tdb2-source.h"
2 #include <ccan/tap/tap.h>
3 #include "logging.h"
4 #include "layout.h"
6 int main(int argc, char *argv[])
8 tdb_off_t off;
9 struct tdb_context *tdb;
10 struct tdb_layout *layout;
11 TDB_DATA key, data;
13 plan_tests(11);
14 key = tdb_mkdata("Hello", 5);
15 data = tdb_mkdata("world", 5);
17 /* Create a TDB with three free tables. */
18 layout = new_tdb_layout(NULL);
19 tdb_layout_add_freetable(layout);
20 tdb_layout_add_freetable(layout);
21 tdb_layout_add_freetable(layout);
22 tdb_layout_add_free(layout, 80, 0);
23 /* Used record prevent coalescing. */
24 tdb_layout_add_used(layout, key, data, 6);
25 tdb_layout_add_free(layout, 160, 1);
26 key.dsize--;
27 tdb_layout_add_used(layout, key, data, 7);
28 tdb_layout_add_free(layout, 320, 2);
29 key.dsize--;
30 tdb_layout_add_used(layout, key, data, 8);
31 tdb_layout_add_free(layout, 40, 0);
32 tdb = tdb_layout_get(layout);
33 ok1(tdb_check(tdb, NULL, NULL) == 0);
35 off = get_free(tdb, 0, 80 - sizeof(struct tdb_used_record), 0,
36 TDB_USED_MAGIC, 0);
37 ok1(off == layout->elem[3].base.off);
38 ok1(tdb->tdb2.ftable_off == layout->elem[0].base.off);
40 off = get_free(tdb, 0, 160 - sizeof(struct tdb_used_record), 0,
41 TDB_USED_MAGIC, 0);
42 ok1(off == layout->elem[5].base.off);
43 ok1(tdb->tdb2.ftable_off == layout->elem[1].base.off);
45 off = get_free(tdb, 0, 320 - sizeof(struct tdb_used_record), 0,
46 TDB_USED_MAGIC, 0);
47 ok1(off == layout->elem[7].base.off);
48 ok1(tdb->tdb2.ftable_off == layout->elem[2].base.off);
50 off = get_free(tdb, 0, 40 - sizeof(struct tdb_used_record), 0,
51 TDB_USED_MAGIC, 0);
52 ok1(off == layout->elem[9].base.off);
53 ok1(tdb->tdb2.ftable_off == layout->elem[0].base.off);
55 /* Now we fail. */
56 off = get_free(tdb, 0, 0, 1, TDB_USED_MAGIC, 0);
57 ok1(off == 0);
59 tdb_close(tdb);
60 tdb_layout_free(layout);
62 ok1(tap_log_messages == 0);
63 return exit_status();