X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=direct%2Ftest-framework%2Ftimothy_tests%2Fyaffs_and_linux_mirror_tests%2Fmirror_tests.c;fp=direct%2Ftest-framework%2Ftimothy_tests%2Fyaffs_and_linux_mirror_tests%2Fmirror_tests.c;h=0000000000000000000000000000000000000000;hp=dcd83df3ed6f626cfa322f16b7845869c31cab69;hb=e12e51da5815d80399ec8f5b0da69c7cd7a0f42e;hpb=ebc54da9e29be1de79d77c72c0d8eb91833c641b diff --git a/direct/test-framework/timothy_tests/yaffs_and_linux_mirror_tests/mirror_tests.c b/direct/test-framework/timothy_tests/yaffs_and_linux_mirror_tests/mirror_tests.c deleted file mode 100644 index dcd83df..0000000 --- a/direct/test-framework/timothy_tests/yaffs_and_linux_mirror_tests/mirror_tests.c +++ /dev/null @@ -1,600 +0,0 @@ -/* - * YAFFS: Yet another FFS. A NAND-flash specific file system. - * - * Copyright (C) 2002-2018 Aleph One Ltd. - * - * Created by Timothy Manning - * - * 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 "mirror_tests.h" - -int random_seed; -int simulate_power_failure = 0; - -int num_of_random_tests=1; - - - -typedef struct test_list_temp2{ - char *test_name; - int (*test_pointer)(arg_temp *args_struct); -}test_list_temp; - -typedef struct test_temp2 { - int num_of_tests; - test_list_temp test_list[]; -}test_temp; - -test_temp yaffs_tests={ - 4, - {{"yaffs_test_open",yaffs_test_open}, - {"yaffs_test_truncate",yaffs_test_truncate}, - {"yaffs_test_unlink",yaffs_test_unlink}, - {"yaffs_test_write",yaffs_test_write} - } -}; - -test_temp linux_tests={ - 4, - {{"linux_test_open",linux_test_open}, - {"linux_test_truncate",linux_test_truncate}, - {"linux_test_unlink",linux_test_unlink}, - {"linux_test_write",linux_test_write} - } -}; - -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]; - -// yaffs_tests.num_of_tests=(sizeof(yaffs_tests)/sizeof(test_temp)); -// linux_tests.num_of_tests=(sizeof(linux_tests)/sizeof(test_temp)); - - init(argc,argv); - print_message(1,"running mirror_tests\n"); - sprintf(message,"linux_root_path: %s\n",linux_struct.root_path); - print_message(3,message); - sprintf(message,"yaffs_root_path: %s\n",yaffs_struct.root_path); - print_message(3,message); - sprintf(message,"linux_num_of_tests: %d\n",linux_tests.num_of_tests); - print_message(3,message); - sprintf(message,"yaffs_num_of_tests: %d\n",yaffs_tests.num_of_tests); - print_message(3,message); - - run_random_test(num_of_random_tests); - //compare_linux_and_yaffs(); - yaffs_unmount("yaffs2"); - return 0; -} - -void init(int argc, char *argv[]) -{ - char dir[200]; - dir[0]='\0'; - int x=-1; - char message[100]; - int new_option; - - 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; - - sprintf(message,"current absolute path is: %s\n",getcwd(dir,200)); - print_message(3,message); - strcpy(dir,getcwd(dir,200)); - - strcat(dir,"/test/"); - printf("dir: %s\n",dir); - strcpy(linux_struct.root_path,dir); - strcpy(yaffs_struct.root_path,"yaffs2/test/"); - - - do { - new_option=getopt_long(argc,argv,short_options,long_options,NULL); - if (new_option=='h'){ - printf("mirror_tests help\n"); - printf("arguments:\n"); - printf("\t-yaffs_path [PATH] //sets the path for yaffs.\n"); - printf("\t-linux_path [PATH] //sets the path for linux.\n"); - printf("\t-p [NUMBER] //sets the print level for mirror_tests.\n"); - printf("\t-v //verbose mode everything is printed\n"); - 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 (new_option=='y'){ - strcpy(yaffs_struct.root_path, optarg); - } else if (new_option=='l'){ - strcpy(linux_struct.root_path, optarg); - } else if (new_option=='p'){ - set_print_level(atoi(optarg)); - } else if (new_option=='v'){ - set_print_level(5); - } else if (new_option=='q'){ - set_print_level(-1); - } else if (new_option=='n'){ - num_of_random_tests=atoi(optarg); - } else if (new_option=='s'){ - srand(atoi(argv[x+1])); - } else if (new_option=='t'){ - yaffs_set_trace(atoi(optarg)); - } else if (new_option=='c'){ - clean_dir(); - exit(0); - } else if (new_option==-1){ - - } else if (new_option=='?') { - printf("bad argument\n"); - exit(0); - } - - } while(new_option!=-1); - clean_dir(); - yaffs_start_up(); - print_message(2,"\nmounting yaffs\n"); - x=yaffs_mount("yaffs2"); - if (x<0) { - print_message(3,"failed to mount yaffs\n"); - get_error_yaffs(); - } else { - print_message(3,"mounted yaffs\n"); - } - - - print_message(3,"\nmaking linux test dir\n"); - x=mkdir(linux_struct.root_path,0777); - if (x<0) { - print_message(1,"failed to make dir\n"); - get_error_linux(); - } else { - print_message(3,"made dir\n"); - } - - print_message(3,"\nmaking yaffs test dir\n"); - x=yaffs_mkdir(yaffs_struct.root_path,0777); - if (x<0) { - print_message(1,"failed to make dir\n"); - get_error_yaffs(); - } else { - print_message(3,"made dir\n"); - } -} - -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_before_check=1; - char message[200]; - arg_temp args_struct; - for (y=0;(y*num_of_tests_before_check)=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); - } - } - } - //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) -{ - int id=0; - //printf("test_len = %d\n",test_len); - id=(rand() % test_len ); - //printf("id %d\n",id); - return id; - -} - -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; - struct 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;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;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;xd_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=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;xd_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. - //then stat all of the files and compare size and mode - //read the text of each file and compare them. - - //show the diffrences by printing them. - return 1; - -} - -void generate_random_numbers(arg_temp *args_struct) -{ - char string[51]; - args_struct->char1= (rand() % 255); - args_struct->char2= (rand() % 255); - args_struct->int1= (rand() % 100000); - args_struct->int2= (rand() % 100000); - generate_random_string(string,50); - strcpy(args_struct->string1, string); - generate_random_string(string,50); - strcpy(args_struct->string2, string); -} - -void run_yaffs_test(int id,arg_temp *args_struct) -{ - char message[200]; - int output =0; - print_message(3,"\n"); - //printf("id = %d\n",id); - sprintf(message,"running_test %s\n",yaffs_tests.test_list[id].test_name); - print_message(3,message); - output=yaffs_tests.test_list[id].test_pointer(args_struct); - if (output<0) { - sprintf(message,"test_failed %s\n",yaffs_tests.test_list[id].test_name); - print_message(3,message); - } else { - print_message(3,"test_passed\n"); - } -} - -void run_linux_test(int id,arg_temp *args_struct) -{ - char message[200]; - int output =0; - print_message(3,"\n"); - //printf("id = %d\n",id); - sprintf(message,"running_test %s\n",linux_tests.test_list[id].test_name); - print_message(3,message); - output=linux_tests.test_list[id].test_pointer(args_struct); - if (output<0) { - sprintf(message,"test_failed %s\n",linux_tests.test_list[id].test_name); - print_message(3,message); - } else { - print_message(3,"test_passed\n"); - } -} - - -void clean_dir(void) -{ - char string[200]; - char file[200]; - char message[200]; - DIR *linux_open_dir; - struct dirent *linux_current_file; - int x=0,output=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); - - - linux_open_dir = opendir(linux_struct.root_path); - if (linux_open_dir){ - - 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 %s\n",file); - print_message(3,message); - 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); - } - -}