libqaeda

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

test_msg.c (2926B)


      1 #include <check.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 
      5 #include "lq/msg.h"
      6 #include "lq/crypto.h"
      7 #include "lq/io.h"
      8 #include "lq/mem.h"
      9 #include "lq/base.h"
     10 #include "lq/err.h"
     11 
     12 extern LQStore LQDummyContent;
     13 extern LQStore LQFileContent;
     14 
     15 const char *data = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
     16 
     17 START_TEST(check_msg_symmetric) {
     18 	int r;
     19 	size_t c;
     20 	char buf[4096];
     21 	char path[1024];
     22 	char *p;
     23 	LQMsg *msg;
     24 	LQResolve resolve;
     25 	LQResolve resolve_dummy;
     26 	LQStore *store;
     27 
     28 	lq_cpy(path, "/tmp/lqstore_file_XXXXXX", 25);
     29 	p = mktempdir(path);
     30 	*(p+24) = '/';
     31 	*(p+25) = 0x0;
     32 	store = lq_store_new(p);
     33 	ck_assert_ptr_nonnull(store->userdata);
     34 
     35 	resolve_dummy.store = &LQDummyContent;
     36 	resolve_dummy.next = NULL;
     37 	resolve.store = store;
     38 	resolve.next = &resolve_dummy;
     39 	msg = lq_msg_new(data, strlen(data) + 1);
     40 	msg->pubkey = lq_publickey_new(data);
     41 
     42 	c = LQ_BLOCKSIZE;
     43 	r = lq_msg_serialize(msg, &resolve, buf, &c);
     44 	ck_assert_int_eq(r, 0);
     45 	lq_msg_free(msg);
     46 
     47 	r = lq_msg_deserialize(&msg, &resolve, buf, c);
     48 	ck_assert_ptr_nonnull(msg);
     49 	ck_assert_int_eq(r, 0);
     50 	lq_msg_free(msg);
     51 	resolve.store->free(resolve.store);
     52 	resolve_dummy.store->free(resolve_dummy.store);
     53 }
     54 END_TEST
     55 
     56 START_TEST(check_msg_symmetric_literal) {
     57 	int r;
     58 	size_t c;
     59 	char buf[4096];
     60 	char path[1024];
     61 	char *p;
     62 	LQMsg *msg;
     63 	LQResolve resolve;
     64 	LQStore *store;
     65 
     66 	lq_cpy(path, "/tmp/lqstore_file_XXXXXX", 25);
     67 	p = mktempdir(path);
     68 	*(p+24) = '/';
     69 	*(p+25) = 0x0;
     70 	store = lq_store_new(p);
     71 	ck_assert_ptr_nonnull(store->userdata);
     72 
     73 	msg = lq_msg_new(data, strlen(data) + 1);
     74 	r = lq_msg_literal(msg);
     75 	ck_assert_int_eq(r, ERR_OK);
     76 	r = lq_msg_literal(msg);
     77 	ck_assert_int_eq(r, ERR_NOOP);
     78 	msg->pubkey = lq_publickey_new(data);
     79 
     80 	c = LQ_BLOCKSIZE;
     81 	r = lq_msg_serialize(msg, &resolve, buf, &c);
     82 	ck_assert_int_eq(r, 0);
     83 	lq_msg_free(msg);
     84 
     85 	r = lq_msg_deserialize(&msg, &resolve, buf, c);
     86 	ck_assert_ptr_nonnull(msg);
     87 	ck_assert_mem_eq(msg->data, data, strlen(data) + 1);
     88 	ck_assert_int_eq(r, 0);
     89 	lq_msg_free(msg);
     90 }
     91 END_TEST
     92 Suite * common_suite(void) {
     93 	Suite *s;
     94 	TCase *tc;
     95 
     96 	s = suite_create("msg");
     97 	tc = tcase_create("serialize");
     98 	tcase_add_test(tc, check_msg_symmetric);
     99 	tcase_add_test(tc, check_msg_symmetric_literal);
    100 	suite_add_tcase(s, tc);
    101 
    102 	return s;
    103 }
    104 
    105 int main(void) {
    106 	int n_fail;
    107 
    108 	Suite *s;
    109 	SRunner *sr;
    110 
    111 	lq_init();
    112 
    113 	s = common_suite();	
    114 	sr = srunner_create(s);
    115 
    116 	srunner_run_all(sr, CK_VERBOSE);
    117 	n_fail = srunner_ntests_failed(sr);
    118 	srunner_free(sr);
    119 
    120 	return (n_fail == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
    121 }