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 }
00145
00146
00147
00152 const char *case_result_str (case_result_t cr)
00153 {
00154 if (cr > CASE_NA || cr < CASE_FAIL)
00155 return "INVALID";
00156 return case_res_str[cr];
00157 }
00161 td_suite *td_suite_create()
00162 {
00163 td_suite *s = (td_suite *)malloc (sizeof (td_suite));
00164 if (s == NULL) {
00165 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00166 return NULL;
00167 }
00168
00169 memset (s, 0x0, sizeof (td_suite));
00170 return s;
00171 }
00172
00176 void td_suite_delete(td_suite *s)
00177 {
00178 gen_attribs_delete (&s->gen);
00179 if (s->domain) free (s->domain);
00180 #if 0
00181 if (s->suite_type) free (s->suite_type);
00182 #endif
00183 free (s);
00184 }
00185
00189 td_set *td_set_create ()
00190 {
00191 td_set *set = (td_set *)malloc (sizeof (td_set));
00192 xmlChar *env;
00193 if (set == NULL) {
00194 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00195 return NULL;
00196 }
00197 memset (set, 0x0, sizeof (td_set));
00198 set->pre_steps = xmlListCreate (td_steps_delete, list_dummy_compare);
00199 set->post_steps = xmlListCreate (td_steps_delete, list_dummy_compare);
00200 set->cases = xmlListCreate (td_case_delete, list_dummy_compare);
00201 set->environments = xmlListCreate (list_string_delete,
00202 list_string_compare);
00203
00204
00205
00206
00207 env = xmlCharStrdup ("hardware");
00208 xmlListAppend (set->environments, env);
00209 env = xmlCharStrdup ("scratchbox");
00210 xmlListAppend (set->environments, env);
00211
00212 set->gets = xmlListCreate (td_file_delete, NULL);
00213
00214 return set;
00215 }
00216
00220 void td_set_delete(td_set *s)
00221 {
00222 gen_attribs_delete(&s->gen);
00223 free (s->feature);
00224
00225 xmlListDelete (s->pre_steps);
00226 xmlListDelete (s->post_steps);
00227 xmlListDelete (s->cases);
00228 xmlListDelete (s->environments);
00229 xmlListDelete (s->gets);
00230 free (s->environment);
00231 free (s);
00232 }
00233
00237 td_step *td_step_create()
00238 {
00239 td_step *step;
00240
00241 step = (td_step *) malloc (sizeof (td_step));
00242 if (step == NULL) {
00243 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00244 return NULL;
00245 }
00246 memset (step, 0x0, sizeof (td_step));
00247 return step;
00248 }
00249
00253 td_case *td_case_create()
00254 {
00255 td_case *td_c;
00256
00257 td_c = (td_case *) malloc (sizeof (td_case));
00258 if (td_c == NULL) {
00259 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00260 return NULL;
00261 }
00262 memset (td_c, 0x0, sizeof (td_case));
00263 td_c->steps = xmlListCreate (td_step_delete, list_dummy_compare);
00264
00265 return td_c;
00266 }
00267
00271 td_steps *td_steps_create()
00272 {
00273 td_steps *steps;
00274
00275 steps = (td_steps *) malloc (sizeof (td_steps));
00276 if (steps == NULL) {
00277 LOG_MSG (LOG_ERR, "%s: FATAL : OOM", PROGNAME);
00278 return NULL;
00279 }
00280 memset (steps, 0x0, sizeof (td_steps));
00281 steps->timeout = 0;
00282 steps->steps = xmlListCreate (td_step_delete, list_dummy_compare);
00283
00284 return steps;
00285 }
00286
00289 void td_step_delete(xmlLinkPtr lk)
00290 {
00291 td_step *step = xmlLinkGetData (lk);
00292 if (step->step)
00293 free (step->step);
00294
00295 free (step->stdout_);
00296 free (step->stderr_);
00297 free (step->failure_info);
00298
00299 free (step);
00300 }
00301
00304 void td_case_delete(xmlLinkPtr lk)
00305 {
00306 td_case *td_c = xmlLinkGetData (lk);
00307 xmlListDelete (td_c->steps);
00308 free (td_c->comment);
00309 free (td_c->failure_info);
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