1 // BasicTest.cpp 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <unistd.h> 6 7 #include <set> 8 using std::set; 9 10 #include "BasicTest.h" 11 12 // count_available_fds 13 static 14 int32 15 count_available_fds() 16 { 17 set<int> fds; 18 int fd; 19 while ((fd = dup(1)) != -1) 20 fds.insert(fd); 21 for (set<int>::iterator it = fds.begin(); it != fds.end(); it++) 22 close(*it); 23 return fds.size(); 24 } 25 26 // constructor 27 BasicTest::BasicTest() 28 : BTestCase(), 29 fSubTestNumber(0), 30 fAvailableFDs(0) 31 { 32 } 33 34 // setUp 35 void 36 BasicTest::setUp() 37 { 38 BTestCase::setUp(); 39 fAvailableFDs = count_available_fds(); 40 SaveCWD(); 41 fSubTestNumber = 0; 42 } 43 44 // tearDown 45 void 46 BasicTest::tearDown() 47 { 48 RestoreCWD(); 49 int32 availableFDs = count_available_fds(); 50 if (availableFDs != fAvailableFDs) { 51 printf("WARNING: Number of available file descriptors has changed " 52 "during test: %ld -> %ld\n", fAvailableFDs, availableFDs); 53 fAvailableFDs = availableFDs; 54 } 55 BTestCase::tearDown(); 56 } 57 58 // execCommand 59 // 60 // Calls system() with the supplied string. 61 void 62 BasicTest::execCommand(const string &cmdLine) 63 { 64 system(cmdLine.c_str()); 65 } 66 67 // dumpStat 68 void 69 BasicTest::dumpStat(struct stat &st) 70 { 71 printf("stat:\n"); 72 printf(" st_dev : %lx\n", st.st_dev); 73 printf(" st_ino : %Lx\n", st.st_ino); 74 printf(" st_mode : %x\n", st.st_mode); 75 printf(" st_nlink : %x\n", st.st_nlink); 76 printf(" st_uid : %x\n", st.st_uid); 77 printf(" st_gid : %x\n", st.st_gid); 78 printf(" st_size : %Ld\n", st.st_size); 79 printf(" st_blksize: %ld\n", st.st_blksize); 80 printf(" st_atime : %lx\n", st.st_atime); 81 printf(" st_mtime : %lx\n", st.st_mtime); 82 printf(" st_ctime : %lx\n", st.st_ctime); 83 printf(" st_crtime : %lx\n", st.st_crtime); 84 } 85 86 // createVolume 87 void 88 BasicTest::createVolume(string imageFile, string mountPoint, int32 megs, 89 bool makeMountPoint) 90 { 91 char megsString[16]; 92 sprintf(megsString, "%ld", megs); 93 execCommand(string("dd if=/dev/zero of=") + imageFile 94 + " bs=1M count=" + megsString 95 + " &> /dev/null" 96 + " ; mkbfs " + imageFile 97 + " > /dev/null" 98 + " ; sync" 99 + (makeMountPoint ? " ; mkdir " + mountPoint : "") 100 + " ; mount " + imageFile + " " + mountPoint); 101 } 102 103 // deleteVolume 104 void 105 BasicTest::deleteVolume(string imageFile, string mountPoint, 106 bool deleteMountPoint) 107 { 108 execCommand(string("sync") 109 + " ; unmount " + mountPoint 110 + (deleteMountPoint ? " ; rmdir " + mountPoint : "") 111 + " ; rm " + imageFile); 112 } 113 114