X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=direct%2Ftimothy_tests%2Fquick_tests%2Fquick_tests.c;h=f0fb0211d2679093db26842349a35db7ea3cc3af;hp=61168be9f3d82dc69649dec869d737b0724e938d;hb=ddf33fed15c2376bfb602d62dd018c63fce60df8;hpb=98fdd77e12f7a14163568906da90b11f90f9f3e8 diff --git a/direct/timothy_tests/quick_tests/quick_tests.c b/direct/timothy_tests/quick_tests/quick_tests.c index 61168be..f0fb021 100644 --- a/direct/timothy_tests/quick_tests/quick_tests.c +++ b/direct/timothy_tests/quick_tests/quick_tests.c @@ -1,3 +1,16 @@ +/* + * 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 + * + * 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 "quick_tests.h" @@ -6,109 +19,165 @@ int simulate_power_failure = 0; -typedef struct test { - int (*p_function)(void); /*pointer to test function*/ - int (*p_function_clean)(void); - /*char pass_message[50]; will not need a pass message*/ - char *fail_message; /*pointer to fail message, needs to include name of test*/ -}test_template; +static int number_of_random_tests=0; +static unsigned int num_of_tests_pass=0; +static unsigned int num_of_tests_failed=0; +static unsigned int total_number_of_tests=(sizeof(test_list)/sizeof(test_template)); -int dummy_test_pass(void){ - //printf("running dummy_test_pass\n"); - return 1; -} -void dummy_test_pass_clean(void){ - -} -int dummy_test_fail(void){ - //printf("running dummy_test_fail\n"); - return -1; -} -void dummy_test_fail_clean(void){ -} -test_template test_list[]={ - //{dummy_test_pass,dummy_test_pass_clean,"dummy_test_pass"}, - //{dummy_test_fail,dummy_test_fail_clean,"dummy_test_fail"}, - {mount_yaffs_test,mount_yaffs_test_clean,"mount_yaffs_test"}, - {test_open_file,test_open_file_clean,"test_open_file"}, - - {test_yaffs_access,test_yaffs_access_clean,"test_yaffs_access"}, - {test_yaffs_unlinking, test_yaffs_unlinking_clean,"test_yaffs_unlinking"}, - {test_yaffs_lseek,test_yaffs_lseek_clean,"test_yaffs_lseek"}, - {test_yaffs_write,test_yaffs_write_clean,"test_yaffs_write"}, - {test_yaffs_read,test_yaffs_read_clean,"test_yaffs_read"}, +const struct option long_options[]={ + {"help", 0,NULL,'h'}, + {"quiet", 0,NULL,'q'}, + {"number", 1,NULL,'n'}, + {"trace", 1,NULL,'t'}, + {"continue", 0,NULL,'c'}, + {"verbose", 0,NULL,'v'} +}; +const char short_options[]="hqn:t:cv"; - {test_yaffs_stat,test_yaffs_stat_clean,"test_yaffs_stat"}, - {test_yaffs_ftruncate,test_yaffs_ftruncate_clean,"test_yaffs_ftruncate"}, - {test_yaffs_truncate,test_yaffs_truncate_clean,"test_yaffs_truncate"} - }; -unsigned int num_of_tests_pass=0; -unsigned int num_of_tests_failed=0; -unsigned int total_number_of_tests=(sizeof(test_list)/sizeof(test_template)); +int main(int argc, char *argv[]) +{ + int x=0; -int main(){ - int output=0; + init_quick_tests(argc, argv); + logical_run_of_tests(); + for (x=0;x=0){ - /*test has passed*/ - num_of_tests_pass++; - } - else { - /*test is assumed to have failed*/ - //printf("test failed\n"); - printf("test: %s failed\n",test_list[x].fail_message); - num_of_tests_failed ++; + run_test(x); + } +} + +void run_test(int x) +{ + int output=0; + char message[200]; + message[0]='\0'; + + yaffs_set_error(0); /*reset the last error to 0 */ + //printf("foo exists %d\n",test_yaffs_open()); + sprintf(message,"\nrunning test: %s \n",test_list[x].name_of_test); + print_message(message,3); + output=test_list[x].p_function(); /*run test*/ + if (output>=0){ + /*test has passed*/ + sprintf(message,"\ttest %s passed\n",test_list[x].name_of_test); + print_message(message,3); + num_of_tests_pass++; + } else { + /*test is assumed to have failed*/ + //printf("test failed\n"); + sprintf(message,"test: %s failed\n",test_list[x].name_of_test); + print_message(message,1); + num_of_tests_failed ++; + + get_error(); + print_message("\n\n",1); + if (get_exit_on_error()){ quit_quick_tests(1); - } - output=test_list[x].p_function_clean(); /*clean the test*/ - if (output <0){ - /* if the test failed to clean it's self then */ - printf("test: %s failed to clean\n",test_list[x].fail_message); - num_of_tests_failed ++; - num_of_tests_pass--; + } + output=0; + output=test_list[x].p_function_clean(); /*clean the test*/ + if (output <0){ + /* if the test failed to clean it's self then */ + sprintf(message,"test: %s failed to clean\n",test_list[x].name_of_test); + print_message(message,1); + num_of_tests_failed ++; + num_of_tests_pass--; + get_error(); + printf("\n\n"); + if (get_exit_on_error()){ quit_quick_tests(1); } - + + } else { + sprintf(message,"\ttest clean: %s passed\n",test_list[x].name_of_test); + print_message(message,3); } - /*this is where the loop should break to*/ - quit_quick_tests(0); - /* the progame should never get here*/ - return 0; } -void quit_quick_tests(int exit_code){ - int error_code=0; +void quit_quick_tests(int exit_code) +{ + char message[30]; + message[0]='\0'; if (num_of_tests_pass==total_number_of_tests && num_of_tests_failed==0){ - printf("\t OK \n"); - } - else { - error_code=yaffs_get_error(); - printf("yaffs_error code %d\n",error_code); - printf("error is : %s\n",yaffs_error_to_str(error_code)); + printf("\t OK --all tests passed\n"); } - printf("tests: %d passed %d failed\n\n\n",num_of_tests_pass,num_of_tests_failed); + printf("out of %d tests, %d ran: %d passed and %d failed\n\n\n", total_number_of_tests,(num_of_tests_pass+num_of_tests_failed) ,num_of_tests_pass,num_of_tests_failed); yaffs_unmount(YAFFS_MOUNT_POINT); exit(exit_code); } -void init_quick_tests(void){ - yaffs_start_up();; - yaffs_set_trace(0); +void get_error(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(message,1); + sprintf(message,"error is : %s\n",yaffs_error_to_str(error_code)); + print_message(message,1); +} + +void init_quick_tests(int argc, char *argv[]) +{ + int trace=0; +int new_option; + int x=0; + do{ + new_option=getopt_long(argc,argv,short_options,long_options,NULL); + if (0==strcmp(argv[x],"-h")){ + printf("help\n"); + printf("-h will print the commands available\n"); + printf("-c will continue after a test failes else the program will exit\n"); + printf("-v will print all messages\n"); + printf("-q quiet mode only the number of tests passed and failed will be printed\n"); + printf("-t [number] set yaffs_trace to number\n"); + printf("-n [number] sets the number of random loops to run after the the test has run\n"); + exit(0); + } else if (new_option=='c') { + set_exit_on_error(0); + } else if (new_option=='q') { + set_print_level(-3); + } else if (new_option=='t') { + trace = atoi(optarg); + } else if (new_option=='v') { + set_print_level(5); + } else if (new_option=='n') { + number_of_random_tests=atoi(optarg); + } + + }while (new_option!=-1); + yaffs_start_up(); + yaffs_set_trace(trace); }