summaryrefslogtreecommitdiff
path: root/src/libdisfluid/disfluid-tests.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libdisfluid/disfluid-tests.h')
-rw-r--r--src/libdisfluid/disfluid-tests.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/libdisfluid/disfluid-tests.h b/src/libdisfluid/disfluid-tests.h
index 0843404..fc16d4c 100644
--- a/src/libdisfluid/disfluid-tests.h
+++ b/src/libdisfluid/disfluid-tests.h
@@ -21,6 +21,7 @@ static inline int test_append_count (const char *filename, size_t *n);
# include "string-desc.h"
# include "disfluid-append-only-file.h"
# include "disfluid-trie.h"
+# include "disfluid-cache-group.h"
# define BYTES * 1
@@ -839,6 +840,57 @@ START_TEST (test_aof_trie_fold)
END_TEST
/* *INDENT-ON* */
+/* *INDENT-OFF* */
+START_TEST (test_aof_cache_group)
+/* *INDENT-ON* */
+
+{
+ /* The group has 2 entries: 8001 and 8002. */
+ char filename[] = "/tmp/test-ao-cache-group-XXXXXX";
+ int file = mkstemp (filename);
+ ck_assert_int_ge (file, 0);
+ static const char *magic_data = "disfluid c.group";
+ const string_desc_t file_magic = {
+ ._data = (char *) magic_data,
+ ._nbytes = strlen (magic_data)
+ };
+ int error = ao_file_prepare (file, file_magic);
+ ck_assert_int_eq (error, 0);
+ size_t top;
+ error = ao_file_lock_for_writing (file, &top);
+ ck_assert_int_eq (error, 0);
+ ck_assert_int_eq (top, 0);
+ static const size_t expected_offsets[] = { 8001, 8002 };
+ size_t final_offset = 42;
+ error =
+ ao_cache_group_push (file, &final_offset,
+ sizeof (expected_offsets) /
+ sizeof (expected_offsets[0]), expected_offsets);
+ ck_assert_int_eq (error, 0);
+ /* The array is 16 bytes, and the header too. */
+ ck_assert_int_eq (final_offset, 32);
+ /* Commit */
+ error = ao_file_commit_transaction (file);
+ ck_assert_int_eq (error, 0);
+ /* Check */
+ size_t actual_n_offsets = 42;
+ size_t *actual_offsets = NULL;
+ error =
+ ao_cache_group_read (file, final_offset, &actual_n_offsets,
+ &actual_offsets);
+ ck_assert_int_eq (error, 0);
+ ck_assert_int_eq (actual_n_offsets, 2);
+ ck_assert_ptr_nonnull (actual_offsets);
+ ck_assert_int_eq (actual_offsets[0], 8001);
+ ck_assert_int_eq (actual_offsets[1], 8002);
+ FREE (actual_offsets);
+ remove (filename);
+ close (file);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
static inline char *
tests_read_whole_file (int file)
{
@@ -896,6 +948,7 @@ run_tests (size_t *n_tests, size_t *n_errors)
tcase_add_test (aof, test_aof_recover);
tcase_add_test (aof, test_aof_can_read_locked_file);
tcase_add_test (aof, test_aof_trie_fold);
+ tcase_add_test (aof, test_aof_cache_group);
suite_add_tcase (suite, aof);
SRunner *runner = srunner_create (suite);
char log_file_name[] = "/tmp/disfluid-unit-tests-XXXXXX";