09ab0adc95
JIRA: https://issues.redhat.com/browse/RHELMISC-3943 Signed-off-by: Jianwen Ji <jiji@redhat.com>
101 lines
1.7 KiB
C
101 lines
1.7 KiB
C
/*
|
|
* (c) 2012 by Pablo Neira Ayuso <pablo@netfilter.org>
|
|
*
|
|
* Extremely simple test utility for the command line tools.
|
|
*
|
|
* Based on test-conntrack.c
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
#include <sys/types.h>
|
|
#include <sys/wait.h>
|
|
#include <dirent.h>
|
|
|
|
#define PATH "/usr/sbin"
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int ret, ok = 0, bad = 0, line;
|
|
FILE *fp;
|
|
DIR *d;
|
|
char buf[1024];
|
|
struct dirent *dent;
|
|
char file[1024];
|
|
|
|
if (argc < 2) {
|
|
fprintf(stderr, "Usage: %s directory\n", argv[0]);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
d = opendir(argv[1]);
|
|
if (d == NULL) {
|
|
perror("opendir");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
setenv("PATH", PATH, 1);
|
|
|
|
while ((dent = readdir(d)) != NULL) {
|
|
|
|
sprintf(file, "%s/%s", argv[1], dent->d_name);
|
|
|
|
line = 0;
|
|
|
|
fp = fopen(file, "r");
|
|
if (fp == NULL) {
|
|
perror("cannot find testsuite file");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
while (fgets(buf, sizeof(buf), fp)) {
|
|
char *res;
|
|
|
|
line++;
|
|
|
|
if (buf[0] == '#' || buf[0] == ' ')
|
|
continue;
|
|
|
|
res = strchr(buf, ';');
|
|
if (!res) {
|
|
printf("malformed file %s at line %d\n",
|
|
dent->d_name, line);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
*res = '\0';
|
|
res+=2;
|
|
|
|
printf("(%d) Executing: %s\n", line, buf);
|
|
|
|
ret = system(buf);
|
|
|
|
if (WIFEXITED(ret) &&
|
|
WEXITSTATUS(ret) == EXIT_SUCCESS) {
|
|
if (res[0] == 'O' &&
|
|
res[1] == 'K')
|
|
ok++;
|
|
else {
|
|
bad++;
|
|
printf("^----- BAD\n");
|
|
}
|
|
} else {
|
|
if (res[0] == 'B' &&
|
|
res[1] == 'A' &&
|
|
res[2] == 'D')
|
|
ok++;
|
|
else {
|
|
bad++;
|
|
printf("^----- BAD\n");
|
|
}
|
|
}
|
|
printf("=====\n");
|
|
}
|
|
fclose(fp);
|
|
}
|
|
closedir(d);
|
|
|
|
fprintf(stdout, "OK: %d BAD: %d\n", ok, bad);
|
|
}
|