mirror of
https://github.com/TokTok/c-toxcore
synced 2026-05-13 21:33:28 +00:00
Added many test and fixed various warnings
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
+149
-19
@@ -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);
|
||||
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
|
||||
+8
-1
@@ -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;
|
||||
|
||||
|
||||
+6
-5
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user