test_query.c (2608B)
1 #include <check.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 #include "lq/store.h" 6 #include "lq/mem.h" 7 #include "lq/query.h" 8 #include "lq/io.h" 9 #include "lq/err.h" 10 11 extern LQStore LQFileContent; 12 13 /** 14 * \todo DRY file store dir creation 15 */ 16 START_TEST(check_query_full) { 17 int r; 18 LQStore store; 19 char path[LQ_PATH_MAX]; 20 char *k; 21 char *v; 22 size_t kl; 23 size_t vl; 24 LQQuery *query; 25 26 lq_cpy(&store, &LQFileContent, sizeof(LQStore)); 27 lq_cpy(path, "/tmp/lqstore_file_XXXXXX", 25); 28 store.userdata = mktempdir(path); 29 *((char*)(store.userdata+24)) = '/'; 30 *((char*)(store.userdata+25)) = 0x0; 31 32 k = "aaa"; 33 v = "foo"; 34 kl = 3; 35 vl = 3; 36 store.put(LQ_CONTENT_RAW, &store, k, &kl, v, vl); 37 38 k = "aab"; 39 v = "bar"; 40 kl = 3; 41 vl = 3; 42 store.put(LQ_CONTENT_RAW, &store, k, &kl, v, vl); 43 44 k = "aaa"; 45 v = "inky"; 46 kl = 3; 47 vl = 4; 48 store.put(LQ_CONTENT_MSG, &store, k, &kl, v, vl); 49 50 k = "aab"; 51 v = "pinky"; 52 kl = 3; 53 vl = 5; 54 store.put(LQ_CONTENT_MSG, &store, k, &kl, v, vl); 55 56 k = "aac"; 57 v = "blinky"; 58 kl = 3; 59 vl = 6; 60 store.put(LQ_CONTENT_MSG, &store, k, &kl, v, vl); 61 62 k = "bbc"; 63 v = "clyde"; 64 kl = 3; 65 vl = 5; 66 store.put(LQ_CONTENT_MSG, &store, k, &kl, v, vl); 67 68 k = "bbc"; 69 v = "clyde"; 70 kl = 3; 71 vl = 5; 72 store.put(LQ_CONTENT_CERT, &store, k, &kl, v, vl); 73 74 query = lq_query_new(LQ_CONTENT_RAW, &store, "aa", 2); 75 ck_assert_ptr_nonnull(query); 76 77 r = lq_query_next(query); 78 ck_assert_int_eq(r, ERR_OK); 79 r = lq_query_next(query); 80 ck_assert_int_eq(r, ERR_OK); 81 r = lq_query_next(query); 82 ck_assert_int_eq(r, ERR_OK | ERR_EOF); 83 lq_query_free(query); 84 85 query = lq_query_new(LQ_CONTENT_MSG, &store, "aa", 2); 86 ck_assert_ptr_nonnull(query); 87 88 r = lq_query_next(query); 89 ck_assert_int_eq(r, ERR_OK); 90 r = lq_query_next(query); 91 ck_assert_int_eq(r, ERR_OK); 92 r = lq_query_next(query); 93 ck_assert_int_eq(r, ERR_OK); 94 r = lq_query_next(query); 95 ck_assert_int_eq(r, ERR_OK | ERR_EOF); 96 97 k = lq_query_get_key(query); 98 kl = lq_query_get_key_len(query); 99 ck_assert_int_eq(kl, 3); 100 ck_assert_mem_eq(k, "aac", kl); 101 102 v = lq_query_get_val(query); 103 vl = lq_query_get_val_len(query); 104 ck_assert_int_eq(vl, 6); 105 ck_assert_mem_eq(v, "blinky", vl); 106 107 lq_query_free(query); 108 } 109 END_TEST 110 111 Suite * common_suite(void) { 112 Suite *s; 113 TCase *tc; 114 115 s = suite_create("query"); 116 tc = tcase_create("files"); 117 tcase_add_test(tc, check_query_full); 118 suite_add_tcase(s, tc); 119 120 return s; 121 } 122 123 int main(void) { 124 int n_fail; 125 126 Suite *s; 127 SRunner *sr; 128 129 s = common_suite(); 130 sr = srunner_create(s); 131 132 srunner_run_all(sr, CK_VERBOSE); 133 n_fail = srunner_ntests_failed(sr); 134 srunner_free(sr); 135 136 return (n_fail == 0) ? EXIT_SUCCESS : EXIT_FAILURE; 137 }