2017-05-23 07:50:51 +02:00
|
|
|
#include "includes.h"
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <inc/dirent.h>
|
|
|
|
#include <sys/statvfs.h>
|
|
|
|
#include <sys/time.h>
|
|
|
|
|
|
|
|
#include "../test_helper/test_helper.h"
|
|
|
|
#include "tests.h"
|
|
|
|
|
|
|
|
int retValue;
|
|
|
|
|
|
|
|
void
|
|
|
|
dir_tests_1()
|
|
|
|
{
|
|
|
|
TEST_START("directory testcases");
|
|
|
|
|
|
|
|
char *test_dirname_1 = "test_dir_1";
|
|
|
|
char *tes_dirname_2 = "test_dir_2";
|
2019-12-17 21:40:36 +01:00
|
|
|
char cwd[PATH_MAX];
|
2017-05-23 07:50:51 +02:00
|
|
|
char *p_ret;
|
|
|
|
struct stat st;
|
|
|
|
char *tmpfile = "tmp.txt";
|
|
|
|
char mode[12];
|
|
|
|
struct timeval tv[2];
|
|
|
|
DIR *dirp = NULL;
|
|
|
|
struct dirent *dp = NULL;
|
2019-12-17 21:40:36 +01:00
|
|
|
char dir_fullpath[PATH_MAX];
|
2017-05-23 07:50:51 +02:00
|
|
|
int f = -1;
|
|
|
|
|
2019-12-17 21:40:36 +01:00
|
|
|
p_ret = getcwd(NULL, PATH_MAX);
|
2017-05-23 07:50:51 +02:00
|
|
|
ASSERT_PTR_EQ(p_ret, NULL);
|
|
|
|
|
2019-12-17 21:40:36 +01:00
|
|
|
p_ret = getcwd(cwd, PATH_MAX);
|
2017-05-23 07:50:51 +02:00
|
|
|
ASSERT_PTR_NE(p_ret, NULL);
|
|
|
|
|
|
|
|
// delete test_dirname_1, if exits.
|
|
|
|
strcpy(dir_fullpath, cwd);
|
|
|
|
strcat(dir_fullpath, "\\");
|
|
|
|
strcat(dir_fullpath, test_dirname_1);
|
|
|
|
delete_dir_recursive(dir_fullpath);
|
|
|
|
|
|
|
|
// delete test_dirname_2, if exists
|
|
|
|
strcpy(dir_fullpath, cwd);
|
|
|
|
strcat(dir_fullpath, "\\");
|
|
|
|
strcat(dir_fullpath, tes_dirname_2);
|
|
|
|
delete_dir_recursive(dir_fullpath);
|
|
|
|
|
|
|
|
retValue = mkdir(NULL, 0);
|
|
|
|
ASSERT_INT_EQ(retValue, -1);
|
|
|
|
|
|
|
|
retValue = mkdir(test_dirname_1, S_IRUSR | S_IWUSR | S_IXUSR);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
retValue = stat(NULL, &st);
|
|
|
|
ASSERT_INT_EQ(retValue, -1);
|
|
|
|
|
|
|
|
retValue = stat(test_dirname_1, &st);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
ASSERT_INT_EQ(st.st_size, 0);
|
|
|
|
strmode(st.st_mode, mode);
|
|
|
|
ASSERT_CHAR_EQ(mode[0], 'd');
|
|
|
|
|
|
|
|
retValue = chdir(NULL);
|
|
|
|
ASSERT_INT_EQ(retValue, -1);
|
|
|
|
|
|
|
|
retValue = chdir(test_dirname_1);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
2019-12-17 21:40:36 +01:00
|
|
|
p_ret = getcwd(cwd, PATH_MAX);
|
2017-05-23 07:50:51 +02:00
|
|
|
ASSERT_PTR_NE(p_ret, NULL);
|
|
|
|
p_ret = NULL;
|
|
|
|
p_ret = strstr(cwd, test_dirname_1);
|
|
|
|
ASSERT_PTR_NE(p_ret, NULL);
|
|
|
|
|
|
|
|
retValue = chdir("..");
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
retValue = rename(NULL, tes_dirname_2);
|
|
|
|
ASSERT_INT_EQ(retValue, -1);
|
|
|
|
|
|
|
|
retValue = rename(test_dirname_1, NULL);
|
|
|
|
ASSERT_INT_EQ(retValue, -1);
|
|
|
|
|
|
|
|
retValue = rename(NULL, NULL);
|
|
|
|
ASSERT_INT_EQ(retValue, -1);
|
|
|
|
|
|
|
|
retValue = rename(test_dirname_1, tes_dirname_2);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
retValue = stat(tes_dirname_2, &st);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
dirp = opendir(NULL);
|
|
|
|
ASSERT_PTR_EQ(dirp, NULL);
|
|
|
|
|
|
|
|
dirp = opendir(tes_dirname_2);
|
|
|
|
ASSERT_PTR_NE(dirp, NULL);
|
|
|
|
|
|
|
|
dp = readdir(NULL);
|
|
|
|
ASSERT_PTR_EQ(dp, NULL);
|
|
|
|
|
|
|
|
dp = readdir(dirp);
|
|
|
|
ASSERT_PTR_EQ(dp, NULL);
|
|
|
|
|
|
|
|
tv[0].tv_sec = st.st_atime + 1000;
|
|
|
|
tv[1].tv_sec = st.st_mtime + 1000;
|
|
|
|
tv[0].tv_usec = tv[1].tv_usec = 0;
|
|
|
|
retValue = utimes(tes_dirname_2, tv);
|
|
|
|
ASSERT_INT_EQ(retValue, -1);
|
|
|
|
ASSERT_INT_EQ(errno, ERROR_SHARING_VIOLATION);
|
|
|
|
|
|
|
|
retValue = closedir(NULL);
|
|
|
|
ASSERT_INT_EQ(retValue, -1);
|
|
|
|
|
|
|
|
retValue = closedir(dirp);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
retValue = utimes(tes_dirname_2, tv);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
retValue = chdir(tes_dirname_2);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
2017-05-24 06:45:38 +02:00
|
|
|
f = open(tmpfile, O_RDWR | O_CREAT | O_TRUNC, 0600);
|
2017-05-23 07:50:51 +02:00
|
|
|
ASSERT_INT_NE(f, -1);
|
|
|
|
close(f);
|
|
|
|
|
|
|
|
retValue = chdir("..");
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
dirp = opendir(tes_dirname_2);
|
|
|
|
ASSERT_PTR_NE(dirp, NULL);
|
|
|
|
|
|
|
|
dp = readdir(dirp);
|
|
|
|
ASSERT_PTR_NE(dp, NULL);
|
|
|
|
|
|
|
|
retValue = closedir(dirp);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
retValue = rmdir(NULL);
|
|
|
|
ASSERT_INT_EQ(retValue, -1);
|
|
|
|
|
|
|
|
retValue = rmdir(tes_dirname_2);
|
|
|
|
ASSERT_INT_NE(retValue, 0);
|
|
|
|
|
|
|
|
retValue = chdir(tes_dirname_2);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
retValue = unlink(NULL);
|
|
|
|
ASSERT_INT_EQ(retValue, -1);
|
|
|
|
|
|
|
|
retValue = unlink(tmpfile);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
retValue = chdir("..");
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
retValue = rmdir(tes_dirname_2);
|
|
|
|
ASSERT_INT_EQ(retValue, 0);
|
|
|
|
|
|
|
|
dirp = opendir(tes_dirname_2);
|
|
|
|
ASSERT_PTR_EQ(dirp, NULL);
|
|
|
|
|
|
|
|
TEST_DONE();
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
dir_tests()
|
|
|
|
{
|
|
|
|
dir_tests_1();
|
|
|
|
}
|