summaryrefslogtreecommitdiff
path: root/auto_tests
diff options
context:
space:
mode:
authormannol <eniz_vukovic@hotmail.com>2014-05-20 00:27:02 +0200
committermannol <eniz_vukovic@hotmail.com>2014-05-20 00:27:02 +0200
commitc9f1c6882dbf986685e3a900dae516f06832393c (patch)
tree6529505163b9a0d4fd0cb6c4aac0a19c5a108fb1 /auto_tests
parenta1f2a18ae4146ebea11fbd3f83df803b715813da (diff)
parentfc19327dccedf7950377856c3b09a13f2b0f5911 (diff)
Merge upstream fo real now?
Diffstat (limited to 'auto_tests')
-rw-r--r--auto_tests/TCP_test.c143
-rw-r--r--auto_tests/crypto_test.c37
-rw-r--r--auto_tests/messenger_test.c27
-rw-r--r--auto_tests/network_test.c5
-rw-r--r--auto_tests/onion_test.c38
-rw-r--r--auto_tests/tox_test.c28
6 files changed, 201 insertions, 77 deletions
diff --git a/auto_tests/TCP_test.c b/auto_tests/TCP_test.c
index de37bb97..ca5afd9a 100644
--- a/auto_tests/TCP_test.c
+++ b/auto_tests/TCP_test.c
@@ -89,7 +89,7 @@ START_TEST(test_basic)
89 uint8_t r_req[2 + 1 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES]; 89 uint8_t r_req[2 + 1 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES];
90 uint16_t size = 1 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES; 90 uint16_t size = 1 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES;
91 size = htons(size); 91 size = htons(size);
92 ret = encrypt_data_fast(f_shared_key, f_nonce, r_req_p, 1 + crypto_box_PUBLICKEYBYTES, r_req + 2); 92 ret = encrypt_data_symmetric(f_shared_key, f_nonce, r_req_p, 1 + crypto_box_PUBLICKEYBYTES, r_req + 2);
93 increment_nonce(f_nonce); 93 increment_nonce(f_nonce);
94 memcpy(r_req, &size, 2); 94 memcpy(r_req, &size, 2);
95 uint32_t i; 95 uint32_t i;
@@ -110,7 +110,7 @@ START_TEST(test_basic)
110 memcpy(&size, packet_resp, 2); 110 memcpy(&size, packet_resp, 2);
111 ck_assert_msg(ntohs(size) == 2 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES, "Wrong packet size."); 111 ck_assert_msg(ntohs(size) == 2 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES, "Wrong packet size.");
112 uint8_t packet_resp_plain[4096]; 112 uint8_t packet_resp_plain[4096];
113 ret = decrypt_data_fast(f_shared_key, f_nonce_r, packet_resp + 2, recv_data_len - 2, packet_resp_plain); 113 ret = decrypt_data_symmetric(f_shared_key, f_nonce_r, packet_resp + 2, recv_data_len - 2, packet_resp_plain);
114 ck_assert_msg(ret != -1, "decryption failed"); 114 ck_assert_msg(ret != -1, "decryption failed");
115 increment_nonce(f_nonce_r); 115 increment_nonce(f_nonce_r);
116 ck_assert_msg(packet_resp_plain[0] == 1, "wrong packet id %u", packet_resp_plain[0]); 116 ck_assert_msg(packet_resp_plain[0] == 1, "wrong packet id %u", packet_resp_plain[0]);
@@ -179,7 +179,7 @@ int write_packet_TCP_secure_connection(struct sec_TCP_con *con, uint8_t *data, u
179 179
180 uint16_t c_length = htons(length + crypto_box_MACBYTES); 180 uint16_t c_length = htons(length + crypto_box_MACBYTES);
181 memcpy(packet, &c_length, sizeof(uint16_t)); 181 memcpy(packet, &c_length, sizeof(uint16_t));
182 int len = encrypt_data_fast(con->shared_key, con->sent_nonce, data, length, packet + sizeof(uint16_t)); 182 int len = encrypt_data_symmetric(con->shared_key, con->sent_nonce, data, length, packet + sizeof(uint16_t));
183 183
184 if ((unsigned int)len != (sizeof(packet) - sizeof(uint16_t))) 184 if ((unsigned int)len != (sizeof(packet) - sizeof(uint16_t)))
185 return -1; 185 return -1;
@@ -194,7 +194,7 @@ int read_packet_sec_TCP(struct sec_TCP_con *con, uint8_t *data, uint16_t length)
194{ 194{
195 int len; 195 int len;
196 ck_assert_msg((len = recv(con->sock, data, length, 0)) == length, "wrong len %i\n", len); 196 ck_assert_msg((len = recv(con->sock, data, length, 0)) == length, "wrong len %i\n", len);
197 ck_assert_msg((len = decrypt_data_fast(con->shared_key, con->recv_nonce, data + 2, length - 2, data)) != -1, 197 ck_assert_msg((len = decrypt_data_symmetric(con->shared_key, con->recv_nonce, data + 2, length - 2, data)) != -1,
198 "Decrypt failed"); 198 "Decrypt failed");
199 increment_nonce(con->recv_nonce); 199 increment_nonce(con->recv_nonce);
200 return len; 200 return len;
@@ -291,6 +291,76 @@ START_TEST(test_some)
291} 291}
292END_TEST 292END_TEST
293 293
294static int response_callback_good;
295static uint8_t response_callback_connection_id;
296static uint8_t response_callback_public_key[crypto_box_PUBLICKEYBYTES];
297static int response_callback(void *object, uint8_t connection_id, uint8_t *public_key)
298{
299 if (set_tcp_connection_number(object - 2, connection_id, 7) != 0)
300 return 1;
301
302 response_callback_connection_id = connection_id;
303 memcpy(response_callback_public_key, public_key, crypto_box_PUBLICKEYBYTES);
304 response_callback_good++;
305 return 0;
306}
307static int status_callback_good;
308static uint8_t status_callback_connection_id;
309static uint8_t status_callback_status;
310static int status_callback(void *object, uint32_t number, uint8_t connection_id, uint8_t status)
311{
312 if (object != (void *)2)
313 return 1;
314
315 if (number != 7)
316 return 1;
317
318 status_callback_connection_id = connection_id;
319 status_callback_status = status;
320 status_callback_good++;
321 return 0;
322}
323static int data_callback_good;
324static int data_callback(void *object, uint32_t number, uint8_t connection_id, uint8_t *data, uint16_t length)
325{
326 if (object != (void *)3)
327 return 1;
328
329 if (number != 7)
330 return 1;
331
332 if (length != 5)
333 return 1;
334
335 if (data[0] == 1 && data[1] == 2 && data[2] == 3 && data[3] == 4 && data[4] == 5) {
336 data_callback_good++;
337 return 0;
338 }
339
340 return 1;
341}
342
343static int oob_data_callback_good;
344static uint8_t oob_pubkey[crypto_box_PUBLICKEYBYTES];
345static int oob_data_callback(void *object, uint8_t *public_key, uint8_t *data, uint16_t length)
346{
347 if (object != (void *)4)
348 return 1;
349
350 if (length != 5)
351 return 1;
352
353 if (memcmp(public_key, oob_pubkey, crypto_box_PUBLICKEYBYTES) != 0)
354 return 1;
355
356 if (data[0] == 1 && data[1] == 2 && data[2] == 3 && data[3] == 4 && data[4] == 5) {
357 oob_data_callback_good++;
358 return 0;
359 }
360
361 return 1;
362}
363
294START_TEST(test_client) 364START_TEST(test_client)
295{ 365{
296 unix_time_update(); 366 unix_time_update();
@@ -320,6 +390,71 @@ START_TEST(test_client)
320 do_TCP_connection(conn); 390 do_TCP_connection(conn);
321 ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED, 391 ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED,
322 conn->status); 392 conn->status);
393 c_sleep(500);
394 do_TCP_connection(conn);
395 ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED,
396 conn->status);
397 c_sleep(500);
398 do_TCP_connection(conn);
399 ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED,
400 conn->status);
401 do_TCP_server(tcp_s);
402 c_sleep(50);
403 ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED,
404 conn->status);
405
406 uint8_t f2_public_key[crypto_box_PUBLICKEYBYTES];
407 uint8_t f2_secret_key[crypto_box_SECRETKEYBYTES];
408 crypto_box_keypair(f2_public_key, f2_secret_key);
409 TCP_Client_Connection *conn2 = new_TCP_connection(ip_port_tcp_s, self_public_key, f2_public_key, f2_secret_key);
410 routing_response_handler(conn, response_callback, ((void *)conn) + 2);
411 routing_status_handler(conn, status_callback, (void *)2);
412 routing_data_handler(conn, data_callback, (void *)3);
413 oob_data_handler(conn, oob_data_callback, (void *)4);
414 oob_data_callback_good = response_callback_good = status_callback_good = data_callback_good = 0;
415 c_sleep(50);
416 do_TCP_connection(conn);
417 do_TCP_connection(conn2);
418 c_sleep(50);
419 do_TCP_server(tcp_s);
420 c_sleep(50);
421 do_TCP_connection(conn);
422 do_TCP_connection(conn2);
423 c_sleep(50);
424 uint8_t data[5] = {1, 2, 3, 4, 5};
425 memcpy(oob_pubkey, f2_public_key, crypto_box_PUBLICKEYBYTES);
426 send_oob_packet(conn2, f_public_key, data, 5);
427 send_routing_request(conn, f2_public_key);
428 send_routing_request(conn2, f_public_key);
429 c_sleep(50);
430 do_TCP_server(tcp_s);
431 c_sleep(50);
432 do_TCP_connection(conn);
433 do_TCP_connection(conn2);
434 ck_assert_msg(oob_data_callback_good == 1, "oob callback not called");
435 ck_assert_msg(response_callback_good == 1, "response callback not called");
436 ck_assert_msg(memcmp(response_callback_public_key, f2_public_key, crypto_box_PUBLICKEYBYTES) == 0, "wrong public key");
437 ck_assert_msg(status_callback_good == 1, "status callback not called");
438 ck_assert_msg(status_callback_status == 2, "wrong status");
439 ck_assert_msg(status_callback_connection_id == response_callback_connection_id, "connection ids not equal");
440 c_sleep(50);
441 do_TCP_server(tcp_s);
442 ck_assert_msg(send_data(conn2, 0, data, 5) == 1, "send data failed");
443 c_sleep(50);
444 do_TCP_server(tcp_s);
445 c_sleep(50);
446 do_TCP_connection(conn);
447 do_TCP_connection(conn2);
448 ck_assert_msg(data_callback_good == 1, "data callback not called");
449 status_callback_good = 0;
450 send_disconnect_request(conn2, 0);
451 c_sleep(50);
452 do_TCP_server(tcp_s);
453 c_sleep(50);
454 do_TCP_connection(conn);
455 do_TCP_connection(conn2);
456 ck_assert_msg(status_callback_good == 1, "status callback not called");
457 ck_assert_msg(status_callback_status == 1, "wrong status");
323} 458}
324END_TEST 459END_TEST
325 460
diff --git a/auto_tests/crypto_test.c b/auto_tests/crypto_test.c
index 95cdefcd..252f7275 100644
--- a/auto_tests/crypto_test.c
+++ b/auto_tests/crypto_test.c
@@ -9,12 +9,6 @@
9#include <check.h> 9#include <check.h>
10#include <stdlib.h> 10#include <stdlib.h>
11#include <time.h> 11#include <time.h>
12#ifndef VANILLA_NACL
13#include <sodium.h>
14#else
15#include <crypto_box.h>
16#define crypto_box_MACBYTES (crypto_box_ZEROBYTES - crypto_box_BOXZEROBYTES)
17#endif
18 12
19void rand_bytes(uint8_t *b, size_t blen) 13void rand_bytes(uint8_t *b, size_t blen)
20{ 14{
@@ -126,12 +120,12 @@ START_TEST(test_fast_known)
126 ck_assert_msg(sizeof(test_c) == sizeof(c), "sanity check failed"); 120 ck_assert_msg(sizeof(test_c) == sizeof(c), "sanity check failed");
127 ck_assert_msg(sizeof(test_m) == sizeof(m), "sanity check failed"); 121 ck_assert_msg(sizeof(test_m) == sizeof(m), "sanity check failed");
128 122
129 clen = encrypt_data_fast(k, nonce, test_m, sizeof(test_m) / sizeof(unsigned char), c); 123 clen = encrypt_data_symmetric(k, nonce, test_m, sizeof(test_m) / sizeof(unsigned char), c);
130 124
131 ck_assert_msg(memcmp(test_c, c, sizeof(c)) == 0, "cyphertext doesn't match test vector"); 125 ck_assert_msg(memcmp(test_c, c, sizeof(c)) == 0, "cyphertext doesn't match test vector");
132 ck_assert_msg(clen == sizeof(c) / sizeof(unsigned char), "wrong ciphertext length"); 126 ck_assert_msg(clen == sizeof(c) / sizeof(unsigned char), "wrong ciphertext length");
133 127
134 mlen = decrypt_data_fast(k, nonce, test_c, sizeof(test_c) / sizeof(unsigned char), m); 128 mlen = decrypt_data_symmetric(k, nonce, test_c, sizeof(test_c) / sizeof(unsigned char), m);
135 129
136 ck_assert_msg(memcmp(test_m, m, sizeof(m)) == 0, "decrypted text doesn't match test vector"); 130 ck_assert_msg(memcmp(test_m, m, sizeof(m)) == 0, "decrypted text doesn't match test vector");
137 ck_assert_msg(mlen == sizeof(m) / sizeof(unsigned char), "wrong plaintext length"); 131 ck_assert_msg(mlen == sizeof(m) / sizeof(unsigned char), "wrong plaintext length");
@@ -186,8 +180,8 @@ START_TEST(test_endtoend)
186 //Encrypt all four ways 180 //Encrypt all four ways
187 c1len = encrypt_data(pk2, sk1, n, m, mlen, c1); 181 c1len = encrypt_data(pk2, sk1, n, m, mlen, c1);
188 c2len = encrypt_data(pk1, sk2, n, m, mlen, c2); 182 c2len = encrypt_data(pk1, sk2, n, m, mlen, c2);
189 c3len = encrypt_data_fast(k1, n, m, mlen, c3); 183 c3len = encrypt_data_symmetric(k1, n, m, mlen, c3);
190 c4len = encrypt_data_fast(k2, n, m, mlen, c4); 184 c4len = encrypt_data_symmetric(k2, n, m, mlen, c4);
191 185
192 ck_assert_msg(c1len == c2len && c1len == c3len && c1len == c4len, "cyphertext lengths differ"); 186 ck_assert_msg(c1len == c2len && c1len == c3len && c1len == c4len, "cyphertext lengths differ");
193 ck_assert_msg(c1len == mlen + (int)crypto_box_MACBYTES, "wrong cyphertext length"); 187 ck_assert_msg(c1len == mlen + (int)crypto_box_MACBYTES, "wrong cyphertext length");
@@ -197,8 +191,8 @@ START_TEST(test_endtoend)
197 //Decrypt all four ways 191 //Decrypt all four ways
198 m1len = decrypt_data(pk2, sk1, n, c1, c1len, m1); 192 m1len = decrypt_data(pk2, sk1, n, c1, c1len, m1);
199 m2len = decrypt_data(pk1, sk2, n, c1, c1len, m2); 193 m2len = decrypt_data(pk1, sk2, n, c1, c1len, m2);
200 m3len = decrypt_data_fast(k1, n, c1, c1len, m3); 194 m3len = decrypt_data_symmetric(k1, n, c1, c1len, m3);
201 m4len = decrypt_data_fast(k2, n, c1, c1len, m4); 195 m4len = decrypt_data_symmetric(k2, n, c1, c1len, m4);
202 196
203 ck_assert_msg(m1len == m2len && m1len == m3len && m1len == m4len, "decrypted text lengths differ"); 197 ck_assert_msg(m1len == m2len && m1len == m3len && m1len == m4len, "decrypted text lengths differ");
204 ck_assert_msg(m1len == mlen, "wrong decrypted text length"); 198 ck_assert_msg(m1len == mlen, "wrong decrypted text length");
@@ -215,11 +209,11 @@ START_TEST(test_large_data)
215 209
216 unsigned char n[crypto_box_NONCEBYTES]; 210 unsigned char n[crypto_box_NONCEBYTES];
217 211
218 unsigned char m1[MAX_DATA_SIZE - crypto_box_MACBYTES]; 212 unsigned char m1[MAX_CRYPTO_PACKET_SIZE - crypto_box_MACBYTES];
219 unsigned char c1[sizeof(m1) + crypto_box_MACBYTES]; 213 unsigned char c1[sizeof(m1) + crypto_box_MACBYTES];
220 unsigned char m1prime[sizeof(m1)]; 214 unsigned char m1prime[sizeof(m1)];
221 215
222 unsigned char m2[MAX_DATA_SIZE]; 216 unsigned char m2[MAX_CRYPTO_PACKET_SIZE];
223 unsigned char c2[sizeof(m2) + crypto_box_MACBYTES]; 217 unsigned char c2[sizeof(m2) + crypto_box_MACBYTES];
224 218
225 int c1len, c2len; 219 int c1len, c2len;
@@ -233,13 +227,13 @@ START_TEST(test_large_data)
233 //Generate key 227 //Generate key
234 rand_bytes(k, crypto_box_BEFORENMBYTES); 228 rand_bytes(k, crypto_box_BEFORENMBYTES);
235 229
236 c1len = encrypt_data_fast(k, n, m1, sizeof(m1), c1); 230 c1len = encrypt_data_symmetric(k, n, m1, sizeof(m1), c1);
237 c2len = encrypt_data_fast(k, n, m2, sizeof(m2), c2); 231 c2len = encrypt_data_symmetric(k, n, m2, sizeof(m2), c2);
238 232
239 ck_assert_msg(c1len == sizeof(m1) + crypto_box_MACBYTES, "could not encrypt max size"); 233 ck_assert_msg(c1len == sizeof(m1) + crypto_box_MACBYTES, "could not encrypt");
240 ck_assert_msg(c2len == -1, "incorrectly succeeded encrypting massive size"); 234 ck_assert_msg(c2len == sizeof(m2) + crypto_box_MACBYTES, "could not encrypt");
241 235
242 m1plen = decrypt_data_fast(k, n, c1, c1len, m1prime); 236 m1plen = decrypt_data_symmetric(k, n, c1, c1len, m1prime);
243 237
244 ck_assert_msg(m1plen == sizeof(m1), "decrypted text lengths differ"); 238 ck_assert_msg(m1plen == sizeof(m1), "decrypted text lengths differ");
245 ck_assert_msg(memcmp(m1prime, m1, sizeof(m1)) == 0, "decrypted texts differ"); 239 ck_assert_msg(memcmp(m1prime, m1, sizeof(m1)) == 0, "decrypted texts differ");
@@ -248,9 +242,9 @@ END_TEST
248 242
249START_TEST(test_large_data_symmetric) 243START_TEST(test_large_data_symmetric)
250{ 244{
251 unsigned char k[crypto_secretbox_KEYBYTES]; 245 unsigned char k[crypto_box_KEYBYTES];
252 246
253 unsigned char n[crypto_secretbox_NONCEBYTES]; 247 unsigned char n[crypto_box_NONCEBYTES];
254 248
255 unsigned char m1[16 * 16 * 16]; 249 unsigned char m1[16 * 16 * 16];
256 unsigned char c1[sizeof(m1) + crypto_box_MACBYTES]; 250 unsigned char c1[sizeof(m1) + crypto_box_MACBYTES];
@@ -276,6 +270,7 @@ START_TEST(test_large_data_symmetric)
276} 270}
277END_TEST 271END_TEST
278 272
273
279#define DEFTESTCASE(NAME) \ 274#define DEFTESTCASE(NAME) \
280 TCase *NAME = tcase_create(#NAME); \ 275 TCase *NAME = tcase_create(#NAME); \
281 tcase_add_test(NAME, test_##NAME); \ 276 tcase_add_test(NAME, test_##NAME); \
diff --git a/auto_tests/messenger_test.c b/auto_tests/messenger_test.c
index 5e5f7b06..7ab7d674 100644
--- a/auto_tests/messenger_test.c
+++ b/auto_tests/messenger_test.c
@@ -16,7 +16,6 @@
16 16
17#include "../testing/misc_tools.c" // hex_string_to_bin 17#include "../testing/misc_tools.c" // hex_string_to_bin
18#include "../toxcore/Messenger.h" 18#include "../toxcore/Messenger.h"
19#include "../toxcore/Lossless_UDP.h"
20#include <sys/types.h> 19#include <sys/types.h>
21#include <stdint.h> 20#include <stdint.h>
22#include <string.h> 21#include <string.h>
@@ -46,7 +45,7 @@ START_TEST(test_m_sendmesage)
46{ 45{
47 char *message = "h-hi :3"; 46 char *message = "h-hi :3";
48 int good_len = strlen(message); 47 int good_len = strlen(message);
49 int bad_len = MAX_DATA_SIZE; 48 int bad_len = MAX_CRYPTO_PACKET_SIZE;
50 49
51 50
52 ck_assert(m_sendmessage(m, -1, (uint8_t *)message, good_len) == 0); 51 ck_assert(m_sendmessage(m, -1, (uint8_t *)message, good_len) == 0);
@@ -127,7 +126,7 @@ START_TEST(test_m_addfriend)
127 126
128 int good_len = strlen(good_data); 127 int good_len = strlen(good_data);
129 int bad_len = strlen(bad_data); 128 int bad_len = strlen(bad_data);
130 int really_bad_len = (MAX_DATA_SIZE - crypto_box_PUBLICKEYBYTES 129 int really_bad_len = (MAX_CRYPTO_PACKET_SIZE - crypto_box_PUBLICKEYBYTES
131 - crypto_box_NONCEBYTES - crypto_box_BOXZEROBYTES 130 - crypto_box_NONCEBYTES - crypto_box_BOXZEROBYTES
132 + crypto_box_ZEROBYTES + 100); */ 131 + crypto_box_ZEROBYTES + 100); */
133/* TODO: Update this properly to latest master 132/* TODO: Update this properly to latest master
@@ -299,27 +298,6 @@ START_TEST(test_messenger_state_saveloadsave)
299} 298}
300END_TEST 299END_TEST
301 300
302START_TEST(test_messenger_state_saveload_encrypted)
303{
304 uint8_t addr[FRIEND_ADDRESS_SIZE];
305 getaddress(m, addr);
306 Messenger *m_temp = new_messenger(TOX_ENABLE_IPV6_DEFAULT);
307
308 size_t size = messenger_size_encrypted(m);
309 uint8_t buffer[size];
310 messenger_save_encrypted(m, buffer, "Gentoo", sizeof("Gentoo"));
311
312 ck_assert_msg(messenger_load_encrypted(m_temp, buffer, size, "Ubuntu", sizeof("Ubuntu")) == -1,
313 "Bad password didn't make the function fail.");
314 ck_assert_msg(messenger_load_encrypted(m_temp, buffer, size, "Gentoo", sizeof("Gentoo")) == 0,
315 "Good password didn't make the function succeed.");
316 uint8_t addr1[FRIEND_ADDRESS_SIZE];
317 getaddress(m_temp, addr1);
318 ck_assert_msg(memcmp(addr1, addr, FRIEND_ADDRESS_SIZE) == 0, "Didn't load messenger successfully");
319 kill_messenger(m_temp);
320}
321END_TEST
322
323#define DEFTESTCASE(NAME) \ 301#define DEFTESTCASE(NAME) \
324 TCase *tc_##NAME = tcase_create(#NAME); \ 302 TCase *tc_##NAME = tcase_create(#NAME); \
325 tcase_add_test(tc_##NAME, test_##NAME); \ 303 tcase_add_test(tc_##NAME, test_##NAME); \
@@ -331,7 +309,6 @@ Suite *messenger_suite(void)
331 309
332 DEFTESTCASE(dht_state_saveloadsave); 310 DEFTESTCASE(dht_state_saveloadsave);
333 DEFTESTCASE(messenger_state_saveloadsave); 311 DEFTESTCASE(messenger_state_saveloadsave);
334 DEFTESTCASE(messenger_state_saveload_encrypted);
335 312
336 DEFTESTCASE(getself_name); 313 DEFTESTCASE(getself_name);
337 DEFTESTCASE(m_get_userstatus_size); 314 DEFTESTCASE(m_get_userstatus_size);
diff --git a/auto_tests/network_test.c b/auto_tests/network_test.c
index 3b4b50cd..afd90e7a 100644
--- a/auto_tests/network_test.c
+++ b/auto_tests/network_test.c
@@ -136,9 +136,8 @@ START_TEST(test_struct_sizes)
136{ 136{
137 ck_assert_msg(sizeof(IP4) == 4, "sizeof(IP4): expected result 4, got %u.", sizeof(IP4)); 137 ck_assert_msg(sizeof(IP4) == 4, "sizeof(IP4): expected result 4, got %u.", sizeof(IP4));
138 ck_assert_msg(sizeof(IP6) == 16, "sizeof(IP6): expected result 16, got %u.", sizeof(IP6)); 138 ck_assert_msg(sizeof(IP6) == 16, "sizeof(IP6): expected result 16, got %u.", sizeof(IP6));
139 ck_assert_msg(sizeof(IP) == 20, "sizeof(IP): expected result 20, got %u.", sizeof(IP)); 139 ck_assert_msg(sizeof(IP) == 17, "sizeof(IP): expected result 17, got %u.", sizeof(IP));
140 ck_assert_msg(sizeof(IP_Port) == 24, "sizeof(IP_Port): expected result 24, got %u.", sizeof(IP_Port)); 140 ck_assert_msg(sizeof(IP_Port) == 19, "sizeof(IP_Port): expected result 19, got %u.", sizeof(IP_Port));
141 ck_assert_msg(sizeof(IP4_Port) == 8, "sizeof(IP4_Port): expected result 8, got %u.", sizeof(IP4_Port));
142} 141}
143END_TEST 142END_TEST
144 143
diff --git a/auto_tests/onion_test.c b/auto_tests/onion_test.c
index 2f244693..4489a894 100644
--- a/auto_tests/onion_test.c
+++ b/auto_tests/onion_test.c
@@ -80,7 +80,7 @@ static int handle_test_3(void *object, IP_Port source, uint8_t *packet, uint32_t
80 80
81 uint8_t plain[1 + crypto_hash_sha256_BYTES]; 81 uint8_t plain[1 + crypto_hash_sha256_BYTES];
82 //print_client_id(packet, length); 82 //print_client_id(packet, length);
83 int len = decrypt_data(test_3_pub_key, onion->dht->c->self_secret_key, packet + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH, 83 int len = decrypt_data(test_3_pub_key, onion->dht->self_secret_key, packet + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH,
84 packet + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH + crypto_box_NONCEBYTES, 84 packet + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH + crypto_box_NONCEBYTES,
85 1 + crypto_hash_sha256_BYTES + crypto_box_MACBYTES, plain); 85 1 + crypto_hash_sha256_BYTES + crypto_box_MACBYTES, plain);
86 86
@@ -111,7 +111,7 @@ static int handle_test_4(void *object, IP_Port source, uint8_t *packet, uint32_t
111 if (memcmp(nonce, packet + 1, crypto_box_NONCEBYTES) != 0) 111 if (memcmp(nonce, packet + 1, crypto_box_NONCEBYTES) != 0)
112 return 1; 112 return 1;
113 113
114 int len = decrypt_data(packet + 1 + crypto_box_NONCEBYTES, onion->dht->c->self_secret_key, packet + 1, 114 int len = decrypt_data(packet + 1 + crypto_box_NONCEBYTES, onion->dht->self_secret_key, packet + 1,
115 packet + 1 + crypto_box_NONCEBYTES + crypto_box_PUBLICKEYBYTES, sizeof("Install gentoo") + crypto_box_MACBYTES, plain); 115 packet + 1 + crypto_box_NONCEBYTES + crypto_box_PUBLICKEYBYTES, sizeof("Install gentoo") + crypto_box_MACBYTES, plain);
116 116
117 if (len == -1) 117 if (len == -1)
@@ -129,8 +129,8 @@ START_TEST(test_basic)
129 IP ip; 129 IP ip;
130 ip_init(&ip, 1); 130 ip_init(&ip, 1);
131 ip.ip6.uint8[15] = 1; 131 ip.ip6.uint8[15] = 1;
132 Onion *onion1 = new_onion(new_DHT(new_net_crypto(new_networking(ip, 34567)))); 132 Onion *onion1 = new_onion(new_DHT(new_networking(ip, 34567)));
133 Onion *onion2 = new_onion(new_DHT(new_net_crypto(new_networking(ip, 34568)))); 133 Onion *onion2 = new_onion(new_DHT(new_networking(ip, 34568)));
134 ck_assert_msg((onion1 != NULL) && (onion2 != NULL), "Onion failed initializing."); 134 ck_assert_msg((onion1 != NULL) && (onion2 != NULL), "Onion failed initializing.");
135 networking_registerhandler(onion2->net, 'I', &handle_test_1, onion2); 135 networking_registerhandler(onion2->net, 'I', &handle_test_1, onion2);
136 136
@@ -176,26 +176,30 @@ START_TEST(test_basic)
176 ck_assert_msg((onion1_a != NULL) && (onion2_a != NULL), "Onion_Announce failed initializing."); 176 ck_assert_msg((onion1_a != NULL) && (onion2_a != NULL), "Onion_Announce failed initializing.");
177 uint8_t zeroes[64] = {0}; 177 uint8_t zeroes[64] = {0};
178 randombytes(sb_data, sizeof(sb_data)); 178 randombytes(sb_data, sizeof(sb_data));
179 uint64_t s;
180 memcpy(&s, sb_data, sizeof(uint64_t));
179 memcpy(test_3_pub_key, nodes[3].client_id, crypto_box_PUBLICKEYBYTES); 181 memcpy(test_3_pub_key, nodes[3].client_id, crypto_box_PUBLICKEYBYTES);
180 ret = send_announce_request(onion1->net, &path, nodes[3], onion1->dht->c->self_public_key, 182 ret = send_announce_request(onion1->net, &path, nodes[3], onion1->dht->self_public_key,
181 onion1->dht->c->self_secret_key, 183 onion1->dht->self_secret_key,
182 zeroes, onion1->dht->c->self_public_key, onion1->dht->c->self_public_key, sb_data); 184 zeroes, onion1->dht->self_public_key, onion1->dht->self_public_key, s);
183 ck_assert_msg(ret == 0, "Failed to create/send onion announce_request packet."); 185 ck_assert_msg(ret == 0, "Failed to create/send onion announce_request packet.");
184 handled_test_3 = 0; 186 handled_test_3 = 0;
185 187
186 while (handled_test_3 == 0) { 188 while (handled_test_3 == 0) {
187 do_onion(onion1); 189 do_onion(onion1);
188 do_onion(onion2); 190 do_onion(onion2);
191 c_sleep(50);
189 } 192 }
190 193
191 randombytes(sb_data, sizeof(sb_data)); 194 randombytes(sb_data, sizeof(sb_data));
195 memcpy(&s, sb_data, sizeof(uint64_t));
192 memcpy(onion2_a->entries[1].public_key, onion2->dht->self_public_key, crypto_box_PUBLICKEYBYTES); 196 memcpy(onion2_a->entries[1].public_key, onion2->dht->self_public_key, crypto_box_PUBLICKEYBYTES);
193 onion2_a->entries[1].time = unix_time(); 197 onion2_a->entries[1].time = unix_time();
194 networking_registerhandler(onion1->net, NET_PACKET_ONION_DATA_RESPONSE, &handle_test_4, onion1); 198 networking_registerhandler(onion1->net, NET_PACKET_ONION_DATA_RESPONSE, &handle_test_4, onion1);
195 send_announce_request(onion1->net, &path, nodes[3], onion1->dht->c->self_public_key, onion1->dht->c->self_secret_key, 199 send_announce_request(onion1->net, &path, nodes[3], onion1->dht->self_public_key, onion1->dht->self_secret_key,
196 test_3_ping_id, onion1->dht->c->self_public_key, onion1->dht->c->self_public_key, sb_data); 200 test_3_ping_id, onion1->dht->self_public_key, onion1->dht->self_public_key, s);
197 201
198 while (memcmp(onion2_a->entries[ONION_ANNOUNCE_MAX_ENTRIES - 2].public_key, onion1->dht->c->self_public_key, 202 while (memcmp(onion2_a->entries[ONION_ANNOUNCE_MAX_ENTRIES - 2].public_key, onion1->dht->self_public_key,
199 crypto_box_PUBLICKEYBYTES) != 0) { 203 crypto_box_PUBLICKEYBYTES) != 0) {
200 do_onion(onion1); 204 do_onion(onion1);
201 do_onion(onion2); 205 do_onion(onion2);
@@ -203,12 +207,12 @@ START_TEST(test_basic)
203 } 207 }
204 208
205 c_sleep(1000); 209 c_sleep(1000);
206 Onion *onion3 = new_onion(new_DHT(new_net_crypto(new_networking(ip, 34569)))); 210 Onion *onion3 = new_onion(new_DHT(new_networking(ip, 34569)));
207 ck_assert_msg((onion3 != NULL), "Onion failed initializing."); 211 ck_assert_msg((onion3 != NULL), "Onion failed initializing.");
208 212
209 new_nonce(nonce); 213 new_nonce(nonce);
210 ret = send_data_request(onion3->net, &path, nodes[3].ip_port, onion1->dht->c->self_public_key, 214 ret = send_data_request(onion3->net, &path, nodes[3].ip_port, onion1->dht->self_public_key,
211 onion1->dht->c->self_public_key, 215 onion1->dht->self_public_key,
212 nonce, (uint8_t *)"Install gentoo", sizeof("Install gentoo")); 216 nonce, (uint8_t *)"Install gentoo", sizeof("Install gentoo"));
213 ck_assert_msg(ret == 0, "Failed to create/send onion data_request packet."); 217 ck_assert_msg(ret == 0, "Failed to create/send onion data_request packet.");
214 handled_test_4 = 0; 218 handled_test_4 = 0;
@@ -233,10 +237,10 @@ Onions *new_onions(uint16_t port)
233 ip_init(&ip, 1); 237 ip_init(&ip, 1);
234 ip.ip6.uint8[15] = 1; 238 ip.ip6.uint8[15] = 1;
235 Onions *on = malloc(sizeof(Onions)); 239 Onions *on = malloc(sizeof(Onions));
236 DHT *dht = new_DHT(new_net_crypto(new_networking(ip, port))); 240 DHT *dht = new_DHT(new_networking(ip, port));
237 on->onion = new_onion(dht); 241 on->onion = new_onion(dht);
238 on->onion_a = new_onion_announce(dht); 242 on->onion_a = new_onion_announce(dht);
239 on->onion_c = new_onion_client(dht); 243 on->onion_c = new_onion_client(new_net_crypto(dht));
240 244
241 if (on->onion && on->onion_a && on->onion_c) 245 if (on->onion && on->onion_a && on->onion_c)
242 return on; 246 return on;
@@ -297,8 +301,8 @@ START_TEST(test_announce)
297 c_sleep(50); 301 c_sleep(50);
298 } 302 }
299 303
300 onion_addfriend(onions[7]->onion_c, onions[37]->onion->dht->c->self_public_key); 304 onion_addfriend(onions[7]->onion_c, onions[37]->onion_c->c->self_public_key);
301 int frnum = onion_addfriend(onions[37]->onion_c, onions[7]->onion->dht->c->self_public_key); 305 int frnum = onion_addfriend(onions[37]->onion_c, onions[7]->onion_c->c->self_public_key);
302 306
303 int ok = -1; 307 int ok = -1;
304 308
diff --git a/auto_tests/tox_test.c b/auto_tests/tox_test.c
index 1e01aee7..9b63b35b 100644
--- a/auto_tests/tox_test.c
+++ b/auto_tests/tox_test.c
@@ -96,21 +96,26 @@ void file_print_control(Tox *m, int friendnumber, uint8_t send_recieve, uint8_t
96} 96}
97 97
98uint64_t size_recv; 98uint64_t size_recv;
99uint8_t num;
99void write_file(Tox *m, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata) 100void write_file(Tox *m, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata)
100{ 101{
101 if (*((uint32_t *)userdata) != 974536) 102 if (*((uint32_t *)userdata) != 974536)
102 return; 103 return;
103 104
104 uint8_t *f_data = malloc(length); 105 uint8_t *f_data = malloc(length);
105 memset(f_data, 6, length); 106 memset(f_data, num, length);
107 ++num;
106 108
107 if (memcmp(f_data, data, length) == 0) 109 if (memcmp(f_data, data, length) == 0) {
108 size_recv += length; 110 size_recv += length;
111 } else {
112 printf("FILE_CORRUPTED\n");
113 }
109} 114}
110 115
111START_TEST(test_few_clients) 116START_TEST(test_few_clients)
112{ 117{
113 long long unsigned int cur_time = time(NULL); 118 long long unsigned int con_time, cur_time = time(NULL);
114 Tox *tox1 = tox_new(TOX_ENABLE_IPV6_DEFAULT); 119 Tox *tox1 = tox_new(TOX_ENABLE_IPV6_DEFAULT);
115 Tox *tox2 = tox_new(TOX_ENABLE_IPV6_DEFAULT); 120 Tox *tox2 = tox_new(TOX_ENABLE_IPV6_DEFAULT);
116 Tox *tox3 = tox_new(TOX_ENABLE_IPV6_DEFAULT); 121 Tox *tox3 = tox_new(TOX_ENABLE_IPV6_DEFAULT);
@@ -131,6 +136,7 @@ START_TEST(test_few_clients)
131 136
132 if (tox_isconnected(tox1) && tox_isconnected(tox2) && tox_isconnected(tox3) && off) { 137 if (tox_isconnected(tox1) && tox_isconnected(tox2) && tox_isconnected(tox3) && off) {
133 printf("Toxes are online, took %llu seconds\n", time(NULL) - cur_time); 138 printf("Toxes are online, took %llu seconds\n", time(NULL) - cur_time);
139 con_time = time(NULL);
134 off = 0; 140 off = 0;
135 } 141 }
136 142
@@ -141,7 +147,7 @@ START_TEST(test_few_clients)
141 c_sleep(50); 147 c_sleep(50);
142 } 148 }
143 149
144 printf("tox clients connected\n"); 150 printf("tox clients connected took %llu seconds\n", time(NULL) - con_time);
145 to_compare = 974536; 151 to_compare = 974536;
146 tox_callback_friend_message(tox3, print_message, &to_compare); 152 tox_callback_friend_message(tox3, print_message, &to_compare);
147 tox_send_message(tox2, 0, (uint8_t *)"Install Gentoo", sizeof("Install Gentoo")); 153 tox_send_message(tox2, 0, (uint8_t *)"Install Gentoo", sizeof("Install Gentoo"));
@@ -227,8 +233,8 @@ START_TEST(test_few_clients)
227 ck_assert_msg(fnum != -1, "tox_new_file_sender fail"); 233 ck_assert_msg(fnum != -1, "tox_new_file_sender fail");
228 int fpiece_size = tox_file_data_size(tox2, 0); 234 int fpiece_size = tox_file_data_size(tox2, 0);
229 uint8_t *f_data = malloc(fpiece_size); 235 uint8_t *f_data = malloc(fpiece_size);
230 memset(f_data, 6, fpiece_size); 236 uint8_t num = 0;
231 237 memset(f_data, num, fpiece_size);
232 while (1) { 238 while (1) {
233 file_sent = 0; 239 file_sent = 0;
234 tox_do(tox1); 240 tox_do(tox1);
@@ -241,6 +247,8 @@ START_TEST(test_few_clients)
241 sendf_ok = 0; 247 sendf_ok = 0;
242 tox_file_send_control(tox2, 0, 0, fnum, TOX_FILECONTROL_FINISHED, NULL, 0); 248 tox_file_send_control(tox2, 0, 0, fnum, TOX_FILECONTROL_FINISHED, NULL, 0);
243 } 249 }
250 ++num;
251 memset(f_data, num, fpiece_size);
244 252
245 totalf_size -= fpiece_size; 253 totalf_size -= fpiece_size;
246 } 254 }
@@ -284,6 +292,12 @@ START_TEST(test_many_clients)
284loop_top: 292loop_top:
285 pairs[i].tox1 = rand() % NUM_TOXES; 293 pairs[i].tox1 = rand() % NUM_TOXES;
286 pairs[i].tox2 = (pairs[i].tox1 + rand() % (NUM_TOXES - 1) + 1) % NUM_TOXES; 294 pairs[i].tox2 = (pairs[i].tox1 + rand() % (NUM_TOXES - 1) + 1) % NUM_TOXES;
295
296 for (j = 0; j < i; ++j) {
297 if (pairs[j].tox2 == pairs[i].tox1 && pairs[j].tox1 == pairs[i].tox2)
298 goto loop_top;
299 }
300
287 tox_get_address(toxes[pairs[i].tox1], address); 301 tox_get_address(toxes[pairs[i].tox1], address);
288 int test = tox_add_friend(toxes[pairs[i].tox2], address, (uint8_t *)"Gentoo", 7); 302 int test = tox_add_friend(toxes[pairs[i].tox2], address, (uint8_t *)"Gentoo", 7);
289 303
@@ -331,7 +345,7 @@ Suite *tox_suite(void)
331 Suite *s = suite_create("Tox"); 345 Suite *s = suite_create("Tox");
332 346
333 DEFTESTCASE_SLOW(few_clients, 50); 347 DEFTESTCASE_SLOW(few_clients, 50);
334 DEFTESTCASE_SLOW(many_clients, 300); 348 DEFTESTCASE_SLOW(many_clients, 150);
335 return s; 349 return s;
336} 350}
337 351