os/kernelhwsrv/kerneltest/f32test/bench/t_fsrdel.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     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 	}