kerneltest/f32test/smassstorage/src/t_ms_fsunit.cpp
changeset 0 a41df078684a
child 33 0173bcd7697c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/smassstorage/src/t_ms_fsunit.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,338 @@
+// Copyright (c) 2004-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:
+// Unit tests for the CMassStorageFileSystem class
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#include <f32file.h>
+#include <e32test.h>
+#include <e32std.h>
+#include <e32std_private.h>
+#include <e32svr.h>
+#include <hal.h>
+#include "t_ms_main.h"
+#include "t_ms_common.h"
+#include "cmassstoragefilesystem.h"
+#include "cmassstoragemountcb.h"
+
+// a: Acutally error code;  e: Expected error code
+#define LOG_AND_TEST(a, e) {if (a!=e) {test.Printf(_L("%d\n\r"), a); test(EFalse);}}
+
+_LIT(KMsFsyName, "MassStorageFileSystem");
+LOCAL_D TChar driveLetter;
+
+LOCAL_D TBusLocalDrive* localDrive=NULL;
+
+LOCAL_C void ParseCommandArguments()
+//
+// Parses the command line arguments
+//
+	{
+	TBuf<0x100> cmd;
+	User::CommandLine(cmd);
+	TLex lex(cmd);
+	
+	TPtrC token;
+	token.Set(lex.NextToken());
+	if (token.Length() != 0)
+		{
+		driveLetter = token[0];
+		driveLetter.UpperCase();
+		test.Printf(_L("CmdLine Param=%S"),&token);
+		}
+	else
+		{
+		test.Printf(_L("Not enough command line arguments"));
+		test(EFalse);
+		}
+	}
+	
+LOCAL_C void doMsFsUnitTest()
+	{
+	__UHEAP_MARK;
+	ParseCommandArguments();
+
+	RFs fs;
+	
+	TInt err;
+	TInt driveNumber;
+	err = fs.CharToDrive(driveLetter, driveNumber);
+	test(KErrNone == err);
+	fs.Close();
+	
+	test.Printf(_L("Checking if drive %d is removable\n\r"), driveNumber);
+	TBool removable = isDriveRemovable(driveNumber);
+	if (!removable)
+		{
+		test.Printf(_L("This test is not supported on the specified drive\n\t"));
+		return;
+		}
+	
+	CMassStorageFileSystem* msfs = CMassStorageFileSystem::NewL();
+
+	test.Printf(_L("Calling Install\n\r"));
+	err = msfs->Install();
+	test(err == KErrNone);
+	
+	test.Printf(_L("Comparing name\n\r"));
+	TName name = msfs->Name();
+	test.Printf(_L("Name is %S\n\r"), &name);
+	test(name == KMsFsyName);
+
+	test.Printf(_L("Checking version\n\r"));
+	TVersion ver(1, 0, 0);
+	test(msfs->QueryVersionSupported(ver));
+	
+	test.Printf(_L("Checking IsExtensionSupported\n\r"));
+	test(msfs->IsExtensionSupported());
+	
+	test.Printf(_L("Checking NewMountL\n\r"));
+	//In this case new mount should leave because the controller thread is not started
+	TRAP(err, msfs->NewMountL());
+    LOG_AND_TEST(err, KErrNotReady);
+			
+	test.Printf(_L("Calling unsupported functions\n\r"));
+	TRAP(err, msfs->NewFileL());
+	test(err == KErrNotReady);
+
+	TRAP(err, msfs->NewDirL());
+	test(err == KErrNotReady);
+
+	TRAP(err, msfs->NewFormatL());
+	test(err == KErrNotReady);
+
+	TBuf<1> buf;
+	err = msfs->DefaultPath(buf);
+	test(err == KErrNotSupported);
+
+	TDriveList list;
+	err = msfs->DriveList(list);
+	test(err == KErrNotSupported);
+	
+	test.Printf(_L("Deleting file system object\n\r"));
+	msfs->Close();
+
+	delete msfs;
+	delete localDrive;	
+	
+	__UHEAP_MARKEND;
+
+    test.Printf(_L("MSFS unit test ===>PASS\n"));
+	}
+	
+
+GLDEF_C void t_ms_fsunit()
+//
+// Do all tests
+//
+	{
+    doMsFsUnitTest();
+    }
+
+//=========================================================
+
+EXPORT_C TInt CFsObject::SetName(const TDesC *aName)
+
+	{
+	User::Free(iName);
+	iName=NULL;
+	if (aName!=NULL)
+		{
+		iName=aName->Alloc();
+		if (iName==NULL)
+			return(KErrNoMemory);
+		}
+	return(KErrNone);
+	}
+
+EXPORT_C TName CFsObject::Name() const
+
+	{
+	if (iName)
+		return(*iName);
+	return(NULL);
+	}
+EXPORT_C CFsObject::CFsObject()
+
+	{
+	iAccessCount=1;
+	}
+
+EXPORT_C  CFsObject::~CFsObject()
+	{
+	if(iName)
+		User::Free(iName);
+	iName=NULL;
+	}	
+
+EXPORT_C TBool CFsObject::IsCorrectThread()
+	{
+	return(ETrue);
+	}
+
+EXPORT_C void CFsObject::Close()	
+	{
+	if(iName)
+		User::Free(iName);
+	iName = NULL;
+	}
+	
+EXPORT_C TInt CFsObject::Open()
+	{
+	return KErrNone;
+	}
+//------------------------------------	
+CFileSystem::CFileSystem(void)
+	{
+	}
+CFileSystem::~CFileSystem(void)
+	{
+	}
+	
+
+TInt CFileSystem::DefaultPath(TDes& /*aPath*/) const 
+	{
+	return KErrNone;
+	}
+
+
+EXPORT_C TBool CFileSystem::IsExtensionSupported() const
+	{
+	return(EFalse);
+	}
+
+EXPORT_C TBool CFileSystem::QueryVersionSupported(const TVersion& aVer) const
+	{
+
+	return(User::QueryVersionSupported(iVersion,aVer));
+	}
+	
+EXPORT_C TInt CFileSystem::Remove()
+	{
+
+	return(KErrNone);
+	}	
+
+//--------------------------------------------------
+EXPORT_C TBool IsValidLocalDriveMapping(TInt /*aDrive*/)
+//
+// Is the drive number to local drive mapping valid?
+//
+	{
+
+	return(ETrue);
+	}
+
+
+
+EXPORT_C TBusLocalDrive& GetLocalDrive(TInt aLocalDrive)
+	{
+	
+	TBusLocalDrive* dd=new(ELeave) TBusLocalDrive;
+	TBool mediaCh;
+	
+	dd->Connect(aLocalDrive, mediaCh);
+	localDrive = dd;
+	return *dd;
+
+	
+	}
+	
+EXPORT_C TBool DriveNumberToLocalDriveNumber(TInt aDrive)
+	{
+	return aDrive;
+	}
+
+//---------------------------------------------
+EXPORT_C CLocDrvMountCB::CLocDrvMountCB() {}
+
+EXPORT_C CLocDrvMountCB::~CLocDrvMountCB()
+
+	{
+	__PRINT1(_L("CLocDrvMountCB::~CLocDrvMountCB() 0x%x"),this);
+	if(iProxyDrive)
+		delete(iProxyDrive);
+	}
+	
+//-----------------------------------
+EXPORT_C CMountCB::CMountCB()
+	: iMountQ(_FOFF(CFileCB,iMountLink))
+	{
+
+	}
+
+/**
+Destructor.
+
+Frees resources before destroying the object.
+*/
+EXPORT_C CMountCB::~CMountCB()
+	{
+	delete iVolumeName;
+	}	
+
+//-------------------------------------
+CFsDispatchObject::CFsDispatchObject()
+
+:iDriveNumber(-1) 
+{}
+
+CFsDispatchObject::~CFsDispatchObject()
+	{
+	}
+int CFsDispatchObject::IsCorrectThread(void)
+	{
+	return ETrue;
+	}
+
+EXPORT_C void CFsDispatchObject::Close()
+	{
+	}	
+
+EXPORT_C void CMountCB::IsFileInRom(const TDesC& /*aFileName*/,TUint8*& aFileStart)
+	{
+	aFileStart=NULL;
+	}
+
+int CLocDrvMountCB::CreateLocalDrive(class TBusLocalDrive &) 
+
+	{
+	return KErrNone;
+	}
+void CLocDrvMountCB::DismountedLocalDrive(void) 
+	{
+	}
+	
+EXPORT_C void WriteToDisk(const TDesC& /*aFileName*/, const TDesC8& /*aBuf*/)
+	{
+	}
+
+// Implement the GetInterface methods here as these are usually 
+// exported by EFILE, but these unit tests don't link to it.
+
+TInt CMountCB::GetInterface(TInt /*aInterfaceId*/, TAny*& /*aInterface*/, TAny* /*aInput*/)
+	{
+	return KErrNotSupported;
+	}
+
+TInt CFileSystem::GetInterface(TInt /*aInterfaceId*/, TAny*& /*aInterface*/, TAny* /*aInput*/)
+	{
+	return KErrNotSupported;
+	}
+