run-02-expand.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include <ccan/tdb2/tdb.c>
  2. #include <ccan/tdb2/free.c>
  3. #include <ccan/tdb2/lock.c>
  4. #include <ccan/tdb2/io.c>
  5. #include <ccan/tdb2/check.c>
  6. #include <ccan/tdb2/transaction.c>
  7. #include <ccan/tdb2/hash.c>
  8. #include <ccan/tap/tap.h>
  9. #include "logging.h"
  10. int main(int argc, char *argv[])
  11. {
  12. unsigned int i;
  13. uint64_t val;
  14. struct tdb_context *tdb;
  15. int flags[] = { TDB_INTERNAL, TDB_DEFAULT, TDB_NOMMAP,
  16. TDB_INTERNAL|TDB_CONVERT, TDB_CONVERT,
  17. TDB_NOMMAP|TDB_CONVERT };
  18. plan_tests(sizeof(flags) / sizeof(flags[0]) * 11 + 1);
  19. for (i = 0; i < sizeof(flags) / sizeof(flags[0]); i++) {
  20. tdb = tdb_open("run-expand.tdb", flags[i],
  21. O_RDWR|O_CREAT|O_TRUNC, 0600, &tap_log_attr);
  22. ok1(tdb);
  23. if (!tdb)
  24. continue;
  25. val = tdb->map_size;
  26. /* Need some hash lock for expand. */
  27. ok1(tdb_lock_hashes(tdb, 0, 1, F_WRLCK, TDB_LOCK_WAIT) == 0);
  28. ok1(tdb_expand(tdb, 1) == 0);
  29. ok1(tdb->map_size >= val + 1 * TDB_EXTENSION_FACTOR);
  30. ok1(tdb_unlock_hashes(tdb, 0, 1, F_WRLCK) == 0);
  31. ok1(tdb_check(tdb, NULL, NULL) == 0);
  32. val = tdb->map_size;
  33. ok1(tdb_lock_hashes(tdb, 0, 1, F_WRLCK, TDB_LOCK_WAIT) == 0);
  34. ok1(tdb_expand(tdb, 1024) == 0);
  35. ok1(tdb_unlock_hashes(tdb, 0, 1, F_WRLCK) == 0);
  36. ok1(tdb->map_size >= val + 1024 * TDB_EXTENSION_FACTOR);
  37. ok1(tdb_check(tdb, NULL, NULL) == 0);
  38. tdb_close(tdb);
  39. }
  40. ok1(tap_log_messages == 0);
  41. return exit_status();
  42. }