kerneltest/e32test/domainmgr/t_domain.cpp
changeset 279 957c583b417b
parent 269 d57b86b1867a
child 286 48e57fb1237e
equal deleted inserted replaced
275:2b433474f2ba 279:957c583b417b
     9 // Nokia Corporation - initial contribution.
     9 // Nokia Corporation - initial contribution.
    10 //
    10 //
    11 // Contributors:
    11 // Contributors:
    12 //
    12 //
    13 // Description:
    13 // Description:
    14 // e32test\power\t_domain.cpp
    14 // e32test/domainmgr/t_domain.cpp
    15 // Overview:
    15 // Overview:
    16 // Domain manager tests
    16 // Domain manager tests
    17 // API Information:
    17 // API Information:
    18 // RDmDomain, RDmDomainManager CDmDomain, CDmDomainManager
    18 // RDmDomain, RDmDomainManager CDmDomain, CDmDomainManager
    19 // Details:
    19 // Details:
    49 // Failures and causes:
    49 // Failures and causes:
    50 // Base Port information:
    50 // Base Port information:
    51 // 
    51 // 
    52 //
    52 //
    53 
    53 
       
    54 #define __E32TEST_EXTENSION__
    54 #include <e32test.h>
    55 #include <e32test.h>
    55 #include <domainmember.h>
    56 #include <e32debug.h>
    56 #include <domainmanager.h>
    57 #include <e32ldr_private.h>
    57 #include <domainobserver.h>
    58 #include <domainobserver.h>
       
    59 
    58 #include "domainpolicytest.h"
    60 #include "domainpolicytest.h"
    59 #include <e32debug.h>
    61 #include "t_domain.h"
    60 #include <f32file.h>
    62 
    61 #include <e32ldr.h>
    63 
    62 #include <e32ldr_private.h>
    64 RTest test(_L(" T_DOMAIN "));
    63 
       
    64 LOCAL_D RTest test(_L(" T_DOMAIN "));
       
    65 _LIT(KThreadName, "t_domain_panic_thread");
    65 _LIT(KThreadName, "t_domain_panic_thread");
       
    66 
       
    67 TDmHierarchyId GHierarchyIdUnderTest = 0;
    66 
    68 
    67 #ifdef _DEBUG
    69 #ifdef _DEBUG
    68 #define __PRINT(x) {RDebug::Print x;}
    70 #define __PRINT(x) {RDebug::Print x;}
    69 #else
    71 #else
    70 #define __PRINT(x) 
    72 #define __PRINT(x) 
    71 #endif
    73 #endif
    72 
       
    73 class CDmTestMember;
       
    74 
       
    75 // interface for test domain memebers.
       
    76 // Any test memeber should derive from this interface 
       
    77 class MDmDomainMember
       
    78 	{
       
    79 public:
       
    80 	virtual TDmHierarchyId HierarchyId() = 0;
       
    81 	virtual TDmDomainId	DomainId() = 0;
       
    82 	virtual TDmDomainState State() = 0;
       
    83 	virtual TInt Status() = 0;
       
    84 	virtual TUint32 Ordinal() = 0;
       
    85 	virtual TInt Notifications() = 0;
       
    86 	};
       
    87 
       
    88 class MDmTest
       
    89 	{
       
    90 public:
       
    91 	virtual void Perform() = 0;
       
    92 	virtual void Release() = 0;
       
    93 	virtual TInt TransitionNotification(MDmDomainMember& aDomainMember) = 0;
       
    94 	virtual void TransitionRequestComplete() = 0;
       
    95 	};
       
    96 
       
    97 // for the test hierarchy, we generate an ordinal for each domain
       
    98 // each byte of which describes the exact location of the domain in the hierarchy
       
    99 #define ORDINAL_FROM_DOMAINID0(id) (id)
       
   100 #define ORDINAL_FROM_DOMAINID1(parent, id) ((parent << 8) | (id))
       
   101 #define ORDINAL_FROM_DOMAINID2(grandparent, parent, id) ((grandparent << 16) | (parent << 8) | id)
       
   102 #define ORDINAL_FROM_DOMAINID3(greatgrandparent, grandparent, parent, id) ((greatgrandparent << 24) | (grandparent << 16) | (parent << 8) | id)
       
   103 #define PARENT_ORDINAL(id) (id >> 8)
       
   104 
       
   105 #define ORDINAL_LEVEL(ordinal)			\
       
   106 	((ordinal & 0xFF00) == 0) ? 1 :			\
       
   107 	((ordinal & 0xFF0000) == 0) ? 2 :		\
       
   108 	((ordinal & 0xFF000000) == 0) ? 3 : 4;
       
   109 
       
   110 
       
   111 // get the least significant domain id character (for debugging purposes)
       
   112 TBool GetDomainChar(TDmDomainId aDomainId, TChar& aChar)
       
   113 	{
       
   114 	TBool found = ETrue;
       
   115 	switch(aDomainId)
       
   116 		{
       
   117 		
       
   118 		case KDmIdTestA:	aChar = 'A'; break;
       
   119 		case KDmIdTestB:	aChar = 'B'; break;
       
   120 		case KDmIdTestC:	aChar = 'C'; break;
       
   121 		case KDmIdTestAA:	aChar = 'A'; break;
       
   122 		case KDmIdTestAB:	aChar = 'B'; break;
       
   123 		case KDmIdTestBA:	aChar = 'A'; break;
       
   124 		case KDmIdTestCA:	aChar = 'A'; break;
       
   125 		case KDmIdTestABA:	aChar = 'A'; break;
       
   126 		case KDmIdTestABB:	aChar = 'B'; break;
       
   127 		case KDmIdTestCAA:	aChar = 'A'; break;
       
   128 		// domain char not found 
       
   129 		case KDmIdNone:
       
   130 		case KDmIdRoot:		
       
   131 		default:			
       
   132 			found = EFalse;
       
   133 		}
       
   134 	return found;
       
   135 	}
       
   136 
       
   137 // prints the 4-character domain string into the passed descriptor (for debugging purposes)
       
   138 // e.g. "CAA" for KDmIdTestCAA
       
   139 void GetDomainDesc(TUint32 aOrdinal, TDes& aDes)
       
   140 	{
       
   141 	if (aOrdinal == KDmIdRoot)
       
   142 		{
       
   143 		aDes.Append(_L("root"));
       
   144 		return;
       
   145 		}
       
   146 
       
   147 	TUint32 val =  aOrdinal;
       
   148 
       
   149 	for (TInt n=0; n<4; n++)
       
   150 		{
       
   151 		TDmDomainId domainId = (TDmDomainId) (val >> 24);
       
   152 		TChar ch;
       
   153 		TBool found = GetDomainChar(domainId, ch);
       
   154 		if (found)
       
   155 			aDes.Append(ch);
       
   156 		val = val << 8;
       
   157 		}
       
   158 
       
   159 	}
       
   160 
       
   161 
       
   162 class CDmTestMember : public CActive, public MDmDomainMember
       
   163 	{
       
   164 public:	
       
   165 	// from CActive
       
   166 	void RunL();
       
   167 	// from MDmDomainMember
       
   168 	inline TDmHierarchyId HierarchyId() {return iHierarchy;};
       
   169 	inline TDmDomainId	DomainId() {return iId;};
       
   170 	inline TDmDomainState State() {return iState;};
       
   171 	inline TInt Status() {return iStatus.Int();};
       
   172 	inline TUint32 Ordinal() {return iOrdinal;};
       
   173 	inline TInt Notifications() {return iNotifications;};
       
   174 
       
   175 	CDmTestMember(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest*);
       
   176 	~CDmTestMember();
       
   177 	void Acknowledge();
       
   178 
       
   179 protected:
       
   180 	// from CActive
       
   181 	virtual void DoCancel();
       
   182 
       
   183 
       
   184 public:
       
   185 	TDmHierarchyId iHierarchy;
       
   186 	TDmDomainId	iId;
       
   187 	TDmDomainState iState;
       
   188 	TUint32		iOrdinal;
       
   189 	MDmTest*	iTest;	
       
   190 	TInt		iNotifications;
       
   191 	RDmDomain	iDomain;
       
   192 	};
       
   193 
       
   194 
       
   195 
       
   196 CDmTestMember::CDmTestMember(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest* aTest) : CActive(CActive::EPriorityStandard), 
       
   197 	iHierarchy(aHierarchy), iId(aId), iOrdinal(aOrdinal), iTest(aTest)
       
   198 	{
       
   199 	TInt r;
       
   200 
       
   201 	if (iHierarchy == KDmHierarchyIdPower)
       
   202 		 r = iDomain.Connect(iId);
       
   203 	else
       
   204 		 r = iDomain.Connect(iHierarchy, iId);
       
   205 
       
   206 	test(r == KErrNone);
       
   207 
       
   208 	CActiveScheduler::Add(this);
       
   209 
       
   210 	iDomain.RequestTransitionNotification(CActive::iStatus);
       
   211 	CActive::SetActive();
       
   212 	}
       
   213 
       
   214 CDmTestMember::~CDmTestMember()
       
   215 	{
       
   216 	CActive::Cancel();
       
   217 	iDomain.Close();
       
   218 	}
       
   219 
       
   220 void CDmTestMember::Acknowledge()
       
   221 	{
       
   222 	iDomain.AcknowledgeLastState();
       
   223 	}
       
   224 
       
   225 void CDmTestMember::RunL()
       
   226 	{
       
   227 
       
   228 	iNotifications++;
       
   229 
       
   230 	iState = iDomain.GetState();
       
   231 
       
   232 	TInt ackError = iTest->TransitionNotification(*this);
       
   233 	if (ackError == KErrNone)
       
   234 		iDomain.AcknowledgeLastState();
       
   235 	else if (ackError == KErrAbort)	// don't acknowledge
       
   236 		;
       
   237 	else
       
   238 		iDomain.AcknowledgeLastState(ackError);
       
   239 
       
   240 	
       
   241 	// request another notification (even if we didn't acknowledge the last one)
       
   242 	iDomain.RequestTransitionNotification(CActive::iStatus);
       
   243 	CActive::SetActive();
       
   244 	}
       
   245 
       
   246 void CDmTestMember::DoCancel()
       
   247 	{
       
   248 	iDomain.CancelTransitionNotification();
       
   249 	}
       
   250 
       
   251 
       
   252 // CDomainMemberAo
       
   253 class CDomainMemberAo : public CDmDomain, public MDmDomainMember
       
   254 	{
       
   255 public:	
       
   256 	static CDomainMemberAo* NewL(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest*);
       
   257 	~CDomainMemberAo();
       
   258 
       
   259 	// from CActive
       
   260 	void RunL();
       
   261 
       
   262 	// from MDmDomainMember
       
   263 	inline TDmHierarchyId HierarchyId() {return iHierarchy;};
       
   264 	inline TDmDomainId	DomainId() {return iId;};
       
   265 	inline TDmDomainState State() {return iState;};
       
   266 	inline TInt Status() {return iStatus.Int();};
       
   267 	inline TUint32 Ordinal() {return iOrdinal;};
       
   268 	inline TInt Notifications() {return iNotifications;};
       
   269 
       
   270 private:
       
   271 	CDomainMemberAo(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest*);
       
   272 
       
   273 public:
       
   274 	TDmHierarchyId iHierarchy;
       
   275 	TDmDomainId	iId;
       
   276 	TDmDomainState iState;
       
   277 	TUint32		iOrdinal;
       
   278 	MDmTest*	iTest;	
       
   279 	TInt		iNotifications;
       
   280 	};
       
   281 
       
   282 CDomainMemberAo* CDomainMemberAo::NewL(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest* aTest)
       
   283 	{
       
   284 	CDomainMemberAo* self=new (ELeave) CDomainMemberAo(aHierarchy, aId, aOrdinal, aTest);
       
   285 	CleanupStack::PushL(self);
       
   286 	self->ConstructL();
       
   287 
       
   288 	self->RequestTransitionNotification();
       
   289 
       
   290 	CleanupStack::Pop();
       
   291 	return self;
       
   292 	}
       
   293 
       
   294 CDomainMemberAo::CDomainMemberAo(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest* aTest) : 
       
   295 	CDmDomain(aHierarchy, aId), 
       
   296 	iHierarchy(aHierarchy), iId(aId), iOrdinal(aOrdinal), iTest(aTest)
       
   297 	{
       
   298 	}
       
   299 
       
   300 CDomainMemberAo::~CDomainMemberAo()
       
   301 	{
       
   302 	Cancel();
       
   303 	}
       
   304 
       
   305 void CDomainMemberAo::RunL()
       
   306 	{
       
   307 	iNotifications++;
       
   308 
       
   309 	iState = GetState();
       
   310 
       
   311 	TInt ackError = iTest->TransitionNotification(*this);
       
   312 	if (ackError == KErrNone)
       
   313 		AcknowledgeLastState(ackError);
       
   314 	else if (ackError == KErrAbort)	// don't acknowledge
       
   315 		;
       
   316 	else
       
   317 		AcknowledgeLastState(ackError); 
       
   318 	if (ackError != KErrAbort)	
       
   319 		AcknowledgeLastState(ackError);
       
   320 
       
   321 	
       
   322 	// request another notification (even if we didn't acknowledge the last one)
       
   323 	RequestTransitionNotification();
       
   324 	}
       
   325 
       
   326 
       
   327 // CDomainManagerAo
       
   328 class CDomainManagerAo : public CDmDomainManager
       
   329 	{
       
   330 public:	
       
   331 	~CDomainManagerAo();
       
   332 	static CDomainManagerAo* NewL(TDmHierarchyId aHierarchy, MDmTest& aTest);
       
   333 
       
   334 	// from CActive
       
   335 	void RunL();
       
   336 
       
   337 private:
       
   338 	CDomainManagerAo(TDmHierarchyId aHierarchy, MDmTest& aTest);
       
   339 
       
   340 private:
       
   341 	MDmTest& iTest;
       
   342 	};
       
   343 
       
   344 
       
   345 CDomainManagerAo* CDomainManagerAo::NewL(TDmHierarchyId aHierarchy, MDmTest& aTest)
       
   346 	{
       
   347 	CDomainManagerAo* self=new (ELeave) CDomainManagerAo(aHierarchy, aTest);
       
   348 	CleanupStack::PushL(self);
       
   349 
       
   350 	self->ConstructL();
       
   351 	CleanupStack::Pop();
       
   352 	return self;
       
   353 	}
       
   354 
       
   355 CDomainManagerAo::CDomainManagerAo(TDmHierarchyId aHierarchy, MDmTest& aTest) : 
       
   356 	CDmDomainManager(aHierarchy), iTest(aTest)
       
   357 	{
       
   358 	}
       
   359 
       
   360 CDomainManagerAo::~CDomainManagerAo()
       
   361 	{
       
   362 	}
       
   363 
       
   364 void CDomainManagerAo::RunL()
       
   365 	{
       
   366 	iTest.TransitionRequestComplete();
       
   367 	}
       
   368 
    74 
   369 
    75 
   370 class CDmTest1 : public CActive, public MDmTest
    76 class CDmTest1 : public CActive, public MDmTest
   371 	{
    77 	{
   372 public: // from CActive
    78 public: // from CActive
   887 	//
   593 	//
   888 	// Test domain transitions
   594 	// Test domain transitions
   889 	//
   595 	//
   890 	CActiveScheduler::Add(this);
   596 	CActiveScheduler::Add(this);
   891 
   597 
   892 	TInt r = RDmDomainManager::AddDomainHierarchy(KDmHierarchyIdTest);
   598 	TInt r = RDmDomainManager::AddDomainHierarchy(GHierarchyIdUnderTest);
   893 
   599 
   894     RDebug::Printf("RDmDomainManager::AddDomainHierarchy returns %d", r );
   600     RDebug::Printf("RDmDomainManager::AddDomainHierarchy returns %d", r );
   895 
   601 
   896 	test(r == KErrNone);
   602 	test(r == KErrNone);
   897 
   603 
   910 	test.Printf(_L("Domain id = 0x%x, Target State = 0x%x\n"), iTestDomainId, iTestState);
   616 	test.Printf(_L("Domain id = 0x%x, Target State = 0x%x\n"), iTestDomainId, iTestState);
   911 
   617 
   912 	TInt testMemberCount = 0;
   618 	TInt testMemberCount = 0;
   913 
   619 
   914 	// Add some test hierarchy members - these use the RDmDomain API
   620 	// Add some test hierarchy members - these use the RDmDomain API
   915 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this);
   621 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this);
   916 	test(iTestMembers[testMemberCount++] != NULL);
   622 	test(iTestMembers[testMemberCount++] != NULL);
   917 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this);
   623 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this);
   918 	test(iTestMembers[testMemberCount++] != NULL);
   624 	test(iTestMembers[testMemberCount++] != NULL);
   919 	
   625 	
   920 	// row 1
   626 	// row 1
   921 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this);
   627 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this);
   922 	test(iTestMembers[testMemberCount++] != NULL);
   628 	test(iTestMembers[testMemberCount++] != NULL);
   923 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this);
   629 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this);
   924 	test(iTestMembers[testMemberCount++] != NULL);
   630 	test(iTestMembers[testMemberCount++] != NULL);
   925 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this);
   631 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this);
   926 	test(iTestMembers[testMemberCount++] != NULL);
   632 	test(iTestMembers[testMemberCount++] != NULL);
   927 	
   633 	
   928 	// row2
   634 	// row2
   929 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this);
   635 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this);
   930 	test(iTestMembers[testMemberCount++] != NULL);
   636 	test(iTestMembers[testMemberCount++] != NULL);
   931 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this);
   637 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this);
   932 	test(iTestMembers[testMemberCount++] != NULL);
   638 	test(iTestMembers[testMemberCount++] != NULL);
   933 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this);
   639 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this);
   934 	test(iTestMembers[testMemberCount++] != NULL);
   640 	test(iTestMembers[testMemberCount++] != NULL);
   935 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this);
   641 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this);
   936 	test(iTestMembers[testMemberCount++] != NULL);
   642 	test(iTestMembers[testMemberCount++] != NULL);
   937 	
   643 	
   938 	// row 3
   644 	// row 3
   939 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this);
   645 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this);
   940 	test(iTestMembers[testMemberCount++] != NULL);
   646 	test(iTestMembers[testMemberCount++] != NULL);
   941 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this);
   647 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this);
   942 	test(iTestMembers[testMemberCount++] != NULL);
   648 	test(iTestMembers[testMemberCount++] != NULL);
   943 	iTestMembers[testMemberCount] = new CDmTestMember(KDmHierarchyIdTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this);
   649 	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this);
   944 	test(iTestMembers[testMemberCount++] != NULL);
   650 	test(iTestMembers[testMemberCount++] != NULL);
   945 
   651 
   946 	// add some power hierarchy members - these use the CDmDomain AO API
   652 	// add some power hierarchy members - these use the CDmDomain AO API
   947 	TInt powerMemberCount = 0;
   653 	TInt powerMemberCount = 0;
   948 	TRAP(r, iPowerMembers[powerMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdPower, KDmIdRoot, KDmIdRoot, this));
   654 	TRAP(r, iPowerMembers[powerMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdPower, KDmIdRoot, KDmIdRoot, this));
   999 		}
   705 		}
  1000 
   706 
  1001 
   707 
  1002 
   708 
  1003 	// connect to the test hierarchy
   709 	// connect to the test hierarchy
  1004 	r = iTestDomainManager.Connect(KDmHierarchyIdTest);
   710 	r = iTestDomainManager.Connect(GHierarchyIdUnderTest);
  1005 	test(r == KErrNone);
   711 	test(r == KErrNone);
  1006 
   712 
  1007 	// verify that we can't connect to the same hierarchy more than once
   713 	// verify that we can't connect to the same hierarchy more than once
  1008 	RDmDomainManager	domainManager;
   714 	RDmDomainManager	domainManager;
  1009 	r = domainManager.Connect(KDmHierarchyIdTest);
   715 	r = domainManager.Connect(GHierarchyIdUnderTest);
  1010 	test(r == KErrInUse);
   716 	test(r == KErrInUse);
  1011 
   717 
  1012 
   718 
  1013 
   719 
  1014 	//*************************************************
   720 	//*************************************************
  1043 	//*************************************************
   749 	//*************************************************
  1044 	// Test 5c- verify domains are in correct state
   750 	// Test 5c- verify domains are in correct state
  1045 	//*************************************************
   751 	//*************************************************
  1046 	test.Next(_L("Test 5c- verify domains are in correct state"));
   752 	test.Next(_L("Test 5c- verify domains are in correct state"));
  1047 	RDmDomain domainMember;
   753 	RDmDomain domainMember;
  1048 	r = domainMember.Connect(KDmHierarchyIdTest, iTestDomainId);
   754 	r = domainMember.Connect(GHierarchyIdUnderTest, iTestDomainId);
  1049 	test (r == KErrNone);
   755 	test (r == KErrNone);
  1050 	TDmDomainState state = domainMember.GetState();
   756 	TDmDomainState state = domainMember.GetState();
  1051 	domainMember.Close();
   757 	domainMember.Close();
  1052 	test (state == iTestState);
   758 	test (state == iTestState);
  1053 
   759 
  1054 	// if the transition request is not on the root, verify that that 
   760 	// if the transition request is not on the root, verify that that 
  1055 	// the root domain and the transition domain are in different states
   761 	// the root domain and the transition domain are in different states
  1056 	if (iTestDomainId != KDmIdRoot && iTestState != EStartupCriticalStatic)
   762 	if (iTestDomainId != KDmIdRoot && iTestState != EStartupCriticalStatic)
  1057 		{
   763 		{
  1058 		r = domainMember.Connect(KDmHierarchyIdTest, KDmIdRoot);
   764 		r = domainMember.Connect(GHierarchyIdUnderTest, KDmIdRoot);
  1059 		test (r == KErrNone);
   765 		test (r == KErrNone);
  1060 		TDmDomainState state = domainMember.GetState();
   766 		TDmDomainState state = domainMember.GetState();
  1061 		domainMember.Close();
   767 		domainMember.Close();
  1062 		test (state != iTestState);
   768 		test (state != iTestState);
  1063 		}
   769 		}
  1095 	
   801 	
  1096 
   802 
  1097 	//*************************************************
   803 	//*************************************************
  1098 	// Test 5e- request a positive transition, with zero acknowledgements
   804 	// Test 5e- request a positive transition, with zero acknowledgements
  1099 	// issue a positive transition with no members acknowledging the transition
   805 	// issue a positive transition with no members acknowledging the transition
       
   806 	// Expect timeout from server
       
   807 	// Also covers Testcase 2.3.2 from Transition Monitoring test suite when
       
   808 	// policy used in 96 or 97.
  1100 	//*************************************************
   809 	//*************************************************
  1101 	test.Next(_L("Test 5e- request a positive transition, with zero acknowledgements"));
   810 	test.Next(_L("Test 5e- request a positive transition, with zero acknowledgements"));
  1102 	iAckMode = KAckNever;
   811 	iAckMode = KAckNever;
  1103 	iTestState++;		// EStartupCriticalDynamic;
   812 	iTestState++;		// EStartupCriticalDynamic;
  1104 	iPowerState++;		// EPwActive
   813 	iPowerState++;		// EPwActive
  1265 	test(status.Int() == KRequestPending);
   974 	test(status.Int() == KRequestPending);
  1266 	User::WaitForRequest(status);
   975 	User::WaitForRequest(status);
  1267 	test(status.Int() == KErrNone);
   976 	test(status.Int() == KErrNone);
  1268 	manager.Close();
   977 	manager.Close();
  1269 	
   978 	
  1270 	r = manager.Connect(KDmHierarchyIdTest);
   979 	r = manager.Connect(GHierarchyIdUnderTest);
  1271 	test (r == KErrNone);
   980 	test (r == KErrNone);
  1272 	manager.RequestDomainTransition(KDmIdRoot, EStartupCriticalStatic, ETraverseDefault, status);
   981 	manager.RequestDomainTransition(KDmIdRoot, EStartupCriticalStatic, ETraverseDefault, status);
  1273 	test(status.Int() == KRequestPending);
   982 	test(status.Int() == KRequestPending);
  1274 	User::WaitForRequest(status);
   983 	User::WaitForRequest(status);
  1275 	test(status.Int() == KErrNone);
   984 	test(status.Int() == KErrNone);
  1297 		{
  1006 		{
  1298 		__PRINT((_L("CDmTest5::TransitionNotification(), Hierarchy = %d, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
  1007 		__PRINT((_L("CDmTest5::TransitionNotification(), Hierarchy = %d, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
  1299 			aDomainMember.HierarchyId(), aDomainMember.Ordinal(), aDomainMember.State(), aDomainMember.Status()));
  1008 			aDomainMember.HierarchyId(), aDomainMember.Ordinal(), aDomainMember.State(), aDomainMember.Status()));
  1300 		test(aDomainMember.State() == iPowerState);
  1009 		test(aDomainMember.State() == iPowerState);
  1301 		}
  1010 		}
  1302 	else if (aDomainMember.HierarchyId() == KDmHierarchyIdTest)
  1011 	else if (aDomainMember.HierarchyId() == GHierarchyIdUnderTest)
  1303 		{
  1012 		{
  1304 		TBuf16<4> buf;
  1013 		TBuf16<4> buf;
  1305 		GetDomainDesc(aDomainMember.Ordinal(), buf);
  1014 		GetDomainDesc(aDomainMember.Ordinal(), buf);
  1306 
  1015 
  1307 		__PRINT((_L("CDmTest5::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
  1016 		__PRINT((_L("CDmTest5::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
  1317 	// check that each parent domain has received a notification already
  1026 	// check that each parent domain has received a notification already
  1318 	// if not, check that each child domain has received a notification already
  1027 	// if not, check that each child domain has received a notification already
  1319 
  1028 
  1320 	CDmTestMember** mp;
  1029 	CDmTestMember** mp;
  1321 
  1030 
  1322 	if (aDomainMember.HierarchyId() == KDmHierarchyIdTest && iAckMode == KAckAlways)
  1031 	if (aDomainMember.HierarchyId() == GHierarchyIdUnderTest && iAckMode == KAckAlways)
  1323 		{
  1032 		{
  1324 
  1033 
  1325 		if (iTraverseDirection == ETraverseParentsFirst)
  1034 		if (iTraverseDirection == ETraverseParentsFirst)
  1326 			{
  1035 			{
  1327 			TUint ordThis = aDomainMember.Ordinal();
  1036 			TUint ordThis = aDomainMember.Ordinal();
  1497 			break;
  1206 			break;
  1498 		case ENegTestTransitionInvalidMode:
  1207 		case ENegTestTransitionInvalidMode:
  1499 			{
  1208 			{
  1500 			RDmDomainManager manager;
  1209 			RDmDomainManager manager;
  1501 			TRequestStatus status;
  1210 			TRequestStatus status;
  1502 			TInt r = manager.Connect(KDmHierarchyIdTest);
  1211 			TInt r = manager.Connect(GHierarchyIdUnderTest);
  1503 			test(r == KErrNone);
  1212 			test(r == KErrNone);
  1504 
  1213 
  1505 			User::SetJustInTime(EFalse);
  1214 			User::SetJustInTime(EFalse);
  1506 			manager.RequestDomainTransition(KDmIdRoot, 0, TDmTraverseDirection(-1), status);
  1215 			manager.RequestDomainTransition(KDmIdRoot, 0, TDmTraverseDirection(-1), status);
  1507 			}
  1216 			}
  1569  	__UHEAP_MARK;
  1278  	__UHEAP_MARK;
  1570 
  1279 
  1571 	CActiveScheduler::Add(this);
  1280 	CActiveScheduler::Add(this);
  1572 
  1281 
  1573 	CDomainManagerAo* iTestDomainManager = NULL;
  1282 	CDomainManagerAo* iTestDomainManager = NULL;
  1574 	TRAP_IGNORE(iTestDomainManager = CDomainManagerAo::NewL(KDmHierarchyIdTest, *this));
  1283 	TRAP_IGNORE(iTestDomainManager = CDomainManagerAo::NewL(GHierarchyIdUnderTest, *this));
  1575 	test (iTestDomainManager != NULL);
  1284 	test (iTestDomainManager != NULL);
  1576 
  1285 
  1577 	TInt r = CDomainManagerAo::AddDomainHierarchy(KDmHierarchyIdTest);
  1286 	TInt r = CDomainManagerAo::AddDomainHierarchy(GHierarchyIdUnderTest);
  1578 	test(r == KErrNone);
  1287 	test(r == KErrNone);
  1579 
  1288 
  1580 	//*************************************************
  1289 	//*************************************************
  1581 	// Test 6a - Connect to the same hierarchy twice
  1290 	// Test 6a - Connect to the same hierarchy twice
  1582 	//*************************************************
  1291 	//*************************************************
  1583 	test.Next(_L("Test 6a - Connect to the same hierarchy twice"));
  1292 	test.Next(_L("Test 6a - Connect to the same hierarchy twice"));
  1584 
  1293 
  1585 	// verify that we can't connect to the same hierarchy more than once
  1294 	// verify that we can't connect to the same hierarchy more than once
  1586 	CDomainManagerAo* testDomainManager = NULL;
  1295 	CDomainManagerAo* testDomainManager = NULL;
  1587 	TRAP(r, testDomainManager = CDomainManagerAo::NewL(KDmHierarchyIdTest, *this));
  1296 	TRAP(r, testDomainManager = CDomainManagerAo::NewL(GHierarchyIdUnderTest, *this));
  1588 	test(r == KErrInUse);
  1297 	test(r == KErrInUse);
  1589 	test (testDomainManager == NULL);
  1298 	test (testDomainManager == NULL);
  1590 
  1299 
  1591 
  1300 
  1592 	TInt testMemberCount = 0;
  1301 	TInt testMemberCount = 0;
  1593 
  1302 
  1594 	// Add some test hierarchy members
  1303 	// Add some test hierarchy members
  1595 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
  1304 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
  1596 	test(iTestMembers[testMemberCount++] != NULL);
  1305 	test(iTestMembers[testMemberCount++] != NULL);
  1597 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
  1306 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
  1598 	test(iTestMembers[testMemberCount++] != NULL);
  1307 	test(iTestMembers[testMemberCount++] != NULL);
  1599 	
  1308 	
  1600 	// row 1
  1309 	// row 1
  1601 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this));
  1310 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this));
  1602 	test(iTestMembers[testMemberCount++] != NULL);
  1311 	test(iTestMembers[testMemberCount++] != NULL);
  1603 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this));
  1312 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this));
  1604 	test(iTestMembers[testMemberCount++] != NULL);
  1313 	test(iTestMembers[testMemberCount++] != NULL);
  1605 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this));
  1314 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this));
  1606 	test(iTestMembers[testMemberCount++] != NULL);
  1315 	test(iTestMembers[testMemberCount++] != NULL);
  1607 	
  1316 	
  1608 	// row2
  1317 	// row2
  1609 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this));
  1318 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this));
  1610 	test(iTestMembers[testMemberCount++] != NULL);
  1319 	test(iTestMembers[testMemberCount++] != NULL);
  1611 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this));
  1320 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this));
  1612 	test(iTestMembers[testMemberCount++] != NULL);
  1321 	test(iTestMembers[testMemberCount++] != NULL);
  1613 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this));
  1322 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this));
  1614 	test(iTestMembers[testMemberCount++] != NULL);
  1323 	test(iTestMembers[testMemberCount++] != NULL);
  1615 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this));
  1324 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this));
  1616 	test(iTestMembers[testMemberCount++] != NULL);
  1325 	test(iTestMembers[testMemberCount++] != NULL);
  1617 	
  1326 	
  1618 	// row 3
  1327 	// row 3
  1619 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this));
  1328 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this));
  1620 	test(iTestMembers[testMemberCount++] != NULL);
  1329 	test(iTestMembers[testMemberCount++] != NULL);
  1621 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this));
  1330 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this));
  1622 	test(iTestMembers[testMemberCount++] != NULL);
  1331 	test(iTestMembers[testMemberCount++] != NULL);
  1623 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this));
  1332 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this));
  1624 	test(iTestMembers[testMemberCount++] != NULL);
  1333 	test(iTestMembers[testMemberCount++] != NULL);
  1625 
  1334 
  1626 
  1335 
  1627 	//*************************************************
  1336 	//*************************************************
  1628 	// Test 6b change to current state
  1337 	// Test 6b change to current state
  1649 	// Test 6c cancel a member notification request
  1358 	// Test 6c cancel a member notification request
  1650 	//*************************************************
  1359 	//*************************************************
  1651 	test.Next(_L("Test 6c cancel a member notification request"));
  1360 	test.Next(_L("Test 6c cancel a member notification request"));
  1652 	RDmDomain domainMember;
  1361 	RDmDomain domainMember;
  1653 	TRequestStatus status;
  1362 	TRequestStatus status;
  1654 	domainMember.Connect(KDmHierarchyIdTest, iTestDomainId);
  1363 	domainMember.Connect(GHierarchyIdUnderTest, iTestDomainId);
  1655 	domainMember.RequestTransitionNotification(status);
  1364 	domainMember.RequestTransitionNotification(status);
  1656 	domainMember.CancelTransitionNotification();
  1365 	domainMember.CancelTransitionNotification();
  1657 	User::WaitForRequest(status);
  1366 	User::WaitForRequest(status);
  1658 	domainMember.Close();
  1367 	domainMember.Close();
  1659 
  1368 
  1660 	//*************************************************
  1369 	//*************************************************
  1661 	// Test 6d cancel a member notification request without having first requested a notification
  1370 	// Test 6d cancel a member notification request without having first requested a notification
  1662 	//*************************************************
  1371 	//*************************************************
  1663 	test.Next(_L("Test 6d cancel a member notification request without having first requested a notification"));
  1372 	test.Next(_L("Test 6d cancel a member notification request without having first requested a notification"));
  1664 	domainMember.Connect(KDmHierarchyIdTest, iTestDomainId);
  1373 	domainMember.Connect(GHierarchyIdUnderTest, iTestDomainId);
  1665 	domainMember.CancelTransitionNotification();
  1374 	domainMember.CancelTransitionNotification();
  1666 	domainMember.Close();
  1375 	domainMember.Close();
  1667 
  1376 
  1668 	//*************************************************
  1377 	//*************************************************
  1669 	// Test 6e domain controller adds invalid hierarchy
  1378 	// Test 6e domain controller adds invalid hierarchy
  1681 
  1390 
  1682 	//*************************************************
  1391 	//*************************************************
  1683 	// Test 6g domain member connects to valid hierarchy but invalid domain
  1392 	// Test 6g domain member connects to valid hierarchy but invalid domain
  1684 	//*************************************************
  1393 	//*************************************************
  1685 	test.Next(_L("Test 6g domain member connects to valid hierarchy but invalid domain"));
  1394 	test.Next(_L("Test 6g domain member connects to valid hierarchy but invalid domain"));
  1686 	r = domainMember.Connect(KDmHierarchyIdTest, TDmDomainId(-1));
  1395 	r = domainMember.Connect(GHierarchyIdUnderTest, TDmDomainId(-1));
  1687 	test (r == KDmErrBadDomainId);
  1396 	test (r == KDmErrBadDomainId);
  1688 
  1397 
  1689 	delete iTestDomainManager;
  1398 	delete iTestDomainManager;
  1690 	iTestDomainManager = NULL;
  1399 	iTestDomainManager = NULL;
  1691 
  1400 
  1724 	{
  1433 	{
  1725 	TInt status = aDomainMember.Status();
  1434 	TInt status = aDomainMember.Status();
  1726 		
  1435 		
  1727 	iTestNotifications++;
  1436 	iTestNotifications++;
  1728 
  1437 
  1729 	test (aDomainMember.HierarchyId() == KDmHierarchyIdTest);
  1438 	test (aDomainMember.HierarchyId() == GHierarchyIdUnderTest);
  1730 
  1439 
  1731 	TBuf16<4> buf;
  1440 	TBuf16<4> buf;
  1732 	GetDomainDesc(aDomainMember.Ordinal(), buf);
  1441 	GetDomainDesc(aDomainMember.Ordinal(), buf);
  1733 
  1442 
  1734 	test.Printf(_L("CDmTest6::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
  1443 	test.Printf(_L("CDmTest6::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
  1847 	//
  1556 	//
  1848 	// Test domain transitions with activated observer
  1557 	// Test domain transitions with activated observer
  1849 	//
  1558 	//
  1850 	CActiveScheduler::Add(this);
  1559 	CActiveScheduler::Add(this);
  1851 
  1560 
  1852 	TInt r = RDmDomainManager::AddDomainHierarchy(KDmHierarchyIdTest);
  1561 	TInt r = RDmDomainManager::AddDomainHierarchy(GHierarchyIdUnderTest);
  1853 	test(r == KErrNone);
  1562 	test(r == KErrNone);
  1854 
  1563 
  1855 	CDomainManagerAo* iTestDomainManager = NULL;
  1564 	CDomainManagerAo* iTestDomainManager = NULL;
  1856 	TRAP_IGNORE(iTestDomainManager = CDomainManagerAo::NewL(KDmHierarchyIdTest, *this));
  1565 	TRAP_IGNORE(iTestDomainManager = CDomainManagerAo::NewL(GHierarchyIdUnderTest, *this));
  1857 	test (iTestDomainManager != NULL);
  1566 	test (iTestDomainManager != NULL);
  1858 
  1567 
  1859 	r = CDomainManagerAo::AddDomainHierarchy(KDmHierarchyIdTest);
  1568 	r = CDomainManagerAo::AddDomainHierarchy(GHierarchyIdUnderTest);
  1860 	test(r == KErrNone);
  1569 	test(r == KErrNone);
  1861 
  1570 
  1862 	//*************************************************
  1571 	//*************************************************
  1863 	// Test 7a - Testing observer notifications
  1572 	// Test 7a - Testing observer notifications
  1864 	//*************************************************
  1573 	//*************************************************
  1866 	test.Next(_L("Test 7a - Testing observer notifications"));
  1575 	test.Next(_L("Test 7a - Testing observer notifications"));
  1867 
  1576 
  1868 	TInt testMemberCount = 0;
  1577 	TInt testMemberCount = 0;
  1869 
  1578 
  1870 	// Add some test hierarchy members
  1579 	// Add some test hierarchy members
  1871 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
  1580 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
  1872 	test(iTestMembers[testMemberCount++] != NULL);
  1581 	test(iTestMembers[testMemberCount++] != NULL);
  1873 	
  1582 	
  1874 	// row 1
  1583 	// row 1
  1875 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this));
  1584 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this));
  1876 	test(iTestMembers[testMemberCount++] != NULL);
  1585 	test(iTestMembers[testMemberCount++] != NULL);
  1877 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this));
  1586 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this));
  1878 	test(iTestMembers[testMemberCount++] != NULL);
  1587 	test(iTestMembers[testMemberCount++] != NULL);
  1879 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this));
  1588 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this));
  1880 	test(iTestMembers[testMemberCount++] != NULL);
  1589 	test(iTestMembers[testMemberCount++] != NULL);
  1881 	
  1590 	
  1882 	// row2
  1591 	// row2
  1883 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this));
  1592 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this));
  1884 	test(iTestMembers[testMemberCount++] != NULL);
  1593 	test(iTestMembers[testMemberCount++] != NULL);
  1885 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this));
  1594 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this));
  1886 	test(iTestMembers[testMemberCount++] != NULL);
  1595 	test(iTestMembers[testMemberCount++] != NULL);
  1887 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this));
  1596 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this));
  1888 	test(iTestMembers[testMemberCount++] != NULL);
  1597 	test(iTestMembers[testMemberCount++] != NULL);
  1889 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this));
  1598 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this));
  1890 	test(iTestMembers[testMemberCount++] != NULL);
  1599 	test(iTestMembers[testMemberCount++] != NULL);
  1891 	
  1600 	
  1892 	// row 3
  1601 	// row 3
  1893 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this));
  1602 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this));
  1894 	test(iTestMembers[testMemberCount++] != NULL);
  1603 	test(iTestMembers[testMemberCount++] != NULL);
  1895 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this));
  1604 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this));
  1896 	test(iTestMembers[testMemberCount++] != NULL);
  1605 	test(iTestMembers[testMemberCount++] != NULL);
  1897 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this));
  1606 	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this));
  1898 	test(iTestMembers[testMemberCount++] != NULL);
  1607 	test(iTestMembers[testMemberCount++] != NULL);
  1899 
  1608 
  1900 	// create an observer
  1609 	// create an observer
  1901 	CHierarchyObserver* observer = NULL;
  1610 	CHierarchyObserver* observer = NULL;
  1902 	TRAP(r, observer = CHierarchyObserver::NewL(*this, KDmHierarchyIdTest));
  1611 	TRAP(r, observer = CHierarchyObserver::NewL(*this, GHierarchyIdUnderTest));
  1903 	test (r == KErrNone);
  1612 	test (r == KErrNone);
  1904 	test(observer != NULL);
  1613 	test(observer != NULL);
  1905 	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
  1614 	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
  1906 	
  1615 	
  1907 	// request a state change
  1616 	// request a state change
  1936 	// Test 7b - start & stop the observer
  1645 	// Test 7b - start & stop the observer
  1937 	//*************************************************
  1646 	//*************************************************
  1938 	test.Next(_L("Test 7b - start & stop the observer"));
  1647 	test.Next(_L("Test 7b - start & stop the observer"));
  1939 
  1648 
  1940 	// create an observer, start it stop and then start it again
  1649 	// create an observer, start it stop and then start it again
  1941 	TRAP(r, observer = CHierarchyObserver::NewL(*this, KDmHierarchyIdTest));
  1650 	TRAP(r, observer = CHierarchyObserver::NewL(*this, GHierarchyIdUnderTest));
  1942 	test (r == KErrNone);
  1651 	test (r == KErrNone);
  1943 	test(observer != NULL);
  1652 	test(observer != NULL);
  1944 	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
  1653 	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
  1945 	observer->StopObserver();
  1654 	observer->StopObserver();
  1946 	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
  1655 	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
  2031 	TRAP(r, observer = CHierarchyObserver::NewL(*this, KDmHierarchyIdInvalid));
  1740 	TRAP(r, observer = CHierarchyObserver::NewL(*this, KDmHierarchyIdInvalid));
  2032 	test (r == KErrBadHierarchyId);
  1741 	test (r == KErrBadHierarchyId);
  2033 	
  1742 	
  2034 	
  1743 	
  2035 	test.Printf(_L("Test 7c.2 - Starting the observer with wrong domain Id\n"));
  1744 	test.Printf(_L("Test 7c.2 - Starting the observer with wrong domain Id\n"));
  2036 	TRAP(r, observer = CHierarchyObserver::NewL(*this, KDmHierarchyIdTest));
  1745 	TRAP(r, observer = CHierarchyObserver::NewL(*this, GHierarchyIdUnderTest));
  2037 	test (r == KErrNone);
  1746 	test (r == KErrNone);
  2038 	test(observer != NULL);
  1747 	test(observer != NULL);
  2039 
  1748 
  2040 	//Wrong domain Id
  1749 	//Wrong domain Id
  2041 	const TDmDomainId	KDmIdInvalid	= 0x0f;
  1750 	const TDmDomainId	KDmIdInvalid	= 0x0f;
  2042 	r= observer->StartObserver(KDmIdInvalid, EDmNotifyAll);
  1751 	r= observer->StartObserver(KDmIdInvalid, EDmNotifyAll);
  2043 	test(r==KDmErrBadDomainId);
  1752 	test(r==KDmErrBadDomainId);
  2044 
  1753 
  2045 	test.Printf(_L("Test 7c.3 - Trying to create second observer on the same hierarchy\n"));
  1754 	test.Printf(_L("Test 7c.3 - Trying to create second observer on the same hierarchy\n"));
  2046 	TRAP(r, CHierarchyObserver::NewL(*this, KDmHierarchyIdTest));
  1755 	TRAP(r, CHierarchyObserver::NewL(*this, GHierarchyIdUnderTest));
  2047 	test (r == KDmErrBadSequence);
  1756 	test (r == KDmErrBadSequence);
  2048 
  1757 
  2049 	
  1758 	
  2050 	
  1759 	
  2051 	//*************************************************
  1760 	//*************************************************
  2080 	// restore the domain hierarchies to their initial state so as not to 
  1789 	// restore the domain hierarchies to their initial state so as not to 
  2081 	// upset any subsequent tests which rely on this
  1790 	// upset any subsequent tests which rely on this
  2082 	{
  1791 	{
  2083 	RDmDomainManager manager;
  1792 	RDmDomainManager manager;
  2084 	TRequestStatus status;
  1793 	TRequestStatus status;
  2085 	TInt r = manager.Connect(KDmHierarchyIdTest);
  1794 	TInt r = manager.Connect(GHierarchyIdUnderTest);
  2086 	test (r == KErrNone);
  1795 	test (r == KErrNone);
  2087 	manager.RequestDomainTransition(KDmIdRoot, EStartupCriticalStatic, ETraverseDefault, status);
  1796 	manager.RequestDomainTransition(KDmIdRoot, EStartupCriticalStatic, ETraverseDefault, status);
  2088 	User::WaitForRequest(status);
  1797 	User::WaitForRequest(status);
  2089 	test(status.Int() == KErrNone);
  1798 	test(status.Int() == KErrNone);
  2090 	manager.Close();
  1799 	manager.Close();
  2097 TInt CDmTest7::TransitionNotification(MDmDomainMember& aDomainMember)
  1806 TInt CDmTest7::TransitionNotification(MDmDomainMember& aDomainMember)
  2098 	{
  1807 	{
  2099 		
  1808 		
  2100 	iTestNotifications++;
  1809 	iTestNotifications++;
  2101 
  1810 
  2102 	test (aDomainMember.HierarchyId() == KDmHierarchyIdTest);
  1811 	test (aDomainMember.HierarchyId() == GHierarchyIdUnderTest);
  2103 
  1812 
  2104 	TBuf16<4> buf;
  1813 	TBuf16<4> buf;
  2105 	GetDomainDesc(aDomainMember.Ordinal(), buf);
  1814 	GetDomainDesc(aDomainMember.Ordinal(), buf);
  2106 
  1815 
  2107 	__PRINT((_L("CDmTest7::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
  1816 	__PRINT((_L("CDmTest7::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
  2187 	__PRINT((_L("CDmTest7::TransReqEvent(), aDomainId = %d, aState %d, iTransReqEvents %d\n"), 
  1896 	__PRINT((_L("CDmTest7::TransReqEvent(), aDomainId = %d, aState %d, iTransReqEvents %d\n"), 
  2188 		aDomainId, aState, iTransReqEvents));
  1897 		aDomainId, aState, iTransReqEvents));
  2189 	TestForCompletion();
  1898 	TestForCompletion();
  2190 	}
  1899 	}
  2191 
  1900 
       
  1901 
       
  1902 /**
       
  1903    Increase code coverage, in particular get CPowerUpHandler::DoCancel()
       
  1904    called.
       
  1905 */
       
  1906 class CDmPowerCoverageTest : public CActive, public MDmTest
       
  1907 	{
       
  1908 public:
       
  1909 	CDmPowerCoverageTest();
       
  1910 	~CDmPowerCoverageTest()
       
  1911 		{
       
  1912 		Cancel();
       
  1913 		iManager.Close();
       
  1914 		delete iMember;
       
  1915 		}
       
  1916 	// from CActive
       
  1917 	void RunL();
       
  1918 	// from MDmTest
       
  1919 	void Perform();
       
  1920 	void Release();
       
  1921 	TInt TransitionNotification(MDmDomainMember&);
       
  1922 	void TransitionRequestComplete()
       
  1923 		{}
       
  1924 private:
       
  1925 	// from CActive
       
  1926 	virtual void DoCancel()
       
  1927 		{
       
  1928 		test(0);
       
  1929 		}
       
  1930 private:
       
  1931 	CDmTestMember* iMember;
       
  1932 	RDmDomainManager iManager;
       
  1933 	};
       
  1934 
       
  1935 
       
  1936 CDmPowerCoverageTest::CDmPowerCoverageTest()
       
  1937 	: CActive(CActive::EPriorityStandard)
       
  1938 	{}
       
  1939 
       
  1940 
       
  1941 void CDmPowerCoverageTest::RunL()
       
  1942 	{
       
  1943 	RDebug::Printf("CDmPowerCoverageTest::RunL(): %d", iStatus.Int());
       
  1944 	CActiveScheduler::Stop();
       
  1945 	}
       
  1946 
       
  1947 
       
  1948 void CDmPowerCoverageTest::Perform()
       
  1949 	{
       
  1950 	test.Next(_L("CDmPowerCoverageTest"));
       
  1951 
       
  1952 	iMember = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 0, this);
       
  1953 	test(iMember != NULL);
       
  1954 
       
  1955 	TInt r = iManager.Connect();
       
  1956 	test(r == KErrNone);
       
  1957 
       
  1958 	CActiveScheduler::Add(this);
       
  1959 	iManager.RequestSystemTransition(EPwStandby, iStatus);
       
  1960 	iManager.CancelTransition();
       
  1961 	CActive::SetActive();
       
  1962 
       
  1963 	CActiveScheduler::Start();
       
  1964 	}
       
  1965 
       
  1966 
       
  1967 TInt CDmPowerCoverageTest::TransitionNotification(MDmDomainMember&)
       
  1968 	{
       
  1969 	RDebug::Printf("CDmPowerCoverageTest::TransitionNotification()");
       
  1970 	// Don't acknowledge
       
  1971 	return KErrAbort;
       
  1972 	}
       
  1973 
       
  1974 
       
  1975 void CDmPowerCoverageTest::Release()
       
  1976 	{
       
  1977 	delete this;
       
  1978 	}
       
  1979 
       
  1980 
       
  1981 /**
       
  1982 Test disconnecting domain controller from server whilst
       
  1983 transition in progress
       
  1984 */
       
  1985 class CDmTestDisconnect : public CBase, public MDmTest
       
  1986 	{
       
  1987 public:
       
  1988 	~CDmTestDisconnect();
       
  1989 
       
  1990 	// from MDmTest
       
  1991 	void Perform();
       
  1992 	void Release();
       
  1993 	TInt TransitionNotification(MDmDomainMember& aDomainMember);
       
  1994 	void TransitionRequestComplete() {test(EFalse);}
       
  1995 
       
  1996 protected:
       
  1997 	CDmTestMember*		iMember;
       
  1998 	RDmDomainManager	iManager;
       
  1999 	};
       
  2000 
       
  2001 CDmTestDisconnect::~CDmTestDisconnect()
       
  2002 	{
       
  2003 	delete iMember;
       
  2004 	iManager.Close();
       
  2005 	}
       
  2006 
       
  2007 void CDmTestDisconnect::Perform()
       
  2008 	{
       
  2009 	TInt r = RDmDomainManager::AddDomainHierarchy(GHierarchyIdUnderTest);
       
  2010 	test_KErrNone(r);
       
  2011 	test.Next(_L("Test disconnecting controller during transition"));
       
  2012 	iMember = new (ELeave) CDmTestMember(GHierarchyIdUnderTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this);
       
  2013 	r = iManager.Connect(GHierarchyIdUnderTest);
       
  2014 	test_KErrNone(r);
       
  2015 
       
  2016 	test_Equal(0, RThread().RequestCount());
       
  2017 	TRequestStatus status;
       
  2018 	iManager.RequestDomainTransition(KDmIdRoot, EStartupCriticalStatic, ETraverseDefault, status);
       
  2019 	CActiveScheduler::Start();
       
  2020 
       
  2021 	// No User::WaitForRequest is used, since it is expected that
       
  2022 	// the outstanding request will not be completed
       
  2023 	test_Equal(0, RThread().RequestCount());
       
  2024 	}
       
  2025 
       
  2026 TInt CDmTestDisconnect::TransitionNotification(MDmDomainMember&)
       
  2027 	{
       
  2028 	iManager.Close();
       
  2029 	CActiveScheduler::Stop();
       
  2030 	return KErrNone;
       
  2031 	}
       
  2032 
       
  2033 void CDmTestDisconnect::Release()
       
  2034 	{
       
  2035 	delete this;
       
  2036 	}
       
  2037 
       
  2038 void RunTests(TInt aIter)
       
  2039 	{
       
  2040 	while (aIter--)
       
  2041 		{
       
  2042 		MDmTest* tests[] = 
       
  2043 			{
       
  2044 			new CDmTestDisconnect(),
       
  2045 			new CDmTest1(KDmIdRoot, EPwStandby),
       
  2046 			new CDmTest1(KDmIdRoot, EPwOff),
       
  2047 			new CDmTest1(KDmIdRoot, EPwActive),
       
  2048 			new CDmTest1(KDmIdApps, EPwStandby),
       
  2049 			new CDmTest1(KDmIdApps, EPwOff),
       
  2050 			new CDmTest1(KDmIdApps, EPwActive),
       
  2051 			new CDmTest1(KDmIdUiApps, EPwStandby),
       
  2052 			new CDmTest1(KDmIdUiApps, EPwOff),
       
  2053 			new CDmTest1(KDmIdUiApps, EPwActive),
       
  2054 			new CDmTest2(EPwStandby),
       
  2055 			new CDmTest3(),
       
  2056 	
       
  2057 			// platform security tests
       
  2058 			new CDmTest4(),
       
  2059 	
       
  2060 			// PREQ810 tests :
       
  2061 			// note that we use a fictitious power state to prevent any 
       
  2062 			new CDmTest5(KDmIdRoot, KDmIdRoot, EPwActive+10, EStartupCriticalDynamic),
       
  2063 			new CDmTest5(KDmIdUiApps, KDmIdTestAB, EPwActive+10, EStartupCriticalDynamic),
       
  2064 	
       
  2065 		    // negative tests
       
  2066 			new CDmTest6(),
       
  2067 	
       
  2068 	
       
  2069 			// observer tests
       
  2070 	 		new CDmTest7(KDmIdTestA),
       
  2071 			new CDmTest7(KDmIdRoot),
       
  2072 			
       
  2073 			// increase code coverage
       
  2074 			new CDmPowerCoverageTest(),
       
  2075 			};
       
  2076 	
       
  2077 		for (unsigned int i = 0; i < sizeof(tests)/sizeof(*tests); ++i)
       
  2078 			{
       
  2079 			test(tests[i] != NULL);
       
  2080 			tests[i]->Perform();
       
  2081 			tests[i]->Release();
       
  2082 			}
       
  2083 		}
       
  2084 	}
       
  2085 
       
  2086 
  2192 GLDEF_C TInt E32Main()
  2087 GLDEF_C TInt E32Main()
  2193 	{
  2088 	{
  2194 	CTrapCleanup* trapHandler=CTrapCleanup::New();
  2089 	CTrapCleanup* trapHandler=CTrapCleanup::New();
  2195 	test(trapHandler!=NULL);
  2090 	test(trapHandler!=NULL);
  2196 
  2091 
  2205 	l.Close();
  2100 	l.Close();
  2206 
  2101 
  2207 	//
  2102 	//
  2208 	// Perform the number of iterations specifed by the command line argument.
  2103 	// Perform the number of iterations specifed by the command line argument.
  2209 	//
  2104 	//
  2210 	// If no arguments - perform two iterations
  2105 	// If no arguments - perform one iteration
  2211 	//
  2106 	//
  2212 //  TInt iter = 2;
       
  2213     TInt iter = 1;
  2107     TInt iter = 1;
  2214 
  2108 
  2215 	TInt len = User::CommandLineLength();
  2109 	TInt len = User::CommandLineLength();
  2216 	if (len)
  2110 	if (len)
  2217 		{
  2111 		{
  2231 			{} 
  2125 			{} 
  2232 		delete hb;
  2126 		delete hb;
  2233 		}
  2127 		}
  2234 
  2128 
  2235 	test.Title();
  2129 	test.Title();
  2236 	test.Start(_L("Testing"));
       
  2237 
       
  2238 	test.Printf(_L("Go for %d iterations\n"), iter);
  2130 	test.Printf(_L("Go for %d iterations\n"), iter);
  2239 
  2131 
  2240 	// Remember the number of open handles. Just for a sanity check ....
  2132 	// Remember the number of open handles. Just for a sanity check ....
  2241 	TInt start_thc, start_phc;
  2133 	TInt start_thc, start_phc;
  2242 	RThread().HandleCount(start_phc, start_thc);
  2134 	RThread().HandleCount(start_phc, start_thc);
  2243 
  2135 
  2244 	while (iter--)
  2136 
  2245 		{
  2137 	test.Start(_L("Test run with original test Hierarchy"));	
  2246 		MDmTest* tests[] = 
  2138 	GHierarchyIdUnderTest = KDmHierarchyIdTest;
  2247 			{
  2139 	RunTests(iter);
  2248 			new CDmTest1(KDmIdRoot, EPwStandby),
  2140 	test.End();
  2249 			new CDmTest1(KDmIdRoot, EPwOff),
  2141 	
  2250 			new CDmTest1(KDmIdRoot, EPwActive),
  2142 	
  2251 			new CDmTest1(KDmIdApps, EPwStandby),
  2143 	test.Start(_L("Test run with original test Hierarchy as V2 policy"));	
  2252 			new CDmTest1(KDmIdApps, EPwOff),
  2144 	GHierarchyIdUnderTest = KDmHierarchyIdTestV2_97;
  2253 			new CDmTest1(KDmIdApps, EPwActive),
  2145 	RunTests(iter);
  2254 			new CDmTest1(KDmIdUiApps, EPwStandby),
  2146 	test.End();
  2255 			new CDmTest1(KDmIdUiApps, EPwOff),
  2147 
  2256 			new CDmTest1(KDmIdUiApps, EPwActive),
  2148 	test.Start(_L("Test run with original test Hierarchy as V2 policy, but NULL state specification"));	
  2257 			new CDmTest2(EPwStandby),
  2149 	GHierarchyIdUnderTest = KDmHierarchyIdTestV2_96;
  2258 			new CDmTest3(),
  2150 	RunTests(iter);
  2259 	
       
  2260 			// platform security tests
       
  2261 			new CDmTest4(),
       
  2262 
       
  2263 			// PREQ810 tests :
       
  2264 			// note that we use a fictitious power state to prevent any 
       
  2265 			new CDmTest5(KDmIdRoot, KDmIdRoot, EPwActive+10, EStartupCriticalDynamic),
       
  2266 			new CDmTest5(KDmIdUiApps, KDmIdTestAB, EPwActive+10, EStartupCriticalDynamic),
       
  2267 
       
  2268         // negative tests
       
  2269 			new CDmTest6(),
       
  2270 
       
  2271 
       
  2272 			// observer tests
       
  2273      		new CDmTest7(KDmIdTestA),
       
  2274 			new CDmTest7(KDmIdRoot),
       
  2275 			
       
  2276 			};
       
  2277 
       
  2278 		for (unsigned int i = 0; i < sizeof(tests)/sizeof(*tests); ++i)
       
  2279 			{
       
  2280 			test(tests[i] != NULL);
       
  2281 			tests[i]->Perform();
       
  2282 			tests[i]->Release();
       
  2283 			}
       
  2284 
       
  2285 		}
       
  2286 
       
  2287 	test.End();
  2151 	test.End();
  2288 
  2152 
  2289 	// Sanity check for open handles and for pending requests ...
  2153 	// Sanity check for open handles and for pending requests ...
  2290 	TInt end_thc, end_phc;
  2154 	TInt end_thc, end_phc;
  2291 	RThread().HandleCount(end_phc, end_thc);
  2155 	RThread().HandleCount(end_phc, end_thc);