2 * YAFFS: Yet another FFS. A NAND-flash specific file system.
4 * Copyright (C) 2002-2010 Aleph One Ltd.
5 * for Toby Churchill Ltd and Brightstar Engineering
7 * Created by Timothy Manning <timothy@yaffs.net>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
14 #include "mirror_tests.h"
17 int simulate_power_failure = 0;
23 typedef struct test_list_temp2{
25 int (*test_pointer)(arg_temp *args_struct);
28 typedef struct test_temp2 {
30 test_list_temp test_list[];
33 test_temp yaffs_tests={
35 {{"yaffs_test_open",yaffs_test_open}
39 test_temp linux_tests={
41 {{"linux_test_open",linux_test_open}
46 int main(int argc, char *argv[])
50 yaffs_tests.num_of_tests=(sizeof(yaffs_tests)/sizeof(test_temp));
51 linux_tests.num_of_tests=(sizeof(linux_tests)/sizeof(test_temp));
54 print_message(1,"running mirror_tests\n");
55 sprintf(message,"linux_root_path: %s\n",linux_struct.root_path);
56 print_message(3,message);
57 sprintf(message,"yaffs_root_path: %s\n",yaffs_struct.root_path);
58 print_message(3,message);
59 sprintf(message,"linux_num_of_tests: %d\n",linux_tests.num_of_tests);
60 print_message(3,message);
61 sprintf(message,"yaffs_num_of_tests: %d\n",yaffs_tests.num_of_tests);
62 print_message(3,message);
68 void init(int argc, char *argv[])
74 linux_struct.type_of_test =LINUX;
75 yaffs_struct.type_of_test =YAFFS;
77 sprintf(message,"current absolute path is: %s\n",getcwd(dir,200));
78 print_message(3,message);
79 strcpy(dir,getcwd(dir,200));
82 printf("dir: %s\n",dir);
83 strcpy(linux_struct.root_path,dir);
84 strcpy(yaffs_struct.root_path,"yaffs2/test/");
88 if (strcmp(argv[x],"-h")==0){
89 printf("mirror_tests help\n");
90 printf("arguments:\n");
91 printf("\t-yaffs_path [PATH] //sets the path for yaffs.\n");
92 printf("\t-linux_path [PATH] //sets the path for linux.\n");
93 printf("\t-p [NUMBER] //sets the print level for mirror_tests.\n");
94 printf("\t-v //verbose mode everything is printed\n");
95 printf("\t-q //quiet mode nothing is printed.\n");
97 } else if (strcmp(argv[x],"-yaffs_path")==0){
98 strcpy(yaffs_struct.root_path, argv[x+1]);
99 } else if (strcmp(argv[x],"-linux_path")==0){
100 strcpy(linux_struct.root_path, argv[x+1]);
101 } else if (strcmp(argv[x],"-p")==0){
102 set_print_level(atoi(argv[x+1]));
103 } else if (strcmp(argv[x],"-v")==0){
105 } else if (strcmp(argv[x],"-q")==0){
111 print_message(message,"\nmounting yaffs\n");
112 x=yaffs_mount("yaffs2");
114 print_message(3,"failed to mount yaffs\n");
117 print_message(3,"mounted yaffs\n");
121 print_message(3,"\nmaking linux test dir\n");
122 x=mkdir(linux_struct.root_path,0777);
124 print_message(1,"failed to make dir\n");
127 print_message(3,"made dir\n");
130 print_message(3,"\nmaking yaffs test dir\n");
131 x=yaffs_mkdir(yaffs_struct.root_path,0777);
133 print_message(1,"failed to make dir\n");
136 print_message(3,"made dir\n");
140 int run_random_test(void)
147 arg_temp args_struct;
148 for (x=0;x<num_of_tests;x++) {
149 test_id = select_test_id(yaffs_tests.num_of_tests);
150 sprintf(message,"test_id %d\n",test_id);
151 print_message(2,message);
152 generate_random_numbers(&args_struct);
153 run_yaffs_test(id, &args_struct);
154 run_linux_test(id, &args_struct);
156 compare_linux_and_yaffs();
159 int select_test_id(int test_len)
162 id=(rand() % test_len );
167 int compare_linux_and_yaffs(void)
169 // generate_array_of_objects_in_yaffs();
170 // generate_array_of_objects_in_linux();
171 //first do a check to see if both sides have the same objects on both sides.
172 //then stat all of the files and compare size and mode
173 //read the text of each file and compare them.
175 //show the diffrences by printing them.
179 void generate_random_numbers(arg_temp *args_struct)
181 args_struct->char1= (rand() % 255);
182 args_struct->char2= (rand() % 255);
183 args_struct->int1= (rand() % 100000);
184 args_struct->int2= (rand() % 100000);
185 strcpy(args_struct->string1, "apple");
186 strcpy(args_struct->string2, "apple");
189 void run_yaffs_test(int id,arg_temp *args_struct)
193 print_message(2,"\n");
194 sprintf(message,"running_test %s\n",yaffs_tests.test_list[id].test_name);
195 print_message(3,message);
196 output=yaffs_tests.test_list[id].test_pointer(args_struct);
198 sprintf(message,"test_failed %s\n",yaffs_tests.test_list[id].test_name);
199 print_message(1,message);
202 print_message(3,"test_passed\n");
206 void run_linux_test(int id,arg_temp *args_struct)
210 print_message(2,"\n");
211 sprintf(message,"running_test %s\n",linux_tests.test_list[id].test_name);
212 print_message(3,message);
213 output=linux_tests.test_list[id].test_pointer(args_struct);
215 sprintf(message,"test_failed %s\n",linux_tests.test_list[id].test_name);
216 print_message(1,message);
219 print_message(3,"test_passed\n");
223 void get_error_yaffs(void)
229 error_code=yaffs_get_error();
230 sprintf(message,"yaffs_error code %d\n",error_code);
231 print_message(1,message);
232 sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code));
233 print_message(1,message);
236 void get_error_linux(void)
243 sprintf(message,"linux_error code %d\n",error_code);
244 print_message(1,message);
245 strcpy(message,"error code");
246 sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code));
248 print_message(1,message);