ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / Examples / Linux / Testbenches / ftp_test / Sources / ardrone_testing_tool.c
1 /**
2  * @file main.c
3  * @author sylvain.gaeremynck@parrot.com
4  * @date 2009/07/01
5  */
6 #include <ardrone_testing_tool.h>
7
8 //ARDroneLib
9 #include <ardrone_tool/ardrone_time.h>
10 #include <ardrone_tool/Navdata/ardrone_navdata_client.h>
11 #include <ardrone_tool/Control/ardrone_control.h>
12 #include <ardrone_tool/UI/ardrone_input.h>
13 #include <ardrone_tool/ardrone_tool_configuration.h>
14
15 //Common
16 #include <config.h>
17 #include <ardrone_api.h>
18
19 //VP_SDK
20 #include <ATcodec/ATcodec_api.h>
21 #include <VP_Os/vp_os_print.h>
22 #include <VP_Os/vp_os_thread.h>
23 #include <VP_Api/vp_api_thread_helper.h>
24 #include <VP_Os/vp_os_signal.h>
25 #include <VP_Os/vp_os_types.h>
26 #include <VP_Os/vp_os_delay.h>
27
28 //Local project
29 #include <UI/gamepad.h>
30 #include <Video/video_stage.h>
31
32 #include <utils/ardrone_ftp.h>
33
34 #include <semaphore.h>
35
36 static int32_t exit_ihm_program = 1;
37
38 /* Implementing Custom methods for the main function of an ARDrone application */
39
40 /* The delegate object calls this method during initialization of an ARDrone application */
41 C_RESULT ardrone_tool_init_custom(int argc, char **argv)
42 {
43   /* Start all threads of your application */
44   START_THREAD( main_application_thread , NULL );
45   return C_OK;
46 }
47
48 /* The delegate object calls this method when the event loop exit */
49 C_RESULT ardrone_tool_shutdown_custom()
50 {
51   /* Relinquish all threads of your application */
52   JOIN_THREAD( main_application_thread );
53   
54   return C_OK;
55 }
56
57 /* The event loop calls this method for the exit condition */
58 bool_t ardrone_tool_exit()
59 {
60   return exit_ihm_program == 0;
61 }
62
63 C_RESULT signal_exit()
64 {
65   exit_ihm_program = 0;
66   
67   return C_OK;
68 }
69
70 PROTO_THREAD_ROUTINE(main_application_thread, data);
71
72 /* Implementing thread table in which you add routines of your application and those provided by the SDK */
73 BEGIN_THREAD_TABLE
74 THREAD_TABLE_ENTRY( main_application_thread, 20 )
75 END_THREAD_TABLE
76   
77 sem_t synchroSem;
78
79 #define BLUE { printf("%s","\033[34;01m"); }
80 #define RED { printf("%s","\033[31;01m"); }
81 #define GREEN { printf("%s","\033[32;01m"); }
82 #define RAZ { printf("%s","\033[0m"); }
83
84 #define TEST_RESULT(result, formatFAIL, formatOK, ...)  \
85   do                                                    \
86     {                                                   \
87       _ftp_status locResult = (result);                 \
88       totalOp++;                                        \
89       if (FTP_FAILED (locResult))                       \
90         {                                               \
91           RED;                                          \
92           printf ("[%i : KO] : ", __LINE__);            \
93           printf (formatFAIL, __VA_ARGS__);             \
94           printf ("\n");                                \
95           RAZ;                                          \
96         }                                               \
97       else                                              \
98         {                                               \
99           GREEN;                                        \
100           printf ("[%i : OK] : ", __LINE__);            \
101           printf (formatOK, __VA_ARGS__);               \
102           printf ("\n");                                \
103           RAZ;                                          \
104           opOk++;                                       \
105         }                                               \
106       if ((FTP_TIMEOUT == locResult) ||                 \
107           (FTP_BUSY == locResult))                      \
108         {                                               \
109           runOperation = 1;                             \
110         }                                               \
111       else                                              \
112         {                                               \
113           runOperation = 0;                             \
114         }                                               \
115     }                                                   \
116   while (0)
117
118 #define COMPUTE_PERCENT_OK                                              \
119   do                                                                    \
120     {                                                                   \
121       if (totalOp> 0)                                                   \
122         {                                                               \
123           float percentOk = (100.0 * opOk) / (1.0 * totalOp);           \
124           if (90.0 < percentOk)                                         \
125             {                                                           \
126               GREEN;                                                    \
127             }                                                           \
128           else                                                          \
129             {                                                           \
130               RED;                                                      \
131             }                                                           \
132           printf ("Success of %llu operations on %llu (%6.2f %%)\n", opOk, totalOp, percentOk); \
133           RAZ;                                                          \
134         }                                                               \
135     } while (0)
136
137
138 #define TEST_ABORTION(abortFunc)                                \
139   do                                                            \
140     {                                                           \
141       _ftp_status locStat = (abortFunc);                        \
142       totalOp++;                                                \
143       switch (locStat)                                          \
144         {                                                       \
145         case FTP_SUCCESS:                                       \
146           GREEN;                                                \
147           printf ("[%i : OK] : ", __LINE__);                    \
148           printf ("Abortion successfull\n");                    \
149           RAZ;                                                  \
150           opOk++;                                               \
151           break;                                                \
152         case FTP_SAMESIZE:                                      \
153           RED;                                                  \
154           printf ("[%i : KO] : ", __LINE__);                    \
155           printf ("Abortion failed, op was not running\n");     \
156           RAZ;                                                  \
157           break;                                                \
158         case FTP_FAIL:                                          \
159         default:                                                \
160           RED;                                                  \
161           printf ("[%i : KO] : ", __LINE__);                    \
162           printf ("Unknown result\n");                          \
163           RAZ;                                                  \
164           break;                                                \
165         }                                                       \
166     } while (0)                                                 \
167     
168 #define WAIT_COND(result)                       \
169   do                                            \
170     {                                           \
171       sem_wait (&synchroSem);                   \
172     } while (0)
173
174
175 #define SEND_COND                               \
176   do                                            \
177     {                                           \
178       sem_post (&synchroSem);                   \
179     }                                           \
180   while (0)
181
182 _ftp_status globalStatus;
183 int runOperation = 1;
184 char *listBuffer = NULL;
185
186 void
187 ftpCallback (_ftp_status status, void *arg, _ftp_t *callingFtp)
188 {
189   float percent = (NULL != arg) ? *(float *)arg : -1.0;
190   if (NULL != arg && FTP_SUCCESS == status) { listBuffer = arg; }
191   globalStatus = status;
192   static int calls = 0;
193 #define CALLBACK_FORMAT "Callback called with status %s\n"
194 #ifdef DEBUG
195 #define PRINT_CALLBACK_FORMAT(statusString) { printf (CALLBACK_FORMAT, statusString); calls++; }
196 #else
197 #define PRINT_CALLBACK_FORMAT(statusString) { calls++; }
198 #endif
199   switch (status)
200     {
201     case FTP_BUSY:
202       PRINT_CALLBACK_FORMAT ("FTP_BUSY");
203       SEND_COND;
204       break;
205     case FTP_ABORT:
206       PRINT_CALLBACK_FORMAT ("FTP_ABORT");
207       SEND_COND;
208       break;
209     case FTP_FAIL:
210       PRINT_CALLBACK_FORMAT ("FTP_FAIL");
211       SEND_COND;
212       break;
213     case FTP_SUCCESS:
214       PRINT_CALLBACK_FORMAT ("FTP_SUCCESS");
215       SEND_COND;
216       break;
217     case FTP_TIMEOUT:
218       PRINT_CALLBACK_FORMAT ("FTP_TIMEOUT");
219       SEND_COND;
220       break;
221     case FTP_BADSIZE:
222       PRINT_CALLBACK_FORMAT ("FTP_BADSIZE");
223       SEND_COND;
224       break;
225     case FTP_SAMESIZE:
226       PRINT_CALLBACK_FORMAT ("FTP_SAMESIZE");
227       SEND_COND;
228       break;
229     case FTP_PROGRESS:
230       printf ("\rProgress : %5.2f", percent);
231       fflush (stdout);
232       if (100.0 <= percent)
233         {
234           printf ("\n");
235         }
236       break;
237     default: // Should not happen ... kill the program in this case !
238       printf ("Callback called with unknown status : %d\n", status);
239       exit (-1);
240       break;
241     }
242 #undef CALLBACK_FORMAT
243 }
244   
245 #define title(x) { BLUE; printf("[%i] %s",__LINE__,x); RAZ; }
246
247 #define _USE_EMENCIA_SERVER (0)
248 #if _USE_EMENCIA_SERVER
249 #define ARDRONE_IP "parrot02.nyx.emencia.net"
250 #define ARDRONE_PORT (21)
251 #define ARDRONE_USER "parrot"
252 #define ARDRONE_PASSWORD "parrot"
253 #else
254 #define ARDRONE_IP "192.168.1.1"
255 #define ARDRONE_PORT (21)
256 #define ARDRONE_USER "anonymous"
257 #define ARDRONE_PASSWORD ""
258 #endif
259
260 #define _1MB_ORIGIN_FILE "origin.txt"
261 #define _512K_FAILED_FILE "half_file.txt"
262 #define _256K_FAILED_FILE "quarter_file.txt"
263 #define _1MB_MERGED_FILE "merged.txt"
264 #define LOCAL_RESULT_FILE "result.txt"
265
266 #define NOCB_NORESUME_RESULT "result_nocb_noresume.txt"
267 #define CB_NORESUME_RESULT "result_cb_noresume.txt"
268 #define NOCB_RESUME_RESULT "result_nocb_resume.txt"
269 #define CB_RESUME_RESULT "result_cb_resume.txt"
270
271 #define ARDRONE_FILE_BEFORE_RENAME "origin.txt"
272 #define ARDRONE_FILE_AFTER_RENAME "result.txt"
273
274 DEFINE_THREAD_ROUTINE(main_application_thread, data)
275 {
276   
277   /* Semaphore for synchronisation */
278   sem_init (&synchroSem, 0, 0);
279   
280   vp_os_delay(1000);
281
282   char buffer [512] = {0};
283   int systemRet = 0;
284   
285   _ftp_t *droneFtp = NULL;
286   _ftp_status ftp_result = FTP_FAIL;
287
288   int runOperation = 1;
289
290   uint64_t totalOp = 0;
291   uint64_t opOk = 0;
292
293   
294   title ("\n\n------ CLEANING ------\n\n");
295   
296   title ("--- Connecting to AR.Drone FTP ---\n");
297   
298   for (runOperation = 1; runOperation;)
299     {
300       droneFtp = ftpConnect (ARDRONE_IP, ARDRONE_PORT, ARDRONE_USER, ARDRONE_PASSWORD, &ftp_result);
301       TEST_RESULT (ftp_result, "Unable to connect to %s@%s:%d (PASS : %s)", "Connected to %s@%s:%d (PASS : %s)", ARDRONE_USER, ARDRONE_IP, ARDRONE_PORT, ARDRONE_PASSWORD);
302     }
303   
304   title ("--- Getting PWD ---\n");
305   
306   char pwd [256] = {0};
307   ftp_result = ftpPwd (droneFtp, pwd, 256);
308   TEST_RESULT (ftp_result, "Unable to get PWD [%1s]", "Got PWD : %s", pwd);
309
310   title ("--- Removing previous file on AR.Drone ---\n");
311
312   for (runOperation = 1; runOperation;)
313     {
314       ftp_result = ftpRemove (droneFtp, ARDRONE_FILE_BEFORE_RENAME);
315       TEST_RESULT (ftp_result, " (STILL OK !) file %s does not exist", "Deleted file %s", ARDRONE_FILE_BEFORE_RENAME);
316     }
317
318   for (runOperation = 1; runOperation;)
319     {
320       ftp_result = ftpRemove (droneFtp, ARDRONE_FILE_AFTER_RENAME);
321       TEST_RESULT (ftp_result, " (STILL OK !) file %s does not exist", "Deleted file %s", ARDRONE_FILE_AFTER_RENAME);
322     }
323
324   title ("--- Removing local result file ---\n");
325  
326   vp_os_memset (buffer, 0x0, 512);
327   snprintf (buffer, 512, "rm -f %s", LOCAL_RESULT_FILE);
328   systemRet = system (buffer);
329   printf ("System : %s\n", buffer);
330
331   title ("--- Disconnecting from AR.Drone FTP ---\n");
332
333   TEST_RESULT (ftpClose (&droneFtp), "AR.Drone FTP (%s:%d) was not opened", "Closed AR.Drone FTP (%s:%d)", ARDRONE_IP, ARDRONE_PORT);
334
335   while (1)
336     {
337
338       title ("\n\n------ TESTS WITHOUT RESUME NOR CALLBACK ------\n\n");
339   
340       title ("--- Connecting to AR.Drone FTP ---\n");
341       
342       for (runOperation = 1; runOperation;)
343         {  
344           droneFtp = ftpConnect (ARDRONE_IP, ARDRONE_PORT, ARDRONE_USER, ARDRONE_PASSWORD, &ftp_result);
345           TEST_RESULT (ftp_result, "Unable to connect to %s@%s:%d (PASS : %s)", "Connected to %s@%s:%d (PASS : %s)", ARDRONE_USER, ARDRONE_IP, ARDRONE_PORT, ARDRONE_PASSWORD);
346         }
347   
348       title ("--- Sending origin file to the AR.Drone ---\n");
349
350       for (runOperation = 1; runOperation;)
351         {
352           ftp_result = ftpPut (droneFtp, _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME, 0, NULL);
353           TEST_RESULT (ftp_result, "Unable to send file %s->%s", "Sent file %s->%s", _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME);
354         }
355
356       title ("--- Renaming file on the AR.Drone ---\n");
357
358       for (runOperation = 1; runOperation;)
359         {
360           ftp_result = ftpRename (droneFtp, ARDRONE_FILE_BEFORE_RENAME, ARDRONE_FILE_AFTER_RENAME);
361           TEST_RESULT (ftp_result, "Impossible to rename %s->%s", "Renamed %s->%s", ARDRONE_FILE_BEFORE_RENAME, ARDRONE_FILE_AFTER_RENAME);
362         }
363
364       title ("--- Getting AR.Drone FTP Listing ---\n");
365   
366       for (runOperation = 1; runOperation;)
367         {
368           ftp_result = ftpList (droneFtp, &listBuffer, NULL);
369           TEST_RESULT (ftp_result, "Unable to list FTP [%1s]", "Listed FTP :\n%s", listBuffer);
370           if (NULL != listBuffer) { vp_os_free (listBuffer); listBuffer = NULL; }
371         }
372
373       title ("--- Getting back result file ---\n");
374
375       for (runOperation = 1; runOperation;)
376         {
377           ftp_result = ftpGet (droneFtp, ARDRONE_FILE_AFTER_RENAME, LOCAL_RESULT_FILE, 0, NULL);
378           TEST_RESULT (ftp_result, "Unable to get file %s->%s", "Got back file %s->%s", ARDRONE_FILE_AFTER_RENAME, LOCAL_RESULT_FILE);
379         }
380
381       title ("--- Checking file ---\n");
382  
383       vp_os_memset (buffer, 0x0, 512);
384       snprintf (buffer, 512, "diff %s %s > /dev/null", LOCAL_RESULT_FILE, _1MB_ORIGIN_FILE);
385       systemRet = system (buffer);
386       printf ("System : %s\n", buffer);
387       totalOp++;
388       if (0 != systemRet)
389         {
390           RED; printf ("[%d : KO] : Files are different !\n", __LINE__); RAZ;
391         }
392       else
393         {
394           opOk++;
395           GREEN; printf ("[%d : OK] : Files are the same\n", __LINE__); RAZ;
396         }
397
398       title ("--- Removing file on AR.Drone ---\n");
399
400       for (runOperation = 1; runOperation;)
401         {      
402           ftp_result = ftpRemove (droneFtp, ARDRONE_FILE_AFTER_RENAME);
403           TEST_RESULT (ftp_result, "Unable to delete file %s", "Deleted file %s", ARDRONE_FILE_AFTER_RENAME);
404         }
405
406       title ("--- Local file backup ---\n");
407   
408       vp_os_memset (buffer, 0x0, 512);
409       snprintf (buffer, 512, "mv %s %s", LOCAL_RESULT_FILE, NOCB_NORESUME_RESULT);
410       systemRet = system (buffer);
411       printf ("System : %s\n", buffer);
412
413       title ("--- Closing AR.Drone FTP ---\n");
414   
415       TEST_RESULT (ftpClose (&droneFtp), "AR.Drone FTP (%s:%d) was not opened", "Closed AR.Drone FTP (%s:%d)", ARDRONE_IP, ARDRONE_PORT);
416
417
418
419
420
421
422
423
424       title ("\n\n------ TESTS WITHOUT RESUME / WITH CALLBACK ------\n\n");
425   
426       title ("--- Connecting to AR.Drone FTP ---\n");
427  
428       for (runOperation = 1; runOperation;)
429         {
430           droneFtp = ftpConnect (ARDRONE_IP, ARDRONE_PORT, ARDRONE_USER, ARDRONE_PASSWORD, &ftp_result);
431           TEST_RESULT (ftp_result, "Unable to connect to %s@%s:%d (PASS : %s)", "Connected to %s@%s:%d (PASS : %s)", ARDRONE_USER, ARDRONE_IP, ARDRONE_PORT, ARDRONE_PASSWORD);
432         }
433       
434       title ("--- Sending origin file to the AR.Drone ---\n");
435
436   
437       for (runOperation = 1; runOperation;)
438         {
439           ftp_result = ftpPut (droneFtp, _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME, 0, ftpCallback);
440           WAIT_COND (ftp_result);
441           TEST_RESULT (globalStatus, "Unable to send file %s->%s", "Sent file %s->%s", _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME);
442         }
443
444       title ("--- Renaming file on the AR.Drone ---\n");
445
446       ftp_result = ftpRename (droneFtp, ARDRONE_FILE_BEFORE_RENAME, ARDRONE_FILE_AFTER_RENAME);
447       TEST_RESULT (ftp_result, "Impossible to rename %s->%s", "Renamed %s->%s", ARDRONE_FILE_BEFORE_RENAME, ARDRONE_FILE_AFTER_RENAME);
448
449       title ("--- Getting AR.Drone FTP Listing ---\n");
450   
451       for (runOperation = 1; runOperation;)
452         {
453           ftp_result = ftpList (droneFtp, NULL, ftpCallback);
454           WAIT_COND (ftp_result);
455           TEST_RESULT (globalStatus, "Unable to list FTP [%1s]", "Listed FTP :\n%s", listBuffer);
456           if (NULL != listBuffer) { vp_os_free (listBuffer); listBuffer = NULL; }
457         }
458
459       title ("--- Getting back result file ---\n");
460
461       for (runOperation = 1; runOperation;)
462         {
463           ftp_result = ftpGet (droneFtp, ARDRONE_FILE_AFTER_RENAME, LOCAL_RESULT_FILE, 0, ftpCallback);
464           WAIT_COND (ftp_result);
465           TEST_RESULT (globalStatus, "Unable to get file %s->%s", "Got back file %s->%s", ARDRONE_FILE_AFTER_RENAME, LOCAL_RESULT_FILE);
466         }
467
468       title ("--- Checking file ---\n");
469  
470       vp_os_memset (buffer, 0x0, 512);
471       snprintf (buffer, 512, "diff %s %s > /dev/null", LOCAL_RESULT_FILE, _1MB_ORIGIN_FILE);
472       systemRet = system (buffer);
473       printf ("System : %s\n", buffer);
474       totalOp++;
475       if (0 != systemRet)
476         {
477           RED; printf ("[%d : KO] : Files are different !\n", __LINE__); RAZ;
478         }
479       else
480         {
481           opOk++;
482           GREEN; printf ("[%d : OK] : Files are the same\n", __LINE__); RAZ;
483         }
484
485       title ("--- Removing file on AR.Drone ---\n");
486
487       for (runOperation = 1; runOperation;)
488         {
489           ftp_result = ftpRemove (droneFtp, ARDRONE_FILE_AFTER_RENAME);
490           TEST_RESULT (ftp_result, "Unable to delete file %s", "Deleted file %s", ARDRONE_FILE_AFTER_RENAME);
491         }
492       
493       title ("--- Local file backup ---\n");
494   
495       vp_os_memset (buffer, 0x0, 512);
496       snprintf (buffer, 512, "mv %s %s", LOCAL_RESULT_FILE, CB_NORESUME_RESULT);
497       systemRet = system (buffer);
498       printf ("System : %s\n", buffer);
499
500       title ("--- Closing AR.Drone FTP ---\n");
501   
502       TEST_RESULT (ftpClose (&droneFtp), "AR.Drone FTP (%s:%d) was not opened", "Closed AR.Drone FTP (%s:%d)", ARDRONE_IP, ARDRONE_PORT);
503
504
505
506
507
508
509       title ("\n\n------ TESTS WITH RESUME / NO CALLBACK ------\n\n");
510
511       title ("--- Preparing bad file (256K) locally ---\n");
512
513       vp_os_memset (buffer, 0x0, 512);
514       snprintf (buffer, 512, "cp %s %s", _256K_FAILED_FILE, LOCAL_RESULT_FILE);
515       systemRet = system (buffer);
516       printf ("System : %s\n", buffer);
517   
518       title ("--- Connecting to AR.Drone FTP ---\n");
519   
520       for (runOperation = 1; runOperation;)
521         {
522           droneFtp = ftpConnect (ARDRONE_IP, ARDRONE_PORT, ARDRONE_USER, ARDRONE_PASSWORD, &ftp_result);
523           TEST_RESULT (ftp_result, "Unable to connect to %s@%s:%d (PASS : %s)", "Connected to %s@%s:%d (PASS : %s)", ARDRONE_USER, ARDRONE_IP, ARDRONE_PORT, ARDRONE_PASSWORD);
524         }
525
526       title ("--- Preparing bad file (512K) on AR.Drone FTP ---\n");
527
528       for (runOperation = 1; runOperation;)
529         {
530           ftp_result = ftpPut (droneFtp, _512K_FAILED_FILE, ARDRONE_FILE_BEFORE_RENAME, 1, NULL);
531           TEST_RESULT (ftp_result, "Unable to send partial file %s->%s", "Sent partial file %s->%s", _512K_FAILED_FILE, ARDRONE_FILE_BEFORE_RENAME);
532         }
533   
534       title ("--- Sending origin file to the AR.Drone ---\n");
535
536       for (runOperation = 1; runOperation;)
537         {
538           ftp_result = ftpPut (droneFtp, _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME, 1, NULL);
539           TEST_RESULT (ftp_result, "Unable to send file %s->%s", "Sent file %s->%s", _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME);
540         }
541
542       title ("--- Renaming file on the AR.Drone ---\n");
543
544       for (runOperation = 1; runOperation;)
545         {
546           ftp_result = ftpRename (droneFtp, ARDRONE_FILE_BEFORE_RENAME, ARDRONE_FILE_AFTER_RENAME);
547           TEST_RESULT (ftp_result, "Impossible to rename %s->%s", "Renamed %s->%s", ARDRONE_FILE_BEFORE_RENAME, ARDRONE_FILE_AFTER_RENAME);
548         }
549
550       title ("--- Getting AR.Drone FTP Listing ---\n");
551   
552       for (runOperation = 1; runOperation;)
553         {
554           ftp_result = ftpList (droneFtp, &listBuffer, NULL);
555           TEST_RESULT (ftp_result, "Unable to list FTP [%1s]", "Listed FTP :\n%s", listBuffer);
556           if (NULL != listBuffer) { vp_os_free (listBuffer); listBuffer = NULL; }
557         }
558
559       title ("--- Getting back result file ---\n");
560
561       for (runOperation = 1; runOperation;)
562         {
563           ftp_result = ftpGet (droneFtp, ARDRONE_FILE_AFTER_RENAME, LOCAL_RESULT_FILE, 1, NULL);
564           TEST_RESULT (ftp_result, "Unable to get file %s->%s", "Got back file %s->%s", ARDRONE_FILE_AFTER_RENAME, LOCAL_RESULT_FILE);
565         }
566
567       title ("--- Checking file ---\n");
568  
569       vp_os_memset (buffer, 0x0, 512);
570       snprintf (buffer, 512, "diff %s %s > /dev/null", LOCAL_RESULT_FILE, _1MB_MERGED_FILE);
571       systemRet = system (buffer);
572       printf ("System : %s\n", buffer);
573       totalOp++;
574       if (0 != systemRet)
575         {
576           RED; printf ("[%d : KO] : Files are different !\n", __LINE__); RAZ;
577         }
578       else
579         {
580           opOk++;
581           GREEN; printf ("[%d : OK] : Files are the same\n", __LINE__); RAZ;
582         }
583
584       title ("--- Removing file on AR.Drone ---\n");
585
586       for (runOperation = 1; runOperation;)
587         {
588           ftp_result = ftpRemove (droneFtp, ARDRONE_FILE_AFTER_RENAME);
589           TEST_RESULT (ftp_result, "Unable to delete file %s", "Deleted file %s", ARDRONE_FILE_AFTER_RENAME);
590         }
591
592       title ("--- Local file backup ---\n");
593   
594       vp_os_memset (buffer, 0x0, 512);
595       snprintf (buffer, 512, "mv %s %s", LOCAL_RESULT_FILE, NOCB_RESUME_RESULT);
596       systemRet = system (buffer);
597       printf ("System : %s\n", buffer);
598
599       title ("--- Closing AR.Drone FTP ---\n");
600   
601       TEST_RESULT (ftpClose (&droneFtp), "AR.Drone FTP (%s:%d) was not opened", "Closed AR.Drone FTP (%s:%d)", ARDRONE_IP, ARDRONE_PORT);
602
603
604
605
606
607
608
609
610
611
612
613
614       title ("\n\n------ TESTS WITH RESUME AND CALLBACK ------\n\n");
615
616       title ("--- Preparing bad file (256K) locally ---\n");
617
618       vp_os_memset (buffer, 0x0, 512);
619       snprintf (buffer, 512, "cp %s %s", _256K_FAILED_FILE, LOCAL_RESULT_FILE);
620       systemRet = system (buffer);
621       printf ("System : %s\n", buffer);
622   
623       title ("--- Connecting to AR.Drone FTP ---\n");
624   
625       for (runOperation = 1; runOperation;)
626         {
627           droneFtp = ftpConnect (ARDRONE_IP, ARDRONE_PORT, ARDRONE_USER, ARDRONE_PASSWORD, &ftp_result);
628           TEST_RESULT (ftp_result, "Unable to connect to %s@%s:%d (PASS : %s)", "Connected to %s@%s:%d (PASS : %s)", ARDRONE_USER, ARDRONE_IP, ARDRONE_PORT, ARDRONE_PASSWORD);
629         }
630
631       title ("--- Preparing bad file (512K) on AR.Drone FTP ---\n");
632
633       for (runOperation = 1; runOperation;)
634         {
635           ftp_result = ftpPut (droneFtp, _512K_FAILED_FILE, ARDRONE_FILE_BEFORE_RENAME, 1, ftpCallback);
636           WAIT_COND (ftp_result);
637           TEST_RESULT (globalStatus, "Unable to send partial file %s->%s", "Sent partial file %s->%s", _512K_FAILED_FILE, ARDRONE_FILE_BEFORE_RENAME);
638         }
639   
640       title ("--- Sending origin file to the AR.Drone ---\n");
641
642       for (runOperation = 1; runOperation;)
643         {
644           ftp_result = ftpPut (droneFtp, _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME, 1, ftpCallback);
645           WAIT_COND (ftp_result);
646           TEST_RESULT (globalStatus, "Unable to send file %s->%s", "Sent file %s->%s", _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME);
647         }
648
649       title ("--- Renaming file on the AR.Drone ---\n");
650
651       for (runOperation = 1; runOperation;)
652         {
653           ftp_result = ftpRename (droneFtp, ARDRONE_FILE_BEFORE_RENAME, ARDRONE_FILE_AFTER_RENAME);
654           TEST_RESULT (ftp_result, "Impossible to rename %s->%s", "Renamed %s->%s", ARDRONE_FILE_BEFORE_RENAME, ARDRONE_FILE_AFTER_RENAME);
655         }
656
657       title ("--- Getting AR.Drone FTP Listing ---\n");
658   
659       for (runOperation = 1; runOperation;)
660         {
661           ftp_result = ftpList (droneFtp, NULL, ftpCallback);
662           WAIT_COND (ftp_result);
663           TEST_RESULT (globalStatus, "Unable to list FTP [%1s]", "Listed FTP :\n%s", listBuffer);
664           if (NULL != listBuffer) { vp_os_free (listBuffer); listBuffer = NULL; }
665         }
666
667       title ("--- Getting back result file ---\n");
668
669       for (runOperation = 1; runOperation;)
670         {
671           ftp_result = ftpGet (droneFtp, ARDRONE_FILE_AFTER_RENAME, LOCAL_RESULT_FILE, 1, ftpCallback);
672           WAIT_COND (ftp_result);
673           TEST_RESULT (globalStatus, "Unable to get file %s->%s", "Got back file %s->%s", ARDRONE_FILE_AFTER_RENAME, LOCAL_RESULT_FILE);
674         }
675
676       title ("--- Checking file ---\n");
677  
678       vp_os_memset (buffer, 0x0, 512);
679       snprintf (buffer, 512, "diff %s %s > /dev/null", LOCAL_RESULT_FILE, _1MB_MERGED_FILE);
680       systemRet = system (buffer);
681       printf ("System : %s\n", buffer);
682       totalOp++;
683       if (0 != systemRet)
684         {
685           RED; printf ("[%d : KO] : Files are different !\n", __LINE__); RAZ;
686         }
687       else
688         {
689           opOk++;
690           GREEN; printf ("[%d : OK] : Files are the same\n", __LINE__); RAZ;
691         }
692
693       title ("--- Removing file on AR.Drone ---\n");
694
695       for (runOperation = 1; runOperation;)
696         {
697           ftp_result = ftpRemove (droneFtp, ARDRONE_FILE_AFTER_RENAME);
698           TEST_RESULT (ftp_result, "Unable to delete file %s", "Deleted file %s", ARDRONE_FILE_AFTER_RENAME);
699         }
700   
701       title ("--- Local file backup ---\n");
702   
703       vp_os_memset (buffer, 0x0, 512);
704       snprintf (buffer, 512, "mv %s %s", LOCAL_RESULT_FILE, CB_RESUME_RESULT);
705       systemRet = system (buffer);
706       printf ("System : %s\n", buffer);
707
708       title ("--- Closing AR.Drone FTP ---\n");
709   
710       TEST_RESULT (ftpClose (&droneFtp), "AR.Drone FTP (%s:%d) was not opened", "Closed AR.Drone FTP (%s:%d)", ARDRONE_IP, ARDRONE_PORT);
711
712      
713
714
715
716
717
718
719       title ("\n\n------ ABORTION TESTS ------\n\n");
720
721       
722       title ("--- Connecting to AR.Drone FTP ---\n");
723   
724       for (runOperation = 1; runOperation;)
725         {
726           droneFtp = ftpConnect (ARDRONE_IP, ARDRONE_PORT, ARDRONE_USER, ARDRONE_PASSWORD, &ftp_result);
727           TEST_RESULT (ftp_result, "Unable to connect to %s@%s:%d (PASS : %s)", "Connected to %s@%s:%d (PASS : %s)", ARDRONE_USER, ARDRONE_IP, ARDRONE_PORT, ARDRONE_PASSWORD);
728         }
729
730       title ("--- Sending origin file to the AR.Drone ... aborted ---\n");
731
732       for (runOperation = 1; runOperation;)
733         {
734           ftp_result = ftpPut (droneFtp, _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME, 1, ftpCallback);
735           usleep (500000);
736           TEST_ABORTION (ftpAbort (droneFtp));
737           WAIT_COND (ftp_result);
738           TEST_RESULT ((FTP_ABORT == globalStatus) ? FTP_SUCCESS : FTP_FAIL, "Impossible to abort %s->%s transfert", "Aborted %s->%s transfert", _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME);
739         }
740
741       title ("--- Sending origin file to the AR.Drone ... complete previous operation ---\n");
742
743       for (runOperation = 1; runOperation;)
744         {
745           ftp_result = ftpPut (droneFtp, _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME, 1, ftpCallback);
746           WAIT_COND (ftp_result);
747           TEST_RESULT (globalStatus, "Unable to send file %s->%s", "Sent file %s->%s", _1MB_ORIGIN_FILE, ARDRONE_FILE_BEFORE_RENAME);
748         }
749
750       title ("--- Getting AR.Drone FTP Listing ... aborted ---\n");
751   
752       for (runOperation = 1; runOperation;)
753         {
754           ftp_result = ftpList (droneFtp, NULL, ftpCallback);
755           usleep (1000);
756           TEST_ABORTION (ftpAbort (droneFtp));
757           WAIT_COND (ftp_result);
758           TEST_RESULT ((FTP_ABORT == globalStatus) ? FTP_SUCCESS : FTP_FAIL, "Impossible to abort %s", "Aborted %s", "listing");
759           if (NULL != listBuffer) { vp_os_free (listBuffer); listBuffer = NULL; }
760         }
761
762       title ("--- Getting AR.Drone FTP Listing ... ok ---\n");
763   
764       for (runOperation = 1; runOperation;)
765         {
766           ftp_result = ftpList (droneFtp, NULL, ftpCallback);
767           WAIT_COND (ftp_result);
768           TEST_RESULT (globalStatus, "Unable to list FTP [%1s]", "Listed FTP :\n%s", listBuffer);
769           if (NULL != listBuffer) { vp_os_free (listBuffer); listBuffer = NULL; }
770         }
771
772       title ("--- Getting back origin file as result ... aborted ---\n");
773
774       for (runOperation = 1; runOperation;)
775         {
776           ftp_result = ftpGet (droneFtp, ARDRONE_FILE_BEFORE_RENAME, LOCAL_RESULT_FILE, 1, ftpCallback);
777           usleep (500000);
778           TEST_ABORTION (ftpAbort (droneFtp));
779           WAIT_COND (ftp_result);
780           TEST_RESULT ((FTP_ABORT == globalStatus) ? FTP_SUCCESS : FTP_FAIL, "Impossible to abort %s->%s transfert", "Aborted %s->%s transfert", ARDRONE_FILE_BEFORE_RENAME, LOCAL_RESULT_FILE);
781         }
782
783       title ("--- Getting back origin file as result ... complete previous operation ---\n");
784
785       for (runOperation = 1; runOperation;)
786         {
787           ftp_result = ftpGet (droneFtp, ARDRONE_FILE_BEFORE_RENAME, LOCAL_RESULT_FILE, 1, ftpCallback);
788           WAIT_COND (ftp_result);
789           TEST_RESULT (globalStatus, "Unable to get file %s->%s", "Got back file %s->%s", ARDRONE_FILE_BEFORE_RENAME, LOCAL_RESULT_FILE);
790         }
791
792       title ("--- Checking file ---\n");
793  
794       vp_os_memset (buffer, 0x0, 512);
795       snprintf (buffer, 512, "diff %s %s > /dev/null", LOCAL_RESULT_FILE, _1MB_ORIGIN_FILE);
796       systemRet = system (buffer);
797       printf ("System : %s\n", buffer);
798       totalOp++;
799       if (0 != systemRet)
800         {
801           RED; printf ("[%d : KO] : Files are different !\n", __LINE__); RAZ;
802         }
803       else
804         {
805           opOk++;
806           GREEN; printf ("[%d : OK] : Files are the same\n", __LINE__); RAZ;
807         }
808
809       title ("--- Removing file on AR.Drone ---\n");
810
811       for (runOperation = 1; runOperation;)
812         {
813           ftp_result = ftpRemove (droneFtp, ARDRONE_FILE_BEFORE_RENAME);
814           TEST_RESULT (ftp_result, "Unable to delete file %s", "Deleted file %s", ARDRONE_FILE_BEFORE_RENAME);
815         }
816   
817       title ("--- Closing AR.Drone FTP ---\n");
818   
819       TEST_RESULT (ftpClose (&droneFtp), "AR.Drone FTP (%s:%d) was not opened", "Closed AR.Drone FTP (%s:%d)", ARDRONE_IP, ARDRONE_PORT);
820
821
822
823
824
825
826
827       title ("\n\n------ RESULT ------\n\n");
828
829       COMPUTE_PERCENT_OK;
830     }
831
832   sem_destroy (&synchroSem);
833   
834   exit (0);
835   return 0;
836 }