baseintegtests/baseintegrationtest/testsuites/fat32/src/basetestfat32filldisk.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseintegtests/baseintegrationtest/testsuites/fat32/src/basetestfat32filldisk.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,159 @@
+// Copyright (c) 2006-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:
+// Perofrms the filling of the disk to its maximum capacity
+// 
+//
+
+
+#include <e32def.h> 
+#include "basetestfat32filldisk.h"
+
+/**
+Class Constructor
+*/		    
+CBaseTestFat32FillDisk::CBaseTestFat32FillDisk()
+	{
+	SetTestStepName(KTestStepFillDisk);
+	}
+	
+/**
+Class Destructor
+*/
+CBaseTestFat32FillDisk::~CBaseTestFat32FillDisk() 
+	{
+	}
+
+/**
+Thread that sends a signal along the serial port so that it is not assumed 
+that the board has hung.
+*/
+TInt Thread1Func(TAny* /*aPtr*/)
+	{
+	for(;;)
+		{
+		RDebug::Printf("Filling the disk...");
+		User::After(600000000);
+		}
+	}
+	
+/** 
+Filling the disk to its maximum capacity by writing 1 file.
+If the disk is greater than 2GB in size, 2 files are created.  
+
+@return EPass if test passes and EFail if test fails
+*/ 		    
+TVerdict CBaseTestFat32FillDisk::doTestStepL()
+	{
+	SetTestStepResult(EFail);
+	TVolumeInfo iInfo;
+	RFile rFile;
+	TInt filesize = 0;
+	RFile rFile2;
+	TInt filesize2 = 0;	
+	RFile rFile3;
+	TInt filesize3 = 0;	
+	TInt  r = KErrNone;
+	r = iTheFs.Volume(iInfo, CurrentDrive());
+	if (r != KErrNone)
+	INFO_PRINTF2(_L("volume info for %C:"), (TUint)iDriveToTest);
+	_LIT(KFileReplace, "RFile::Replace, epecting KErrNone");
+	r = rFile.Replace(iTheFs, _L("\\TEST.txt"), EFileWrite);				
+	FAT_TEST_VAL(r==KErrNone, KFileReplace, r);
+	
+	TBuf<20> threadName1 =_L("Thread1");
+	RThread thread1;
+	r = thread1.Create(threadName1,Thread1Func,KDefaultStackSize,0x1000,0x1000,NULL);
+	if (r != KErrNone)
+		{
+		INFO_PRINTF2(_L("Could not create thread1 - r=%d"),r);
+		}
+	thread1.Resume();
+	
+	TInt64 count = 0;
+	TBuf8<4096> buffer(4096); 
+	r = KErrNone;
+	while ((count < iInfo.iSize) && (r == KErrNone))
+		{
+		r=rFile.Write(buffer,4096);
+		count = count + 4096;
+		} ;
+	rFile.Size(filesize);
+	INFO_PRINTF2(_L("after filling r = %d"),r);
+	if (r == KErrTooBig)
+		{
+		r = rFile2.Replace(iTheFs, _L("\\TEST2.txt"), EFileWrite);				
+		FAT_TEST_VAL(r == KErrNone, KFileReplace, r);
+		TInt64 count2 = 0;
+		TBuf8<4096> buffer2(4096); 
+		r = KErrNone;
+		while ((count2 < (iInfo.iSize - filesize)) && (r == KErrNone))
+			{
+			r=rFile2.Write(buffer2,4096);
+			count2 = count2 + 4096;
+			} ;
+		rFile2.Size(filesize2);
+		}
+
+	if (r == KErrDiskFull)
+		{
+		INFO_PRINTF2(_L("Disk full on %c:\n"), (TUint)iDriveToTest);
+		SetTestStepResult(EPass);
+		}
+
+	
+	if(r != KErrNone && r != KErrDiskFull && r != KErrTooBig)
+		{
+		INFO_PRINTF4(_L("Write Failed:%d FileSize:%d DiskFreeSize:%d"), r, filesize,I64INT(iInfo.iFree));
+		SetTestStepResult(EFail);
+		thread1.Kill(r);
+		thread1.Close();
+		return 	TestStepResult();
+		}
+
+	if (r == KErrNone && r != KErrDiskFull)
+		{
+		r = rFile3.Replace(iTheFs, _L("\\TEST3.txt"), EFileWrite);	
+		r = iTheFs.Volume(iInfo, CurrentDrive());
+		TInt extra = iInfo.iFree;
+		INFO_PRINTF2(_L("extra = %d:\n"), extra);
+		rFile3.SetSize(extra);
+		rFile3.Size(filesize3);
+		}
+	
+	r = iTheFs.Volume(iInfo, CurrentDrive());
+	if (iInfo.iSize - iInfo.iFree == iInfo.iSize)
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	rFile.Close();	
+	rFile2.Close();
+	rFile3.Close();
+	TInt64 totalFileSize = filesize + filesize2 + filesize3;	
+
+	r = iTheFs.Volume(iInfo, CurrentDrive());
+	INFO_PRINTF2(_L("File size1 = %d"),filesize);
+	INFO_PRINTF2(_L("File size2 = %d"),filesize2);
+	INFO_PRINTF2(_L("File size3 = %d"),filesize3);
+	INFO_PRINTF2(_L("Total File size = %Ld"),totalFileSize);
+	INFO_PRINTF4(_L("Free space on %c: %Ld KB (out of %Ld KB)\n"),
+				(TUint)iDriveToTest,((iInfo.iFree) / 1024),((iInfo.iSize) / 1024));
+	
+
+	thread1.Kill(r);
+	thread1.Close();
+	return TestStepResult();
+
+	}
+