kerneltest/f32test/server/t_swapfsys.cpp
author Tom Cosgrove <tom.cosgrove@nokia.com>
Fri, 28 May 2010 16:29:07 +0100
changeset 30 8aab599e3476
parent 0 a41df078684a
permissions -rw-r--r--
Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h) Have multiple extension sections in the bld.inf, one for each version of the compiler. The RVCT version building the tools will build the runtime libraries for its version, but make sure we extract all the other versions from zip archives. Also add the archive for RVCT4.

// Copyright (c) 2007-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:
// f32test\server\t_swapfilesystem.cpp
// 
//

#include <f32file.h>
#include <e32test.h>

_LIT(KTestString,"t_swapfilesystem");

LOCAL_D RTest test(KTestString);

LOCAL_D RFs TheFs;

LOCAL_D TChar gDriveToTest;

_LIT(KFsNameComposite,"Composite");
_LIT(KFsNameFat,      "Fat");

//---------------------------------------------------------------------------------------------
//! @SYMTestCaseID      PBASE-T_SWAPFSYS-0602
//! @SYMTestCaseDesc    Swap current file system with current file system
//! @SYMDEF 			DEF101639 RFs::SwapFileSystem is not tested by f32test
//! @SYMTestPriority    Medium
//! @SYMTestActions     1. Get name of the file system currently mounted on the drive
//! 					2. Swap current file system with the same one
//! @SYMTestExpectedResults 1. Error code KErrAlreadyExists if Composite file is
//!							   current file system
//!							2. Error code KErrNotSupported if the drive is Z as on this drive,
//!							   only composite file system can be swapped only once
//!							3. Error codes KErrNone, KErrNotSupported or KErrInUse, otherwise.
//---------------------------------------------------------------------------------------------

LOCAL_C TInt TestSwapFSCurrent(TChar aDriveLetter)
// 
// If no file system is mounted / error in getting file system name, skip the test
// 
	{
	TInt 		err = KErrNone;
	TInt 		driveNumber;
	TFileName 	curFSName;
	TFileName 	newFSName;
	
	test.Next(_L("\nSwap current file system with same file system"));
	
	test.Printf(_L("\nTest is run on drive %c"),TUint(aDriveLetter));
	
	err = TheFs.CharToDrive(aDriveLetter, driveNumber);
	if(KErrNone != err)
		{
		test.Printf(_L("\nInvalid drive"));
		test(EFalse);
		}
	
	// Find current file system name
	err = TheFs.FileSystemName(curFSName,driveNumber);
	if(KErrNone != err)
		{
		test.Printf(_L("\nSkipping current test as File System is NOT mounted / error in getting the name."));
		return (err);
		}
	
	test.Printf(_L("\nName of the file system currently mounted on this drive is %s"),curFSName.Ptr());
	
	newFSName = curFSName;
	
	test.Printf(_L("\nName of the file system to be mounted on this drive is %s"),newFSName.Ptr());
	
	err = TheFs.SwapFileSystem(curFSName,newFSName,driveNumber);
	
	test.Printf(_L("\nError code is %d"),err);
	
	if(curFSName.CompareF(KFsNameComposite) == 0)
		{
		// This is unique case: 
		// Swap Composite (current) with Composite (new)
		test(KErrAlreadyExists == err);
		}
	else if(driveNumber == EDriveZ)
		{
		// This is another such case: 
		// On Z Drive, only Swap with Composite is allowed
		test(KErrNotSupported  == err);
		}
	else
		{
		// Other / generic cases
		test(KErrNone          == err || 
			 KErrNotSupported  == err ||
		     KErrInUse         == err   );
		}
	
	test.Printf(_L("\nCurrent test is completed."));
	
	return (KErrNone);
	}

//---------------------------------------------------------------------------------------------
//! @SYMTestCaseID      PBASE-T_SWAPFSYS-0603
//! @SYMTestCaseDesc    Swap current file system with FAT file system
//! @SYMDEF 			DEF101639 RFs::SwapFileSystem is not tested by f32test
//! @SYMTestPriority    Medium
//! @SYMTestActions     1. Get name of the file system currently mounted on the drive
//! 					2. Swap the current file system with FAT file system
//! @SYMTestExpectedResults 1. Error code KErrNotSupported on drive Z
//!							2. Error codes KErrNone, KErrNotSupported or KErrInUse, otherwise
//---------------------------------------------------------------------------------------------
LOCAL_C TInt TestSwapFSFat(TChar aDriveLetter)
// 
// It is always assumed that FAT is always available!!
// If no file system is mounted / error in getting file system name, skip the test
// 
	{
	TInt 		err = KErrNone;
	TInt 		driveNumber;
	TFileName 	curFSName;
	TFileName 	newFSName;
	
	test.Next(_L("\nSwap current file system with FAT File System"));
	
	test.Printf(_L("\nTest is run on drive %c"),TUint(aDriveLetter));
	err = TheFs.CharToDrive(aDriveLetter, driveNumber);
	if(KErrNone != err)
		{
		test.Printf(_L("\nInvalid drive"));
		test(EFalse);
		}
	
	// Find current file system name
	err = TheFs.FileSystemName(curFSName,driveNumber);
	if(KErrNone != err)
		{
		test.Printf(_L("\nSkipping current test as File System is NOT mounted / error in getting the name."));
		return (err);
		}
	
	test.Printf(_L("\nName of the file system currently mounted on this drive is %s"),curFSName.Ptr());
	
	newFSName = KFsNameFat;
	
	test.Printf(_L("\nName of the file system to be mounted on this drive is %s"),newFSName.Ptr());
	
	err = TheFs.SwapFileSystem(curFSName,newFSName,driveNumber);
	
	test.Printf(_L("\nError code is %d"),err);
	
	if(driveNumber == EDriveZ)
		{
		// This is unique case: 
		// On Z Drive, only Swap with Composite is allowed
		test(KErrNotSupported  == err);
		}
	else
		{
		// Other / generic cases
		test(KErrNone          == err || 
			 KErrNotSupported  == err ||
		     KErrInUse         == err   );		
		}
	
	test.Printf(_L("\nCurrent test is completed."));
	
	return (KErrNone);
	}


//---------------------------------------------------------------------------------------------
//! @SYMTestCaseID      PBASE-T_SWAPFSYS-0604
//! @SYMTestCaseDesc    Swap current file system with Composite File System
//! @SYMDEF 			DEF101639 RFs::SwapFileSystem is not tested by f32test
//! @SYMTestPriority    Medium
//! @SYMTestActions     1. Add Composite file system to the file server
//!						   to know its availability
//! 					2. Get the current file system name mounted on the test drive
//! 					3. Swap the current file system with Composite file system
//! @SYMTestExpectedResults 1. KErrNotFound is composite file system is not available
//!							2. Error codes KErrAlreadyExists, KErrInUse or KErrNone, on drive Z
//!							3. Error codes KErrNotSupported, KErrAlreadyExists or KErrInUse, 
//!                            on other drives
//---------------------------------------------------------------------------------------------
LOCAL_C TInt TestSwapFSComposite(TChar aDriveLetter)
// 
// If no file system is mounted / error in getting file system name, skip the test
// 
	{
	TInt 		err = KErrNone;
	TInt 		driveNumber;
	TFileName 	curFSName;
	TFileName 	newFSName;
	TBool		compFSAvailable = EFalse;
	
	test.Next(_L("\nSwap current file system with Composite File System"));
	
	test.Printf(_L("\nTest is run on drive is %c"),TUint(aDriveLetter));
	err = TheFs.CharToDrive(aDriveLetter, driveNumber);
	if(KErrNone != err)
		{
		test.Printf(_L("\nInvalid drive"));
		test(EFalse);
		}
	
	err = TheFs.AddFileSystem(_L("ecomp.fsy"));
	
	if (KErrNone == err || KErrAlreadyExists == err)
		{
		compFSAvailable = ETrue;
		}
	
	// Find current file system name
	err = TheFs.FileSystemName(curFSName,driveNumber);
	if(KErrNone != err)
		{
		test.Printf(_L("\nFile System NOT mounted. Quiting current test"));
		return (err);
		}
	
	test.Printf(_L("\nName of the file system currently mounted on this drive is %s"),curFSName.Ptr());
	
	newFSName = KFsNameComposite;
	
	test.Printf(_L("\nName of the file system to be mounted on this drive is %s"),newFSName.Ptr());
	
	err = TheFs.SwapFileSystem(curFSName,newFSName,driveNumber);
	
	test.Printf(_L("\nError code is %d"),err);
	
	if(compFSAvailable)
		{
		//Composite is available!!
		if(driveNumber == EDriveZ)
			{
			test(KErrAlreadyExists == err ||
				 KErrInUse         == err ||
				 KErrNone		   == err   );
			}
		else
			{
			test(KErrNotSupported  == err ||
			 	 KErrAlreadyExists == err ||
			     KErrInUse         == err   );			
			}
		}
	else
		{
			//Composote NOT available!!
			test(KErrNotFound == err);		
		}
	
	test.Printf(_L("\nCurrent test is completed."));
	
	return (KErrNone);	
	}

LOCAL_C void ParseCommandArguments()
//
//
//
	{
	TBuf<0x100> cmd;
	User::CommandLine(cmd);
	TLex lex(cmd);
	TPtrC token=lex.NextToken();
	TFileName thisfile=RProcess().FileName();
	if (token.MatchF(thisfile)==0)
		{
		token.Set(lex.NextToken());
		}
	test.Printf(_L("CLP=%S"),&token);

	if(token.Length()!=0)		
		{
		gDriveToTest=token[0];
		gDriveToTest.UpperCase();
		}
	else						
		gDriveToTest='C';
	}


GLDEF_C TInt E32Main()
//
// 
//
	{
	TInt err;
	
	test.Title();
	
	err = TheFs.Connect();
	
	test(KErrNone == err);
	
	ParseCommandArguments();
	
#if defined(__WINS__)
		// The emulator z: drive maps onto the PCs local file system
		// and swapping / unmounting it is not allowed.
		// Hence, skip the test on emulated Z: drive.
	if (gDriveToTest != 'Z')
		{
		TestSwapFSCurrent(gDriveToTest);
		TestSwapFSFat(gDriveToTest);
		TestSwapFSComposite(gDriveToTest);
		}
#else
	TestSwapFSCurrent(gDriveToTest);
	TestSwapFSFat(gDriveToTest);
	TestSwapFSComposite(gDriveToTest);
#endif
	
	TheFs.Close();
	
	test.Printf(_L("t_swapfilesystem completed successfully"));
	
	test.Close();
	
	return KErrNone;
	}