#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#include "pppd-private.h"
/* globals used in test.c... */
int debug = 1;
int error_count;
int unsuccess;
/* check if path exists and returns its type */
static int
file_type(char *path)
{
struct stat statbuf;
if (stat(path, &statbuf) < 0)
return -1;
return statbuf.st_mode & S_IFMT;
}
int
test_simple() {
if (mkdir_recursive("dir"))
return -1;
if (file_type("dir") != S_IFDIR)
return -1;
rmdir("dir");
return 0;
}
int
test_recurse() {
if (mkdir_recursive("dir/subdir/subsubdir"))
return -1;
if (file_type("dir/subdir/subsubdir") != S_IFDIR)
return -1;
rmdir("dir/subdir/subsubdir");
/* try again with partial existence */
if (mkdir_recursive("dir/subdir/subsubdir"))
return -1;
if (file_type("dir/subdir/subsubdir") != S_IFDIR)
return -1;
rmdir("dir/subdir/subsubdir");
rmdir("dir/subdir");
rmdir("dir");
return 0;
}
int
test_recurse_multislash() {
if (mkdir_recursive("dir/subdir///subsubdir"))
return -1;
if (file_type("dir/subdir/subsubdir") != S_IFDIR)
return -1;
rmdir("dir/subdir/subsubdir");
rmdir("dir/subdir");
/* try again with partial existence */
if (mkdir_recursive("dir/subdir/subsubdir///"))
return -1;
if (file_type("dir/subdir/subsubdir") != S_IFDIR)
return -1;
rmdir("dir/subdir/subsubdir");
rmdir("dir/subdir");
rmdir("dir");
return 0;
}
int
test_parent_notdir() {
int fd = open("file", O_CREAT, 0600);
if (fd < 0)
return -1;
close(fd);
if (mkdir_recursive("file") == 0)
return -1;
if (mkdir_recursive("file/dir") == 0)
return -1;
unlink("file");
return 0;
}
int
main()
{
char *base_dir = strdup("/tmp/ppp_utils_utest.XXXXXX");
int failure = 0;
if (mkdtemp(base_dir) == NULL) {
printf("Could not create test directory, aborting\n");
return 1;
}
if (chdir(base_dir) < 0) {
printf("Could not enter newly created test dir, aborting\n");
return 1;
}
if (test_simple()) {
printf("Could not create simple directory\n");
failure++;
}
if (test_recurse()) {
printf("Could not create recursive directory\n");
failure++;
}
if (test_recurse_multislash()) {
printf("Could not create recursive directory with multiple slashes\n");
failure++;
}
if (test_parent_notdir()) {
printf("Creating over a file appeared to work?\n");
failure++;
}
rmdir(base_dir);
free(base_dir);
return failure;
}