kerneltest/e32test/power/t_domain.cpp
changeset 259 57b9594f5772
parent 247 d8d70de2bd36
child 260 a1a318fd91af
child 266 0008ccd16016
--- a/kerneltest/e32test/power/t_domain.cpp	Wed Aug 18 11:08:29 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2300 +0,0 @@
-// Copyright (c) 2002-2010 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\power\t_domain.cpp
-// Overview:
-// Domain manager tests
-// API Information:
-// RDmDomain, RDmDomainManager CDmDomain, CDmDomainManager
-// Details:
-// - Test a variety of domain transitions, check the expected number of
-// notifications and the first expected ordinal. Verify results are
-// as expected.
-// - Test system standby, check the expected number of notifications and 
-// the first expected ordinal. Use a timer to request a wakeup event.
-// Verify results are as expected.
-// - Test domain related simple error situations, verify results are
-// as expected.
-// - Perform platform security tests: launch a separate process with no 
-// capabilities, verify that results are as expected.
-// - Test domain transitions by connecting to two domain hierarchies 
-// simultaneously, add some test and power hierarchy members, verify
-// the expected target state, notifications and leaf nodes. Verify results.
-// - Verify that the same hierarchy can not be connected to more than once.
-// - Request a positive transition and request that the test domain use 
-// ETraverseParentsFirst. Verify results are as expected and verify 
-// domains are in the correct state.
-// - Request a negative transition and request that the test domain use 
-// ETraverseChildrenFirst. Verify results are as expected.
-// - Request a positive transition with zero acknowledgements. Verify 
-// results are as expected.
-// - Request a positive transition with error acknowledgements. Verify 
-// results are as expected.
-// - Perform a variety of negative tests and verify results are as expected.
-// - Perform various tests on domain transitions with activated observer.
-// Verify results are as expected.
-// Platforms/Drives/Compatibility:
-// All.
-// Assumptions/Requirement/Pre-requisites:
-// Failures and causes:
-// Base Port information:
-// 
-//
-
-#include <e32test.h>
-#include <domainmember.h>
-#include <domainmanager.h>
-#include <domainobserver.h>
-#include "domainpolicytest.h"
-#include <e32debug.h>
-#include <f32file.h>
-#include <e32ldr.h>
-#include <e32ldr_private.h>
-
-LOCAL_D RTest test(_L(" T_DOMAIN "));
-_LIT(KThreadName, "t_domain_panic_thread");
-
-#ifdef _DEBUG
-#define __PRINT(x) {RDebug::Print x;}
-#else
-#define __PRINT(x) 
-#endif
-
-class CDmTestMember;
-
-// interface for test domain memebers.
-// Any test memeber should derive from this interface 
-class MDmDomainMember
-	{
-public:
-	virtual TDmHierarchyId HierarchyId() = 0;
-	virtual TDmDomainId	DomainId() = 0;
-	virtual TDmDomainState State() = 0;
-	virtual TInt Status() = 0;
-	virtual TUint32 Ordinal() = 0;
-	virtual TInt Notifications() = 0;
-	};
-
-class MDmTest
-	{
-public:
-	virtual void Perform() = 0;
-	virtual void Release() = 0;
-	virtual TInt TransitionNotification(MDmDomainMember& aDomainMember) = 0;
-	virtual void TransitionRequestComplete() = 0;
-	};
-
-// for the test hierarchy, we generate an ordinal for each domain
-// each byte of which describes the exact location of the domain in the hierarchy
-#define ORDINAL_FROM_DOMAINID0(id) (id)
-#define ORDINAL_FROM_DOMAINID1(parent, id) ((parent << 8) | (id))
-#define ORDINAL_FROM_DOMAINID2(grandparent, parent, id) ((grandparent << 16) | (parent << 8) | id)
-#define ORDINAL_FROM_DOMAINID3(greatgrandparent, grandparent, parent, id) ((greatgrandparent << 24) | (grandparent << 16) | (parent << 8) | id)
-#define PARENT_ORDINAL(id) (id >> 8)
-
-#define ORDINAL_LEVEL(ordinal)			\
-	((ordinal & 0xFF00) == 0) ? 1 :			\
-	((ordinal & 0xFF0000) == 0) ? 2 :		\
-	((ordinal & 0xFF000000) == 0) ? 3 : 4;
-
-
-// get the least significant domain id character (for debugging purposes)
-TBool GetDomainChar(TDmDomainId aDomainId, TChar& aChar)
-	{
-	TBool found = ETrue;
-	switch(aDomainId)
-		{
-		
-		case KDmIdTestA:	aChar = 'A'; break;
-		case KDmIdTestB:	aChar = 'B'; break;
-		case KDmIdTestC:	aChar = 'C'; break;
-		case KDmIdTestAA:	aChar = 'A'; break;
-		case KDmIdTestAB:	aChar = 'B'; break;
-		case KDmIdTestBA:	aChar = 'A'; break;
-		case KDmIdTestCA:	aChar = 'A'; break;
-		case KDmIdTestABA:	aChar = 'A'; break;
-		case KDmIdTestABB:	aChar = 'B'; break;
-		case KDmIdTestCAA:	aChar = 'A'; break;
-		// domain char not found 
-		case KDmIdNone:
-		case KDmIdRoot:		
-		default:			
-			found = EFalse;
-		}
-	return found;
-	}
-
-// prints the 4-character domain string into the passed descriptor (for debugging purposes)
-// e.g. "CAA" for KDmIdTestCAA
-void GetDomainDesc(TUint32 aOrdinal, TDes& aDes)
-	{
-	if (aOrdinal == KDmIdRoot)
-		{
-		aDes.Append(_L("root"));
-		return;
-		}
-
-	TUint32 val =  aOrdinal;
-
-	for (TInt n=0; n<4; n++)
-		{
-		TDmDomainId domainId = (TDmDomainId) (val >> 24);
-		TChar ch;
-		TBool found = GetDomainChar(domainId, ch);
-		if (found)
-			aDes.Append(ch);
-		val = val << 8;
-		}
-
-	}
-
-
-class CDmTestMember : public CActive, public MDmDomainMember
-	{
-public:	
-	// from CActive
-	void RunL();
-	// from MDmDomainMember
-	inline TDmHierarchyId HierarchyId() {return iHierarchy;};
-	inline TDmDomainId	DomainId() {return iId;};
-	inline TDmDomainState State() {return iState;};
-	inline TInt Status() {return iStatus.Int();};
-	inline TUint32 Ordinal() {return iOrdinal;};
-	inline TInt Notifications() {return iNotifications;};
-
-	CDmTestMember(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest*);
-	~CDmTestMember();
-	void Acknowledge();
-
-protected:
-	// from CActive
-	virtual void DoCancel();
-
-
-public:
-	TDmHierarchyId iHierarchy;
-	TDmDomainId	iId;
-	TDmDomainState iState;
-	TUint32		iOrdinal;
-	MDmTest*	iTest;	
-	TInt		iNotifications;
-	RDmDomain	iDomain;
-	};
-
-
-
-CDmTestMember::CDmTestMember(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest* aTest) : CActive(CActive::EPriorityStandard), 
-	iHierarchy(aHierarchy), iId(aId), iOrdinal(aOrdinal), iTest(aTest)
-	{
-	TInt r;
-
-	if (iHierarchy == KDmHierarchyIdPower)
-		 r = iDomain.Connect(iId);
-	else
-		 r = iDomain.Connect(iHierarchy, iId);
-
-	test(r == KErrNone);
-
-	CActiveScheduler::Add(this);
-
-	iDomain.RequestTransitionNotification(CActive::iStatus);
-	CActive::SetActive();
-	}
-
-CDmTestMember::~CDmTestMember()
-	{
-	CActive::Cancel();
-	iDomain.Close();
-	}
-
-void CDmTestMember::Acknowledge()
-	{
-	iDomain.AcknowledgeLastState();
-	}
-
-void CDmTestMember::RunL()
-	{
-
-	iNotifications++;
-
-	iState = iDomain.GetState();
-
-	TInt ackError = iTest->TransitionNotification(*this);
-	if (ackError == KErrNone)
-		iDomain.AcknowledgeLastState();
-	else if (ackError == KErrAbort)	// don't acknowledge
-		;
-	else
-		iDomain.AcknowledgeLastState(ackError);
-
-	
-	// request another notification (even if we didn't acknowledge the last one)
-	iDomain.RequestTransitionNotification(CActive::iStatus);
-	CActive::SetActive();
-	}
-
-void CDmTestMember::DoCancel()
-	{
-	iDomain.CancelTransitionNotification();
-	}
-
-
-// CDomainMemberAo
-class CDomainMemberAo : public CDmDomain, public MDmDomainMember
-	{
-public:	
-	static CDomainMemberAo* NewL(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest*);
-	~CDomainMemberAo();
-
-	// from CActive
-	void RunL();
-
-	// from MDmDomainMember
-	inline TDmHierarchyId HierarchyId() {return iHierarchy;};
-	inline TDmDomainId	DomainId() {return iId;};
-	inline TDmDomainState State() {return iState;};
-	inline TInt Status() {return iStatus.Int();};
-	inline TUint32 Ordinal() {return iOrdinal;};
-	inline TInt Notifications() {return iNotifications;};
-
-private:
-	CDomainMemberAo(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest*);
-
-public:
-	TDmHierarchyId iHierarchy;
-	TDmDomainId	iId;
-	TDmDomainState iState;
-	TUint32		iOrdinal;
-	MDmTest*	iTest;	
-	TInt		iNotifications;
-	};
-
-CDomainMemberAo* CDomainMemberAo::NewL(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest* aTest)
-	{
-	CDomainMemberAo* self=new (ELeave) CDomainMemberAo(aHierarchy, aId, aOrdinal, aTest);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-
-	self->RequestTransitionNotification();
-
-	CleanupStack::Pop();
-	return self;
-	}
-
-CDomainMemberAo::CDomainMemberAo(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest* aTest) : 
-	CDmDomain(aHierarchy, aId), 
-	iHierarchy(aHierarchy), iId(aId), iOrdinal(aOrdinal), iTest(aTest)
-	{
-	}
-
-CDomainMemberAo::~CDomainMemberAo()
-	{
-	Cancel();
-	}
-
-void CDomainMemberAo::RunL()
-	{
-	iNotifications++;
-
-	iState = GetState();
-
-	TInt ackError = iTest->TransitionNotification(*this);
-	if (ackError == KErrNone)
-		AcknowledgeLastState(ackError);
-	else if (ackError == KErrAbort)	// don't acknowledge
-		;
-	else
-		AcknowledgeLastState(ackError); 
-	if (ackError != KErrAbort)	
-		AcknowledgeLastState(ackError);
-
-	
-	// request another notification (even if we didn't acknowledge the last one)
-	RequestTransitionNotification();
-	}
-
-
-// CDomainManagerAo
-class CDomainManagerAo : public CDmDomainManager
-	{
-public:	
-	~CDomainManagerAo();
-	static CDomainManagerAo* NewL(TDmHierarchyId aHierarchy, MDmTest& aTest);
-
-	// from CActive
-	void RunL();
-
-private:
-	CDomainManagerAo(TDmHierarchyId aHierarchy, MDmTest& aTest);
-
-private:
-	MDmTest& iTest;
-	};
-
-
-CDomainManagerAo* CDomainManagerAo::NewL(TDmHierarchyId aHierarchy, MDmTest& aTest)
-	{
-	CDomainManagerAo* self=new (ELeave) CDomainManagerAo(aHierarchy, aTest);
-	CleanupStack::PushL(self);
-
-	self->ConstructL();
-	CleanupStack::Pop();
-	return self;
-	}
-
-CDomainManagerAo::CDomainManagerAo(TDmHierarchyId aHierarchy, MDmTest& aTest) : 
-	CDmDomainManager(aHierarchy), iTest(aTest)
-	{
-	}
-
-CDomainManagerAo::~CDomainManagerAo()
-	{
-	}
-
-void CDomainManagerAo::RunL()
-	{
-	iTest.TransitionRequestComplete();
-	}
-
-
-class CDmTest1 : public CActive, public MDmTest
-	{
-public: // from CActive
-	void RunL();
-
-	// from MDmTest
-	void Perform();
-	void Release();
-	TInt TransitionNotification(MDmDomainMember& aDomainMember);
-	void TransitionRequestComplete() {};
-
-	CDmTest1 (TDmDomainId aId, TDmDomainState aState) : CActive(CActive::EPriorityStandard), iDomainId(aId), iState((TPowerState) aState) {}
-
-protected:
-	// from CActive
-	virtual void DoCancel();
-
-private:
-	enum { KMembersMax = 16 };
-	CDmTestMember*		iMembers[KMembersMax]; 
-	RDmDomainManager	iManager;
-	TDmDomainId			iDomainId;
-	TPowerState			iState;
-	TBool				iAcknowledge;
-	TInt				iMembersCount;
-	TInt				iCount;
-	TUint32				iOrdinal;
-	};
-
-void CDmTest1::Perform()
-	{
-	//
-	// Test domain transitions
-	//
-
-	test.Next(_L("Test 1"));
-	test.Printf(_L("Domain id = 0x%x Target State = 0x%x\n"), iDomainId, iState);
-	iMembers[0] = new CDmTestMember(KDmHierarchyIdPower, KDmIdRoot, 0, this);
-	test(iMembers[0] != NULL);
-	iMembers[1] = new CDmTestMember(KDmHierarchyIdPower, KDmIdRoot, 0, this);
-	test(iMembers[1] != NULL);
-	iMembers[2] = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 1, this);
-	test(iMembers[2] != NULL);
-	iMembers[3] = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 1, this);
-	test(iMembers[3] != NULL);
-	iMembers[4] = new CDmTestMember(KDmHierarchyIdPower, KDmIdUiApps, 1, this);
-	test(iMembers[4] != NULL);
-	iMembers[5] = new CDmTestMember(KDmHierarchyIdPower, KDmIdUiApps, 1, this);
-	test(iMembers[5] != NULL);
-	
-	// expected number of notifications
-	iMembersCount = (iDomainId == KDmIdRoot) ? 6 : 2;
-	// first expected ordinal
-	iOrdinal = (iState == EPwActive) ? 0 : 1;
-
-	TInt r = iManager.Connect();
-	test(r == KErrNone);
-
-	CActiveScheduler::Add(this);
-
-	iManager.RequestDomainTransition(iDomainId, iState, CActive::iStatus);
-	CActive::SetActive();
-
-	CActiveScheduler::Start();
-	}
-
-TInt CDmTest1::TransitionNotification(MDmDomainMember& aDomainMember)
-	{
-	++iCount;
-	if (aDomainMember.State() == EPwActive)
-		{
-		if(aDomainMember.Ordinal() < iOrdinal)
-			{
-			// Making the test to fail in RunL function inorder to complete the cleanup from domain manager.
-			test.Printf(_L("Making test to fail as Ordinal Mismatch Expected : %d, Returned : %d"), aDomainMember.Ordinal(), iOrdinal);
-			iCount--;
-			}
-		}
-	else
-		{
-		if(aDomainMember.Ordinal() > iOrdinal)
-			{
-			//Making the test to fail in RunL function inorder to complete the cleanup from domain manager.
-			test.Printf(_L("Making test to fail as Ordinal Mismatch Expected : %d, Returned : %d"), aDomainMember.Ordinal(), iOrdinal);
-			iCount--;
-			}
-		}
-	iOrdinal = aDomainMember.Ordinal();
-
-	// acknowledge one from two
-	iAcknowledge = !iAcknowledge;
-	return iAcknowledge?KErrNone:KErrGeneral;
-	}
-
-void CDmTest1::RunL()
-	{
-	CActiveScheduler::Stop();
-
-	iManager.Close();
-
-	CDmTestMember** mp;
-	for (mp = iMembers; *mp; ++mp)
-		delete *mp;
-	test(iCount == iMembersCount);
-	}
-
-void CDmTest1::DoCancel()
-	{
-	test(0);
-	}
-
-void CDmTest1::Release()
-	{
-	delete this;
-	}
-
-class CDmTest2Timer : public CTimer
-	{
-public: // fomr CTimer
-   void RunL();
-public:
-	CDmTest2Timer() : CTimer(0) 
-		{
-		TRAPD(r,
-			ConstructL());
-		test(r == KErrNone);
-		CActiveScheduler::Add(this);
-		}
-	};
-
-void CDmTest2Timer::RunL()
-	{
-	test.Printf(_L("Tick count after CDmTest2Timer::RunL() = %d\n"), User::NTickCount());
-
-	// kick the timer again in case power down hasn't happened yet
-	TTime wakeup;
-	wakeup.HomeTime();
-	wakeup += TTimeIntervalSeconds(3);
-	At(wakeup);
-	}
-
-class CDmTest2 : public CActive, public MDmTest
-	{
-public: // from CActive
-	void RunL();
-
-	// from MDmTest
-	void Perform();
-	void Release();
-	TInt TransitionNotification(MDmDomainMember& aDomainMember);
-	void TransitionRequestComplete() {};
-	CDmTest2 (TDmDomainState aState) : CActive(CActive::EPriorityStandard), iState((TPowerState) aState) {}
-
-protected:
-	// from CActive
-	virtual void DoCancel();
-
-private:
-	enum { KMembersMax = 16 };
-	CDmTestMember*		iMembers[KMembersMax]; 
-	RDmDomainManager	iManager;
-	TPowerState			iState;
-	TBool				iAcknowledge;
-	TInt				iMembersCount;
-	TInt				iCount;
-	TUint32				iOrdinal;
-	CDmTest2Timer*		iTimer;
-	};
-
-
-void CDmTest2::Perform()
-	{
-	//
-	// Test system standby
-	//
-
-	test.Next(_L("Test 2"));
-	test.Printf(_L("Target State = 0x%x\n"), iState);
-	iMembers[0] = new CDmTestMember(KDmHierarchyIdPower, KDmIdRoot, 0, this);
-	test(iMembers[0] != NULL);
-	iMembers[1] = new CDmTestMember(KDmHierarchyIdPower, KDmIdRoot, 0, this);
-	test(iMembers[1] != NULL);
-	iMembers[2] = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 1, this);
-	test(iMembers[2] != NULL);
-	iMembers[3] = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 1, this);
-	test(iMembers[3] != NULL);
-	iMembers[4] = new CDmTestMember(KDmHierarchyIdPower, KDmIdUiApps, 1, this);
-	test(iMembers[4] != NULL);
-	iMembers[5] = new CDmTestMember(KDmHierarchyIdPower, KDmIdUiApps, 1, this);
-	test(iMembers[5] != NULL);
-	
-	// expected number of notifications
-	iMembersCount = 12;
-	// first expected ordinal
-	iOrdinal = (iState == EPwActive) ? 0 : 1;
-
-	TInt r = iManager.Connect();
-	test(r == KErrNone);
-
-	CActiveScheduler::Add(this);
-
-	// Use an absolute timer to request a wakeup event
-	iTimer = new CDmTest2Timer();
-	TTime wakeup;
-	wakeup.HomeTime();
-	wakeup += TTimeIntervalSeconds(5);
-	test.Printf(_L("Tick count before timer = %d\n"), User::NTickCount());
-	iTimer->At(wakeup);
-	
-	iManager.RequestSystemTransition(iState, CActive::iStatus);
-	CActive::SetActive();
-
-	CActiveScheduler::Start();
-	}
-
-TInt CDmTest2::TransitionNotification(MDmDomainMember& aDomainMember)
-	{
-	++iCount;
-	if (aDomainMember.State() == EPwActive)
-		{
-		if(aDomainMember.Ordinal() < iOrdinal)
-			{
-			// Making the test to fail in RunL function inorder to complete the cleanup from domain manager.
-			test.Printf(_L("Making test to fail as Ordinal Mismatch Expected : %d, Returned : %d, State : %d"), 
-																		aDomainMember.Ordinal(), iOrdinal, aDomainMember.State());
-			iCount--;
-			}
-		}
-	else
-		{
-		if(aDomainMember.Ordinal() > iOrdinal)
-			{
-			// Making the test to fail in RunL function inorder to complete the cleanup from domain manager.
-			test.Printf(_L("Making test to fail as Ordinal Mismatch Expected : %d, Returned : %d, State: %d"), 
-																		aDomainMember.Ordinal(), iOrdinal, aDomainMember.State());
-			iCount--;
-			}
-		}
-	iOrdinal = aDomainMember.Ordinal();
-
-	// acknowledge one from two
-	iAcknowledge = !iAcknowledge;
-	return iAcknowledge?KErrNone:KErrAbort;
-	}
-
-void CDmTest2::RunL()
-	{
-	test.Printf(_L("Tick count after CDmTest2::RunL() = %d\n"), User::NTickCount());
-
-	iTimer->Cancel();	
-	CActiveScheduler::Stop();
-
-	iManager.Close();
-
-	CDmTestMember** mp;
-	for (mp = iMembers; *mp; ++mp)
-		delete *mp;
-	test(CActive::iStatus == KErrTimedOut);
-	test(iCount == iMembersCount);
-	}
-
-void CDmTest2::DoCancel()
-	{
-	test(0);
-	}
-
-void CDmTest2::Release()
-	{
-	if (iTimer)
-		{
-		iTimer->Cancel();
-		delete iTimer;
-		}
-	delete this;
-	}
-
-class CDmTest3 : public MDmTest
-	{
-public: 
-	// from MDmTest
-	void Perform();
-	void Release();
-	TInt TransitionNotification(MDmDomainMember& aDomainMember);
-	void TransitionRequestComplete() {};
-	};
-
-void CDmTest3::Perform()
-	{
-	//
-	// Test simple error situation
-	//
-	RDmDomainManager manager;
-	TInt r = manager.Connect();
-	test(r == KErrNone);
-
-	RDmDomainManager manager1;
-	r = manager1.Connect();
-	test(r == KErrInUse);
-
-	RDmDomain domain;
-	r = domain.Connect(KDmIdNone);
-	test(r == KDmErrBadDomainId);
-	CDmTestMember*		testMember;
-	testMember = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 1, this);
-	test (testMember != NULL);
-
-	TRequestStatus status;
-	manager.RequestDomainTransition(KDmIdApps, EPwStandby, status);
-	test(status.Int() == KRequestPending);
-
-	TRequestStatus status1;
-	manager.RequestDomainTransition(KDmIdApps, EPwActive, status1);
-	User::WaitForRequest(status1);
-	test(status1.Int() == KDmErrBadSequence);
-	User::WaitForRequest(status);
-	test(status.Int() == KErrTimedOut);
-
-	// Since this test doesn't start the active scheduler, a domain member's RunL() will 
-	// not get called so we need to re-request a domain transition notification manually
-	User::WaitForRequest(testMember->iStatus);
-	test(testMember->iStatus.Int() == KErrNone);
-	testMember->iDomain.RequestTransitionNotification(testMember->iStatus);
-
-	manager.RequestDomainTransition(KDmIdApps, EPwActive, status);
-	test(status.Int() == KRequestPending);
-	manager.CancelTransition();
-	test(status.Int() == KErrCancel);
-	manager.CancelTransition();
-	User::WaitForRequest(status);
-	test(status.Int() == KErrCancel);
-
-	testMember->iDomain.CancelTransitionNotification();
-
-	delete testMember;
-	
-	domain.Close();
-	manager.Close();
-	}
-
-TInt CDmTest3::TransitionNotification(MDmDomainMember& /*aDomainMember*/)
-	{
-	test(0);
-	return KErrAbort;	// don't acknowledge
-	}
-
-void CDmTest3::Release()
-	{
-	delete this;
-	}
-
-class CDmTest4 : public MDmTest
-	{
-public: 
-	// from MDmTest
-	void Perform();
-	void Release();
-	TInt TransitionNotification(MDmDomainMember& aDomainMember);
-	void TransitionRequestComplete() {};
-private:
-	void ExecSlave(TUint arg);
-	};
-
-_LIT(KSecuritySlavePath, "t_domain_slave.exe");
-
-void CDmTest4::ExecSlave(TUint aArg)
-	{
-	RProcess proc;
-	TInt r = proc.Create(KSecuritySlavePath, TPtrC((TUint16*) &aArg, sizeof(aArg)/sizeof(TUint16)));
-	test(r == KErrNone);
-	TRequestStatus status;
-	proc.Logon(status);
-	proc.Resume();
-	User::WaitForRequest(status);
-
-    RDebug::Printf("CDmTest4::ExecSlave(%d) ExitType %d", aArg, proc.ExitType() );
-    RDebug::Printf("CDmTest4::ExecSlave(%d) ExitReason %d", aArg, proc.ExitReason() );
-	test(proc.ExitType() == EExitKill);
-//	test(proc.ExitReason() == KErrPermissionDenied);
-
-	CLOSE_AND_WAIT(proc);
-	}
-
-//! @SYMTestCaseID PBASE-T_DOMAIN-4
-//! @SYMTestType CT
-//! @SYMTestCaseDesc Dmain manager security tests
-//! @SYMREQ 3722
-//! @SYMTestActions Launches a separate process with no capabilities
-//! @SYMTestExpectedResults  DM APIs should fail with KErrPermissionDenied
-//! @SYMTestPriority High
-//! @SYMTestStatus Defined
-void CDmTest4::Perform()
-	{
-	//
-	// Security tests
-	//
-
-	ExecSlave(0);
-
-    ExecSlave(1);
-
-	}
-
-TInt CDmTest4::TransitionNotification(MDmDomainMember& /*aDomainMember*/)
-	{
-	test(0);
-	return KErrNone;
-	}
-
-void CDmTest4::Release()
-	{
-	delete this;
-	}
-
-// Test hierarchy tests
-class CDmTestStartupMember : public CDmTestMember
-	{
-public:
-	CDmTestStartupMember(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest*);
-
-public:
-private:
-	};
-
-CDmTestStartupMember::CDmTestStartupMember(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest* aTest) 
-	: CDmTestMember(aHierarchy, aId, aOrdinal, aTest)
-	{
-	}
-
-// Simultaneously testing of test domain defined in DomainPolicy99.dll
-// and the power domain defined in DomainPolicy.dll
-class CDmTest5 : public CActive, public MDmTest
-	{
-public: 
-	// from CActive
-	void RunL();
-	// from MDmTest
-	void Perform();
-	void Release();
-	TInt TransitionNotification(MDmDomainMember& aDomainMember);
-	void TransitionRequestComplete();	
-	void RunTestOnGetTransitionFailures(RArray<const TTransitionFailure>& aTransitionFailure);
-	
-	CDmTest5(TDmDomainId aPowerId, TDmDomainId aTestId, TDmDomainState aPowerState, TDmDomainState aTestState) : 
-		CActive(CActive::EPriorityStandard), 
-		iPowerDomainId(aPowerId), iTestDomainId(aTestId), iPowerState(aPowerState), iTestState(aTestState) {}
-protected:
-	// from CActive
-	virtual void DoCancel();
-
-private:
-	enum { KMembersMax = 16 };
-	enum TAckMode{ KAckAlways, KAckNever, KAckError, KAckOddDomainsOnly };
-
-	CDmTestMember*		iTestMembers[KMembersMax]; 
-	CDomainMemberAo*	iPowerMembers[KMembersMax]; 
-
-	RDmDomainManager	iTestDomainManager;
-	
-	TDmDomainId			iPowerDomainId;
-	TDmDomainId			iTestDomainId;
-
-	TDmDomainState		iPowerState;
-	TDmDomainState		iTestState;
-
-	// level number for iTestDomainId. E.g 1 for KDmIdRoot, 2 for KDmIdTestA, etc.
-	TInt				iTestDomainLevel;	
-
-	TDmTraverseDirection iTraverseDirection;
-
-	TAckMode			iAckMode;
-
-public:
-	TInt				iTestNotifications;
-	TInt				iPowerNotifications;
-	TInt				iTestNotificationsExpected;
-	TInt				iPowerNotificationsExpected;
-
-	TInt				iTransitionsCompleted;
-	TInt				iTransitionsExpected;
-	};
-
-void CDmTest5::RunTestOnGetTransitionFailures(RArray<const TTransitionFailure>& aTransitionFailure)
-	{
-	//*************************************************
-	// Test - OOM Testing on GetTransitionFailures()
-	// Simulates heap failure in GetTransitionFailures()
-	//*************************************************
-	TInt error = 0;
-	TInt count = 0;	
-	do
-		{		
-		__UHEAP_SETFAIL(RHeap::EFailNext, ++count);
-		error = iTestDomainManager.GetTransitionFailures(aTransitionFailure);						
-		test.Printf( _L( "CDmTest5::RunTestOnGetTransitionFailures, simulating heap failure on GetTransitionFailures(), Error=%d, Run=%d\n" ), error, count );
-		}while(error == KErrNoMemory);		
-		
-	__UHEAP_RESET;
-	
-	//Actual count of heap failure as the final iteration which terminates the loop would not return KErrNoMemory 
-	--count;
-	test(count > 0);
-	test.Printf( _L( "Out of memory tests on GetTransitionFailures() succeeded at heap failure rate of %i\n" ), count );
-	}
-
-//! @SYMTestCaseID PBASE-T_DOMAIN-5
-//! @SYMTestType CT
-//! @SYMTestCaseDesc Connects to two domain hierarchies simulteneously and perform various tests
-//! @SYMREQ 3704,3705,3706,3707,3708,3709,3710,3711,3720,3721,3724,3725,3726,3727
-//! @SYMTestActions Open two hiearchies simultaneously and perform various actions.
-//! @SYMTestExpectedResults  All tests should pass
-//! @SYMTestPriority High
-//! @SYMTestStatus Defined
-void CDmTest5::Perform()
-	{
-
- 	__UHEAP_MARK;
-
-	//
-	// Test domain transitions
-	//
-	CActiveScheduler::Add(this);
-
-	TInt r = RDmDomainManager::AddDomainHierarchy(KDmHierarchyIdTest);
-
-    RDebug::Printf("RDmDomainManager::AddDomainHierarchy returns %d", r );
-
-	test(r == KErrNone);
-
-	CDomainManagerAo* powerDomainManager = NULL;
-	TRAP(r, powerDomainManager = CDomainManagerAo::NewL(KDmHierarchyIdPower, *this));
-	test (powerDomainManager != NULL);
-
-	r = CDomainManagerAo::AddDomainHierarchy(KDmHierarchyIdPower);
-	test(r == KErrNone);
-
-	//*************************************************
-	//	Test 5a - connect to two domain hierarchies simultaneously
-	//*************************************************
-	test.Next(_L("Test 5a - connect to two domain hierarchies simultaneously"));
-
-	test.Printf(_L("Domain id = 0x%x, Target State = 0x%x\n"), iTestDomainId, iTestState);
-
-	TInt testMemberCount = 0;
-
-	// Add some test hierarchy members - these use the RDmDomain API
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	
-	// row 1
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	
-	// row2
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	
-	// row 3
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this);
-	test(iTestMembers[testMemberCount++] != NULL);
-
-	// add some power hierarchy members - these use the CDmDomain AO API
-	TInt powerMemberCount = 0;
-	TRAP(r, iPowerMembers[powerMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdPower, KDmIdRoot, KDmIdRoot, this));
-	test(iTestMembers[powerMemberCount++] != NULL);
-	TRAP(r, iPowerMembers[powerMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdPower, KDmIdApps, KDmIdApps, this));
-	test(iTestMembers[powerMemberCount++] != NULL);
-	TRAP(r, iPowerMembers[powerMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdPower, KDmIdUiApps, KDmIdUiApps, this));
-	test(iTestMembers[powerMemberCount++] != NULL);
-
-
-	RArray<const TTransitionFailure> testFailures;
-	TInt testFailureCount;
-	RArray<const TTransitionFailure> powerFailures;
-	TInt powerFailureCount;
-
-
-
-	// calculate the expected number of notifications
-	TInt expectedTestNotifications = 0;
-	TInt leafNodes = 0;
-	
-
-	// work out the domain level, the number of leaf nodes and the expected number of 
-	// notifications for the domain that is being transitioned
-	switch(iTestDomainId)
-		{
-		case KDmIdRoot		:	iTestDomainLevel = 1; leafNodes = 5; expectedTestNotifications = testMemberCount; break;
-		case KDmIdTestA		:	iTestDomainLevel = 2; leafNodes = 3; expectedTestNotifications = 5; break;
-		case KDmIdTestB		:	iTestDomainLevel = 2; leafNodes = 1; expectedTestNotifications = 2; break;
-		case KDmIdTestC		:	iTestDomainLevel = 2; leafNodes = 1; expectedTestNotifications = 3; break;
-
-		case KDmIdTestAA	:	iTestDomainLevel = 3; leafNodes = 1; expectedTestNotifications = 1; break;
-		case KDmIdTestAB	:	iTestDomainLevel = 3; leafNodes = 2; expectedTestNotifications = 3; break;
-		case KDmIdTestBA	:	iTestDomainLevel = 3; leafNodes = 1; expectedTestNotifications = 1; break;
-		case KDmIdTestCA	:	iTestDomainLevel = 3; leafNodes = 1; expectedTestNotifications = 2; break;
-
-		case KDmIdTestABA	:	iTestDomainLevel = 4; leafNodes = 1; expectedTestNotifications = 1; break;
-		case KDmIdTestABB	:	iTestDomainLevel = 4; leafNodes = 1; expectedTestNotifications = 1; break;
-		case KDmIdTestCAA	:	iTestDomainLevel = 4; leafNodes = 1; expectedTestNotifications = 1; break;
-		default:
-			test(0);
-		}
-	test.Printf(_L("Test Domain id = 0x%x, Level = %d, Target State = 0x%x, expected notifications = %d, leafNodes = %d\n"), 
-		iTestDomainId, iTestDomainLevel, iTestState, expectedTestNotifications, leafNodes);
-
-	TInt expectedPowerNotifications = 0;
-	switch(iPowerDomainId)
-		{
-		case KDmIdRoot		:	expectedPowerNotifications = powerMemberCount; break;
-		case KDmIdApps		:	expectedPowerNotifications = 1; break;
-		case KDmIdUiApps	:	expectedPowerNotifications = 1; break;
-		default:
-			test(0);
-		}
-
-
-
-	// connect to the test hierarchy
-	r = iTestDomainManager.Connect(KDmHierarchyIdTest);
-	test(r == KErrNone);
-
-	// verify that we can't connect to the same hierarchy more than once
-	RDmDomainManager	domainManager;
-	r = domainManager.Connect(KDmHierarchyIdTest);
-	test(r == KErrInUse);
-
-
-
-	//*************************************************
-	// Test 5b - request a positive transition
-	// issue a positive  transition (i.e. transition state increases)
-	// and request that the test domain use ETraverseParentsFirst
-	//*************************************************
-	test.Next(_L("Test 5b - request a positive transition"));
-	iAckMode = KAckAlways;
-
-	iTransitionsCompleted = iTestNotifications = iPowerNotifications = 0;
-	iPowerNotificationsExpected = 0;
-	iTestNotificationsExpected = expectedTestNotifications;
-	iTransitionsExpected = 1;
-
-	// DON'T request any domain transition on the power hierarchy
-	// powerDomainManager->RequestDomainTransition(iPowerDomainId, EPwActive);
-	// request a domain transition on the test hierarchy
-	iTraverseDirection = ETraverseParentsFirst;
-	if (iTestDomainId == KDmIdRoot)
-		iTestDomainManager.RequestSystemTransition(iTestState, ETraverseDefault, CActive::iStatus);
-	else
-		iTestDomainManager.RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault, CActive::iStatus);
-	CActive::SetActive();
-
-	CActiveScheduler::Start();
-	test(powerDomainManager->iStatus == KErrNone);
-	test(iStatus == KErrNone);
-	test(iTestNotifications == iTestNotificationsExpected);
-	test(iPowerNotifications == iPowerNotificationsExpected);
-
-	//*************************************************
-	// Test 5c- verify domains are in correct state
-	//*************************************************
-	test.Next(_L("Test 5c- verify domains are in correct state"));
-	RDmDomain domainMember;
-	r = domainMember.Connect(KDmHierarchyIdTest, iTestDomainId);
-	test (r == KErrNone);
-	TDmDomainState state = domainMember.GetState();
-	domainMember.Close();
-	test (state == iTestState);
-
-	// if the transition request is not on the root, verify that that 
-	// the root domain and the transition domain are in different states
-	if (iTestDomainId != KDmIdRoot && iTestState != EStartupCriticalStatic)
-		{
-		r = domainMember.Connect(KDmHierarchyIdTest, KDmIdRoot);
-		test (r == KErrNone);
-		TDmDomainState state = domainMember.GetState();
-		domainMember.Close();
-		test (state != iTestState);
-		}
-
-
-	//*************************************************
-	// Test 5d- request a negative transition
-	// issue a negative transition (i.e. transition state decreases)
-	// and request that the test domain use ETraverseChildrenFirst
-	//*************************************************
-	test.Next(_L("Test 5d- request a negative transition"));
-	iAckMode = KAckAlways;
-	iTestState--;	// EStartupCriticalStatic;
-	iPowerState--;	// EPwStandby
-
-	iTransitionsCompleted = iTestNotifications = iPowerNotifications = 0;
-	iPowerNotificationsExpected = expectedPowerNotifications;
-	iTestNotificationsExpected = expectedTestNotifications;
-	iTransitionsExpected = 2;
-
-	// DO request a domain transition on the power hierarchy
-	powerDomainManager->RequestDomainTransition(iPowerDomainId, iPowerState, ETraverseDefault);
-
-	// request a domain transition on the test hierarchy
-	iTraverseDirection = ETraverseChildrenFirst;
-	iTestDomainManager.RequestDomainTransition(iTestDomainId, iTestState, iTraverseDirection, CActive::iStatus);
-	CActive::SetActive();
-
-	// wait for all test & power transitions to complete
-	CActiveScheduler::Start();
-	test(powerDomainManager->iStatus == KErrNone);
-	test(iStatus == KErrNone);
-	test(iTestNotifications == iTestNotificationsExpected);
-	test(iPowerNotifications == iPowerNotificationsExpected);
-	
-
-	//*************************************************
-	// Test 5e- request a positive transition, with zero acknowledgements
-	// issue a positive transition with no members acknowledging the transition
-	//*************************************************
-	test.Next(_L("Test 5e- request a positive transition, with zero acknowledgements"));
-	iAckMode = KAckNever;
-	iTestState++;		// EStartupCriticalDynamic;
-	iPowerState++;		// EPwActive
-
-	// power hierarchy should continue on failure, so we all power domains should transition
-	// test hierarchy should stop on failure, so should get notifications from all leaf nodes
-	iTransitionsCompleted = iTestNotifications = iPowerNotifications = 0;
-	iPowerNotificationsExpected = expectedPowerNotifications;
-	iTestNotificationsExpected = leafNodes;	// 5 leaf nodes for root domain
-	iTransitionsExpected = 2;
-
-	// DO request a domain transition on the power hierarchy
-	powerDomainManager->RequestDomainTransition(iPowerDomainId, iPowerState, ETraverseDefault);
-
-	// request a domain transition on the test hierarchy
-	iTraverseDirection = ETraverseChildrenFirst;
-	iTestDomainManager.RequestDomainTransition(iTestDomainId, iTestState, iTraverseDirection, CActive::iStatus);
-	CActive::SetActive();
-
-	// wait for all test & power transitions to complete
-	CActiveScheduler::Start();
-	test(powerDomainManager->iStatus == KErrTimedOut);
-	test(iStatus == KErrTimedOut);
-	test(iTestNotifications == iTestNotificationsExpected);
-	test(iPowerNotifications == iPowerNotificationsExpected);
-	
-	// get the failures on the test hierarchy
-	testFailureCount = iTestDomainManager.GetTransitionFailureCount();
-	test (testFailureCount == 1);
-
-#ifdef _DEBUG
-	//***************************************************************
-	// OOM Testing: Simulates heap failure in GetTransitionFailures()
-	//***************************************************************
-	__UHEAP_MARK;
-	RArray<const TTransitionFailure> oomTestFailures;
-	RunTestOnGetTransitionFailures(oomTestFailures);
-	test(oomTestFailures.Count()==1);
-	oomTestFailures.Close();
-	__UHEAP_MARKEND;
-#endif
-	
-	r = iTestDomainManager.GetTransitionFailures(testFailures);
-	test(r == KErrNone);
-	test(testFailureCount == testFailures.Count());
-
-	test.Printf(_L("Test failures = %d\n"), testFailureCount);
-	TInt i;
-	for (i=0; i<testFailureCount; i++)
-		{
-		test.Printf(_L("%d: iDomainId %d, iError %d\n"), 
-			i, testFailures[i].iDomainId, testFailures[i].iError);
-		test(testFailures[i].iError == KErrTimedOut);
-		}
-
-	// get the failures on the power hierarchy
-	powerFailureCount = powerDomainManager->GetTransitionFailureCount();
-	test (powerFailureCount == expectedPowerNotifications);
-
-	r = powerDomainManager->GetTransitionFailures(powerFailures);
-	test(r == KErrNone);
-	test(powerFailureCount == powerFailures.Count());
-
-	test.Printf(_L("Power failures = %d\n"), powerFailureCount);
-	for (i=0; i<powerFailureCount; i++)
-		{
-		test.Printf(_L("%d: iDomainId %d, iError %d\n"), 
-			i, powerFailures[i].iDomainId, powerFailures[i].iError);
-		test(powerFailures[i].iError == KErrTimedOut);
-		}
-
-	
-	//*************************************************
-	// Test 5f- request a positive transition, with error acknowledgements
-	// issue a positive transition with all members nack'ing the transition
-	//*************************************************
-	test.Next(_L("Test 5f- request a positive transition, with error acknowledgements"));
-	iAckMode = KAckError;
-	iTestState++;		
-	iPowerState++;		
-
-	// power hierarchy should continue on failure, so all power domains should transition
-	// test hierarchy should stop on failure, so should get notifications from 
-	// anything from 1 to all the leaf nodes
-	iTransitionsCompleted = iTestNotifications = iPowerNotifications = 0;
-	iPowerNotificationsExpected = expectedPowerNotifications;
-	iTestNotificationsExpected = leafNodes;	// 5 leaf nodes for root domain
-	iTransitionsExpected = 2;
-
-	// DO request a domain transition on the power hierarchy
-	powerDomainManager->RequestDomainTransition(iPowerDomainId, iPowerState, ETraverseDefault);
-
-	// request a domain transition on the test hierarchy
-	iTraverseDirection = ETraverseChildrenFirst;
-	iTestDomainManager.RequestDomainTransition(iTestDomainId, iTestState, iTraverseDirection, CActive::iStatus);
-	CActive::SetActive();
-
-	// wait for all test & power transitions to complete
-	CActiveScheduler::Start();
-	test(powerDomainManager->iStatus == KErrGeneral);
-	test(iStatus == KErrGeneral);
-	test(iTestNotifications <= iTestNotificationsExpected);
-	test(iPowerNotifications == iPowerNotificationsExpected);
-	
-	// get the failures on the test hierarchy
-	testFailureCount = iTestDomainManager.GetTransitionFailureCount();
-	test (testFailureCount == 1);
-
-	r = iTestDomainManager.GetTransitionFailures(testFailures);
-	test(r == KErrNone);
-	test(testFailureCount == testFailures.Count());
-
-	test.Printf(_L("Test failures = %d\n"), testFailureCount);
-	for (i=0; i<testFailureCount; i++)
-		{
-		test.Printf(_L("%d: iDomainId %d, iError %d\n"), 
-			i, testFailures[i].iDomainId, testFailures[i].iError);
-		test(testFailures[i].iError == KErrGeneral);
-		}
-
-	// get the failures on the power hierarchy
-	powerFailureCount = powerDomainManager->GetTransitionFailureCount();
-	test (powerFailureCount == expectedPowerNotifications);
-
-	r = powerDomainManager->GetTransitionFailures(powerFailures);
-	test(r == KErrNone);
-	test(powerFailureCount == powerFailures.Count());
-
-	test.Printf(_L("Power failures = %d\n"), powerFailureCount);
-	for (i=0; i<powerFailureCount; i++)
-		{
-		test.Printf(_L("%d: iDomainId %d, iError %d\n"), 
-			i, powerFailures[i].iDomainId, powerFailures[i].iError);
-		test(powerFailures[i].iError == KErrGeneral);
-		}
-
-	
-	// cleanup
-
-	testFailures.Reset();
-	powerFailures.Reset();
-
-	iTestDomainManager.Close();
-	delete powerDomainManager;
-	powerDomainManager = NULL;
-
-	CDmTestMember** mt;
-	for (mt = iTestMembers; *mt; ++mt)
-		delete *mt;
-
-	CDomainMemberAo** mp;
-	for (mp = iPowerMembers; *mp; ++mp)
-		delete *mp;
-
-
-	// restore the domain hierarchies to their initial state so as not to 
-	// upset any subsequent tests which rely on this
-	{
-	RDmDomainManager manager;
-	TInt r = manager.Connect();
-	test (r == KErrNone);
-	TRequestStatus status;
-	manager.RequestDomainTransition(KDmIdRoot, EPwActive, status);
-	test(status.Int() == KRequestPending);
-	User::WaitForRequest(status);
-	test(status.Int() == KErrNone);
-	manager.Close();
-	
-	r = manager.Connect(KDmHierarchyIdTest);
-	test (r == KErrNone);
-	manager.RequestDomainTransition(KDmIdRoot, EStartupCriticalStatic, ETraverseDefault, status);
-	test(status.Int() == KRequestPending);
-	User::WaitForRequest(status);
-	test(status.Int() == KErrNone);
-	manager.Close();
-	}
-
- 	__UHEAP_MARKEND;
-	}
-
-// This handles a transition notification from either a power domain member or 
-// a test domain member.
-// Verifies that the domain state is as expected.
-// Updates the number of notifications for each hierarchy and verifies that all parent 
-// domains have transitioned already (for parent-to-child transitions) or that all child 
-// domains have been transitioned already (for child-to-parent transitions).
-
-TInt CDmTest5::TransitionNotification(MDmDomainMember& aDomainMember)
-	{
-	if (aDomainMember.HierarchyId() == KDmHierarchyIdPower)
-		iPowerNotifications++;
-	else
-		iTestNotifications++;
-
-	if (aDomainMember.HierarchyId() == KDmHierarchyIdPower)
-		{
-		__PRINT((_L("CDmTest5::TransitionNotification(), Hierarchy = %d, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
-			aDomainMember.HierarchyId(), aDomainMember.Ordinal(), aDomainMember.State(), aDomainMember.Status()));
-		test(aDomainMember.State() == iPowerState);
-		}
-	else if (aDomainMember.HierarchyId() == KDmHierarchyIdTest)
-		{
-		TBuf16<4> buf;
-		GetDomainDesc(aDomainMember.Ordinal(), buf);
-
-		__PRINT((_L("CDmTest5::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
-			aDomainMember.HierarchyId(), &buf, aDomainMember.Ordinal(), aDomainMember.State(), aDomainMember.Status()));
-		test(aDomainMember.State() == iTestState);
-		}
-	else
-		{
-		test(0);
-		}
-
-	// if we're going from parent to child, 
-	// check that each parent domain has received a notification already
-	// if not, check that each child domain has received a notification already
-
-	CDmTestMember** mp;
-
-	if (aDomainMember.HierarchyId() == KDmHierarchyIdTest && iAckMode == KAckAlways)
-		{
-
-		if (iTraverseDirection == ETraverseParentsFirst)
-			{
-			TUint ordThis = aDomainMember.Ordinal();
-			TUint ordParent = PARENT_ORDINAL(ordThis);
-
-			TInt levelParent = ORDINAL_LEVEL(ordParent);
-
-			TBuf16<4> buf;
-			GetDomainDesc(ordParent, buf);
-			if (levelParent >= iTestDomainLevel)
-				{
-				__PRINT((_L("Searching for parent domain = %S, ordinal = %08X \n"), &buf, ordParent));
-				for (mp = iTestMembers; *mp; ++mp)
-					{
-					if ((*mp)->Ordinal() == ordParent)
-						{
-						TBuf16<4> buf;
-						GetDomainDesc((*mp)->Ordinal(), buf);
-						__PRINT((_L("Found parent (%S). notification = %d\n"), &buf, (*mp)->Notifications()));
-						test ((*mp)->Notifications() == aDomainMember.Notifications());
-						break;
-						}
-					}
-				}
-			}
-		else
-			{
-			__PRINT((_L("Searching for children\n")));
-			for (mp = iTestMembers; *mp; ++mp)
-				{
-
-				TUint ordParent = PARENT_ORDINAL((*mp)->Ordinal());
-				if (ordParent == aDomainMember.Ordinal())
-					{
-					TBuf16<4> buf;
-					GetDomainDesc((*mp)->Ordinal(), buf);
-					__PRINT((_L("Found child (%S). notification = %d\n"), &buf, (*mp)->Notifications()));
-					test ((*mp)->Notifications() == aDomainMember.Notifications());
-					}
-				}
-			}
-		}
-
-	TInt ackError;
-	switch (iAckMode)
-		{
-		case KAckNever:
-			ackError = KErrAbort;
-			break;
-		case KAckError:		// return an error to the DM
-			ackError = KErrGeneral;
-			break;
-		case KAckOddDomainsOnly:
-			ackError = (aDomainMember.DomainId() & 1)?KErrNone:KErrAbort;
-			break;
-		case KAckAlways:
-		default:
-			ackError = KErrNone;
-			break;
-		}
-	return ackError;
-	}
-
-void CDmTest5::RunL()
-	{
-	iTransitionsCompleted++;
-
-	__PRINT((_L("CDmTest5::RunL(), error = %d, iTestNotifications %d, iPowerNotifications %d\n"), 
-		iStatus.Int(), iTestNotifications , iPowerNotifications));
-
-	if (iTransitionsCompleted == iTransitionsExpected)
-		CActiveScheduler::Stop();
-	}
-
-void CDmTest5::TransitionRequestComplete()
-	{
-	iTransitionsCompleted++;
-
-	__PRINT((_L("CDmTest5::TransitionRequestComplete(), error = %d, iTestNotifications %d, iPowerNotifications %d\n"), 
-		iStatus.Int(), iTestNotifications , iPowerNotifications));
-	
-	if (iTransitionsCompleted == iTransitionsExpected)
-		CActiveScheduler::Stop();
-	}
-
-void CDmTest5::DoCancel()
-	{
-	test(0);
-	}
-
-void CDmTest5::Release()
-	{
-	delete this;
-	}
-
-const TInt KMembersMax = 16;
-
-// Negative testing 
-class CDmTest6 : public CActive, public MDmTest
-	{
-public:
-	enum 
-	{
-	ENegTestTransitionNoConnect,
-	ENegTestGetStateNoConnect,
-	ENegTestTransitionInvalidMode
-	};
-
-	class TData 
-		{
-	public:
-		inline TData(TInt aTest) : iTest(aTest){};
-		TInt iTest;
-		};
-
-public: 
-	// from CActive
-	void RunL();
- 
-	// from MDmTest
-	void Perform();
-	void Release();
-	TInt TransitionNotification(MDmDomainMember& aDomainMember);
-	void TransitionRequestComplete();
-
-
-	CDmTest6() : CActive(CActive::EPriorityStandard) {}
-
-protected:
-	// from CActive
-	virtual void DoCancel();
-
-private:
-	static TInt PanicThreadFunc(TAny* aData);
-	void PanicTest(TInt aTestNumber);
-
-
-	CDomainMemberAo*	iTestMembers[KMembersMax]; 
-	CDomainManagerAo*	iTestDomainManager;
-	
-	TDmDomainId			iTestDomainId;
-	TDmDomainState		iTestState;
-
-public:
-	TInt				iTestNotifications;
-	TInt				iTestNotificationsExpected;
-
-	TInt				iTransitionsCompleted;
-	TInt				iTransitionsExpected;
-	};
-
-TInt CDmTest6::PanicThreadFunc(TAny* aData)
-	{
-	const TData* data = (const TData*)aData;
-	switch (data->iTest)
-		{
-		case ENegTestTransitionNoConnect:
-			{
-			// request a transition notification without connecting first (should panic)
-			RDmDomain domainMember;
-			TRequestStatus status;
-			User::SetJustInTime(EFalse);
-			domainMember.RequestTransitionNotification(status);
-			}
-			break;
-		case ENegTestGetStateNoConnect:
-			{
-			// Get the domain state without connecting (should panic)
-			RDmDomain domainMember;
-			User::SetJustInTime(EFalse);
-			domainMember.GetState();
-			}
-			break;
-		case ENegTestTransitionInvalidMode:
-			{
-			RDmDomainManager manager;
-			TRequestStatus status;
-			TInt r = manager.Connect(KDmHierarchyIdTest);
-			test(r == KErrNone);
-
-			User::SetJustInTime(EFalse);
-			manager.RequestDomainTransition(KDmIdRoot, 0, TDmTraverseDirection(-1), status);
-			}
-			break;
-		default:
-			break;
-		}
-	return KErrNone;
-	}
-
-void CDmTest6::PanicTest(TInt aTestNumber)
-	{
-	test.Printf(_L("panic test number %d\n"), aTestNumber);
-
-	TBool jit = User::JustInTime();
-
-	TData data(aTestNumber);
-
-	TInt KHeapSize=0x2000;
-
-	RThread thread;
-	TInt ret = thread.Create(KThreadName, PanicThreadFunc, KDefaultStackSize, KHeapSize, KHeapSize, &data);
-	test(KErrNone == ret);
-	TRequestStatus stat;
-	thread.Logon(stat);
-	thread.Resume();
-	User::WaitForRequest(stat);
-
-	User::SetJustInTime(jit);
-
-	// The thread must panic
-	test(thread.ExitType() == EExitPanic);
-	TInt exitReason = thread.ExitReason();
-	test.Printf(_L("panic test exit reason = %d\n"), exitReason);
-
-	switch(aTestNumber)
-		{
-		case ENegTestTransitionNoConnect:
-			test (exitReason == EBadHandle);
-			break;
-		case ENegTestGetStateNoConnect:
-			test (exitReason == EBadHandle);
-			break;
-		case ENegTestTransitionInvalidMode:
-			break;
-		default:
-			break;
-		}
-
-	CLOSE_AND_WAIT(thread);
-	}
-
-
-//! @SYMTestCaseID PBASE-T_DOMAIN-6
-//! @SYMTestType CT
-//! @SYMTestCaseDesc Negative testing
-//! @SYMPREQ 810
-//! @SYMTestActions Various negative tests
-//! @SYMTestExpectedResults  All tests should pass
-//! @SYMTestPriority High
-//! @SYMTestStatus Defined
-void CDmTest6::Perform()
-	{
-
- 	__UHEAP_MARK;
-
-	CActiveScheduler::Add(this);
-
-	CDomainManagerAo* iTestDomainManager = NULL;
-	TRAP_IGNORE(iTestDomainManager = CDomainManagerAo::NewL(KDmHierarchyIdTest, *this));
-	test (iTestDomainManager != NULL);
-
-	TInt r = CDomainManagerAo::AddDomainHierarchy(KDmHierarchyIdTest);
-	test(r == KErrNone);
-
-	//*************************************************
-	// Test 6a - Connect to the same hierarchy twice
-	//*************************************************
-	test.Next(_L("Test 6a - Connect to the same hierarchy twice"));
-
-	// verify that we can't connect to the same hierarchy more than once
-	CDomainManagerAo* testDomainManager = NULL;
-	TRAP(r, testDomainManager = CDomainManagerAo::NewL(KDmHierarchyIdTest, *this));
-	test(r == KErrInUse);
-	test (testDomainManager == NULL);
-
-
-	TInt testMemberCount = 0;
-
-	// Add some test hierarchy members
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	
-	// row 1
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	
-	// row2
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	
-	// row 3
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-
-
-	//*************************************************
-	// Test 6b change to current state
-	//*************************************************
-	test.Next(_L("Test 6b change to current state"));
-	iTestState =  EStartupCriticalStatic;
-	iTestDomainId = KDmIdRoot;
-
-	iTransitionsCompleted = iTestNotifications = 0;
-	iTestNotificationsExpected = testMemberCount;
-	iTransitionsExpected = 1;
-
-	// request a domain transition
-	iTestDomainManager->RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault);
-
-	// wait for test transitions to complete
-	CActiveScheduler::Start();
-	test(iStatus == KErrNone);
-	test(iTestNotifications == iTestNotificationsExpected);
-	
-
-	// cancel a member notification request 
-	//*************************************************
-	// Test 6c cancel a member notification request
-	//*************************************************
-	test.Next(_L("Test 6c cancel a member notification request"));
-	RDmDomain domainMember;
-	TRequestStatus status;
-	domainMember.Connect(KDmHierarchyIdTest, iTestDomainId);
-	domainMember.RequestTransitionNotification(status);
-	domainMember.CancelTransitionNotification();
-	User::WaitForRequest(status);
-	domainMember.Close();
-
-	//*************************************************
-	// Test 6d cancel a member notification request without having first requested a notification
-	//*************************************************
-	test.Next(_L("Test 6d cancel a member notification request without having first requested a notification"));
-	domainMember.Connect(KDmHierarchyIdTest, iTestDomainId);
-	domainMember.CancelTransitionNotification();
-	domainMember.Close();
-
-	//*************************************************
-	// Test 6e domain controller adds invalid hierarchy
-	//*************************************************
-	test.Next(_L("Test 6e domain controller connects to invalid hierarchy"));
-	r = RDmDomainManager::AddDomainHierarchy(TDmHierarchyId(-1));
-	test(r == KErrBadHierarchyId);
-
-	//*************************************************
-	// Test 6f domain member connects to invalid hierarchy
-	//*************************************************
-	test.Next(_L("Test 6f domain member connects to invalid hierarchy"));
-	r = domainMember.Connect(TDmHierarchyId(-1), TDmDomainId(KDmIdRoot));
-	test (r == KErrBadHierarchyId);
-
-	//*************************************************
-	// Test 6g domain member connects to valid hierarchy but invalid domain
-	//*************************************************
-	test.Next(_L("Test 6g domain member connects to valid hierarchy but invalid domain"));
-	r = domainMember.Connect(KDmHierarchyIdTest, TDmDomainId(-1));
-	test (r == KDmErrBadDomainId);
-
-	delete iTestDomainManager;
-	iTestDomainManager = NULL;
-
-	// Panic tests
-
-	//*************************************************
-	// Test 6h request a transition notification without connecting first
-	//*************************************************
-	test.Next(_L("Test 6h request a transition notification without connecting first"));
-	PanicTest(ENegTestTransitionNoConnect);
-
-	//*************************************************
-	// Test 6i Get the domain state without connecting
-	//*************************************************
-	test.Next(_L("Test 6i Get the domain state without connecting"));
-	PanicTest(ENegTestGetStateNoConnect);
-
-	//*************************************************
-	// Test 6j request a transition notification with an invalid transition mode
-	//*************************************************
-	test.Next(_L("Test 6j request a transition notification with an invalid transition mode"));
-	PanicTest(ENegTestTransitionInvalidMode);
-
-
-	// cleanup
-
-	CDomainMemberAo** mt;
-	for (mt = iTestMembers; *mt; ++mt)
-		delete *mt;
-
- 	__UHEAP_MARKEND;
-	}
-
-// This handles a transition notification from a test domain member.
-TInt CDmTest6::TransitionNotification(MDmDomainMember& aDomainMember)
-	{
-	TInt status = aDomainMember.Status();
-		
-	iTestNotifications++;
-
-	test (aDomainMember.HierarchyId() == KDmHierarchyIdTest);
-
-	TBuf16<4> buf;
-	GetDomainDesc(aDomainMember.Ordinal(), buf);
-
-	test.Printf(_L("CDmTest6::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
-		aDomainMember.HierarchyId(), &buf, aDomainMember.Ordinal(), aDomainMember.State(), status);
-
-
-	return KErrNone;
-	}
-
-void CDmTest6::RunL()
-	{
-	iTransitionsCompleted++;
-
-	TInt error = iStatus.Int();
-
-	test.Printf(_L("CDmTest6::RunL(), error = %d, iTestNotifications %d\n"), 
-		error, iTestNotifications);
-
-	if (iTransitionsCompleted == iTransitionsExpected)
-		CActiveScheduler::Stop();
-	}
-
-void CDmTest6::TransitionRequestComplete()
-	{
-	iTransitionsCompleted++;
-
-	TInt error = iStatus.Int();
-	
-	test.Printf(_L("CDmTest6::TransitionRequestComplete(), error = %d, iTestNotifications %d\n"), 
-		error, iTestNotifications);
-	
-	if (iTransitionsCompleted == iTransitionsExpected)
-		CActiveScheduler::Stop();
-	}
-
-void CDmTest6::DoCancel()
-	{
-	test(0);
-	}
-
-void CDmTest6::Release()
-	{
-	delete this;
-	}
-
-// Transition progress Observer testing
-class CDmTest7 : public CActive, public MDmTest, public MHierarchyObserver
-	{
-public: 
-	// from CActive
-	void RunL();
- 
-	// from MDmTest
-	void Perform();
-	void Release();
-	TInt TransitionNotification(MDmDomainMember& aDomainMember);
-	void TransitionRequestComplete();
-
-	// from MHierarchyObserver
-	virtual void TransProgEvent(TDmDomainId aDomainId, TDmDomainState aState);
-	virtual void TransFailEvent(TDmDomainId aDomainId, TDmDomainState aState, TInt aError);
-	virtual void TransReqEvent(TDmDomainId aDomainId, TDmDomainState aState);
-
-
-
-	CDmTest7(TDmDomainId aDomainId) : CActive(CActive::EPriorityStandard), iObservedDomainId(aDomainId) {}
-
-protected:
-	// from CActive
-	virtual void DoCancel();
-
-private:
-	void TestForCompletion();
-
-
-private:
-
-	enum { KMembersMax = 16 };
-
-	CDomainMemberAo*	iTestMembers[KMembersMax]; 
-	CDomainManagerAo*	iTestDomainManager;
-	
-	TDmDomainId			iTestDomainId;
-	TDmDomainState		iTestState;
-	TDmDomainId			iObservedDomainId;
-
-public:
-	TInt				iTestNotifications;
-	TInt				iTestNotificationsExpected;
-
-	TInt				iTransitionsCompleted;
-	TInt				iTransitionsExpected;
-
-	TInt				iTransProgEvents;
-	TInt				iTransFailEvents;
-	TInt				iTransReqEvents;
-
-	TInt				iTransProgEventsExpected;
-	TInt				iTransFailEventsExpected;
-	TInt				iTransReqEventsExpected;
-	};
-
-//! @SYMTestCaseID PBASE-T_DOMAIN-7
-//! @SYMTestType CT
-//! @SYMTestCaseDesc Transition progress Observer testing
-//! @SYMREQ REQ3723
-//! @SYMTestActions Various negative tests
-//! @SYMTestExpectedResults  All tests should pass
-//! @SYMTestPriority High
-//! @SYMTestStatus Defined
-void CDmTest7::Perform()
-	{
-
- 	__UHEAP_MARK;
-
-	//
-	// Test domain transitions with activated observer
-	//
-	CActiveScheduler::Add(this);
-
-	TInt r = RDmDomainManager::AddDomainHierarchy(KDmHierarchyIdTest);
-	test(r == KErrNone);
-
-	CDomainManagerAo* iTestDomainManager = NULL;
-	TRAP_IGNORE(iTestDomainManager = CDomainManagerAo::NewL(KDmHierarchyIdTest, *this));
-	test (iTestDomainManager != NULL);
-
-	r = CDomainManagerAo::AddDomainHierarchy(KDmHierarchyIdTest);
-	test(r == KErrNone);
-
-	//*************************************************
-	// Test 7a - Testing observer notifications
-	//*************************************************
-	
-	test.Next(_L("Test 7a - Testing observer notifications"));
-
-	TInt testMemberCount = 0;
-
-	// Add some test hierarchy members
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	
-	// row 1
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	
-	// row2
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	
-	// row 3
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this));
-	test(iTestMembers[testMemberCount++] != NULL);
-
-	// create an observer
-	CHierarchyObserver* observer = NULL;
-	TRAP(r, observer = CHierarchyObserver::NewL(*this, KDmHierarchyIdTest));
-	test (r == KErrNone);
-	test(observer != NULL);
-	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
-	
-	// request a state change
-	iTestState =  EStartupCriticalDynamic;
-	iTestDomainId = KDmIdRoot;
-	iTransitionsCompleted = iTestNotifications = 0;
-	iTestNotificationsExpected = testMemberCount;
-	iTransitionsExpected = 1;
-
-	iTransProgEvents = iTransFailEvents = iTransReqEvents = 0;
-	
-	iTransReqEventsExpected = iTransProgEventsExpected = observer->ObserverDomainCount();
-	iTransFailEventsExpected = 0;
-
-
-	iTestDomainManager->RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault);
-
-	// wait for test transitions to complete
-	CActiveScheduler::Start();
-	test(iStatus == KErrNone);
-	test(iTestNotifications == iTestNotificationsExpected);
-	test (iTransProgEvents == iTransProgEventsExpected);
-	test (iTransFailEvents == iTransFailEventsExpected);
-	test (iTransReqEvents == iTransReqEventsExpected);
-
-
-	// cleanup
-	delete observer; 
-	observer = NULL;
-
-	//*************************************************
-	// Test 7b - start & stop the observer
-	//*************************************************
-	test.Next(_L("Test 7b - start & stop the observer"));
-
-	// create an observer, start it stop and then start it again
-	TRAP(r, observer = CHierarchyObserver::NewL(*this, KDmHierarchyIdTest));
-	test (r == KErrNone);
-	test(observer != NULL);
-	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
-	observer->StopObserver();
-	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
-
-	// request a state change
-	iTestState++;
-	iTestDomainId = KDmIdRoot;
-	iTransitionsCompleted = iTestNotifications = 0;
-	iTestNotificationsExpected = testMemberCount;
-	iTransitionsExpected = 1;
-
-	iTransProgEvents = iTransFailEvents = iTransReqEvents = 0;
-	
-	iTransProgEventsExpected = iTransReqEventsExpected = observer->ObserverDomainCount();
-	iTransFailEventsExpected = 0;
-
-	iTestDomainManager->RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault);
-
-	// wait for test transitions to complete
-	CActiveScheduler::Start();
-	test(iStatus == KErrNone);
-	test(iTestNotifications == iTestNotificationsExpected);
-	test (iTransProgEvents == iTransProgEventsExpected);
-	test (iTransFailEvents == iTransFailEventsExpected);
-	test (iTransReqEvents == iTransReqEventsExpected);
-
-	// stop the observer & request another state change
-	observer->StopObserver();
-	iTestState++;
-	iTestDomainId = KDmIdRoot;
-	iTransitionsCompleted = iTestNotifications = 0;
-	iTestNotificationsExpected = testMemberCount;
-	iTransitionsExpected = 1;
-
-	iTransProgEvents = iTransFailEvents = iTransReqEvents = 0;
-	
-	iTransProgEventsExpected = 0;
-	iTransFailEventsExpected = 0;
-	iTransReqEventsExpected = 0;
-
-	iTestDomainManager->RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault);
-	// wait for test transitions to complete
-	CActiveScheduler::Start();
-	test(iStatus == KErrNone);
-	test(iTestNotifications == iTestNotificationsExpected);
-	test (iTransProgEvents == iTransProgEventsExpected);
-	test (iTransFailEvents == iTransFailEventsExpected);
-	test (iTransReqEvents == iTransReqEventsExpected);
-
-	// Start the observer again on a different domain and only ask for transition requests
-	// Then request another state change
-	observer->StartObserver((iObservedDomainId == KDmIdRoot)?KDmIdTestCA:KDmIdRoot, EDmNotifyTransRequest);
-	iTestState++;
-	iTestDomainId = KDmIdRoot;
-	iTransitionsCompleted = iTestNotifications = 0;
-	iTestNotificationsExpected = testMemberCount;
-	iTransitionsExpected = 1;
-
-	iTransProgEvents = iTransFailEvents = iTransReqEvents = 0;
-	
-	iTransReqEventsExpected = observer->ObserverDomainCount();
-	iTransProgEventsExpected = 0;
-	iTransFailEventsExpected = 0;
-
-
-	iTestDomainManager->RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault);
-	// wait for test transitions to complete
-	CActiveScheduler::Start();
-	test(iStatus == KErrNone);
-	test(iTestNotifications == iTestNotificationsExpected);
-	test (iTransProgEvents == iTransProgEventsExpected);
-	test (iTransFailEvents == iTransFailEventsExpected);
-	test (iTransReqEvents == iTransReqEventsExpected);
-
-	delete observer; 
-	observer = NULL;
-
-	//*************************************************
-	// Test 7c - invalid arguments testing for observer
-	//*************************************************
-	test.Next(_L("Test 7c - Invalid arguments testing for observer"));
-	
-	const TDmHierarchyId	KDmHierarchyIdInvalid = 110;
-	
-	test.Printf(_L("Test 7c.1 - create observer with invalid hierarchy Id\n"));
-	
-	// create an observer
-	TRAP(r, observer = CHierarchyObserver::NewL(*this, KDmHierarchyIdInvalid));
-	test (r == KErrBadHierarchyId);
-	
-	
-	test.Printf(_L("Test 7c.2 - Starting the observer with wrong domain Id\n"));
-	TRAP(r, observer = CHierarchyObserver::NewL(*this, KDmHierarchyIdTest));
-	test (r == KErrNone);
-	test(observer != NULL);
-
-	//Wrong domain Id
-	const TDmDomainId	KDmIdInvalid	= 0x0f;
-	r= observer->StartObserver(KDmIdInvalid, EDmNotifyAll);
-	test(r==KDmErrBadDomainId);
-
-	test.Printf(_L("Test 7c.3 - Trying to create second observer on the same hierarchy\n"));
-	TRAP(r, CHierarchyObserver::NewL(*this, KDmHierarchyIdTest));
-	test (r == KDmErrBadSequence);
-
-	
-	
-	//*************************************************
-	// Test 7d - Wrong sequence of API calls for observer
-	//*************************************************
-	test.Next(_L("Test 7d - Observer wrong sequence of calls"));
-	
-	test.Printf(_L("Test 7d.1 - Stopping Observer before starting it\n"));
-	r = observer->StopObserver();
-	test(r==KDmErrBadSequence);
-	
-	test.Printf(_L("Test 7d.2 - Starting Observer twice\n"));
-	r= observer->StartObserver(KDmIdRoot, EDmNotifyAll);
-	test(r==KErrNone);
-
-	r= observer->StartObserver(KDmIdRoot, EDmNotifyAll);
-	test(r==KDmErrBadSequence);
-
-	
-	delete observer;
-
-	/***************************************/
-
-	delete iTestDomainManager;
-	iTestDomainManager = NULL;
-
-	CDomainMemberAo** mt;
-	for (mt = iTestMembers; *mt; ++mt)
-		delete *mt;
-
-
-	// restore the domain hierarchies to their initial state so as not to 
-	// upset any subsequent tests which rely on this
-	{
-	RDmDomainManager manager;
-	TRequestStatus status;
-	TInt r = manager.Connect(KDmHierarchyIdTest);
-	test (r == KErrNone);
-	manager.RequestDomainTransition(KDmIdRoot, EStartupCriticalStatic, ETraverseDefault, status);
-	User::WaitForRequest(status);
-	test(status.Int() == KErrNone);
-	manager.Close();
-	}
-
- 	__UHEAP_MARKEND;
-	}
-
-// This handles a transition notification from a test domain member.
-TInt CDmTest7::TransitionNotification(MDmDomainMember& aDomainMember)
-	{
-		
-	iTestNotifications++;
-
-	test (aDomainMember.HierarchyId() == KDmHierarchyIdTest);
-
-	TBuf16<4> buf;
-	GetDomainDesc(aDomainMember.Ordinal(), buf);
-
-	__PRINT((_L("CDmTest7::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
-		aDomainMember.HierarchyId(), &buf, aDomainMember.Ordinal(), aDomainMember.State(), aDomainMember.Status()));
-
-	return KErrNone;
-	}
-
-void CDmTest7::RunL()
-	{
-	iTransitionsCompleted++;
-
-	__PRINT((_L("CDmTest7::RunL(), error = %d, iTestNotifications %d\n"), 
-		iStatus.Int(), iTestNotifications));
-
-	TestForCompletion();
-	}
-
-void CDmTest7::TransitionRequestComplete()
-	{
-	iTransitionsCompleted++;
-
-	__PRINT((_L("CDmTest7::TransitionRequestComplete(), error = %d, iTestNotifications %d\n"), 
-		iStatus.Int(), iTestNotifications));
-	
-	TestForCompletion();
-	}
-
-void CDmTest7::DoCancel()
-	{
-	test(0);
-	}
-
-void CDmTest7::Release()
-	{
-	delete this;
-	}
-
-void CDmTest7::TestForCompletion()
-	{
-
-	if (iTransitionsCompleted == iTransitionsExpected &&
-		iTransProgEvents == iTransProgEventsExpected && 
-		iTransFailEvents == iTransFailEventsExpected &&
-		iTransReqEvents == iTransReqEventsExpected)
-		{
-		CActiveScheduler::Stop();
-		}
-	}
-
-#ifdef _DEBUG
-void CDmTest7::TransProgEvent(TDmDomainId aDomainId, TDmDomainState aState)
-#else
-void CDmTest7::TransProgEvent(TDmDomainId /*aDomainId*/, TDmDomainState /*aState*/)
-#endif
-	{
-	iTransProgEvents++;
-	__PRINT((_L("CDmTest7::TransProgEvent(), aDomainId = %d, aState %d, iTransProgEvents %d\n"), 
-		aDomainId, aState, iTransProgEvents));
-	TestForCompletion();
-	}
-
-#ifdef _DEBUG
-void CDmTest7::TransFailEvent(TDmDomainId aDomainId, TDmDomainState aState, TInt aError)
-#else
-void CDmTest7::TransFailEvent(TDmDomainId /*aDomainId*/, TDmDomainState /*aState*/, TInt /*aError*/)
-#endif
-
-	{
-	iTransFailEvents++;
-	__PRINT((_L("CDmTest7::TransFailEvent(), aDomainId = %d, aState %d aError %d, iTransFailEvents %d\n"), 
-		aDomainId, aState, iTransFailEvents, aError));
-	TestForCompletion();
-	}
-
-#ifdef _DEBUG
-void CDmTest7::TransReqEvent(TDmDomainId aDomainId, TDmDomainState aState)
-#else
-void CDmTest7::TransReqEvent(TDmDomainId /*aDomainId*/, TDmDomainState /*aState*/)
-#endif
-	{
-	iTransReqEvents++;
-	__PRINT((_L("CDmTest7::TransReqEvent(), aDomainId = %d, aState %d, iTransReqEvents %d\n"), 
-		aDomainId, aState, iTransReqEvents));
-	TestForCompletion();
-	}
-
-GLDEF_C TInt E32Main()
-	{
-	CTrapCleanup* trapHandler=CTrapCleanup::New();
-	test(trapHandler!=NULL);
-
-	CActiveScheduler* scheduler = new CActiveScheduler();
-	test(scheduler != NULL);
-	CActiveScheduler::Install(scheduler);
-
-	// Turn off evil lazy dll unloading
-	RLoader l;
-	test(l.Connect()==KErrNone);
-	test(l.CancelLazyDllUnload()==KErrNone);
-	l.Close();
-
-	//
-	// Perform the number of iterations specifed by the command line argument.
-	//
-	// If no arguments - perform two iterations
-	//
-//  TInt iter = 2;
-    TInt iter = 1;
-
-	TInt len = User::CommandLineLength();
-	if (len)
-		{
-		// Copy the command line in a buffer
-		HBufC* hb = HBufC::NewMax(len);
-		test(hb != NULL);
-		TPtr cmd((TUint16*) hb->Ptr(), len);
-		User::CommandLine(cmd);
-		// Extract the number of iterations
-		TLex l(cmd);
-		TInt i;
-		TInt r = l.Val(i);
-		if (r == KErrNone)
-			iter = i;
-		else
-			// strange command - silently ignore
-			{} 
-		delete hb;
-		}
-
-	test.Title();
-	test.Start(_L("Testing"));
-
-	test.Printf(_L("Go for %d iterations\n"), iter);
-
-	// Remember the number of open handles. Just for a sanity check ....
-	TInt start_thc, start_phc;
-	RThread().HandleCount(start_phc, start_thc);
-
-	while (iter--)
-		{
-		MDmTest* tests[] = 
-			{
-			new CDmTest1(KDmIdRoot, EPwStandby),
-			new CDmTest1(KDmIdRoot, EPwOff),
-			new CDmTest1(KDmIdRoot, EPwActive),
-			new CDmTest1(KDmIdApps, EPwStandby),
-			new CDmTest1(KDmIdApps, EPwOff),
-			new CDmTest1(KDmIdApps, EPwActive),
-			new CDmTest1(KDmIdUiApps, EPwStandby),
-			new CDmTest1(KDmIdUiApps, EPwOff),
-			new CDmTest1(KDmIdUiApps, EPwActive),
-			new CDmTest2(EPwStandby),
-			new CDmTest3(),
-	
-			// platform security tests
-			new CDmTest4(),
-
-			// PREQ810 tests :
-			// note that we use a fictitious power state to prevent any 
-			new CDmTest5(KDmIdRoot, KDmIdRoot, EPwActive+10, EStartupCriticalDynamic),
-			new CDmTest5(KDmIdUiApps, KDmIdTestAB, EPwActive+10, EStartupCriticalDynamic),
-
-        // negative tests
-			new CDmTest6(),
-
-
-			// observer tests
-     		new CDmTest7(KDmIdTestA),
-			new CDmTest7(KDmIdRoot),
-			
-			};
-
-		for (unsigned int i = 0; i < sizeof(tests)/sizeof(*tests); ++i)
-			{
-			test(tests[i] != NULL);
-			tests[i]->Perform();
-			tests[i]->Release();
-			}
-
-		}
-
-	test.End();
-
-	// Sanity check for open handles and for pending requests ...
-	TInt end_thc, end_phc;
-	RThread().HandleCount(end_phc, end_thc);
-	test(start_thc == end_thc);
-	test(start_phc == end_phc);
-	test(RThread().RequestCount() >= 0);
-
-	delete scheduler;
-	delete trapHandler;
-
-	return KErrNone;
-	}