kerneltest/e32test/system/t_regram.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/system/t_regram.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,346 @@
+// Copyright (c) 1997-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:
+// e32test\system\t_regram.cpp
+// 
+//
+
+#include <e32test.h>
+#include <e32svr.h>
+
+//
+// This test takes forever to run and destroys the internal Ram drive.
+//
+
+LOCAL_D RTest test(_L("T_REGRAM"));
+
+void deleteReg()
+//
+// Delete everything from the registry
+//
+	{
+	TUid uid;
+	TRegistryIter riter;
+	riter.Reset();
+	while (riter.Next(uid)==KErrNone)
+		{
+		TRegistryCategory cat(uid);
+		cat.DeleteAllItems();
+		}
+	}
+
+TInt fillReg(const TDesC8 &aDes, TInt aEntries)
+//
+// Fill the registry with big nasty monsters
+// returns the number of entries made.
+//
+	{
+	TBuf8<0x100> buf=_L8("");
+	TInt i;
+	for (i=0; i<8; i++)
+		buf.Append(_L8("Big_ nasty_ monster_ chasing_ me"));
+	
+	TUid uid;
+	uid=TUid::Uid(0x12345678);
+	TRegistryCategory cat(uid);
+	i=0;
+	TBuf8<0x20> item;
+	while (i<aEntries)
+		{
+		item.Format(_L8("%S %08x"),&aDes,i);
+		TInt r=cat.SetItem(item, buf);
+		if (r!=KErrNone)
+			break;
+		i++;
+		}
+	return i;
+	}
+
+TInt shrinkReg(const TDesC8 &aDes, TInt aEntries)
+//
+// Delete aEntries entries from the registry
+// returns number of entries deleted.
+//
+	{
+
+
+	TUid uid;
+	uid=TUid::Uid(0x12345678);
+	TRegistryCategory cat(uid);
+	TBuf8<0x20> item;
+	TInt i=aEntries-1;
+	while (i>=0)
+		{
+		item.Format(_L8("%S %08x"),&aDes,i);
+		TInt r=cat.DeleteItem(item);
+		if (r!=KErrNone)
+			break;
+		i--;
+		}
+	return aEntries-i-1;
+	}
+
+TInt testReg(const TDesC8 &aDes, TInt aEntries)
+//
+// Test the first aEntries entries are set correctly
+//
+	{
+	TBuf8<0x100> buf=_L8("");
+	TInt i;
+	for (i=0; i<8; i++)
+		buf.Append(_L8("Big_ nasty_ monster_ chasing_ me"));
+	
+	TUid uid;
+	uid=TUid::Uid(0x12345678);
+	TRegistryCategory cat(uid);
+
+	TBuf8<0x20> item;
+	TBuf8<0x100> res;
+	i=0;
+	while (i<aEntries)
+		{
+		item.Format(_L8("%S %08x"),&aDes,i);
+		if ((i&0x1f)==0)
+			test.Printf(_L("."));
+		res=cat.Item(item, _L8("Gone gone gone"));
+		test(buf==res);
+		i++;
+		}
+	test.Printf(_L("\n"));
+	return i;
+	}
+
+void test1()
+//
+// Test growing and shrinking the registry
+//
+	{
+
+	test.Start(_L("Cleanout the registry"));
+	deleteReg();
+
+	test.Next(_L("Grow the registry a bit"));
+	TInt n=fillReg(_L8("Run Away"),40);
+	test.Printf(_L("Made %d entries\n"), n);
+	test.Next(_L("Test the content of the registry"));
+	TInt m=testReg(_L8("Run Away"),n);
+	test(n==m);
+	test.Next(_L("Shrink it a bit"));
+	m=shrinkReg(_L8("Run Away"),n);
+	test.Printf(_L("Deleted %d entries\n"), m);
+	test(n==m);
+
+	test.Next(_L("Fill the registry with guff"));
+	test.Printf(_L("\tTHIS TEST TAKES AGES\n"));
+	n=fillReg(_L8("Run Away"),0x7fffffff);
+	test.Printf(_L("Made %d entries\n"), n);
+	test.Next(_L("Test the content of the registry"));
+	m=testReg(_L8("Run Away"),n);
+	test.Next(_L("Shrink the registry"));
+	m=shrinkReg(_L8("Run Away"),n);
+	test.Printf(_L("Deleted %d entries\n"), m);
+	test(n==m);
+
+	test.Next(_L("Grow a bigish registry"));
+	n=fillReg(_L8("Lunge"),40);
+	test.Next(_L("Save the registry"));
+    TUint8* bigPtr=new TUint8[0x8000];
+	TPtr8 big(bigPtr, 0x8000);
+	TInt bigsize;
+	TInt r=User::MachineConfiguration(big,bigsize);
+	test(r==KErrNone);
+
+	test.Next(_L("Clear it"));
+	deleteReg();
+
+	test.Next(_L("Grow a little registry"));
+	m=fillReg(_L8("Groat"), 10);
+	test.Next(_L("Save it"));
+    TUint8* littlePtr=new TUint8[0x8000];
+	TPtr8 little(littlePtr, 0x8000);
+	TInt littlesize;
+	r=User::MachineConfiguration(little,littlesize);
+	test(r==KErrNone);
+
+	test.Next(_L("Set to big registry"));
+	r=User::SetMachineConfiguration(big);
+	test(r==KErrNone);
+	test.Next(_L("Test it"));
+	TInt i=testReg(_L8("Lunge"), n);
+	test(n==i);
+
+	test.Next(_L("Set to little registry"));
+	r=User::SetMachineConfiguration(little);
+	test(r==KErrNone);
+	test.Next(_L("Test it"));
+	i=testReg(_L8("Groat"), m);
+	test(i==m);
+	
+	test.Next(_L("Set to big registry again"));
+	deleteReg();
+	r=User::SetMachineConfiguration(big);
+	test(r==KErrNone);
+	test.Next(_L("Test it"));
+	i=testReg(_L8("Lunge"), n);
+	test(n==i);
+
+	delete bigPtr;
+	delete littlePtr;
+	test.End();
+	}
+
+void fillRamDrive(TBusLocalDrive &aRamDrive)
+//
+// Fill the ram drive with data
+//
+	{
+
+	TLocalDriveCapsV2 info;
+	TPckg<TLocalDriveCapsV2> infoPckg(info);
+	test(aRamDrive.Caps(infoPckg)==KErrNone);
+	TInt size=info.iSize.Low();
+	TInt i;
+	TPckgBuf<TInt> dataBuf;
+	TInt &data=dataBuf();
+	for (i=0; i<size; i+=4)
+		{
+		data=i;
+		aRamDrive.Write(i, dataBuf);
+		}
+	}
+
+void testRamDrive(TBusLocalDrive &aRamDrive)
+//
+// Test the data is still OK
+//
+	{
+
+	TLocalDriveCapsV2 info;
+	TPckg<TLocalDriveCapsV2> infoPckg(info);
+	test(aRamDrive.Caps(infoPckg)==KErrNone);
+	TInt size=info.iSize.Low();
+	TInt i;
+	TPckgBuf<TInt> dataBuf;
+	TInt &data=dataBuf();
+	for (i=0; i<size; i+=4)
+		{
+		aRamDrive.Read(i, sizeof(TInt), dataBuf);
+		if (i&0x3ff==0)
+			test.Printf(_L("."));
+	//	test.Printf(_L("%08x "), data);
+		test(data==i);
+		}
+	test.Printf(_L("\n"));
+	}
+
+void testGrow()
+	{
+
+	test.Start(_L("Grow the registry a bit"));
+	TInt n=fillReg(_L8("Run Away"),20);
+	test(n==20);
+	test.Next(_L("Test the content of the registry"));
+	testReg(_L8("Run Away"),n);
+	test(n==20);
+	test.End();
+	}
+
+void setRamDriveSize(TBusLocalDrive aRamDrive, TInt aSize)
+	{
+
+	TLocalDriveCapsV2 info;
+	TPckg<TLocalDriveCapsV2> infoPckg(info);
+	test(aRamDrive.Caps(infoPckg)==KErrNone);
+	TInt oldsize=info.iSize.Low();
+	if (aSize>oldsize)
+		test(aRamDrive.Enlarge(aSize-oldsize)==KErrNone);
+	else
+		test(aRamDrive.ReduceSize(0,oldsize-aSize)==KErrNone);
+	}
+
+GLDEF_C TInt E32Main(void)
+//
+// Test the Ram Drive and the Registry
+//
+	{
+
+	test.Title();
+
+	test.Start(_L("Connect to the Local Drive"));
+	TBool changedFlag;
+	TBusLocalDrive ramDrive;
+	TInt r=ramDrive.Connect(0,changedFlag);
+	test(r==KErrNone);
+
+	test.Next(_L("Test testing the ram drive"));
+	fillRamDrive(ramDrive);
+	testRamDrive(ramDrive);
+
+	test.Next(_L("Simple grow test"));
+	fillRamDrive(ramDrive);
+	testGrow();
+	testRamDrive(ramDrive);	
+	test.Next(_L("Shrink"));
+	deleteReg();
+	testRamDrive(ramDrive);
+
+	{
+	deleteReg();
+	test.Next(_L("Grow the registry a bit"));
+	TInt n=fillReg(_L8("Run Away"),40);
+	test.Next(_L("Test the content of the registry"));
+	TInt m=testReg(_L8("Run Away"),n);
+	test(n==m);
+	test.Next(_L("Shrink it a bit"));
+	m=shrinkReg(_L8("Run Away"),n);
+	test(n==m);
+	test.Next(_L("test ram drive"));
+	testRamDrive(ramDrive);
+	}
+
+/*	test.Next(_L("Run the tests with the current ram drive size"));
+	fillRamDrive(ramDrive);
+	test1();
+	testRamDrive(ramDrive);*/
+
+	test.Next(_L("Run the tests with no Ram Drive"));
+	setRamDriveSize(ramDrive, 0);
+	test1();
+
+	test.Next(_L("Run the tests with small ram drive"));
+	setRamDriveSize(ramDrive, 0x3000);
+	fillRamDrive(ramDrive);
+	test1();
+	testRamDrive(ramDrive);
+
+	test.Next(_L("Clear the registry"));
+	deleteReg();
+
+/*	test.Next(_L("Run the tests with a big ram drive"));
+	r=KErrGeneral;
+	while (r==KErrNone)
+		r=ramDrive.Enlarge(0x1000);
+	test.Printf(_L("%d"), r);
+//	test(r==KErrDiskFull);
+	r=ramDrive.ReduceSize(0, 0x2000);
+	test(r==KErrNone);
+	fillRamDrive(ramDrive);
+	test1();
+	testRamDrive(ramDrive);*/
+
+	ramDrive.Disconnect();
+
+	test.End();
+	return(KErrNone);
+	}
+