X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=direct%2Fdtest.c;h=3679b25b86b357f34ef0b3ff5f1fd653cde3f734;hb=5c97e0bdf340b75c0a644dbc05418db0c5d9e42d;hp=4d9cb894566d6a5c0cd8d986255fd45d2396517d;hpb=40b1e54e4e59aaeb6bafabcda5df47bddc5ecfee;p=yaffs2.git diff --git a/direct/dtest.c b/direct/dtest.c index 4d9cb89..3679b25 100644 --- a/direct/dtest.c +++ b/direct/dtest.c @@ -321,7 +321,7 @@ void fill_disk(char *path,int nfiles) while ((result = yaffs_write(h,xx,600)) == 600) { - f = yaffs_freespace("/boot"); + f = yaffs_freespace(path); } result = yaffs_close(h); printf(" close %d\n",result); @@ -855,6 +855,30 @@ int yaffs_scan_test(const char *path) } +void rename_over_test(const char *mountpt) +{ + int i; + char a[100]; + char b[100]; + + sprintf(a,"%s/a",mountpt); + sprintf(b,"%s/b",mountpt); + + yaffs_StartUp(); + + yaffs_mount(mountpt); + i = yaffs_open(a,O_CREAT | O_TRUNC | O_RDWR, 0); + yaffs_close(i); + i = yaffs_open(b,O_CREAT | O_TRUNC | O_RDWR, 0); + yaffs_close(i); + yaffs_rename(a,b); // rename over + yaffs_rename(b,a); // rename back again (not renaimng over) + yaffs_rename(a,b); // rename back again (not renaimng over) + + + yaffs_unmount(mountpt); + +} int resize_stress_test(const char *path) { @@ -1241,6 +1265,132 @@ int truncate_test(void) + +void fill_disk_test(const char *mountpt) +{ + int i; + yaffs_StartUp(); + + for(i = 0; i < 5; i++) + { + yaffs_mount(mountpt); + fill_disk_and_delete(mountpt,100,i+1); + yaffs_unmount(mountpt); + } + +} + + + +void lookup_test(const char *mountpt) +{ + int i; + int h; + char a[100]; + char b[100]; + + + yaffs_DIR *d; + yaffs_dirent *de; + struct yaffs_stat s; + char str[100]; + + yaffs_StartUp(); + + yaffs_mount(mountpt); + + d = yaffs_opendir(mountpt); + + if(!d) + { + printf("opendir failed\n"); + } + else + { + + for(i = 0; (de = yaffs_readdir(d)) != NULL; i++) + { + printf("unlinking %s\n",de->d_name); + yaffs_unlink(de->d_name); + } + + printf("%d files deleted\n",i); + } + + + for(i = 0; i < 2000; i++){ + sprintf(a,"%s/%d",mountpt,i); + h = yaffs_open(a,O_CREAT | O_TRUNC | O_RDWR, 0); + yaffs_close(h); + } + + yaffs_rewinddir(d); + for(i = 0; (de = yaffs_readdir(d)) != NULL; i++) + { + printf("%d %s\n",i,de->d_name); + } + + printf("%d files listed\n\n\n",i); + + yaffs_rewinddir(d); + yaffs_readdir(d); + yaffs_readdir(d); + yaffs_readdir(d); + + for(i = 0; i < 2000; i++){ + sprintf(a,"%s/%d",mountpt,i); + yaffs_unlink(a); + } + + + yaffs_unmount(mountpt); + +} + +void freespace_test(const char *mountpt) +{ + int i; + int h; + char a[100]; + char b[100]; + + int f0; + int f1; + int f2; + int f3; + sprintf(a,"%s/aaa",mountpt); + + yaffs_StartUp(); + + yaffs_mount(mountpt); + + f0 = yaffs_freespace(mountpt); + + h = yaffs_open(a, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE); + + for(i = 0; i < 100; i++) + yaffs_write(h,a,100); + + yaffs_close(h); + + f1 = yaffs_freespace(mountpt); + + yaffs_unlink(a); + + f2 = yaffs_freespace(mountpt); + + + yaffs_unmount(mountpt); + yaffs_mount(mountpt); + + f3 = yaffs_freespace(mountpt); + + printf("%d\n%d\n%d\n%d\n",f0, f1,f2,f3); + + +} + + void scan_deleted_files_test(const char *mountpt) { char fn[100]; @@ -1298,13 +1448,120 @@ void scan_deleted_files_test(const char *mountpt) } + +void write_10k(int h) +{ + int i; + const char *s="0123456789"; + for(i = 0; i < 1000; i++) + yaffs_write(h,s,10); + +} +void write_200k_file(const char *fn, const char *fdel, const char *fdel1) +{ + int h1; + int h2; + int i; + + h1 = yaffs_open(fn, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE); + + for(i = 0; i < 100000; i+= 10000) + { + write_10k(h1); + write_10k(h2); + } + + if(yaffs_lseek(h1,0,SEEK_SET) != 1000000) + { + printf("Could not write file\n"); + } + + yaffs_unlink(fdel); + for(i = 0; i < 100000; i+= 10000) + { + write_10k(h1); + write_10k(h2); + } + + if(yaffs_lseek(h1,0,SEEK_SET) != 2000000) + { + printf("Could not write file\n"); + } + + yaffs_close(h1); + yaffs_close(h2); + yaffs_unlink(fdel1); + + +} + + +void verify_200k_file(const char *fn) +{ + int h1; + int i; + char x[11]; + const char *s="0123456789"; + + h1 = yaffs_open(fn, O_RDONLY, 0); + + for(i = 0; i < 200000; i+= 10) + { + yaffs_read(h1,x,10); + if(strncmp(x,s,10) != 0) + { + printf("File verification failed at %d\n",i); + } + } + + yaffs_close(h1); + +} + + +void check_resize_gc_bug(const char *mountpt) +{ + + char a[30]; + char b[30]; + char c[30]; + + int i; + + sprintf(a,"%s/a",mountpt); + sprintf(b,"%s/b",mountpt); + sprintf(c,"%s/c",mountpt); + + + + + yaffs_StartUp(); + yaffs_mount(mountpt); + yaffs_unlink(a); + yaffs_unlink(b); + + for(i = 0; i < 50; i++) + { + printf("A\n");write_200k_file(a,"",c); + printf("B\n");verify_200k_file(a); + printf("C\n");write_200k_file(b,a,c); + printf("D\n");verify_200k_file(b); + yaffs_unmount(mountpt); + yaffs_mount(mountpt); + printf("E\n");verify_200k_file(a); + printf("F\n");verify_200k_file(b); + } + +} + + int main(int argc, char *argv[]) { //return long_test(argc,argv); //return cache_read_test(); - //resize_stress_test_no_grow("/flash",2); + //resize_stress_test_no_grow("/flash",20); //huge_directory_test_on_path("/ram2k"); @@ -1315,8 +1572,11 @@ int main(int argc, char *argv[]) //long_test_on_path("/ram2k"); - //long_test_on_path("/flash"); - scan_deleted_files_test("/flash"); + // long_test_on_path("/flash"); + //fill_disk_test("/flash"); + // rename_over_test("/flash"); + //lookup_test("/flash"); + freespace_test("/flash"); @@ -1324,6 +1584,8 @@ int main(int argc, char *argv[]) //free_space_check(); + //check_resize_gc_bug("/flash"); + return 0; }