testexecfw/stf/stfext/testmodules/teftestmod/teftestmodulefw/tefutilities/TEFUtilityServer/src/tefformatdrive.cpp
changeset 2 8bb370ba6d1d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecfw/stf/stfext/testmodules/teftestmod/teftestmodulefw/tefutilities/TEFUtilityServer/src/tefformatdrive.cpp	Fri Apr 09 10:46:28 2010 +0800
@@ -0,0 +1,288 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:  
+* This class implements the formdrive test step to format given drive
+*
+*/
+
+
+
+/**
+ @file TEFFormaDrive.cpp
+*/
+
+#include "tefformatdrive.h"
+
+//literals
+
+_LIT(KFormatType,		"formattype");
+_LIT(KDriveName,		"drivename");
+
+_LIT(KDriveSeperator,	":");
+_LIT(KDeviceSeperator,	"\\\\");
+_LIT(KDirSeperator,		"\\");
+
+
+/**
+ This is constructor,which sets the test step name
+*/
+CTEFFormatDrive::CTEFFormatDrive()
+	{
+	SetTestStepName(KFormatDrive);
+	}
+
+/**
+ * Run preamble scripts for the test
+ * Make the connection with the File Server and creates a session object
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+TVerdict CTEFFormatDrive::doTestStepPreambleL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	return TestStepResult();
+	}
+
+/**
+ * Run postample scripts for the test
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+TVerdict CTEFFormatDrive::doTestStepPostambleL()
+	{
+	iFs.Close();
+	return TestStepResult();
+	}
+
+/**
+ * Overrides base class virtual
+ * @return - TVerdict codes
+ * Parses buildinfo.txt from \epoc32\... and prints it to TEF log file outout
+ */
+TVerdict CTEFFormatDrive::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Formating Disk"));
+	
+	TDriveUnit	driveUnit;
+	ReadDriveNameL(driveUnit);
+
+	//	Get the format type
+	TPtrC	formatType;
+	if(!GetStringFromConfig(ConfigSection(), KFormatType, formatType))
+		{
+		WARN_PRINTF1(_L("No format type specified - default is EFullFormat"));
+		}
+
+	if(TestStepResult() == EPass)
+		{
+		TBool		formatFlag=EFalse;
+		TDriveName	drivePath(driveUnit.Name());
+		//Format the specified driver.
+		TInt		errCode= FormatDiskL(drivePath, formatType, formatFlag);
+
+		if(formatFlag)
+			{
+			INFO_PRINTF1(_L("Disk is fully formatted"));
+			SetTestStepResult(EPass);
+			}
+		else
+			{
+			INFO_PRINTF2(_L("Error in formatting %D"), errCode);
+			SetTestStepResult(EFail);
+			SetTestStepError(errCode);
+			}
+		}
+
+	return TestStepResult();
+	}
+/**
+This functions reads the drive name specified in the ini file
+@param aDriveName - specifies the drive name
+@panic - system wide error
+*/
+void CTEFFormatDrive::ReadDriveNameL(TDriveUnit &aDriveName)
+{
+	TPtrC driveName;
+	//read the drive name from ini file
+	TInt result = GetStringFromConfig(ConfigSection(),KDriveName,driveName);
+	if(result)
+		{
+		INFO_PRINTF2(_L("Drive name is %S"),&driveName);
+		HBufC*	drivePath;
+		TInt	parseRet=PreParseFileNameL(driveName, drivePath);
+		CleanupStack::PushL(drivePath);
+
+		if ( parseRet==KErrNone )
+			{
+			aDriveName=drivePath->Des();
+			}
+		else
+			{
+			ERR_PRINTF2(_L("Drive %S illegal"), &driveName);
+			SetTestStepResult(EFail);
+			}
+			CleanupStack::PopAndDestroy(drivePath);
+		}
+		else
+		{
+		 ERR_PRINTF1(_L("Unable to read the drive name"));
+		 SetTestStepResult(EFail);
+		}	
+}
+/**
+This method to parse a file name which may include the device name
+@param aInputFileName - input file name which may contain the drive name also
+@param aOutputFileName - holds the return value.
+@panic - system wide error
+*/
+TInt CTEFFormatDrive::PreParseFileNameL(const TDesC& aInputFileName, HBufC*& aOutputFileName)
+	{
+	aOutputFileName=HBufC::NewL(aInputFileName.Length());
+
+	TInt	ret=KErrNone;
+	const	TDesC&	sep=KDeviceSeperator;
+
+	if ( aInputFileName.FindC(sep) == 0 )
+		{
+		//	Starts with device name
+		TPtrC	strippedFileName=aInputFileName.Right(aInputFileName.Length()-sep.Length());
+		INFO_PRINTF2(_L("DeviceSeperator stripped %S"), &strippedFileName);
+
+		TInt	find=strippedFileName.Find(KDirSeperator);
+		TPtrC	driveName(find==KErrNotFound
+							? strippedFileName
+							: strippedFileName.Left(find));
+
+		INFO_PRINTF2(_L("Drive name %S"), &driveName);
+		TFileName	driveNameRead;
+		TInt		drive;
+		TBool		found=EFalse;
+		for ( drive=EDriveA; (drive<=EDriveZ) && (!found); )
+			{
+			if ( iFs.GetDriveName(drive, driveNameRead)==KErrNone )
+				{
+				if ( driveNameRead.Length()>0 )
+					{
+					INFO_PRINTF3(_L("Drive %c:='%S'"), TUint(drive+'A'), &driveNameRead);
+					}
+				found=(driveName.Compare(driveNameRead)==0);
+				}
+			if ( !found )
+				{
+				++drive;
+				}
+			}
+
+		if ( found )
+			{
+			TPtr	ptrTemp=aOutputFileName->Des();
+			ptrTemp.Format(_L("%c"), TUint(drive+'A'));
+			ptrTemp.Append(KDriveSeperator);
+			ptrTemp.Append(strippedFileName.Right(strippedFileName.Length()-driveName.Length()));
+			}
+		else
+			{
+			WARN_PRINTF2(_L("Drive %S not found"), &driveName);
+			ret=KErrNotFound;
+			SetTestStepResult(EFail);
+			}
+		}
+	else
+		{
+		*aOutputFileName=aInputFileName;
+		}
+
+	return ret;
+	}
+/**
+ This functions reads the type of format that users wants to do and also drive name
+ @param aDrivePath - path of the drive to be formated
+ @param aFormatType - type of format 
+ @param aFormatFlag - flag
+ 
+*/
+TInt CTEFFormatDrive::FormatDiskL(TPtrC aDrivePath, TPtrC aFormatType, TBool& aFormatFlag)
+{
+
+	TInt	errCode=KErrNone;
+	//Format type default to EFullFormat
+	TUint	formatType=EFullFormat;
+	if(aFormatType == _L("EHighDensity"))
+		{
+		formatType = EHighDensity;
+		}
+	else if(aFormatType == _L("ELowDensity"))
+		{
+		formatType = ELowDensity;
+		}
+	else if(aFormatType == _L("EQuickFormat"))
+		{
+		formatType = EQuickFormat;
+		}
+	else if((aFormatType == _L("EFullFormat")) || (aFormatType.Length() == 0))
+		{
+		formatType = EFullFormat;
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Illegal format type %S."), &aFormatType);
+		errCode=KErrArgument;
+		}
+
+	aFormatFlag = EFalse;
+
+	if ( errCode == KErrNone )
+		{
+		//Open the format object for format
+		//Format object to format.
+		RFormat	formatObj;
+
+		//To hold the number of tracks in the disk
+		TInt	trackCount=0;
+
+		//Error code
+		errCode = formatObj.Open(iFs, aDrivePath, formatType, trackCount);
+		switch ( errCode )
+			{
+		case KErrNone:
+			//Format while track remains for formating
+			while(trackCount>0)
+				{
+				errCode = formatObj.Next(trackCount);
+				if(errCode != KErrNone)
+					{
+					ERR_PRINTF2(_L("Error %d formatObj.Next."), errCode);
+					ERR_PRINTF2(_L("Drive Path  %S."), &aDrivePath);
+					ERR_PRINTF2(_L("Format Type %d."), formatType);
+					ERR_PRINTF2(_L("Track Count %d."), trackCount);
+					aFormatFlag = EFalse;
+					break;
+					}
+				else
+					{
+					aFormatFlag = ETrue;
+					}
+				}
+			formatObj.Close();
+			break;
+		default:
+			ERR_PRINTF2(_L("Error %d formatObj.Open."), errCode);
+			ERR_PRINTF2(_L("Drive Path  %S."), &aDrivePath);
+			ERR_PRINTF2(_L("Format Type %d."), formatType);
+			ERR_PRINTF2(_L("Track Count %d."), trackCount);
+			}
+		}
+
+	return errCode;
+}