summaryrefslogtreecommitdiff
path: root/auto_tests/toxav_many_test.c
diff options
context:
space:
mode:
authormannol <eniz_vukovic@hotmail.com>2015-04-30 00:40:30 +0200
committermannol <eniz_vukovic@hotmail.com>2015-04-30 00:40:30 +0200
commitb2b11f0fba52bcba5acb3ba9e4aa4da119d76093 (patch)
tree9a990d3c14b668fd10044233b1260a10ac726c57 /auto_tests/toxav_many_test.c
parentd8c34f4ffafedc256e9a52af5e591c4998c0003d (diff)
Added many test and fixed various warnings
Diffstat (limited to 'auto_tests/toxav_many_test.c')
-rw-r--r--auto_tests/toxav_many_test.c168
1 files changed, 149 insertions, 19 deletions
diff --git a/auto_tests/toxav_many_test.c b/auto_tests/toxav_many_test.c
index ef59b2b2..84f94e96 100644
--- a/auto_tests/toxav_many_test.c
+++ b/auto_tests/toxav_many_test.c
@@ -31,22 +31,34 @@
31typedef struct { 31typedef struct {
32 bool incoming; 32 bool incoming;
33 uint32_t state; 33 uint32_t state;
34
35} CallControl; 34} CallControl;
36 35
36typedef struct {
37 ToxAV* AliceAV;
38 ToxAV* BobAV;
39 CallControl* AliceCC;
40 CallControl* BobCC;
41 uint32_t friend_number;
42} thread_data;
37 43
38/** 44/**
39 * Callbacks 45 * Callbacks
40 */ 46 */
41void t_toxav_call_cb(ToxAV *av, uint32_t friend_number, bool audio_enabled, bool video_enabled, void *user_data) 47void t_toxav_call_cb(ToxAV *av, uint32_t friend_number, bool audio_enabled, bool video_enabled, void *user_data)
42{ 48{
49 (void) av;
50 (void) audio_enabled;
51 (void) video_enabled;
52
43 printf("Handling CALL callback\n"); 53 printf("Handling CALL callback\n");
44 ((CallControl*)user_data)->incoming = true; 54 ((CallControl*)user_data)[friend_number].incoming = true;
45} 55}
46void t_toxav_call_state_cb(ToxAV *av, uint32_t friend_number, uint32_t state, void *user_data) 56void t_toxav_call_state_cb(ToxAV *av, uint32_t friend_number, uint32_t state, void *user_data)
47{ 57{
58 (void) av;
59
48 printf("Handling CALL STATE callback: %d\n", state); 60 printf("Handling CALL STATE callback: %d\n", state);
49 ((CallControl*)user_data)->state = state; 61 ((CallControl*)user_data)[friend_number].state = state;
50} 62}
51void t_toxav_receive_video_frame_cb(ToxAV *av, uint32_t friend_number, 63void t_toxav_receive_video_frame_cb(ToxAV *av, uint32_t friend_number,
52 uint16_t width, uint16_t height, 64 uint16_t width, uint16_t height,
@@ -83,6 +95,7 @@ void t_toxav_receive_audio_frame_cb(ToxAV *av, uint32_t friend_number,
83} 95}
84void t_accept_friend_request_cb(Tox *m, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata) 96void t_accept_friend_request_cb(Tox *m, const uint8_t *public_key, const uint8_t *data, size_t length, void *userdata)
85{ 97{
98 (void) userdata;
86 if (length == 7 && memcmp("gentoo", data, 7) == 0) { 99 if (length == 7 && memcmp("gentoo", data, 7) == 0) {
87 assert(tox_friend_add_norequest(m, public_key, NULL) != (uint32_t) ~0); 100 assert(tox_friend_add_norequest(m, public_key, NULL) != (uint32_t) ~0);
88 } 101 }
@@ -106,11 +119,82 @@ ToxAV* setup_av_instance(Tox* tox, CallControl *CC)
106 119
107 return av; 120 return av;
108} 121}
109void* call_thread(ToxAV* Alice, ToxAV* Bob) 122void* call_thread(void* pd)
110{ 123{
124 ToxAV* AliceAV = ((thread_data*) pd)->AliceAV;
125 ToxAV* BobAV = ((thread_data*) pd)->BobAV;
126 CallControl* AliceCC = ((thread_data*) pd)->AliceCC;
127 CallControl* BobCC = ((thread_data*) pd)->BobCC;
128 uint32_t friend_number = ((thread_data*) pd)->friend_number;
129
130
131 memset(AliceCC, 0, sizeof(CallControl));
132 memset(BobCC, 0, sizeof(CallControl));
133
134 { /* Call */
135 TOXAV_ERR_CALL rc;
136 toxav_call(AliceAV, friend_number, 48, 3000, &rc);
137
138 if (rc != TOXAV_ERR_CALL_OK) {
139 printf("toxav_call failed: %d\n", rc);
140 exit(1);
141 }
142 }
143
144 while (!BobCC->incoming)
145 c_sleep(10);
146
147 { /* Answer */
148 TOXAV_ERR_ANSWER rc;
149 toxav_answer(BobAV, 0, 8, 500, &rc);
150
151 if (rc != TOXAV_ERR_ANSWER_OK) {
152 printf("toxav_answer failed: %d\n", rc);
153 exit(1);
154 }
155 }
156
157 c_sleep(30);
158
159 int16_t PCM[960];
160 uint8_t video_y[800*600];
161 uint8_t video_u[800*600 / 2];
162 uint8_t video_v[800*600 / 2];
163
164 memset(PCM, 0, sizeof(PCM));
165 memset(video_y, 0, sizeof(video_y));
166 memset(video_u, 0, sizeof(video_u));
167 memset(video_v, 0, sizeof(video_v));
168
169 time_t start_time = time(NULL);
170 while(time(NULL) - start_time < 9) {
171 toxav_iterate(AliceAV);
172 toxav_iterate(BobAV);
173
174 toxav_send_audio_frame(AliceAV, friend_number, PCM, 960, 1, 48000, NULL);
175 toxav_send_audio_frame(BobAV, 0, PCM, 960, 1, 48000, NULL);
176
177 toxav_send_video_frame(AliceAV, friend_number, 800, 600, video_y, video_u, video_v, NULL);
178 toxav_send_video_frame(BobAV, 0, 800, 600, video_y, video_u, video_v, NULL);
179
180 c_sleep(10);
181 }
182
183 { /* Hangup */
184 TOXAV_ERR_CALL_CONTROL rc;
185 toxav_call_control(AliceAV, friend_number, TOXAV_CALL_CONTROL_CANCEL, &rc);
186
187 if (rc != TOXAV_ERR_CALL_CONTROL_OK) {
188 printf("toxav_call_control failed: %d\n", rc);
189 exit(1);
190 }
191 }
192
193 c_sleep(30);
111 pthread_exit(NULL); 194 pthread_exit(NULL);
112} 195}
113 196
197
114START_TEST(test_AV_three_calls) 198START_TEST(test_AV_three_calls)
115{ 199{
116 Tox* Alice, *bootstrap, *Bobs[3]; 200 Tox* Alice, *bootstrap, *Bobs[3];
@@ -118,7 +202,6 @@ START_TEST(test_AV_three_calls)
118 202
119 CallControl AliceCC[3], BobsCC[3]; 203 CallControl AliceCC[3], BobsCC[3];
120 204
121 int i = 0;
122 { 205 {
123 TOX_ERR_NEW error; 206 TOX_ERR_NEW error;
124 207
@@ -128,10 +211,14 @@ START_TEST(test_AV_three_calls)
128 Alice = tox_new(NULL, NULL, 0, &error); 211 Alice = tox_new(NULL, NULL, 0, &error);
129 assert(error == TOX_ERR_NEW_OK); 212 assert(error == TOX_ERR_NEW_OK);
130 213
131 for (; i < 3; i ++) { 214 Bobs[0] = tox_new(NULL, NULL, 0, &error);
132 BobsAV[i] = tox_new(NULL, NULL, 0, &error); 215 assert(error == TOX_ERR_NEW_OK);
133 assert(error == TOX_ERR_NEW_OK); 216
134 } 217 Bobs[1] = tox_new(NULL, NULL, 0, &error);
218 assert(error == TOX_ERR_NEW_OK);
219
220 Bobs[2] = tox_new(NULL, NULL, 0, &error);
221 assert(error == TOX_ERR_NEW_OK);
135 } 222 }
136 223
137 printf("Created 5 instances of Tox\n"); 224 printf("Created 5 instances of Tox\n");
@@ -178,25 +265,65 @@ START_TEST(test_AV_three_calls)
178 c_sleep(20); 265 c_sleep(20);
179 } 266 }
180 267
181 AliceAV = setup_av_instance(Alice, &AliceCC); 268 AliceAV = setup_av_instance(Alice, AliceCC);
182 BobsAV[0] = setup_av_instance(Bobs[0], &BobsCC[0]); 269 BobsAV[0] = setup_av_instance(Bobs[0], BobsCC + 0);
183 BobsAV[1] = setup_av_instance(Bobs[1], &BobsCC[1]); 270 BobsAV[1] = setup_av_instance(Bobs[1], BobsCC + 1);
184 BobsAV[2] = setup_av_instance(Bobs[2], &BobsCC[2]); 271 BobsAV[2] = setup_av_instance(Bobs[2], BobsCC + 2);
185 272
186 printf("Created 4 instances of ToxAV\n"); 273 printf("Created 4 instances of ToxAV\n");
187 printf("All set after %llu seconds!\n", time(NULL) - cur_time); 274 printf("All set after %llu seconds!\n", time(NULL) - cur_time);
188 275
276 thread_data tds[3];
277 tds[0].AliceAV = AliceAV;
278 tds[0].BobAV = BobsAV[0];
279 tds[0].AliceCC = AliceCC + 0;
280 tds[0].BobCC = BobsCC + 0;
281 tds[0].friend_number = 0;
189 282
283 tds[1].AliceAV = AliceAV;
284 tds[1].BobAV = BobsAV[1];
285 tds[1].AliceCC = AliceCC + 1;
286 tds[1].BobCC = BobsCC + 1;
287 tds[1].friend_number = 1;
190 288
191 tox_kill(bootstrap); 289 tds[2].AliceAV = AliceAV;
192 tox_kill(Alice); 290 tds[2].BobAV = BobsAV[2];
193 toxav_kill(AliceAV); 291 tds[2].AliceCC = AliceCC + 2;
292 tds[2].BobCC = BobsCC + 2;
293 tds[2].friend_number = 2;
194 294
195 for (i = 0; i < 3; i ++) { 295 pthread_t tids[3];
196 tox_kill(Bobs[i]); 296 (void) pthread_create(tids + 0, NULL, call_thread, tds + 0);
197 toxav_kill(BobsAV[i]); 297 (void) pthread_create(tids + 1, NULL, call_thread, tds + 1);
298 (void) pthread_create(tids + 2, NULL, call_thread, tds + 2);
299
300 (void) pthread_detach(tids[0]);
301 (void) pthread_detach(tids[1]);
302 (void) pthread_detach(tids[2]);
303
304 time_t start_time = time(NULL);
305 while (time(NULL) - start_time < 10) {
306 tox_iterate(Alice);
307 tox_iterate(Bobs[0]);
308 tox_iterate(Bobs[1]);
309 tox_iterate(Bobs[2]);
310 c_sleep(20);
198 } 311 }
199 312
313 (void) pthread_join(tids[0], NULL);
314 (void) pthread_join(tids[1], NULL);
315 (void) pthread_join(tids[2], NULL);
316
317 toxav_kill(BobsAV[0]);
318 toxav_kill(BobsAV[1]);
319 toxav_kill(BobsAV[2]);
320 toxav_kill(AliceAV);
321 tox_kill(Bobs[0]);
322 tox_kill(Bobs[1]);
323 tox_kill(Bobs[2]);
324 tox_kill(Alice);
325 tox_kill(bootstrap);
326
200 printf("\nTest successful!\n"); 327 printf("\nTest successful!\n");
201} 328}
202END_TEST 329END_TEST
@@ -218,6 +345,9 @@ Suite *tox_suite(void)
218 345
219int main(int argc, char *argv[]) 346int main(int argc, char *argv[])
220{ 347{
348 (void) argc;
349 (void) argv;
350
221 Suite *tox = tox_suite(); 351 Suite *tox = tox_suite();
222 SRunner *test_runner = srunner_create(tox); 352 SRunner *test_runner = srunner_create(tox);
223 353