blob: a20ccab2a3785f74b6a6f60e04a04d4245bd186b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Salikh Zakirov
*/
#include "testframe.h"
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
/**
@file testframe.c
testframe.c contains implementation of Testframe framework functions
@ingroup testframe
*/
int log_level = LOG_LEVEL_INFO;
int error_flag = 0;
void log_error(char *fmt, ...) {
va_list argp;
if (error_flag) return;
error_flag = 1;
fprintf(stderr, "ERROR: ");
va_start(argp, fmt);
vfprintf(stderr, fmt, argp);
va_end(argp);
fprintf(stderr, "\n");
fflush(NULL);
}
void log_info(char *fmt, ...) {
va_list argp;
if (log_level<LOG_LEVEL_INFO) return;
fprintf(stdout, "INFO: ");
va_start(argp, fmt);
vfprintf(stdout, fmt, argp);
va_end(argp);
fprintf(stdout, "\n");
fflush(NULL);
}
void log_debug(char *fmt, ...) {
va_list argp;
if (log_level<LOG_LEVEL_DEBUG) return;
fprintf(stdout, "DEBUG: ");
va_start(argp, fmt);
vfprintf(stdout, fmt, argp);
va_end(argp);
fprintf(stdout, "\n");
fflush(NULL);
}
int execute(int argc, char *argv[], char *name, int (*f)(void)) {
int status;
if (f==NULL) {
log_error("no test function to execute");
return TEST_ERROR;
}
log_info("TEST %s start", name);
error_flag = 0;
setup(argc, argv);
status = f();
if (status || error_flag){
log_info("TEST %s: FAILED", name);
} else {
log_info("TEST %s: PASSED", name);
}
teardown();
return status;
}
void log_set_level(int level) {
log_level = level;
}
int default_main(int argc, char *argv[]){
int result;
TestDescriptor *p;
log_set_level(LOG_LEVEL_INFO);
/* execute all tests */
result = 0;
for (p=testDescriptor; (p->name!=NULL); p++) {
//log_debug("executing test %s", p->name);
if (p->func!=NULL) {
result = execute(argc, argv, p->name, p->func) || result;
fflush(NULL);
}
}
return result;
}