X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=direct%2Ftest-framework%2Fbasic-tests%2Fdtest.c;h=5db05beb79a57fd028b77f056a93c5550931a8fa;hp=3cd13abe5593d7c9d6df12b9125e27c7f6342725;hb=413797fe98ba5f4ba219c8628273eea918eb8655;hpb=54721f22512e7c859c4c4a4ae7e5374ecf7fb570 diff --git a/direct/test-framework/basic-tests/dtest.c b/direct/test-framework/basic-tests/dtest.c index 3cd13ab..5db05be 100644 --- a/direct/test-framework/basic-tests/dtest.c +++ b/direct/test-framework/basic-tests/dtest.c @@ -611,6 +611,63 @@ static void dump_directory_tree(const char *dname) printf("Free space in %s is %d\n\n",dname,(int)yaffs_freespace(dname)); } +void dump_directory_tree_worker_fd(const char *dname,int recursive) +{ + int h; + struct yaffs_dirent *de; + struct yaffs_stat s; + char str[1000]; + + h = yaffs_open(dname, O_RDONLY, 0); + + if(h < 0) + { + printf("open of dir failed\n"); + } + else + { + printf("using fd %d\n", h); + + while((de = yaffs_readdir_fd(h)) != NULL) + { + sprintf(str,"%s/%s",dname,de->d_name); + + yaffs_lstat(str,&s); + + printf("%s inode %d obj %x length %lld mode %X ", + str,s.st_ino,de->d_dont_use, s.st_size,s.st_mode); + switch(s.st_mode & S_IFMT) + { + case S_IFREG: printf("data file"); break; + case S_IFDIR: printf("directory"); break; + case S_IFLNK: printf("symlink -->"); + if(yaffs_readlink(str,str,100) < 0) + printf("no alias"); + else + printf("\"%s\"",str); + break; + default: printf("unknown"); break; + } + + printf("\n"); + + if((s.st_mode & S_IFMT) == S_IFDIR && recursive) + dump_directory_tree_worker_fd(str,1); + + } + + yaffs_close(h); + } + +} + +static void dump_directory_tree_fd(const char *dname) +{ + dump_directory_tree_worker_fd(dname,1); + printf("\n"); + printf("Free space in %s is %d\n\n",dname,(int)yaffs_freespace(dname)); +} + void dumpDir(const char *dname) { dump_directory_tree_worker(dname,0); printf("\n"); @@ -3142,7 +3199,6 @@ void readdir_test(const char *mountpt) yaffs_unmount(mountpt); - } void format_test(const char *mountpt) @@ -3152,26 +3208,132 @@ void format_test(const char *mountpt) yaffs_start_up(); ret = yaffs_format(mountpt, 0, 0, 0); - printf("yaffs_format(...,0, 0, 0) of unmounted returned %d\n", ret); + printf("yaffs_format(...,0, 0, 0) of unmounted returned %d." + " Should return 0\n\n\n", ret); yaffs_mount(mountpt); ret = yaffs_format(mountpt, 0, 0, 0); - printf("yaffs_format(...,0, 0, 0) of mounted returned %d\n", ret); + printf("yaffs_format(...,0, 0, 0) of mounted returned %d." + " Should return -1 (busy)\n\n\n", ret); ret = yaffs_format(mountpt, 1, 0, 0); - printf("yaffs_format(...,1, 0, 0) of mounted returned %d\n", ret); + printf("yaffs_format(...,1, 0, 0) of mounted returned %d." + " Should return 0.\n\n\n", ret); ret = yaffs_mount(mountpt); - printf("mount should return 0 returned %d\n", ret); + printf("mount should return 0 returned %d\n\n\n", ret); ret = yaffs_format(mountpt, 1, 0, 1); - printf("yaffs_format(...,1, 0, 1) of mounted returned %d\n", ret); + printf("yaffs_format(...,1, 0, 1) of mounted returned %d." + " Should return 0.\n\n\n", ret); ret = yaffs_mount(mountpt); printf("mount should return -1 returned %d\n", ret); } +void dir_rename_test(const char *mountpt) +{ + char fname[100]; + char dname[100]; + int h; + int ret; + + yaffs_start_up(); + yaffs_mount(mountpt); + + sprintf(fname,"%s/file",mountpt); + sprintf(dname,"%s/directory",mountpt); + + h = yaffs_open(fname,O_CREAT | O_RDWR | O_TRUNC, 0666); + yaffs_close(h); + + yaffs_mkdir(dname, 0666); + + dump_directory_tree(mountpt); + + printf("Try to rename %s to %s\n", fname, dname); + ret = yaffs_rename(fname, dname); + printf("result %d, %d\n", ret, yaffs_get_error()); + + printf("Try to rename %s to %s\n", dname, fname); + ret = yaffs_rename(dname, fname); + printf("result %d, %d\n", ret, yaffs_get_error()); + + +} + + +void dir_fd_test(const char *mountpt) +{ + char name[100]; + int h; + int ret; + int i; + + yaffs_start_up(); + yaffs_mount(mountpt); + + sprintf(name,"%s/directory",mountpt); + yaffs_mkdir(name, 0666); + for(i=0; i < 20; i++) { + sprintf(name,"%s/directory/file%d",mountpt, i); + + h = yaffs_open(name, O_CREAT | O_TRUNC | O_RDWR, 0666); + yaffs_write(h, name, strlen(name)); + yaffs_close(h); + } + sprintf(name,"%s/dddd",mountpt); + yaffs_mkdir(name, 0666); + for(i=0; i < 20; i++) { + sprintf(name,"%s/dddd/filezzz%d",mountpt, i); + + h = yaffs_open(name, O_CREAT | O_TRUNC | O_RDWR, 0666); + yaffs_write(h, name, strlen(name)); + yaffs_close(h); + } + + + dump_directory_tree(mountpt); + dump_directory_tree_fd(mountpt); + dump_directory_tree_fd(mountpt); + +} + + + +void create_delete_many_files_test(const char *mountpt) +{ + + char fn[100]; + int i; + int fsize; + char buffer[1000]; + int h; + int wrote; + + + yaffs_start_up(); + yaffs_mount(mountpt); + + for(i = 1; i < 2000; i++) { + sprintf(fn,"%s/f%d",mountpt, i); + fsize = (i%10) * 10000 + 20000; + h = yaffs_open(fn, O_CREAT | O_TRUNC | O_RDWR, 0666); + while (fsize > 0) { + wrote = yaffs_write(h, buffer, sizeof(buffer)); + if (wrote != sizeof(buffer)) { + printf("Writing file %s, only wrote %d bytes\n", fn, wrote); + break; + } + fsize -= wrote; + } + yaffs_unlink(fn); + yaffs_close(h); + } + +} + int random_seed; int simulate_power_failure; @@ -3192,12 +3354,12 @@ int main(int argc, char *argv[]) //rename_over_test("//////////////////flash///////////////////yaffs1///////////"); - //fill_empty_files_test("/yaffs2/"); - //resize_stress_test("/yaffs2"); - //overwrite_test("/yaffs2"); + //fill_empty_files_test("/nand/"); + //resize_stress_test("/nand"); + //overwrite_test("/nand"); - //long_name_test("/yaffs2"); - //link_test0("/yaffs2"); + //long_name_test("/nand"); + //link_test0("/nand"); //link_test1("yaffs2"); //scan_pattern_test("/flash",10000,10); //short_scan_test("/flash/flash",40000,200); @@ -3230,31 +3392,35 @@ int main(int argc, char *argv[]) //check_resize_gc_bug("/flash"); - //basic_xattr_test("/yaffs2"); - //big_xattr_test("/yaffs2"); + //basic_xattr_test("/nand"); + //big_xattr_test("/nand"); //null_name_test("yaffs2"); //test_flash_traffic("yaffs2"); - // link_follow_test("/yaffs2"); - //basic_utime_test("/yaffs2"); + // link_follow_test("/nand"); + //basic_utime_test("/nand"); - //format_test("/yaffs2"); + //format_test("/nand"); - //max_files_test("/yaffs2"); + //max_files_test("/nand"); - //start_twice("/yaffs2"); + //start_twice("/nand"); - //large_file_test("/yaffs2"); - //readdir_test("/yaffs2"); + //large_file_test("/nand"); + //readdir_test("/nand"); - //basic_utime_test("/yaffs2"); - //case_insensitive_test("/yaffs2"); + //basic_utime_test("/nand"); + //case_insensitive_test("/nand"); - yy_test("/yaffs2"); + //yy_test("/nand"); + //dir_rename_test("/nand"); + //dir_fd_test("/nand"); + //format_test("/nand"); + create_delete_many_files_test("/nand"); return 0; }