libqaeda

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | README | LICENSE

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 }