summaryrefslogtreecommitdiff
path: root/auto_tests/messenger_test.c
diff options
context:
space:
mode:
authorCoren[m] <Break@Ocean>2013-09-17 01:08:57 +0200
committerCoren[m] <Break@Ocean>2013-09-17 01:08:57 +0200
commit1c57a3a3de376c8e9f127c409032fd94298e5e7b (patch)
tree7e4f841b70d15b5ea999100eb1445dd3c47361f9 /auto_tests/messenger_test.c
parent1d2f4465bf634f45704eb69791c45bd623154909 (diff)
Tests of state loading/saving lead to two fixes for DHT.c and util.c
util.c: - fix in empty section at the end of the state, showed as bug when having an empty name DHT.c: - fix in saving less data than originally announced, showed as bug when not having reached any clients ever (no clients or only with timestamp of zero)
Diffstat (limited to 'auto_tests/messenger_test.c')
-rw-r--r--auto_tests/messenger_test.c89
1 files changed, 87 insertions, 2 deletions
diff --git a/auto_tests/messenger_test.c b/auto_tests/messenger_test.c
index 1b72a92f..dc1625a3 100644
--- a/auto_tests/messenger_test.c
+++ b/auto_tests/messenger_test.c
@@ -43,10 +43,9 @@ Messenger *m;
43 43
44unsigned char *hex_string_to_bin(char hex_string[]) 44unsigned char *hex_string_to_bin(char hex_string[])
45{ 45{
46 size_t len = strlen(hex_string); 46 size_t i, len = strlen(hex_string);
47 unsigned char *val = calloc(1, len); 47 unsigned char *val = calloc(1, len);
48 char *pos = hex_string; 48 char *pos = hex_string;
49 int i = 0;
50 49
51 for (i = 0; i < len; ++i, pos += 2) 50 for (i = 0; i < len; ++i, pos += 2)
52 sscanf(pos, "%2hhx", &val[i]); 51 sscanf(pos, "%2hhx", &val[i]);
@@ -227,6 +226,86 @@ START_TEST(test_getname)
227} 226}
228END_TEST 227END_TEST
229 228
229START_TEST(test_dht_state_saveloadsave)
230{
231 /* validate that:
232 * a) saving stays within the confined space
233 * b) a save()d state can be load()ed back successfully
234 * c) a second save() is of equal size
235 * d) the second save() is of equal content */
236 size_t i, extra = 64;
237 size_t size = DHT_size(m->dht);
238 uint8_t buffer[size + 2 * extra];
239 memset(buffer, 0xCD, extra);
240 memset(buffer + extra + size, 0xCD, extra);
241 DHT_save(m->dht, buffer + extra);
242 for(i = 0; i < extra; i++) {
243 ck_assert_msg(buffer[i] == 0xCD, "Buffer underwritten from DHT_save() @%u", i);
244 ck_assert_msg(buffer[extra + size + i] == 0xCD, "Buffer overwritten from DHT_save() @%u", i);
245 }
246
247 int res = DHT_load_new(m->dht, buffer + extra, size);
248 if (res == -1)
249 ck_assert_msg(res == 0, "Failed to load back stored buffer: res == -1");
250 else {
251 char msg[128];
252 size_t offset = res >> 4;
253 uint8_t *ptr = buffer + extra + offset;
254 sprintf(msg, "Failed to load back stored buffer: 0x%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx @%u/%u, code %d",
255 ptr[-2], ptr[-1], ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], offset, size, res & 0x0F);
256 ck_assert_msg(res == 0, msg);
257 }
258
259 size_t size2 = DHT_size(m->dht);
260 ck_assert_msg(size == size2, "Messenger \"grew\" in size from a store/load cycle: %u -> %u", size, size2);
261
262 uint8_t buffer2[size2];
263 DHT_save(m->dht, buffer2);
264
265 ck_assert_msg(!memcmp(buffer + extra, buffer2, size), "DHT state changed by store/load/store cycle");
266}
267END_TEST
268
269START_TEST(test_messenger_state_saveloadsave)
270{
271 /* validate that:
272 * a) saving stays within the confined space
273 * b) a save()d state can be load()ed back successfully
274 * c) a second save() is of equal size
275 * d) the second save() is of equal content */
276 size_t i, extra = 64;
277 size_t size = Messenger_size(m);
278 uint8_t buffer[size + 2 * extra];
279 memset(buffer, 0xCD, extra);
280 memset(buffer + extra + size, 0xCD, extra);
281 Messenger_save(m, buffer + extra);
282 for(i = 0; i < extra; i++) {
283 ck_assert_msg(buffer[i] == 0xCD, "Buffer underwritten from Messenger_save() @%u", i);
284 ck_assert_msg(buffer[extra + size + i] == 0xCD, "Buffer overwritten from Messenger_save() @%u", i);
285 }
286
287 int res = Messenger_load(m, buffer + extra, size);
288 if (res == -1)
289 ck_assert_msg(res == 0, "Failed to load back stored buffer: res == -1");
290 else {
291 char msg[128];
292 size_t offset = res >> 4;
293 uint8_t *ptr = buffer + extra + offset;
294 sprintf(msg, "Failed to load back stored buffer: 0x%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx @%u/%u, code %d",
295 ptr[-2], ptr[-1], ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], offset, size, res & 0x0F);
296 ck_assert_msg(res == 0, msg);
297 }
298
299 size_t size2 = Messenger_size(m);
300 ck_assert_msg(size == size2, "Messenger \"grew\" in size from a store/load cycle: %u -> %u", size, size2);
301
302 uint8_t buffer2[size2];
303 Messenger_save(m, buffer2);
304
305 ck_assert_msg(!memcmp(buffer + extra, buffer2, size), "Messenger state changed by store/load/store cycle");
306}
307END_TEST
308
230Suite *messenger_suite(void) 309Suite *messenger_suite(void)
231{ 310{
232 Suite *s = suite_create("Messenger"); 311 Suite *s = suite_create("Messenger");
@@ -241,6 +320,8 @@ Suite *messenger_suite(void)
241 //TCase *addfriend = tcase_create("addfriend"); 320 //TCase *addfriend = tcase_create("addfriend");
242 TCase *setname = tcase_create("setname"); 321 TCase *setname = tcase_create("setname");
243 TCase *getname = tcase_create("getname"); 322 TCase *getname = tcase_create("getname");
323 TCase *dht_state_saveloadsave = tcase_create("dht_state_saveloadsave");
324 TCase *messenger_state_saveloadsave = tcase_create("messenger_state_saveloadsave");
244 325
245 tcase_add_test(userstatus_size, test_m_get_userstatus_size); 326 tcase_add_test(userstatus_size, test_m_get_userstatus_size);
246 tcase_add_test(set_userstatus, test_m_set_userstatus); 327 tcase_add_test(set_userstatus, test_m_set_userstatus);
@@ -252,6 +333,8 @@ Suite *messenger_suite(void)
252 //tcase_add_test(addfriend, test_m_addfriend); 333 //tcase_add_test(addfriend, test_m_addfriend);
253 tcase_add_test(setname, test_getname); 334 tcase_add_test(setname, test_getname);
254 tcase_add_test(setname, test_setname); 335 tcase_add_test(setname, test_setname);
336 tcase_add_test(dht_state_saveloadsave, test_dht_state_saveloadsave);
337 tcase_add_test(messenger_state_saveloadsave, test_messenger_state_saveloadsave);
255 338
256 suite_add_tcase(s, userstatus_size); 339 suite_add_tcase(s, userstatus_size);
257 suite_add_tcase(s, set_userstatus); 340 suite_add_tcase(s, set_userstatus);
@@ -263,6 +346,8 @@ Suite *messenger_suite(void)
263 //suite_add_tcase(s, addfriend); 346 //suite_add_tcase(s, addfriend);
264 suite_add_tcase(s, getname); 347 suite_add_tcase(s, getname);
265 suite_add_tcase(s, setname); 348 suite_add_tcase(s, setname);
349 suite_add_tcase(s, messenger_state_saveloadsave);
350 suite_add_tcase(s, dht_state_saveloadsave);
266 351
267 return s; 352 return s;
268} 353}