* Read a directory and searches for all template files in it
* which is later used to run all tests.
*/
-bool task_propogate(const char *curdir) {
+bool task_propagate(const char *curdir) {
bool success = true;
DIR *dir;
struct dirent *files;
struct stat directory;
char buffer[4096];
+ size_t found = 0;
dir = opendir(curdir);
task_t task;
util_debug("TEST", "compiling task template: %s/%s\n", curdir, files->d_name);
+ found ++;
if (!template) {
con_err("error compiling task template: %s\n", files->d_name);
success = false;
/*
* The task template was compiled, now lets create a task from
- * the template data which has now been propogated.
+ * the template data which has now been propagated.
*/
task.template = template;
if (!(task.runhandles = task_popen(buf, "r"))) {
}
}
+ util_debug("TEST", "compiled %d task template files out of %d\n",
+ vec_size(task_tasks),
+ found
+ );
+
closedir(dir);
return success;
}
size_t size = 0;
size_t i;
+ util_debug("TEST", "found %d tasks, preparing to execute\n", vec_size(task_tasks));
+
for (i = 0; i < vec_size(task_tasks); i++) {
+ util_debug("TEST", "executing task: %d: %s\n", i, task_tasks[i].template->description);
/*
* Generate a task from thin air if it requires execution in
* the QCVM.
*/
while (util_getline(&data, &size, task_tasks[i].runhandles[1]) != EOF) {
fputs(data, task_tasks[i].stdoutlog);
+
+ if (strstr(data, "failed to open file"))
+ execute = false;
+
fflush(task_tasks[i].stdoutlog);
}
while (util_getline(&data, &size, task_tasks[i].runhandles[2]) != EOF) {
fflush(task_tasks[i].stdoutlog);
}
- /*
- * If we can execute we do so after all data has been read and
- * this paticular task has coupled execution in its procedure type
- */
- if (!execute)
- continue;
-
/*
* If we made it here that concludes the task is to be executed
* in the virtual machine.
*/
- if (!task_execute(task_tasks[i].template)) {
+ if (!execute || !task_execute(task_tasks[i].template)) {
con_err("test failure: `%s` [%s] see %s.stdout and %s.stderr\n",
task_tasks[i].template->description,
(task_tasks[i].template->failuremessage) ?
/*
* This is the heart of the whole test-suite process. This cleans up
* any existing temporary files left behind as well as log files left
- * behind. Then it propogates a list of tests from `curdir` by scaning
+ * behind. Then it propagates a list of tests from `curdir` by scaning
* it for template files and compiling them into tasks, in which it
* schedualizes them (executes them) and actually reports errors and
* what not. It then proceeds to destroy the tasks and return memory
* it's the engine :)
*
- * It returns true of tests could be propogated, otherwise it returns
+ * It returns true of tests could be propagated, otherwise it returns
* false.
*
* It expects con_init() was called before hand.
*/
bool test_perform(const char *curdir) {
task_precleanup(curdir);
- if (!task_propogate(curdir)) {
- con_err("error: failed to propogate tasks\n");
+ if (!task_propagate(curdir)) {
+ con_err("error: failed to propagate tasks\n");
task_destroy(curdir);
return false;
}
/*
- * If we made it here all tasks where propogated from their resultant
+ * If we made it here all tasks where propagated from their resultant
* template file. So we can start the FILO scheduler, this has been
* designed in the most thread-safe way possible for future threading
* it's designed to prevent lock contention, and possible syncronization
}
int main(int argc, char **argv) {
- char *redirout = (char*)stdout;
- char *redirerr = (char*)stderr;
+ char *redirout = (char*)stdout;
+ char *redirerr = (char*)stderr;
+
con_init();
/*