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 }
00148
00149
00150
00155 const char *case_result_str (case_result_t cr)
00156 {
00157 if (cr > CASE_NA || cr < CASE_FAIL)
00158 return "INVALID";
00159 return case_res_str[cr];
00160 }
00164 td_suite *td_suite_create()
00165 {
00166 td_suite *s = (td_suite *)malloc (sizeof (td_suite));
00167 if (s == NULL) {
00168 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00169 return NULL;
00170 }
00171
00172 memset (s, 0x0, sizeof (td_suite));
00173 return s;
00174 }
00175
00179 void td_suite_delete(td_suite *s)
00180 {
00181 gen_attribs_delete (&s->gen);
00182 free (s);
00183 }
00184
00188 td_set *td_set_create ()
00189 {
00190 td_set *set = (td_set *)malloc (sizeof (td_set));
00191 xmlChar *env;
00192 if (set == NULL) {
00193 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00194 return NULL;
00195 }
00196 memset (set, 0x0, sizeof (td_set));
00197 set->pre_steps = xmlListCreate (td_steps_delete, list_dummy_compare);
00198 set->post_steps = xmlListCreate (td_steps_delete, list_dummy_compare);
00199 set->cases = xmlListCreate (td_case_delete, list_dummy_compare);
00200 set->environments = xmlListCreate (list_string_delete,
00201 list_string_compare);
00202
00203
00204
00205
00206 env = xmlCharStrdup ("hardware");
00207 xmlListAppend (set->environments, env);
00208 env = xmlCharStrdup ("scratchbox");
00209 xmlListAppend (set->environments, env);
00210
00211 set->gets = xmlListCreate (td_file_delete, NULL);
00212
00213 return set;
00214 }
00215
00219 void td_set_delete(td_set *s)
00220 {
00221 gen_attribs_delete(&s->gen);
00222
00223 xmlListDelete (s->pre_steps);
00224 xmlListDelete (s->post_steps);
00225 xmlListDelete (s->cases);
00226 xmlListDelete (s->environments);
00227 xmlListDelete (s->gets);
00228 free (s->environment);
00229 free (s);
00230 }
00231
00235 td_step *td_step_create()
00236 {
00237 td_step *step;
00238
00239 step = (td_step *) malloc (sizeof (td_step));
00240 if (step == NULL) {
00241 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00242 return NULL;
00243 }
00244 memset (step, 0x0, sizeof (td_step));
00245 return step;
00246 }
00247
00251 td_case *td_case_create()
00252 {
00253 td_case *td_c;
00254
00255 td_c = (td_case *) malloc (sizeof (td_case));
00256 if (td_c == NULL) {
00257 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00258 return NULL;
00259 }
00260 memset (td_c, 0x0, sizeof (td_case));
00261 td_c->steps = xmlListCreate (td_step_delete, list_dummy_compare);
00262
00263 return td_c;
00264 }
00265
00269 td_steps *td_steps_create()
00270 {
00271 td_steps *steps;
00272
00273 steps = (td_steps *) malloc (sizeof (td_steps));
00274 if (steps == NULL) {
00275 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00276 return NULL;
00277 }
00278 memset (steps, 0x0, sizeof (td_steps));
00279 steps->timeout = 0;
00280 steps->steps = xmlListCreate (td_step_delete, list_dummy_compare);
00281
00282 return steps;
00283 }
00284
00287 void td_step_delete(xmlLinkPtr lk)
00288 {
00289 td_step *step = xmlLinkGetData (lk);
00290 if (step->step)
00291 free (step->step);
00292
00293 free (step->stdout_);
00294 free (step->stderr_);
00295 free (step->failure_info);
00296
00297 free (step);
00298 }
00299
00302 void td_case_delete(xmlLinkPtr lk)
00303 {
00304 td_case *td_c = xmlLinkGetData (lk);
00305 xmlListDelete (td_c->steps);
00306 free (td_c->comment);
00307 free (td_c->failure_info);
00308 free (td_c->tc_title);
00309 free (td_c->state);
00310 gen_attribs_delete(&td_c->gen);
00311 free (td_c);
00312 }
00313
00316 void td_steps_delete(xmlLinkPtr lk)
00317 {
00318 td_steps *steps = xmlLinkGetData (lk);
00319 xmlListDelete (steps->steps);
00320 free (steps);
00321 }
00322
00323
00324
00325
00326
00327
00328