|
1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of the License "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // f32test\bench\t_fsrdel.cpp |
|
15 // |
|
16 // |
|
17 |
|
18 |
|
19 #include <f32file.h> |
|
20 #include <e32test.h> |
|
21 #include "t_benchmain.h" |
|
22 |
|
23 GLDEF_D RTest test(_L("File Server Benchmarks, deletion of a massive amount of files")); |
|
24 |
|
25 //---------------------------------------------------------------------------------------------- |
|
26 //! @SYMTestCaseID PBASE-T_FSRDEL-0272 |
|
27 //! @SYMTestType CIT |
|
28 //! @SYMPREQ PREQ000 |
|
29 //! @SYMTestCaseDesc This test case is measuring performance of the FAT implementation. |
|
30 //! @SYMTestActions 0. Expects the files to exist in order to successful execution |
|
31 //! 1. Time the deletion of a file from each directory with RFs::Delete |
|
32 //! 2. Time the deletion of a file from each directory with CFileMan::Delete |
|
33 //! 3. Time the deletion of all the files from each directory |
|
34 //! with RFs::Delete |
|
35 //! 4. Time the deletion of all the files from each directory with |
|
36 //! CFileMan::Delete (wildcard F*.*) |
|
37 //! 5. Time the deletion of a file from each directory with RFs::Delete |
|
38 //! with two clients accessing the directory |
|
39 //! 6. Time the deletion of a file from each directory with CFileMan::Delete |
|
40 //! with two clients accessing the directory |
|
41 //! 7. Time the deletion of all the files from each directory with RFs::Delete |
|
42 //! with two clients accessing the directory |
|
43 //! 8. Time the deletion of all the files from each directory with |
|
44 //! CFileMan::Delete with two clients accessing the directory (wildcard F*.*) |
|
45 //! 9. Time the deletion of a file from each directory with RFs::Delete |
|
46 //! with two clients accessing different directories |
|
47 //! 10. Time the deletion of a file from each directory with CFileMan::Delete |
|
48 //! with two clients accessing different directories |
|
49 //! 11. Time the deletion of all the files from each directory with RFs::Delete |
|
50 //! with two clients accessing different directories |
|
51 //! 12. Time the deletion of all the files from each directory with |
|
52 //! CFileMan::Delete with two clients accessing different directories (wildcard F*.*) |
|
53 //! @SYMTestExpectedResults Finishes if the system behaves as expected, panics otherwise |
|
54 //! @SYMTestPriority High |
|
55 //! @SYMTestStatus Implemented |
|
56 //---------------------------------------------------------------------------------------------- |
|
57 |
|
58 LOCAL_D RSemaphore client,write_screen; |
|
59 LOCAL_D const TInt KHeapSize=0x4000; |
|
60 LOCAL_D TBuf8<4096> buf; |
|
61 LOCAL_D TDriveList gDriveList; |
|
62 |
|
63 // Concurrent thread varibles |
|
64 RThread gSpeedy; |
|
65 RThread gSpeedyII; |
|
66 TInt gT1; |
|
67 TInt gT2; |
|
68 LOCAL_D TFileName gDelEntryDir; |
|
69 LOCAL_D TFileName gDelEntryDir2; |
|
70 LOCAL_D TInt ThreadCount=0; |
|
71 TBool gWriting = EFalse; |
|
72 |
|
73 TBool gKillMe=EFalse; |
|
74 |
|
75 _LIT(KDeleteMe,"delete%d.me"); |
|
76 _LIT(KDeleteMe2,"blabla%d.rhd"); |
|
77 |
|
78 |
|
79 /** Send content through the RDebug for trgtest |
|
80 not to hung, when the test is not writing |
|
81 |
|
82 */ |
|
83 LOCAL_C TInt noise(TAny* ) |
|
84 { |
|
85 FOREVER |
|
86 { |
|
87 User::After(2147483647); // max value, 35 minutes, 47 seconds |
|
88 if(!gWriting) |
|
89 RDebug::Print(_L(".")); |
|
90 } |
|
91 } |
|
92 |
|
93 /** Create background noise by deleting/creating file in gDelEntryDir2 directory |
|
94 |
|
95 */ |
|
96 LOCAL_C TInt DeleteEntryAccess2(TAny* ) |
|
97 { |
|
98 RFs fs; |
|
99 TInt r = 0; |
|
100 TBuf<100> dirfile; |
|
101 TBuf<50> filename; |
|
102 RFile file; |
|
103 RTest test(_L("test 2")); |
|
104 |
|
105 // Not checking error state until main thread has been signalled, to avoid deadlock |
|
106 fs.Connect(); |
|
107 r = fs.SetSessionPath(gSessionPath); |
|
108 |
|
109 filename.Format(KDeleteMe2,gT2); |
|
110 |
|
111 dirfile = gDelEntryDir2; |
|
112 dirfile.Append(filename); |
|
113 |
|
114 client.Signal(); |
|
115 FailIfError(r); |
|
116 |
|
117 FOREVER |
|
118 { |
|
119 if(!gKillMe) |
|
120 { |
|
121 r = file.Create(fs, dirfile, EFileShareAny|EFileWrite); |
|
122 if(r == KErrAlreadyExists) |
|
123 r = file.Open(fs, dirfile, EFileShareAny|EFileWrite); |
|
124 file.Close(); |
|
125 FailIfError(r); |
|
126 |
|
127 r = fs.Delete(dirfile); |
|
128 if((r != KErrNone) && (r != KErrInUse)) |
|
129 FailIfError(r); |
|
130 } |
|
131 } |
|
132 } |
|
133 |
|
134 /** Create background noise by deleting/creating file in gDelEntryDir directory |
|
135 |
|
136 */ |
|
137 LOCAL_C TInt DeleteEntryAccess(TAny*) |
|
138 { |
|
139 RFs fs2; |
|
140 TInt r = 0; |
|
141 TBuf<100> dirfile; |
|
142 TBuf<50> filename; |
|
143 RFile file2; |
|
144 RTest test(_L("test 2")); |
|
145 |
|
146 // Not checking error state until main thread has been signalled, to avoid deadlock |
|
147 fs2.Connect(); |
|
148 r = fs2.SetSessionPath(gSessionPath); |
|
149 |
|
150 filename.Format(KDeleteMe,gT1); |
|
151 |
|
152 dirfile = gDelEntryDir; |
|
153 dirfile.Append(filename); |
|
154 |
|
155 client.Signal(); |
|
156 FailIfError(r); |
|
157 |
|
158 FOREVER |
|
159 { |
|
160 if(!gKillMe) |
|
161 { |
|
162 r = file2.Create(fs2, dirfile, EFileShareAny|EFileWrite); |
|
163 if(r == KErrAlreadyExists) |
|
164 r = file2.Open(fs2, dirfile, EFileShareAny|EFileWrite); |
|
165 file2.Close(); |
|
166 FailIfError(r); |
|
167 r = fs2.Delete(dirfile); |
|
168 if((r != KErrNone) && (r != KErrInUse)) |
|
169 FailIfError(r); |
|
170 } |
|
171 } |
|
172 } |
|
173 |
|
174 /** Starts a concurrent client session in different directories |
|
175 |
|
176 */ |
|
177 LOCAL_C void DoTest(TThreadFunction aFunction) |
|
178 { |
|
179 gKillMe = EFalse; |
|
180 |
|
181 TBuf<20> buffer = _L("Speedy"); |
|
182 buffer.AppendNum(ThreadCount++); |
|
183 gT1 = ThreadCount; |
|
184 TInt r = gSpeedy.Create(buffer, aFunction, KDefaultStackSize, KHeapSize, KHeapSize, NULL); |
|
185 FailIfError(r); |
|
186 |
|
187 buffer = _L("Speedy"); |
|
188 buffer.AppendNum(ThreadCount++); |
|
189 gT2=ThreadCount; |
|
190 r = gSpeedyII.Create(buffer, DeleteEntryAccess2, KDefaultStackSize, KHeapSize, KHeapSize, NULL); |
|
191 FailIfError(r); |
|
192 |
|
193 gSpeedy.SetPriority(EPriorityLess); |
|
194 gSpeedyII.SetPriority(EPriorityLess); |
|
195 |
|
196 gSpeedy.Resume(); |
|
197 gSpeedyII.Resume(); |
|
198 |
|
199 client.Wait(); |
|
200 client.Wait(); |
|
201 } |
|
202 |
|
203 /** Kills the concurrent sessions |
|
204 |
|
205 */ |
|
206 LOCAL_C void DoTestKill() |
|
207 { |
|
208 gKillMe = ETrue; |
|
209 User::After(10000000); |
|
210 |
|
211 gSpeedy.Kill(KErrNone); |
|
212 gSpeedy.Close(); |
|
213 |
|
214 gSpeedyII.Kill(KErrNone); |
|
215 gSpeedyII.Close(); |
|
216 } |
|
217 |
|
218 /** Creates again the last.txt file in each directory that is being used |
|
219 |
|
220 */ |
|
221 LOCAL_C void ReCreateLast() |
|
222 { |
|
223 TInt i = 1, r = 0; |
|
224 RFile file; |
|
225 TBuf16<50> dirtemp; |
|
226 |
|
227 TBuf16<50> path; |
|
228 TBuf8<1024> dummy(1024); |
|
229 |
|
230 |
|
231 while(i <= gTypes) |
|
232 { |
|
233 path = gSessionPath; |
|
234 dirtemp.Format(KDirMultipleName, i, 100); |
|
235 path.Append(dirtemp); |
|
236 path.Append(KCommonFile); |
|
237 r = file.Create(TheFs, path, EFileShareAny|EFileWrite); |
|
238 if(r == KErrAlreadyExists) |
|
239 { |
|
240 r = file.Open(TheFs, path, EFileShareAny|EFileWrite); |
|
241 FailIfError(r); |
|
242 } |
|
243 r = file.Write(dummy); |
|
244 FailIfError(r); |
|
245 file.Close(); |
|
246 i++; |
|
247 } |
|
248 |
|
249 if(gFilesLimit >= 1000) |
|
250 { |
|
251 i = 1; |
|
252 while(i <= gTypes) |
|
253 { |
|
254 path = gSessionPath; |
|
255 dirtemp.Format(KDirMultipleName, i, 1000); |
|
256 path.Append(dirtemp); |
|
257 path.Append(KCommonFile); |
|
258 r = file.Create(TheFs, path, EFileShareAny|EFileWrite); |
|
259 if(r == KErrAlreadyExists) |
|
260 { |
|
261 r = file.Open(TheFs, path, EFileShareAny|EFileWrite); |
|
262 FailIfError(r); |
|
263 } |
|
264 r = file.Write(dummy); |
|
265 FailIfError(r); |
|
266 file.Close(); |
|
267 i++; |
|
268 } |
|
269 } |
|
270 |
|
271 if(gFilesLimit >= 5000) |
|
272 { |
|
273 i = 1; |
|
274 while(i <= gTypes) |
|
275 { |
|
276 path = gSessionPath; |
|
277 dirtemp.Format(KDirMultipleName, i, 5000); |
|
278 path.Append(dirtemp); |
|
279 path.Append(KCommonFile); |
|
280 r = file.Create(TheFs, path, EFileShareAny|EFileWrite); |
|
281 if(r == KErrAlreadyExists) |
|
282 { |
|
283 r = file.Open(TheFs, path, EFileShareAny|EFileWrite); |
|
284 FailIfError(r); |
|
285 } |
|
286 r = file.Write(dummy); |
|
287 FailIfError(r); |
|
288 file.Close(); |
|
289 i++; |
|
290 } |
|
291 } |
|
292 if(gFilesLimit >= 10000) |
|
293 { |
|
294 i = 1; |
|
295 while(i <= gTypes) |
|
296 { |
|
297 path = gSessionPath; |
|
298 dirtemp.Format(KDirMultipleName, i, 10000); |
|
299 path.Append(dirtemp); |
|
300 path.Append(KCommonFile); |
|
301 r = file.Create(TheFs, path, EFileShareAny|EFileWrite); |
|
302 if(r ==KErrAlreadyExists) |
|
303 { |
|
304 r = file.Open(TheFs, path, EFileShareAny|EFileWrite); |
|
305 FailIfError(r); |
|
306 } |
|
307 r = file.Write(dummy); |
|
308 FailIfError(r); |
|
309 file.Close(); |
|
310 i++; |
|
311 } |
|
312 } |
|
313 } |
|
314 |
|
315 /** Deletes all files in a given directory one by one |
|
316 |
|
317 @param aN Number of files in the directory |
|
318 @param aStep Test step |
|
319 */ |
|
320 LOCAL_C TInt DelAllFiles1(TInt aN, TInt aStep) |
|
321 { |
|
322 TInt i = 0, r = 0; |
|
323 TBuf16<50> directory; |
|
324 TBuf16<50> dirtemp; |
|
325 |
|
326 TBuf16<50> path; |
|
327 TBuf16<50> buffer(50); |
|
328 |
|
329 _LIT(KMsg, "This file caused a problem: %S\n"); |
|
330 |
|
331 TTime startTime; |
|
332 TTime endTime; |
|
333 TTimeIntervalMicroSeconds timeTaken(0); |
|
334 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
335 |
|
336 if(aN <= gFilesLimit) |
|
337 { |
|
338 if(gTypes >= 1) |
|
339 { |
|
340 // all 8.3 |
|
341 directory = gSessionPath; |
|
342 dirtemp.Format(KDirMultipleName, 1, aN); |
|
343 directory.Append(dirtemp); |
|
344 |
|
345 i = 0; |
|
346 startTime.HomeTime(); |
|
347 while(i < aN) |
|
348 { |
|
349 FileNamesGeneration(buffer, 8, i, i%3+1) ; |
|
350 path = directory; |
|
351 path.Append(buffer); |
|
352 r = TheFs.Delete(path); |
|
353 if(r != KErrNone) |
|
354 { |
|
355 TBuf16<250> msg; |
|
356 msg.Format(KMsg, &path); |
|
357 test.Printf(msg); |
|
358 FailIfError(r); |
|
359 } |
|
360 i++; |
|
361 } |
|
362 endTime.HomeTime(); |
|
363 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
364 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
365 } |
|
366 |
|
367 if(gTypes >= 2) |
|
368 { |
|
369 // all 20.3 chars |
|
370 dirtemp.Format(KDirMultipleName, 2, aN); |
|
371 directory = gSessionPath; |
|
372 directory.Append(dirtemp); |
|
373 |
|
374 i = 0; |
|
375 startTime.HomeTime(); |
|
376 while(i < aN) |
|
377 { |
|
378 FileNamesGeneration(buffer, 20, i, i%3+1) ; |
|
379 path = directory; |
|
380 path.Append(buffer); |
|
381 r = TheFs.Delete(path); |
|
382 if(r != KErrNone) |
|
383 { |
|
384 TBuf16<250> msg; |
|
385 msg.Format(KMsg, &path); |
|
386 test.Printf(msg); |
|
387 FailIfError(r); |
|
388 } |
|
389 i++; |
|
390 } |
|
391 endTime.HomeTime(); |
|
392 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
393 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
394 } |
|
395 |
|
396 if(gTypes >= 3) |
|
397 { |
|
398 // 50/50 |
|
399 dirtemp.Format(KDirMultipleName, 3, aN); |
|
400 directory = gSessionPath; |
|
401 directory.Append(dirtemp); |
|
402 i = 0; |
|
403 startTime.HomeTime(); |
|
404 while(i < aN) |
|
405 { |
|
406 if(1 == (i % 2)) FileNamesGeneration(buffer, 8, i, i%3+1) ; |
|
407 else FileNamesGeneration(buffer, 20, i, i%3+1) ; |
|
408 |
|
409 path = directory; |
|
410 path.Append(buffer); |
|
411 r = TheFs.Delete(path); |
|
412 if(r != KErrNone) |
|
413 { |
|
414 TBuf16<250> msg; |
|
415 msg.Format(KMsg, &path); |
|
416 test.Printf(msg); |
|
417 FailIfError(r); |
|
418 } |
|
419 i++; |
|
420 } |
|
421 endTime.HomeTime(); |
|
422 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
423 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit); |
|
424 } |
|
425 } |
|
426 |
|
427 gWriting = ETrue; User::After(1000000); |
|
428 PrintResult(aStep, 1, aN); |
|
429 PrintResultTime(aStep, 2, timeTaken1); |
|
430 PrintResultTime(aStep, 3, timeTaken2); |
|
431 PrintResultTime(aStep, 4, timeTaken3); |
|
432 gWriting = EFalse; |
|
433 |
|
434 return(KErrNone); |
|
435 } |
|
436 |
|
437 /** Deletes all files in a given directory using wildcards |
|
438 |
|
439 @param aN Number of files in the directory |
|
440 @param aStep Test step |
|
441 */ |
|
442 LOCAL_C TInt DelAllFiles2(TInt aN, TInt aStep) |
|
443 { |
|
444 TInt r = 0; |
|
445 |
|
446 TBuf16<50> directory; |
|
447 TBuf16<50> dirtemp; |
|
448 |
|
449 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
450 TTime startTime; |
|
451 TTime endTime; |
|
452 TTimeIntervalMicroSeconds timeTaken(0); |
|
453 CFileMan* fMan=CFileMan::NewL(TheFs); |
|
454 |
|
455 |
|
456 if(aN <= gFilesLimit) |
|
457 { |
|
458 if(gTypes >= 1) |
|
459 { |
|
460 // all 8.3 |
|
461 dirtemp.Format(KDirMultipleName, 1, aN); |
|
462 directory = gSessionPath; |
|
463 directory.Append(dirtemp); |
|
464 |
|
465 startTime.HomeTime(); |
|
466 directory.Append(_L("F*.*")); |
|
467 |
|
468 r = fMan->Delete(directory); |
|
469 FailIfError(r); |
|
470 |
|
471 endTime.HomeTime(); |
|
472 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
473 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
474 } |
|
475 if(gTypes >= 2) |
|
476 { |
|
477 // all 20.3 chars |
|
478 dirtemp.Format(KDirMultipleName, 2, aN); |
|
479 directory = gSessionPath; |
|
480 directory.Append(dirtemp); |
|
481 |
|
482 startTime.HomeTime(); |
|
483 directory.Append(_L("F*.*")); |
|
484 r = fMan->Delete(directory); |
|
485 FailIfError(r); |
|
486 |
|
487 endTime.HomeTime(); |
|
488 |
|
489 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
490 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
491 } |
|
492 |
|
493 if(gTypes >= 3) |
|
494 { |
|
495 // 50/50 |
|
496 dirtemp.Format(KDirMultipleName,3, aN); |
|
497 directory = gSessionPath; |
|
498 directory.Append(dirtemp); |
|
499 |
|
500 startTime.HomeTime(); |
|
501 directory.Append(_L("F*.*")); |
|
502 r = fMan->Delete(directory); |
|
503 FailIfError(r); |
|
504 |
|
505 endTime.HomeTime(); |
|
506 |
|
507 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
508 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
509 } |
|
510 } |
|
511 delete fMan; |
|
512 |
|
513 gWriting = ETrue; User::After(1000000); |
|
514 PrintResult(aStep, 1, aN); |
|
515 PrintResultTime(aStep, 2, timeTaken1); |
|
516 PrintResultTime(aStep, 3, timeTaken2); |
|
517 PrintResultTime(aStep, 4, timeTaken3); |
|
518 gWriting = EFalse; |
|
519 |
|
520 return(KErrNone); |
|
521 } |
|
522 |
|
523 /** Delete last.txt with two threads accessing the current directory and |
|
524 creating/deleting a file with RFs::Delete |
|
525 |
|
526 @param aN Number of files in the directory |
|
527 @param aStep Test step |
|
528 */ |
|
529 LOCAL_C void DelFileM1(TInt aN, TInt aStep) |
|
530 { |
|
531 TBuf16<100> dir1; |
|
532 TBuf16<100> dir2; |
|
533 TBuf16<100> dir3; |
|
534 TBuf16<100> dir4; |
|
535 |
|
536 TInt r = 0; |
|
537 TTime startTime; |
|
538 TTime endTime; |
|
539 TTimeIntervalMicroSeconds timeTaken(0); |
|
540 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
541 |
|
542 dir1 = gSessionPath; |
|
543 dir2 = gSessionPath; |
|
544 dir3 = gSessionPath; |
|
545 |
|
546 dir4.Format(KDirMultipleName, 1, aN); |
|
547 dir1.Append(dir4); |
|
548 dir4.Format(KDirMultipleName, 2, aN); |
|
549 dir2.Append(dir4); |
|
550 dir4.Format(KDirMultipleName, 3, aN); |
|
551 dir3.Append(dir4); |
|
552 |
|
553 if(aN <= gFilesLimit) |
|
554 { |
|
555 if(gTypes >= 1) |
|
556 { |
|
557 gDelEntryDir = dir1; |
|
558 gDelEntryDir2 = dir1; |
|
559 dir1.Append(KCommonFile); |
|
560 |
|
561 DoTest(DeleteEntryAccess); |
|
562 |
|
563 startTime.HomeTime(); |
|
564 |
|
565 r = TheFs.Delete(dir1); |
|
566 FailIfError(r); |
|
567 |
|
568 endTime.HomeTime(); |
|
569 |
|
570 DoTestKill(); |
|
571 |
|
572 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
573 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
574 } |
|
575 |
|
576 if(gTypes >= 2) |
|
577 { |
|
578 gDelEntryDir = dir2; |
|
579 gDelEntryDir2 = dir2; |
|
580 |
|
581 dir2.Append(KCommonFile); |
|
582 |
|
583 DoTest(DeleteEntryAccess); |
|
584 |
|
585 startTime.HomeTime(); |
|
586 |
|
587 r = TheFs.Delete(dir2); |
|
588 FailIfError(r); |
|
589 |
|
590 endTime.HomeTime(); |
|
591 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
592 |
|
593 DoTestKill(); |
|
594 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
595 } |
|
596 |
|
597 if(gTypes >= 3) |
|
598 { |
|
599 gDelEntryDir = dir3; |
|
600 gDelEntryDir2 = dir3; |
|
601 |
|
602 dir3.Append(KCommonFile); |
|
603 |
|
604 |
|
605 DoTest(DeleteEntryAccess); |
|
606 |
|
607 startTime.HomeTime(); |
|
608 |
|
609 r = TheFs.Delete(dir3); |
|
610 FailIfError(r); |
|
611 |
|
612 endTime.HomeTime(); |
|
613 DoTestKill(); |
|
614 |
|
615 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
616 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
617 } |
|
618 } |
|
619 |
|
620 gWriting = ETrue; User::After(1000000); |
|
621 PrintResult(aStep, 1, aN); |
|
622 PrintResultTime(aStep, 2, timeTaken1); |
|
623 PrintResultTime(aStep, 3, timeTaken2); |
|
624 PrintResultTime(aStep, 4, timeTaken3); |
|
625 gWriting = EFalse; |
|
626 } |
|
627 |
|
628 /** Delete last.txt by opening it and with two threads accessing the current |
|
629 directory and creating/deleting a file with CFileMan::Delete |
|
630 |
|
631 @param aN Number of files in the directory |
|
632 @param aStep Test step |
|
633 */ |
|
634 LOCAL_C void DelFileM2(TInt aN, TInt aStep) |
|
635 { |
|
636 TBuf16<100> dir1; |
|
637 TBuf16<100> dir2; |
|
638 TBuf16<100> dir3; |
|
639 TBuf16<100> dir4; |
|
640 |
|
641 TInt r = 0; |
|
642 TTime startTime; |
|
643 TTime endTime; |
|
644 TTimeIntervalMicroSeconds timeTaken(0); |
|
645 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
646 |
|
647 CFileMan* fMan = CFileMan::NewL(TheFs); |
|
648 |
|
649 dir1 = gSessionPath; |
|
650 dir2 = gSessionPath; |
|
651 dir3 = gSessionPath; |
|
652 |
|
653 dir4.Format(KDirMultipleName, 1, aN); |
|
654 dir1.Append(dir4); |
|
655 dir4.Format(KDirMultipleName, 2, aN); |
|
656 dir2.Append(dir4); |
|
657 dir4.Format(KDirMultipleName, 3, aN); |
|
658 dir3.Append(dir4); |
|
659 |
|
660 if(aN <= gFilesLimit) |
|
661 { |
|
662 if(gTypes >= 1) |
|
663 { |
|
664 gDelEntryDir = dir1; |
|
665 gDelEntryDir2 = dir1; |
|
666 |
|
667 dir1.Append(KCommonFile); |
|
668 |
|
669 DoTest(DeleteEntryAccess); |
|
670 |
|
671 startTime.HomeTime(); |
|
672 |
|
673 r = fMan->Delete(dir1); |
|
674 FailIfError(r); |
|
675 |
|
676 endTime.HomeTime(); |
|
677 DoTestKill(); |
|
678 |
|
679 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
680 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
681 } |
|
682 |
|
683 if(gTypes >= 2) |
|
684 { |
|
685 gDelEntryDir = dir2; |
|
686 gDelEntryDir2 = dir2; |
|
687 |
|
688 dir2.Append(KCommonFile); |
|
689 |
|
690 DoTest(DeleteEntryAccess); |
|
691 |
|
692 startTime.HomeTime(); |
|
693 |
|
694 r = fMan->Delete(dir2); |
|
695 FailIfError(r); |
|
696 |
|
697 endTime.HomeTime(); |
|
698 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
699 DoTestKill(); |
|
700 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
701 } |
|
702 |
|
703 if(gTypes >= 3) |
|
704 { |
|
705 gDelEntryDir = dir3; |
|
706 gDelEntryDir2 = dir3; |
|
707 dir3.Append(KCommonFile); |
|
708 |
|
709 |
|
710 DoTest(DeleteEntryAccess); |
|
711 |
|
712 startTime.HomeTime(); |
|
713 |
|
714 r = fMan->Delete(dir3); |
|
715 FailIfError(r); |
|
716 |
|
717 endTime.HomeTime(); |
|
718 DoTestKill(); |
|
719 |
|
720 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
721 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
722 } |
|
723 } |
|
724 delete fMan; |
|
725 |
|
726 gWriting = ETrue; User::After(1000000); |
|
727 PrintResult(aStep, 1, aN); |
|
728 PrintResultTime(aStep, 2, timeTaken1); |
|
729 PrintResultTime(aStep, 3, timeTaken2); |
|
730 PrintResultTime(aStep, 4, timeTaken3); |
|
731 gWriting = EFalse; |
|
732 |
|
733 } |
|
734 |
|
735 /** Delete all files with two threads accessing the current directory and creating/deleting a file |
|
736 with RFs::Delete |
|
737 |
|
738 @param aN Number of files in the directory |
|
739 @param aStep Test step |
|
740 */ |
|
741 LOCAL_C void DelAllM1(TInt aN, TInt aStep) |
|
742 { |
|
743 TInt i = 0, r = 0; |
|
744 |
|
745 TBuf16<50> directory; |
|
746 TBuf16<50> dirtemp; |
|
747 |
|
748 TBuf16<50> path; |
|
749 TBuf16<50> buffer(50); |
|
750 |
|
751 TTime startTime; |
|
752 TTime endTime; |
|
753 TTimeIntervalMicroSeconds timeTaken(0); |
|
754 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
755 |
|
756 if(aN <= gFilesLimit) |
|
757 { |
|
758 // Start the noise in the background |
|
759 gDelEntryDir = directory; |
|
760 gDelEntryDir2 = directory; |
|
761 DoTest(DeleteEntryAccess); |
|
762 |
|
763 if(gTypes >= 1) |
|
764 { |
|
765 // all 8.3 |
|
766 dirtemp.Format(KDirMultipleName, 1, aN); |
|
767 directory = gSessionPath; |
|
768 directory.Append(dirtemp); |
|
769 |
|
770 i = 0; |
|
771 |
|
772 startTime.HomeTime(); |
|
773 while(i < aN) |
|
774 { |
|
775 FileNamesGeneration(buffer, 8, i, i%3+1) ; |
|
776 path = directory; |
|
777 path.Append(buffer); |
|
778 r = TheFs.Delete(path); |
|
779 FailIfError(r); |
|
780 i++; |
|
781 } |
|
782 endTime.HomeTime(); |
|
783 |
|
784 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
785 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
786 } |
|
787 |
|
788 if(gTypes >= 2) |
|
789 { |
|
790 // all 20.3 chars |
|
791 dirtemp.Format(KDirMultipleName, 2, aN); |
|
792 directory = gSessionPath; |
|
793 directory.Append(dirtemp); |
|
794 |
|
795 i = 0; |
|
796 startTime.HomeTime(); |
|
797 while(i < aN) |
|
798 { |
|
799 FileNamesGeneration(buffer, 20, i, i%3+1) ; |
|
800 path = directory; |
|
801 path.Append(buffer); |
|
802 r = TheFs.Delete(path); |
|
803 FailIfError(r); |
|
804 i++; |
|
805 } |
|
806 endTime.HomeTime(); |
|
807 |
|
808 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
809 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
810 } |
|
811 |
|
812 if(gTypes >= 3) |
|
813 { |
|
814 // 50/50 |
|
815 dirtemp.Format(KDirMultipleName,3, aN); |
|
816 directory = gSessionPath; |
|
817 directory.Append(dirtemp); |
|
818 |
|
819 i = 0; |
|
820 startTime.HomeTime(); |
|
821 while(i < aN) |
|
822 { |
|
823 if(1 == (i % 2)) FileNamesGeneration(buffer, 8, i, i%3+1) ; |
|
824 else FileNamesGeneration(buffer, 20, i, i%3+1) ; |
|
825 |
|
826 path = directory; |
|
827 path.Append(buffer); |
|
828 r = TheFs.Delete(path); |
|
829 FailIfError(r); |
|
830 i++; |
|
831 } |
|
832 endTime.HomeTime(); |
|
833 |
|
834 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
835 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
836 } |
|
837 // Stop the noise in the background |
|
838 DoTestKill(); |
|
839 } |
|
840 |
|
841 gWriting = ETrue; User::After(1000000); |
|
842 PrintResult(aStep, 1, aN); |
|
843 PrintResultTime(aStep, 2, timeTaken1); |
|
844 PrintResultTime(aStep, 3, timeTaken2); |
|
845 PrintResultTime(aStep, 4, timeTaken3); |
|
846 gWriting = EFalse; |
|
847 } |
|
848 |
|
849 /** Delete all files with two threads accessing the same directory and creating/deleting a file |
|
850 with CFileMan::Delete |
|
851 |
|
852 @param aN Number of files in the directory |
|
853 @param aStep Test step |
|
854 */ |
|
855 LOCAL_C void DelAllM2(TInt aN, TInt aStep) |
|
856 { |
|
857 TInt r = 0; |
|
858 TBuf16<50> directory; |
|
859 TBuf16<50> dirtemp; |
|
860 |
|
861 TTime startTime; |
|
862 TTime endTime; |
|
863 TTimeIntervalMicroSeconds timeTaken(0); |
|
864 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
865 |
|
866 CFileMan* fMan = CFileMan::NewL(TheFs); |
|
867 |
|
868 if(aN <= gFilesLimit) |
|
869 { |
|
870 // Start the noise in the background |
|
871 gDelEntryDir = directory; |
|
872 gDelEntryDir2 = directory; |
|
873 DoTest(DeleteEntryAccess); |
|
874 |
|
875 if(gTypes >= 1) |
|
876 { |
|
877 // all 8.3 |
|
878 dirtemp.Format(KDirMultipleName, 1, aN); |
|
879 directory = gSessionPath; |
|
880 directory.Append(dirtemp); |
|
881 |
|
882 startTime.HomeTime(); |
|
883 directory.Append(_L("F*.*")); |
|
884 r = fMan->Delete(directory); |
|
885 FailIfError(r); |
|
886 |
|
887 endTime.HomeTime(); |
|
888 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
889 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
890 } |
|
891 |
|
892 if(gTypes >= 2) |
|
893 { |
|
894 // all 20.3 chars |
|
895 dirtemp.Format(KDirMultipleName, 2, aN); |
|
896 directory = gSessionPath; |
|
897 directory.Append(dirtemp); |
|
898 |
|
899 startTime.HomeTime(); |
|
900 directory.Append(_L("F*.*")); |
|
901 r = fMan->Delete(directory); |
|
902 FailIfError(r); |
|
903 endTime.HomeTime(); |
|
904 |
|
905 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
906 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
907 |
|
908 } |
|
909 if(gTypes >= 3) |
|
910 { |
|
911 // 50/50 |
|
912 dirtemp.Format(KDirMultipleName, 3, aN); |
|
913 directory = gSessionPath; |
|
914 directory.Append(dirtemp); |
|
915 |
|
916 startTime.HomeTime(); |
|
917 directory.Append(_L("F*.*")); |
|
918 r = fMan->Delete(directory); |
|
919 FailIfError(r); |
|
920 endTime.HomeTime(); |
|
921 |
|
922 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
923 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
924 } |
|
925 |
|
926 // Stop the noise in the background |
|
927 DoTestKill(); |
|
928 } |
|
929 |
|
930 delete fMan; |
|
931 |
|
932 gWriting = ETrue; User::After(1000000); |
|
933 PrintResult(aStep, 1, aN); |
|
934 PrintResultTime(aStep, 2, timeTaken1); |
|
935 PrintResultTime(aStep, 3, timeTaken2); |
|
936 PrintResultTime(aStep, 4, timeTaken3); |
|
937 gWriting = EFalse; |
|
938 } |
|
939 |
|
940 |
|
941 /** Delete last.txt file with two threads accessing different directories and |
|
942 creating/deleting a file in them |
|
943 |
|
944 @param aN Number of files in the directory |
|
945 @param aStep Test step |
|
946 */ |
|
947 LOCAL_C void DelFileMD1(TInt aN, TInt aStep) |
|
948 { |
|
949 TBuf16<100> dir1; |
|
950 TBuf16<100> dir2; |
|
951 TBuf16<100> dir3; |
|
952 TBuf16<100> dir4; |
|
953 TBuf16<100> temp; |
|
954 |
|
955 TInt r = 0; |
|
956 TTime startTime; |
|
957 TTime endTime; |
|
958 TTimeIntervalMicroSeconds timeTaken(0); |
|
959 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
960 |
|
961 |
|
962 dir1 = gSessionPath; |
|
963 dir2 = gSessionPath; |
|
964 dir3 = gSessionPath; |
|
965 |
|
966 dir4.Format(KDirMultipleName, 1, aN); |
|
967 dir1.Append(dir4); |
|
968 dir4.Format(KDirMultipleName, 2, aN); |
|
969 dir2.Append(dir4); |
|
970 dir4.Format(KDirMultipleName, 3, aN); |
|
971 dir3.Append(dir4); |
|
972 |
|
973 |
|
974 temp = gSessionPath; |
|
975 dir4.Format(KDirMultipleName, 3 ,300); |
|
976 temp.Append(dir4); |
|
977 |
|
978 if(aN <= gFilesLimit) |
|
979 { |
|
980 if(gTypes >= 1) |
|
981 { |
|
982 gDelEntryDir = dir1; |
|
983 gDelEntryDir2=temp; |
|
984 dir1.Append(KCommonFile); |
|
985 |
|
986 DoTest(DeleteEntryAccess); |
|
987 |
|
988 startTime.HomeTime(); |
|
989 |
|
990 r = TheFs.Delete(dir1); |
|
991 FailIfError(r); |
|
992 |
|
993 endTime.HomeTime(); |
|
994 DoTestKill(); |
|
995 |
|
996 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
997 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
998 } |
|
999 |
|
1000 if(gTypes >= 2) |
|
1001 { |
|
1002 gDelEntryDir = dir2; |
|
1003 |
|
1004 dir2.Append(KCommonFile); |
|
1005 |
|
1006 DoTest(DeleteEntryAccess); |
|
1007 |
|
1008 startTime.HomeTime(); |
|
1009 |
|
1010 r = TheFs.Delete(dir2); |
|
1011 FailIfError(r); |
|
1012 |
|
1013 endTime.HomeTime(); |
|
1014 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
1015 DoTestKill(); |
|
1016 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1017 } |
|
1018 |
|
1019 if(gTypes >= 3) |
|
1020 { |
|
1021 gDelEntryDir = dir3; |
|
1022 |
|
1023 dir3.Append(KCommonFile); |
|
1024 |
|
1025 DoTest(DeleteEntryAccess); |
|
1026 |
|
1027 startTime.HomeTime(); |
|
1028 |
|
1029 r = TheFs.Delete(dir3); |
|
1030 FailIfError(r); |
|
1031 |
|
1032 endTime.HomeTime(); |
|
1033 DoTestKill(); |
|
1034 |
|
1035 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
1036 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1037 } |
|
1038 } |
|
1039 |
|
1040 gWriting = ETrue; User::After(1000000); |
|
1041 PrintResult(aStep, 1, aN); |
|
1042 PrintResultTime(aStep, 2, timeTaken1); |
|
1043 PrintResultTime(aStep, 3, timeTaken2); |
|
1044 PrintResultTime(aStep, 4, timeTaken3); |
|
1045 gWriting = EFalse; |
|
1046 } |
|
1047 |
|
1048 /** Delete last.txt file with two threads accessing different directories and |
|
1049 creating/deleting a file in them |
|
1050 |
|
1051 @param aN Number of files in the directory |
|
1052 @param aStep Test step |
|
1053 */ |
|
1054 LOCAL_C void DelFileMD2(TInt aN, TInt aStep) |
|
1055 { |
|
1056 TBuf16<100> dir1; |
|
1057 TBuf16<100> dir2; |
|
1058 TBuf16<100> dir3; |
|
1059 TBuf16<100> dir4; |
|
1060 TBuf16<100> temp; |
|
1061 |
|
1062 TInt r = 0; |
|
1063 TTime startTime; |
|
1064 TTime endTime; |
|
1065 TTimeIntervalMicroSeconds timeTaken(0); |
|
1066 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
1067 |
|
1068 CFileMan* fMan=CFileMan::NewL(TheFs); |
|
1069 |
|
1070 dir1 = gSessionPath; |
|
1071 dir2 = gSessionPath; |
|
1072 dir3 = gSessionPath; |
|
1073 |
|
1074 dir4.Format(KDirMultipleName, 1, aN); |
|
1075 dir1.Append(dir4); |
|
1076 dir4.Format(KDirMultipleName, 2, aN); |
|
1077 dir2.Append(dir4); |
|
1078 dir4.Format(KDirMultipleName, 3, aN); |
|
1079 dir3.Append(dir4); |
|
1080 |
|
1081 |
|
1082 temp=gSessionPath; |
|
1083 dir4.Format(KDirMultipleName, 3, 300); |
|
1084 temp.Append(dir4); |
|
1085 |
|
1086 if(aN <= gFilesLimit) |
|
1087 { |
|
1088 if(gTypes >= 1) |
|
1089 { |
|
1090 gDelEntryDir = dir1; |
|
1091 gDelEntryDir2=temp; |
|
1092 |
|
1093 dir1.Append(KCommonFile); |
|
1094 |
|
1095 DoTest(DeleteEntryAccess); |
|
1096 |
|
1097 startTime.HomeTime(); |
|
1098 |
|
1099 r = fMan->Delete(dir1); |
|
1100 FailIfError(r); |
|
1101 |
|
1102 endTime.HomeTime(); |
|
1103 DoTestKill(); |
|
1104 |
|
1105 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
1106 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1107 } |
|
1108 |
|
1109 if(gTypes >= 2) |
|
1110 { |
|
1111 dir4=dir2; |
|
1112 gDelEntryDir = dir4; |
|
1113 |
|
1114 dir2.Append(KCommonFile); |
|
1115 |
|
1116 DoTest(DeleteEntryAccess); |
|
1117 |
|
1118 startTime.HomeTime(); |
|
1119 |
|
1120 r = fMan->Delete(dir2); |
|
1121 FailIfError(r); |
|
1122 |
|
1123 endTime.HomeTime(); |
|
1124 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
1125 DoTestKill(); |
|
1126 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1127 } |
|
1128 if(gTypes >= 3) |
|
1129 { |
|
1130 dir4=dir3; |
|
1131 gDelEntryDir = dir4; |
|
1132 |
|
1133 dir3.Append(KCommonFile); |
|
1134 |
|
1135 |
|
1136 DoTest(DeleteEntryAccess); |
|
1137 |
|
1138 startTime.HomeTime(); |
|
1139 |
|
1140 r = fMan->Delete(dir3); |
|
1141 FailIfError(r); |
|
1142 |
|
1143 endTime.HomeTime(); |
|
1144 DoTestKill(); |
|
1145 |
|
1146 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
1147 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1148 } |
|
1149 } |
|
1150 |
|
1151 delete fMan; |
|
1152 |
|
1153 gWriting = ETrue; User::After(1000000); |
|
1154 PrintResult(aStep, 1, aN); |
|
1155 PrintResultTime(aStep, 2, timeTaken1); |
|
1156 PrintResultTime(aStep, 3, timeTaken2); |
|
1157 PrintResultTime(aStep, 4, timeTaken3); |
|
1158 gWriting = EFalse; |
|
1159 } |
|
1160 |
|
1161 /** Delete all files with two threads accessing different directories and |
|
1162 creating/deleting a file in them using RFs::Delete |
|
1163 |
|
1164 @param aN Number of files in the directory |
|
1165 @param aStep Test step |
|
1166 */ |
|
1167 LOCAL_C void DelAllMD1(TInt aN, TInt aStep) |
|
1168 { |
|
1169 TInt i = 0,r = 0; |
|
1170 |
|
1171 TBuf16<50> directory; |
|
1172 TBuf16<50> dirtemp; |
|
1173 TBuf16<50> temp; |
|
1174 TBuf16<50> dir4; |
|
1175 |
|
1176 |
|
1177 TBuf16<50> path; |
|
1178 TBuf16<50> buffer(50); |
|
1179 |
|
1180 TTime startTime; |
|
1181 TTime endTime; |
|
1182 TTimeIntervalMicroSeconds timeTaken(0); |
|
1183 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
1184 |
|
1185 |
|
1186 temp=gSessionPath; |
|
1187 dir4.Format(KDirMultipleName, 3, 300); |
|
1188 temp.Append(dir4); |
|
1189 |
|
1190 if(aN <= gFilesLimit) |
|
1191 { |
|
1192 if(gTypes >= 1) |
|
1193 { |
|
1194 // all 8.3 |
|
1195 dirtemp.Format(KDirMultipleName,1, aN); |
|
1196 directory = gSessionPath; |
|
1197 directory.Append(dirtemp); |
|
1198 |
|
1199 gDelEntryDir = directory; |
|
1200 gDelEntryDir2 = temp; |
|
1201 |
|
1202 i = 0; |
|
1203 |
|
1204 DoTest(DeleteEntryAccess); |
|
1205 |
|
1206 startTime.HomeTime(); |
|
1207 while(i < aN) |
|
1208 { |
|
1209 FileNamesGeneration(buffer, 8, i, i%3+1) ; |
|
1210 path = directory; |
|
1211 path.Append(buffer); |
|
1212 r = TheFs.Delete(path); |
|
1213 FailIfError(r); |
|
1214 i++; |
|
1215 } |
|
1216 endTime.HomeTime(); |
|
1217 DoTestKill(); |
|
1218 |
|
1219 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
1220 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1221 } |
|
1222 |
|
1223 if(gTypes >= 2) |
|
1224 { |
|
1225 // all 20.3 chars |
|
1226 dirtemp.Format(KDirMultipleName,2, aN); |
|
1227 directory = gSessionPath; |
|
1228 directory.Append(dirtemp); |
|
1229 gDelEntryDir = directory; |
|
1230 DoTest(DeleteEntryAccess); |
|
1231 |
|
1232 i = 0; |
|
1233 startTime.HomeTime(); |
|
1234 while(i<aN) |
|
1235 { |
|
1236 FileNamesGeneration(buffer, 20, i, i%3+1) ; |
|
1237 path = directory; |
|
1238 path.Append(buffer); |
|
1239 r = TheFs.Delete(path); |
|
1240 FailIfError(r); |
|
1241 i++; |
|
1242 } |
|
1243 endTime.HomeTime(); |
|
1244 DoTestKill(); |
|
1245 |
|
1246 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
1247 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1248 } |
|
1249 |
|
1250 if(gTypes >= 3) |
|
1251 { |
|
1252 // 50/50 |
|
1253 dirtemp.Format(KDirMultipleName,3, aN); |
|
1254 directory = gSessionPath; |
|
1255 directory.Append(dirtemp); |
|
1256 |
|
1257 gDelEntryDir = directory; |
|
1258 DoTest(DeleteEntryAccess); |
|
1259 i = 0; |
|
1260 startTime.HomeTime(); |
|
1261 while(i<aN) |
|
1262 { |
|
1263 if(1==(i%2)) FileNamesGeneration(buffer, 8, i, i%3+1) ; |
|
1264 else FileNamesGeneration(buffer, 20, i, i%3+1) ; |
|
1265 |
|
1266 path = directory; |
|
1267 path.Append(buffer); |
|
1268 r = TheFs.Delete(path); |
|
1269 FailIfError(r); |
|
1270 i++; |
|
1271 } |
|
1272 endTime.HomeTime(); |
|
1273 DoTestKill(); |
|
1274 |
|
1275 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
1276 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1277 } |
|
1278 } |
|
1279 |
|
1280 gWriting = ETrue; User::After(1000000); |
|
1281 PrintResult(aStep, 1, aN); |
|
1282 PrintResultTime(aStep, 2, timeTaken1); |
|
1283 PrintResultTime(aStep, 3, timeTaken2); |
|
1284 PrintResultTime(aStep, 4, timeTaken3); |
|
1285 gWriting = EFalse; |
|
1286 } |
|
1287 |
|
1288 /** Delete all files with two threads accessing different directories and |
|
1289 creating/deleting a file in them using CFileMan::Delete |
|
1290 |
|
1291 @param aN Number of files in the directory |
|
1292 @param aStep Test step |
|
1293 */ |
|
1294 LOCAL_C void DelAllMD2(TInt aN, TInt aStep) |
|
1295 { |
|
1296 TInt r = 0; |
|
1297 TBuf16<50> directory; |
|
1298 TBuf16<50> dirtemp; |
|
1299 TBuf16<50> dir4; |
|
1300 TBuf16<50> temp; |
|
1301 |
|
1302 |
|
1303 TTime startTime; |
|
1304 TTime endTime; |
|
1305 TTimeIntervalMicroSeconds timeTaken(0); |
|
1306 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
1307 CFileMan* fMan=CFileMan::NewL(TheFs); |
|
1308 |
|
1309 |
|
1310 // Creating directory for being accessed by other thread |
|
1311 temp=gSessionPath; |
|
1312 dir4.Format(KDirMultipleName, 3, 300); |
|
1313 temp.Append(dir4); |
|
1314 gDelEntryDir2=temp; |
|
1315 |
|
1316 if(aN <= gFilesLimit) |
|
1317 { |
|
1318 if(gTypes >= 1) |
|
1319 { |
|
1320 // all 8.3 |
|
1321 dirtemp.Format(KDirMultipleName,1, aN); |
|
1322 directory = gSessionPath; |
|
1323 directory.Append(dirtemp); |
|
1324 |
|
1325 gDelEntryDir = directory; |
|
1326 |
|
1327 DoTest(DeleteEntryAccess); |
|
1328 |
|
1329 startTime.HomeTime(); |
|
1330 directory.Append(_L("F*.*")); |
|
1331 r = fMan->Delete(directory); |
|
1332 FailIfError(r); |
|
1333 |
|
1334 endTime.HomeTime(); |
|
1335 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
1336 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1337 DoTestKill(); |
|
1338 } |
|
1339 |
|
1340 if(gTypes >= 2) |
|
1341 { |
|
1342 // all 20.3 chars |
|
1343 dirtemp.Format(KDirMultipleName,2, aN); |
|
1344 directory = gSessionPath; |
|
1345 directory.Append(dirtemp); |
|
1346 gDelEntryDir = directory; |
|
1347 |
|
1348 DoTest(DeleteEntryAccess); |
|
1349 |
|
1350 startTime.HomeTime(); |
|
1351 directory.Append(_L("F*.*")); |
|
1352 r = fMan->Delete(directory); |
|
1353 FailIfError(r); |
|
1354 |
|
1355 endTime.HomeTime(); |
|
1356 DoTestKill(); |
|
1357 |
|
1358 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
1359 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1360 } |
|
1361 if(gTypes >= 3) |
|
1362 { |
|
1363 // 50/50 |
|
1364 dirtemp.Format(KDirMultipleName,3, aN); |
|
1365 directory = gSessionPath; |
|
1366 directory.Append(dirtemp); |
|
1367 gDelEntryDir = directory; |
|
1368 |
|
1369 DoTest(DeleteEntryAccess); |
|
1370 |
|
1371 startTime.HomeTime(); |
|
1372 directory.Append(_L("F*.*")); |
|
1373 r = fMan->Delete(directory); |
|
1374 FailIfError(r); |
|
1375 |
|
1376 endTime.HomeTime(); |
|
1377 DoTestKill(); |
|
1378 |
|
1379 timeTaken=endTime.MicroSecondsFrom(startTime); |
|
1380 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1381 } |
|
1382 } |
|
1383 |
|
1384 delete fMan; |
|
1385 |
|
1386 gWriting = ETrue; User::After(1000000); |
|
1387 PrintResult(aStep, 1, aN); |
|
1388 PrintResultTime(aStep, 2, timeTaken1); |
|
1389 PrintResultTime(aStep, 3, timeTaken2); |
|
1390 PrintResultTime(aStep, 4, timeTaken3); |
|
1391 gWriting = EFalse; |
|
1392 } |
|
1393 |
|
1394 |
|
1395 /** Delete last.txt with RFs::Delete |
|
1396 |
|
1397 @param aN Number of files in the directory |
|
1398 @param aStep Test step |
|
1399 */ |
|
1400 LOCAL_C void DelFile1(TInt aN, TInt aStep) |
|
1401 { |
|
1402 TBuf16<100> dir1; |
|
1403 TBuf16<100> dir2; |
|
1404 TBuf16<100> dir3; |
|
1405 TBuf16<100> dir4; |
|
1406 |
|
1407 TInt r = 0; |
|
1408 TTime startTime; |
|
1409 TTime endTime; |
|
1410 TTimeIntervalMicroSeconds timeTaken(0); |
|
1411 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
1412 |
|
1413 dir1 = gSessionPath; |
|
1414 dir2 = gSessionPath; |
|
1415 dir3 = gSessionPath; |
|
1416 |
|
1417 dir4.Format(KDirMultipleName, 1, aN); |
|
1418 dir1.Append(dir4); |
|
1419 dir4.Format(KDirMultipleName, 2, aN); |
|
1420 dir2.Append(dir4); |
|
1421 dir4.Format(KDirMultipleName, 3, aN); |
|
1422 dir3.Append(dir4); |
|
1423 |
|
1424 dir1.Append(KCommonFile); |
|
1425 dir2.Append(KCommonFile); |
|
1426 dir3.Append(KCommonFile); |
|
1427 |
|
1428 if(aN <= gFilesLimit) |
|
1429 { |
|
1430 if(gTypes >= 1) |
|
1431 { |
|
1432 startTime.HomeTime(); |
|
1433 |
|
1434 r = TheFs.Delete(dir1); |
|
1435 FailIfError(r); |
|
1436 |
|
1437 endTime.HomeTime(); |
|
1438 |
|
1439 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
1440 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1441 } |
|
1442 if(gTypes >= 2) |
|
1443 { |
|
1444 startTime.HomeTime(); |
|
1445 |
|
1446 r = TheFs.Delete(dir2); |
|
1447 FailIfError(r); |
|
1448 |
|
1449 endTime.HomeTime(); |
|
1450 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
1451 |
|
1452 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1453 } |
|
1454 if(gTypes >= 3) |
|
1455 { |
|
1456 startTime.HomeTime(); |
|
1457 |
|
1458 r = TheFs.Delete(dir3); |
|
1459 FailIfError(r); |
|
1460 |
|
1461 endTime.HomeTime(); |
|
1462 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
1463 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1464 } |
|
1465 } |
|
1466 |
|
1467 gWriting = ETrue; User::After(1000000); |
|
1468 PrintResult(aStep, 1, aN); |
|
1469 PrintResultTime(aStep, 2, timeTaken1); |
|
1470 PrintResultTime(aStep, 3, timeTaken2); |
|
1471 PrintResultTime(aStep, 4, timeTaken3); |
|
1472 gWriting = EFalse; |
|
1473 } |
|
1474 |
|
1475 /** Delete last.txt with CFileMan::Delete |
|
1476 |
|
1477 @param aN Number of files in the directory |
|
1478 @param aStep Test step |
|
1479 */ |
|
1480 LOCAL_C void DelFile2(TInt aN, TInt aStep) |
|
1481 { |
|
1482 TBuf16<100> dir1; |
|
1483 TBuf16<100> dir2; |
|
1484 TBuf16<100> dir3; |
|
1485 TBuf16<100> dir4; |
|
1486 |
|
1487 TInt r = 0; |
|
1488 |
|
1489 TTime startTime; |
|
1490 TTime endTime; |
|
1491 TTimeIntervalMicroSeconds timeTaken(0); |
|
1492 TInt timeTaken1 = -1, timeTaken2 = -1, timeTaken3 = -1; |
|
1493 |
|
1494 if(aN <= gFilesLimit) |
|
1495 { |
|
1496 CFileMan* fMan = CFileMan::NewL(TheFs); |
|
1497 |
|
1498 dir1 = gSessionPath; |
|
1499 dir2 = gSessionPath; |
|
1500 dir3 = gSessionPath; |
|
1501 |
|
1502 dir4.Format(KDirMultipleName, 1, aN); |
|
1503 dir1.Append(dir4); |
|
1504 dir4.Format(KDirMultipleName, 2, aN); |
|
1505 dir2.Append(dir4); |
|
1506 dir4.Format(KDirMultipleName, 3, aN); |
|
1507 dir3.Append(dir4); |
|
1508 |
|
1509 dir1.Append(KCommonFile); |
|
1510 dir2.Append(KCommonFile); |
|
1511 dir3.Append(KCommonFile); |
|
1512 |
|
1513 if(gTypes >= 1) |
|
1514 { |
|
1515 startTime.HomeTime(); |
|
1516 |
|
1517 r = fMan->Delete(dir1); |
|
1518 FailIfError(r); |
|
1519 |
|
1520 endTime.HomeTime(); |
|
1521 |
|
1522 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
1523 timeTaken1 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1524 } |
|
1525 |
|
1526 if(gTypes >= 2) |
|
1527 { |
|
1528 startTime.HomeTime(); |
|
1529 |
|
1530 r = fMan->Delete(dir2); |
|
1531 FailIfError(r); |
|
1532 |
|
1533 endTime.HomeTime(); |
|
1534 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
1535 timeTaken2 = I64LOW(timeTaken.Int64() / gTimeUnit ); |
|
1536 } |
|
1537 |
|
1538 if(gTypes >= 3) |
|
1539 { |
|
1540 startTime.HomeTime(); |
|
1541 |
|
1542 r = fMan->Delete(dir3); |
|
1543 FailIfError(r); |
|
1544 |
|
1545 endTime.HomeTime(); |
|
1546 timeTaken = endTime.MicroSecondsFrom(startTime); |
|
1547 timeTaken3 = I64LOW(timeTaken.Int64() / gTimeUnit); |
|
1548 } |
|
1549 |
|
1550 delete fMan; |
|
1551 } |
|
1552 |
|
1553 gWriting = ETrue; User::After(1000000); |
|
1554 PrintResult(aStep, 1, aN); |
|
1555 PrintResultTime(aStep, 2, timeTaken1); |
|
1556 PrintResultTime(aStep, 3, timeTaken2); |
|
1557 PrintResultTime(aStep, 4, timeTaken3); |
|
1558 gWriting = EFalse; |
|
1559 } |
|
1560 |
|
1561 /** Tests the deletion of one file with both API: RFs::Delete and CFileMan::Delete |
|
1562 |
|
1563 @param aSelector Configuration in case of manual execution |
|
1564 */ |
|
1565 LOCAL_C TInt TestDelEntry(TAny* aSelector) |
|
1566 { |
|
1567 // Precondition: the drive already filled with the right files |
|
1568 |
|
1569 TInt i = 100; |
|
1570 TInt testStep = 1; |
|
1571 |
|
1572 Validate(aSelector); |
|
1573 |
|
1574 test.Printf(_L("#~TS_Title_%d,%d: Delete last.txt, RFs::Delete\n"), gTestHarness, gTestCase); |
|
1575 |
|
1576 i = 100; |
|
1577 testStep = 1; |
|
1578 while(i <= KMaxFiles) |
|
1579 { |
|
1580 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1581 DelFile1(i, testStep++); |
|
1582 i += 100; |
|
1583 } |
|
1584 |
|
1585 ReCreateLast(); |
|
1586 gTestCase++; |
|
1587 test.Printf(_L("#~TS_Title_%d,%d: Delete last.txt, CFileMan::Delete\n"), gTestHarness, gTestCase); |
|
1588 |
|
1589 i = 100; |
|
1590 testStep = 1; |
|
1591 while(i <= KMaxFiles) |
|
1592 { |
|
1593 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1594 DelFile2(i, testStep++); |
|
1595 i += 100; |
|
1596 } |
|
1597 |
|
1598 gTestCase++; |
|
1599 |
|
1600 return(KErrNone); |
|
1601 } |
|
1602 |
|
1603 /** Tests the deletion of all the files in a directory with both API: |
|
1604 RFs::Delete and CFileMan::Delete |
|
1605 |
|
1606 @param aSelector Configuration in case of manual execution |
|
1607 */ |
|
1608 LOCAL_C TInt TestDelAllFiles(TAny* aSelector) |
|
1609 { |
|
1610 // Precondition: drive already filled with the right files |
|
1611 |
|
1612 TInt i = 100; |
|
1613 TInt testStep = 1; |
|
1614 |
|
1615 Validate(aSelector); |
|
1616 |
|
1617 test.Printf(_L("#~TS_Title_%d,%d: Delete all, RFs::Delete\n"), gTestHarness, gTestCase); |
|
1618 |
|
1619 testStep = 1; |
|
1620 while(i <= KMaxFiles) |
|
1621 { |
|
1622 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1623 DelAllFiles1(i, testStep++); |
|
1624 i += 100; |
|
1625 } |
|
1626 |
|
1627 TestFileCreate(aSelector); |
|
1628 gTestCase++; |
|
1629 test.Printf(_L("#~TS_Title_%d,%d: Delete all, CFileMan::Delete\n"), gTestHarness, gTestCase); |
|
1630 |
|
1631 |
|
1632 i = 100; |
|
1633 testStep = 1; |
|
1634 while(i <= KMaxFiles) |
|
1635 { |
|
1636 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1637 DelAllFiles2(i, testStep++); |
|
1638 i += 100; |
|
1639 } |
|
1640 |
|
1641 gTestCase++; |
|
1642 return(KErrNone); |
|
1643 } |
|
1644 |
|
1645 /** Tests the deletion of last.txt in a directory with both API: |
|
1646 RFs::Delete and CFileMan::Delete while 2 other threads accessing the directory |
|
1647 |
|
1648 @param aSelector Configuration in case of manual execution |
|
1649 */ |
|
1650 LOCAL_C TInt TestDelMultSame(TAny* aSelector) |
|
1651 { |
|
1652 TInt i = 100; |
|
1653 TInt testStep = 1; |
|
1654 |
|
1655 |
|
1656 Validate(aSelector); |
|
1657 |
|
1658 TestFileCreate(aSelector); |
|
1659 |
|
1660 test.Printf(_L("#~TS_Title_%d,%d: Delete last.txt mult. clients del in same dir, RFs::Delete\n"), gTestHarness, gTestCase); |
|
1661 |
|
1662 testStep = 1; |
|
1663 while(i <= KMaxFiles) |
|
1664 { |
|
1665 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1666 DelFileM1(i, testStep++); |
|
1667 i += 100; |
|
1668 } |
|
1669 |
|
1670 ReCreateLast(); |
|
1671 gTestCase++; |
|
1672 test.Printf(_L("#~TS_Title_%d,%d: Delete last.txt mult. clients del in same dir, CFileMan::Delete\n"), gTestHarness, gTestCase); |
|
1673 |
|
1674 i = 100; |
|
1675 testStep = 1; |
|
1676 while(i <= KMaxFiles) |
|
1677 { |
|
1678 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1679 { |
|
1680 DelFileM2(i, testStep); |
|
1681 testStep++; |
|
1682 } |
|
1683 i += 100; |
|
1684 } |
|
1685 |
|
1686 ReCreateLast(); |
|
1687 gTestCase++; |
|
1688 test.Printf(_L("#~TS_Title_%d,%d: Delete all mult. clients del in same dir, RFs::Delete\n"), gTestHarness, gTestCase); |
|
1689 |
|
1690 i = 100; |
|
1691 testStep = 1; |
|
1692 while(i <= KMaxFiles) |
|
1693 { |
|
1694 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1695 DelAllM1(i, testStep++); |
|
1696 i += 100; |
|
1697 } |
|
1698 |
|
1699 TestFileCreate(aSelector); |
|
1700 gTestCase++; |
|
1701 test.Printf(_L("#~TS_Title_%d,%d: Delete all mult. clients del in same dir, CFileMan::Delete\n"), gTestHarness, gTestCase); |
|
1702 |
|
1703 i = 100; |
|
1704 testStep = 1; |
|
1705 while(i <= KMaxFiles) |
|
1706 { |
|
1707 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1708 DelAllM2(i, testStep++); |
|
1709 i += 100; |
|
1710 } |
|
1711 |
|
1712 gTestCase++; |
|
1713 |
|
1714 return(KErrNone); |
|
1715 } |
|
1716 |
|
1717 |
|
1718 /** Tests the deletion of last.txt in a directory with both API: |
|
1719 RFs::Delete and CFileMan::Delete while 2 threads accessing different directories |
|
1720 (the current and one with 300 files) |
|
1721 |
|
1722 @param aSelector Configuration in case of manual execution |
|
1723 */ |
|
1724 LOCAL_C TInt TestDelMultDif(TAny* aSelector) |
|
1725 { |
|
1726 TInt i = 100; |
|
1727 TInt testStep = 1; |
|
1728 |
|
1729 Validate(aSelector); |
|
1730 |
|
1731 TestFileCreate(aSelector); |
|
1732 CreateDirWithNFiles(300, 3); |
|
1733 |
|
1734 test.Printf(_L("#~TS_Title_%d,%d: Delete last.txt mult. clients del in dif dirs, RFs::Delete\n"), gTestHarness, gTestCase); |
|
1735 |
|
1736 testStep = 1; |
|
1737 while(i <= KMaxFiles) |
|
1738 { |
|
1739 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1740 DelFileMD1(i, testStep++); |
|
1741 i += 100; |
|
1742 } |
|
1743 |
|
1744 ReCreateLast(); |
|
1745 gTestCase++; |
|
1746 test.Printf(_L("#~TS_Title_%d,%d: Delete last.txt mult. clients del in dif dirs, CFileMan::Delete\n"), gTestHarness, gTestCase); |
|
1747 |
|
1748 i = 100; |
|
1749 testStep = 1; |
|
1750 while(i <= KMaxFiles) |
|
1751 { |
|
1752 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1753 DelFileMD2(i, testStep++); |
|
1754 i += 100; |
|
1755 } |
|
1756 |
|
1757 ReCreateLast(); |
|
1758 gTestCase++; |
|
1759 test.Printf(_L("#~TS_Title_%d,%d: Delete all mult. clients del in dif dirs, RFs::Delete\n"), gTestHarness, gTestCase); |
|
1760 |
|
1761 i = 100; |
|
1762 testStep = 1; |
|
1763 while(i <= KMaxFiles) |
|
1764 { |
|
1765 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1766 DelAllMD1(i, testStep++); |
|
1767 i += 100; |
|
1768 } |
|
1769 |
|
1770 TestFileCreate(aSelector); |
|
1771 gTestCase++; |
|
1772 test.Printf(_L("#~TS_Title_%d,%d: Delete all mult. clients del in dif dirs, CFileMan::Delete\n"), gTestHarness, gTestCase); |
|
1773 |
|
1774 |
|
1775 i = 100; |
|
1776 testStep = 1; |
|
1777 while(i <= KMaxFiles) |
|
1778 { |
|
1779 if(i == 100 || i == 1000 || i == 5000 || i == 10000) |
|
1780 DelAllMD2(i, testStep++); |
|
1781 i += 100; |
|
1782 } |
|
1783 |
|
1784 gTestCase++; |
|
1785 |
|
1786 return(KErrNone); |
|
1787 } |
|
1788 |
|
1789 /** Goes automatically through all the options |
|
1790 |
|
1791 @param aSelector Configuration in case of manual execution |
|
1792 */ |
|
1793 LOCAL_C TInt TestAll(TAny* aSelector) |
|
1794 { |
|
1795 Validate(aSelector); |
|
1796 |
|
1797 gFormat=ETrue; // The card will be formatted after this test execution |
|
1798 |
|
1799 TestDelEntry(aSelector); |
|
1800 TestDelAllFiles(aSelector); |
|
1801 TestDelMultSame(aSelector); |
|
1802 TestDelMultDif(aSelector); |
|
1803 |
|
1804 return KErrNone; |
|
1805 } |
|
1806 |
|
1807 /** Call all tests |
|
1808 |
|
1809 */ |
|
1810 GLDEF_C void CallTestsL() |
|
1811 { |
|
1812 |
|
1813 TInt r = client.CreateLocal(0); |
|
1814 FailIfError(r); |
|
1815 |
|
1816 // Each test case of the suite has an identifyer for parsing purposes of the results |
|
1817 gTestHarness = 1; |
|
1818 gTestCase = 1; |
|
1819 |
|
1820 PrintHeaders(1, _L("t_fsrdel. Deletion")); |
|
1821 |
|
1822 RThread noisy; |
|
1823 TBuf<20> buf = _L("Noisy"); |
|
1824 r = noisy.Create(buf, noise, KDefaultStackSize, KHeapSize, KHeapSize, NULL); |
|
1825 FailIfError(r); |
|
1826 |
|
1827 noisy.Resume(); |
|
1828 |
|
1829 CSelectionBox* TheSelector = CSelectionBox::NewL(test.Console()); |
|
1830 |
|
1831 if(gMode == 0) |
|
1832 { // Manual |
|
1833 gSessionPath=_L("?:\\"); |
|
1834 TCallBack createFiles(TestFileCreate,TheSelector); |
|
1835 TCallBack delFile(TestDelEntry,TheSelector); |
|
1836 TCallBack delAllFiles(TestDelAllFiles,TheSelector); |
|
1837 TCallBack delMultSame(TestDelMultSame,TheSelector); |
|
1838 TCallBack delMultDif(TestDelMultDif,TheSelector); |
|
1839 TCallBack delAll(TestAll,TheSelector); |
|
1840 TheSelector->AddDriveSelectorL(TheFs); |
|
1841 TheSelector->AddLineL(_L("Create all files"),createFiles); |
|
1842 TheSelector->AddLineL(_L("Delete one file from each dir"),delFile); |
|
1843 TheSelector->AddLineL(_L("Delete all files"),delAllFiles); |
|
1844 TheSelector->AddLineL(_L("Delete mult clients same dir"),delMultSame); |
|
1845 TheSelector->AddLineL(_L("Delete mult clients dif dir"),delMultDif); |
|
1846 TheSelector->AddLineL(_L("Execute all options"),delAll); |
|
1847 TheSelector->Run(); |
|
1848 } |
|
1849 else |
|
1850 { // Automatic |
|
1851 TestAll(TheSelector); |
|
1852 } |
|
1853 |
|
1854 client.Close(); |
|
1855 delete TheSelector; |
|
1856 |
|
1857 noisy.Kill(KErrNone); |
|
1858 noisy.Close(); |
|
1859 |
|
1860 test.Printf(_L("#~TestEnd_%d\n"), gTestHarness); |
|
1861 } |