Home | History | Annotate | Line # | Download | only in pppd
utils_utest.c revision 1.1
      1 #include <fcntl.h>
      2 #include <string.h>
      3 #include <sys/stat.h>
      4 #include <unistd.h>
      5 
      6 #include "pppd-private.h"
      7 
      8 /* globals used in test.c... */
      9 int debug = 1;
     10 int error_count;
     11 int unsuccess;
     12 
     13 /* check if path exists and returns its type */
     14 static int
     15 file_type(char *path)
     16 {
     17     struct stat statbuf;
     18 
     19     if (stat(path, &statbuf) < 0)
     20 	return -1;
     21 
     22     return statbuf.st_mode & S_IFMT;
     23 }
     24 
     25 int
     26 test_simple() {
     27     if (mkdir_recursive("dir"))
     28 	return -1;
     29 
     30     if (file_type("dir") != S_IFDIR)
     31 	return -1;
     32 
     33     rmdir("dir");
     34     return 0;
     35 }
     36 
     37 int
     38 test_recurse() {
     39     if (mkdir_recursive("dir/subdir/subsubdir"))
     40 	return -1;
     41 
     42     if (file_type("dir/subdir/subsubdir") != S_IFDIR)
     43 	return -1;
     44 
     45     rmdir("dir/subdir/subsubdir");
     46 
     47     /* try again with partial existence */
     48     if (mkdir_recursive("dir/subdir/subsubdir"))
     49 	return -1;
     50 
     51     if (file_type("dir/subdir/subsubdir") != S_IFDIR)
     52 	return -1;
     53 
     54     rmdir("dir/subdir/subsubdir");
     55     rmdir("dir/subdir");
     56     rmdir("dir");
     57     return 0;
     58 }
     59 
     60 int
     61 test_recurse_multislash() {
     62     if (mkdir_recursive("dir/subdir///subsubdir"))
     63 	return -1;
     64 
     65     if (file_type("dir/subdir/subsubdir") != S_IFDIR)
     66 	return -1;
     67 
     68     rmdir("dir/subdir/subsubdir");
     69     rmdir("dir/subdir");
     70 
     71     /* try again with partial existence */
     72     if (mkdir_recursive("dir/subdir/subsubdir///"))
     73 	return -1;
     74 
     75     if (file_type("dir/subdir/subsubdir") != S_IFDIR)
     76 	return -1;
     77 
     78     rmdir("dir/subdir/subsubdir");
     79     rmdir("dir/subdir");
     80     rmdir("dir");
     81     return 0;
     82 }
     83 
     84 int
     85 test_parent_notdir() {
     86     int fd = open("file", O_CREAT, 0600);
     87     if (fd < 0)
     88 	return -1;
     89     close(fd);
     90 
     91     if (mkdir_recursive("file") == 0)
     92 	return -1;
     93     if (mkdir_recursive("file/dir") == 0)
     94 	return -1;
     95 
     96     unlink("file");
     97     return 0;
     98 }
     99 
    100 int
    101 main()
    102 {
    103     char *base_dir = strdup("/tmp/ppp_utils_utest.XXXXXX");
    104     int failure = 0;
    105 
    106     if (mkdtemp(base_dir) == NULL) {
    107 	printf("Could not create test directory, aborting\n");
    108 	return 1;
    109     }
    110 
    111     if (chdir(base_dir) < 0) {
    112 	printf("Could not enter newly created test dir, aborting\n");
    113 	return 1;
    114     }
    115 
    116     if (test_simple()) {
    117 	printf("Could not create simple directory\n");
    118 	failure++;
    119     }
    120 
    121     if (test_recurse()) {
    122 	printf("Could not create recursive directory\n");
    123 	failure++;
    124     }
    125 
    126     if (test_recurse_multislash()) {
    127 	printf("Could not create recursive directory with multiple slashes\n");
    128 	failure++;
    129     }
    130 
    131     if (test_parent_notdir()) {
    132 	printf("Creating over a file appeared to work?\n");
    133 	failure++;
    134     }
    135 
    136     rmdir(base_dir);
    137     free(base_dir);
    138     return failure;
    139 }
    140