/* * (c) 2012 by Pablo Neira Ayuso * * Extremely simple test utility for the command line tools. * * Based on test-conntrack.c */ #include #include #include #include #include #include #include #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); }