TSP: The Transport Sample Protocol



Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

client_group.c

Go to the documentation of this file.
00001 
00038 #include <stdio.h>
00039 #include "tsp_consumer.h"
00040 
00041 /* Allow us to cheat with groups internal and hidden structures*/
00042 #include "tsp_group_data.h"
00043 
00044 TSP_groups_t TSP_test_get_groups(TSP_provider_t provider);
00045 
00046 /*µS*/
00047 #define TSP_NANOSLEEP_PERIOD_US (200*1000)
00048 
00049 /* Number of samples  that will be counted before the data check test pass */
00050 #define TSP_TEST_COUNT_SAMPLES 200000
00051 
00052 
00053 
00054 struct data_test_t
00055 {
00056   int index;
00057   int period;
00058   int phase;
00059   char* name;
00060 
00061 };
00062 
00063 typedef struct data_test_t data_test_t;
00064 
00065 /* requested samples */
00066 static data_test_t data_test[] = {
00067   {10,2,0,"Symbol10"},
00068   {20,3,2,"Symbol20"},
00069   {30,5,3,"Symbol30"},
00070   {-2,-2,-2,NULL}
00071 };
00072 
00073 struct group_test_t 
00074 {
00075 
00076   int index[10];
00077 
00078 };
00079 
00080 typedef struct group_test_t group_test_t;
00081 
00082 /* Calculated group numbers */
00083 static group_test_t group_test[] = {
00084                 { 10, -1, -1 , -1}, /*00*/
00085          /*01*/ { -1, -1, -1 , -1},
00086          /*02*/ { 10, 20, -1 , -1},
00087          /*03*/ { 30, -1, -1 , -1},
00088          /*04*/ { 10, -1, -1 , -1},
00089          /*05*/ { 20, -1, -1 , -1},
00090          /*06*/ { 10, -1, -1 , -1},
00091          /*07*/ { -1, -1, -1 , -1},
00092          /*08*/ { 10, 20, 30 , -1},
00093          /*09*/ { -1, -1, -1 , -1},
00094          /*10*/ { 10, -1, -1 , -1},
00095          /*11*/ { 20, -1, -1 , -1},
00096          /*12*/ { 10, -1, -1 , -1},
00097          /*13*/ { 30, -1, -1 , -1},
00098          /*14*/ { 10, 20, -1 , -1},
00099          /*15*/ { -1, -1, -1 , -1},
00100          /*16*/ { 10, -1, -1 , -1},
00101          /*17*/ { 20, -1, -1 , -1},
00102          /*18*/ { 10, 30, -1 , -1},
00103          /*19*/ { -1, -1, -1 , -1},
00104          /*20*/ { 10, 20, -1 , -1},
00105          /*21*/ { -1, -1, -1 , -1},
00106          /*22*/ { 10, -1, -1 , -1},
00107          /*23*/ { 20, 30, -1 , -1}, 
00108          /*24*/ { 10, -1, -1 , -1},
00109          /*25*/ { -1, -1, -1 , -1},
00110          /*26*/ { 10, 20, -1 , -1},
00111          /*27*/ { -1, -1, -1 , -1},
00112          /*28*/ { 10, 30, -1 , -1},
00113          /*29*/ { 20, -1, -1 , -1},
00114          /*30*/ { -2, -2, -2 , -2}   
00115 };
00116 
00117 
00118 int main(int argc, char *argv[]){
00119 
00120   TSP_consumer_symbol_requested_list_t symbols;
00121 
00122   int i, j;
00123   int nb_providers;
00124   int period=0;
00125   char* name;
00126   int test_mode;
00127 
00128 
00129   TSP_group_table_t* groups;
00130 
00131   TSP_provider_t* providers;
00132 
00133   int requested_nb;
00134   int group_nb;
00135  
00136   printf ("#=========================================================#\n");
00137   printf ("# Launching <test_group> for test purpose #\n");
00138   printf ("#=========================================================#\n");
00139  
00140 
00141   if(!TSP_consumer_init(&argc, &argv))
00142     {
00143       STRACE_ERROR(("TSP init failed"));
00144       return -1;
00145     }
00146 
00147   if (argc>2)
00148     {   
00149       name = argv[1];
00150       period = atoi (argv[2]);
00151       /* Anything after name and perdio --> test mode */
00152       test_mode = (argc>3) ? TRUE : FALSE;
00153     }
00154   else
00155     {
00156       STRACE_ERROR(("USAGE %s : server period\n", argv[0]));
00157       return -1;
00158     }
00159 
00160   
00161   /*-------------------------------------------------------------------------------------------------------*/ 
00162   /* TEST : STAGE 002 | STEP 001 */
00163   /*-------------------------------------------------------------------------------------------------------*/ 
00164   TSP_consumer_connect_all(name,&providers, &nb_providers);
00165   if(nb_providers > 0)
00166     {
00167       for( i = 0 ; i<nb_providers ; i++)
00168         {
00169           const char* info = TSP_consumer_get_connected_name(providers[i]) ;
00170           STRACE_INFO(("Server Nb %d, info = '%s'", i,info));
00171           
00172           /* Check name */
00173           if(strcmp(info, "StubbedServer"))
00174             {
00175               STRACE_ERROR(("Serveur name corrupted"));
00176               return -1;
00177             }
00178           
00179         }
00180     }
00181   else
00182     {
00183       STRACE_ERROR(("Unable to find any provider for host"));
00184       return -1;
00185     }
00186 
00187 
00188 
00189 
00190   /*-------------------------------------------------------------------------------------------------------*/ 
00191   /* TEST : STAGE 002 | STEP 002 */
00192   /*-------------------------------------------------------------------------------------------------------*/ 
00193   /* Le 1er provider existe puisqu'il y en a au moins 1 */
00194 
00195   if(!TSP_consumer_request_open(providers[0], 0, 0))
00196     {
00197       STRACE_ERROR(("TSP_request_provider_open failed"));
00198       return -1;
00199     }
00200   
00201 
00202   /*-------------------------------------------------------------------------------------------------------*/ 
00203   /* TEST : STAGE 002 | STEP 003 */
00204   /*-------------------------------------------------------------------------------------------------------*/ 
00205   if(!TSP_consumer_request_information(providers[0]))
00206     {
00207       STRACE_ERROR(("TSP_request_provider_information failed"));
00208       return -1;
00209     }
00210   
00211   /* How many symbols do we want to send ? */
00212   for(requested_nb = 0; data_test[requested_nb].index != (-2); requested_nb++);
00213   STRACE_INFO(("Total number of requested symbols = %d", requested_nb));
00214 
00215 
00216   symbols.len = requested_nb;
00217   symbols.val = (TSP_consumer_symbol_requested_t*)calloc(requested_nb, sizeof(TSP_consumer_symbol_requested_t));
00218   
00219   /* Initialize data of sampling */
00220   for(i = 0 ; i <requested_nb ; i++)
00221     {
00222       symbols.val[i].phase = data_test[i].phase ;
00223       symbols.val[i].period = data_test[i].period ;
00224       symbols.val[i].name = data_test[i].name ;
00225     }
00226   /*-------------------------------------------------------------------------------------------------------*/ 
00227   /* TEST : STAGE 002 | STEP 004 */
00228   /*-------------------------------------------------------------------------------------------------------*/ 
00229   if(!TSP_consumer_request_sample(providers[0], &symbols))
00230     {
00231       STRACE_ERROR(("TSP_request_provider_sample failed"));
00232       return -1;
00233     }
00234 
00235 
00236   /* Cheating... we can do that coz of included   tsp_group_data.h */
00237   groups = (TSP_group_table_t*)TSP_test_get_groups(providers[0]);
00238 
00239 
00240   /* How many symbols do we want to send ? */
00241   for(group_nb = 0; group_test[group_nb].index[0] != (-2); group_nb++);
00242 
00243   if( group_nb != groups->table_len )
00244     {
00245       STRACE_ERROR(("Wrong groups total number"));
00246       return -1;
00247     }
00248 
00249   /* Compare groups size */
00250   {
00251     for(i = 0 ; i < group_nb ; i++)
00252       {
00253         /* What size are we expecting for group i?*/
00254         int size;
00255         for(size = 0; group_test[i].index[size] != (-1); size++);
00256         if ( size != groups->groups[i].group_len )
00257           {
00258             STRACE_ERROR(("Wrong groups size"));
00259             return -1;
00260           }
00261       }
00262   }
00263 
00264   /* Compare groups internals */
00265   for(i = 0 ; i < group_nb ; i++)
00266     {
00267       /* What size are we expecting for group i?*/
00268       for( j = 0; j < groups->groups[i].group_len ; j++)
00269         {
00270           if (  group_test[i].index[j] != groups->groups[i].items[j].provider_global_index )
00271             {
00272               STRACE_ERROR(("Wrong provider global index"));
00273               return -1;
00274             }
00275         }
00276     }
00277 
00278   STRACE_TEST(("STAGE 002 | STEP 001 : PASSED"));
00279   printf ("#=========================================================#\n");
00280   printf ("# End <test_group> OK #\n");
00281   printf ("#=========================================================#\n");
00282  
00283   return 0;
00284 }
Framework Home Page.

Beware !! TSP wave is coming...