diff options
author | Charles Manning <cdhmanning@gmail.com> | 2010-12-23 10:47:36 +1300 |
---|---|---|
committer | Charles Manning <cdhmanning@gmail.com> | 2010-12-23 10:47:36 +1300 |
commit | 1fff83304b27b26ff765c6ffef9d6f354eada46d (patch) | |
tree | 1ce7ce5160ce3c63758289af142e2f032b18594d /direct | |
parent | 3c25b14489d1ef9c4ba073dacd9a9f8bb218fe32 (diff) | |
parent | f8c94ec8d6c218bc34f348b64d853521d03e6905 (diff) |
Merge branch 'master' of ssh://www.aleph1.co.uk/home/aleph1/git/yaffs2
Diffstat (limited to 'direct')
-rw-r--r-- | direct/timothy_tests/mirror_tests/Makefile | 4 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/current_bugs.txt | 4 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/lib.c | 31 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/lib.h | 6 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/linux_test_unlink.c | 33 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/linux_test_unlink.h | 26 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/linux_test_write.c | 37 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/linux_test_write.h | 27 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/mirror_tests.c | 409 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/mirror_tests.h | 18 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/yaffs_test_unlink.c | 34 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/yaffs_test_unlink.h | 26 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/yaffs_test_write.c | 85 | ||||
-rw-r--r-- | direct/timothy_tests/mirror_tests/yaffs_test_write.h | 27 |
14 files changed, 697 insertions, 70 deletions
diff --git a/direct/timothy_tests/mirror_tests/Makefile b/direct/timothy_tests/mirror_tests/Makefile index d252e4b..8d74acf 100644 --- a/direct/timothy_tests/mirror_tests/Makefile +++ b/direct/timothy_tests/mirror_tests/Makefile @@ -48,7 +48,9 @@ COMMONTESTOBJS = yaffscfg2k.o yaffs_osglue.o yaffs_hweight.o \ TESTFILES = mirror_tests.o lib.o\ linux_test_open.o yaffs_test_open.o\ - linux_test_truncate.o yaffs_test_truncate.o + linux_test_truncate.o yaffs_test_truncate.o \ + linux_test_unlink.o yaffs_test_unlink.o \ + linux_test_write.o yaffs_test_write.o diff --git a/direct/timothy_tests/mirror_tests/current_bugs.txt b/direct/timothy_tests/mirror_tests/current_bugs.txt index 523fd3b..8e3251a 100644 --- a/direct/timothy_tests/mirror_tests/current_bugs.txt +++ b/direct/timothy_tests/mirror_tests/current_bugs.txt @@ -1,3 +1,5 @@ BUGS - In yaffs having a pathname "yaffs2/tests//.." appears to create a file called ".." unstead of going back a directory. + NO Bugs. + + diff --git a/direct/timothy_tests/mirror_tests/lib.c b/direct/timothy_tests/mirror_tests/lib.c index 1a9d6ac..e21e77d 100644 --- a/direct/timothy_tests/mirror_tests/lib.c +++ b/direct/timothy_tests/mirror_tests/lib.c @@ -22,6 +22,10 @@ void set_print_level(int new_level) { PRINT_LEVEL=new_level; } +int get_print_level(void) +{ + return PRINT_LEVEL; +} void set_exit_on_error(int num) { @@ -38,6 +42,33 @@ void display_error(void) } +void get_error_yaffs(void) +{ + int error_code=0; + char message[30]; + message[0]='\0'; + + error_code=yaffs_get_error(); + sprintf(message,"yaffs_error code %d\n",error_code); + print_message(1,message); + sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code)); + print_message(1,message); +} + +void get_error_linux(void) +{ + int error_code=0; + char message[30]; + message[0]='\0'; + + error_code=errno; + sprintf(message,"linux_error code %d\n",error_code); + print_message(1,message); + strcpy(message,"error code"); + sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code)); + //perror(message); + print_message(1,message); +} void generate_random_string(char *ptr,int length_of_str){ unsigned int x; unsigned int length=((rand() %(length_of_str-3))+3); /*creates a int with the number of charecters been between 1 and 51*/ diff --git a/direct/timothy_tests/mirror_tests/lib.h b/direct/timothy_tests/mirror_tests/lib.h index 99c2763..48adc94 100644 --- a/direct/timothy_tests/mirror_tests/lib.h +++ b/direct/timothy_tests/mirror_tests/lib.h @@ -19,7 +19,7 @@ #include <stdio.h> #include <string.h> #include "yaffsfs.h" - +#include <errno.h> typedef struct arg_temp2{ char char1; @@ -44,8 +44,10 @@ void generate_random_string(char *ptr,int length_of_str); void join_paths(char *path1,char *path2,char *new_path ); void print_message(char print_level, char *message); void set_print_level(int new_level); +int get_print_level(void); void set_exit_on_error(int num); int get_exit_on_error(void); void display_error(void); - +void get_error_yaffs(void); +void get_error_linux(void); #endif diff --git a/direct/timothy_tests/mirror_tests/linux_test_unlink.c b/direct/timothy_tests/mirror_tests/linux_test_unlink.c new file mode 100644 index 0000000..f22a57b --- /dev/null +++ b/direct/timothy_tests/mirror_tests/linux_test_unlink.c @@ -0,0 +1,33 @@ +/* + * YAFFS: Yet another FFS. A NAND-flash specific file system. + * + * Copyright (C) 2002-2010 Aleph One Ltd. + * for Toby Churchill Ltd and Brightstar Engineering + * + * Created by Timothy Manning <timothy@yaffs.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "linux_test_unlink.h" + +int linux_test_unlink(arg_temp *args_struct) +{ + char path[250]; + char message[150]; + int output; + join_paths(linux_struct.root_path,args_struct->string1, path ); + sprintf(message,"file path: %s\n",path); + print_message(3,message); + + output= unlink(path); + + if (output<0) { + print_message(3,"failed to unlink file\n"); + return -1; + } else { + return 1; + } +} diff --git a/direct/timothy_tests/mirror_tests/linux_test_unlink.h b/direct/timothy_tests/mirror_tests/linux_test_unlink.h new file mode 100644 index 0000000..aac3bcd --- /dev/null +++ b/direct/timothy_tests/mirror_tests/linux_test_unlink.h @@ -0,0 +1,26 @@ +/* + * YAFFS: Yet another Flash File System . A NAND-flash specific file system. + * + * Copyright (C) 2002-2010 Aleph One Ltd. + * for Toby Churchill Ltd and Brightstar Engineering + * + * Created by Timothy Manning <timothy@yaffs.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1 as + * published by the Free Software Foundation. + * + * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. + */ + +#ifndef __linux_test_unlink_h__ +#define __linux_test_unlink_h__ +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include "yaffsfs.h" +#include "lib.h" + +int linux_test_unlink(arg_temp *args_struct); + +#endif diff --git a/direct/timothy_tests/mirror_tests/linux_test_write.c b/direct/timothy_tests/mirror_tests/linux_test_write.c new file mode 100644 index 0000000..9714c19 --- /dev/null +++ b/direct/timothy_tests/mirror_tests/linux_test_write.c @@ -0,0 +1,37 @@ +/* + * YAFFS: Yet another FFS. A NAND-flash specific file system. + * + * Copyright (C) 2002-2010 Aleph One Ltd. + * for Toby Churchill Ltd and Brightstar Engineering + * + * Created by Timothy Manning <timothy@yaffs.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "linux_test_write.h" + +int linux_test_write(arg_temp *args_struct) +{ + char path[200]; + char message[200]; + int output=0; + int handle=-1; + join_paths(linux_struct.root_path,args_struct->string1, path ); + sprintf(message,"trying to write to: %s\nwith mode set to %o \n",path,args_struct->char1 ); + print_message(3,message); + printf("mode S_IREAD %d S_IWRITE %d\n",(args_struct->char2 & S_IREAD),(args_struct->char2 & S_IWRITE)); + handle=open(path,((args_struct->char1 &(O_TRUNC|O_EXCL|O_CREAT|O_APPEND))|O_RDWR),(args_struct->char2&(S_IREAD|S_IWRITE))); + printf("handle %d\n",handle); + if (handle<0){ + print_message(3,"failed to open a handle\n"); + return -1; //handle failed to open + } + sprintf(message,"trying to write: %d bytes into the file\n",strlen(args_struct->string2)); + print_message(3,message); + output=write(handle,args_struct->string2,strlen(args_struct->string2)); + close(handle); + return output; +} diff --git a/direct/timothy_tests/mirror_tests/linux_test_write.h b/direct/timothy_tests/mirror_tests/linux_test_write.h new file mode 100644 index 0000000..ceb29fa --- /dev/null +++ b/direct/timothy_tests/mirror_tests/linux_test_write.h @@ -0,0 +1,27 @@ +/* + * YAFFS: Yet another Flash File System . A NAND-flash specific file system. + * + * Copyright (C) 2002-2010 Aleph One Ltd. + * for Toby Churchill Ltd and Brightstar Engineering + * + * Created by Timothy Manning <timothy@yaffs.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1 as + * published by the Free Software Foundation. + * + * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. + */ + +#ifndef __linux_test_write_h__ +#define __linux_test_write_h__ +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include "yaffsfs.h" +#include "lib.h" + +int linux_test_write(arg_temp *args_struct); + +#endif diff --git a/direct/timothy_tests/mirror_tests/mirror_tests.c b/direct/timothy_tests/mirror_tests/mirror_tests.c index a022e4d..8c7574e 100644 --- a/direct/timothy_tests/mirror_tests/mirror_tests.c +++ b/direct/timothy_tests/mirror_tests/mirror_tests.c @@ -31,16 +31,20 @@ typedef struct test_temp2 { }test_temp; test_temp yaffs_tests={ - 2, + 4, {{"yaffs_test_open",yaffs_test_open}, - {"yaffs_test_truncate",yaffs_test_truncate} + {"yaffs_test_truncate",yaffs_test_truncate}, + {"yaffs_test_unlink",yaffs_test_unlink}, + {"yaffs_test_write",yaffs_test_write} } }; test_temp linux_tests={ - 2, + 4, {{"linux_test_open",linux_test_open}, - {"linux_test_truncate",linux_test_truncate} + {"linux_test_truncate",linux_test_truncate}, + {"linux_test_unlink",linux_test_unlink}, + {"linux_test_write",linux_test_write} } }; @@ -62,9 +66,9 @@ int main(int argc, char *argv[]) print_message(3,message); sprintf(message,"yaffs_num_of_tests: %d\n",yaffs_tests.num_of_tests); print_message(3,message); - for (x=0;x<num_of_random_tests;x++){ - run_random_test(); - } + + run_random_test(num_of_random_tests); + //compare_linux_and_yaffs(); yaffs_unmount("yaffs2"); return 0; } @@ -75,8 +79,12 @@ void init(int argc, char *argv[]) dir[0]='\0'; int x=-1; char message[100]; - - srand((unsigned)time(NULL)); + + x=(unsigned)time(NULL); + sprintf(message,"seeding srand with: %d\n",x); + print_message(2,message); + srand(x); + yaffs_set_trace(0); linux_struct.type_of_test =LINUX; yaffs_struct.type_of_test =YAFFS; @@ -101,6 +109,8 @@ void init(int argc, char *argv[]) printf("\t-q //quiet mode nothing is printed.\n"); printf("\t-n [number] //sets the number of random tests to run.\n"); printf("\t-s [number] //seeds rand with the number\n"); + printf("\t-t [number] //sets yaffs_trace to the number\n"); + printf("\t-clean //removes emfile and test dir\n"); exit(0); } else if (strcmp(argv[x],"-yaffs_path")==0){ strcpy(yaffs_struct.root_path, argv[x+1]); @@ -114,13 +124,18 @@ void init(int argc, char *argv[]) set_print_level(-1); } else if (strcmp(argv[x],"-n")==0){ num_of_random_tests=atoi(argv[x+1]); - } else if (strcmp(argv[x],"-n")==0){ - //srand(atoi(argv[x+1])); + } else if (strcmp(argv[x],"-s")==0){ + srand(atoi(argv[x+1])); + } else if (strcmp(argv[x],"-t")==0){ + yaffs_set_trace(atoi(argv[x+1])); + } else if (strcmp(argv[x],"-clean")==0){ + clean_dir(); + exit(0); } } - + clean_dir(); yaffs_start_up(); - print_message(message,"\nmounting yaffs\n"); + print_message(2,"\nmounting yaffs\n"); x=yaffs_mount("yaffs2"); if (x<0) { print_message(3,"failed to mount yaffs\n"); @@ -149,36 +164,53 @@ void init(int argc, char *argv[]) } } -int run_random_test(void) +int run_random_test(int num_of_random_tests) { + int y=0; int x=-1; int id=0; int test_id=-1; - int num_of_tests=1; - char message[100]; + int num_of_tests_before_check=1; + char message[200]; arg_temp args_struct; - for (x=0;x<num_of_tests;x++) { - errno=0; - yaffs_set_error(0); - test_id = select_test_id(yaffs_tests.num_of_tests); - sprintf(message,"running test_id %d\n",test_id); - print_message(3,message); - generate_random_numbers(&args_struct); - run_yaffs_test(test_id, &args_struct); - run_linux_test(test_id, &args_struct); - if ((abs(yaffs_get_error())!=abs(errno)) && - (abs(yaffs_get_error())!=EISDIR && abs(errno) != 0) && - (abs(yaffs_get_error())!=ENOENT && abs(errno) != EACCES) - ){ - print_message(2,"\ndiffrence in returned errors######################################\n"); - get_error_yaffs(); - get_error_linux(); - if (get_exit_on_error()){ - exit(0); + for (y=0;(y*num_of_tests_before_check)<num_of_random_tests;y++){ + for (x=0;x<num_of_tests_before_check && (x+(y*num_of_tests_before_check)<num_of_random_tests);x++) { + errno=0; + yaffs_set_error(0); + test_id = select_test_id(yaffs_tests.num_of_tests); + sprintf(message,"running test_id %d\n",test_id); + print_message(3,message); + generate_random_numbers(&args_struct); + run_yaffs_test(test_id, &args_struct); + + //check_mode(&args_struct); + + run_linux_test(test_id, &args_struct); + + if (get_print_level()>=4){ + get_error_yaffs(); + get_error_linux(); + } + + if ((abs(yaffs_get_error())!=abs(errno)) && + (abs(yaffs_get_error())!=EISDIR && abs(errno) != 0) && + (abs(yaffs_get_error())!=ENOENT && abs(errno) != EACCES)&& + (abs(yaffs_get_error())!=EINVAL && abs(errno) != EBADF) + ){ + print_message(2,"\ndifference in returned errors######################################\n"); + get_error_yaffs(); + get_error_linux(); + if (get_exit_on_error()){ + exit(0); + } } } - } - compare_linux_and_yaffs(); + //check_mode(&args_struct); + compare_linux_and_yaffs(&args_struct); + //check_mode(&args_struct); + + } + compare_linux_and_yaffs(&args_struct); } int select_test_id(int test_len) @@ -191,8 +223,254 @@ int select_test_id(int test_len) } -int compare_linux_and_yaffs(void) +int check_mode(arg_temp *args_struct) +{ + char path[200]; + char message[200]; + int output=0; + + struct yaffs_stat yaffs_stat_struct; + join_paths(yaffs_struct.root_path,args_struct->string1, path ); + sprintf(message,"\ntrying to stat to: %s\n",path); + print_message(3,message); + output=yaffs_stat(path,&yaffs_stat_struct); + if (output < 0){ + sprintf(message,"failed to stat the file\n"); + print_message(3,message); + get_error_yaffs(); + } else { + sprintf(message,"stated the file\n"); + print_message(3,message); + sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + } + return 1; +} + +int check_mode_file(char *path) { + char message[200]; + int output=0; + + struct yaffs_stat yaffs_stat_struct; + + sprintf(message,"\ntrying to stat to: %s\n",path); + print_message(3,message); + output=yaffs_stat(path,&yaffs_stat_struct); + if (output < 0){ + sprintf(message,"failed to stat the file\n"); + print_message(3,message); + get_error_yaffs(); + } else { + sprintf(message,"stated the file\n"); + print_message(3,message); + sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + } + return 1; +} + +int compare_linux_and_yaffs(arg_temp *args_struct) +{ + int x=0,y=0; + char l_path[200]; + char y_path[200]; + char file_name[200]; + int exit_bool=0; + int number_of_files_in_yaffs=0; + int number_of_files_in_linux=0; + char message[200]; + char **yaffs_file_list=NULL; + char **linux_file_list=NULL; + + struct yaffs_stat yaffs_stat_struct; + struct stat linux_stat_struct; + yaffs_DIR *yaffs_open_dir; + yaffs_dirent *yaffs_current_file; + + DIR *linux_open_dir; + struct dirent *linux_current_file; + + l_path[0]='\0'; + y_path[0]='\0'; + file_name[0]='\0'; + message[0]='\0'; + print_message(2,"\n\n\n comparing folders\n"); +// check_mode_file("yaffs2/test/YY"); + //find out the number of files in the directory + yaffs_open_dir = yaffs_opendir(yaffs_struct.root_path); + if (yaffs_open_dir) { + for (x=0;yaffs_readdir(yaffs_open_dir);x++){} + number_of_files_in_yaffs=x; + sprintf(message,"number of files in yaffs dir= %d\n",number_of_files_in_yaffs); + print_message(2,message); + yaffs_rewinddir(yaffs_open_dir); + } else { + print_message(3,"failed to open yaffs test dir\n"); + } + //create array + yaffs_file_list= (char **)malloc(x*sizeof(char*)); + for (x=0;x<number_of_files_in_yaffs;x++) { + yaffs_file_list[x]=malloc(200); + } + + //check_mode_file("yaffs2/test/YY"); + //copy file names into array + if (yaffs_open_dir){ + yaffs_current_file =yaffs_readdir(yaffs_open_dir); + for (x=0 ;yaffs_current_file;x++) + { + printf("x= %d \n",x); + printf("yaffs_current_file->d_name = %s\n",yaffs_current_file->d_name); + if (yaffs_current_file){ + strcpy(yaffs_file_list[x],yaffs_current_file->d_name); + + } + yaffs_current_file =yaffs_readdir(yaffs_open_dir); + } + yaffs_closedir(yaffs_open_dir); + } else { + print_message(3,"failed to populate yaffs test list\n"); + } + + + //find out the number of files in the directory + linux_open_dir = opendir(linux_struct.root_path); + if (linux_open_dir){ + for (x=0;readdir(linux_open_dir);x++){} + number_of_files_in_linux=(x-2); + sprintf(message,"number of files in linux dir= %d\n",(number_of_files_in_linux)); + print_message(2,message); + //the -2 is because linux shows 2 extra files which are automaticly created. + + rewinddir(linux_open_dir); + } else { + print_message(3,"failed to open linux test dir\n"); + } + + //create array + linux_file_list= (char **)malloc(number_of_files_in_linux*sizeof(char*)); + + for (x=0;x<number_of_files_in_linux;x++) { + linux_file_list[x]=malloc(200); + } + + //check_mode_file("yaffs2/test/YY"); + //copy file names into array + if (linux_open_dir){ + linux_current_file =readdir(linux_open_dir); + for (x=0, y=0 ;linux_current_file;x++) + { + + if (linux_current_file){ + strcpy(message,linux_current_file->d_name); + print_message(7,"opened file: "); + print_message(7,message); + print_message(7,"\n"); + } + if (linux_current_file && + 0!=strcmp(message,".")&& + 0!=strcmp(message,"..")){ + strcpy(file_name,linux_current_file->d_name); + //sprintf("file opened: %s\n",linux_current_file->d_name); + //print_message(3,message); + print_message(7,"added file to list\n"); + strcpy(linux_file_list[y],file_name); + sprintf(message,"file added to list: %s\n",linux_file_list[y]); + print_message(7,message); + y++; + } + linux_current_file =readdir(linux_open_dir); + } + closedir(linux_open_dir); + } else { + print_message(3,"failed to populate linux test dir\n"); + } + + + //match the files in both folders + for (x=0;x<number_of_files_in_yaffs;x++){ + sprintf(message,"\nsearching for yaffs file: %s\n",yaffs_file_list[x]); + print_message(3,message); + for (y=0;y<number_of_files_in_linux;y++){ + sprintf(message,"comparing to linux file: %s\n",linux_file_list[y]); + print_message(7,message); + + if (0==strcmp(yaffs_file_list[x],linux_file_list[y])){ + sprintf(message,"file matched: %s\n",linux_file_list[y]); + print_message(3,message); + //check that the modes of both files are the same + join_paths(yaffs_struct.root_path,yaffs_file_list[x],y_path); + join_paths(linux_struct.root_path,linux_file_list[y],l_path); + if (yaffs_stat(y_path,&yaffs_stat_struct)>=0&& + stat(l_path,&linux_stat_struct)>=0){ + sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + sprintf(message," linux file mode is %d\n",(linux_stat_struct.st_mode & (S_IREAD|S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(linux_stat_struct.st_mode & S_IREAD),(linux_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + if ((yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))== + ( linux_stat_struct.st_mode & (S_IREAD|S_IWRITE))){ + print_message(2,"file modes match\n"); + } else { + print_message(2,"file modes do not match\n"); + exit_bool=1; + } + linux_file_list[y][0]=NULL; + yaffs_file_list[x][0]=NULL; + } else { + print_message(2,"failed to stat one of the files\n"); + get_error_yaffs(); + get_error_linux(); + } + + //read file contents + + + break; + } + } + } + + //print remaining files + for (x=0;x<number_of_files_in_linux;x++){ + if (linux_file_list[x][0]){ + sprintf(message,"unmatched file in linux: %s\n",linux_file_list[x]); + print_message(2,message); + exit_bool=1; + } + } + for (x=0;x<number_of_files_in_yaffs;x++){ + if (yaffs_file_list[x][0]){ + sprintf(message,"unmatched file in yaffs: %s\n",yaffs_file_list[x]); + print_message(2,message); + exit_bool=1; + } + } + if (exit_bool==1&& get_exit_on_error()==1){ + print_message(2,"exiting program\n"); + exit(0); + } + + for (x=0;x<number_of_files_in_yaffs;x++) { + free(yaffs_file_list[x]); + } + free(yaffs_file_list); + + for (x=0;x<number_of_files_in_linux;x++) { + free(linux_file_list[x]); + } + free(linux_file_list); + + + //printf("file_name %s\n", yaffs_current_file->d_name); // generate_array_of_objects_in_yaffs(); // generate_array_of_objects_in_linux(); //first do a check to see if both sides have the same objects on both sides. @@ -200,6 +478,7 @@ int compare_linux_and_yaffs(void) //read the text of each file and compare them. //show the diffrences by printing them. + return 1; } @@ -250,31 +529,39 @@ void run_linux_test(int id,arg_temp *args_struct) } } -void get_error_yaffs(void) -{ - int error_code=0; - char message[30]; - message[0]='\0'; - - error_code=yaffs_get_error(); - sprintf(message,"yaffs_error code %d\n",error_code); - print_message(1,message); - sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code)); - print_message(1,message); -} -void get_error_linux(void) +void clean_dir(void) { - int error_code=0; - char message[30]; - message[0]='\0'; + char string[200]; + char file[200]; + char message[200]; + DIR *linux_open_dir; + struct dirent *linux_current_file; + int x=0; + + getcwd(string,200); + strcat(string,"/emfile-2k-0"); + sprintf(message,"\n\nunlinking emfile at this path: %s\n",string); + print_message(3,message); + unlink(string); + - error_code=errno; - sprintf(message,"linux_error code %d\n",error_code); - print_message(1,message); - strcpy(message,"error code"); - sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code)); - //perror(message); - print_message(1,message); + linux_open_dir = opendir(linux_struct.root_path); + if (linux_open_dir){ + for (x=0 ;NULL!=linux_current_file ;x++) + { + linux_current_file =readdir(linux_open_dir); + if (NULL!=linux_current_file){ + + strcpy(file,linux_struct.root_path); + strcat(file,linux_current_file->d_name); + sprintf(message,"unlinking file %d\n",linux_current_file->d_name); + print_message(3,message); + unlink(file); + } + } + closedir(linux_open_dir); + rmdir(linux_struct.root_path); + } + } - diff --git a/direct/timothy_tests/mirror_tests/mirror_tests.h b/direct/timothy_tests/mirror_tests/mirror_tests.h index 0ae4be5..cf4bb8e 100644 --- a/direct/timothy_tests/mirror_tests/mirror_tests.h +++ b/direct/timothy_tests/mirror_tests/mirror_tests.h @@ -17,18 +17,23 @@ #define __mirror_tests_h__ #include <stdio.h> +#include <dirent.h> #include <unistd.h> //used for getting the current directory. #include <string.h> #include <errno.h> #include "yaffsfs.h" #include "lib.h" #include <time.h> +#include <sys/stat.h> #include "linux_test_open.h" #include "yaffs_test_open.h" #include "linux_test_truncate.h" #include "yaffs_test_truncate.h" - +#include "linux_test_unlink.h" +#include "yaffs_test_unlink.h" +#include "linux_test_write.h" +#include "yaffs_test_write.h" #define LINUX 1 #define YAFFS 2 @@ -38,14 +43,17 @@ void init(int argc, char *argv[]); -int run_random_test(void); -int compare_linux_and_yaffs(void); -void get_error_yaffs(void); -void get_error_linux(void); +int run_random_test(int num_of_random_tests); +int compare_linux_and_yaffs(arg_temp *args_struct); + int select_test_id(int test_len); void generate_random_numbers(arg_temp *args_struct); void run_yaffs_test(int id,arg_temp *args_struct); void run_linux_test(int id,arg_temp *args_struct); +void clean_dir(void); +int select_test_id(int test_len); +int check_mode(arg_temp *args_struct); +int check_mode_file(char *path); //void generate_array_of_objects_in_yaffs(void); //void generate_array_of_objects_in_linux(void); diff --git a/direct/timothy_tests/mirror_tests/yaffs_test_unlink.c b/direct/timothy_tests/mirror_tests/yaffs_test_unlink.c new file mode 100644 index 0000000..a6f1497 --- /dev/null +++ b/direct/timothy_tests/mirror_tests/yaffs_test_unlink.c @@ -0,0 +1,34 @@ +/* + * YAFFS: Yet another FFS. A NAND-flash specific file system. + * + * Copyright (C) 2002-2010 Aleph One Ltd. + * for Toby Churchill Ltd and Brightstar Engineering + * + * Created by Timothy Manning <timothy@yaffs.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "yaffs_test_unlink.h" + +int yaffs_test_unlink(arg_temp *args_struct) +{ + char path[250]; + char message[150]; + int output; + join_paths(yaffs_struct.root_path,args_struct->string1, path ); + sprintf(message,"file path: %s\n",path); + print_message(3,message); + + output= yaffs_unlink(path); + + if (output<0) { + print_message(3,"failed to unlink file\n"); + return -1; + } else { + return 1; + } + +} diff --git a/direct/timothy_tests/mirror_tests/yaffs_test_unlink.h b/direct/timothy_tests/mirror_tests/yaffs_test_unlink.h new file mode 100644 index 0000000..4d1b881 --- /dev/null +++ b/direct/timothy_tests/mirror_tests/yaffs_test_unlink.h @@ -0,0 +1,26 @@ +/* + * YAFFS: Yet another Flash File System . A NAND-flash specific file system. + * + * Copyright (C) 2002-2010 Aleph One Ltd. + * for Toby Churchill Ltd and Brightstar Engineering + * + * Created by Timothy Manning <timothy@yaffs.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1 as + * published by the Free Software Foundation. + * + * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. + */ + +#ifndef __yaffs_test_unlink_h__ +#define __yaffs_test_unlink_h__ +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include "yaffsfs.h" +#include "lib.h" + +int yaffs_test_unlink(arg_temp *args_struct); + +#endif diff --git a/direct/timothy_tests/mirror_tests/yaffs_test_write.c b/direct/timothy_tests/mirror_tests/yaffs_test_write.c new file mode 100644 index 0000000..a348003 --- /dev/null +++ b/direct/timothy_tests/mirror_tests/yaffs_test_write.c @@ -0,0 +1,85 @@ +/* + * YAFFS: Yet another FFS. A NAND-flash specific file system. + * + * Copyright (C) 2002-2010 Aleph One Ltd. + * for Toby Churchill Ltd and Brightstar Engineering + * + * Created by Timothy Manning <timothy@yaffs.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "yaffs_test_write.h" + +int yaffs_test_write(arg_temp *args_struct) +{ + char path[200]; + char message[200]; + int output=0,output2=0; + int handle; + struct yaffs_stat yaffs_stat_struct; + join_paths(yaffs_struct.root_path,args_struct->string1, path ); + sprintf(message,"trying to write to: %s\nwith mode set to %o \n",path,args_struct->char1); + print_message(3,message); + printf("mode S_IREAD %d S_IWRITE %d\n",(args_struct->char2 & S_IREAD),(args_struct->char2 & S_IWRITE)); + handle=yaffs_open(path,((args_struct->char1 &(O_TRUNC|O_EXCL|O_CREAT|O_APPEND))|O_RDWR),(args_struct->char2&(S_IREAD|S_IWRITE))); + printf("handle %d\n",handle); + if (handle<0){ + print_message(3,"failed to open a handle\n"); + return -1; //handle failed to open + } + +/* output=yaffs_fstat(handle,&yaffs_stat_struct); + if (output < 0){ + sprintf(message,"failed to stat the file\n"); + print_message(3,message); + get_error_yaffs(); + } else { + sprintf(message,"stated the file\n"); + print_message(3,message); + sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + } + + sprintf(message,"trying to write: %d bytes into the file\n",strlen(args_struct->string2)); + print_message(3,message); +*/ + output=yaffs_write(handle,&args_struct->string2,strlen(args_struct->string2)); + +/* print_message(3,"\n wrote to the file\n"); + output2=yaffs_fstat(handle,&yaffs_stat_struct); + if (output2 < 0){ + sprintf(message,"failed to stat the file\n"); + print_message(3,message); + get_error_yaffs(); + } else { + sprintf(message,"stated the file\n"); + print_message(3,message); + sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + } +*/ yaffs_close(handle); +/* print_message(3,"\n closing the file\n"); + output2=yaffs_stat(path,&yaffs_stat_struct); + if (output2 < 0){ + sprintf(message,"failed to stat the file\n"); + print_message(3,message); + get_error_yaffs(); + } else { + sprintf(message,"stated the file\n"); + print_message(3,message); + sprintf(message," yaffs file mode is %d\n",(yaffs_stat_struct.st_mode & (S_IREAD| S_IWRITE))); + print_message(3,message); + sprintf(message,"mode S_IREAD %d S_IWRITE %d\n",(yaffs_stat_struct.st_mode & S_IREAD),(yaffs_stat_struct.st_mode & S_IWRITE)); + print_message(3,message); + } +*/ + + return output; +} diff --git a/direct/timothy_tests/mirror_tests/yaffs_test_write.h b/direct/timothy_tests/mirror_tests/yaffs_test_write.h new file mode 100644 index 0000000..3d6220e --- /dev/null +++ b/direct/timothy_tests/mirror_tests/yaffs_test_write.h @@ -0,0 +1,27 @@ +/* + * YAFFS: Yet another Flash File System . A NAND-flash specific file system. + * + * Copyright (C) 2002-2010 Aleph One Ltd. + * for Toby Churchill Ltd and Brightstar Engineering + * + * Created by Timothy Manning <timothy@yaffs.net> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 2.1 as + * published by the Free Software Foundation. + * + * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. + */ + +#ifndef __yaffs_test_write_h__ +#define __yaffs_test_write_h__ +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include "yaffsfs.h" +#include "lib.h" + +int yaffs_test_write(arg_temp *args_struct); + +#endif |