kerneltest/f32test/bench/t_fat_perf.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/bench/t_fat_perf.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,724 @@
+// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// File Name:		f32test/bench/t_fat_perf.cpp
+// This file contains implementation for the functions called 
+// by test cases from the command line to test FAT Performance on
+// large number of files (PREQ 1885).
+// 
+//
+
+//Include files
+#include <e32test.h>
+#include <f32file.h>
+#include <f32dbg.h>
+#include "t_server.h"
+#include "t_fat_perf.h"
+
+
+
+LOCAL_C void ClearCache(TInt); 
+
+RTest test(_L("T_FAT_PERF"));
+
+TFileName 	gPath;
+TFileName 	gFileNameBase;
+TInt 		gFileNo = 0;
+TInt		gTestCase = -1;
+TInt		gCacheClear = 0;
+TInt        gZeroPadFileNumberForFixedLengthFileNames = 0;
+
+
+//-----------------------------------------------------------------------------
+
+TNamingSchemeParam::TNamingSchemeParam() 
+    : iConOrRan(EConsecutive), iUniOrAsc(EAscii), iZeroPadFileNumber(EFalse), iMaxFileNameLength(0), iMinStringLength(0)
+    {
+    iFileNameBase = _L("");
+    }
+
+//-----------------------------------------------------------------------------
+/**
+  	This function creates the files in the following directories
+  	INITIAL CONDITION: FILL FOLLOWING SUB-DIRS WITH 1600 FILES
+	"\\DIR1\\"...2000 files ("ABCD1ABCD2ABCD3ABCD4ABCD5ABCD_1 ~ 2000.TXT")
+	"\\DIR1\\DIR11\\"...1600 files ("ABCD1ABCD2ABCD3ABCD4ABCD5ABCD_1 ~ 1600.TXT")
+	"\\DIR1\\DIR11\\DIR111\\"...1610 files ("ABCD1ABCD2ABCD3ABCD4ABCD5ABCD_1 ~ 1600.TXT") + "ANOTHERLONGFILENAME_1~10.TXT"
+	"\\DIR1\\DIR12RAN\\"...1600 files ("...random string (31~34)....TXT")
+	"\\DIR2\\"...1600 files ("ABCD1ABCD2ABCD3ABCD4ABCD5ABCD_1 ~ 1600.TXT")
+ */
+//-----------------------------------------------------------------------------
+
+LOCAL_C void DoTestCaseSetup()
+	{
+	test.Next(_L(" 'Test Setup' - 00"));
+
+	TMLUnitParam mlParam = 
+		{
+		12345	// iID
+		};
+	CMeasureAndLogUnit* measureAndLogUnit = CMeasureAndLogUnit::NewLC(mlParam);
+	CExecutionUnit* execUnit = CExecutionUnit::NewLC(measureAndLogUnit, gDriveToTest);
+
+	TInt curDriveNum;
+	TInt err = TheFs.CharToDrive(gDriveToTest, curDriveNum);
+	test(KErrNone == err);
+	FormatFatDrive(TheFs,curDriveNum, EQuickFormat, NULL, EFalse);
+
+/*-----------------------------------------------------------------------------
+ * Setup for "\\DIR1\\"
+ *-----------------------------------------------------------------------------*/
+
+   	TNamingSchemeParam namingScheme;
+	namingScheme.iConOrRan 			       = EConsecutive;
+	namingScheme.iUniOrAsc 			       = EAscii;
+	namingScheme.iZeroPadFileNumber   = EFalse;
+	namingScheme.iFileNameBase 		       = _L("ABCD1ABCD2ABCD3ABCD4ABCD5ABCD_");
+	namingScheme.iMaxFileNameLength        = 0;
+	namingScheme.iMinStringLength 	       = 0;
+	
+	TDirUnitParam dirParam1;
+	dirParam1.iPriority 			= 1;
+	dirParam1.iDirName 				= _L("?:\\DIR1\\");
+	dirParam1.iRuns 				= 1;
+	dirParam1.iFilesPerRun 			= 2000;
+	dirParam1.iSampleInterval 		= 0;
+	dirParam1.iNamingScheme 		= namingScheme;
+	dirParam1.iFileOpMode 			= EFATPerfFileCreate;
+	
+	execUnit->AddDirUnitL(dirParam1);
+	
+/*-----------------------------------------------------------------------------
+ * Setup for "\\DIR1\\DIR11\\"
+ *-----------------------------------------------------------------------------*/
+
+	TDirUnitParam dirParam11		= dirParam1;
+	dirParam11.iDirName 			= _L("?:\\DIR1\\DIR11\\");
+	dirParam11.iFilesPerRun			= 1600;
+	dirParam11.iSampleInterval		= 0;
+
+	execUnit->AddDirUnitL(dirParam11);
+	
+/*-----------------------------------------------------------------------------
+ * Setup for "\\DIR1\\DIR11\\DIR111\\"
+ *-----------------------------------------------------------------------------*/
+
+	TDirUnitParam dirParam111		= dirParam1;
+	dirParam111.iDirName 			= 	_L("?:\\DIR1\\DIR11\\DIR111\\");
+	dirParam111.iFilesPerRun		= 1600;
+	dirParam111.iSampleInterval		= 0;
+
+	execUnit->AddDirUnitL(dirParam111);
+
+/*-----------------------------------------------------------------------------
+ * Test setup for "\\DIR1\\DIR11\\DIR111\\" with "ANOTHERLONGFILENAME_" file
+ *-----------------------------------------------------------------------------*/
+
+	TNamingSchemeParam namingScheme111A = namingScheme;
+	namingScheme111A.iFileNameBase 		= _L("ANOTHERLONGFILENAME_");
+
+	TDirUnitParam dirParam111A		= dirParam1;
+	dirParam111A.iDirName 			= 	_L("?:\\DIR1\\DIR11\\DIR111\\");
+	dirParam111A.iFilesPerRun		= 10;
+	dirParam111A.iSampleInterval	= 0;
+	dirParam111A.iNamingScheme 		= namingScheme111A;
+	
+	execUnit->AddDirUnitL(dirParam111A);
+
+/*-----------------------------------------------------------------------------
+ * Setup for "\\DIR1\\DIR12RAN\\"
+ *-----------------------------------------------------------------------------*/
+
+	TNamingSchemeParam namingScheme12 = namingScheme;
+	namingScheme12.iConOrRan 			   = ERandom;
+	namingScheme12.iZeroPadFileNumber = EFalse;
+	namingScheme12.iFileNameBase 		   = _L("");
+	namingScheme12.iMaxFileNameLength 	   = 34;
+	namingScheme12.iMinStringLength 	   = 31;
+
+	TDirUnitParam dirParam12		= dirParam1;
+	dirParam12.iDirName 			= _L("?:\\DIR1\\DIR12RAN\\");
+	dirParam12.iFilesPerRun			= 1600;
+	dirParam12.iSampleInterval		= 0;
+	dirParam12.iNamingScheme 		= namingScheme12;
+	
+	execUnit->AddDirUnitL(dirParam12);
+
+/*-----------------------------------------------------------------------------
+ * Setup for "\\DIR2\\"
+ *-----------------------------------------------------------------------------*/
+
+	TDirUnitParam dirParam2		= dirParam1;
+	dirParam2.iDirName 			= _L("?:\\DIR2\\");
+	dirParam2.iFilesPerRun		= 1600;
+	dirParam2.iSampleInterval	= 0;
+	dirParam2.iNamingScheme 	= namingScheme;
+	
+	execUnit->AddDirUnitL(dirParam2);
+
+	execUnit->Run();
+	CleanupStack::PopAndDestroy(2);
+	}
+
+//-----------------------------------------------------------------------------
+/**
+This function creates a files in the valid directory path
+*/
+//-----------------------------------------------------------------------------
+LOCAL_C void DoTestCaseCreateFile()
+	{
+	test.Next(_L(" 'Create File' - 01"));
+
+	TMLUnitParam mlParam = 
+		{
+		12345	// iID
+		};
+	CMeasureAndLogUnit* measureAndLogUnit = CMeasureAndLogUnit::NewLC(mlParam);
+	CExecutionUnit* execUnit = CExecutionUnit::NewLC(measureAndLogUnit, gDriveToTest);
+
+	ClearCache(gCacheClear);
+	
+	TNamingSchemeParam namingScheme;
+	namingScheme.iZeroPadFileNumber = 	gZeroPadFileNumberForFixedLengthFileNames;
+	
+	TDirUnitParam dirParam1;
+	dirParam1.iPriority 			= 1;
+	dirParam1.iDirName 				= _L("");
+	dirParam1.iRuns 				= 1;
+	dirParam1.iFilesPerRun 			= 0;
+	dirParam1.iSampleInterval 		= 1;
+	dirParam1.iNamingScheme 		= namingScheme;
+	dirParam1.iFileOpMode 			= EFATPerfFileCreate;
+	
+		
+	TFileName path = _L("?:\\");
+	path.Append(gPath);
+	if (path[path.Length() - 1] != '\\')
+		{
+		path.Append('\\');
+		}
+	
+	dirParam1.iDirName = path;
+	dirParam1.iFilesPerRun = gFileNo;
+	dirParam1.iNamingScheme.iFileNameBase = gFileNameBase;
+
+	execUnit->AddDirUnitL(dirParam1);
+	execUnit->Run();
+
+	CleanupStack::PopAndDestroy(2);
+	
+	}
+
+//-----------------------------------------------------------------------------
+/**
+This function opens file in the valid directoy path
+*/
+//-----------------------------------------------------------------------------
+
+LOCAL_C void DoTestCaseOpenFile()
+	{
+	test.Next(_L(" 'Open File' - 02"));
+
+	TMLUnitParam mlParam = 
+		{
+		12345	// iID
+		};
+	CMeasureAndLogUnit* measureAndLogUnit = CMeasureAndLogUnit::NewLC(mlParam);
+	CExecutionUnit* execUnit = CExecutionUnit::NewLC(measureAndLogUnit, gDriveToTest);
+
+	ClearCache(gCacheClear);
+	
+	TNamingSchemeParam namingScheme;
+	namingScheme.iZeroPadFileNumber = gZeroPadFileNumberForFixedLengthFileNames;
+	
+	TDirUnitParam dirParam1;
+	dirParam1.iPriority 			= 1;
+	dirParam1.iDirName 				= _L("");
+	dirParam1.iRuns 				= 1;
+	dirParam1.iFilesPerRun 			= 0;
+	dirParam1.iSampleInterval 		= 1;
+	dirParam1.iNamingScheme 		= namingScheme;
+	dirParam1.iFileOpMode 			= EFATPerfFileOpen;
+	
+	
+	TFileName path = _L("?:\\");
+	path.Append(gPath);
+	if (path[path.Length() - 1] != '\\')
+		{
+		path.Append('\\');
+		}
+	
+	dirParam1.iDirName = path;
+	dirParam1.iFilesPerRun = gFileNo;
+	dirParam1.iNamingScheme.iFileNameBase = gFileNameBase;
+
+	execUnit->AddDirUnitL(dirParam1);
+	execUnit->Run();
+
+	CleanupStack::PopAndDestroy(2);
+	
+	}
+
+//-----------------------------------------------------------------------------
+/**
+This function deletes the files in the valid directory path
+*/
+//-----------------------------------------------------------------------------
+
+LOCAL_C void DoTestCaseDeleteFile()
+	{
+	test.Next(_L(" 'Delete File' - 03"));
+
+	TMLUnitParam mlParam = 
+		{
+		12345	// iID
+		};
+	CMeasureAndLogUnit* measureAndLogUnit = CMeasureAndLogUnit::NewLC(mlParam);
+	CExecutionUnit* execUnit = CExecutionUnit::NewLC(measureAndLogUnit, gDriveToTest);
+
+	ClearCache(gCacheClear);
+	
+	TNamingSchemeParam namingScheme;
+	namingScheme.iZeroPadFileNumber = gZeroPadFileNumberForFixedLengthFileNames;
+	
+	TDirUnitParam dirParam1;
+	dirParam1.iPriority 			= 1;
+	dirParam1.iDirName 				= _L("");
+	dirParam1.iRuns 				= 1;
+	dirParam1.iFilesPerRun 			= 0;
+	dirParam1.iSampleInterval 		= 1;
+	dirParam1.iNamingScheme 		= namingScheme;
+	dirParam1.iFileOpMode 			= EFATPerfFileDelete;
+	
+	TFileName path = _L("?:\\");
+	path.Append(gPath);
+	if (path[path.Length() - 1] != '\\')
+		{
+		path.Append('\\');
+		}
+	
+	dirParam1.iDirName = path;
+	dirParam1.iFilesPerRun = gFileNo;
+	dirParam1.iNamingScheme.iFileNameBase = gFileNameBase;
+
+	execUnit->AddDirUnitL(dirParam1);
+	execUnit->Run();
+
+	CleanupStack::PopAndDestroy(2);
+	
+	}
+
+//-----------------------------------------------------------------------------
+/**
+PREQ1885  - optional test case 
+This function writes data into the files in the valid directory path
+*/
+//-----------------------------------------------------------------------------
+
+LOCAL_C void DoTestCaseWriteFile()
+	{
+	test.Next(_L(" 'Write File'  - 04 - Write 4KB of Data"));
+
+	TMLUnitParam mlParam = 
+		{
+		12345	// iID
+		};
+	CMeasureAndLogUnit* measureAndLogUnit = CMeasureAndLogUnit::NewLC(mlParam);
+	CExecutionUnit* execUnit = CExecutionUnit::NewLC(measureAndLogUnit, gDriveToTest);
+
+	ClearCache(gCacheClear);
+	
+	TNamingSchemeParam namingScheme;
+	namingScheme.iZeroPadFileNumber = gZeroPadFileNumberForFixedLengthFileNames;
+
+	TDirUnitParam dirParam1;
+	dirParam1.iPriority 			= 1;
+	dirParam1.iDirName 				= _L("");
+	dirParam1.iRuns 				= 1;
+	dirParam1.iFilesPerRun 			= 0;
+	dirParam1.iSampleInterval 		= 1;
+	dirParam1.iNamingScheme 		= namingScheme;
+	dirParam1.iFileOpMode 			= EFATPerfFileWrite;
+	
+	TFileName path = _L("?:\\");
+	path.Append(gPath);
+	if (path[path.Length() - 1] != '\\')
+		{
+		path.Append('\\');
+		}
+	
+	dirParam1.iDirName = path;
+	dirParam1.iFilesPerRun = gFileNo;
+	dirParam1.iNamingScheme.iFileNameBase = gFileNameBase;
+
+	execUnit->AddDirUnitL(dirParam1);
+	execUnit->Run();
+
+	CleanupStack::PopAndDestroy(2);
+	
+	}
+
+//-----------------------------------------------------------------------------
+/**
+PREQ1885  - optional test case  
+This function Reads data from the files in the valid directory path
+*/
+//-----------------------------------------------------------------------------
+
+LOCAL_C void DoTestCaseReadFile()
+	{
+	test.Next(_L(" 'Read File' - 05 Read 4KB of data"));
+
+	TMLUnitParam mlParam = 
+		{
+		12345	// iID
+		};
+	CMeasureAndLogUnit* measureAndLogUnit = CMeasureAndLogUnit::NewLC(mlParam);
+	CExecutionUnit* execUnit = CExecutionUnit::NewLC(measureAndLogUnit, gDriveToTest);
+
+	ClearCache(gCacheClear);
+		
+	TNamingSchemeParam namingScheme;
+    namingScheme.iZeroPadFileNumber = gZeroPadFileNumberForFixedLengthFileNames;
+    
+	TDirUnitParam dirParam1;
+	dirParam1.iPriority 			= 1;
+	dirParam1.iDirName 				= _L("");
+	dirParam1.iRuns 				= 1;
+	dirParam1.iFilesPerRun 			= 0;
+	dirParam1.iSampleInterval 		= 1;
+	dirParam1.iNamingScheme 		= namingScheme;
+	dirParam1.iFileOpMode 			= EFATPerfFileRead;
+	
+
+	TFileName path = _L("?:\\");
+	path.Append(gPath);
+	if (path[path.Length() - 1] != '\\')
+		{
+		path.Append('\\');
+		}
+	
+	dirParam1.iDirName = path;
+	dirParam1.iFilesPerRun = gFileNo;
+	dirParam1.iNamingScheme.iFileNameBase = gFileNameBase;
+
+	execUnit->AddDirUnitL(dirParam1);
+	execUnit->Run();
+
+	CleanupStack::PopAndDestroy(2);
+	
+	}
+
+//-----------------------------------------------------------------------------
+/**
+This function Dumps the information about Directory Cache
+*/
+//
+LOCAL_C void DoTestCaseDirCacheInfo()
+	{
+	ClearCache(gCacheClear);
+	RDebug::Print(_L("Dumping DirCache Info - Only for DEBUG Mode \n"));
+	#if defined(_DEBUG) || defined(_DEBUG_RELEASE)
+        TInt ret = TheFs.ControlIo(CurrentDrive(), ETestFATDirCacheInfo);    // For DirCache info
+        if (ret != KErrNone)
+            {
+            RDebug::Print(_L("RFs::ControlIo() returned %d when attempting to dump cache info"), ret);
+            }
+        ret = TheFs.ControlIo(CurrentDrive(), ETestDumpFATDirCache);  // For Dumping DirCache contents
+        if (ret != KErrNone)
+            {
+            RDebug::Print(_L("RFs::ControlIo() returned %d when attempting to dump cache contents"), ret);
+            }
+	#endif
+	}
+
+/* To clear the cache - remount drive */
+
+LOCAL_C void ClearCache(TInt gCacheClear)
+    {
+    TInt rel = KErrNone;
+    if (gCacheClear == 1)
+        {
+        // Remount the drive to clear the cache 
+        rel = RemountFS (TheFs, CurrentDrive(), NULL);
+        if (rel != KErrNone)
+            {
+            RDebug::Print(_L("<<Error>>: Remounting: %d\n"), rel);
+            User::Leave(rel);
+            }	
+        }
+
+    }
+
+
+/* Function for command line arguments for the tests */
+LOCAL_C void ParseMyCommandArguments()
+	{
+	TBuf<0x100> cmd;
+	User::CommandLine(cmd);
+	TLex lex(cmd);
+	TPtrC token=lex.NextToken();
+	TFileName thisfile=RProcess().FileName();
+	if (token.MatchF(thisfile)==0)
+		{
+		token.Set(lex.NextToken());
+		}
+	test.Printf(_L("CLP=%S"),&token);
+
+	if(token.Length()!=0)		
+		{
+		gDriveToTest=token[0];
+		gDriveToTest.UpperCase();
+		}
+	else
+		{
+		gDriveToTest='C';
+		return;
+		}
+
+	while (!lex.Eos())
+		{
+		token.Set(lex.NextToken());
+		if (token.Compare(_L("-c")) == 0 || token.Compare(_L("-C")) == 0)
+			{
+			token.Set(lex.NextToken());
+			if (token.MatchF(_L("Setup"))==0)
+				{
+				
+				gTestCase = EFATPerfSetup;
+				
+				}
+			else if (token.MatchF(_L("Create"))==0)
+				{
+				
+				gTestCase = EFATPerfCreate; 
+				
+				}
+			
+			else if (token.MatchF(_L("Open"))==0)
+				{
+				
+				gTestCase = EFATPerfOpen;
+				
+				}
+			
+			else if (token.MatchF(_L("Delete"))==0)
+			
+				{
+				
+				gTestCase = EFATPerfDelete;
+				
+				}
+			
+			else if (token.MatchF(_L("Write"))==0)
+				{
+
+				gTestCase = EFATPerfWrite;
+	
+				}
+			
+			else if (token.MatchF(_L("Read"))==0)
+		
+				{
+				
+				gTestCase = EFATPerfRead;
+		
+				}	
+			else if (token.MatchF(_L("Dumpinfo"))==0)
+				{
+				gTestCase = EFATPerfDirCacheInfo;
+				}
+			else
+				{
+				test.Printf(_L("Bad command syntax"));
+				test(EFalse);
+				}
+			}
+		
+		if (token.Compare(_L("-p")) == 0 || token.Compare(_L("-P")) == 0)
+			{
+			token.Set(lex.NextToken());
+			if (token.Length() != 0)
+				{
+				gPath = token;
+				}
+			else
+				{
+				test.Printf(_L("Bad command syntax"));
+				test(EFalse);
+				}
+			}
+		
+		if (token.Compare(_L("-b")) == 0 || token.Compare(_L("-B")) == 0)
+			{
+			token.Set(lex.NextToken());
+			if (token.Length() != 0)
+				{
+				gFileNameBase = token;
+				}
+			else
+				{
+				test.Printf(_L("Bad command syntax"));
+				test(EFalse);
+				}
+			}
+		
+		if (token.Compare(_L("-n")) == 0 || token.Compare(_L("-N")) == 0)
+			{
+			token.Set(lex.NextToken());
+			if (token.Length() != 0)
+				{
+				TLex tokenLex;
+				tokenLex.Assign(token);
+				TInt value;
+				tokenLex.Val(value);
+				gFileNo = value;
+				}
+			else
+				{
+				test.Printf(_L("Bad command syntax"));
+				test(EFalse);
+				}
+			}
+			
+		if (token.Compare(_L("-m")) == 0 || token.Compare(_L("-M")) == 0)
+			{
+			token.Set(lex.NextToken());
+			if (token.Length() != 0)
+				{
+				TLex tokenLex;
+				tokenLex.Assign(token);
+				TInt value;
+				tokenLex.Val(value);
+				gCacheClear = value;
+				}
+			else
+				{
+				test.Printf(_L("Bad command syntax"));
+				test(EFalse);
+				}
+			}
+		
+        if (token.Compare(_L("-f")) == 0 || token.Compare(_L("-F")) == 0)
+            {
+            token.Set(lex.NextToken());
+            if (token.Length() != 0)
+                {
+                TLex tokenLex;
+                tokenLex.Assign(token);
+                TInt value;
+                tokenLex.Val(value);
+                gZeroPadFileNumberForFixedLengthFileNames = value;
+                }
+            else
+                {
+                test.Printf(_L("Bad command syntax"));
+                test(EFalse);
+                }
+            }
+		}
+	}
+
+
+/* System Info */
+LOCAL_C void GetSystemInfo()
+	{
+	test.Next(_L("Get System Info"));
+	TFSName fsName;
+	TInt drvNo = -1; 
+	TInt err = TheFs.CharToDrive(gDriveToTest, drvNo);
+	test(err == KErrNone);
+	err = TheFs.FileSystemSubType(drvNo, fsName);
+	test(err == KErrNone);
+	test.Printf(_L("File System: [%S]\n"), &fsName);
+	TVolumeIOParamInfo ioParam;
+	err = TheFs.VolumeIOParam(drvNo, ioParam);
+	test(err == KErrNone);
+	test.Printf(_L("Sector Size: [%d Bytes]\n"), ioParam.iBlockSize);
+	test.Printf(_L("Cluster Size: [%d Bytes]\n"), ioParam.iClusterSize);
+	}
+
+//-----------------------------------------------------------------------------
+/**
+Main Function to call specific test features
+*/
+//-----------------------------------------------------------------------------
+void CallTestsL()
+	{
+	
+	//Interpreting Command Line Arguments
+	ParseMyCommandArguments(); 
+	
+
+	// Get Drive Information
+	GetSystemInfo(); 
+ 	
+ 	
+ 	// Switch Case for Test Functions
+ 	switch(gTestCase)
+		{
+	
+	    //Test Setup
+		case EFATPerfSetup:    
+			{
+			DoTestCaseSetup();
+			break;
+			}
+		
+		//File Create
+		case EFATPerfCreate:
+			{
+			DoTestCaseCreateFile();
+			break;
+			}
+	  	
+	  	// File Open 
+		case EFATPerfOpen:
+			{
+			DoTestCaseOpenFile();
+			break;
+			}
+		
+		// File Delete
+		case EFATPerfDelete:
+			{
+			DoTestCaseDeleteFile();
+			break;
+			}
+		// File Write
+		case EFATPerfWrite:
+			{
+			DoTestCaseWriteFile();
+			break;
+			}
+		
+		// File Read
+		case EFATPerfRead:
+			{
+			DoTestCaseReadFile();
+			break;
+			}
+		// Print / Dump DirCache Info
+		case EFATPerfDirCacheInfo:
+			{
+			DoTestCaseDirCacheInfo();
+			break;
+			}
+		
+		default:
+			break;
+		}
+
+	}
+
+/*-- EOF--*/