testexecfw/stf/stfext/testmodules/teftestmod/teftestmodulefw/tefutilities/TEFUtilityServer/src/tefformatdrive.cpp
--- /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;
+}