00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <stdio.h>
00027 #include <stdlib.h>
00028 #include <getopt.h>
00029 #include <errno.h>
00030 #include <string.h>
00031
00032 #include <libxml/xmlreader.h>
00033 #include <libxml/xmlschemas.h>
00034
00035 #include "testrunnerlite.h"
00036 #include "testdefinitiondatatypes.h"
00037 #include "log.h"
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 LOCAL const char *case_res_str[] = {"FAIL", "PASS", "N/A"};
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 LOCAL void list_string_delete (xmlLinkPtr);
00079
00080 LOCAL void gen_attribs_delete (td_gen_attribs *);
00081
00082 LOCAL int list_string_compare (const void *, const void *);
00083
00084
00085
00086
00087
00088
00089
00093 LOCAL void list_string_delete (xmlLinkPtr lk)
00094 {
00095 xmlChar *string = (xmlChar *)xmlLinkGetData (lk);
00096 free (string);
00097 }
00098
00104 LOCAL int list_string_compare(const void * data0,
00105 const void * data1)
00106 {
00107
00108 return xmlStrcmp ((xmlChar *)data0, (xmlChar *)data1);
00109 }
00110
00116 LOCAL int list_dummy_compare(const void * data0,
00117 const void * data1)
00118 {
00119
00120 return 0;
00121 }
00122
00126 LOCAL void td_file_delete (xmlLinkPtr lk)
00127 {
00128 td_file *file = (td_file *)xmlLinkGetData (lk);
00129 free (file->filename);
00130 free (file);
00131 }
00132
00133
00137 LOCAL void gen_attribs_delete (td_gen_attribs *gen)
00138 {
00139 free (gen->name);
00140 free (gen->description);
00141 free (gen->requirement);
00142 free (gen->level);
00143 free (gen->type);
00144 free (gen->domain);
00145 free (gen->feature);
00146 free (gen->component);
00147 free (gen->hwid);
00148 }
00149
00150
00151
00156 const char *case_result_str (case_result_t cr)
00157 {
00158 if (cr > CASE_NA || cr < CASE_FAIL)
00159 return "INVALID";
00160 return case_res_str[cr];
00161 }
00165 td_td *td_td_create()
00166 {
00167 td_td *td = (td_td *)malloc (sizeof (td_td));
00168 if (td == NULL) {
00169 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00170 return NULL;
00171 }
00172
00173 memset (td, 0x0, sizeof (td_td));
00174 return td;
00175 }
00176
00180 void td_td_delete(td_td *td)
00181 {
00182 if (td) {
00183 xmlFree(td->hw_detector);
00184 xmlFree(td->detected_hw);
00185 free (td);
00186 }
00187 }
00191 td_suite *td_suite_create()
00192 {
00193 td_suite *s = (td_suite *)malloc (sizeof (td_suite));
00194 if (s == NULL) {
00195 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00196 return NULL;
00197 }
00198
00199 memset (s, 0x0, sizeof (td_suite));
00200 return s;
00201 }
00202
00206 void td_suite_delete(td_suite *s)
00207 {
00208 gen_attribs_delete (&s->gen);
00209 free (s);
00210 }
00211
00215 td_set *td_set_create ()
00216 {
00217 td_set *set = (td_set *)malloc (sizeof (td_set));
00218 xmlChar *env;
00219 if (set == NULL) {
00220 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00221 return NULL;
00222 }
00223 memset (set, 0x0, sizeof (td_set));
00224 set->pre_steps = xmlListCreate (td_steps_delete, list_dummy_compare);
00225 set->post_steps = xmlListCreate (td_steps_delete, list_dummy_compare);
00226 set->cases = xmlListCreate (td_case_delete, list_dummy_compare);
00227 set->environments = xmlListCreate (list_string_delete,
00228 list_string_compare);
00229
00230
00231
00232
00233 env = xmlCharStrdup ("hardware");
00234 xmlListAppend (set->environments, env);
00235 env = xmlCharStrdup ("scratchbox");
00236 xmlListAppend (set->environments, env);
00237
00238 set->gets = xmlListCreate (td_file_delete, NULL);
00239
00240 return set;
00241 }
00242
00246 void td_set_delete(td_set *s)
00247 {
00248 gen_attribs_delete(&s->gen);
00249
00250 xmlListDelete (s->pre_steps);
00251 xmlListDelete (s->post_steps);
00252 xmlListDelete (s->cases);
00253 xmlListDelete (s->environments);
00254 xmlListDelete (s->gets);
00255 free (s->environment);
00256 free (s);
00257 }
00258
00262 td_step *td_step_create()
00263 {
00264 td_step *step;
00265
00266 step = (td_step *) malloc (sizeof (td_step));
00267 if (step == NULL) {
00268 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00269 return NULL;
00270 }
00271 memset (step, 0x0, sizeof (td_step));
00272 return step;
00273 }
00274
00278 td_case *td_case_create()
00279 {
00280 td_case *td_c;
00281
00282 td_c = (td_case *) malloc (sizeof (td_case));
00283 if (td_c == NULL) {
00284 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00285 return NULL;
00286 }
00287 memset (td_c, 0x0, sizeof (td_case));
00288 td_c->steps = xmlListCreate (td_step_delete, list_dummy_compare);
00289
00290 return td_c;
00291 }
00292
00296 td_steps *td_steps_create()
00297 {
00298 td_steps *steps;
00299
00300 steps = (td_steps *) malloc (sizeof (td_steps));
00301 if (steps == NULL) {
00302 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00303 return NULL;
00304 }
00305 memset (steps, 0x0, sizeof (td_steps));
00306 steps->timeout = 0;
00307 steps->steps = xmlListCreate (td_step_delete, list_dummy_compare);
00308
00309 return steps;
00310 }
00311
00314 void td_step_delete(xmlLinkPtr lk)
00315 {
00316 td_step *step = xmlLinkGetData (lk);
00317 if (step->step)
00318 free (step->step);
00319
00320 free (step->stdout_);
00321 free (step->stderr_);
00322 free (step->failure_info);
00323
00324 free (step);
00325 }
00326
00329 void td_case_delete(xmlLinkPtr lk)
00330 {
00331 td_case *td_c = xmlLinkGetData (lk);
00332 xmlListDelete (td_c->steps);
00333 free (td_c->comment);
00334 free (td_c->failure_info);
00335 free (td_c->tc_title);
00336 free (td_c->state);
00337 gen_attribs_delete(&td_c->gen);
00338 free (td_c);
00339 }
00340
00343 void td_steps_delete(xmlLinkPtr lk)
00344 {
00345 td_steps *steps = xmlLinkGetData (lk);
00346 xmlListDelete (steps->steps);
00347 free (steps);
00348 }
00349
00350
00351
00352
00353
00354
00355