kerneltest/f32test/rofs/src/t_rofsmultiple.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/rofs/src/t_rofsmultiple.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,328 @@
+// 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:
+// Test opening of hidden, replaced and newly added files belonging to multiple ROFS.
+// 
+//
+
+#include <e32std.h>
+#include <e32std_private.h>
+#include <e32test.h>
+#include <f32file.h>
+#include "utl.h"
+
+GLREF_D RFs TheFs;
+
+RTest test( _L("T_ROFSMULTIPLE") );
+
+// Required to test multiple ROFS
+_LIT( KTestHidden1, "Multiple\\hidden1.txt" );
+_LIT( KTestHidden2, "Multiple\\hidden2.txt" );
+_LIT( KTestHidden3, "Multiple\\hidden3.txt" );
+_LIT( KTestNew1, "Multiple\\new1.txt" );
+_LIT( KTestNew2, "Multiple\\new2.txt" );
+_LIT( KTestNew3, "Multiple\\new3.txt" );
+_LIT( KTestNew4, "Multiple\\new4.txt" );
+_LIT( KTestReplaceMe1, "Multiple\\replaceme1.txt" );
+_LIT( KTestReplaceMe2, "Multiple\\replaceme2.txt" );
+_LIT( KTestReplaceMe3, "Multiple\\replaceme3.txt" );
+_LIT( KTestReplaceMe4, "Multiple\\replaceme4.txt" );
+_LIT( KTestReplaceMe5, "Multiple\\replaceme5.txt" );
+_LIT( KTestRom,        "Multiple\\rom.txt" );
+_LIT( KTestRomHide,    "Multiple\\romhide.txt" );
+_LIT( KTestRomReplace, "Multiple\\romreplace.txt" );
+_LIT( KTestRomReplaceFat, "Multiple\\romreplacefat.txt" );
+_LIT8( KReplaceMe8FileContent1, "rofs1" );
+_LIT8( KReplaceMe8FileContent2, "rofs2" );
+_LIT8( KReplaceMe8FileContent3, "rofs3" );
+_LIT8( KReplaceMe8FileContent5, "cfat5" );
+
+
+_LIT( KRootFileMultiple, "Multiple\\multirofs.txt");
+
+_LIT( KDriveBase, " :\\" );
+
+const TInt KNewlyAddedFilesCount = 5;
+const TDesC* const newlyAddedFilesArray[5] =
+	{
+	&KTestNew1, &KTestNew2, &KTestNew3, &KTestNew4, &KTestRom
+	};
+	
+const TInt KReplacedFilesCount = 7;
+const TDesC* const replacedFilesArray[7] =
+	{
+	&KTestReplaceMe1, &KTestReplaceMe2, &KTestReplaceMe3, &KTestReplaceMe4, &KTestRomReplace, &KTestReplaceMe5,  &KTestRomReplaceFat
+	};
+
+const TInt KHiddenFilesCount = 4;
+const TDesC* const hiddenFilesArray[4] =
+	{
+	&KTestHidden1, &KTestHidden2, &KTestHidden3, &KTestRomHide 
+	};
+
+LOCAL_C void TestMultipleRofsL(TInt aDriveToTest)
+//
+// Test multiple Rofs
+//
+	{
+	TFileName name(KDriveBase);
+	name[0] = TText('A' + aDriveToTest);
+	TInt i;
+	// hidden
+	test.Next( _L("Test opening hidden files.") );
+	for( i = 0; i < KHiddenFilesCount; i++ )
+		{
+		name.SetLength( 3 );	// trim back to drive specifier
+		name.Append( *hiddenFilesArray[i] );
+		test.Printf( _L("Opening file %S\n"), &name );
+		RFile file;
+		TInt r = file.Open( TheFs, name, EFileRead );
+		TEST_FOR_MATCH( r, KErrNotFound );
+		file.Close();
+		}
+
+	// newly added
+	test.Next( _L("Test opening newly added files.") );
+	for( i = 0; i < KNewlyAddedFilesCount; i++ )
+		{
+		name.SetLength( 3 );
+		name.Append( *newlyAddedFilesArray[i] );
+		test.Printf( _L("Opening file %S\n"), &name );
+		RFile file;
+		TInt r = file.Open( TheFs, name, EFileRead );
+		TEST_FOR_ERROR( r );
+		file.Close();
+		}
+	
+	// replaced	
+	test.Next( _L("Test opening replaced files.") );
+	for( i = 0; i < KReplacedFilesCount; i++ )
+		{
+		name.SetLength( 3 );
+		name.Append( *replacedFilesArray[i] );
+		test.Printf( _L("Opening file %S\n"), &name );
+		RFile file;
+		TInt r = file.Open( TheFs, name, EFileRead );
+		TEST_FOR_ERROR( r );
+		TBuf8<5> buf;
+		r = file.Read( buf );
+		TEST_FOR_ERROR( r );
+		if ( i == 0 )
+			test(buf == KReplaceMe8FileContent2);
+		else if (i<4) // i == 1 -> 3
+			test(buf == KReplaceMe8FileContent3);
+		else if (i==4)
+			test(buf == KReplaceMe8FileContent1);
+		else 
+			test(buf == KReplaceMe8FileContent5);			
+		file.Close();
+		}
+	}
+
+LOCAL_C void TestFilesInRomL(TInt aDriveToTest)
+//
+// Test whether files in ROFS appear to be in ROM area of Z:
+//
+	{
+	test.Next( _L("Test if file is in ROM area of Z:") );	
+	TFileName name(KDriveBase);
+	name[0] = TText('A' + aDriveToTest);
+
+	TInt i;
+
+	for( i = 0; i < KNewlyAddedFilesCount; i++ )
+		{
+		name.SetLength( 3 );	// trim back to drive specifier
+		name.Append( *newlyAddedFilesArray[i] );
+		test.Printf( _L("Testing newly added file %S\n"), &name );
+		
+		
+		if (i==KNewlyAddedFilesCount)
+			test( NULL != TheFs.IsFileInRom( name ) );
+		else
+			test( NULL == TheFs.IsFileInRom( name ) );
+		}
+
+	test.Next( _L("Test if replaced file is in ROM area of Z:") );	
+
+	for( i = 0; i < KReplacedFilesCount; i++ )
+		{
+		name.SetLength( 3 );
+		name.Append( *replacedFilesArray[i] );
+		test.Printf( _L("Testing replaced file %S\n"), &name );
+		test( NULL == TheFs.IsFileInRom( name ) );
+		}
+
+	test.Next( _L("Test if hidden file is in ROM area of Z:") );
+
+	for( i = 0; i < KHiddenFilesCount; i++ )
+		{
+		name.SetLength( 3 );
+		name.Append( *hiddenFilesArray[i] );
+		test.Printf( _L("Testing hidden file %S\n"), &name );
+		test( NULL == TheFs.IsFileInRom( name ) );
+		}	
+	}
+
+LOCAL_C void TestReadFileSectionL(TInt aDriveToTest)
+//
+//	Test reading data from a file without opening it.
+//
+	{
+	test.Next( _L("Testing ReadFileSection()."));	
+	
+	TBuf8<12> testDes;
+	TInt r;
+
+	TFileName name(KDriveBase);
+	name[0] = TText('A' + aDriveToTest);
+	TInt i;
+	for( i = 0; i < KNewlyAddedFilesCount; i++ )
+		{
+		name.SetLength( 3 );	// trim back to drive specifier
+		name.Append( *newlyAddedFilesArray[i] );
+		r=TheFs.ReadFileSection(name,0,testDes,3);
+		test(r==KErrNone);
+		test(testDes.Length()==3);
+		test(testDes==_L8("hel"));
+
+		name.SetLength( 3 );
+		name.Append( *newlyAddedFilesArray[i] );
+		r=TheFs.ReadFileSection(name,0,testDes,4);
+		test(r==KErrNone);
+		test(testDes.Length()==4);
+		test(testDes==_L8("hell"));
+
+		name.SetLength( 3 );
+		name.Append( *newlyAddedFilesArray[i] );
+		r=TheFs.ReadFileSection(name,1,testDes,4);
+		test(r==KErrNone);
+		test(testDes.Length()==4);
+		test(testDes==_L8("ello"));
+		}
+
+	test.Next( _L("Testing ReadFileSection() on replaced files."));	
+
+	for( i = 0; i < KReplacedFilesCount; i++ )
+		{
+		name.SetLength( 3 );
+		name.Append( *replacedFilesArray[i] );
+		r=TheFs.ReadFileSection(name,4,testDes,1);
+		test(r==KErrNone);
+		test(testDes.Length()==1);
+		if ( i == 0 )
+			test(testDes==_L8("2"));
+		else if (i<4)
+			test(testDes==_L8("3"));
+		else if (i==4)
+			test(testDes==_L8("1"));
+		else 
+			test(testDes==_L8("5"));
+		}
+
+	test.Next( _L("Testing ReadFileSection() on hidden files."));	
+
+	for( i = 0; i < KHiddenFilesCount; i++ )
+		{	
+		name.SetLength( 3 );
+		name.Append( *hiddenFilesArray[i] );
+		r=TheFs.ReadFileSection(name,0,testDes,1);
+		test(r==KErrNotFound);
+		}
+	}
+
+LOCAL_C void TestEntryL(TInt aDriveToTest)
+//
+//	Test accessing the entry details for a hidden file.
+//
+	{
+	test.Next( _L("Test accessing the entry details for replaced files.") );
+	TFileName name(KDriveBase);
+	name[0] = TText('A' + aDriveToTest);
+	TEntry entry;
+	TInt r;
+
+	TTime dirtimes[4] = { TDateTime(2005,EDecember,9,2,0,3,0),		// 10/12/2005
+						TDateTime(2005,EDecember,14,4,30,33,0),		// 15/12/2005
+						TDateTime(2006,EJanuary,1,15,45,37,0), 		// 02/01/2006
+						TDateTime(2006,EAugust,10,17,47,04,0) }; 	// 11/08/2006
+
+	TInt i;
+	for( i = 0; i < KReplacedFilesCount; i++ )
+		{
+		name.SetLength( 3 );	// trim back to drive specifier	
+		name.Append( *replacedFilesArray[i] );
+		r = TheFs.Entry(name, entry);
+		test(r==KErrNone);
+		test (entry.iName==replacedFilesArray[i]->Right(entry.iName.Length()));
+
+		if ( i == 0 )
+			test(entry.iModified==dirtimes[1]);
+		else if (i<4)
+			test(entry.iModified==dirtimes[2]);
+		else if (i==4)
+			test(entry.iModified==dirtimes[0]);
+		else
+			test(entry.iModified==dirtimes[3]);
+		}
+	
+	test.Next( _L("Test accessing the entry details for hidden files.") );
+
+	for ( i = 0; i < KHiddenFilesCount; i++ )
+		{	
+		name.SetLength( 3 );
+		name.Append( *hiddenFilesArray[i] );
+		r = TheFs.Entry(name, entry);
+		test(r==KErrNotFound);
+		}
+	}
+
+//************************
+// Entry point
+
+void DoTestL(TInt aDriveToTest)
+	{
+	test.Title();
+	test.Start( _L("Testing opening hidden, replaced and newly added files belonging to multiple ROFS.") );
+
+	test.Printf( _L("Looking for multiple ROFS..\n"));
+	TBool multipleRofs = EFalse;
+	TFileName name(KDriveBase);
+	name[0] = TText('A' + aDriveToTest);
+
+	name.SetLength( 3 );	// trim back to drive specifier
+	name.Append( KRootFileMultiple );
+
+	RFile file;
+	test.Printf( _L("Attempt to open file %S..\n"), &name );
+	TInt r = file.Open( TheFs, name, EFileRead );
+	if(r==KErrNone)
+		{
+		multipleRofs=ETrue;
+		file.Close();
+		test.Printf( _L("Multiple ROFS found. %S is present.\n"), &name);
+		}
+	else if(r==KErrNotFound)
+		{
+		test.Printf( _L("No multiple ROFS found. %S is not present.\n"), &name);
+		}
+	
+	if (multipleRofs)
+		{	
+		TestMultipleRofsL(aDriveToTest);
+		TestFilesInRomL(aDriveToTest);
+		TestReadFileSectionL(aDriveToTest);
+		TestEntryL(aDriveToTest);
+		}
+	test.End();
+	}