yaffs direct: Add some basic testing for yaffs_readdir_fd etc
[yaffs2.git] / direct / test-framework / basic-tests / dtest.c
index 3cd13abe5593d7c9d6df12b9125e27c7f6342725..665071b052a49cf12e135fad13d323ae9eb11e5d 100644 (file)
@@ -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");
@@ -3172,6 +3229,74 @@ void format_test(const char *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);
+
+}
+
 int random_seed;
 int simulate_power_failure;
 
@@ -3192,12 +3317,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,30 +3355,32 @@ 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");
 
         return 0;