kerneltest/e32test/domainmgr/t_domain.cpp
author hgs
Mon, 11 Oct 2010 17:54:41 +0100
changeset 286 48e57fb1237e
parent 279 957c583b417b
permissions -rw-r--r--
201039_11
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
269
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
     1
// Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
     2
// All rights reserved.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
647ab20fee2e 201031_10
hgs
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
647ab20fee2e 201031_10
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
647ab20fee2e 201031_10
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
647ab20fee2e 201031_10
hgs
parents:
diff changeset
     7
//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
     8
// Initial Contributors:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    10
//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    11
// Contributors:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    12
//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    13
// Description:
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
    14
// e32test/domainmgr/t_domain.cpp
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    15
// Overview:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    16
// Domain manager tests
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    17
// API Information:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    18
// RDmDomain, RDmDomainManager CDmDomain, CDmDomainManager
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    19
// Details:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    20
// - Test a variety of domain transitions, check the expected number of
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    21
// notifications and the first expected ordinal. Verify results are
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    22
// as expected.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    23
// - Test system standby, check the expected number of notifications and 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    24
// the first expected ordinal. Use a timer to request a wakeup event.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    25
// Verify results are as expected.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    26
// - Test domain related simple error situations, verify results are
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    27
// as expected.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    28
// - Perform platform security tests: launch a separate process with no 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    29
// capabilities, verify that results are as expected.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    30
// - Test domain transitions by connecting to two domain hierarchies 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    31
// simultaneously, add some test and power hierarchy members, verify
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    32
// the expected target state, notifications and leaf nodes. Verify results.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    33
// - Verify that the same hierarchy can not be connected to more than once.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    34
// - Request a positive transition and request that the test domain use 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    35
// ETraverseParentsFirst. Verify results are as expected and verify 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    36
// domains are in the correct state.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    37
// - Request a negative transition and request that the test domain use 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    38
// ETraverseChildrenFirst. Verify results are as expected.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    39
// - Request a positive transition with zero acknowledgements. Verify 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    40
// results are as expected.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    41
// - Request a positive transition with error acknowledgements. Verify 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    42
// results are as expected.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    43
// - Perform a variety of negative tests and verify results are as expected.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    44
// - Perform various tests on domain transitions with activated observer.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    45
// Verify results are as expected.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    46
// Platforms/Drives/Compatibility:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    47
// All.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    48
// Assumptions/Requirement/Pre-requisites:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    49
// Failures and causes:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    50
// Base Port information:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    51
// 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    52
//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    53
286
48e57fb1237e 201039_11
hgs
parents: 279
diff changeset
    54
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
    55
#define __E32TEST_EXTENSION__
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    56
#include <e32test.h>
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    57
#include <e32debug.h>
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    58
#include <e32ldr_private.h>
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
    59
#include <domainobserver.h>
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    60
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
    61
#include "domainpolicytest.h"
957c583b417b 201039_07
hgs
parents: 269
diff changeset
    62
#include "t_domain.h"
286
48e57fb1237e 201039_11
hgs
parents: 279
diff changeset
    63
#include "testexclusions.h"
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
    64
957c583b417b 201039_07
hgs
parents: 269
diff changeset
    65
RTest test(_L(" T_DOMAIN "));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    66
_LIT(KThreadName, "t_domain_panic_thread");
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    67
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
    68
TDmHierarchyId GHierarchyIdUnderTest = 0;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
    69
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    70
#ifdef _DEBUG
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    71
#define __PRINT(x) {RDebug::Print x;}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    72
#else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    73
#define __PRINT(x) 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    74
#endif
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    75
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    76
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    77
class CDmTest1 : public CActive, public MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    78
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    79
public: // from CActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    80
	void RunL();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    81
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    82
	// from MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    83
	void Perform();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    84
	void Release();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    85
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    86
	void TransitionRequestComplete() {};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    87
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    88
	CDmTest1 (TDmDomainId aId, TDmDomainState aState) : CActive(CActive::EPriorityStandard), iDomainId(aId), iState((TPowerState) aState) {}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    89
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    90
protected:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    91
	// from CActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    92
	virtual void DoCancel();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    93
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    94
private:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    95
	enum { KMembersMax = 16 };
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    96
	CDmTestMember*		iMembers[KMembersMax]; 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    97
	RDmDomainManager	iManager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    98
	TDmDomainId			iDomainId;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
    99
	TPowerState			iState;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   100
	TBool				iAcknowledge;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   101
	TInt				iMembersCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   102
	TInt				iCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   103
	TUint32				iOrdinal;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   104
	};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   105
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   106
void CDmTest1::Perform()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   107
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   108
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   109
	// Test domain transitions
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   110
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   111
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   112
	test.Next(_L("Test 1"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   113
	test.Printf(_L("Domain id = 0x%x Target State = 0x%x\n"), iDomainId, iState);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   114
	iMembers[0] = new CDmTestMember(KDmHierarchyIdPower, KDmIdRoot, 0, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   115
	test(iMembers[0] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   116
	iMembers[1] = new CDmTestMember(KDmHierarchyIdPower, KDmIdRoot, 0, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   117
	test(iMembers[1] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   118
	iMembers[2] = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 1, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   119
	test(iMembers[2] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   120
	iMembers[3] = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 1, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   121
	test(iMembers[3] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   122
	iMembers[4] = new CDmTestMember(KDmHierarchyIdPower, KDmIdUiApps, 1, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   123
	test(iMembers[4] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   124
	iMembers[5] = new CDmTestMember(KDmHierarchyIdPower, KDmIdUiApps, 1, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   125
	test(iMembers[5] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   126
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   127
	// expected number of notifications
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   128
	iMembersCount = (iDomainId == KDmIdRoot) ? 6 : 2;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   129
	// first expected ordinal
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   130
	iOrdinal = (iState == EPwActive) ? 0 : 1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   131
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   132
	TInt r = iManager.Connect();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   133
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   134
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   135
	CActiveScheduler::Add(this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   136
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   137
	iManager.RequestDomainTransition(iDomainId, iState, CActive::iStatus);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   138
	CActive::SetActive();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   139
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   140
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   141
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   142
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   143
TInt CDmTest1::TransitionNotification(MDmDomainMember& aDomainMember)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   144
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   145
	++iCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   146
	if (aDomainMember.State() == EPwActive)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   147
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   148
		if(aDomainMember.Ordinal() < iOrdinal)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   149
			{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   150
			// Making the test to fail in RunL function inorder to complete the cleanup from domain manager.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   151
			test.Printf(_L("Making test to fail as Ordinal Mismatch Expected : %d, Returned : %d"), aDomainMember.Ordinal(), iOrdinal);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   152
			iCount--;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   153
			}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   154
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   155
	else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   156
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   157
		if(aDomainMember.Ordinal() > iOrdinal)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   158
			{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   159
			//Making the test to fail in RunL function inorder to complete the cleanup from domain manager.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   160
			test.Printf(_L("Making test to fail as Ordinal Mismatch Expected : %d, Returned : %d"), aDomainMember.Ordinal(), iOrdinal);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   161
			iCount--;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   162
			}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   163
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   164
	iOrdinal = aDomainMember.Ordinal();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   165
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   166
	// acknowledge one from two
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   167
	iAcknowledge = !iAcknowledge;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   168
	return iAcknowledge?KErrNone:KErrGeneral;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   169
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   170
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   171
void CDmTest1::RunL()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   172
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   173
	CActiveScheduler::Stop();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   174
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   175
	iManager.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   176
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   177
	CDmTestMember** mp;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   178
	for (mp = iMembers; *mp; ++mp)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   179
		delete *mp;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   180
	test(iCount == iMembersCount);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   181
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   182
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   183
void CDmTest1::DoCancel()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   184
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   185
	test(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   186
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   187
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   188
void CDmTest1::Release()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   189
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   190
	delete this;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   191
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   192
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   193
class CDmTest2Timer : public CTimer
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   194
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   195
public: // fomr CTimer
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   196
   void RunL();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   197
public:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   198
	CDmTest2Timer() : CTimer(0) 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   199
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   200
		TRAPD(r,
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   201
			ConstructL());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   202
		test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   203
		CActiveScheduler::Add(this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   204
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   205
	};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   206
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   207
void CDmTest2Timer::RunL()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   208
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   209
	test.Printf(_L("Tick count after CDmTest2Timer::RunL() = %d\n"), User::NTickCount());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   210
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   211
	// kick the timer again in case power down hasn't happened yet
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   212
	TTime wakeup;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   213
	wakeup.HomeTime();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   214
	wakeup += TTimeIntervalSeconds(3);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   215
	At(wakeup);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   216
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   217
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   218
class CDmTest2 : public CActive, public MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   219
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   220
public: // from CActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   221
	void RunL();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   222
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   223
	// from MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   224
	void Perform();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   225
	void Release();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   226
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   227
	void TransitionRequestComplete() {};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   228
	CDmTest2 (TDmDomainState aState) : CActive(CActive::EPriorityStandard), iState((TPowerState) aState) {}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   229
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   230
protected:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   231
	// from CActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   232
	virtual void DoCancel();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   233
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   234
private:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   235
	enum { KMembersMax = 16 };
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   236
	CDmTestMember*		iMembers[KMembersMax]; 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   237
	RDmDomainManager	iManager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   238
	TPowerState			iState;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   239
	TBool				iAcknowledge;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   240
	TInt				iMembersCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   241
	TInt				iCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   242
	TUint32				iOrdinal;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   243
	CDmTest2Timer*		iTimer;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   244
	};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   246
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   247
void CDmTest2::Perform()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   248
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   249
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   250
	// Test system standby
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   251
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   252
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   253
	test.Next(_L("Test 2"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   254
	test.Printf(_L("Target State = 0x%x\n"), iState);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   255
	iMembers[0] = new CDmTestMember(KDmHierarchyIdPower, KDmIdRoot, 0, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   256
	test(iMembers[0] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   257
	iMembers[1] = new CDmTestMember(KDmHierarchyIdPower, KDmIdRoot, 0, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   258
	test(iMembers[1] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   259
	iMembers[2] = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 1, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   260
	test(iMembers[2] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   261
	iMembers[3] = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 1, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   262
	test(iMembers[3] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   263
	iMembers[4] = new CDmTestMember(KDmHierarchyIdPower, KDmIdUiApps, 1, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   264
	test(iMembers[4] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   265
	iMembers[5] = new CDmTestMember(KDmHierarchyIdPower, KDmIdUiApps, 1, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   266
	test(iMembers[5] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   267
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   268
	// expected number of notifications
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   269
	iMembersCount = 12;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   270
	// first expected ordinal
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   271
	iOrdinal = (iState == EPwActive) ? 0 : 1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   272
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   273
	TInt r = iManager.Connect();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   274
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   275
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   276
	CActiveScheduler::Add(this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   277
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   278
	// Use an absolute timer to request a wakeup event
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   279
	iTimer = new CDmTest2Timer();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   280
	TTime wakeup;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   281
	wakeup.HomeTime();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   282
	wakeup += TTimeIntervalSeconds(5);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   283
	test.Printf(_L("Tick count before timer = %d\n"), User::NTickCount());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   284
	iTimer->At(wakeup);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   285
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   286
	iManager.RequestSystemTransition(iState, CActive::iStatus);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   287
	CActive::SetActive();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   288
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   289
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   290
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   291
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   292
TInt CDmTest2::TransitionNotification(MDmDomainMember& aDomainMember)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   293
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   294
	++iCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   295
	if (aDomainMember.State() == EPwActive)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   296
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   297
		if(aDomainMember.Ordinal() < iOrdinal)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   298
			{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   299
			// Making the test to fail in RunL function inorder to complete the cleanup from domain manager.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   300
			test.Printf(_L("Making test to fail as Ordinal Mismatch Expected : %d, Returned : %d, State : %d"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   301
																		aDomainMember.Ordinal(), iOrdinal, aDomainMember.State());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   302
			iCount--;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   303
			}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   304
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   305
	else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   306
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   307
		if(aDomainMember.Ordinal() > iOrdinal)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   308
			{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   309
			// Making the test to fail in RunL function inorder to complete the cleanup from domain manager.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   310
			test.Printf(_L("Making test to fail as Ordinal Mismatch Expected : %d, Returned : %d, State: %d"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   311
																		aDomainMember.Ordinal(), iOrdinal, aDomainMember.State());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   312
			iCount--;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   313
			}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   314
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   315
	iOrdinal = aDomainMember.Ordinal();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   316
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   317
	// acknowledge one from two
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   318
	iAcknowledge = !iAcknowledge;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   319
	return iAcknowledge?KErrNone:KErrAbort;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   320
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   321
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   322
void CDmTest2::RunL()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   323
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   324
	test.Printf(_L("Tick count after CDmTest2::RunL() = %d\n"), User::NTickCount());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   325
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   326
	iTimer->Cancel();	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   327
	CActiveScheduler::Stop();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   328
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   329
	iManager.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   330
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   331
	CDmTestMember** mp;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   332
	for (mp = iMembers; *mp; ++mp)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   333
		delete *mp;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   334
	test(CActive::iStatus == KErrTimedOut);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   335
	test(iCount == iMembersCount);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   336
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   337
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   338
void CDmTest2::DoCancel()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   339
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   340
	test(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   341
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   342
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   343
void CDmTest2::Release()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   344
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   345
	if (iTimer)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   346
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   347
		iTimer->Cancel();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   348
		delete iTimer;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   349
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   350
	delete this;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   351
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   352
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   353
class CDmTest3 : public MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   354
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   355
public: 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   356
	// from MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   357
	void Perform();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   358
	void Release();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   359
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   360
	void TransitionRequestComplete() {};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   361
	};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   362
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   363
void CDmTest3::Perform()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   364
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   365
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   366
	// Test simple error situation
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   367
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   368
	RDmDomainManager manager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   369
	TInt r = manager.Connect();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   370
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   371
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   372
	RDmDomainManager manager1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   373
	r = manager1.Connect();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   374
	test(r == KErrInUse);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   375
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   376
	RDmDomain domain;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   377
	r = domain.Connect(KDmIdNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   378
	test(r == KDmErrBadDomainId);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   379
	CDmTestMember*		testMember;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   380
	testMember = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 1, this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   381
	test (testMember != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   382
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   383
	TRequestStatus status;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   384
	manager.RequestDomainTransition(KDmIdApps, EPwStandby, status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   385
	test(status.Int() == KRequestPending);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   386
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   387
	TRequestStatus status1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   388
	manager.RequestDomainTransition(KDmIdApps, EPwActive, status1);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   389
	User::WaitForRequest(status1);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   390
	test(status1.Int() == KDmErrBadSequence);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   391
	User::WaitForRequest(status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   392
	test(status.Int() == KErrTimedOut);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   393
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   394
	// Since this test doesn't start the active scheduler, a domain member's RunL() will 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   395
	// not get called so we need to re-request a domain transition notification manually
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   396
	User::WaitForRequest(testMember->iStatus);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   397
	test(testMember->iStatus.Int() == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   398
	testMember->iDomain.RequestTransitionNotification(testMember->iStatus);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   399
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   400
	manager.RequestDomainTransition(KDmIdApps, EPwActive, status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   401
	test(status.Int() == KRequestPending);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   402
	manager.CancelTransition();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   403
	test(status.Int() == KErrCancel);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   404
	manager.CancelTransition();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   405
	User::WaitForRequest(status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   406
	test(status.Int() == KErrCancel);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   407
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   408
	testMember->iDomain.CancelTransitionNotification();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   409
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   410
	delete testMember;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   411
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   412
	domain.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   413
	manager.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   414
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   415
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   416
TInt CDmTest3::TransitionNotification(MDmDomainMember& /*aDomainMember*/)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   417
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   418
	test(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   419
	return KErrAbort;	// don't acknowledge
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   420
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   421
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   422
void CDmTest3::Release()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   423
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   424
	delete this;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   425
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   426
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   427
class CDmTest4 : public MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   428
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   429
public: 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   430
	// from MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   431
	void Perform();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   432
	void Release();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   433
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   434
	void TransitionRequestComplete() {};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   435
private:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   436
	void ExecSlave(TUint arg);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   437
	};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   438
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   439
_LIT(KSecuritySlavePath, "t_domain_slave.exe");
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   440
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   441
void CDmTest4::ExecSlave(TUint aArg)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   442
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   443
	RProcess proc;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   444
	TInt r = proc.Create(KSecuritySlavePath, TPtrC((TUint16*) &aArg, sizeof(aArg)/sizeof(TUint16)));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   445
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   446
	TRequestStatus status;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   447
	proc.Logon(status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   448
	proc.Resume();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   449
	User::WaitForRequest(status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   450
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   451
    RDebug::Printf("CDmTest4::ExecSlave(%d) ExitType %d", aArg, proc.ExitType() );
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   452
    RDebug::Printf("CDmTest4::ExecSlave(%d) ExitReason %d", aArg, proc.ExitReason() );
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   453
	test(proc.ExitType() == EExitKill);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   454
//	test(proc.ExitReason() == KErrPermissionDenied);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   455
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   456
	CLOSE_AND_WAIT(proc);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   457
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   458
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   459
//! @SYMTestCaseID PBASE-T_DOMAIN-4
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   460
//! @SYMTestType CT
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   461
//! @SYMTestCaseDesc Dmain manager security tests
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   462
//! @SYMREQ 3722
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   463
//! @SYMTestActions Launches a separate process with no capabilities
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   464
//! @SYMTestExpectedResults  DM APIs should fail with KErrPermissionDenied
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   465
//! @SYMTestPriority High
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   466
//! @SYMTestStatus Defined
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   467
void CDmTest4::Perform()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   468
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   469
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   470
	// Security tests
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   471
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   472
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   473
	ExecSlave(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   474
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   475
    ExecSlave(1);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   476
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   477
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   478
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   479
TInt CDmTest4::TransitionNotification(MDmDomainMember& /*aDomainMember*/)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   480
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   481
	test(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   482
	return KErrNone;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   483
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   484
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   485
void CDmTest4::Release()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   486
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   487
	delete this;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   488
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   489
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   490
// Test hierarchy tests
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   491
class CDmTestStartupMember : public CDmTestMember
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   492
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   493
public:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   494
	CDmTestStartupMember(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest*);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   495
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   496
public:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   497
private:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   498
	};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   499
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   500
CDmTestStartupMember::CDmTestStartupMember(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDmTest* aTest) 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   501
	: CDmTestMember(aHierarchy, aId, aOrdinal, aTest)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   502
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   503
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   504
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   505
// Simultaneously testing of test domain defined in DomainPolicy99.dll
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   506
// and the power domain defined in DomainPolicy.dll
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   507
class CDmTest5 : public CActive, public MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   508
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   509
public: 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   510
	// from CActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   511
	void RunL();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   512
	// from MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   513
	void Perform();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   514
	void Release();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   515
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
269
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   516
	void TransitionRequestComplete();	
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   517
	void RunTestOnGetTransitionFailures(RArray<const TTransitionFailure>& aTransitionFailure);
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   518
	
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   519
	CDmTest5(TDmDomainId aPowerId, TDmDomainId aTestId, TDmDomainState aPowerState, TDmDomainState aTestState) : 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   520
		CActive(CActive::EPriorityStandard), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   521
		iPowerDomainId(aPowerId), iTestDomainId(aTestId), iPowerState(aPowerState), iTestState(aTestState) {}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   522
protected:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   523
	// from CActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   524
	virtual void DoCancel();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   525
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   526
private:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   527
	enum { KMembersMax = 16 };
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   528
	enum TAckMode{ KAckAlways, KAckNever, KAckError, KAckOddDomainsOnly };
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   529
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   530
	CDmTestMember*		iTestMembers[KMembersMax]; 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   531
	CDomainMemberAo*	iPowerMembers[KMembersMax]; 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   532
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   533
	RDmDomainManager	iTestDomainManager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   534
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   535
	TDmDomainId			iPowerDomainId;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   536
	TDmDomainId			iTestDomainId;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   537
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   538
	TDmDomainState		iPowerState;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   539
	TDmDomainState		iTestState;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   540
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   541
	// level number for iTestDomainId. E.g 1 for KDmIdRoot, 2 for KDmIdTestA, etc.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   542
	TInt				iTestDomainLevel;	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   543
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   544
	TDmTraverseDirection iTraverseDirection;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   545
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   546
	TAckMode			iAckMode;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   547
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   548
public:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   549
	TInt				iTestNotifications;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   550
	TInt				iPowerNotifications;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   551
	TInt				iTestNotificationsExpected;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   552
	TInt				iPowerNotificationsExpected;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   553
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   554
	TInt				iTransitionsCompleted;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   555
	TInt				iTransitionsExpected;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   556
	};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   557
269
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   558
void CDmTest5::RunTestOnGetTransitionFailures(RArray<const TTransitionFailure>& aTransitionFailure)
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   559
	{
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   560
	//*************************************************
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   561
	// Test - OOM Testing on GetTransitionFailures()
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   562
	// Simulates heap failure in GetTransitionFailures()
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   563
	//*************************************************
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   564
	TInt error = 0;
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   565
	TInt count = 0;	
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   566
	do
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   567
		{		
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   568
		__UHEAP_SETFAIL(RHeap::EFailNext, ++count);
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   569
		error = iTestDomainManager.GetTransitionFailures(aTransitionFailure);						
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   570
		test.Printf( _L( "CDmTest5::RunTestOnGetTransitionFailures, simulating heap failure on GetTransitionFailures(), Error=%d, Run=%d\n" ), error, count );
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   571
		}while(error == KErrNoMemory);		
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   572
		
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   573
	__UHEAP_RESET;
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   574
	
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   575
	//Actual count of heap failure as the final iteration which terminates the loop would not return KErrNoMemory 
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   576
	--count;
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   577
	test(count > 0);
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   578
	test.Printf( _L( "Out of memory tests on GetTransitionFailures() succeeded at heap failure rate of %i\n" ), count );
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   579
	}
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   580
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   581
//! @SYMTestCaseID PBASE-T_DOMAIN-5
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   582
//! @SYMTestType CT
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   583
//! @SYMTestCaseDesc Connects to two domain hierarchies simulteneously and perform various tests
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   584
//! @SYMREQ 3704,3705,3706,3707,3708,3709,3710,3711,3720,3721,3724,3725,3726,3727
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   585
//! @SYMTestActions Open two hiearchies simultaneously and perform various actions.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   586
//! @SYMTestExpectedResults  All tests should pass
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   587
//! @SYMTestPriority High
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   588
//! @SYMTestStatus Defined
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   589
void CDmTest5::Perform()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   590
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   591
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   592
 	__UHEAP_MARK;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   593
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   594
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   595
	// Test domain transitions
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   596
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   597
	CActiveScheduler::Add(this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   598
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   599
	TInt r = RDmDomainManager::AddDomainHierarchy(GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   600
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   601
    RDebug::Printf("RDmDomainManager::AddDomainHierarchy returns %d", r );
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   602
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   603
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   604
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   605
	CDomainManagerAo* powerDomainManager = NULL;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   606
	TRAP(r, powerDomainManager = CDomainManagerAo::NewL(KDmHierarchyIdPower, *this));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   607
	test (powerDomainManager != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   608
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   609
	r = CDomainManagerAo::AddDomainHierarchy(KDmHierarchyIdPower);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   610
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   611
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   612
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   613
	//	Test 5a - connect to two domain hierarchies simultaneously
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   614
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   615
	test.Next(_L("Test 5a - connect to two domain hierarchies simultaneously"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   616
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   617
	test.Printf(_L("Domain id = 0x%x, Target State = 0x%x\n"), iTestDomainId, iTestState);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   618
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   619
	TInt testMemberCount = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   620
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   621
	// Add some test hierarchy members - these use the RDmDomain API
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   622
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   623
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   624
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   625
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   626
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   627
	// row 1
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   628
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   629
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   630
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   631
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   632
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   633
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   634
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   635
	// row2
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   636
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   637
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   638
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   639
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   640
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   641
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   642
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   643
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   644
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   645
	// row 3
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   646
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   647
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   648
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   649
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   650
	iTestMembers[testMemberCount] = new CDmTestMember(GHierarchyIdUnderTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   651
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   652
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   653
	// add some power hierarchy members - these use the CDmDomain AO API
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   654
	TInt powerMemberCount = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   655
	TRAP(r, iPowerMembers[powerMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdPower, KDmIdRoot, KDmIdRoot, this));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   656
	test(iTestMembers[powerMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   657
	TRAP(r, iPowerMembers[powerMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdPower, KDmIdApps, KDmIdApps, this));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   658
	test(iTestMembers[powerMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   659
	TRAP(r, iPowerMembers[powerMemberCount] = CDomainMemberAo::NewL(KDmHierarchyIdPower, KDmIdUiApps, KDmIdUiApps, this));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   660
	test(iTestMembers[powerMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   661
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   662
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   663
	RArray<const TTransitionFailure> testFailures;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   664
	TInt testFailureCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   665
	RArray<const TTransitionFailure> powerFailures;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   666
	TInt powerFailureCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   667
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   668
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   669
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   670
	// calculate the expected number of notifications
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   671
	TInt expectedTestNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   672
	TInt leafNodes = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   673
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   674
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   675
	// work out the domain level, the number of leaf nodes and the expected number of 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   676
	// notifications for the domain that is being transitioned
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   677
	switch(iTestDomainId)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   678
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   679
		case KDmIdRoot		:	iTestDomainLevel = 1; leafNodes = 5; expectedTestNotifications = testMemberCount; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   680
		case KDmIdTestA		:	iTestDomainLevel = 2; leafNodes = 3; expectedTestNotifications = 5; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   681
		case KDmIdTestB		:	iTestDomainLevel = 2; leafNodes = 1; expectedTestNotifications = 2; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   682
		case KDmIdTestC		:	iTestDomainLevel = 2; leafNodes = 1; expectedTestNotifications = 3; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   683
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   684
		case KDmIdTestAA	:	iTestDomainLevel = 3; leafNodes = 1; expectedTestNotifications = 1; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   685
		case KDmIdTestAB	:	iTestDomainLevel = 3; leafNodes = 2; expectedTestNotifications = 3; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   686
		case KDmIdTestBA	:	iTestDomainLevel = 3; leafNodes = 1; expectedTestNotifications = 1; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   687
		case KDmIdTestCA	:	iTestDomainLevel = 3; leafNodes = 1; expectedTestNotifications = 2; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   688
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   689
		case KDmIdTestABA	:	iTestDomainLevel = 4; leafNodes = 1; expectedTestNotifications = 1; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   690
		case KDmIdTestABB	:	iTestDomainLevel = 4; leafNodes = 1; expectedTestNotifications = 1; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   691
		case KDmIdTestCAA	:	iTestDomainLevel = 4; leafNodes = 1; expectedTestNotifications = 1; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   692
		default:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   693
			test(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   694
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   695
	test.Printf(_L("Test Domain id = 0x%x, Level = %d, Target State = 0x%x, expected notifications = %d, leafNodes = %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   696
		iTestDomainId, iTestDomainLevel, iTestState, expectedTestNotifications, leafNodes);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   697
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   698
	TInt expectedPowerNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   699
	switch(iPowerDomainId)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   700
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   701
		case KDmIdRoot		:	expectedPowerNotifications = powerMemberCount; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   702
		case KDmIdApps		:	expectedPowerNotifications = 1; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   703
		case KDmIdUiApps	:	expectedPowerNotifications = 1; break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   704
		default:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   705
			test(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   706
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   707
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   708
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   709
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   710
	// connect to the test hierarchy
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   711
	r = iTestDomainManager.Connect(GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   712
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   713
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   714
	// verify that we can't connect to the same hierarchy more than once
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   715
	RDmDomainManager	domainManager;
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   716
	r = domainManager.Connect(GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   717
	test(r == KErrInUse);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   718
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   719
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   720
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   721
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   722
	// Test 5b - request a positive transition
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   723
	// issue a positive  transition (i.e. transition state increases)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   724
	// and request that the test domain use ETraverseParentsFirst
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   725
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   726
	test.Next(_L("Test 5b - request a positive transition"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   727
	iAckMode = KAckAlways;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   728
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   729
	iTransitionsCompleted = iTestNotifications = iPowerNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   730
	iPowerNotificationsExpected = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   731
	iTestNotificationsExpected = expectedTestNotifications;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   732
	iTransitionsExpected = 1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   733
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   734
	// DON'T request any domain transition on the power hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   735
	// powerDomainManager->RequestDomainTransition(iPowerDomainId, EPwActive);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   736
	// request a domain transition on the test hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   737
	iTraverseDirection = ETraverseParentsFirst;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   738
	if (iTestDomainId == KDmIdRoot)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   739
		iTestDomainManager.RequestSystemTransition(iTestState, ETraverseDefault, CActive::iStatus);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   740
	else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   741
		iTestDomainManager.RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault, CActive::iStatus);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   742
	CActive::SetActive();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   743
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   744
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   745
	test(powerDomainManager->iStatus == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   746
	test(iStatus == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   747
	test(iTestNotifications == iTestNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   748
	test(iPowerNotifications == iPowerNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   749
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   750
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   751
	// Test 5c- verify domains are in correct state
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   752
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   753
	test.Next(_L("Test 5c- verify domains are in correct state"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   754
	RDmDomain domainMember;
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   755
	r = domainMember.Connect(GHierarchyIdUnderTest, iTestDomainId);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   756
	test (r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   757
	TDmDomainState state = domainMember.GetState();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   758
	domainMember.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   759
	test (state == iTestState);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   760
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   761
	// if the transition request is not on the root, verify that that 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   762
	// the root domain and the transition domain are in different states
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   763
	if (iTestDomainId != KDmIdRoot && iTestState != EStartupCriticalStatic)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   764
		{
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   765
		r = domainMember.Connect(GHierarchyIdUnderTest, KDmIdRoot);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   766
		test (r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   767
		TDmDomainState state = domainMember.GetState();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   768
		domainMember.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   769
		test (state != iTestState);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   770
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   771
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   772
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   773
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   774
	// Test 5d- request a negative transition
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   775
	// issue a negative transition (i.e. transition state decreases)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   776
	// and request that the test domain use ETraverseChildrenFirst
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   777
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   778
	test.Next(_L("Test 5d- request a negative transition"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   779
	iAckMode = KAckAlways;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   780
	iTestState--;	// EStartupCriticalStatic;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   781
	iPowerState--;	// EPwStandby
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   782
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   783
	iTransitionsCompleted = iTestNotifications = iPowerNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   784
	iPowerNotificationsExpected = expectedPowerNotifications;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   785
	iTestNotificationsExpected = expectedTestNotifications;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   786
	iTransitionsExpected = 2;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   787
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   788
	// DO request a domain transition on the power hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   789
	powerDomainManager->RequestDomainTransition(iPowerDomainId, iPowerState, ETraverseDefault);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   790
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   791
	// request a domain transition on the test hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   792
	iTraverseDirection = ETraverseChildrenFirst;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   793
	iTestDomainManager.RequestDomainTransition(iTestDomainId, iTestState, iTraverseDirection, CActive::iStatus);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   794
	CActive::SetActive();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   795
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   796
	// wait for all test & power transitions to complete
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   797
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   798
	test(powerDomainManager->iStatus == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   799
	test(iStatus == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   800
	test(iTestNotifications == iTestNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   801
	test(iPowerNotifications == iPowerNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   802
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   803
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   804
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   805
	// Test 5e- request a positive transition, with zero acknowledgements
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   806
	// issue a positive transition with no members acknowledging the transition
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   807
	// Expect timeout from server
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   808
	// Also covers Testcase 2.3.2 from Transition Monitoring test suite when
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   809
	// policy used in 96 or 97.
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   810
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   811
	test.Next(_L("Test 5e- request a positive transition, with zero acknowledgements"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   812
	iAckMode = KAckNever;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   813
	iTestState++;		// EStartupCriticalDynamic;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   814
	iPowerState++;		// EPwActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   815
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   816
	// power hierarchy should continue on failure, so we all power domains should transition
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   817
	// test hierarchy should stop on failure, so should get notifications from all leaf nodes
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   818
	iTransitionsCompleted = iTestNotifications = iPowerNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   819
	iPowerNotificationsExpected = expectedPowerNotifications;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   820
	iTestNotificationsExpected = leafNodes;	// 5 leaf nodes for root domain
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   821
	iTransitionsExpected = 2;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   822
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   823
	// DO request a domain transition on the power hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   824
	powerDomainManager->RequestDomainTransition(iPowerDomainId, iPowerState, ETraverseDefault);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   825
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   826
	// request a domain transition on the test hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   827
	iTraverseDirection = ETraverseChildrenFirst;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   828
	iTestDomainManager.RequestDomainTransition(iTestDomainId, iTestState, iTraverseDirection, CActive::iStatus);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   829
	CActive::SetActive();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   830
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   831
	// wait for all test & power transitions to complete
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   832
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   833
	test(powerDomainManager->iStatus == KErrTimedOut);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   834
	test(iStatus == KErrTimedOut);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   835
	test(iTestNotifications == iTestNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   836
	test(iPowerNotifications == iPowerNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   837
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   838
	// get the failures on the test hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   839
	testFailureCount = iTestDomainManager.GetTransitionFailureCount();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   840
	test (testFailureCount == 1);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   841
269
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   842
#ifdef _DEBUG
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   843
	//***************************************************************
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   844
	// OOM Testing: Simulates heap failure in GetTransitionFailures()
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   845
	//***************************************************************
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   846
	__UHEAP_MARK;
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   847
	RArray<const TTransitionFailure> oomTestFailures;
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   848
	RunTestOnGetTransitionFailures(oomTestFailures);
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   849
	test(oomTestFailures.Count()==1);
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   850
	oomTestFailures.Close();
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   851
	__UHEAP_MARKEND;
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   852
#endif
d57b86b1867a 201035_03
hgs
parents: 245
diff changeset
   853
	
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   854
	r = iTestDomainManager.GetTransitionFailures(testFailures);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   855
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   856
	test(testFailureCount == testFailures.Count());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   857
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   858
	test.Printf(_L("Test failures = %d\n"), testFailureCount);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   859
	TInt i;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   860
	for (i=0; i<testFailureCount; i++)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   861
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   862
		test.Printf(_L("%d: iDomainId %d, iError %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   863
			i, testFailures[i].iDomainId, testFailures[i].iError);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   864
		test(testFailures[i].iError == KErrTimedOut);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   865
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   866
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   867
	// get the failures on the power hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   868
	powerFailureCount = powerDomainManager->GetTransitionFailureCount();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   869
	test (powerFailureCount == expectedPowerNotifications);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   870
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   871
	r = powerDomainManager->GetTransitionFailures(powerFailures);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   872
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   873
	test(powerFailureCount == powerFailures.Count());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   874
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   875
	test.Printf(_L("Power failures = %d\n"), powerFailureCount);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   876
	for (i=0; i<powerFailureCount; i++)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   877
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   878
		test.Printf(_L("%d: iDomainId %d, iError %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   879
			i, powerFailures[i].iDomainId, powerFailures[i].iError);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   880
		test(powerFailures[i].iError == KErrTimedOut);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   881
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   882
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   883
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   884
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   885
	// Test 5f- request a positive transition, with error acknowledgements
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   886
	// issue a positive transition with all members nack'ing the transition
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   887
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   888
	test.Next(_L("Test 5f- request a positive transition, with error acknowledgements"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   889
	iAckMode = KAckError;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   890
	iTestState++;		
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   891
	iPowerState++;		
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   892
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   893
	// power hierarchy should continue on failure, so all power domains should transition
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   894
	// test hierarchy should stop on failure, so should get notifications from 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   895
	// anything from 1 to all the leaf nodes
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   896
	iTransitionsCompleted = iTestNotifications = iPowerNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   897
	iPowerNotificationsExpected = expectedPowerNotifications;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   898
	iTestNotificationsExpected = leafNodes;	// 5 leaf nodes for root domain
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   899
	iTransitionsExpected = 2;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   900
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   901
	// DO request a domain transition on the power hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   902
	powerDomainManager->RequestDomainTransition(iPowerDomainId, iPowerState, ETraverseDefault);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   903
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   904
	// request a domain transition on the test hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   905
	iTraverseDirection = ETraverseChildrenFirst;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   906
	iTestDomainManager.RequestDomainTransition(iTestDomainId, iTestState, iTraverseDirection, CActive::iStatus);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   907
	CActive::SetActive();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   908
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   909
	// wait for all test & power transitions to complete
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   910
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   911
	test(powerDomainManager->iStatus == KErrGeneral);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   912
	test(iStatus == KErrGeneral);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   913
	test(iTestNotifications <= iTestNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   914
	test(iPowerNotifications == iPowerNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   915
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   916
	// get the failures on the test hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   917
	testFailureCount = iTestDomainManager.GetTransitionFailureCount();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   918
	test (testFailureCount == 1);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   919
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   920
	r = iTestDomainManager.GetTransitionFailures(testFailures);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   921
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   922
	test(testFailureCount == testFailures.Count());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   923
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   924
	test.Printf(_L("Test failures = %d\n"), testFailureCount);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   925
	for (i=0; i<testFailureCount; i++)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   926
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   927
		test.Printf(_L("%d: iDomainId %d, iError %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   928
			i, testFailures[i].iDomainId, testFailures[i].iError);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   929
		test(testFailures[i].iError == KErrGeneral);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   930
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   931
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   932
	// get the failures on the power hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   933
	powerFailureCount = powerDomainManager->GetTransitionFailureCount();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   934
	test (powerFailureCount == expectedPowerNotifications);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   935
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   936
	r = powerDomainManager->GetTransitionFailures(powerFailures);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   937
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   938
	test(powerFailureCount == powerFailures.Count());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   939
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   940
	test.Printf(_L("Power failures = %d\n"), powerFailureCount);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   941
	for (i=0; i<powerFailureCount; i++)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   942
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   943
		test.Printf(_L("%d: iDomainId %d, iError %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   944
			i, powerFailures[i].iDomainId, powerFailures[i].iError);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   945
		test(powerFailures[i].iError == KErrGeneral);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   946
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   947
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   948
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   949
	// cleanup
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   950
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   951
	testFailures.Reset();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   952
	powerFailures.Reset();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   953
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   954
	iTestDomainManager.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   955
	delete powerDomainManager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   956
	powerDomainManager = NULL;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   957
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   958
	CDmTestMember** mt;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   959
	for (mt = iTestMembers; *mt; ++mt)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   960
		delete *mt;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   961
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   962
	CDomainMemberAo** mp;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   963
	for (mp = iPowerMembers; *mp; ++mp)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   964
		delete *mp;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   965
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   966
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   967
	// restore the domain hierarchies to their initial state so as not to 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   968
	// upset any subsequent tests which rely on this
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   969
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   970
	RDmDomainManager manager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   971
	TInt r = manager.Connect();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   972
	test (r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   973
	TRequestStatus status;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   974
	manager.RequestDomainTransition(KDmIdRoot, EPwActive, status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   975
	test(status.Int() == KRequestPending);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   976
	User::WaitForRequest(status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   977
	test(status.Int() == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   978
	manager.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   979
	
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
   980
	r = manager.Connect(GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   981
	test (r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   982
	manager.RequestDomainTransition(KDmIdRoot, EStartupCriticalStatic, ETraverseDefault, status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   983
	test(status.Int() == KRequestPending);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   984
	User::WaitForRequest(status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   985
	test(status.Int() == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   986
	manager.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   987
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   988
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   989
 	__UHEAP_MARKEND;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   990
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   991
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   992
// This handles a transition notification from either a power domain member or 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   993
// a test domain member.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   994
// Verifies that the domain state is as expected.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   995
// Updates the number of notifications for each hierarchy and verifies that all parent 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   996
// domains have transitioned already (for parent-to-child transitions) or that all child 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   997
// domains have been transitioned already (for child-to-parent transitions).
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   998
647ab20fee2e 201031_10
hgs
parents:
diff changeset
   999
TInt CDmTest5::TransitionNotification(MDmDomainMember& aDomainMember)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1000
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1001
	if (aDomainMember.HierarchyId() == KDmHierarchyIdPower)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1002
		iPowerNotifications++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1003
	else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1004
		iTestNotifications++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1005
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1006
	if (aDomainMember.HierarchyId() == KDmHierarchyIdPower)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1007
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1008
		__PRINT((_L("CDmTest5::TransitionNotification(), Hierarchy = %d, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1009
			aDomainMember.HierarchyId(), aDomainMember.Ordinal(), aDomainMember.State(), aDomainMember.Status()));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1010
		test(aDomainMember.State() == iPowerState);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1011
		}
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1012
	else if (aDomainMember.HierarchyId() == GHierarchyIdUnderTest)
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1013
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1014
		TBuf16<4> buf;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1015
		GetDomainDesc(aDomainMember.Ordinal(), buf);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1016
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1017
		__PRINT((_L("CDmTest5::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1018
			aDomainMember.HierarchyId(), &buf, aDomainMember.Ordinal(), aDomainMember.State(), aDomainMember.Status()));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1019
		test(aDomainMember.State() == iTestState);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1020
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1021
	else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1022
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1023
		test(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1024
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1025
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1026
	// if we're going from parent to child, 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1027
	// check that each parent domain has received a notification already
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1028
	// if not, check that each child domain has received a notification already
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1029
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1030
	CDmTestMember** mp;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1031
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1032
	if (aDomainMember.HierarchyId() == GHierarchyIdUnderTest && iAckMode == KAckAlways)
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1033
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1034
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1035
		if (iTraverseDirection == ETraverseParentsFirst)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1036
			{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1037
			TUint ordThis = aDomainMember.Ordinal();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1038
			TUint ordParent = PARENT_ORDINAL(ordThis);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1039
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1040
			TInt levelParent = ORDINAL_LEVEL(ordParent);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1041
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1042
			TBuf16<4> buf;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1043
			GetDomainDesc(ordParent, buf);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1044
			if (levelParent >= iTestDomainLevel)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1045
				{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1046
				__PRINT((_L("Searching for parent domain = %S, ordinal = %08X \n"), &buf, ordParent));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1047
				for (mp = iTestMembers; *mp; ++mp)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1048
					{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1049
					if ((*mp)->Ordinal() == ordParent)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1050
						{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1051
						TBuf16<4> buf;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1052
						GetDomainDesc((*mp)->Ordinal(), buf);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1053
						__PRINT((_L("Found parent (%S). notification = %d\n"), &buf, (*mp)->Notifications()));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1054
						test ((*mp)->Notifications() == aDomainMember.Notifications());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1055
						break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1056
						}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1057
					}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1058
				}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1059
			}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1060
		else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1061
			{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1062
			__PRINT((_L("Searching for children\n")));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1063
			for (mp = iTestMembers; *mp; ++mp)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1064
				{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1065
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1066
				TUint ordParent = PARENT_ORDINAL((*mp)->Ordinal());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1067
				if (ordParent == aDomainMember.Ordinal())
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1068
					{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1069
					TBuf16<4> buf;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1070
					GetDomainDesc((*mp)->Ordinal(), buf);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1071
					__PRINT((_L("Found child (%S). notification = %d\n"), &buf, (*mp)->Notifications()));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1072
					test ((*mp)->Notifications() == aDomainMember.Notifications());
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1073
					}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1074
				}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1075
			}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1076
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1077
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1078
	TInt ackError;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1079
	switch (iAckMode)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1080
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1081
		case KAckNever:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1082
			ackError = KErrAbort;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1083
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1084
		case KAckError:		// return an error to the DM
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1085
			ackError = KErrGeneral;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1086
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1087
		case KAckOddDomainsOnly:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1088
			ackError = (aDomainMember.DomainId() & 1)?KErrNone:KErrAbort;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1089
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1090
		case KAckAlways:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1091
		default:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1092
			ackError = KErrNone;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1093
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1094
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1095
	return ackError;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1096
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1097
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1098
void CDmTest5::RunL()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1099
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1100
	iTransitionsCompleted++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1101
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1102
	__PRINT((_L("CDmTest5::RunL(), error = %d, iTestNotifications %d, iPowerNotifications %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1103
		iStatus.Int(), iTestNotifications , iPowerNotifications));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1104
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1105
	if (iTransitionsCompleted == iTransitionsExpected)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1106
		CActiveScheduler::Stop();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1107
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1108
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1109
void CDmTest5::TransitionRequestComplete()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1110
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1111
	iTransitionsCompleted++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1112
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1113
	__PRINT((_L("CDmTest5::TransitionRequestComplete(), error = %d, iTestNotifications %d, iPowerNotifications %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1114
		iStatus.Int(), iTestNotifications , iPowerNotifications));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1115
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1116
	if (iTransitionsCompleted == iTransitionsExpected)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1117
		CActiveScheduler::Stop();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1118
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1119
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1120
void CDmTest5::DoCancel()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1121
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1122
	test(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1123
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1124
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1125
void CDmTest5::Release()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1126
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1127
	delete this;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1128
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1129
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1130
const TInt KMembersMax = 16;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1131
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1132
// Negative testing 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1133
class CDmTest6 : public CActive, public MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1134
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1135
public:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1136
	enum 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1137
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1138
	ENegTestTransitionNoConnect,
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1139
	ENegTestGetStateNoConnect,
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1140
	ENegTestTransitionInvalidMode
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1141
	};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1142
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1143
	class TData 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1144
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1145
	public:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1146
		inline TData(TInt aTest) : iTest(aTest){};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1147
		TInt iTest;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1148
		};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1149
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1150
public: 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1151
	// from CActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1152
	void RunL();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1153
 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1154
	// from MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1155
	void Perform();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1156
	void Release();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1157
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1158
	void TransitionRequestComplete();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1159
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1160
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1161
	CDmTest6() : CActive(CActive::EPriorityStandard) {}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1162
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1163
protected:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1164
	// from CActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1165
	virtual void DoCancel();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1166
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1167
private:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1168
	static TInt PanicThreadFunc(TAny* aData);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1169
	void PanicTest(TInt aTestNumber);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1170
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1171
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1172
	CDomainMemberAo*	iTestMembers[KMembersMax]; 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1173
	CDomainManagerAo*	iTestDomainManager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1174
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1175
	TDmDomainId			iTestDomainId;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1176
	TDmDomainState		iTestState;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1177
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1178
public:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1179
	TInt				iTestNotifications;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1180
	TInt				iTestNotificationsExpected;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1181
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1182
	TInt				iTransitionsCompleted;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1183
	TInt				iTransitionsExpected;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1184
	};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1185
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1186
TInt CDmTest6::PanicThreadFunc(TAny* aData)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1187
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1188
	const TData* data = (const TData*)aData;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1189
	switch (data->iTest)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1190
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1191
		case ENegTestTransitionNoConnect:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1192
			{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1193
			// request a transition notification without connecting first (should panic)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1194
			RDmDomain domainMember;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1195
			TRequestStatus status;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1196
			User::SetJustInTime(EFalse);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1197
			domainMember.RequestTransitionNotification(status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1198
			}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1199
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1200
		case ENegTestGetStateNoConnect:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1201
			{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1202
			// Get the domain state without connecting (should panic)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1203
			RDmDomain domainMember;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1204
			User::SetJustInTime(EFalse);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1205
			domainMember.GetState();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1206
			}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1207
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1208
		case ENegTestTransitionInvalidMode:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1209
			{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1210
			RDmDomainManager manager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1211
			TRequestStatus status;
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1212
			TInt r = manager.Connect(GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1213
			test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1214
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1215
			User::SetJustInTime(EFalse);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1216
			manager.RequestDomainTransition(KDmIdRoot, 0, TDmTraverseDirection(-1), status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1217
			}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1218
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1219
		default:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1220
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1221
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1222
	return KErrNone;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1223
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1224
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1225
void CDmTest6::PanicTest(TInt aTestNumber)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1226
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1227
	test.Printf(_L("panic test number %d\n"), aTestNumber);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1228
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1229
	TBool jit = User::JustInTime();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1230
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1231
	TData data(aTestNumber);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1232
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1233
	TInt KHeapSize=0x2000;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1234
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1235
	RThread thread;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1236
	TInt ret = thread.Create(KThreadName, PanicThreadFunc, KDefaultStackSize, KHeapSize, KHeapSize, &data);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1237
	test(KErrNone == ret);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1238
	TRequestStatus stat;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1239
	thread.Logon(stat);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1240
	thread.Resume();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1241
	User::WaitForRequest(stat);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1242
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1243
	User::SetJustInTime(jit);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1244
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1245
	// The thread must panic
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1246
	test(thread.ExitType() == EExitPanic);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1247
	TInt exitReason = thread.ExitReason();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1248
	test.Printf(_L("panic test exit reason = %d\n"), exitReason);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1249
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1250
	switch(aTestNumber)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1251
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1252
		case ENegTestTransitionNoConnect:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1253
			test (exitReason == EBadHandle);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1254
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1255
		case ENegTestGetStateNoConnect:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1256
			test (exitReason == EBadHandle);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1257
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1258
		case ENegTestTransitionInvalidMode:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1259
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1260
		default:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1261
			break;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1262
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1263
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1264
	CLOSE_AND_WAIT(thread);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1265
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1266
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1267
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1268
//! @SYMTestCaseID PBASE-T_DOMAIN-6
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1269
//! @SYMTestType CT
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1270
//! @SYMTestCaseDesc Negative testing
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1271
//! @SYMPREQ 810
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1272
//! @SYMTestActions Various negative tests
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1273
//! @SYMTestExpectedResults  All tests should pass
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1274
//! @SYMTestPriority High
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1275
//! @SYMTestStatus Defined
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1276
void CDmTest6::Perform()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1277
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1278
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1279
 	__UHEAP_MARK;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1280
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1281
	CActiveScheduler::Add(this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1282
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1283
	CDomainManagerAo* iTestDomainManager = NULL;
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1284
	TRAP_IGNORE(iTestDomainManager = CDomainManagerAo::NewL(GHierarchyIdUnderTest, *this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1285
	test (iTestDomainManager != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1286
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1287
	TInt r = CDomainManagerAo::AddDomainHierarchy(GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1288
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1289
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1290
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1291
	// Test 6a - Connect to the same hierarchy twice
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1292
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1293
	test.Next(_L("Test 6a - Connect to the same hierarchy twice"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1294
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1295
	// verify that we can't connect to the same hierarchy more than once
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1296
	CDomainManagerAo* testDomainManager = NULL;
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1297
	TRAP(r, testDomainManager = CDomainManagerAo::NewL(GHierarchyIdUnderTest, *this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1298
	test(r == KErrInUse);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1299
	test (testDomainManager == NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1300
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1301
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1302
	TInt testMemberCount = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1303
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1304
	// Add some test hierarchy members
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1305
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1306
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1307
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1308
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1309
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1310
	// row 1
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1311
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1312
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1313
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1314
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1315
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1316
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1317
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1318
	// row2
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1319
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1320
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1321
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1322
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1323
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1324
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1325
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1326
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1327
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1328
	// row 3
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1329
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1330
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1331
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1332
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1333
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1334
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1335
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1336
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1337
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1338
	// Test 6b change to current state
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1339
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1340
	test.Next(_L("Test 6b change to current state"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1341
	iTestState =  EStartupCriticalStatic;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1342
	iTestDomainId = KDmIdRoot;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1343
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1344
	iTransitionsCompleted = iTestNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1345
	iTestNotificationsExpected = testMemberCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1346
	iTransitionsExpected = 1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1347
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1348
	// request a domain transition
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1349
	iTestDomainManager->RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1350
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1351
	// wait for test transitions to complete
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1352
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1353
	test(iStatus == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1354
	test(iTestNotifications == iTestNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1355
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1356
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1357
	// cancel a member notification request 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1358
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1359
	// Test 6c cancel a member notification request
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1360
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1361
	test.Next(_L("Test 6c cancel a member notification request"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1362
	RDmDomain domainMember;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1363
	TRequestStatus status;
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1364
	domainMember.Connect(GHierarchyIdUnderTest, iTestDomainId);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1365
	domainMember.RequestTransitionNotification(status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1366
	domainMember.CancelTransitionNotification();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1367
	User::WaitForRequest(status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1368
	domainMember.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1369
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1370
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1371
	// Test 6d cancel a member notification request without having first requested a notification
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1372
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1373
	test.Next(_L("Test 6d cancel a member notification request without having first requested a notification"));
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1374
	domainMember.Connect(GHierarchyIdUnderTest, iTestDomainId);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1375
	domainMember.CancelTransitionNotification();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1376
	domainMember.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1377
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1378
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1379
	// Test 6e domain controller adds invalid hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1380
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1381
	test.Next(_L("Test 6e domain controller connects to invalid hierarchy"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1382
	r = RDmDomainManager::AddDomainHierarchy(TDmHierarchyId(-1));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1383
	test(r == KErrBadHierarchyId);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1384
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1385
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1386
	// Test 6f domain member connects to invalid hierarchy
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1387
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1388
	test.Next(_L("Test 6f domain member connects to invalid hierarchy"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1389
	r = domainMember.Connect(TDmHierarchyId(-1), TDmDomainId(KDmIdRoot));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1390
	test (r == KErrBadHierarchyId);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1391
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1392
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1393
	// Test 6g domain member connects to valid hierarchy but invalid domain
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1394
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1395
	test.Next(_L("Test 6g domain member connects to valid hierarchy but invalid domain"));
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1396
	r = domainMember.Connect(GHierarchyIdUnderTest, TDmDomainId(-1));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1397
	test (r == KDmErrBadDomainId);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1398
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1399
	delete iTestDomainManager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1400
	iTestDomainManager = NULL;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1401
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1402
	// Panic tests
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1403
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1404
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1405
	// Test 6h request a transition notification without connecting first
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1406
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1407
	test.Next(_L("Test 6h request a transition notification without connecting first"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1408
	PanicTest(ENegTestTransitionNoConnect);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1409
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1410
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1411
	// Test 6i Get the domain state without connecting
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1412
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1413
	test.Next(_L("Test 6i Get the domain state without connecting"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1414
	PanicTest(ENegTestGetStateNoConnect);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1415
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1416
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1417
	// Test 6j request a transition notification with an invalid transition mode
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1418
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1419
	test.Next(_L("Test 6j request a transition notification with an invalid transition mode"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1420
	PanicTest(ENegTestTransitionInvalidMode);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1421
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1422
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1423
	// cleanup
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1424
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1425
	CDomainMemberAo** mt;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1426
	for (mt = iTestMembers; *mt; ++mt)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1427
		delete *mt;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1428
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1429
 	__UHEAP_MARKEND;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1430
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1431
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1432
// This handles a transition notification from a test domain member.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1433
TInt CDmTest6::TransitionNotification(MDmDomainMember& aDomainMember)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1434
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1435
	TInt status = aDomainMember.Status();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1436
		
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1437
	iTestNotifications++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1438
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1439
	test (aDomainMember.HierarchyId() == GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1440
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1441
	TBuf16<4> buf;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1442
	GetDomainDesc(aDomainMember.Ordinal(), buf);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1443
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1444
	test.Printf(_L("CDmTest6::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1445
		aDomainMember.HierarchyId(), &buf, aDomainMember.Ordinal(), aDomainMember.State(), status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1446
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1447
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1448
	return KErrNone;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1449
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1450
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1451
void CDmTest6::RunL()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1452
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1453
	iTransitionsCompleted++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1454
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1455
	TInt error = iStatus.Int();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1456
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1457
	test.Printf(_L("CDmTest6::RunL(), error = %d, iTestNotifications %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1458
		error, iTestNotifications);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1459
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1460
	if (iTransitionsCompleted == iTransitionsExpected)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1461
		CActiveScheduler::Stop();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1462
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1463
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1464
void CDmTest6::TransitionRequestComplete()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1465
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1466
	iTransitionsCompleted++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1467
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1468
	TInt error = iStatus.Int();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1469
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1470
	test.Printf(_L("CDmTest6::TransitionRequestComplete(), error = %d, iTestNotifications %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1471
		error, iTestNotifications);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1472
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1473
	if (iTransitionsCompleted == iTransitionsExpected)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1474
		CActiveScheduler::Stop();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1475
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1476
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1477
void CDmTest6::DoCancel()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1478
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1479
	test(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1480
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1481
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1482
void CDmTest6::Release()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1483
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1484
	delete this;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1485
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1486
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1487
// Transition progress Observer testing
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1488
class CDmTest7 : public CActive, public MDmTest, public MHierarchyObserver
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1489
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1490
public: 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1491
	// from CActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1492
	void RunL();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1493
 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1494
	// from MDmTest
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1495
	void Perform();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1496
	void Release();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1497
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1498
	void TransitionRequestComplete();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1499
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1500
	// from MHierarchyObserver
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1501
	virtual void TransProgEvent(TDmDomainId aDomainId, TDmDomainState aState);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1502
	virtual void TransFailEvent(TDmDomainId aDomainId, TDmDomainState aState, TInt aError);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1503
	virtual void TransReqEvent(TDmDomainId aDomainId, TDmDomainState aState);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1504
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1505
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1506
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1507
	CDmTest7(TDmDomainId aDomainId) : CActive(CActive::EPriorityStandard), iObservedDomainId(aDomainId) {}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1508
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1509
protected:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1510
	// from CActive
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1511
	virtual void DoCancel();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1512
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1513
private:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1514
	void TestForCompletion();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1515
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1516
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1517
private:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1518
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1519
	enum { KMembersMax = 16 };
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1520
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1521
	CDomainMemberAo*	iTestMembers[KMembersMax]; 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1522
	CDomainManagerAo*	iTestDomainManager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1523
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1524
	TDmDomainId			iTestDomainId;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1525
	TDmDomainState		iTestState;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1526
	TDmDomainId			iObservedDomainId;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1527
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1528
public:
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1529
	TInt				iTestNotifications;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1530
	TInt				iTestNotificationsExpected;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1531
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1532
	TInt				iTransitionsCompleted;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1533
	TInt				iTransitionsExpected;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1534
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1535
	TInt				iTransProgEvents;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1536
	TInt				iTransFailEvents;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1537
	TInt				iTransReqEvents;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1538
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1539
	TInt				iTransProgEventsExpected;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1540
	TInt				iTransFailEventsExpected;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1541
	TInt				iTransReqEventsExpected;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1542
	};
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1543
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1544
//! @SYMTestCaseID PBASE-T_DOMAIN-7
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1545
//! @SYMTestType CT
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1546
//! @SYMTestCaseDesc Transition progress Observer testing
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1547
//! @SYMREQ REQ3723
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1548
//! @SYMTestActions Various negative tests
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1549
//! @SYMTestExpectedResults  All tests should pass
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1550
//! @SYMTestPriority High
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1551
//! @SYMTestStatus Defined
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1552
void CDmTest7::Perform()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1553
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1554
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1555
 	__UHEAP_MARK;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1556
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1557
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1558
	// Test domain transitions with activated observer
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1559
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1560
	CActiveScheduler::Add(this);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1561
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1562
	TInt r = RDmDomainManager::AddDomainHierarchy(GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1563
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1564
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1565
	CDomainManagerAo* iTestDomainManager = NULL;
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1566
	TRAP_IGNORE(iTestDomainManager = CDomainManagerAo::NewL(GHierarchyIdUnderTest, *this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1567
	test (iTestDomainManager != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1568
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1569
	r = CDomainManagerAo::AddDomainHierarchy(GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1570
	test(r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1571
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1572
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1573
	// Test 7a - Testing observer notifications
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1574
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1575
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1576
	test.Next(_L("Test 7a - Testing observer notifications"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1577
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1578
	TInt testMemberCount = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1579
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1580
	// Add some test hierarchy members
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1581
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1582
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1583
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1584
	// row 1
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1585
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1586
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1587
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1588
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1589
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1590
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1591
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1592
	// row2
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1593
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1594
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1595
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1596
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1597
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1598
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1599
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1600
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1601
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1602
	// row 3
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1603
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1604
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1605
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1606
	test(iTestMembers[testMemberCount++] != NULL);
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1607
	TRAP(r, iTestMembers[testMemberCount] = CDomainMemberAo::NewL(GHierarchyIdUnderTest, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), this));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1608
	test(iTestMembers[testMemberCount++] != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1609
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1610
	// create an observer
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1611
	CHierarchyObserver* observer = NULL;
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1612
	TRAP(r, observer = CHierarchyObserver::NewL(*this, GHierarchyIdUnderTest));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1613
	test (r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1614
	test(observer != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1615
	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1616
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1617
	// request a state change
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1618
	iTestState =  EStartupCriticalDynamic;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1619
	iTestDomainId = KDmIdRoot;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1620
	iTransitionsCompleted = iTestNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1621
	iTestNotificationsExpected = testMemberCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1622
	iTransitionsExpected = 1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1623
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1624
	iTransProgEvents = iTransFailEvents = iTransReqEvents = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1625
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1626
	iTransReqEventsExpected = iTransProgEventsExpected = observer->ObserverDomainCount();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1627
	iTransFailEventsExpected = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1628
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1629
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1630
	iTestDomainManager->RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1631
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1632
	// wait for test transitions to complete
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1633
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1634
	test(iStatus == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1635
	test(iTestNotifications == iTestNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1636
	test (iTransProgEvents == iTransProgEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1637
	test (iTransFailEvents == iTransFailEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1638
	test (iTransReqEvents == iTransReqEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1639
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1640
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1641
	// cleanup
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1642
	delete observer; 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1643
	observer = NULL;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1644
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1645
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1646
	// Test 7b - start & stop the observer
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1647
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1648
	test.Next(_L("Test 7b - start & stop the observer"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1649
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1650
	// create an observer, start it stop and then start it again
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1651
	TRAP(r, observer = CHierarchyObserver::NewL(*this, GHierarchyIdUnderTest));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1652
	test (r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1653
	test(observer != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1654
	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1655
	observer->StopObserver();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1656
	observer->StartObserver(iObservedDomainId, EDmNotifyAll);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1657
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1658
	// request a state change
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1659
	iTestState++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1660
	iTestDomainId = KDmIdRoot;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1661
	iTransitionsCompleted = iTestNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1662
	iTestNotificationsExpected = testMemberCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1663
	iTransitionsExpected = 1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1664
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1665
	iTransProgEvents = iTransFailEvents = iTransReqEvents = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1666
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1667
	iTransProgEventsExpected = iTransReqEventsExpected = observer->ObserverDomainCount();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1668
	iTransFailEventsExpected = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1669
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1670
	iTestDomainManager->RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1671
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1672
	// wait for test transitions to complete
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1673
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1674
	test(iStatus == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1675
	test(iTestNotifications == iTestNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1676
	test (iTransProgEvents == iTransProgEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1677
	test (iTransFailEvents == iTransFailEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1678
	test (iTransReqEvents == iTransReqEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1679
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1680
	// stop the observer & request another state change
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1681
	observer->StopObserver();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1682
	iTestState++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1683
	iTestDomainId = KDmIdRoot;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1684
	iTransitionsCompleted = iTestNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1685
	iTestNotificationsExpected = testMemberCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1686
	iTransitionsExpected = 1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1687
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1688
	iTransProgEvents = iTransFailEvents = iTransReqEvents = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1689
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1690
	iTransProgEventsExpected = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1691
	iTransFailEventsExpected = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1692
	iTransReqEventsExpected = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1693
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1694
	iTestDomainManager->RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1695
	// wait for test transitions to complete
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1696
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1697
	test(iStatus == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1698
	test(iTestNotifications == iTestNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1699
	test (iTransProgEvents == iTransProgEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1700
	test (iTransFailEvents == iTransFailEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1701
	test (iTransReqEvents == iTransReqEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1702
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1703
	// Start the observer again on a different domain and only ask for transition requests
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1704
	// Then request another state change
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1705
	observer->StartObserver((iObservedDomainId == KDmIdRoot)?KDmIdTestCA:KDmIdRoot, EDmNotifyTransRequest);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1706
	iTestState++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1707
	iTestDomainId = KDmIdRoot;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1708
	iTransitionsCompleted = iTestNotifications = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1709
	iTestNotificationsExpected = testMemberCount;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1710
	iTransitionsExpected = 1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1711
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1712
	iTransProgEvents = iTransFailEvents = iTransReqEvents = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1713
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1714
	iTransReqEventsExpected = observer->ObserverDomainCount();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1715
	iTransProgEventsExpected = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1716
	iTransFailEventsExpected = 0;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1717
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1718
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1719
	iTestDomainManager->RequestDomainTransition(iTestDomainId, iTestState, ETraverseDefault);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1720
	// wait for test transitions to complete
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1721
	CActiveScheduler::Start();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1722
	test(iStatus == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1723
	test(iTestNotifications == iTestNotificationsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1724
	test (iTransProgEvents == iTransProgEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1725
	test (iTransFailEvents == iTransFailEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1726
	test (iTransReqEvents == iTransReqEventsExpected);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1727
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1728
	delete observer; 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1729
	observer = NULL;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1730
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1731
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1732
	// Test 7c - invalid arguments testing for observer
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1733
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1734
	test.Next(_L("Test 7c - Invalid arguments testing for observer"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1735
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1736
	const TDmHierarchyId	KDmHierarchyIdInvalid = 110;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1737
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1738
	test.Printf(_L("Test 7c.1 - create observer with invalid hierarchy Id\n"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1739
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1740
	// create an observer
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1741
	TRAP(r, observer = CHierarchyObserver::NewL(*this, KDmHierarchyIdInvalid));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1742
	test (r == KErrBadHierarchyId);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1743
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1744
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1745
	test.Printf(_L("Test 7c.2 - Starting the observer with wrong domain Id\n"));
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1746
	TRAP(r, observer = CHierarchyObserver::NewL(*this, GHierarchyIdUnderTest));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1747
	test (r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1748
	test(observer != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1749
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1750
	//Wrong domain Id
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1751
	const TDmDomainId	KDmIdInvalid	= 0x0f;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1752
	r= observer->StartObserver(KDmIdInvalid, EDmNotifyAll);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1753
	test(r==KDmErrBadDomainId);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1754
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1755
	test.Printf(_L("Test 7c.3 - Trying to create second observer on the same hierarchy\n"));
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1756
	TRAP(r, CHierarchyObserver::NewL(*this, GHierarchyIdUnderTest));
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1757
	test (r == KDmErrBadSequence);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1758
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1759
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1760
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1761
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1762
	// Test 7d - Wrong sequence of API calls for observer
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1763
	//*************************************************
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1764
	test.Next(_L("Test 7d - Observer wrong sequence of calls"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1765
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1766
	test.Printf(_L("Test 7d.1 - Stopping Observer before starting it\n"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1767
	r = observer->StopObserver();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1768
	test(r==KDmErrBadSequence);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1769
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1770
	test.Printf(_L("Test 7d.2 - Starting Observer twice\n"));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1771
	r= observer->StartObserver(KDmIdRoot, EDmNotifyAll);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1772
	test(r==KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1773
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1774
	r= observer->StartObserver(KDmIdRoot, EDmNotifyAll);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1775
	test(r==KDmErrBadSequence);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1776
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1777
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1778
	delete observer;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1779
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1780
	/***************************************/
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1781
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1782
	delete iTestDomainManager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1783
	iTestDomainManager = NULL;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1784
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1785
	CDomainMemberAo** mt;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1786
	for (mt = iTestMembers; *mt; ++mt)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1787
		delete *mt;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1788
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1789
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1790
	// restore the domain hierarchies to their initial state so as not to 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1791
	// upset any subsequent tests which rely on this
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1792
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1793
	RDmDomainManager manager;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1794
	TRequestStatus status;
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1795
	TInt r = manager.Connect(GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1796
	test (r == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1797
	manager.RequestDomainTransition(KDmIdRoot, EStartupCriticalStatic, ETraverseDefault, status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1798
	User::WaitForRequest(status);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1799
	test(status.Int() == KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1800
	manager.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1801
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1802
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1803
 	__UHEAP_MARKEND;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1804
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1805
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1806
// This handles a transition notification from a test domain member.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1807
TInt CDmTest7::TransitionNotification(MDmDomainMember& aDomainMember)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1808
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1809
		
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1810
	iTestNotifications++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1811
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1812
	test (aDomainMember.HierarchyId() == GHierarchyIdUnderTest);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1813
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1814
	TBuf16<4> buf;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1815
	GetDomainDesc(aDomainMember.Ordinal(), buf);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1816
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1817
	__PRINT((_L("CDmTest7::TransitionNotification(), Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1818
		aDomainMember.HierarchyId(), &buf, aDomainMember.Ordinal(), aDomainMember.State(), aDomainMember.Status()));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1819
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1820
	return KErrNone;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1821
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1822
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1823
void CDmTest7::RunL()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1824
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1825
	iTransitionsCompleted++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1826
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1827
	__PRINT((_L("CDmTest7::RunL(), error = %d, iTestNotifications %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1828
		iStatus.Int(), iTestNotifications));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1829
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1830
	TestForCompletion();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1831
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1832
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1833
void CDmTest7::TransitionRequestComplete()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1834
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1835
	iTransitionsCompleted++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1836
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1837
	__PRINT((_L("CDmTest7::TransitionRequestComplete(), error = %d, iTestNotifications %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1838
		iStatus.Int(), iTestNotifications));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1839
	
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1840
	TestForCompletion();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1841
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1842
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1843
void CDmTest7::DoCancel()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1844
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1845
	test(0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1846
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1847
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1848
void CDmTest7::Release()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1849
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1850
	delete this;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1851
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1852
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1853
void CDmTest7::TestForCompletion()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1854
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1855
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1856
	if (iTransitionsCompleted == iTransitionsExpected &&
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1857
		iTransProgEvents == iTransProgEventsExpected && 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1858
		iTransFailEvents == iTransFailEventsExpected &&
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1859
		iTransReqEvents == iTransReqEventsExpected)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1860
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1861
		CActiveScheduler::Stop();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1862
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1863
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1864
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1865
#ifdef _DEBUG
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1866
void CDmTest7::TransProgEvent(TDmDomainId aDomainId, TDmDomainState aState)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1867
#else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1868
void CDmTest7::TransProgEvent(TDmDomainId /*aDomainId*/, TDmDomainState /*aState*/)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1869
#endif
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1870
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1871
	iTransProgEvents++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1872
	__PRINT((_L("CDmTest7::TransProgEvent(), aDomainId = %d, aState %d, iTransProgEvents %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1873
		aDomainId, aState, iTransProgEvents));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1874
	TestForCompletion();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1875
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1876
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1877
#ifdef _DEBUG
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1878
void CDmTest7::TransFailEvent(TDmDomainId aDomainId, TDmDomainState aState, TInt aError)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1879
#else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1880
void CDmTest7::TransFailEvent(TDmDomainId /*aDomainId*/, TDmDomainState /*aState*/, TInt /*aError*/)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1881
#endif
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1882
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1883
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1884
	iTransFailEvents++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1885
	__PRINT((_L("CDmTest7::TransFailEvent(), aDomainId = %d, aState %d aError %d, iTransFailEvents %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1886
		aDomainId, aState, iTransFailEvents, aError));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1887
	TestForCompletion();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1888
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1889
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1890
#ifdef _DEBUG
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1891
void CDmTest7::TransReqEvent(TDmDomainId aDomainId, TDmDomainState aState)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1892
#else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1893
void CDmTest7::TransReqEvent(TDmDomainId /*aDomainId*/, TDmDomainState /*aState*/)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1894
#endif
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1895
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1896
	iTransReqEvents++;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1897
	__PRINT((_L("CDmTest7::TransReqEvent(), aDomainId = %d, aState %d, iTransReqEvents %d\n"), 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1898
		aDomainId, aState, iTransReqEvents));
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1899
	TestForCompletion();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1900
	}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  1901
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1902
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1903
/**
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1904
   Increase code coverage, in particular get CPowerUpHandler::DoCancel()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1905
   called.
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1906
*/
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1907
class CDmPowerCoverageTest : public CActive, public MDmTest
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1908
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1909
public:
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1910
	CDmPowerCoverageTest();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1911
	~CDmPowerCoverageTest()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1912
		{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1913
		Cancel();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1914
		iManager.Close();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1915
		delete iMember;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1916
		}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1917
	// from CActive
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1918
	void RunL();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1919
	// from MDmTest
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1920
	void Perform();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1921
	void Release();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1922
	TInt TransitionNotification(MDmDomainMember&);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1923
	void TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1924
		{}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1925
private:
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1926
	// from CActive
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1927
	virtual void DoCancel()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1928
		{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1929
		test(0);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1930
		}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1931
private:
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1932
	CDmTestMember* iMember;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1933
	RDmDomainManager iManager;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1934
	};
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1935
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1936
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1937
CDmPowerCoverageTest::CDmPowerCoverageTest()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1938
	: CActive(CActive::EPriorityStandard)
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1939
	{}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1940
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1941
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1942
void CDmPowerCoverageTest::RunL()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1943
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1944
	RDebug::Printf("CDmPowerCoverageTest::RunL(): %d", iStatus.Int());
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1945
	CActiveScheduler::Stop();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1946
	}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1947
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1948
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1949
void CDmPowerCoverageTest::Perform()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1950
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1951
	test.Next(_L("CDmPowerCoverageTest"));
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1952
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1953
	iMember = new CDmTestMember(KDmHierarchyIdPower, KDmIdApps, 0, this);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1954
	test(iMember != NULL);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1955
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1956
	TInt r = iManager.Connect();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1957
	test(r == KErrNone);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1958
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1959
	CActiveScheduler::Add(this);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1960
	iManager.RequestSystemTransition(EPwStandby, iStatus);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1961
	iManager.CancelTransition();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1962
	CActive::SetActive();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1963
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1964
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1965
	}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1966
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1967
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1968
TInt CDmPowerCoverageTest::TransitionNotification(MDmDomainMember&)
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1969
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1970
	RDebug::Printf("CDmPowerCoverageTest::TransitionNotification()");
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1971
	// Don't acknowledge
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1972
	return KErrAbort;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1973
	}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1974
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1975
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1976
void CDmPowerCoverageTest::Release()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1977
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1978
	delete this;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1979
	}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1980
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1981
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1982
/**
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1983
Test disconnecting domain controller from server whilst
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1984
transition in progress
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1985
*/
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1986
class CDmTestDisconnect : public CBase, public MDmTest
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1987
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1988
public:
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1989
	~CDmTestDisconnect();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1990
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1991
	// from MDmTest
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1992
	void Perform();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1993
	void Release();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1994
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1995
	void TransitionRequestComplete() {test(EFalse);}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1996
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1997
protected:
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1998
	CDmTestMember*		iMember;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  1999
	RDmDomainManager	iManager;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2000
	};
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2001
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2002
CDmTestDisconnect::~CDmTestDisconnect()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2003
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2004
	delete iMember;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2005
	iManager.Close();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2006
	}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2007
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2008
void CDmTestDisconnect::Perform()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2009
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2010
	TInt r = RDmDomainManager::AddDomainHierarchy(GHierarchyIdUnderTest);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2011
	test_KErrNone(r);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2012
	test.Next(_L("Test disconnecting controller during transition"));
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2013
	iMember = new (ELeave) CDmTestMember(GHierarchyIdUnderTest, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), this);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2014
	r = iManager.Connect(GHierarchyIdUnderTest);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2015
	test_KErrNone(r);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2016
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2017
	test_Equal(0, RThread().RequestCount());
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2018
	TRequestStatus status;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2019
	iManager.RequestDomainTransition(KDmIdRoot, EStartupCriticalStatic, ETraverseDefault, status);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2020
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2021
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2022
	// No User::WaitForRequest is used, since it is expected that
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2023
	// the outstanding request will not be completed
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2024
	test_Equal(0, RThread().RequestCount());
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2025
	}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2026
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2027
TInt CDmTestDisconnect::TransitionNotification(MDmDomainMember&)
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2028
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2029
	iManager.Close();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2030
	CActiveScheduler::Stop();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2031
	return KErrNone;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2032
	}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2033
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2034
void CDmTestDisconnect::Release()
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2035
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2036
	delete this;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2037
	}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2038
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2039
void RunTests(TInt aIter)
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2040
	{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2041
	while (aIter--)
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2042
		{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2043
		MDmTest* tests[] = 
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2044
			{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2045
			new CDmTestDisconnect(),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2046
			new CDmTest1(KDmIdRoot, EPwStandby),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2047
			new CDmTest1(KDmIdRoot, EPwOff),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2048
			new CDmTest1(KDmIdRoot, EPwActive),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2049
			new CDmTest1(KDmIdApps, EPwStandby),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2050
			new CDmTest1(KDmIdApps, EPwOff),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2051
			new CDmTest1(KDmIdApps, EPwActive),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2052
			new CDmTest1(KDmIdUiApps, EPwStandby),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2053
			new CDmTest1(KDmIdUiApps, EPwOff),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2054
			new CDmTest1(KDmIdUiApps, EPwActive),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2055
			new CDmTest2(EPwStandby),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2056
			new CDmTest3(),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2057
	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2058
			// platform security tests
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2059
			new CDmTest4(),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2060
	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2061
			// PREQ810 tests :
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2062
			// note that we use a fictitious power state to prevent any 
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2063
			new CDmTest5(KDmIdRoot, KDmIdRoot, EPwActive+10, EStartupCriticalDynamic),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2064
			new CDmTest5(KDmIdUiApps, KDmIdTestAB, EPwActive+10, EStartupCriticalDynamic),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2065
	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2066
		    // negative tests
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2067
			new CDmTest6(),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2068
	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2069
	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2070
			// observer tests
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2071
	 		new CDmTest7(KDmIdTestA),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2072
			new CDmTest7(KDmIdRoot),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2073
			
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2074
			// increase code coverage
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2075
			new CDmPowerCoverageTest(),
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2076
			};
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2077
	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2078
		for (unsigned int i = 0; i < sizeof(tests)/sizeof(*tests); ++i)
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2079
			{
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2080
			test(tests[i] != NULL);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2081
			tests[i]->Perform();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2082
			tests[i]->Release();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2083
			}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2084
		}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2085
	}
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2086
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2087
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2088
GLDEF_C TInt E32Main()
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2089
	{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2090
	CTrapCleanup* trapHandler=CTrapCleanup::New();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2091
	test(trapHandler!=NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2092
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2093
	CActiveScheduler* scheduler = new CActiveScheduler();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2094
	test(scheduler != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2095
	CActiveScheduler::Install(scheduler);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2096
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2097
	// Turn off evil lazy dll unloading
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2098
	RLoader l;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2099
	test(l.Connect()==KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2100
	test(l.CancelLazyDllUnload()==KErrNone);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2101
	l.Close();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2102
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2103
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2104
	// Perform the number of iterations specifed by the command line argument.
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2105
	//
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2106
	// If no arguments - perform one iteration
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2107
	//
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2108
    TInt iter = 1;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2109
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2110
	TInt len = User::CommandLineLength();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2111
	if (len)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2112
		{
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2113
		// Copy the command line in a buffer
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2114
		HBufC* hb = HBufC::NewMax(len);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2115
		test(hb != NULL);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2116
		TPtr cmd((TUint16*) hb->Ptr(), len);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2117
		User::CommandLine(cmd);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2118
		// Extract the number of iterations
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2119
		TLex l(cmd);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2120
		TInt i;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2121
		TInt r = l.Val(i);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2122
		if (r == KErrNone)
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2123
			iter = i;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2124
		else
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2125
			// strange command - silently ignore
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2126
			{} 
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2127
		delete hb;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2128
		}
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2129
286
48e57fb1237e 201039_11
hgs
parents: 279
diff changeset
  2130
	TInt testExclusions = 0;
48e57fb1237e 201039_11
hgs
parents: 279
diff changeset
  2131
	test_KErrNone(GetTestExclusionSettings(testExclusions));
48e57fb1237e 201039_11
hgs
parents: 279
diff changeset
  2132
	
48e57fb1237e 201039_11
hgs
parents: 279
diff changeset
  2133
	if (testExclusions & KDisableControllerShutdown)
48e57fb1237e 201039_11
hgs
parents: 279
diff changeset
  2134
		{
48e57fb1237e 201039_11
hgs
parents: 279
diff changeset
  2135
		UserSvr::HalFunction(EHalGroupPower, EPowerHalPowerManagerTestMode, (TAny*)KDisableControllerShutdown, NULL);
48e57fb1237e 201039_11
hgs
parents: 279
diff changeset
  2136
		}
48e57fb1237e 201039_11
hgs
parents: 279
diff changeset
  2137
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2138
	test.Title();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2139
	test.Printf(_L("Go for %d iterations\n"), iter);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2140
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2141
	// Remember the number of open handles. Just for a sanity check ....
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2142
	TInt start_thc, start_phc;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2143
	RThread().HandleCount(start_phc, start_thc);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2144
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2145
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2146
	test.Start(_L("Test run with original test Hierarchy"));	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2147
	GHierarchyIdUnderTest = KDmHierarchyIdTest;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2148
	RunTests(iter);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2149
	test.End();
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2150
	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2151
	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2152
	test.Start(_L("Test run with original test Hierarchy as V2 policy"));	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2153
	GHierarchyIdUnderTest = KDmHierarchyIdTestV2_97;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2154
	RunTests(iter);
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2155
	test.End();
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2156
279
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2157
	test.Start(_L("Test run with original test Hierarchy as V2 policy, but NULL state specification"));	
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2158
	GHierarchyIdUnderTest = KDmHierarchyIdTestV2_96;
957c583b417b 201039_07
hgs
parents: 269
diff changeset
  2159
	RunTests(iter);
245
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2160
	test.End();
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2161
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2162
	// Sanity check for open handles and for pending requests ...
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2163
	TInt end_thc, end_phc;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2164
	RThread().HandleCount(end_phc, end_thc);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2165
	test(start_thc == end_thc);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2166
	test(start_phc == end_phc);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2167
	test(RThread().RequestCount() >= 0);
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2168
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2169
	delete scheduler;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2170
	delete trapHandler;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2171
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2172
	return KErrNone;
647ab20fee2e 201031_10
hgs
parents:
diff changeset
  2173
	}