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 xmlFree(td->version);
00186 xmlFree(td->description);
00187 free (td);
00188 }
00189 }
00193 td_suite *td_suite_create()
00194 {
00195 td_suite *s = (td_suite *)malloc (sizeof (td_suite));
00196 if (s == NULL) {
00197 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00198 return NULL;
00199 }
00200
00201 memset (s, 0x0, sizeof (td_suite));
00202 s->gen.timeout = DEFAULT_TIMEOUT;
00203 return s;
00204 }
00205
00209 void td_suite_delete(td_suite *s)
00210 {
00211 gen_attribs_delete (&s->gen);
00212 xmlFree (s->description);
00213 free (s);
00214 }
00215
00219 td_set *td_set_create ()
00220 {
00221 td_set *set = (td_set *)malloc (sizeof (td_set));
00222 xmlChar *env;
00223 if (set == NULL) {
00224 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00225 return NULL;
00226 }
00227 memset (set, 0x0, sizeof (td_set));
00228 set->pre_steps = xmlListCreate (td_steps_delete, list_dummy_compare);
00229 set->post_steps = xmlListCreate (td_steps_delete, list_dummy_compare);
00230 set->cases = xmlListCreate (td_case_delete, list_dummy_compare);
00231 set->environments = xmlListCreate (list_string_delete,
00232 list_string_compare);
00233
00234
00235
00236
00237 env = xmlCharStrdup ("hardware");
00238 xmlListAppend (set->environments, env);
00239 env = xmlCharStrdup ("scratchbox");
00240 xmlListAppend (set->environments, env);
00241
00242 set->gets = xmlListCreate (td_file_delete, NULL);
00243
00244 return set;
00245 }
00246
00250 void td_set_delete(td_set *s)
00251 {
00252 gen_attribs_delete(&s->gen);
00253
00254 xmlListDelete (s->pre_steps);
00255 xmlListDelete (s->post_steps);
00256 xmlListDelete (s->cases);
00257 xmlListDelete (s->environments);
00258 xmlListDelete (s->gets);
00259 xmlFree (s->description);
00260 xmlFree (s->environment);
00261 free (s);
00262 }
00263
00267 td_step *td_step_create()
00268 {
00269 td_step *step;
00270
00271 step = (td_step *) malloc (sizeof (td_step));
00272 if (step == NULL) {
00273 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00274 return NULL;
00275 }
00276 memset (step, 0x0, sizeof (td_step));
00277 return step;
00278 }
00279
00283 td_case *td_case_create()
00284 {
00285 td_case *td_c;
00286
00287 td_c = (td_case *) malloc (sizeof (td_case));
00288 if (td_c == NULL) {
00289 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00290 return NULL;
00291 }
00292 memset (td_c, 0x0, sizeof (td_case));
00293 td_c->steps = xmlListCreate (td_step_delete, list_dummy_compare);
00294
00295 return td_c;
00296 }
00297
00301 td_steps *td_steps_create()
00302 {
00303 td_steps *steps;
00304
00305 steps = (td_steps *) malloc (sizeof (td_steps));
00306 if (steps == NULL) {
00307 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00308 return NULL;
00309 }
00310 memset (steps, 0x0, sizeof (td_steps));
00311 steps->timeout = DEFAULT_PRE_STEP_TIMEOUT;
00312 steps->steps = xmlListCreate (td_step_delete, list_dummy_compare);
00313
00314 return steps;
00315 }
00316
00319 void td_step_delete(xmlLinkPtr lk)
00320 {
00321 td_step *step = xmlLinkGetData (lk);
00322 if (step->step)
00323 free (step->step);
00324
00325 free (step->stdout_);
00326 free (step->stderr_);
00327 free (step->failure_info);
00328
00329 free (step);
00330 }
00331
00334 void td_case_delete(xmlLinkPtr lk)
00335 {
00336 td_case *td_c = xmlLinkGetData (lk);
00337 xmlListDelete (td_c->steps);
00338 xmlFree (td_c->comment);
00339 xmlFree (td_c->failure_info);
00340 xmlFree (td_c->tc_id);
00341 xmlFree (td_c->state);
00342 xmlFree (td_c->subfeature);
00343 xmlFree (td_c->bugzilla_id);
00344 xmlFree (td_c->description);
00345
00346 gen_attribs_delete(&td_c->gen);
00347 free (td_c);
00348 }
00349
00352 void td_steps_delete(xmlLinkPtr lk)
00353 {
00354 td_steps *steps = xmlLinkGetData (lk);
00355 xmlListDelete (steps->steps);
00356 free (steps);
00357 }
00358
00359
00360
00361
00362
00363
00364