baseapitest/basesvs/conformance/f32/fat32/src/t_fat32clusterbound.cpp
changeset 0 a41df078684a
child 15 4122176ea935
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseapitest/basesvs/conformance/f32/fat32/src/t_fat32clusterbound.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,180 @@
+/*
+* 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 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:
+*
+*/
+
+
+
+#include "t_fat32clusterbound.h"
+
+/**
+Class Constructor
+*/		    
+CBaseTestFat32ClusterBound::CBaseTestFat32ClusterBound()
+	{
+	SetTestStepName(KTestStepClusterBound);
+	}
+	
+/**
+Class Destructor
+*/	
+CBaseTestFat32ClusterBound::~CBaseTestFat32ClusterBound() 
+	{
+	}
+
+
+/** 
+This test should be performed once the disk has been filled to its max capacity. 
+Obtains the cluster bounds action from the configuration file and calls the function 
+that is required to be carried out
+ 
+@return EPass if test passes and EFail if test fails
+*/ 		    
+TVerdict CBaseTestFat32ClusterBound::doTestStepL()
+	{
+	SetTestStepResult(EFail);
+	TInt r;
+	TBufC<20> clusterAction;
+	TPtrC16 clusteraction = clusterAction;
+	_LIT(KClusterAction,"ClusterAction");
+	TBool alright = GetStringFromConfig(ConfigSection(), KClusterAction, clusteraction);
+	if (alright)		
+		{			
+		if (clusteraction == _L("WriteToFile"))
+			{
+			r = TestClusterBoundsWriteFile();
+			if (r != KErrNone)
+				{
+				INFO_PRINTF1(_L("ClusterAction:WriteToFile failed"));
+				SetTestStepResult(EFail);
+				}
+			else
+				{
+				INFO_PRINTF1(_L("ClusterAction:WriteToFile passed"));
+				SetTestStepResult(EPass);
+				}
+			}
+		if (clusteraction == _L("CreateFiles"))
+			{
+			r = TestClusterBoundsCreateFiles();
+			if (r != KErrNone)
+				{
+				INFO_PRINTF1(_L("ClusterAction:CreateFiles failed"));
+				SetTestStepResult(EFail);
+				}
+			else
+				{
+				INFO_PRINTF1(_L("ClusterAction:CreateFiles passed"));
+				SetTestStepResult(EPass);
+				}
+			}
+		}
+	else 
+		{
+		INFO_PRINTF1(_L("No ClusterAction specified in ini file"));
+		SetTestStepResult(EFail);
+		}						
+	return TestStepResult();
+	}
+
+/** 
+Attepts to access out of bounds clusters by creating another file and 
+attempting to write to it.
+
+@return KErrNone if successfull, otherwise one of the other system-wide 
+error codes.
+*/
+TInt CBaseTestFat32ClusterBound::TestClusterBoundsWriteFile()
+{
+	TInt r;
+	TVolumeInfo iInfo;
+	
+	TInt freeSpace;
+	RFile rFile;
+	
+	r = iTheFs.Volume(iInfo, CurrentDrive());
+	if(r != KErrNone)
+		{
+		INFO_PRINTF2(_L("Unable to obtain the volume information, error = %d"), r);
+		return r;
+		}
+	freeSpace = iInfo.iFree;
+	TBuf8<100> buffer3(freeSpace + 1); 
+	r = rFile.Replace(iTheFs, _L("TESTClusterBound.txt"), EFileWrite);
+	if(r != KErrNone)
+		{
+		INFO_PRINTF2(_L("Unable to create the file, error = %d"), r);
+		return r;
+		}				
+	r = rFile.Write(buffer3,freeSpace + 1);
+	if (r == KErrDiskFull)
+		{
+		INFO_PRINTF1(_L("Disk is Full - Attempting to access out of bounds clusters returns the correct error value"));
+		rFile.Close();
+		return KErrNone;
+		}
+	else 
+		{
+		INFO_PRINTF2(_L("Attempting to access out of bounds clusters returns the incorrect error value %d"), r);
+		rFile.Close();
+		return r;
+		}
+
+}
+
+/** 
+Attepts to access out of bounds clusters by creating empty files to fill
+the root directory and following this, attempting to create another empty file 
+
+@return KErrNone if successfull, otherwise one of the other system-wide 
+error codes.
+*/
+TInt CBaseTestFat32ClusterBound::TestClusterBoundsCreateFiles()
+	{
+	RFile rFile;
+	_LIT(KFileName, "File%d.txt");
+	
+	TInt sizeOfShortDir = 16 * 4; //Short dir is 64 bytes long
+	TInt bytesPerSector = iBPB_BytsPerSec;
+	TInt sizeOfCluster = iBPB_SecPerClus * bytesPerSector;
+	TInt filesToCreate = sizeOfCluster / sizeOfShortDir;
+	filesToCreate = filesToCreate - 1;
+	
+	TInt r;
+	TInt i;
+	for (i = 0; i < filesToCreate; i++)
+		{
+		TBuf<20> fileName;
+		TInt fileNumber = i + 1;
+		fileName.Format(KFileName, fileNumber);
+		r= rFile.Replace(iTheFs,fileName , EFileWrite);
+		if (r == KErrDiskFull)
+		break;
+		rFile.Close(); 
+		}
+	
+
+	r = rFile.Replace(iTheFs, _L("TFile.txt") , EFileWrite);
+	if (r == KErrDiskFull)
+		{
+		INFO_PRINTF1(_L("Attempting to access out of bounds clusters returns the correct error value"));
+		return KErrNone;
+		}
+	else 
+		{
+		INFO_PRINTF2(_L("Attempting to access out of bounds clusters returns the incorrect error value %d"), r);
+		return r;
+		}
+	}