test_store_mdb.c 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include <unistd.h>
  2. #include "lsup/store_mdb.h"
  3. #include "test.h"
  4. #define MDBSTORE_ID "file:///tmp/testdb"
  5. /** @brief Test context switching.
  6. */
  7. static int test_ctx_switch()
  8. {
  9. const LSUP_StoreInt *sif = LSUP_store_int (LSUP_STORE_MDB);
  10. LSUP_Store *store = LSUP_store_new (LSUP_STORE_MDB, MDBSTORE_ID, 0, true);
  11. ASSERT (store != NULL, "Error initializing store!");
  12. // Create enough triples to test a multi-page copy of triple data.
  13. // Add small buffer (4) to create a 3rd page.
  14. size_t num_trp = (getpagesize() * 2 / TRP_KLEN) + 4;
  15. LSUP_BufferTriple **tdata = malloc (num_trp * sizeof (*tdata));
  16. LSUP_Triple *trp = LSUP_triple_new (
  17. LSUP_iriref_new ("urn:s:1", NULL),
  18. LSUP_iriref_new ("urn:p:1", NULL),
  19. NULL);
  20. char *o_str = malloc (8 * sizeof (*o_str));
  21. if (UNLIKELY (!o_str)) return LSUP_MEM_ERR;
  22. for (unsigned int i = 0; i < num_trp; i++) {
  23. sprintf (o_str, "%.7d", i);
  24. if (trp->o) LSUP_term_free (trp->o);
  25. trp->o = LSUP_literal_new (o_str, NULL);
  26. tdata[i] = LSUP_triple_serialize (trp);
  27. }
  28. LSUP_triple_free (trp);
  29. free (o_str);
  30. LOG_DEBUG ("Created %lu triples.", num_trp);
  31. LSUP_Term
  32. *c1 = LSUP_iriref_new ("urn:c:1", NULL),
  33. *c2 = LSUP_iriref_new ("urn:c:2", NULL);
  34. LSUP_Buffer
  35. *sc1 = LSUP_term_serialize (c1),
  36. *sc2 = LSUP_term_serialize (c2);
  37. LSUP_term_free (c1);
  38. LSUP_term_free (c2);
  39. void *it = sif->add_init_fn (store->data, sc1, NULL);
  40. for (size_t i = 0; i < num_trp; i++)
  41. sif->add_iter_fn (it, tdata[i]);
  42. sif->add_done_fn (it);
  43. for (size_t i = 0; i < num_trp; i++)
  44. LSUP_btriple_free (tdata[i]);
  45. free (tdata);
  46. size_t check_ct;
  47. ASSERT (
  48. it = sif->lookup_fn (
  49. store->data, NULL, NULL, NULL, sc1, NULL, &check_ct
  50. ), "Error looking up triples!");
  51. EXPECT_INT_EQ (check_ct, num_trp);
  52. sif->lu_free_fn (it);
  53. RCCK (sif->update_ctx_fn (store->data, sc1, sc2, NULL));
  54. ASSERT (
  55. it = sif->lookup_fn (
  56. store->data, NULL, NULL, NULL, sc2, NULL, &check_ct
  57. ), "Error looking up triples!");
  58. EXPECT_INT_EQ (check_ct, num_trp);
  59. sif->lu_free_fn (it);
  60. LSUP_buffer_free (sc1);
  61. LSUP_buffer_free (sc2);
  62. LSUP_store_free (store);
  63. return 0;
  64. }
  65. int store_mdb_tests()
  66. {
  67. RUN (test_ctx_switch);
  68. return 0;
  69. }