X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=direct%2Ftimothy_tests%2Fmirror_tests%2Fmirror_tests.c;h=cd4e5f20ebdabafd24c3ed38011bebd8ccf2ff45;hb=6648cbf52d6695755941ff8607fd7a0cda542e05;hp=758b0a9c391fca85dde01029b01958fc4d6dfa6b;hpb=6e8abe36e3190664d26161ace6948c57f9ffda94;p=yaffs2.git diff --git a/direct/timothy_tests/mirror_tests/mirror_tests.c b/direct/timothy_tests/mirror_tests/mirror_tests.c index 758b0a9..cd4e5f2 100644 --- a/direct/timothy_tests/mirror_tests/mirror_tests.c +++ b/direct/timothy_tests/mirror_tests/mirror_tests.c @@ -1,7 +1,7 @@ /* * YAFFS: Yet another FFS. A NAND-flash specific file system. * - * Copyright (C) 2002-2010 Aleph One Ltd. + * Copyright (C) 2002-2011 Aleph One Ltd. * for Toby Churchill Ltd and Brightstar Engineering * * Created by Timothy Manning @@ -48,11 +48,26 @@ test_temp linux_tests={ } }; +const struct option long_options[]={ + {"help", 0,NULL,'h'}, + {"yaffs_path", 1,NULL,'y'}, + {"linux_path", 1,NULL,'l'}, + {"print_level", 1,NULL,'p'}, + {"quiet", 0,NULL,'q'}, + {"number", 1,NULL,'n'}, + {"seed", 1,NULL,'s'}, + {"trace", 1,NULL,'t'}, + {"clean", 0,NULL,'c'}, + {"verbose", 0,NULL,'v'} +}; + +const char short_options[]="hy:l:p:qn:s:t:cv"; + int main(int argc, char *argv[]) { char message[100]; - int x; + // yaffs_tests.num_of_tests=(sizeof(yaffs_tests)/sizeof(test_temp)); // linux_tests.num_of_tests=(sizeof(linux_tests)/sizeof(test_temp)); @@ -68,7 +83,7 @@ int main(int argc, char *argv[]) print_message(3,message); run_random_test(num_of_random_tests); - compare_linux_and_yaffs(); + //compare_linux_and_yaffs(); yaffs_unmount("yaffs2"); return 0; } @@ -79,8 +94,12 @@ void init(int argc, char *argv[]) dir[0]='\0'; int x=-1; char message[100]; + int new_option; - 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; @@ -95,8 +114,9 @@ void init(int argc, char *argv[]) strcpy(yaffs_struct.root_path,"yaffs2/test/"); - for (x=0;x=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)&& @@ -196,9 +227,13 @@ int run_random_test(int num_of_random_tests) 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) @@ -211,26 +246,88 @@ 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; - print_message(2,"\n\n comparing folders\n"); - - + 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;NULL!=yaffs_readdir(yaffs_open_dir);x++){} + 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); @@ -238,27 +335,37 @@ int compare_linux_and_yaffs(void) } else { print_message(3,"failed to open yaffs test dir\n"); } - char yaffs_file_list[x][200]; - + //create array + yaffs_file_list= (char **)malloc(x*sizeof(char*)); + for (x=0;xd_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;NULL!=readdir(linux_open_dir);x++){} - number_of_files_in_linux=x-2; + 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. @@ -267,29 +374,40 @@ int compare_linux_and_yaffs(void) } else { print_message(3,"failed to open linux test dir\n"); } - char linux_file_list[x-2][200]; + + //create array + linux_file_list= (char **)malloc(number_of_files_in_linux*sizeof(char*)); + + for (x=0;xd_name); - print_message(3,"opened file: "); - print_message(3,message); - print_message(3,"\n"); + print_message(7,"opened file: "); + print_message(7,message); + print_message(7,"\n"); } - if (NULL!=linux_current_file && + if (linux_current_file && 0!=strcmp(message,".")&& 0!=strcmp(message,"..")){ - // strcpy(message,linux_current_file->d_name); + strcpy(file_name,linux_current_file->d_name); //sprintf("file opened: %s\n",linux_current_file->d_name); //print_message(3,message); - print_message(3,"added file to list\n"); - strcpy(linux_file_list[y],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++; - sprintf(message,"file added to list: %s\n",linux_file_list[x]); - print_message(3,message); } + linux_current_file =readdir(linux_open_dir); } closedir(linux_open_dir); } else { @@ -297,19 +415,48 @@ int compare_linux_and_yaffs(void) } - + //match the files in both folders for (x=0;x=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; } } @@ -317,24 +464,35 @@ int compare_linux_and_yaffs(void) //print remaining files for (x=0;xd_name); // generate_array_of_objects_in_yaffs(); // generate_array_of_objects_in_linux(); @@ -343,6 +501,7 @@ int compare_linux_and_yaffs(void) //read the text of each file and compare them. //show the diffrences by printing them. + return 1; } @@ -393,33 +552,6 @@ 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) -{ - 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 clean_dir(void) { @@ -428,7 +560,7 @@ void clean_dir(void) char message[200]; DIR *linux_open_dir; struct dirent *linux_current_file; - int x=0; + int x=0,output=0; getcwd(string,200); strcat(string,"/emfile-2k-0"); @@ -439,18 +571,29 @@ void clean_dir(void) linux_open_dir = opendir(linux_struct.root_path); if (linux_open_dir){ - for (x=0 ;NULL!=linux_current_file ;x++) + + do { + 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); + sprintf(message,"unlinking file %s\n",file); print_message(3,message); - unlink(file); + print_message(3,"chmoding file\n"); + output=chmod(file,(S_IRUSR|S_IWUSR)); + if (output<0) { + get_error_linux(); + } + print_message(3,"unlinking file\n"); + output=unlink(file); + if (output<0) { + get_error_linux(); + } } - } + } while(linux_current_file); closedir(linux_open_dir); rmdir(linux_struct.root_path); }