From b2b11f0fba52bcba5acb3ba9e4aa4da119d76093 Mon Sep 17 00:00:00 2001 From: mannol Date: Thu, 30 Apr 2015 00:40:30 +0200 Subject: [PATCH] Added many test and fixed various warnings --- auto_tests/Makefile.inc | 10 +- auto_tests/toxav_basic_test.c | 13 +++ auto_tests/toxav_many_test.c | 168 ++++++++++++++++++++++++++++++---- toxav/msi.c | 2 +- toxav/rtp.c | 9 +- toxav/toxav.c | 11 ++- 6 files changed, 182 insertions(+), 31 deletions(-) diff --git a/auto_tests/Makefile.inc b/auto_tests/Makefile.inc index 741ca7faf..d78a6a5a3 100644 --- a/auto_tests/Makefile.inc +++ b/auto_tests/Makefile.inc @@ -21,8 +21,8 @@ AUTOTEST_LDADD = \ if BUILD_AV -TESTS += toxav_basic_test #toxav_many_test -check_PROGRAMS += toxav_basic_test #toxav_many_test +TESTS += toxav_basic_test toxav_many_test +check_PROGRAMS += toxav_basic_test toxav_many_test AUTOTEST_LDADD += libtoxav.la endif @@ -90,11 +90,11 @@ toxav_basic_test_CFLAGS = $(AUTOTEST_CFLAGS) toxav_basic_test_LDADD = $(AUTOTEST_LDADD) $(AV_LIBS) -#toxav_many_test_SOURCES = ../auto_tests/toxav_many_test.c +toxav_many_test_SOURCES = ../auto_tests/toxav_many_test.c -#toxav_many_test_CFLAGS = $(AUTOTEST_CFLAGS) +toxav_many_test_CFLAGS = $(AUTOTEST_CFLAGS) -#toxav_many_test_LDADD = $(AUTOTEST_LDADD) +toxav_many_test_LDADD = $(AUTOTEST_LDADD) endif endif diff --git a/auto_tests/toxav_basic_test.c b/auto_tests/toxav_basic_test.c index 7598c0db9..423cd03de 100644 --- a/auto_tests/toxav_basic_test.c +++ b/auto_tests/toxav_basic_test.c @@ -49,11 +49,19 @@ typedef struct { */ void t_toxav_call_cb(ToxAV *av, uint32_t friend_number, bool audio_enabled, bool video_enabled, void *user_data) { + (void) av; + (void) friend_number; + (void) audio_enabled; + (void) video_enabled; + printf("Handling CALL callback\n"); ((CallControl*)user_data)->incoming = true; } void t_toxav_call_state_cb(ToxAV *av, uint32_t friend_number, uint32_t state, void *user_data) { + (void) av; + (void) friend_number; + printf("Handling CALL STATE callback: %d\n", state); ((CallControl*)user_data)->state = state; } @@ -92,6 +100,8 @@ void t_toxav_receive_audio_frame_cb(ToxAV *av, uint32_t friend_number, } void t_accept_friend_request_cb(Tox *m, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata) { + (void) userdata; + if (length == 7 && memcmp("gentoo", data, 7) == 0) { assert(tox_friend_add_norequest(m, public_key, NULL) != (uint32_t) ~0); } @@ -433,6 +443,9 @@ Suite *tox_suite(void) } int main(int argc, char *argv[]) { + (void) argc; + (void) argv; + Suite *tox = tox_suite(); SRunner *test_runner = srunner_create(tox); diff --git a/auto_tests/toxav_many_test.c b/auto_tests/toxav_many_test.c index ef59b2b2e..84f94e961 100644 --- a/auto_tests/toxav_many_test.c +++ b/auto_tests/toxav_many_test.c @@ -31,22 +31,34 @@ typedef struct { bool incoming; uint32_t state; - } CallControl; +typedef struct { + ToxAV* AliceAV; + ToxAV* BobAV; + CallControl* AliceCC; + CallControl* BobCC; + uint32_t friend_number; +} thread_data; /** * Callbacks */ void t_toxav_call_cb(ToxAV *av, uint32_t friend_number, bool audio_enabled, bool video_enabled, void *user_data) { + (void) av; + (void) audio_enabled; + (void) video_enabled; + printf("Handling CALL callback\n"); - ((CallControl*)user_data)->incoming = true; + ((CallControl*)user_data)[friend_number].incoming = true; } void t_toxav_call_state_cb(ToxAV *av, uint32_t friend_number, uint32_t state, void *user_data) { + (void) av; + printf("Handling CALL STATE callback: %d\n", state); - ((CallControl*)user_data)->state = state; + ((CallControl*)user_data)[friend_number].state = state; } void t_toxav_receive_video_frame_cb(ToxAV *av, uint32_t friend_number, uint16_t width, uint16_t height, @@ -83,6 +95,7 @@ void t_toxav_receive_audio_frame_cb(ToxAV *av, uint32_t friend_number, } void t_accept_friend_request_cb(Tox *m, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata) { + (void) userdata; if (length == 7 && memcmp("gentoo", data, 7) == 0) { assert(tox_friend_add_norequest(m, public_key, NULL) != (uint32_t) ~0); } @@ -106,11 +119,82 @@ ToxAV* setup_av_instance(Tox* tox, CallControl *CC) return av; } -void* call_thread(ToxAV* Alice, ToxAV* Bob) +void* call_thread(void* pd) { + ToxAV* AliceAV = ((thread_data*) pd)->AliceAV; + ToxAV* BobAV = ((thread_data*) pd)->BobAV; + CallControl* AliceCC = ((thread_data*) pd)->AliceCC; + CallControl* BobCC = ((thread_data*) pd)->BobCC; + uint32_t friend_number = ((thread_data*) pd)->friend_number; + + + memset(AliceCC, 0, sizeof(CallControl)); + memset(BobCC, 0, sizeof(CallControl)); + + { /* Call */ + TOXAV_ERR_CALL rc; + toxav_call(AliceAV, friend_number, 48, 3000, &rc); + + if (rc != TOXAV_ERR_CALL_OK) { + printf("toxav_call failed: %d\n", rc); + exit(1); + } + } + + while (!BobCC->incoming) + c_sleep(10); + + { /* Answer */ + TOXAV_ERR_ANSWER rc; + toxav_answer(BobAV, 0, 8, 500, &rc); + + if (rc != TOXAV_ERR_ANSWER_OK) { + printf("toxav_answer failed: %d\n", rc); + exit(1); + } + } + + c_sleep(30); + + int16_t PCM[960]; + uint8_t video_y[800*600]; + uint8_t video_u[800*600 / 2]; + uint8_t video_v[800*600 / 2]; + + memset(PCM, 0, sizeof(PCM)); + memset(video_y, 0, sizeof(video_y)); + memset(video_u, 0, sizeof(video_u)); + memset(video_v, 0, sizeof(video_v)); + + time_t start_time = time(NULL); + while(time(NULL) - start_time < 9) { + toxav_iterate(AliceAV); + toxav_iterate(BobAV); + + toxav_send_audio_frame(AliceAV, friend_number, PCM, 960, 1, 48000, NULL); + toxav_send_audio_frame(BobAV, 0, PCM, 960, 1, 48000, NULL); + + toxav_send_video_frame(AliceAV, friend_number, 800, 600, video_y, video_u, video_v, NULL); + toxav_send_video_frame(BobAV, 0, 800, 600, video_y, video_u, video_v, NULL); + + c_sleep(10); + } + + { /* Hangup */ + TOXAV_ERR_CALL_CONTROL rc; + toxav_call_control(AliceAV, friend_number, TOXAV_CALL_CONTROL_CANCEL, &rc); + + if (rc != TOXAV_ERR_CALL_CONTROL_OK) { + printf("toxav_call_control failed: %d\n", rc); + exit(1); + } + } + + c_sleep(30); pthread_exit(NULL); } + START_TEST(test_AV_three_calls) { Tox* Alice, *bootstrap, *Bobs[3]; @@ -118,7 +202,6 @@ START_TEST(test_AV_three_calls) CallControl AliceCC[3], BobsCC[3]; - int i = 0; { TOX_ERR_NEW error; @@ -128,10 +211,14 @@ START_TEST(test_AV_three_calls) Alice = tox_new(NULL, NULL, 0, &error); assert(error == TOX_ERR_NEW_OK); - for (; i < 3; i ++) { - BobsAV[i] = tox_new(NULL, NULL, 0, &error); - assert(error == TOX_ERR_NEW_OK); - } + Bobs[0] = tox_new(NULL, NULL, 0, &error); + assert(error == TOX_ERR_NEW_OK); + + Bobs[1] = tox_new(NULL, NULL, 0, &error); + assert(error == TOX_ERR_NEW_OK); + + Bobs[2] = tox_new(NULL, NULL, 0, &error); + assert(error == TOX_ERR_NEW_OK); } printf("Created 5 instances of Tox\n"); @@ -178,25 +265,65 @@ START_TEST(test_AV_three_calls) c_sleep(20); } - AliceAV = setup_av_instance(Alice, &AliceCC); - BobsAV[0] = setup_av_instance(Bobs[0], &BobsCC[0]); - BobsAV[1] = setup_av_instance(Bobs[1], &BobsCC[1]); - BobsAV[2] = setup_av_instance(Bobs[2], &BobsCC[2]); + AliceAV = setup_av_instance(Alice, AliceCC); + BobsAV[0] = setup_av_instance(Bobs[0], BobsCC + 0); + BobsAV[1] = setup_av_instance(Bobs[1], BobsCC + 1); + BobsAV[2] = setup_av_instance(Bobs[2], BobsCC + 2); printf("Created 4 instances of ToxAV\n"); printf("All set after %llu seconds!\n", time(NULL) - cur_time); + thread_data tds[3]; + tds[0].AliceAV = AliceAV; + tds[0].BobAV = BobsAV[0]; + tds[0].AliceCC = AliceCC + 0; + tds[0].BobCC = BobsCC + 0; + tds[0].friend_number = 0; + tds[1].AliceAV = AliceAV; + tds[1].BobAV = BobsAV[1]; + tds[1].AliceCC = AliceCC + 1; + tds[1].BobCC = BobsCC + 1; + tds[1].friend_number = 1; - tox_kill(bootstrap); - tox_kill(Alice); - toxav_kill(AliceAV); + tds[2].AliceAV = AliceAV; + tds[2].BobAV = BobsAV[2]; + tds[2].AliceCC = AliceCC + 2; + tds[2].BobCC = BobsCC + 2; + tds[2].friend_number = 2; - for (i = 0; i < 3; i ++) { - tox_kill(Bobs[i]); - toxav_kill(BobsAV[i]); + pthread_t tids[3]; + (void) pthread_create(tids + 0, NULL, call_thread, tds + 0); + (void) pthread_create(tids + 1, NULL, call_thread, tds + 1); + (void) pthread_create(tids + 2, NULL, call_thread, tds + 2); + + (void) pthread_detach(tids[0]); + (void) pthread_detach(tids[1]); + (void) pthread_detach(tids[2]); + + time_t start_time = time(NULL); + while (time(NULL) - start_time < 10) { + tox_iterate(Alice); + tox_iterate(Bobs[0]); + tox_iterate(Bobs[1]); + tox_iterate(Bobs[2]); + c_sleep(20); } + (void) pthread_join(tids[0], NULL); + (void) pthread_join(tids[1], NULL); + (void) pthread_join(tids[2], NULL); + + toxav_kill(BobsAV[0]); + toxav_kill(BobsAV[1]); + toxav_kill(BobsAV[2]); + toxav_kill(AliceAV); + tox_kill(Bobs[0]); + tox_kill(Bobs[1]); + tox_kill(Bobs[2]); + tox_kill(Alice); + tox_kill(bootstrap); + printf("\nTest successful!\n"); } END_TEST @@ -218,6 +345,9 @@ Suite *tox_suite(void) int main(int argc, char *argv[]) { + (void) argc; + (void) argv; + Suite *tox = tox_suite(); SRunner *test_runner = srunner_create(tox); diff --git a/toxav/msi.c b/toxav/msi.c index f8bc8451b..d68e4a9c5 100644 --- a/toxav/msi.c +++ b/toxav/msi.c @@ -526,7 +526,7 @@ MSICall *new_call ( MSISession *session, uint32_t friend_number ) session->calls = tmp; /* Set fields in between to null */ - int32_t i = session->calls_tail + 1; + uint32_t i = session->calls_tail + 1; for (; i < friend_number; i ++) session->calls[i] = NULL; diff --git a/toxav/rtp.c b/toxav/rtp.c index 2219805be..4ca23d2a6 100644 --- a/toxav/rtp.c +++ b/toxav/rtp.c @@ -243,7 +243,8 @@ int rtp_send_data ( RTPSession *session, const uint8_t *data, uint16_t length, b uint8_t parsed[MAX_RTP_SIZE]; uint8_t *it; - RTPHeader header[1] = {0}; + RTPHeader header[1]; + memset(header, 0, sizeof(header)); ADD_FLAG_VERSION ( header, session->version ); ADD_FLAG_PADDING ( header, session->padding ); @@ -463,6 +464,9 @@ uint8_t *parse_ext_header_out ( const RTPExtHeader *header, uint8_t *payload ) } int handle_rtp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data, uint16_t length, void* object ) { + (void) m; + (void) friendnumber; + RTPSession *session = object; if ( !session || length < 13 || length > MAX_RTP_SIZE ) { @@ -553,6 +557,9 @@ int handle_rtp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data } int handle_rtcp_packet ( Messenger* m, uint32_t friendnumber, const uint8_t* data, uint16_t length, void* object ) { + (void) m; + (void) friendnumber; + if (length < 9) return -1; diff --git a/toxav/toxav.c b/toxav/toxav.c index 25a2857c2..e7807592d 100644 --- a/toxav/toxav.c +++ b/toxav/toxav.c @@ -224,7 +224,7 @@ void toxav_iterate(ToxAV* av) } uint64_t start = current_time_monotonic(); - uint32_t rc = 500; + int32_t rc = 500; ToxAVCall* i = av->calls[av->calls_head]; for (; i; i = i->next) { @@ -292,7 +292,7 @@ void toxav_iterate(ToxAV* av) if (i->msi_call->self_capabilities & msi_CapRVideo && i->msi_call->peer_capabilities & msi_CapSVideo) - rc = MIN(i->video.second->lcfd, rc); + rc = MIN(i->video.second->lcfd, (uint32_t) rc); uint32_t fid = i->friend_number; @@ -821,7 +821,7 @@ bool toxav_send_video_frame(ToxAV* av, uint32_t friend_number, uint16_t width, u } } - if (call->vba.end_time == ~0) + if (call->vba.end_time == (uint64_t) ~0) call->vba.end_time = current_time_monotonic() + BITRATE_CHANGE_TESTING_TIME_MS; } @@ -921,7 +921,7 @@ bool toxav_send_audio_frame(ToxAV* av, uint32_t friend_number, const int16_t* pc rc = TOXAV_ERR_SEND_FRAME_RTP_FAILED; } - if (call->aba.end_time == ~0) + if (call->aba.end_time == (uint64_t) ~0) call->aba.end_time = current_time_monotonic() + BITRATE_CHANGE_TESTING_TIME_MS; } } @@ -1056,6 +1056,7 @@ bool audio_bit_rate_invalid(uint32_t bit_rate) bool video_bit_rate_invalid(uint32_t bit_rate) { + (void) bit_rate; /* TODO: If anyone knows the answer to this one please fill it up */ return false; } @@ -1123,7 +1124,7 @@ ToxAVCall* call_new(ToxAV* av, uint32_t friend_number, TOXAV_ERR_CALL* error) av->calls = tmp; /* Set fields in between to null */ - int32_t i = av->calls_tail + 1; + uint32_t i = av->calls_tail + 1; for (; i < friend_number; i ++) av->calls[i] = NULL;