annotate direct/tests/yaffs_test.c @ 312:b5d302efa7dd

More test tweaks
author charles <charles>
date Sat, 07 Nov 2009 22:35:15 +0000
parents ed8472f821be
children da192170b4ff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
1 /*
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
2 * YAFFS: Yet another FFS. A NAND-flash specific file system.
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
3 *
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
4 * Copyright (C) 2002 Aleph One Ltd.
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
5 * for Toby Churchill Ltd and Brightstar Engineering
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
6 *
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
7 * Created by Charles Manning <charles@aleph1.co.uk>
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
8 *
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
10 * it under the terms of the GNU General Public License version 2 as
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
11 * published by the Free Software Foundation.
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
12 *
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
13 */
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
14
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
15
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
16
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
17
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
18 #include <stdio.h>
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
19 #include <string.h>
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
20 #include <unistd.h>
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
21 #include <fcntl.h>
312
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
22 #include <signal.h>
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
23
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
24 #include "yaffsfs.h"
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
25
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
26 #include "nor_stress.h"
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
27 #include "yaffs_fsx.h"
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
28
312
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
29 void (*ext_fatal)(void);
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
30
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
31
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
32 int random_seed;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
33 int simulate_power_failure = 0;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
34
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
35
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
36 int do_fsx;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
37 int init_test;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
38 int do_upgrade;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
39 int n_cycles = -1;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
40
240
22b5cf141a53 More test fiddling
charles <charles>
parents: 237
diff changeset
41 extern int ops_multiplier;
22b5cf141a53 More test fiddling
charles <charles>
parents: 237
diff changeset
42
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
43 char mount_point[200];
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
44
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
45 void BadUsage(void)
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
46 {
307
af08f0e8f039 Add option descriptions
charles <charles>
parents: 245
diff changeset
47 printf("Usage: yaffs_test [options] mountpoint\n");
af08f0e8f039 Add option descriptions
charles <charles>
parents: 245
diff changeset
48 printf("options\n");
af08f0e8f039 Add option descriptions
charles <charles>
parents: 245
diff changeset
49 printf(" f: do fsx testing\n");
af08f0e8f039 Add option descriptions
charles <charles>
parents: 245
diff changeset
50 printf(" i: initialise for upgrade testing\n");
af08f0e8f039 Add option descriptions
charles <charles>
parents: 245
diff changeset
51 printf(" l: multiply number of operations by 5\n");
af08f0e8f039 Add option descriptions
charles <charles>
parents: 245
diff changeset
52 printf(" n nnn: number of cycles\n");
af08f0e8f039 Add option descriptions
charles <charles>
parents: 245
diff changeset
53 printf(" p: simulate power fail testing\n");
af08f0e8f039 Add option descriptions
charles <charles>
parents: 245
diff changeset
54 printf(" s sss: set seed\n");
308
ed8472f821be Add more tracing to tests
charles <charles>
parents: 307
diff changeset
55 printf(" u: do upgrade test\n");
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
56 exit(2);
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
57 }
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
58
312
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
59 void test_fatal(void)
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
60 {
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
61 printf("fatal yaffs test pid %d sleeping\n",getpid());
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
62 while(1)
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
63 sleep(1);
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
64
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
65 }
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
66
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
67 void bad_ptr_handler(int sig)
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
68 {
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
69 printf("signal %d received\n",sig);
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
70 test_fatal();
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
71 }
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
72 int main(int argc, char **argv)
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
73 {
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
74 int ch;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
75
312
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
76 ext_fatal = test_fatal;
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
77 signal(SIGSEGV,bad_ptr_handler);
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
78 signal(SIGBUS,bad_ptr_handler);
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
79 signal(SIGABRT,bad_ptr_handler);
b5d302efa7dd More test tweaks
charles <charles>
parents: 308
diff changeset
80
240
22b5cf141a53 More test fiddling
charles <charles>
parents: 237
diff changeset
81 while ((ch = getopt(argc,argv, "filn:ps:u"))
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
82 != EOF)
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
83 switch (ch) {
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
84 case 's':
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
85 random_seed = atoi(optarg);
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
86 break;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
87 case 'p':
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
88 simulate_power_failure =1;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
89 break;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
90 case 'i':
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
91 init_test = 1;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
92 break;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
93 case 'f':
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
94 do_fsx = 1;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
95 break;
240
22b5cf141a53 More test fiddling
charles <charles>
parents: 237
diff changeset
96 case 'l':
22b5cf141a53 More test fiddling
charles <charles>
parents: 237
diff changeset
97 ops_multiplier *= 5;
22b5cf141a53 More test fiddling
charles <charles>
parents: 237
diff changeset
98 break;
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
99 case 'u':
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
100 do_upgrade = 1;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
101 break;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
102 case 'n':
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
103 n_cycles = atoi(optarg);
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
104 break;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
105 default:
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
106 BadUsage();
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
107 /* NOTREACHED */
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
108 }
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
109 argc -= optind;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
110 argv += optind;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
111
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
112 if(argc == 1) {
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
113 strcpy(mount_point,argv[0]);
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
114
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
115 if(simulate_power_failure)
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
116 n_cycles = -1;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
117 printf("Running test %s %s %s %s seed %d cycles %d\n",
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
118 do_upgrade ? "fw_upgrade" : "",
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
119 init_test ? "initialise":"",
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
120 do_fsx ? "fsx" :"",
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
121 simulate_power_failure ? "power_fail" : "",
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
122 random_seed, n_cycles);
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
123
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
124 yaffs_StartUp();
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
125 yaffs_mount(mount_point);
308
ed8472f821be Add more tracing to tests
charles <charles>
parents: 307
diff changeset
126 printf("Mount complete\n");
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
127
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
128 if(do_upgrade && init_test){
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
129 simulate_power_failure = 0;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
130 NorStressTestInitialise(mount_point);
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
131 } else if(do_upgrade){
245
730c93f44f2f Improve test harness for yaffs2 mode
charles <charles>
parents: 240
diff changeset
132 printf("Running stress on %s with seed %d\n",mount_point,random_seed);
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
133 NorStressTestRun(mount_point,n_cycles,do_fsx);
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
134 } else if(do_fsx){
240
22b5cf141a53 More test fiddling
charles <charles>
parents: 237
diff changeset
135 yaffs_fsx_main(mount_point,n_cycles);
237
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
136 }else {
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
137 printf("No test to run!\n");
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
138 BadUsage();
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
139 }
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
140 yaffs_unmount(mount_point);
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
141
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
142 printf("Test run completed!\n");
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
143 }
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
144 else
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
145 BadUsage();
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
146 return 0;
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
147 }
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
148
4c30e3dfd5b7 Restructure tests
charles <charles>
parents:
diff changeset
149