check_soc.c (3250B)
1 #include <check.h> 2 #include <stdlib.h> 3 4 #include "soc.h" 5 #include "hex.h" 6 #include "common.h" 7 #include "def.h" 8 #include "keystore.h" 9 10 11 START_TEST(check_soc_identifier) { 12 int i; 13 int r; 14 char out[84]; 15 char in[52]; 16 17 for (i = 0; i < 52; i++) { 18 in[i] = i; 19 } 20 21 r = soc_identifier(out, in, in+20); 22 ck_assert_int_eq(r, 0); 23 } 24 END_TEST 25 26 27 START_TEST(check_soc_address) { 28 int i; 29 int r; 30 char out[84]; 31 char in[52]; 32 33 for (i = 51; i >= 0; i--) { 34 in[i] = i; 35 } 36 37 r = soc_identifier(out, in, in+32); 38 ck_assert_int_eq(r, 0); 39 } 40 END_TEST 41 42 43 START_TEST(check_soc_digest) { 44 soc_chunk_t chunk; 45 int i; 46 int r; 47 char out[96]; 48 49 r = soc_digest(&chunk, out); 50 ck_assert_int_eq(r, 0); 51 } 52 END_TEST 53 54 55 START_TEST(check_soc_verify) { 56 int r; 57 soc_chunk_t chunk; 58 keystore_key_t key; 59 keystore_key_t *key_returned; 60 keystore_t keystore; 61 keystore_t *keystore_returned; 62 unsigned char digest[96]; 63 64 keystore_returned = keystore_init(&keystore); 65 ck_assert_ptr_nonnull(keystore_returned); 66 67 hex2bin(TEST_PRIVATE_KEY, key.pk); 68 69 key_returned = keystore_put(&keystore, &key, NULL, 0); 70 ck_assert_ptr_nonnull(key_returned); 71 72 r = key_from_private(&key); 73 ck_assert_int_eq(r, 0); 74 75 r = soc_digest(&chunk, digest); 76 ck_assert_int_eq(r, 0); 77 78 keystore_sign(&keystore, chunk.signature, 0, digest); 79 80 r = soc_verify(&chunk, &key); 81 ck_assert_int_eq(r, 0); 82 83 keystore_free(&keystore); 84 } 85 END_TEST 86 87 88 START_TEST(check_soc_serialize) { 89 soc_chunk_t soc_chunk; 90 long long span; 91 unsigned char wire[4096*2]; 92 unsigned char wire_out[4096*2]; 93 size_t wire_length; 94 unsigned char *wire_returned; 95 struct block_generator bg; 96 int crsr; 97 98 bg.v = 0; 99 bg.m = 256; 100 101 block_generate(&bg, (char*)soc_chunk.identifier, SWARM_SOC_IDENTIFIER_SIZE); 102 block_generate(&bg, (char*)soc_chunk.signature, SWARM_SIGNATURE_SIZE); 103 104 block_generate(&bg, soc_chunk.data.hash, SWARM_WORD_SIZE); 105 soc_chunk.data.payload_sz = 1324; 106 span = 2435; 107 memcpy(&soc_chunk.data.span, &span, SWARM_DATA_LENGTH_TYPESIZE); 108 block_generate(&bg, (char*)wire, soc_chunk.data.payload_sz); 109 soc_chunk.data.payload = wire; 110 memcpy(wire_out, wire, soc_chunk.data.payload_sz); 111 112 wire_returned = soc_serialize(&soc_chunk, wire_out, &wire_length); 113 114 crsr = 0; 115 ck_assert_mem_eq(&soc_chunk, wire_returned + crsr, SWARM_SOC_IDENTIFIER_SIZE + SWARM_SIGNATURE_SIZE); 116 crsr += SWARM_SOC_IDENTIFIER_SIZE + SWARM_SIGNATURE_SIZE; 117 ck_assert_mem_eq(soc_chunk.data.span, wire_returned + crsr, SWARM_DATA_LENGTH_TYPESIZE); 118 crsr += SWARM_DATA_LENGTH_TYPESIZE; 119 ck_assert_mem_eq(soc_chunk.data.payload, wire_returned + crsr, soc_chunk.data.payload_sz); 120 crsr += soc_chunk.data.payload_sz; 121 122 ck_assert_int_eq(crsr, wire_length); 123 } 124 END_TEST 125 126 Suite * common_suite(void) { 127 Suite *s; 128 TCase *tc; 129 130 s = suite_create("soc"); 131 tc = tcase_create("core"); 132 tcase_add_test(tc, check_soc_identifier); 133 tcase_add_test(tc, check_soc_address); 134 tcase_add_test(tc, check_soc_digest); 135 tcase_add_test(tc, check_soc_verify); 136 tcase_add_test(tc, check_soc_serialize); 137 suite_add_tcase(s, tc); 138 139 return s; 140 } 141 142 int main(void) { 143 int n_fail; 144 145 Suite *s; 146 SRunner *sr; 147 148 s = common_suite(); 149 sr = srunner_create(s); 150 151 srunner_run_all(sr, CK_VERBOSE); 152 n_fail = srunner_ntests_failed(sr); 153 srunner_free(sr); 154 155 return (n_fail == 0) ? EXIT_SUCCESS : EXIT_FAILURE; 156 }