43 #include <sys/types.h>
53 #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
79 int testFileAccessCheck();
85 void cleanup(
string path);
106 testPrefix =
"test_output_fileutils_";
114 vector<string>::reverse_iterator fileIter = filesToRemove.rbegin();
115 for ( ; fileIter != filesToRemove.rend(); ++fileIter)
118 _chmod(fileIter->c_str(), _S_IWRITE );
119 _unlink(fileIter->c_str() );
122 chmod(fileIter->c_str(), 0644);
123 unlink(fileIter->c_str() );
128 vector<string>::reverse_iterator dirIter = dirsToRemove.rbegin();
129 for ( ; dirIter != dirsToRemove.rend(); ++dirIter)
132 _chmod(dirIter->c_str(), _S_IWRITE );
133 _rmdir(dirIter->c_str() );
135 chmod(dirIter->c_str(), 0755);
136 rmdir(dirIter->c_str() );
145 TestUtil tester(
"FileUtils",
"makeDir", __FILE__, __LINE__ );
151 cout <<
"-----------------" << endl;
158 tester.
assert(
false,
"unexpected exception", __LINE__ );
166 dir =
tempFilePath + getFileSep() + testPrefix +
"dir2";
168 tester.
assert( (0 == stat(dir.c_str(), &statbuf) ),
"absolute (exists)", __LINE__ );
169 tester.
assert( S_ISDIR(statbuf.st_mode),
"absolute (dir)", __LINE__ );
171 tester.
assert( ( (statbuf.st_mode & 0777) == 0755),
"absolute (mode)", __LINE__ );
177 tester.
assert(
false,
"unexpected exception", __LINE__ );
198 dir =
tempFilePath + getFileSep() + testPrefix +
"dir2";
199 dirsToRemove.push_back(dir);
201 tester.
assert( (0 == stat(dir.c_str(), &statbuf) ),
"existing (exists)", __LINE__ );
202 tester.
assert( S_ISDIR(statbuf.st_mode),
"existing (dir)", __LINE__ );
204 tester.
assert( ( (statbuf.st_mode & 0777) == 0755),
"existing (mode)", __LINE__ );
209 tester.
assert(
false,
"unexpected exception", __LINE__ );
215 dir =
tempFilePath + getFileSep() + testPrefix +
"dir3" + getFileSep();
216 dirsToRemove.push_back(dir);
218 tester.
assert( (0 == stat(dir.c_str(), &statbuf) ),
"trailing (exists)", __LINE__ );
219 tester.
assert( S_ISDIR(statbuf.st_mode),
"trailing (dir)", __LINE__ );
221 tester.
assert( ( (statbuf.st_mode & 0777) == 0755),
"trailing (mode)", __LINE__ );
226 tester.
assert(
false,
"unexpected exception", __LINE__ );
232 dir =
tempFilePath + getFileSep() + testPrefix +
"dir4";
233 dirsToRemove.push_back(dir);
234 dir += getFileSep() +
"derp";
235 dirsToRemove.push_back(dir);
236 dir += getFileSep() +
"derp";
237 dirsToRemove.push_back(dir);
238 dir += getFileSep() +
"derp";
239 dirsToRemove.push_back(dir);
240 dir += getFileSep() +
"derp";
241 dirsToRemove.push_back(dir);
243 tester.
assert( (0 == stat(dir.c_str(), &statbuf) ),
"recursion (exists)", __LINE__ );
244 tester.
assert( S_ISDIR(statbuf.st_mode),
"recursion (dir)", __LINE__ );
246 tester.
assert( ( (statbuf.st_mode & 0777) == 0755),
"recursion (mode)", __LINE__ );
251 tester.
assert(
false,
"unexpected exception", __LINE__ );
261 TestUtil tester(
"FileUtils",
"fileAccessCheck", __FILE__, __LINE__ );
267 filename =
tempFilePath + getFileSep() + testPrefix +
"missing_file";
268 filesToRemove.push_back(filename);
274 filename = getFileSep() +
"asdfasdflkj" + getFileSep() +
"missing_dir";
279 tester.
assert(
false,
"unexpected exception", __LINE__ );
285 filename =
tempFilePath + getFileSep() + testPrefix +
"readable_file";
286 ofstream ofs(filename.c_str() );
289 tester.
assert (
false,
"test setup error (create)", __LINE__ );
296 if (0 != _chmod(filename.c_str(), _S_IREAD ))
298 tester.
assert (
false,
"test setup error (chmod)", __LINE__ );
302 filesToRemove.push_back(filename);
308 if (0 != chmod(filename.c_str(), 0444) )
310 tester.
assert (
false,
"test setup error (chmod)", __LINE__ );
314 filesToRemove.push_back(filename);
319 if ((getuid() != 0) && (geteuid() != 0))
330 tester.
assert(
false,
"unexpected exception", __LINE__ );
335 filename =
tempFilePath + getFileSep() + testPrefix +
"writeable_file";
336 ofstream ofs(filename.c_str() );
339 tester.
assert (
false,
"test setup error (create)", __LINE__ );
346 if (0 != _chmod(filename.c_str(), _S_IWRITE ))
349 tester.
assert (
false,
"test setup error (chmod)", __LINE__ );
353 filesToRemove.push_back(filename);
359 if (0 != chmod(filename.c_str(), 0666) )
361 tester.
assert (
false,
"test setup error (chmod)", __LINE__ );
365 filesToRemove.push_back(filename);
375 tester.
assert(
false,
"unexpected exception", __LINE__ );
383 int main(
int argc,
char *argv[])
392 cout <<
"Total Failures for " << __FILE__ <<
": " << errorTotal << endl;