/** * Use sfs_mkfs() to initialize the filesystem */ int initFS() { int hr = SUCCESS; // initialize fs LOG(stdout, "Initialize file system...\n"); FAIL_BRK3(sfs_mkfs(), stdout, "Error making file system...aborting\n"); LOG(stdout, "File System created successfully ...\n"); Fail: return hr; }
void ext_init_local_fs(char *wd) { printf("initializing local file system...\n"); char *local_fs_path = (char *) malloc(sizeof(char) * strlen(wd) + strlen("local_fs") + 1); sprintf(local_fs_path, "%s%s", wd, "local_fs"); sfs_init_storage(local_fs_path); sfs_mkfs(); free(local_fs_path); }
/** * This is a place where you need to put your test. Please insert your test code here and * change the name of the test to be representative of what you are testing. You can use this test * during the development period to test your code. When you do the final submission here you have to * implement a test that tests some interesting functionality of the sfs. * @return SUCCESS if the test is passed successfully FAIL otherwise. */ int customTest() { int hr = SUCCESS; int i, j, fd, fd1, fd2, lseek2; char *randomBuf;//buffer contain junk data, size: SD_SECTORSIZE randomBuf = (char *) malloc(sizeof(char) * SD_SECTORSIZE); // For later tests char* asciidata = (char*)malloc(257 * sizeof(char)); // 2 char* morealphabet = (char*)malloc(7*sizeof(char)); morealphabet[0] = 't'; morealphabet[1] = 'u'; morealphabet[2] = 'v'; morealphabet[3] = 'w'; morealphabet[4] = 'x'; morealphabet[5] = 'y'; morealphabet[6] = 'z'; char alphabet[26] = "abcdefghijklmnopqrstuvwxyz"; char* fd1read = (char*)malloc(26*sizeof(char)); // normal test from testfs // initialize disk FAIL_BRK4(SD_initDisk()); for (i = 0; i < SD_NUMSECTORS; i++) { for (j = 0; j < SD_SECTORSIZE; j++) { randomBuf[j] = (char) rand(); } while (SD_write(i, (void*) randomBuf)); } FAIL_BRK4(SD_loadDisk(gsDiskFName)); refreshDisk(); // initialize fs, sfs_mkfs FAIL_BRK4(initFS()); refreshDisk(); // initialize test sfs_mkfs, when mkfs, nothing should appear again. FAIL_BRK4(initFS()); FAIL_BRK4(sfs_mkdir("foo")); refreshDisk(); FAIL_BRK4(sfs_fcd("foo")); FAIL_BRK4(sfs_mkdir("bar")); FAIL_BRK4(initFS()); refreshDisk(); FAIL_BRK4((sfs_fcd("foo") != -1)); FAIL_BRK4((sfs_fcd("bar") != -1)); FAIL_BRK4(sfs_fcd("/")); FAIL_BRK4((sfs_fcd("foo") != -1)); FAIL_BRK4((sfs_fcd("bar") != -1)); FAIL_BRK4(sfs_mkdir("foo")); refreshDisk(); FAIL_BRK4(sfs_fcd("foo")); FAIL_BRK4((sfs_fcd("bar") != -1)); //normal test . and .. FAIL_BRK4(initFS()); refreshDisk(); FAIL_BRK4((sfs_mkdir(".") != -1)); FAIL_BRK4(sfs_mkdir(".foo.")); FAIL_BRK4(sfs_mkdir(".foo")); FAIL_BRK4((sfs_mkdir("..") != -1)); FAIL_BRK4(sfs_mkdir("..foo")); FAIL_BRK4(sfs_mkdir("..foo..")); FAIL_BRK4((sfs_mkdir("/") != -1)); FAIL_BRK4(sfs_mkdir("...")); FAIL_BRK4(sfs_mkdir("....")); FAIL_BRK4((sfs_mkdir("./") != -1)); FAIL_BRK4((sfs_mkdir("/.") != -1)); FAIL_BRK4((sfs_mkdir("./.") != -1)); // ascii code test, make a file containing all ascii code chars to make sure implementation does not use an EOF char for size FAIL_BRK4(initFS()); refreshDisk(); //257 chars, possible ascii 0 -> 255 + 255 at the end to make sure we test // create data for (i = 0; i < 256; i++) { asciidata[i] = i; // table sequentially } // now put 255 in again at the end asciidata[256] = 255; // now fwrite into the a file and fread and compare FAIL_BRK4(createSmallFile("asciitable", asciidata, 257)); refreshDisk(); FAIL_BRK4(verifyFile("asciitable", asciidata, 257)); // This test will open the same file twice, write more onto it using one of the file descriptors to lengthen it, and read both to make sure they still match (should test to make sure size is with inodes and not the table FAIL_BRK4(initFS()); refreshDisk(); FAIL_BRK4(createSmallFile("alphabet", "abcdefghijklmnopqrst", 20)); // Open twice FAIL_BRK4((fd1 = sfs_fopen("alphabet")) == -1); FAIL_BRK4((fd2 = sfs_fopen("alphabet")) == -1); // lseek to end and write to second one FAIL_BRK4((lseek2 = sfs_lseek(fd2, 19)) == -1); FAIL_BRK4((sfs_fwrite(fd2, morealphabet, 7)) == -1); // Now verify we can read from fd1 and it should be the full alphabet since we wrote to fd2 which is the same file FAIL_BRK4((sfs_fread(fd1, fd1read, 26)) == -1); FAIL_BRK4((strncmp(alphabet, fd1read, 26)) != 0); // here is the comparison of strings FAIL_BRK4((sfs_fclose(fd1)) == -1); FAIL_BRK4((sfs_fclose(fd2)) == -1); //test dir takes more that one sector //test for file FAIL_BRK4(initFS()); refreshDisk(); FAIL_BRK4((fd = sfs_fopen("foo.bin")) == -1); FAIL_BRK4(sfs_fclose(fd)); FAIL_BRK4((sfs_fcd("foo.bin") != -1)); //test same name FAIL_BRK4(initFS()); refreshDisk(); FAIL_BRK4(sfs_mkdir("foo.bin")); FAIL_BRK4((fd = sfs_fopen("foo.bin")) != -1); FAIL_BRK4((fd = sfs_fopen("bar.bin")) == -1); FAIL_BRK4((sfs_mkdir("bar.bin") != -1)); //test initFS will erase the file descriptor FAIL_BRK4(initFS()); refreshDisk(); FAIL_BRK4((fd = sfs_fopen("foo.bin")) == -1); FAIL_BRK4(initFS()); FAIL_BRK4((sfs_fclose(fd) != -1)); //test create nothing FAIL_BRK4(initFS()); refreshDisk(); FAIL_BRK4((sfs_mkdir("") != -1)); FAIL_BRK4((fd = sfs_fopen("")) != -1); //test open . and .. FAIL_BRK4(initFS()); refreshDisk(); FAIL_BRK4((fd = sfs_fopen("/")) != -1); FAIL_BRK4((fd = sfs_fopen(".")) != -1); FAIL_BRK4((fd = sfs_fopen("..")) != -1); FAIL_BRK4(sfs_mkdir("foo")); FAIL_BRK4((fd = sfs_fopen("foo")) != -1); FAIL_BRK4(sfs_fcd("foo")); FAIL_BRK4((fd = sfs_fopen("/")) != -1); FAIL_BRK4((fd = sfs_fopen(".")) != -1); FAIL_BRK4((fd = sfs_fopen("..")) != -1); FAIL_BRK4(sfs_fcd("/")); FAIL_BRK4((fd = sfs_fopen("/.")) != -1); FAIL_BRK4((fd = sfs_fopen("./")) != -1); FAIL_BRK4((fd = sfs_fopen("./.")) != -1); FAIL_BRK4((fd = sfs_fopen("/..")) != -1); FAIL_BRK4((fd = sfs_fopen("../")) != -1); FAIL_BRK4((fd = sfs_fopen("../..")) != -1); FAIL_BRK4((fd = sfs_fopen("//")) != -1); FAIL_BRK4((fd = sfs_fopen(".foo")) == -1); FAIL_BRK4((fd = sfs_fopen(".foo.")) == -1); FAIL_BRK4((fd = sfs_fopen("..foo")) == -1); FAIL_BRK4((fd = sfs_fopen("..foo..")) == -1); FAIL_BRK4((fd = sfs_fopen("...")) == -1); FAIL_BRK4((fd = sfs_fopen(".....")) == -1); // test the malloc not been released FAIL_BRK4(sfs_mkfs()); refreshDisk(); int thememmax; struct rusage ru; getrusage(RUSAGE_SELF, &ru); thememmax=ru.ru_maxrss; long int k; for(k = 0; k < 100000; ++k) { FAIL_BRK4(sfs_mkfs()); FAIL_BRK4(sfs_mkdir("foo")); FAIL_BRK4(sfs_fcd("foo")); FAIL_BRK4(sfs_ls(f_ls)); FAIL_BRK4((fd = sfs_fopen("bar")) == -1); FAIL_BRK4((sfs_fwrite(fd, randomBuf, SD_SECTORSIZE)) == -1); FAIL_BRK4((sfs_lseek(fd, 1)) == -1); FAIL_BRK4((sfs_fread(fd, randomBuf, SD_SECTORSIZE - 1)) == -1); FAIL_BRK4(sfs_fclose(fd)); } getrusage(RUSAGE_SELF, &ru); FAIL_BRK4(100 * thememmax <= ru.ru_maxrss); /* FAIL_BRK4(createFolder("bar")); FAIL_BRK4(sfs_fcd("bar")); FAIL_BRK4(createFolder("foo")); FAIL_BRK4(sfs_fcd("foo")); FAIL_BRK4(sfs_fcd("/bar/foo")); // FAIL_BRK3((sfs_fcd("//bar/foo") != -1), stdout, "Error: sfs_fcd() failed\n"); FAIL_BRK4(sfs_fcd("/../bar/foo")); FAIL_BRK4(sfs_fcd("/../bar/foo/")); FAIL_BRK4(sfs_fcd("/")); FAIL_BRK3(sfs_ls(f_ls), stdout, "Error: sfs_ls() failed\n"); FAIL_BRK4(sfs_fcd("/bar")); FAIL_BRK3(sfs_ls(f_ls), stdout, "Error: sfs_ls() failed\n"); //int fopentmp; //FAIL_BRK3((fopentmp = sfs_fopen("test.txt") != -1), stdout, "Error: Allowing read from unopened file\n"); //FAIL_BRK3((sfs_fread(fopentmp, buf, 50) != -1), stdout, "Error: Allowing read from unopened file\n"); // test if fcd does not allow going to places that does not exist FAIL_BRK3((sfs_fcd("bla") != -1), stdout, "Error: Allowing cd to folder that does not exist\n"); FAIL_BRK3((sfs_fcd("x") != -1), stdout, "Error: Allowing cd to folder that does not exist\n"); FAIL_BRK3((sfs_fcd("x/y/x/z") != -1), stdout, "Error: Allowing cd to folder that does not exist\n"); */ Fail: //clean up code goes here SAFE_FREE(asciidata); SAFE_FREE(morealphabet); SAFE_FREE(fd1read); SAFE_FREE(randomBuf); saveAndCloseDisk(); PRINT_RESULTS("customTest!"); return hr; }