yaffs Change stat to lstats in test code
[yaffs2.git] / direct / basic-test / dtest.c
index 34112c84ecc861dceb5cc28697199b5839b0a0b1..b954699a56a84f6a6e4bdb470c4283dff6e21dd8 100644 (file)
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <time.h>
 
 #include "yaffsfs.h"
 
+#include "yaffs_guts.h" /* Only for dumping device innards */
 
-void dumpDir(const char *dname);
+extern int yaffs_traceMask;
 
-char xx[600];
+void dumpDir(const char *dname);
 
-void copy_in_a_file(char *yaffsName,char *inName)
+void copy_in_a_file(const char *yaffsName,const char *inName)
 {
        int inh,outh;
        unsigned char buffer[100];
@@ -49,7 +51,7 @@ void copy_in_a_file(char *yaffsName,char *inName)
        close(inh);
 }
 
-void make_a_file(char *yaffsName,char bval,int sizeOfFile)
+void make_a_file(const char *yaffsName,char bval,int sizeOfFile)
 {
        int outh;
        int i;
@@ -177,21 +179,22 @@ void create_file_of_size(const char *fn,int syze)
        int h;
        int n;
        int result;
-       
+       int iteration = 0;
        char xx[200];
-       
-       int iterations = (syze + strlen(fn) -1)/ strlen(fn);
-       
+
        h = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
                
-       while (iterations > 0)
+       while (syze > 0)
        {
-               sprintf(xx,"%s %8d",fn,iterations);
+               sprintf(xx,"%s %8d",fn,iteration);
                n = strlen(xx);
                result = yaffs_write(h,xx,n);
-               if(result != n)
-                       printf("Wrote %d, should have been %d\n",result,n);
-               iterations--;
+               if(result != n){
+                       printf("Wrote %d, should have been %d. syze is %d\n",result,n,syze);
+                       syze = 0;
+               } else
+                       syze-=n;
+               iteration++;
        }
        yaffs_close (h);
 }
@@ -292,6 +295,22 @@ void yaffs_backward_scan_test(const char *path)
        yaffs_mount(path);
 }
 
+void null_name_test(const char *path)
+{
+       char fn[100];
+       int h;
+       yaffs_StartUp();
+
+       yaffs_mount(path);
+
+       sprintf(fn,"%s",path);
+
+       h = yaffs_open(fn,O_CREAT| O_TRUNC| O_RDWR, 0666);
+
+       printf("%d\n",h);
+
+}
+
 char xxzz[2000];
 
 
@@ -381,7 +400,8 @@ void fill_disk(const char *path,int nfiles)
        int n;
        int result;
        int f;
-       
+
+        static char xx[600];   
        char str[50];
        
        for(n = 0; n < nfiles; n++)
@@ -461,7 +481,7 @@ void fill_files(const char *path,int flags, int maxIterations,int siz)
        }
 }
 
-void leave_unlinked_file(char *path,int maxIterations,int siz)
+void leave_unlinked_file(const char *path,int maxIterations,int siz)
 {
        int i;
        char str[50];
@@ -511,7 +531,7 @@ void dumpDirFollow(const char *dname)
                {
                        sprintf(str,"%s/%s",dname,de->d_name);
                        
-                       yaffs_stat(str,&s);
+                       yaffs_lstat(str,&s);
                        
                        printf("%s ino %d length %d mode %X ",de->d_name,(int)s.st_ino,(int)s.st_size,s.st_mode);
                        switch(s.st_mode & S_IFMT)
@@ -721,7 +741,7 @@ int long_test(int argc, char *argv[])
        dumpDir("/boot");
 
        // Check stat
-       r = yaffs_stat("/boot/file with a long name",&ystat);
+       r = yaffs_lstat("/boot/file with a long name",&ystat);
        
        // Check rename
        
@@ -808,7 +828,7 @@ int long_test(int argc, char *argv[])
        
        // Check chmod
        
-       yaffs_stat("/boot/yyfile",&ystat);
+       yaffs_lstat("/boot/yyfile",&ystat);
        temp_mode = ystat.st_mode;
        
        yaffs_chmod("/boot/yyfile",0x55555);
@@ -1074,12 +1094,12 @@ int root_perm_remount(const char *path)
    
    yaffs_mount(path);
    
-   yaffs_stat(path,&s);
+   yaffs_lstat(path,&s);
    printf("root perms after mount %x\n",s.st_mode);
    
    yaffs_chmod(path, 0777);
 
-   yaffs_stat(path,&s);
+   yaffs_lstat(path,&s);
    printf("root perms after setting to 0777 is  %x\n",s.st_mode);
    
    yaffs_unmount(path);
@@ -1478,7 +1498,7 @@ void long_name_test(const char *mountpt)
        char name[300];
        int result = 0;
        
-       int d,f;
+       int f;
        
        // Make a 256 byte name
        memset(name,0,sizeof(name));
@@ -1582,7 +1602,6 @@ void lookup_test(const char *mountpt)
 
 void link_test0(const char *mountpt)
 {
-       int i;
        char namea[300];
        char nameb[300];
        int result = 0;
@@ -2156,7 +2175,7 @@ void small_overwrite_test(const char *mountpt,int nmounts)
 
 void seek_overwrite_test(const char *mountpt,int nmounts)
 {
-
+        static char xx[5000];
        char a[30];
        
        int i;
@@ -2536,7 +2555,6 @@ void basic_xattr_test(const char *mountpt)
        int h;
        int result;
        int val1;
-       int valread;
 
        yaffs_StartUp();
 
@@ -2587,7 +2605,6 @@ void big_xattr_test(const char *mountpt)
        int h;
        int result;
        char val[1000];
-       char valread[1000];
 
        yaffs_StartUp();
 
@@ -2623,7 +2640,48 @@ void big_xattr_test(const char *mountpt)
        list_xattr(name);
 
 }
+
+
+void dump_dev_stats(yaffs_Device *dev, const char * str)
+{
+       printf("%s\n",str);
+       printf( "space free %d erased %d "
+               "nand reads %d writes %d erases %d "
+               "gc all %d passive %d oldestdirty %d blocks %d copies %d \n",
+               dev->nFreeChunks, dev->nErasedBlocks * dev->param.nChunksPerBlock,
+               dev->nPageReads, dev->nPageWrites, dev->nBlockErasures,
+               dev->allGCs, dev->passiveGCs, dev->oldestDirtyGCs, dev->nGCBlocks, dev->nGCCopies);
+}
+
+void test_flash_traffic(const char *mountpt)
+{
+       char name0[100];
+       char name1[100];
+       int i;
+       yaffs_Device *dev;
+
+       yaffs_traceMask = 0;
+
+       yaffs_StartUp();
+
+       yaffs_mount(mountpt);
        
+       dev = yaffs_getdev(mountpt);
+
+       strcpy(name0,mountpt);
+       strcat(name0,"/x");
+
+       strcpy(name1,mountpt);
+       strcat(name1,"/y");
+
+       dump_dev_stats(dev,"start");
+       create_file_of_size(name0,32 * 1024 * 1024);
+       dump_dev_stats(dev,"32MB written");
+       for(i = 0; i < 20; i++)
+               create_file_of_size(name1,1024 * 1024);
+       dump_dev_stats(dev,"20x 1MB files written");
+
+}
 
 int random_seed;
 int simulate_power_failure;
@@ -2677,17 +2735,18 @@ int main(int argc, char *argv[])
        
        //link_test("/flash/flash");
        
-       
-       
-       
        // cache_bypass_bug_test();
        
         //free_space_check();
         
         //check_resize_gc_bug("/flash");
         
-        basic_xattr_test("/yaffs2");
-        big_xattr_test("/yaffs2");
+        //basic_xattr_test("/yaffs2");
+        //big_xattr_test("/yaffs2");
+
+        //null_name_test("yaffs2");
+
+        test_flash_traffic("yaffs2");
 
         return 0;