run-endian.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #define _XOPEN_SOURCE 500
  2. #include <ccan/tdb/tdb.h>
  3. #include <ccan/tdb/io.c>
  4. #include <ccan/tdb/tdb.c>
  5. #include <ccan/tdb/lock.c>
  6. #include <ccan/tdb/freelist.c>
  7. #include <ccan/tdb/traverse.c>
  8. #include <ccan/tdb/transaction.c>
  9. #include <ccan/tdb/error.c>
  10. #include <ccan/tdb/open.c>
  11. #include <ccan/tap/tap.h>
  12. #include <stdlib.h>
  13. #include <err.h>
  14. int main(int argc, char *argv[])
  15. {
  16. struct tdb_context *tdb;
  17. TDB_DATA key, data;
  18. plan_tests(13);
  19. tdb = tdb_open("/tmp/test.tdb", 1024, TDB_CLEAR_IF_FIRST|TDB_CONVERT,
  20. O_CREAT|O_TRUNC|O_RDWR, 0600);
  21. ok1(tdb);
  22. key.dsize = strlen("hi");
  23. key.dptr = (void *)"hi";
  24. data.dsize = strlen("world");
  25. data.dptr = (void *)"world";
  26. ok1(tdb_store(tdb, key, data, TDB_MODIFY) < 0);
  27. ok1(tdb_error(tdb) == TDB_ERR_NOEXIST);
  28. ok1(tdb_store(tdb, key, data, TDB_INSERT) == 0);
  29. ok1(tdb_store(tdb, key, data, TDB_INSERT) < 0);
  30. ok1(tdb_error(tdb) == TDB_ERR_EXISTS);
  31. ok1(tdb_store(tdb, key, data, TDB_MODIFY) == 0);
  32. data = tdb_fetch(tdb, key);
  33. ok1(data.dsize == strlen("world"));
  34. ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
  35. free(data.dptr);
  36. key.dsize++;
  37. data = tdb_fetch(tdb, key);
  38. ok1(data.dptr == NULL);
  39. tdb_close(tdb);
  40. /* Reopen: should read it */
  41. tdb = tdb_open("/tmp/test.tdb", 1024, 0, O_RDWR, 0);
  42. ok1(tdb);
  43. key.dsize = strlen("hi");
  44. key.dptr = (void *)"hi";
  45. data = tdb_fetch(tdb, key);
  46. ok1(data.dsize == strlen("world"));
  47. ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
  48. free(data.dptr);
  49. tdb_close(tdb);
  50. return exit_status();
  51. }