Clean up yaffs_FindNiceObject to be thread safe and simpler. Fix code that does a...
[yaffs2.git] / direct / dtest.c
index fd4f966..24f5ad2 100644 (file)
@@ -22,7 +22,6 @@
 
 #include "yaffsfs.h"
 
-#include "nor_stress.h"
 
 void dumpDir(const char *dname);
 
@@ -423,7 +422,7 @@ void fill_disk_and_delete(const char *path, int nfiles, int ncycles)
 }
 
 
-void fill_files(char *path,int flags, int maxIterations,int siz)
+void fill_files(const char *path,int flags, int maxIterations,int siz)
 {
        int i;
        int j;
@@ -435,7 +434,6 @@ void fill_files(char *path,int flags, int maxIterations,int siz)
        do{
                sprintf(str,"%s/%d",path,i);
                h = yaffs_open(str, O_CREAT | O_TRUNC | O_RDWR,S_IREAD | S_IWRITE);
-               yaffs_close(h);
 
                if(h >= 0)
                {
@@ -1399,6 +1397,96 @@ void fill_disk_test(const char *mountpt)
 }
 
 
+void fill_files_test(const char *mountpt)
+{
+       int i;
+       yaffs_StartUp();
+       
+       for(i = 0; i < 5; i++)
+       {
+               yaffs_mount(mountpt);
+               fill_files(mountpt,2,3,100);
+               yaffs_unmount(mountpt);
+       }
+       
+}
+
+void fill_empty_files_test(const char *mountpt)
+{
+       int i;
+       yaffs_StartUp();
+       char name[100];
+       int result = 0;
+       
+       int d,f;
+
+       for(i = 0; i < 5; i++)
+       {
+               yaffs_mount(mountpt);
+               for(d = 0; result >= 0 && d < 1000; d++){
+                       sprintf(name,"%s/%d",mountpt,d);
+                       result= yaffs_mkdir(name,0);
+                       printf("creating directory %s result %d\n",name,result);
+                       
+                       for(f = 0; result >= 0 && f < 100; f++){
+                               sprintf(name,"%s/%d/%d",mountpt,d,f);
+                               result= yaffs_open(name,O_CREAT, 0);
+                               yaffs_close(result);
+                               printf("creating file %s result %d\n",name,result);
+                       }
+               }
+               yaffs_unmount(mountpt);
+       }
+       
+}
+
+void long_name_test(const char *mountpt)
+{
+       int i;
+       yaffs_StartUp();
+       char fullName[1000];
+       char name[300];
+       int result = 0;
+       
+       int d,f;
+       
+       // Make a 256 byte name
+       memset(name,0,sizeof(name));
+       for(i = 0; i < 256; i++)
+               name[i] = '0' + i % 10;
+               
+       sprintf(fullName,"%s/%s",mountpt,name);
+
+       for(i = 0; i < 1; i++)
+       {
+               yaffs_mount(mountpt);
+               
+               printf("Files at start\n");
+               dumpDir(mountpt);
+               
+               printf("Creating file %s\n",fullName);
+               
+               f = yaffs_open(fullName,O_CREAT | O_RDWR,0);
+               yaffs_close(f);
+               
+               printf("Result %d\n",f);
+                       
+               printf("Files\n");
+               dumpDir(mountpt);
+               
+               printf("Deleting %s\n",fullName);
+               result = yaffs_unlink(fullName);
+               printf("Result %d\n",result);
+               
+               printf("Files\n");
+               
+               dumpDir(mountpt);
+               
+               yaffs_unmount(mountpt);
+       }
+       
+}
+
 
 void lookup_test(const char *mountpt)
 {
@@ -1462,7 +1550,52 @@ void lookup_test(const char *mountpt)
        
 }
 
-void link_test(const char *mountpt)
+void link_test0(const char *mountpt)
+{
+       int i;
+       char namea[300];
+       char nameb[300];
+       int result = 0;
+       
+
+       yaffs_StartUp();
+       yaffs_mount(mountpt);
+       
+               
+       sprintf(namea,"%s/a",mountpt);
+       sprintf(nameb,"%s/b",mountpt);
+
+       printf("mounted\n");
+        dumpDir(mountpt);
+
+       yaffs_unlink(namea);
+       printf("a unlinked\n");
+        dumpDir(mountpt);
+
+       yaffs_unlink(nameb);
+       printf("b unlinked\n");
+        dumpDir(mountpt);
+       
+       result = yaffs_open(namea,O_CREAT| O_RDWR,0666);
+        yaffs_close(result);
+       printf("a created\n");
+        dumpDir(mountpt);
+
+        yaffs_link(namea,nameb);
+        printf("linked\n");
+        dumpDir(mountpt);
+        yaffs_unlink(namea);
+        printf("a ulinked\n");
+        dumpDir(mountpt);
+        yaffs_unlink(nameb);
+        printf("b unlinked\n");
+        dumpDir(mountpt);
+
+       yaffs_unmount(mountpt);
+}
+
+
+void link_test1(const char *mountpt)
 {
        int i;
        int h;
@@ -1498,7 +1631,37 @@ void link_test(const char *mountpt)
        yaffs_mount(mountpt);
        
        printf("link test done\n");     
+}
+
+void handle_test(const char *mountpt)
+{
+       int i;
+       int h;
+       int cycle;
+       char a[100];
+
+       sprintf(a,"%s/aaa",mountpt);
+       
+       yaffs_StartUp();
+       
+       yaffs_mount(mountpt);
+
+        for(cycle = 0; cycle < 5; cycle++){
+        printf("Start cycle %d\n",cycle);
+       i = 0;
+       do {
+        h = yaffs_open(a, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE);
+       printf("%d  handle %d\n",i,h);
+       i++;
+       } while(h >= 0);
+       
+       while(i >= -1) {
+        yaffs_close(i);
+        i--;
+        }
+        }
        
+       yaffs_unmount(mountpt);
 }
 
 void freespace_test(const char *mountpt)
@@ -2095,7 +2258,6 @@ void checkpoint_upgrade_test(const char *mountpt,int nmounts)
        
        printf("Create start condition\n");
        yaffs_StartUp();
-       SetCheckpointReservedBlocks(0);
        yaffs_mount(mountpt);
        yaffs_mkdir(a,0);
        sprintf(b,"%s/zz",a);
@@ -2108,7 +2270,6 @@ void checkpoint_upgrade_test(const char *mountpt,int nmounts)
        printf("Umount/mount attempt full\n");
        yaffs_unmount(mountpt);
        
-       SetCheckpointReservedBlocks(10);
        yaffs_mount(mountpt);
        
        printf("unlink small file\n");
@@ -2281,12 +2442,29 @@ void random_small_file_test(const char *mountpt,int iterations)
                
        yaffs_unmount(mountpt);
 }
+
+void rmdir_test(const char *mountpt)
+{
+       char name[100];
+       yaffs_StartUp();
+       
+       yaffs_mount(mountpt);
+       
+       strcpy(name,mountpt);
+       strcat(name,"/");
+       strcat(name,"hello");
+       yaffs_mkdir(name,0666);
+       yaffs_rmdir(name);
+       yaffs_unmount(mountpt);
+}
        
 
+int random_seed;
+int simulate_power_failure;
 
 int main(int argc, char *argv[])
 {
-
+       random_seed = time(NULL);
        //return long_test(argc,argv);
        
        //return cache_read_test();
@@ -2299,8 +2477,12 @@ int main(int argc, char *argv[])
         //yaffs_backward_scan_test("/flash/flash");
        // yaffs_device_flush_test("/flash/flash");
 
-       rename_over_test("//////////////////flash///////////////////yaffs1///////////");
+       //rename_over_test("//////////////////flash///////////////////yaffs1///////////");
        
+       fill_empty_files_test("/yaffs2/");
+       //long_name_test("/yaffs2");
+       //link_test0("/yaffs2");
+       //link_test1("yaffs2");
         //scan_pattern_test("/flash",10000,10);
        //short_scan_test("/flash/flash",40000,200);
          //small_mount_test("/flash/flash",1000);
@@ -2314,7 +2496,7 @@ int main(int argc, char *argv[])
         // huge_array_test("/flash/flash",10);
 
 
-
+       handle_test("yaffs2/");
        
        //long_test_on_path("/ram2k");
        // long_test_on_path("/flash");