LTP GCOV extension - code coverage report
Current view: directory - src/mintfwif - mintfwif.c
Test: min.info
Date: 2009-06-18 Instrumented lines: 266
Code covered: 91.0 % Executed lines: 242

       1                 : /*
       2                 :  * This file is part of MIN Test Framework. Copyright © 2008 Nokia Corporation
       3                 :  * and/or its subsidiary(-ies).
       4                 :  * Contact: Robert Galkowski
       5                 :  * Contact e-mail: DG.MIN-Support@nokia.com
       6                 :  * 
       7                 :  * This program is free software: you can redistribute it and/or modify it 
       8                 :  * under the terms of the GNU General Public License as published by the Free 
       9                 :  * Software Foundation, version 2 of the License. 
      10                 :  * 
      11                 :  * This program is distributed in the hope that it will be useful, but WITHOUT 
      12                 :  * ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or 
      13                 :  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General  Public License for
      14                 :  * more details. You should have received a copy of the GNU General Public 
      15                 :  * License along with this program. If not,  see 
      16                 :  * <http://www.gnu.org/licenses/>.
      17                 :  */
      18                 : 
      19                 : 
      20                 : /**
      21                 :  *  @file       mintfwif.c
      22                 :  *  @version    0.1
      23                 :  *  @brief      This file contains implementation of mintfwif
      24                 :  */
      25                 : 
      26                 : /* ------------------------------------------------------------------------- */
      27                 : /* INCLUDE FILES */
      28                 : #include <ctype.h>
      29                 : #include <string.h>
      30                 : #include <tec.h>
      31                 : #include <data_api.h>
      32                 : #include <mintfwif.h>
      33                 : #include <min_engine_api.h>
      34                 : #include <tmc_common.h>
      35                 : #include <dllist.h>
      36                 : 
      37                 : /* ------------------------------------------------------------------------- */
      38                 : /* EXTERNAL DATA STRUCTURES */
      39                 : /* None */
      40                 : 
      41                 : /* ------------------------------------------------------------------------- */
      42                 : /* EXTERNAL GLOBAL VARIABLES */
      43                 : 
      44                 : /* ------------------------------------------------------------------------- */
      45                 : /* EXTERNAL FUNCTION PROTOTYPES */
      46                 : 
      47                 : extern char    *strcasestr (const char *haystack, const char *needle);
      48                 : extern eapiIn_t in_str;
      49                 : 
      50                 : 
      51                 : 
      52                 : /* ------------------------------------------------------------------------- */
      53                 : /* MODULE DATA STRUCTURES */
      54                 : typedef struct {
      55                 :         char            module_name_[128];
      56                 :         DLList         *test_case_list_;
      57                 :         unsigned        module_id_;
      58                 :         int             module_ready_;
      59                 : } internal_module_info;
      60                 : 
      61                 : 
      62                 : /** Structure for storage of executed test case data*/
      63                 : typedef struct {
      64                 :         /** Test Case ID */
      65                 :         unsigned int    case_id_;
      66                 :         /** Module ID */
      67                 :         unsigned int    module_id_;
      68                 :         /** Test run ID */
      69                 :         unsigned int    test_run_id_;
      70                 :         /** Test run status */
      71                 :         MINTPStatus     status_;
      72                 :         /** Test run group ID */
      73                 :         unsigned int    group_id_;
      74                 : } internal_test_run_info;
      75                 : 
      76                 : 
      77                 : /* ------------------------------------------------------------------------- */
      78                 : /* GLOBAL VARIABLES */
      79                 : /* module list */
      80                 : DLList *tfwif_modules_ = INITPTR;
      81                 : DLList *tfwif_test_runs_ = INITPTR;
      82                 : /* number of ready modules */
      83                 : unsigned ready_module_count_ = 0;
      84                 : pthread_mutex_t tfwif_mutex_ = PTHREAD_MUTEX_INITIALIZER;
      85                 : tfwif_callbacks_s tfwif_callbacks;
      86                 : 
      87                 : /* ------------------------------------------------------------------------- */
      88                 : /* CONSTANTS */
      89                 : /* None */
      90                 : 
      91                 : /* ------------------------------------------------------------------------- */
      92                 : /* MACROS */
      93                 : /* None */
      94                 : 
      95                 : /* ------------------------------------------------------------------------- */
      96                 : /* LOCAL GLOBAL VARIABLES */
      97                 : 
      98                 : int already_executed = 0;
      99                 : eapiOut_t min_clbk_;
     100                 : eapiIn_t *in;
     101                 : /* ------------------------------------------------------------------------- */
     102                 : /* LOCAL CONSTANTS AND MACROS */
     103                 : /* None */
     104                 : /* ------------------------------------------------------------------------- */
     105                 : /* LOCAL FUNCTION PROTOTYPES */
     106                 : /* None */
     107                 : 
     108                 : LOCAL void pl_case_result (long testrunid, int result, char *desc,
     109                 :                            long starttime, long endtime);
     110                 : /* ------------------------------------------------------------------------- */
     111                 : LOCAL void pl_case_started (unsigned moduleid,
     112                 :                             unsigned caseid,
     113                 :                             long testrunid);
     114                 : /* ------------------------------------------------------------------------- */
     115                 : LOCAL void pl_case_paused (long testrunid);
     116                 : /* ------------------------------------------------------------------------- */
     117                 : LOCAL void pl_case_resumed (long testrunid);
     118                 : /* ------------------------------------------------------------------------- */
     119                 : LOCAL void pl_msg_print (long testrunid, char *message);
     120                 : /* ------------------------------------------------------------------------- */
     121                 : LOCAL void pl_new_module (char *modulename, unsigned moduleid);
     122                 : /* ------------------------------------------------------------------------- */
     123                 : LOCAL void pl_module_ready (unsigned moduleid);
     124                 : /* ------------------------------------------------------------------------- */
     125                 : LOCAL void pl_no_module (char *modulename);
     126                 : /* ------------------------------------------------------------------------- */
     127                 : LOCAL void pl_new_case (unsigned moduleid, unsigned caseid, char *casetitle);
     128                 : /* ------------------------------------------------------------------------- */
     129                 : LOCAL void pl_error_report (char *error);
     130                 : /* ------------------------------------------------------------------------- */
     131                 : LOCAL void pl_send_rcp (char *cmd, char *sender, char *rcvr, char* msg,
     132                 :                         int param);
     133                 : /* ------------------------------------------------------------------------- */
     134                 : LOCAL int _find_mod_by_id (const void *a, const void *b);
     135                 : /* ------------------------------------------------------------------------- */
     136                 : LOCAL int _find_testrun_by_id (const void *a, const void *b);
     137                 : /* ------------------------------------------------------------------------- */
     138                 : LOCAL int _find_mod_by_name (const void *a, const void *b);
     139                 : /* ------------------------------------------------------------------------- */
     140                 : LOCAL void _del_internal_mod_info (void *data);
     141                 : /* ------------------------------------------------------------------------- */
     142                 : /* FORWARD DECLARATIONS */
     143                 : void pl_attach_plugin (eapiIn_t **out_callback, eapiOut_t *in_callback);
     144                 : 
     145                 : /* ==================== LOCAL FUNCTIONS ==================================== */
     146                 : /* None */
     147                 : /* ======================== FUNCTIONS ====================================== */
     148                 : /* ------------------------------------------------------------------------- */
     149                 : int min_if_set_device_id (int device_id)
     150               3 : {
     151               3 :         own_id = device_id;
     152               3 :         return 0;
     153                 : }
     154                 : 
     155                 : /* ------------------------------------------------------------------------- */
     156                 : 
     157                 : 
     158                 : int min_if_open (min_case_complete_func complete_cb,
     159                 :                  min_case_print_func print_cb,
     160                 :                  min_extif_message_cb_ extifsend_cb, char *engine_ini,
     161                 :                  char *envp[])
     162              37 : {
     163                 :         int module_count;
     164                 : 
     165              37 :         tfwif_callbacks.complete_callback_ = complete_cb;
     166              37 :         tfwif_callbacks.print_callback_ = print_cb;
     167              37 :         tfwif_callbacks.send_extif_msg_ = extifsend_cb;
     168                 : 
     169              37 :         if (tfwif_modules_ == INITPTR)
     170              37 :                 tfwif_modules_ = dl_list_create();
     171                 : 
     172              37 :         if (!already_executed) {
     173              37 :                 in = &in_str;
     174              37 :                 eapi_init (in, &min_clbk_);
     175                 :         }
     176              37 :         pl_attach_plugin (&in, &min_clbk_);
     177              37 :         ec_min_init (envp, 1);
     178              37 :         already_executed++;
     179                 : 
     180              37 :         module_count = min_clbk_.min_open();
     181              74 :         while (module_count > ready_module_count_) {
     182               0 :                 usleep (50000);
     183                 :         }
     184              37 :         usleep (500000);
     185              37 :         if ((engine_ini != NULL) && (strlen (engine_ini) != 0)) {
     186               0 :                 ec_read_settings (engine_ini);
     187                 : 
     188                 :         }
     189                 : 
     190              37 :         return 0;
     191                 : }
     192                 : 
     193                 : /* ------------------------------------------------------------------------- */
     194                 : int min_if_close ()
     195              24 : {
     196                 :         /*
     197                 :         ** Clear lists 
     198                 :         */
     199              24 :         dl_list_foreach (dl_list_head (tfwif_modules_),
     200                 :                          dl_list_tail (tfwif_modules_),
     201                 :                          _del_internal_mod_info);
     202              24 :         dl_list_free (&tfwif_modules_);
     203              24 :         dl_list_foreach (dl_list_head (tfwif_test_runs_),
     204                 :                          dl_list_tail (tfwif_test_runs_),
     205                 :                          free);
     206              24 :         dl_list_free (&tfwif_test_runs_);
     207                 : 
     208              24 :         if(min_clbk_.min_close) {
     209              24 :                 min_clbk_.min_close();
     210                 :         }
     211                 : 
     212              24 :         MIN_DEBUG ("MODULES FREED");
     213              24 :         ready_module_count_ = 0;
     214              24 :         usleep (500000);
     215                 : 
     216              24 :         return 0;
     217                 : }
     218                 : 
     219                 : 
     220                 : /* ------------------------------------------------------------------------- */
     221                 : int min_if_message_received (char *message, int length)
     222               7 : {
     223               7 :         if(min_clbk_.receive_rcp) {
     224               7 :                 return min_clbk_.receive_rcp(message, length);
     225                 :         }
     226                 :         
     227                 : 
     228               0 :         return 1;
     229                 : }
     230                 : 
     231                 : /* ------------------------------------------------------------------------- */
     232                 : int min_if_exec_case (char *module, unsigned int id)
     233              22 : {
     234                 :         internal_module_info *mi;
     235              22 :         internal_test_run_info *tri = INITPTR;
     236                 : 
     237                 :         DLListIterator it;
     238              22 :         int cont = 1;
     239              22 :         pthread_mutex_lock (&tfwif_mutex_);
     240              22 :         it = dl_list_find (dl_list_head (tfwif_modules_),
     241                 :                            dl_list_tail (tfwif_modules_),
     242                 :                            _find_mod_by_name,
     243                 :                            (const void *)module);
     244              22 :         pthread_mutex_unlock (&tfwif_mutex_);
     245                 : 
     246              22 :         if (it == INITPTR)
     247               1 :                 return 1;
     248                 : 
     249              21 :         mi = dl_list_data (it);
     250                 : 
     251              21 :         if (!min_clbk_.start_case (mi->module_id_, id, 0)) {
     252             265 :                 while (cont) {
     253             229 :                         usleep (10000);
     254             229 :                         pthread_mutex_lock (&tfwif_mutex_);
     255             229 :                         for (it = dl_list_head (tfwif_test_runs_);
     256             520 :                              it != INITPTR;
     257              62 :                              it = dl_list_next (it)) {
     258              80 :                                 tri = dl_list_data (it);
     259              80 :                                 if (tri->module_id_ != mi->module_id_)
     260               0 :                                         continue;
     261              80 :                                 if (tri->status_ != TP_RUNNING)
     262               0 :                                         continue;
     263              80 :                                 if (tri->case_id_ != id)
     264              62 :                                         continue;
     265                 :                                 /* we found the just started test case */
     266              18 :                                 cont = 0;
     267              18 :                                 break;
     268                 :                                 
     269                 :                         }
     270             229 :                         pthread_mutex_unlock (&tfwif_mutex_);
     271                 : 
     272                 :                 }
     273                 :         } else
     274               0 :                 return -1;
     275                 : 
     276              36 :         MIN_DEBUG("test started with runid=%d", tri->test_run_id_);
     277              18 :         return tri->test_run_id_;
     278                 : }
     279                 : 
     280                 : /* ------------------------------------------------------------------------- */
     281                 : int min_if_cancel_case (unsigned int runtime_id)
     282               5 : {
     283                 :         DLListIterator it;
     284                 : 
     285                 : 
     286               5 :         pthread_mutex_lock (&tfwif_mutex_);
     287               5 :         it = dl_list_find (dl_list_head (tfwif_test_runs_),
     288                 :                            dl_list_tail (tfwif_test_runs_),
     289                 :                            _find_testrun_by_id,
     290                 :                            (const void *)&runtime_id);
     291               5 :         pthread_mutex_unlock (&tfwif_mutex_);
     292                 : 
     293               5 :         if (it == INITPTR)
     294               3 :                 return 1;
     295                 : 
     296               2 :         return min_clbk_.abort_case (runtime_id);
     297                 : }
     298                 : 
     299                 : /* ------------------------------------------------------------------------- */
     300                 : int min_if_pause_case (unsigned int runtime_id)
     301               7 : {
     302                 :         DLListIterator it;
     303                 : 
     304               7 :         pthread_mutex_lock (&tfwif_mutex_);
     305               7 :         it = dl_list_find (dl_list_head (tfwif_test_runs_),
     306                 :                            dl_list_tail (tfwif_test_runs_),
     307                 :                            _find_testrun_by_id,
     308                 :                            (const void *)&runtime_id);
     309               7 :         pthread_mutex_unlock (&tfwif_mutex_);
     310                 : 
     311               7 :         if (it == INITPTR)
     312               3 :                 return 1;
     313                 : 
     314               4 :         return min_clbk_.pause_case (runtime_id);
     315                 : }
     316                 : 
     317                 : /* ------------------------------------------------------------------------- */
     318                 : 
     319                 : int min_if_get_cases (module_info ** modules_arg)
     320              15 : {
     321                 : 
     322              15 :         int             extif_list_size = 0;
     323              15 :         DLListIterator  mod_it = DLListNULLIterator;
     324              15 :         DLListIterator  case_it = DLListNULLIterator;
     325              15 :         int i = 0, j, cases_count;
     326              15 :         module_info    *modules = NULL;
     327                 :         internal_module_info *mi;
     328                 :         min_case *mc;
     329                 : 
     330              15 :         extif_list_size = dl_list_size(tfwif_modules_);
     331              15 :         modules = NEW2 (module_info, extif_list_size);
     332                 :                                 
     333              15 :         pthread_mutex_lock (&tfwif_mutex_);
     334              15 :         for (mod_it = dl_list_head (tfwif_modules_);
     335              73 :              mod_it != DLListNULLIterator;
     336              43 :              mod_it = dl_list_next (mod_it)) {
     337              43 :                 mi = dl_list_data (mod_it);
     338                 :                 
     339              43 :                 STRCPY (modules[i].module_name_, mi->module_name_, 128);
     340                 :                      
     341              43 :                 cases_count = dl_list_size (mi->test_case_list_);
     342              43 :                 modules[i].num_test_cases_ = cases_count;
     343              43 :                 modules[i].test_cases_ = NEW2 (min_case, cases_count);
     344              43 :                 j = 0;
     345              43 :                 for (case_it = dl_list_head (mi->test_case_list_);
     346             230 :                      case_it != DLListNULLIterator;
     347             144 :                      case_it = dl_list_next (case_it)) {
     348             144 :                         mc = dl_list_data (case_it);
     349             144 :                         modules[i].test_cases_[j] = *mc;
     350             144 :                         j++;
     351                 :                      }
     352              43 :                 i ++;
     353                 :         }
     354              15 :         pthread_mutex_unlock (&tfwif_mutex_);
     355                 : 
     356              15 :         *modules_arg = modules;
     357              15 :         MIN_DEBUG ("Number of modules = %d, modules: %x", extif_list_size,
     358                 :                    modules);
     359                 :         
     360              15 :         return extif_list_size;
     361                 : }
     362                 : 
     363                 : /* ------------------------------------------------------------------------- */
     364                 : 
     365                 : int min_if_resume_case (unsigned int runtime_id)
     366               5 : {
     367                 :         DLListIterator it;
     368                 : 
     369               5 :         pthread_mutex_lock (&tfwif_mutex_);
     370               5 :         it = dl_list_find (dl_list_head (tfwif_test_runs_),
     371                 :                            dl_list_tail (tfwif_test_runs_),
     372                 :                            _find_testrun_by_id,
     373                 :                            (const void *)&runtime_id);
     374               5 :         pthread_mutex_unlock (&tfwif_mutex_);
     375                 :                         
     376               5 :         if (it == INITPTR)
     377               4 :                 return 1;
     378                 : 
     379               1 :         return min_clbk_.resume_case (runtime_id);
     380                 : }
     381                 : 
     382                 : /* ------------------------------------------------------------------------- */
     383                 : int min_if_module_add (char *module_name, char *conf_name)
     384              69 : {
     385              69 :         DLListIterator it = INITPTR;
     386                 :         internal_module_info *mi;
     387                 : 
     388              69 :         MIN_DEBUG ("MODULE:%s, CONFIG:%s", module_name, 
     389                 :                    conf_name != NULL ? conf_name : "<null>");
     390              69 :         if (min_clbk_.add_test_module (module_name)) {
     391               0 :                 MIN_WARN ("Returning error");
     392               0 :                 return 1;
     393                 :         }
     394             207 :         while (it == INITPTR) {
     395                 : 
     396              69 :                 usleep (500000);
     397                 : 
     398              69 :                 pthread_mutex_lock (&tfwif_mutex_);
     399              69 :                 it = dl_list_find (dl_list_head (tfwif_modules_),
     400                 :                                    dl_list_tail (tfwif_modules_),
     401                 :                                    _find_mod_by_name,
     402                 :                                    (const void *)module_name);
     403              69 :                 pthread_mutex_unlock (&tfwif_mutex_);
     404                 : 
     405                 :         }
     406                 : 
     407              69 :         mi = dl_list_data (it);
     408              69 :         if (conf_name && 
     409                 :             min_clbk_.add_test_case_file (mi->module_id_, conf_name)) {
     410               1 :                 MIN_WARN ("returning error");
     411               1 :                 return 1;
     412                 :         }
     413              68 :         min_clbk_.add_test_case_file (mi->module_id_, "");
     414                 : 
     415            1801 :         while (!mi->module_ready_)
     416            1669 :                 usleep (10000);
     417                 : 
     418              66 :         if (dl_list_size (mi->test_case_list_) == 0) {
     419                 :                 /*
     420                 :                 ** Module added succesfully, but does not contain any cases,
     421                 :                 ** we can remove it now.
     422                 :                 */
     423               0 :                 pthread_mutex_lock (&tfwif_mutex_);
     424               0 :                 dl_list_remove_it (it);
     425               0 :                 _del_internal_mod_info (mi);
     426               0 :                 pthread_mutex_unlock (&tfwif_mutex_);
     427                 : 
     428                 :         }
     429                 : 
     430              66 :         return 0;
     431                 : }
     432                 : 
     433                 : 
     434                 : void pl_attach_plugin (eapiIn_t **out_callback, eapiOut_t *in_callback)
     435              37 : {
     436                 :         /* Binds the callbacks */
     437                 : 
     438                 : 
     439              37 :        (*out_callback)->case_result            = pl_case_result;
     440              37 :        (*out_callback)->case_started           = pl_case_started;
     441              37 :        (*out_callback)->case_paused            = pl_case_paused;
     442              37 :        (*out_callback)->case_resumed           = pl_case_resumed;
     443              37 :        (*out_callback)->module_prints          = pl_msg_print;
     444              37 :        (*out_callback)->new_module             = pl_new_module;
     445              37 :        (*out_callback)->no_module              = pl_no_module;
     446              37 :        (*out_callback)->module_ready           = pl_module_ready;
     447              37 :        (*out_callback)->new_case               = pl_new_case;
     448              37 :        (*out_callback)->error_report           = pl_error_report;
     449              37 :        (*out_callback)->send_rcp               = pl_send_rcp;
     450                 :        
     451                 :        return;
     452                 : }
     453                 : /* ------------------------------------------------------------------------- */
     454                 : void pl_open_plugin (void *arg)
     455               0 : {
     456                 :         return;
     457                 : }
     458                 : /* ------------------------------------------------------------------------- */
     459                 : void pl_close_plugin ()
     460               0 : {
     461                 :         return;
     462                 : }
     463                 : /* ------------------------------------------------------------------------- */
     464                 : void pl_detach_plugin (eapiIn_t **out_callback, eapiOut_t *in_callback)
     465               0 : {
     466                 :         return;
     467                 : }
     468                 : /* ------------------------------------------------------------------------- */
     469                 : 
     470                 : 
     471                 : LOCAL void pl_case_result (long testrunid, int result, char *desc,
     472               6 :                            long starttime, long endtime){
     473                 : 
     474                 :         
     475               6 :         internal_test_run_info *tri = INITPTR;
     476               6 :         DLListIterator  test_run_item = DLListNULLIterator;
     477                 : 
     478               6 :         pthread_mutex_lock (&tfwif_mutex_);
     479               6 :         test_run_item = dl_list_find (dl_list_head (tfwif_test_runs_),
     480                 :                                       dl_list_tail (tfwif_test_runs_),
     481                 :                                       _find_testrun_by_id,
     482                 :                                       (const void *)&testrunid);
     483               6 :         pthread_mutex_unlock (&tfwif_mutex_);
     484                 : 
     485               6 :         if (test_run_item == DLListNULLIterator) {
     486               0 :                 MIN_WARN ("no matching test run info found testrun id = %d",
     487                 :                           testrunid);
     488               0 :                 return;
     489                 :         }
     490               6 :         tri = dl_list_data (test_run_item);
     491               6 :         tri->status_ = TP_ENDED;
     492               6 :         tfwif_callbacks.complete_callback_ (tri->test_run_id_, 1, result, desc);
     493                 : 
     494                 : 
     495               6 :         return;
     496                 : };
     497                 : /* ------------------------------------------------------------------------- */
     498                 : LOCAL void pl_case_started (unsigned moduleid,
     499                 :                             unsigned caseid,
     500                 :                             long testrunid)
     501              27 : {
     502                 :         internal_test_run_info *tri;
     503                 : 
     504              27 :         if(tfwif_test_runs_==INITPTR){
     505              25 :                 tfwif_test_runs_=dl_list_create();
     506                 :         }
     507                 : 
     508              27 :         tri = NEW (internal_test_run_info);
     509              27 :         tri->case_id_ = caseid;
     510              27 :         tri->test_run_id_ = testrunid;
     511              27 :         tri->module_id_ = moduleid;
     512              27 :         tri->status_ = TP_RUNNING;
     513              27 :         tri->group_id_=0;
     514                 : 
     515              27 :         dl_list_add (tfwif_test_runs_, tri);
     516                 : 
     517                 :         return; 
     518                 : };
     519                 : /* ------------------------------------------------------------------------- */
     520                 : LOCAL void pl_case_paused (long testrunid)
     521               5 : {
     522               5 :         internal_test_run_info *tri = INITPTR;
     523               5 :         DLListIterator  test_run_item = DLListNULLIterator;
     524                 : 
     525                 : 
     526               5 :         pthread_mutex_lock (&tfwif_mutex_);
     527               5 :         test_run_item = dl_list_find (dl_list_head (tfwif_test_runs_),
     528                 :                                       dl_list_tail (tfwif_test_runs_),
     529                 :                                       _find_testrun_by_id,
     530                 :                                       (const void *)&testrunid);
     531               5 :         pthread_mutex_unlock (&tfwif_mutex_);
     532                 : 
     533               5 :         tri = dl_list_data (test_run_item);
     534               5 :         if(tri->status_ == TP_RUNNING &&
     535                 :            tri->test_run_id_ == testrunid){
     536               5 :                 tri->status_ = TP_PAUSED;
     537                 :         }
     538                 : 
     539                 :         return;
     540                 : };
     541                 : /* ------------------------------------------------------------------------- */
     542                 : LOCAL void pl_case_resumed (long testrunid)
     543               1 : {
     544               1 :         internal_test_run_info *tri = INITPTR;
     545               1 :         DLListIterator  test_run_item = DLListNULLIterator;
     546                 : 
     547                 : 
     548               1 :         pthread_mutex_lock (&tfwif_mutex_);
     549               1 :         test_run_item = dl_list_find (dl_list_head (tfwif_test_runs_),
     550                 :                                       dl_list_tail (tfwif_test_runs_),
     551                 :                                       _find_testrun_by_id,
     552                 :                                       (const void *)&testrunid);
     553               1 :         pthread_mutex_unlock (&tfwif_mutex_);
     554                 : 
     555               1 :         tri = dl_list_data (test_run_item);
     556               1 :         if(tri->status_==TP_PAUSED &&
     557                 :            tri->test_run_id_ == testrunid){
     558               1 :                 tri->status_ = TP_RUNNING;
     559                 :         }
     560                 : 
     561                 :         return;
     562                 : };
     563                 : /* ------------------------------------------------------------------------- */
     564                 : LOCAL void pl_msg_print (long testrunid, char *message)
     565               4 : {
     566                 : 
     567               4 :         printf ("test module message: %s\n", message);
     568               4 :         tfwif_callbacks.print_callback_ (testrunid, message);
     569                 : 
     570                 :         return;
     571                 : };
     572                 : /* ------------------------------------------------------------------------- */
     573                 : LOCAL void pl_new_module (char *modulename, unsigned moduleid)
     574              96 : {
     575                 :         internal_module_info *mi;
     576                 :         
     577              96 :         mi = NEW (internal_module_info);
     578              96 :         STRCPY(mi->module_name_, modulename, 128);
     579              96 :         mi->test_case_list_ = dl_list_create();
     580              96 :         mi->module_id_ = moduleid;
     581              96 :         mi->module_ready_ = 0;
     582                 : 
     583              96 :         pthread_mutex_lock (&tfwif_mutex_);
     584              96 :         MIN_DEBUG ("adding module to %x", tfwif_modules_);
     585              96 :         dl_list_add (tfwif_modules_, mi);
     586              96 :         pthread_mutex_unlock (&tfwif_mutex_);
     587                 : 
     588                 : 
     589                 : 
     590                 :         return;
     591                 : };
     592                 : /* ------------------------------------------------------------------------- */
     593                 : LOCAL void pl_module_ready ( unsigned moduleid)
     594              98 : {
     595                 :         internal_module_info *mi;
     596                 :         DLListIterator it;
     597                 :         
     598              98 :         pthread_mutex_lock (&tfwif_mutex_);
     599                 : 
     600              98 :         it = dl_list_find (dl_list_head (tfwif_modules_),
     601                 :                            dl_list_tail (tfwif_modules_),
     602                 :                            _find_mod_by_id,
     603                 :                            (const void *)&moduleid);
     604              98 :         pthread_mutex_unlock (&tfwif_mutex_);
     605              98 :         if (it == INITPTR)
     606               0 :                 return;
     607                 : 
     608              98 :         ready_module_count_ ++;
     609              98 :         mi = dl_list_data (it);
     610              98 :         mi->module_ready_ = 1;
     611                 : 
     612              98 :         return;
     613                 : };
     614                 : /* ------------------------------------------------------------------------- */
     615                 : LOCAL void pl_no_module (char *modulename)
     616               0 : {
     617                 :         return;
     618                 : };
     619                 : /* ------------------------------------------------------------------------- */
     620                 : LOCAL void pl_new_case (unsigned moduleid, unsigned caseid, char *casetitle)
     621             316 : {
     622                 :         internal_module_info *mi;
     623                 :         min_case *mc;
     624                 :         DLListIterator it;
     625                 : 
     626             316 :         pthread_mutex_lock (&tfwif_mutex_);
     627                 : 
     628             316 :         it = dl_list_find (dl_list_head (tfwif_modules_),
     629                 :                            dl_list_tail (tfwif_modules_),
     630                 :                            _find_mod_by_id,
     631                 :                            (const void *)&moduleid);
     632                 : 
     633             316 :         if (it == INITPTR) {
     634               0 :                 pthread_mutex_unlock (&tfwif_mutex_);
     635               0 :                 MIN_WARN ("NO MODULE FOUND WITH ID %s",moduleid);
     636               0 :                 return;
     637                 :         }
     638             316 :         mi = dl_list_data (it);
     639             316 :         mc = NEW(min_case);
     640             316 :         mc->case_id_ = caseid;
     641             316 :         STRCPY (mc->case_name_, casetitle, 256);
     642             316 :         dl_list_add (mi->test_case_list_, mc);
     643             316 :         pthread_mutex_unlock (&tfwif_mutex_);
     644                 : 
     645             316 :         return;
     646                 : };
     647                 : 
     648                 : /* ------------------------------------------------------------------------- */
     649                 : LOCAL void pl_error_report (char *error)
     650               0 : {
     651               0 :         printf ("%s\n", error);
     652                 :         return;
     653                 : };
     654                 : 
     655                 : /* ------------------------------------------------------------------------- */
     656                 : LOCAL void pl_send_rcp (char *cmd, char *sender, char *rcvr, char* msg, 
     657                 :                         int param)
     658               6 : {
     659                 :         Text *tx;
     660                 : 
     661               6 :         tx = tx_create (cmd);
     662               6 :         tx_c_append (tx, " ");
     663               6 :         tx_c_append (tx, sender);
     664               6 :         tx_c_append (tx, " ");
     665               6 :         tx_c_append (tx, rcvr);
     666               6 :         tx_c_append (tx, " ");
     667               6 :         tx_c_append (tx, msg);
     668                 : 
     669               6 :         MIN_DEBUG ("SENDING TO EXTIF :%s", tx_share_buf (tx));
     670                 : 
     671               6 :         tfwif_callbacks.send_extif_msg_ (tx_share_buf (tx), 
     672                 :                                          strlen (tx_share_buf (tx)));
     673                 : 
     674               6 :         tx_destroy (&tx);
     675                 : 
     676                 :         return;
     677                 : };
     678                 : 
     679                 : /* ------------------------------------------------------------------------- */
     680                 : LOCAL int _find_mod_by_id (const void *a, const void *b)
     681             792 : {
     682             792 :         internal_module_info *tmp1 = (internal_module_info*)a;
     683             792 :         unsigned *tmp2 = (unsigned*)b;
     684                 : 
     685             792 :         if (tmp1->module_id_ ==(*tmp2)) return 0;
     686             378 :         else return -1;
     687                 : }
     688                 : 
     689                 : /* ------------------------------------------------------------------------- */
     690                 : LOCAL int _find_mod_by_name (const void *a, const void *b)
     691             163 : {
     692             163 :         internal_module_info *tmp1 = (internal_module_info*)a;
     693                 : 
     694             163 :         return strncmp (tmp1->module_name_, (const char *)b, 128); 
     695                 : }
     696                 : 
     697                 : /*---------------------------------------------------------------------------*/
     698                 : LOCAL int _find_testrun_by_id (const void *a, const void *b)
     699              25 : {
     700              25 :         internal_test_run_info *trp1 = (internal_test_run_info*)a;
     701              25 :         unsigned *tmp2 = (unsigned*)b;
     702                 : 
     703              25 :         if (trp1->test_run_id_ ==(*tmp2)) return 0;
     704               6 :         else return -1;
     705                 : }
     706                 : 
     707                 : /*---------------------------------------------------------------------------*/
     708                 : LOCAL void _del_internal_mod_info (void *data)
     709              57 : {
     710              57 :         internal_module_info *mi = (internal_module_info*)data;
     711              57 :         dl_list_foreach (dl_list_head (mi->test_case_list_),
     712                 :                          dl_list_tail (mi->test_case_list_),
     713                 :                          free);
     714              57 :         dl_list_free (&mi->test_case_list_);
     715              57 :         DELETE (mi);
     716              57 : }
     717                 : 
     718                 : /* ================= OTHER EXPORTED FUNCTIONS ============================== */
     719                 : /* None */
     720                 : 
     721                 : 
     722                 : /* ================= TESTS FOR LOCAL FUNCTIONS ============================= */
     723                 : #ifdef MIN_UNIT_TEST
     724                 : #include "mintfwif.tests"
     725                 : 
     726                 : #endif                          /* MIN_UNIT_TEST */
     727                 : 
     728                 : /* End of file */

Generated by: LTP GCOV extension version 1.6