1
2 DMAPI Function Verification Test Bucket
3
4 I. Test Bucket Introduction
5
6 This test bucket tests the interfaces and events defined in the CAE
7 Specification entitled "Systems Management: Data Storage Management (XDSM)
8 API," which was copyrighted in February, 1997 by The Open Group. The test
9 bucket consists of 20 executables containing 1097 variations which test 59 of
10 67 published DMAPIs and all JFS-supported events except DM_EVENT_NOSPACE on a
11 functional level.
12
13 II. Test Bucket Contents
14
15 These files provide the test harness:
16
17 dm_test.h : Defines macros and constants common to all DMAPI test cases;
18 some of the constants may be platform-dependent and should be
19 reviewed prior to running the test bucket on a new platform
20 dm_vars.h : Defines variation number bases for all DMAPI test cases;
21 theoretically these could all be zero, but the author
22 believes that giving every variation a unique number makes
23 it much easier when discussing successes/failures
24 dm_impl.h : Define implementation-dependent functions and variables
25 common to all DMAPI test cases; these must be modified prior
26 to running the test bucket on a new platform (note: although
27 this is a .h file, it is really a .c file that is included by
28 dm_test.c and is separated to make it easier to port to new
29 platforms)
30 dm_test.c : Define functions and variables common to all DMAPI test cases
31
32 These files provide the test scenarios:
33
34 attr.c : Tests dm_set_dmattr, dm_get_dmattr, dm_remove_dmattr,
35 dm_getall_dmattr, dm_set_fileattr, dm_get_fileattr,
36 dm_get_dirattrs, dm_set_inherit, dm_clear_inherit and
37 dm_getall_inherit
38 config.c : Tests dm_get_config
39 disp.c : Tests dm_get_config_events, dm_set_disp, dm_getall_disp,
40 dm_set_eventlist and dm_get_eventlist
41 event.c : Tests dm_get_events, dm_respond_event, dm_move_event and
42 dm_pending
43 event_am.c : Tests DM_EVENT_ATTRIBUTE, DM_EVENT_CLOSE, DM_EVENT_DESTROY
44 and dm_set_return_on_destroy
45 event_an.c : Tests DM_EVENT_POSTCREATE, DM_EVENT_POSTREMOVE,
46 DM_EVENT_POSTRENAME, DM_EVENT_POSTSYMLINK and
47 DM_EVENT_POSTLINK
48 event_sd.c : Tests DM_EVENT_READ, DM_EVENT_WRITE and DM_EVENT_TRUNCATE
49 event_sn.c : Tests DM_EVENT_CREATE, DM_EVENT_REMOVE, DM_EVENT_RENAME,
50 DM_EVENT_SYMLINK and DM_EVENT_LINK
51 event_us.c : Tests DM_EVENT_USER, dm_create_userevent, dm_send_msg and
52 dm_find_eventmsg
53 handle.c : Tests dm_path_to_handle, dm_fd_to_handle,
54 dm_path_to_fshandle, dm_handle_to_fshandle, dm_handle_cmp,
55 dm_handle_free, dm_handle_is_valid, dm_handle_hash,
56 dm_handle_to_fsid, dm_handle_to_igen, dm_handle_to_ino,
57 dm_make_handle, dm_make_fshandle, dm_handle_to_path and
58 dm_sync_by_handle
59 hole.c : Tests dm_get_allocinfo, dm_probe_hole and dm_punch_hole
60 invis.c : Tests dm_read_invis and dm_write_invis
61 mmap.c : Tests DM_EVENT_READ and DM_EVENT_WRITE
62 mmapfile.c : Helper for mmap, invokes mmap() from a different process
63 mount.c : Tests dm_get_mountinfo
64 objref.c : Tests dm_obj_ref_hold, dm_obj_ref_rele and dm_obj_ref_query
65 pmr_pre.c : Tests dm_set_region
66 pmr_post.c : Tests dm_get_region
67 right.c : Tests dm_request_right, dm_release_right, dm_query_right,
68 dm_upgrade_right and dm_downgrade_right
69 session.c : Tests dm_create_session, dm_destroy_session,
70 dm_getall_sessions and dm_query_session
71 token.c : Tests dm_getall_tokens
72
73 These scripts execute the test scenarios:
74
75 runtest_off.sh : Executes test scenarios that must be run off the DM-enabled
76 file system (any directory is fine)
77 runtest_on.sh : Executes test scenarios that must be run from the root
78 directory of the DM-enabled file system
79
80 Other file(s):
81
82 README : You're looking at it
83 Makefile : Builds the test harness and scenario; the platform must be
84 defined (i.e. JFS) to build the proper stuff in dm_impl.c,
85 and other constants as necessary to build the proper support
86 (i.e. MULTIPLE_REGIONS)
87
88 III. Test Bucket Omissions
89
90 This test bucket does not test the following DMAPIs because they are not
91 supported by the originating platform (JFS):
92
93 dm_create_by_handle
94 dm_get_bulkall
95 dm_get_bulkattr
96 dm_mkdir_by_handle
97 dm_symlink_by_handle
98
99 This test bucket does not fully test the following DMAPIs because they are not
100 fully supported by the originating platform (JFS); in other words, these tests
101 will probably need further variations to fully test their functionality as the
102 current variations only test the skeleton support provided by JFS:
103
104 dm_clear_inherit
105 dm_downgrade_right
106 dm_getall_inherit
107 dm_query_right
108 dm_release_right
109 dm_request_right
110 dm_set_inherit
111 dm_upgrade_right
112
113 IV. Test Bucket Execution
114
115 To run this test bucket against a DMAPI-enabled partition, make sure the
116 DMAPI implementation (kernel and user space code) is installed on the system
117 (see Implementation-dependent Notes below) and follow these steps:
118
119 1) Untar the tarball in a directory NOT on a DMAPI-enabled partition:
120
121 tar -xvf dm_test.tar
122
123 2) Make the test bucket:
124
125 make
126
127 NOTE: Modify dmapi_lib in Makefile to point to the user space
128 library for the DMAPI implementation to be tested
129
130 3) If the file system is compiled as a module, make sure it is
131 installed first:
132
133 modprobe blah
134
135 4) Run the test cases that require NOT being on a DMAPI-enabled
136 partition:
137
138 ./runtest_off.sh
139
140 5) Check the results of these test cases:
141
142 grep status *.log
143
144 6) Mount the DMAPI-enabled partition:
145
146 mount -t blah -o blah /dev/hdablah /dmapidir
147
148 7) Copy the test bucket to the root of the DMAPI-enabled partition:
149
150 cp * /dmapidir
151
152 8) Make the root of the DMAPI-enabled partition the current directory:
153
154 cd /dmapidir
155
156 9) Remove the copies of the log files just generated:
157
158 rm -f *.log
159
160 10) Run the test cases that require being on a DMAPI-enabled partition:
161
162 ./runtest_on.sh
163
164 11) Check the results of these test cases:
165
166 grep status *.log
167
168 V. Test Case Format
169
170 The general format of a test case using the supplied test harness should be:
171
172 if (DMVAR_EXEC(variation number)) {
173 set up variation;
174 if (set up variation failed)
175 DMVAR_SKIP();
176 else {
177 execute variation;
178 if (variation successful)
179 DMVAR_PASS();
180 else
181 DMVAR_FAIL();
182 clean up variation;
183 }
184 }
185
186 VI. Test Case Options
187
188 Following this format will allow the tester to be able to run a variation
189 individually as the variation both initializes and terminates itself. Current
190 options supported by the test harness are:
191
192 -runfrom n : Defines the starting variation to begin executing from; sets
193 a variation range to execute when used along with -runto, or
194 runs all variations greater than or equal to n if -runto is
195 not specified
196 -runto n : Defines the stopping variation to end executing at; sets
197 a variation range to execute when used along with -runfrom,
198 or runs all variations less than or equal to n if -runfrom is
199 not specified
200 -runonly n : Executes only variation n
201 -loglevel n : Write all messages less than or equal to n to the log file
202 -termlevel n : Write all messages less than or equal to n to the terminal
203 -logname s : Write all messages defined by -loglevel to the log file named
204 s; if not defined, the default log file name is dm_logfile
205
206 Options and corresponding option values MUST be separated by whitespace. Any
207 unrecognized option (that is, one starting with a dash such as -devname) and
208 its option value can be obtained by using the DMOPT_GET macro (such as
209 DMOPT_GET("devname")).
210
211 VII. Test Case Output
212
213 Each line of output generated by the DMLOG_PRINT macro is prefixed with:
214
215 [prog pid level]
216
217 where:
218 prog is the name of the test program
219 pid is the decimal process identifier
220 level is the decimal logging level
221
222 VIII. Test Case Notes
223
224 The test bucket contains several multithreaded test cases where one thread is
225 responsible for generating DMAPI events while the other is responsible for
226 receiving said events and communicating back to the generating thread what was
227 or was not received. At first semaphores were used to control thread execution
228 but this lead to several deadlocks when expected events did not arrive, so
229 delays (EVENT_DELIVERY_DELAY macro) were used. This could lead to timing
230 issues on some platforms, so if a variation fails make sure to check the log
231 to see if the event arrived after the generating thread checked for its
232 arrival.
233
234 IX. Implementation-dependent Notes
235
236 1) JFS
237 a) Instructions for installing DMAPI for IBM JFS can be found at
238 http://oss.software.ibm.com/jfs/.
239 b) The test case and user space library must match the architecture
240 of the kernel. In other words, the test case and library must be
241 compiled as 32-bit if running on a 32-bit kernel, and must be compiled
242 as 64-bit if running on a 64-bit kernel. Currently, JFS DMAPI does
243 not support a 32-bit DM app running on a 64-bit kernel.
244