kerneltest/e32test/domainmgr/t_domain_monitor.cpp
author hgs
Mon, 04 Oct 2010 12:03:52 +0100
changeset 279 957c583b417b
permissions -rw-r--r--
201039_07
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
279
957c583b417b 201039_07
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
957c583b417b 201039_07
hgs
parents:
diff changeset
     2
// All rights reserved.
957c583b417b 201039_07
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
957c583b417b 201039_07
hgs
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
957c583b417b 201039_07
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
957c583b417b 201039_07
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
957c583b417b 201039_07
hgs
parents:
diff changeset
     7
//
957c583b417b 201039_07
hgs
parents:
diff changeset
     8
// Initial Contributors:
957c583b417b 201039_07
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
957c583b417b 201039_07
hgs
parents:
diff changeset
    10
//
957c583b417b 201039_07
hgs
parents:
diff changeset
    11
// Contributors:
957c583b417b 201039_07
hgs
parents:
diff changeset
    12
//
957c583b417b 201039_07
hgs
parents:
diff changeset
    13
// Description:
957c583b417b 201039_07
hgs
parents:
diff changeset
    14
// e32test/domainmgr/t_domain_monitor.cpp
957c583b417b 201039_07
hgs
parents:
diff changeset
    15
// Overview:
957c583b417b 201039_07
hgs
parents:
diff changeset
    16
// Domain manager transition monitoring feature implementation tests
957c583b417b 201039_07
hgs
parents:
diff changeset
    17
//
957c583b417b 201039_07
hgs
parents:
diff changeset
    18
// API Information:
957c583b417b 201039_07
hgs
parents:
diff changeset
    19
// RDmDomain, RDmDomainManager CDmDomain, CDmDomainManager,CDmDomanKeepAlive
957c583b417b 201039_07
hgs
parents:
diff changeset
    20
//
957c583b417b 201039_07
hgs
parents:
diff changeset
    21
//  - Domain member deferral and acknowledgments tests
957c583b417b 201039_07
hgs
parents:
diff changeset
    22
//  - Domain manager policy interface tests
957c583b417b 201039_07
hgs
parents:
diff changeset
    23
//  - Domain member deferral requests Platsec capability checking tests
957c583b417b 201039_07
hgs
parents:
diff changeset
    24
//
957c583b417b 201039_07
hgs
parents:
diff changeset
    25
// Platforms/Drives/Compatibility:
957c583b417b 201039_07
hgs
parents:
diff changeset
    26
// All.
957c583b417b 201039_07
hgs
parents:
diff changeset
    27
// Assumptions/Requirement/Pre-requisites:
957c583b417b 201039_07
hgs
parents:
diff changeset
    28
// Failures and causes:
957c583b417b 201039_07
hgs
parents:
diff changeset
    29
// Base Port information:
957c583b417b 201039_07
hgs
parents:
diff changeset
    30
//
957c583b417b 201039_07
hgs
parents:
diff changeset
    31
957c583b417b 201039_07
hgs
parents:
diff changeset
    32
#define __E32TEST_EXTENSION__
957c583b417b 201039_07
hgs
parents:
diff changeset
    33
957c583b417b 201039_07
hgs
parents:
diff changeset
    34
#include <e32test.h>
957c583b417b 201039_07
hgs
parents:
diff changeset
    35
#include <e32ldr_private.h>
957c583b417b 201039_07
hgs
parents:
diff changeset
    36
957c583b417b 201039_07
hgs
parents:
diff changeset
    37
#include <domainobserver.h>
957c583b417b 201039_07
hgs
parents:
diff changeset
    38
957c583b417b 201039_07
hgs
parents:
diff changeset
    39
#include "domainpolicytest.h"
957c583b417b 201039_07
hgs
parents:
diff changeset
    40
957c583b417b 201039_07
hgs
parents:
diff changeset
    41
#include "t_domain.h"
957c583b417b 201039_07
hgs
parents:
diff changeset
    42
957c583b417b 201039_07
hgs
parents:
diff changeset
    43
957c583b417b 201039_07
hgs
parents:
diff changeset
    44
RTest test(_L(" T_DOMAIN_MONITOR "));
957c583b417b 201039_07
hgs
parents:
diff changeset
    45
957c583b417b 201039_07
hgs
parents:
diff changeset
    46
957c583b417b 201039_07
hgs
parents:
diff changeset
    47
/**
957c583b417b 201039_07
hgs
parents:
diff changeset
    48
   Domain member deferral requests PlatSec capability checking tests.
957c583b417b 201039_07
hgs
parents:
diff changeset
    49
*/
957c583b417b 201039_07
hgs
parents:
diff changeset
    50
_LIT(KSecuritySlavePath1, "t_dmslave_nocaps.exe");
957c583b417b 201039_07
hgs
parents:
diff changeset
    51
_LIT(KSecuritySlavePath2, "t_dmslave_wdd.exe");
957c583b417b 201039_07
hgs
parents:
diff changeset
    52
_LIT(KSecuritySlavePath3, "t_dmslave_protsrv.exe");
957c583b417b 201039_07
hgs
parents:
diff changeset
    53
957c583b417b 201039_07
hgs
parents:
diff changeset
    54
class CDmTestPlatSec : public CActive, public MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
    55
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
    56
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
    57
	CDmTestPlatSec(TPtrC aFileName);
957c583b417b 201039_07
hgs
parents:
diff changeset
    58
	~CDmTestPlatSec()
957c583b417b 201039_07
hgs
parents:
diff changeset
    59
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
    60
		Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
    61
		iManager.Close();
957c583b417b 201039_07
hgs
parents:
diff changeset
    62
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
    63
	// from CActive
957c583b417b 201039_07
hgs
parents:
diff changeset
    64
	void RunL();
957c583b417b 201039_07
hgs
parents:
diff changeset
    65
	// from MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
    66
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
    67
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
    68
	TInt TransitionNotification(MDmDomainMember&)
957c583b417b 201039_07
hgs
parents:
diff changeset
    69
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
    70
		test(0);
957c583b417b 201039_07
hgs
parents:
diff changeset
    71
		return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
    72
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
    73
	void TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents:
diff changeset
    74
		{}
957c583b417b 201039_07
hgs
parents:
diff changeset
    75
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
    76
	// from CActive
957c583b417b 201039_07
hgs
parents:
diff changeset
    77
	virtual void DoCancel()
957c583b417b 201039_07
hgs
parents:
diff changeset
    78
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
    79
		test(0);
957c583b417b 201039_07
hgs
parents:
diff changeset
    80
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
    81
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
    82
	RDmDomainManager iManager;
957c583b417b 201039_07
hgs
parents:
diff changeset
    83
	const TPtrC iFileName;
957c583b417b 201039_07
hgs
parents:
diff changeset
    84
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
    85
957c583b417b 201039_07
hgs
parents:
diff changeset
    86
957c583b417b 201039_07
hgs
parents:
diff changeset
    87
CDmTestPlatSec::CDmTestPlatSec(TPtrC aFileName)
957c583b417b 201039_07
hgs
parents:
diff changeset
    88
	: CActive(CActive::EPriorityStandard), iFileName(aFileName)
957c583b417b 201039_07
hgs
parents:
diff changeset
    89
	{}
957c583b417b 201039_07
hgs
parents:
diff changeset
    90
957c583b417b 201039_07
hgs
parents:
diff changeset
    91
957c583b417b 201039_07
hgs
parents:
diff changeset
    92
void CDmTestPlatSec::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
    93
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
    94
	test.Next(_L("CDmTestPlatSec"));
957c583b417b 201039_07
hgs
parents:
diff changeset
    95
957c583b417b 201039_07
hgs
parents:
diff changeset
    96
	// 1. Set up test hierarchy/domain & join it
957c583b417b 201039_07
hgs
parents:
diff changeset
    97
	TInt r = RDmDomainManager::AddDomainHierarchy(KDmHierarchyIdTestV2);
957c583b417b 201039_07
hgs
parents:
diff changeset
    98
	test_KErrNone(r);
957c583b417b 201039_07
hgs
parents:
diff changeset
    99
	r = iManager.Connect(KDmHierarchyIdTestV2);
957c583b417b 201039_07
hgs
parents:
diff changeset
   100
	test_KErrNone(r);
957c583b417b 201039_07
hgs
parents:
diff changeset
   101
957c583b417b 201039_07
hgs
parents:
diff changeset
   102
	// 2. Create a child process
957c583b417b 201039_07
hgs
parents:
diff changeset
   103
	RProcess proc;
957c583b417b 201039_07
hgs
parents:
diff changeset
   104
	r = proc.Create(iFileName, KNullDesC);
957c583b417b 201039_07
hgs
parents:
diff changeset
   105
	test_KErrNone(r);
957c583b417b 201039_07
hgs
parents:
diff changeset
   106
957c583b417b 201039_07
hgs
parents:
diff changeset
   107
	// Start process & wait until child has set up itself (3. & 4.)
957c583b417b 201039_07
hgs
parents:
diff changeset
   108
	TRequestStatus status;
957c583b417b 201039_07
hgs
parents:
diff changeset
   109
	proc.Rendezvous(status);
957c583b417b 201039_07
hgs
parents:
diff changeset
   110
	proc.Resume();
957c583b417b 201039_07
hgs
parents:
diff changeset
   111
	User::WaitForRequest(status);
957c583b417b 201039_07
hgs
parents:
diff changeset
   112
	test_KErrNone(status.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
   113
957c583b417b 201039_07
hgs
parents:
diff changeset
   114
	// 5. Transition test domain to some other state (child: 6. & 7.)
957c583b417b 201039_07
hgs
parents:
diff changeset
   115
	CActiveScheduler::Add(this);
957c583b417b 201039_07
hgs
parents:
diff changeset
   116
	iManager.RequestDomainTransition(KDmIdTestA, EShutdownNonCritical, ETraverseDefault, iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
   117
	CActive::SetActive();
957c583b417b 201039_07
hgs
parents:
diff changeset
   118
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
   119
957c583b417b 201039_07
hgs
parents:
diff changeset
   120
	// Child processes do: TC 3.1, 3.2, 3.3
957c583b417b 201039_07
hgs
parents:
diff changeset
   121
957c583b417b 201039_07
hgs
parents:
diff changeset
   122
	CLOSE_AND_WAIT(proc);
957c583b417b 201039_07
hgs
parents:
diff changeset
   123
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   124
957c583b417b 201039_07
hgs
parents:
diff changeset
   125
957c583b417b 201039_07
hgs
parents:
diff changeset
   126
void CDmTestPlatSec::RunL()
957c583b417b 201039_07
hgs
parents:
diff changeset
   127
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   128
	RDebug::Printf("CDmTestPlatSec::RunL(): %d", iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
   129
	CActiveScheduler::Stop();
957c583b417b 201039_07
hgs
parents:
diff changeset
   130
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   131
957c583b417b 201039_07
hgs
parents:
diff changeset
   132
957c583b417b 201039_07
hgs
parents:
diff changeset
   133
void CDmTestPlatSec::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
   134
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   135
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
   136
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   137
957c583b417b 201039_07
hgs
parents:
diff changeset
   138
957c583b417b 201039_07
hgs
parents:
diff changeset
   139
/**
957c583b417b 201039_07
hgs
parents:
diff changeset
   140
   Checks that upon transition acknowledgment, outstanding deferral is
957c583b417b 201039_07
hgs
parents:
diff changeset
   141
   completed with KErrCompletion.
957c583b417b 201039_07
hgs
parents:
diff changeset
   142
*/
957c583b417b 201039_07
hgs
parents:
diff changeset
   143
class CDmDeferralTestCompletion : public CDmDeferralTest, public MDeferringMember
957c583b417b 201039_07
hgs
parents:
diff changeset
   144
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   145
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   146
	CDmDeferralTestCompletion(TDmHierarchyId aId, TDmDomainState aState)
957c583b417b 201039_07
hgs
parents:
diff changeset
   147
		: CDmDeferralTest(aId, aState)
957c583b417b 201039_07
hgs
parents:
diff changeset
   148
		{}
957c583b417b 201039_07
hgs
parents:
diff changeset
   149
957c583b417b 201039_07
hgs
parents:
diff changeset
   150
	~CDmDeferralTestCompletion()
957c583b417b 201039_07
hgs
parents:
diff changeset
   151
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   152
		delete iKeepAlive;
957c583b417b 201039_07
hgs
parents:
diff changeset
   153
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   154
957c583b417b 201039_07
hgs
parents:
diff changeset
   155
	void DoPerform()
957c583b417b 201039_07
hgs
parents:
diff changeset
   156
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   157
		test.Next(_L("CDmDeferralTestCompletion\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   158
957c583b417b 201039_07
hgs
parents:
diff changeset
   159
		iMember = new CDmTestMember(iHierarchyId, KDmIdTestA, 0, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
   160
		test_NotNull(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   161
957c583b417b 201039_07
hgs
parents:
diff changeset
   162
		iKeepAlive = new CTestKeepAlive(iMember->iDomain);
957c583b417b 201039_07
hgs
parents:
diff changeset
   163
		test_NotNull(iKeepAlive);
957c583b417b 201039_07
hgs
parents:
diff changeset
   164
957c583b417b 201039_07
hgs
parents:
diff changeset
   165
		iManager.RequestSystemTransition(iState, ETraverseChildrenFirst, CActive::iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
   166
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   167
957c583b417b 201039_07
hgs
parents:
diff changeset
   168
	void HandleEndOfDeferrals(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
   169
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   170
		test.Printf(_L("End of deferrals\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   171
957c583b417b 201039_07
hgs
parents:
diff changeset
   172
		// This is the test (TC 1.1.1.2.1):
957c583b417b 201039_07
hgs
parents:
diff changeset
   173
957c583b417b 201039_07
hgs
parents:
diff changeset
   174
		test_Equal(KErrCompletion, aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   175
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   176
957c583b417b 201039_07
hgs
parents:
diff changeset
   177
	TInt TransitionNotification(MDmDomainMember& /*aDomainMember*/)
957c583b417b 201039_07
hgs
parents:
diff changeset
   178
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   179
		iKeepAlive->BeginDeferrals(this, 1);
957c583b417b 201039_07
hgs
parents:
diff changeset
   180
		return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
   181
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   182
957c583b417b 201039_07
hgs
parents:
diff changeset
   183
	void TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents:
diff changeset
   184
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   185
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   186
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   187
	CTestKeepAlive* iKeepAlive;
957c583b417b 201039_07
hgs
parents:
diff changeset
   188
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   189
957c583b417b 201039_07
hgs
parents:
diff changeset
   190
957c583b417b 201039_07
hgs
parents:
diff changeset
   191
/**
957c583b417b 201039_07
hgs
parents:
diff changeset
   192
   Checks that after deferring a given number of times, the deferral
957c583b417b 201039_07
hgs
parents:
diff changeset
   193
   after fails with KErrNotSupported.
957c583b417b 201039_07
hgs
parents:
diff changeset
   194
*/
957c583b417b 201039_07
hgs
parents:
diff changeset
   195
class CDmDeferralTestKErrNotSupported : public CDmDeferralTest, public MDeferringMember
957c583b417b 201039_07
hgs
parents:
diff changeset
   196
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   197
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   198
	/**
957c583b417b 201039_07
hgs
parents:
diff changeset
   199
	@param aCount Number of deferrals to attempt
957c583b417b 201039_07
hgs
parents:
diff changeset
   200
	*/
957c583b417b 201039_07
hgs
parents:
diff changeset
   201
	CDmDeferralTestKErrNotSupported(TDmHierarchyId aId, TDmDomainState aState, TInt aCount)
957c583b417b 201039_07
hgs
parents:
diff changeset
   202
		: CDmDeferralTest(aId, aState), iCount(aCount)
957c583b417b 201039_07
hgs
parents:
diff changeset
   203
		{}
957c583b417b 201039_07
hgs
parents:
diff changeset
   204
957c583b417b 201039_07
hgs
parents:
diff changeset
   205
	~CDmDeferralTestKErrNotSupported()
957c583b417b 201039_07
hgs
parents:
diff changeset
   206
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   207
		delete iKeepAlive;
957c583b417b 201039_07
hgs
parents:
diff changeset
   208
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   209
957c583b417b 201039_07
hgs
parents:
diff changeset
   210
	// from CDmDeferralTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   211
	void DoPerform()
957c583b417b 201039_07
hgs
parents:
diff changeset
   212
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   213
		test.Next(_L("CDmDeferralTestKErrNotSupported\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   214
		test.Printf(_L("CDmDeferralTestKErrNotSupported: Hierachy %d, state %d, attempt %d deferrals\n"),
957c583b417b 201039_07
hgs
parents:
diff changeset
   215
			iHierarchyId, iState, iCount);
957c583b417b 201039_07
hgs
parents:
diff changeset
   216
957c583b417b 201039_07
hgs
parents:
diff changeset
   217
		iMember = new CDmTestMember(iHierarchyId, KDmIdTestA, 0, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
   218
		test_NotNull(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   219
957c583b417b 201039_07
hgs
parents:
diff changeset
   220
		iKeepAlive = new CTestKeepAlive(iMember->iDomain);
957c583b417b 201039_07
hgs
parents:
diff changeset
   221
		test_NotNull(iKeepAlive);
957c583b417b 201039_07
hgs
parents:
diff changeset
   222
957c583b417b 201039_07
hgs
parents:
diff changeset
   223
		iManager.RequestSystemTransition(iState, ETraverseChildrenFirst, CActive::iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
   224
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   225
957c583b417b 201039_07
hgs
parents:
diff changeset
   226
	// from MDeferringMember
957c583b417b 201039_07
hgs
parents:
diff changeset
   227
	void HandleEndOfDeferrals(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
   228
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   229
		iMember->Acknowledge();
957c583b417b 201039_07
hgs
parents:
diff changeset
   230
957c583b417b 201039_07
hgs
parents:
diff changeset
   231
		test.Printf(_L("CDmDeferralTestKErrNotSupported: End of deferrals %d\n"), aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   232
		// This is the test (TC 1.1.1.3.1, TC 1.1.1.3.2, TC 1.1.1.3.3):
957c583b417b 201039_07
hgs
parents:
diff changeset
   233
		test_Equal(KErrNotSupported, aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   234
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   235
957c583b417b 201039_07
hgs
parents:
diff changeset
   236
	// from MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   237
	TInt TransitionNotification(MDmDomainMember& /*aDomainMember*/)
957c583b417b 201039_07
hgs
parents:
diff changeset
   238
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   239
		iKeepAlive->BeginDeferrals(this, iCount);
957c583b417b 201039_07
hgs
parents:
diff changeset
   240
		return KErrAbort; // Don't acknowledge yet
957c583b417b 201039_07
hgs
parents:
diff changeset
   241
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   242
957c583b417b 201039_07
hgs
parents:
diff changeset
   243
	void TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents:
diff changeset
   244
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   245
		RDebug::Printf("CDmDeferralTestKErrNotSupported::TransitionRequestComplete()");
957c583b417b 201039_07
hgs
parents:
diff changeset
   246
		test_KErrNone(iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
   247
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   248
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   249
	CTestKeepAlive* iKeepAlive;
957c583b417b 201039_07
hgs
parents:
diff changeset
   250
	const TInt iCount;
957c583b417b 201039_07
hgs
parents:
diff changeset
   251
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   252
957c583b417b 201039_07
hgs
parents:
diff changeset
   253
/**
957c583b417b 201039_07
hgs
parents:
diff changeset
   254
   DeferAcknowledgement() with status KErrNone.
957c583b417b 201039_07
hgs
parents:
diff changeset
   255
957c583b417b 201039_07
hgs
parents:
diff changeset
   256
   1: Client receives notification, defers once and then acknowledges after the
957c583b417b 201039_07
hgs
parents:
diff changeset
   257
   next notification
957c583b417b 201039_07
hgs
parents:
diff changeset
   258
   2: Client receives notification, defers twice and then acknowledges after
957c583b417b 201039_07
hgs
parents:
diff changeset
   259
   the next notification
957c583b417b 201039_07
hgs
parents:
diff changeset
   260
   3: Client receives notification, defers once and then fails to acknowledge
957c583b417b 201039_07
hgs
parents:
diff changeset
   261
*/
957c583b417b 201039_07
hgs
parents:
diff changeset
   262
class CDmDeferralTestKErrNone : public CDmDeferralTest, public MDeferringMember
957c583b417b 201039_07
hgs
parents:
diff changeset
   263
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   264
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   265
	CDmDeferralTestKErrNone(TDmHierarchyId aId, TDmDomainState aState,
957c583b417b 201039_07
hgs
parents:
diff changeset
   266
							TInt aDeferrals, TBool aAcknowledge);
957c583b417b 201039_07
hgs
parents:
diff changeset
   267
	~CDmDeferralTestKErrNone();
957c583b417b 201039_07
hgs
parents:
diff changeset
   268
	// from CDmDeferralTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   269
	void DoPerform();
957c583b417b 201039_07
hgs
parents:
diff changeset
   270
	// from MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   271
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   272
	void TransitionRequestComplete();
957c583b417b 201039_07
hgs
parents:
diff changeset
   273
	// from MDeferringMember
957c583b417b 201039_07
hgs
parents:
diff changeset
   274
	void HandleEndOfDeferrals(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   275
957c583b417b 201039_07
hgs
parents:
diff changeset
   276
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   277
	CTestKeepAlive* iKeepAlive;
957c583b417b 201039_07
hgs
parents:
diff changeset
   278
	const TInt iDeferrals;
957c583b417b 201039_07
hgs
parents:
diff changeset
   279
	const TBool iAcknowledge;
957c583b417b 201039_07
hgs
parents:
diff changeset
   280
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   281
957c583b417b 201039_07
hgs
parents:
diff changeset
   282
957c583b417b 201039_07
hgs
parents:
diff changeset
   283
CDmDeferralTestKErrNone::CDmDeferralTestKErrNone(TDmHierarchyId aId,
957c583b417b 201039_07
hgs
parents:
diff changeset
   284
												 TDmDomainState aState,
957c583b417b 201039_07
hgs
parents:
diff changeset
   285
												 TInt aDeferrals,
957c583b417b 201039_07
hgs
parents:
diff changeset
   286
												 TBool aAcknowledge)
957c583b417b 201039_07
hgs
parents:
diff changeset
   287
	: CDmDeferralTest(aId, aState),
957c583b417b 201039_07
hgs
parents:
diff changeset
   288
	  iDeferrals(aDeferrals),
957c583b417b 201039_07
hgs
parents:
diff changeset
   289
	  iAcknowledge(aAcknowledge)
957c583b417b 201039_07
hgs
parents:
diff changeset
   290
	{}
957c583b417b 201039_07
hgs
parents:
diff changeset
   291
957c583b417b 201039_07
hgs
parents:
diff changeset
   292
957c583b417b 201039_07
hgs
parents:
diff changeset
   293
CDmDeferralTestKErrNone::~CDmDeferralTestKErrNone()
957c583b417b 201039_07
hgs
parents:
diff changeset
   294
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   295
	delete iKeepAlive;
957c583b417b 201039_07
hgs
parents:
diff changeset
   296
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   297
957c583b417b 201039_07
hgs
parents:
diff changeset
   298
957c583b417b 201039_07
hgs
parents:
diff changeset
   299
void CDmDeferralTestKErrNone::DoPerform()
957c583b417b 201039_07
hgs
parents:
diff changeset
   300
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   301
	test.Next(_L("CDmDeferralTestKErrNone"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   302
957c583b417b 201039_07
hgs
parents:
diff changeset
   303
	iMember = new CDmTestMember(iHierarchyId, KDmIdTestCAA, 0, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
   304
	test_NotNull(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   305
957c583b417b 201039_07
hgs
parents:
diff changeset
   306
	iKeepAlive = new CTestKeepAlive(iMember->iDomain);
957c583b417b 201039_07
hgs
parents:
diff changeset
   307
	test_NotNull(iKeepAlive);
957c583b417b 201039_07
hgs
parents:
diff changeset
   308
957c583b417b 201039_07
hgs
parents:
diff changeset
   309
	iManager.RequestSystemTransition(iState, ETraverseDefault, CActive::iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
   310
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   311
957c583b417b 201039_07
hgs
parents:
diff changeset
   312
957c583b417b 201039_07
hgs
parents:
diff changeset
   313
void CDmDeferralTestKErrNone::HandleEndOfDeferrals(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
   314
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   315
	test.Printf(_L("HandleEndOfDeferrals(): %d\n"), aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   316
957c583b417b 201039_07
hgs
parents:
diff changeset
   317
	// This is the test (TC 1.1.1.1.1, TC 1.1.1.1.2 , TC 1.1.1.1.3):
957c583b417b 201039_07
hgs
parents:
diff changeset
   318
957c583b417b 201039_07
hgs
parents:
diff changeset
   319
	test_Equal(KErrNone, aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   320
957c583b417b 201039_07
hgs
parents:
diff changeset
   321
	if (iAcknowledge)
957c583b417b 201039_07
hgs
parents:
diff changeset
   322
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   323
		RDebug::Printf(" Calling AcknowledgeLastState()");
957c583b417b 201039_07
hgs
parents:
diff changeset
   324
		iMember->iDomain.AcknowledgeLastState();
957c583b417b 201039_07
hgs
parents:
diff changeset
   325
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   326
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   327
957c583b417b 201039_07
hgs
parents:
diff changeset
   328
957c583b417b 201039_07
hgs
parents:
diff changeset
   329
TInt CDmDeferralTestKErrNone::TransitionNotification(MDmDomainMember&)
957c583b417b 201039_07
hgs
parents:
diff changeset
   330
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   331
	iKeepAlive->BeginDeferrals(this, iDeferrals);
957c583b417b 201039_07
hgs
parents:
diff changeset
   332
	// don't acknowledge yet
957c583b417b 201039_07
hgs
parents:
diff changeset
   333
	return KErrAbort;
957c583b417b 201039_07
hgs
parents:
diff changeset
   334
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   335
957c583b417b 201039_07
hgs
parents:
diff changeset
   336
957c583b417b 201039_07
hgs
parents:
diff changeset
   337
void CDmDeferralTestKErrNone::TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents:
diff changeset
   338
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   339
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   340
957c583b417b 201039_07
hgs
parents:
diff changeset
   341
957c583b417b 201039_07
hgs
parents:
diff changeset
   342
/**
957c583b417b 201039_07
hgs
parents:
diff changeset
   343
   Test mix of deferral and non-deferral clients (1.3)
957c583b417b 201039_07
hgs
parents:
diff changeset
   344
  
957c583b417b 201039_07
hgs
parents:
diff changeset
   345
   1: Three clients receive notification.
957c583b417b 201039_07
hgs
parents:
diff changeset
   346
   2: One makes three deferrals and then acknowledges after the next notification
957c583b417b 201039_07
hgs
parents:
diff changeset
   347
   3: The other two non-deferral clients acknowledge without making a deferral      
957c583b417b 201039_07
hgs
parents:
diff changeset
   348
*/
957c583b417b 201039_07
hgs
parents:
diff changeset
   349
class CDmDeferralMixed : public CDmDeferralTest, public MDeferringMember
957c583b417b 201039_07
hgs
parents:
diff changeset
   350
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   351
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   352
	CDmDeferralMixed(TDmHierarchyId aId, TDmDomainState aState, TInt aDeferrals, TBool aAcknowledge, TBool aDelayAck);
957c583b417b 201039_07
hgs
parents:
diff changeset
   353
	~CDmDeferralMixed();
957c583b417b 201039_07
hgs
parents:
diff changeset
   354
	// from CDmDeferralTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   355
	void DoPerform();
957c583b417b 201039_07
hgs
parents:
diff changeset
   356
	// from MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   357
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   358
	void TransitionRequestComplete();
957c583b417b 201039_07
hgs
parents:
diff changeset
   359
	// from MDeferringMember
957c583b417b 201039_07
hgs
parents:
diff changeset
   360
	void HandleEndOfDeferrals(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   361
957c583b417b 201039_07
hgs
parents:
diff changeset
   362
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   363
	CTestKeepAlive* iKeepAlive;	
957c583b417b 201039_07
hgs
parents:
diff changeset
   364
	CDmTestMember* iMixedDeferralTestMember[2];
957c583b417b 201039_07
hgs
parents:
diff changeset
   365
	const TInt iDeferrals;
957c583b417b 201039_07
hgs
parents:
diff changeset
   366
	const TBool iAcknowledge;
957c583b417b 201039_07
hgs
parents:
diff changeset
   367
	TBool iDoneDeferral;	
957c583b417b 201039_07
hgs
parents:
diff changeset
   368
	const TBool iDelayAck;
957c583b417b 201039_07
hgs
parents:
diff changeset
   369
	TBool iNonMemberAck[2];
957c583b417b 201039_07
hgs
parents:
diff changeset
   370
	MDmDomainMember* iFirstMemberToCompleteAddr;
957c583b417b 201039_07
hgs
parents:
diff changeset
   371
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   372
957c583b417b 201039_07
hgs
parents:
diff changeset
   373
CDmDeferralMixed::CDmDeferralMixed(TDmHierarchyId aId, 
957c583b417b 201039_07
hgs
parents:
diff changeset
   374
								   TDmDomainState aState,
957c583b417b 201039_07
hgs
parents:
diff changeset
   375
								   TInt aDeferrals,
957c583b417b 201039_07
hgs
parents:
diff changeset
   376
								   TBool aAcknowledge,
957c583b417b 201039_07
hgs
parents:
diff changeset
   377
								   TBool aDelayAck)	
957c583b417b 201039_07
hgs
parents:
diff changeset
   378
    :CDmDeferralTest(aId, aState),
957c583b417b 201039_07
hgs
parents:
diff changeset
   379
 	 iDeferrals(aDeferrals),
957c583b417b 201039_07
hgs
parents:
diff changeset
   380
	 iAcknowledge(aAcknowledge),
957c583b417b 201039_07
hgs
parents:
diff changeset
   381
	 iDelayAck(aDelayAck)
957c583b417b 201039_07
hgs
parents:
diff changeset
   382
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   383
	iDoneDeferral=EFalse; 	
957c583b417b 201039_07
hgs
parents:
diff changeset
   384
	iFirstMemberToCompleteAddr = NULL;
957c583b417b 201039_07
hgs
parents:
diff changeset
   385
	iNonMemberAck[0]=EFalse;
957c583b417b 201039_07
hgs
parents:
diff changeset
   386
	iNonMemberAck[1]=EFalse;
957c583b417b 201039_07
hgs
parents:
diff changeset
   387
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   388
957c583b417b 201039_07
hgs
parents:
diff changeset
   389
CDmDeferralMixed::~CDmDeferralMixed()
957c583b417b 201039_07
hgs
parents:
diff changeset
   390
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   391
	delete iKeepAlive;	
957c583b417b 201039_07
hgs
parents:
diff changeset
   392
	delete iMixedDeferralTestMember[0];
957c583b417b 201039_07
hgs
parents:
diff changeset
   393
	delete iMixedDeferralTestMember[1];	   
957c583b417b 201039_07
hgs
parents:
diff changeset
   394
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   395
957c583b417b 201039_07
hgs
parents:
diff changeset
   396
void CDmDeferralMixed::DoPerform()
957c583b417b 201039_07
hgs
parents:
diff changeset
   397
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   398
	test.Next(_L("CDmDeferralMixed"));	
957c583b417b 201039_07
hgs
parents:
diff changeset
   399
	
957c583b417b 201039_07
hgs
parents:
diff changeset
   400
	// Attach three test members to the same domain (KDmIdTestCAA). One of the test
957c583b417b 201039_07
hgs
parents:
diff changeset
   401
	// member is a deferring member while the other two are non deferring members.
957c583b417b 201039_07
hgs
parents:
diff changeset
   402
	iMember = new CDmTestMember(iHierarchyId, KDmIdTestCAA, 0, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
   403
	test_NotNull(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   404
957c583b417b 201039_07
hgs
parents:
diff changeset
   405
	iMixedDeferralTestMember[0] = new CDmTestMember(iHierarchyId, KDmIdTestCAA, 0, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
   406
	test_NotNull(iMixedDeferralTestMember[0]);
957c583b417b 201039_07
hgs
parents:
diff changeset
   407
957c583b417b 201039_07
hgs
parents:
diff changeset
   408
	iMixedDeferralTestMember[1] = new CDmTestMember(iHierarchyId, KDmIdTestCAA, 0, this); 
957c583b417b 201039_07
hgs
parents:
diff changeset
   409
	test_NotNull(iMixedDeferralTestMember[1]);
957c583b417b 201039_07
hgs
parents:
diff changeset
   410
957c583b417b 201039_07
hgs
parents:
diff changeset
   411
	iManager.RequestSystemTransition(iState, ETraverseDefault, CActive::iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
   412
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   413
957c583b417b 201039_07
hgs
parents:
diff changeset
   414
void CDmDeferralMixed::HandleEndOfDeferrals(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
   415
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   416
	test.Printf(_L("HandleEndOfDeferrals(): %d\n"), aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   417
	test_Equal(KErrNone, aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   418
	if (iAcknowledge)
957c583b417b 201039_07
hgs
parents:
diff changeset
   419
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   420
		RDebug::Printf(" Calling AcknowledgeLastState()");
957c583b417b 201039_07
hgs
parents:
diff changeset
   421
		//iFirstMemberToCompleteAddr is the first member to complete and is deferred 
957c583b417b 201039_07
hgs
parents:
diff changeset
   422
		static_cast<CDmTestMember*>(iFirstMemberToCompleteAddr)->iDomain.AcknowledgeLastState();		
957c583b417b 201039_07
hgs
parents:
diff changeset
   423
		iDoneDeferral = ETrue;
957c583b417b 201039_07
hgs
parents:
diff changeset
   424
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   425
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   426
957c583b417b 201039_07
hgs
parents:
diff changeset
   427
TInt CDmDeferralMixed::TransitionNotification(MDmDomainMember& aDomainMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
   428
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   429
	RDebug::Printf("CDmDeferralMixed::TransitionNotification()");
957c583b417b 201039_07
hgs
parents:
diff changeset
   430
957c583b417b 201039_07
hgs
parents:
diff changeset
   431
	// if first member to complete, take note of this member and defer.
957c583b417b 201039_07
hgs
parents:
diff changeset
   432
	if (iFirstMemberToCompleteAddr ==  NULL)
957c583b417b 201039_07
hgs
parents:
diff changeset
   433
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   434
		iFirstMemberToCompleteAddr =  &aDomainMember; // Get address of first member to complete		
957c583b417b 201039_07
hgs
parents:
diff changeset
   435
		iKeepAlive = new CTestKeepAlive(static_cast<CDmTestMember*>(iFirstMemberToCompleteAddr)->iDomain);
957c583b417b 201039_07
hgs
parents:
diff changeset
   436
		test_NotNull(iKeepAlive);		
957c583b417b 201039_07
hgs
parents:
diff changeset
   437
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   438
957c583b417b 201039_07
hgs
parents:
diff changeset
   439
	if  ( (!iDoneDeferral) && (&aDomainMember == iFirstMemberToCompleteAddr) ) // Defer 
957c583b417b 201039_07
hgs
parents:
diff changeset
   440
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   441
		//TC 1.3.1 Define a client to defer 3 times and then acknowledge and include 2 non deferring clients 	
957c583b417b 201039_07
hgs
parents:
diff changeset
   442
		test.Printf(_L("CDmDeferralMixed Attempting %d deferrals\n"), iDeferrals);
957c583b417b 201039_07
hgs
parents:
diff changeset
   443
		iKeepAlive->BeginDeferrals(this, iDeferrals);		
957c583b417b 201039_07
hgs
parents:
diff changeset
   444
		return KErrAbort;// don't acknowledge yet
957c583b417b 201039_07
hgs
parents:
diff changeset
   445
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   446
	else if (iNonMemberAck[0]== EFalse) 
957c583b417b 201039_07
hgs
parents:
diff changeset
   447
		{//One of the two non deferring clients which acknowledges without any delay
957c583b417b 201039_07
hgs
parents:
diff changeset
   448
		iNonMemberAck[0]= ETrue;
957c583b417b 201039_07
hgs
parents:
diff changeset
   449
		test.Printf(_L("CDmDeferralMixed acknowledging iMixedDeferralTestMember - 1 \n"));	
957c583b417b 201039_07
hgs
parents:
diff changeset
   450
		return KErrNone;  // Non deferral memeber acknowledges on time
957c583b417b 201039_07
hgs
parents:
diff changeset
   451
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   452
	else if (iNonMemberAck[1]== EFalse ) 
957c583b417b 201039_07
hgs
parents:
diff changeset
   453
		{//One of the two non deferring clients which acknowledges with and without a delay based on the state of iDelayAck
957c583b417b 201039_07
hgs
parents:
diff changeset
   454
		iNonMemberAck[1]= ETrue;
957c583b417b 201039_07
hgs
parents:
diff changeset
   455
		if(!iDelayAck)
957c583b417b 201039_07
hgs
parents:
diff changeset
   456
			{
957c583b417b 201039_07
hgs
parents:
diff changeset
   457
			test.Printf(_L("CDmDeferralMixed acknowledging iMixedDeferralTestMember - 2 \n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   458
			return KErrNone; // Non deferral member acknowledges on time
957c583b417b 201039_07
hgs
parents:
diff changeset
   459
			}
957c583b417b 201039_07
hgs
parents:
diff changeset
   460
		else
957c583b417b 201039_07
hgs
parents:
diff changeset
   461
			{
957c583b417b 201039_07
hgs
parents:
diff changeset
   462
			test.Printf(_L("CDmDeferralMixed delaying acknowledgement for iMixedDeferralTestMember - 2  \n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   463
			//TC 1.3.2 - 1 fails to acknowledge in time
957c583b417b 201039_07
hgs
parents:
diff changeset
   464
			return KErrAbort; // Delay acknowlegdement
957c583b417b 201039_07
hgs
parents:
diff changeset
   465
			}			
957c583b417b 201039_07
hgs
parents:
diff changeset
   466
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   467
	test(EFalse);
957c583b417b 201039_07
hgs
parents:
diff changeset
   468
	//default
957c583b417b 201039_07
hgs
parents:
diff changeset
   469
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
   470
	}					
957c583b417b 201039_07
hgs
parents:
diff changeset
   471
957c583b417b 201039_07
hgs
parents:
diff changeset
   472
void CDmDeferralMixed::TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents:
diff changeset
   473
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   474
	RDebug::Printf("CDmDeferralMixed::TransitionRequestComplete()");
957c583b417b 201039_07
hgs
parents:
diff changeset
   475
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   476
957c583b417b 201039_07
hgs
parents:
diff changeset
   477
/////////////////////////////////////////////// CDmKeepAlive Test cases ///////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   478
957c583b417b 201039_07
hgs
parents:
diff changeset
   479
//-------------------------------------------------
957c583b417b 201039_07
hgs
parents:
diff changeset
   480
// Domain member deferral and acknowledgments tests
957c583b417b 201039_07
hgs
parents:
diff changeset
   481
//-------------------------------------------------
957c583b417b 201039_07
hgs
parents:
diff changeset
   482
957c583b417b 201039_07
hgs
parents:
diff changeset
   483
class MDomainMemberTests;
957c583b417b 201039_07
hgs
parents:
diff changeset
   484
class CDomainMemberKeepAlive;
957c583b417b 201039_07
hgs
parents:
diff changeset
   485
const TUint KMembersMax = 32;
957c583b417b 201039_07
hgs
parents:
diff changeset
   486
957c583b417b 201039_07
hgs
parents:
diff changeset
   487
// Policy related service functions user by the CDmDomainKeepAlive tests
957c583b417b 201039_07
hgs
parents:
diff changeset
   488
SDmStateSpecV1 Get0DeferralState()
957c583b417b 201039_07
hgs
parents:
diff changeset
   489
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   490
	TUint i = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
   491
	for (i=0; i<StateSpecificationSize; i++)
957c583b417b 201039_07
hgs
parents:
diff changeset
   492
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   493
		if(StateSpecification[i].iDeferralLimit != 0)
957c583b417b 201039_07
hgs
parents:
diff changeset
   494
			continue;
957c583b417b 201039_07
hgs
parents:
diff changeset
   495
		return StateSpecification[i];
957c583b417b 201039_07
hgs
parents:
diff changeset
   496
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   497
957c583b417b 201039_07
hgs
parents:
diff changeset
   498
	// We could not find any state that has a 0 deferral specified in the policy
957c583b417b 201039_07
hgs
parents:
diff changeset
   499
	test(0);
957c583b417b 201039_07
hgs
parents:
diff changeset
   500
	return StateSpecification[i]; // get rid of compiler warnings
957c583b417b 201039_07
hgs
parents:
diff changeset
   501
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   502
957c583b417b 201039_07
hgs
parents:
diff changeset
   503
// Get the first minimal deferral state from the policy greater than 0
957c583b417b 201039_07
hgs
parents:
diff changeset
   504
SDmStateSpecV1 GetMinDeferralState() 
957c583b417b 201039_07
hgs
parents:
diff changeset
   505
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   506
	SDmStateSpecV1 maxState, minState;
957c583b417b 201039_07
hgs
parents:
diff changeset
   507
	maxState = StateSpecification[0];
957c583b417b 201039_07
hgs
parents:
diff changeset
   508
	minState = StateSpecification[0];
957c583b417b 201039_07
hgs
parents:
diff changeset
   509
957c583b417b 201039_07
hgs
parents:
diff changeset
   510
	for (TUint i=0; i<StateSpecificationSize; i++)
957c583b417b 201039_07
hgs
parents:
diff changeset
   511
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   512
		if(StateSpecification[i].iDeferralLimit != 0)
957c583b417b 201039_07
hgs
parents:
diff changeset
   513
			{
957c583b417b 201039_07
hgs
parents:
diff changeset
   514
			if(StateSpecification[i].iDeferralLimit > maxState.iDeferralLimit)
957c583b417b 201039_07
hgs
parents:
diff changeset
   515
				maxState = StateSpecification[i];
957c583b417b 201039_07
hgs
parents:
diff changeset
   516
			if(StateSpecification[i].iDeferralLimit < minState.iDeferralLimit)
957c583b417b 201039_07
hgs
parents:
diff changeset
   517
				{
957c583b417b 201039_07
hgs
parents:
diff changeset
   518
				minState = StateSpecification[i];
957c583b417b 201039_07
hgs
parents:
diff changeset
   519
				}
957c583b417b 201039_07
hgs
parents:
diff changeset
   520
			else if(minState.iDeferralLimit == 0)
957c583b417b 201039_07
hgs
parents:
diff changeset
   521
				minState = StateSpecification[i];
957c583b417b 201039_07
hgs
parents:
diff changeset
   522
			}
957c583b417b 201039_07
hgs
parents:
diff changeset
   523
		continue;
957c583b417b 201039_07
hgs
parents:
diff changeset
   524
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   525
957c583b417b 201039_07
hgs
parents:
diff changeset
   526
	test.Printf(_L("minState's TimeoutMs = %d , count = %d\n"), minState.iTimeoutMs, minState.iDeferralLimit );
957c583b417b 201039_07
hgs
parents:
diff changeset
   527
957c583b417b 201039_07
hgs
parents:
diff changeset
   528
	// Test whether there exists atleast one minimal deferral state that is greater than 0 deferrals and less than max deferrals
957c583b417b 201039_07
hgs
parents:
diff changeset
   529
	test(minState.iDeferralLimit > 0 && minState.iDeferralLimit < maxState.iDeferralLimit);
957c583b417b 201039_07
hgs
parents:
diff changeset
   530
	return minState;
957c583b417b 201039_07
hgs
parents:
diff changeset
   531
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   532
957c583b417b 201039_07
hgs
parents:
diff changeset
   533
// Get the max deferral state from the policy. This is a simple function that always gets the first max deferral from the list
957c583b417b 201039_07
hgs
parents:
diff changeset
   534
// The parameter aContinueOnError is used to get a state eith maximum deferral that has the policy error as
957c583b417b 201039_07
hgs
parents:
diff changeset
   535
// ETransitionFailureContinue or ETransitionFailureStop
957c583b417b 201039_07
hgs
parents:
diff changeset
   536
SDmStateSpecV1 GetMaxDeferralState(TBool aContinueOnError = EFalse) 
957c583b417b 201039_07
hgs
parents:
diff changeset
   537
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   538
	SDmStateSpecV1 aState;
957c583b417b 201039_07
hgs
parents:
diff changeset
   539
	aState = StateSpecification[0];
957c583b417b 201039_07
hgs
parents:
diff changeset
   540
957c583b417b 201039_07
hgs
parents:
diff changeset
   541
	TUint i;
957c583b417b 201039_07
hgs
parents:
diff changeset
   542
	for (i=0; i<StateSpecificationSize; i++)
957c583b417b 201039_07
hgs
parents:
diff changeset
   543
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
   544
		const SDmStateSpecV1& spec = StateSpecification[i];
957c583b417b 201039_07
hgs
parents:
diff changeset
   545
957c583b417b 201039_07
hgs
parents:
diff changeset
   546
		if((spec.iDeferralLimit > aState.iDeferralLimit) &&
957c583b417b 201039_07
hgs
parents:
diff changeset
   547
			(spec.iFailurePolicy == aContinueOnError ? ETransitionFailureContinue : ETransitionFailureStop))
957c583b417b 201039_07
hgs
parents:
diff changeset
   548
			{
957c583b417b 201039_07
hgs
parents:
diff changeset
   549
			aState = StateSpecification[i];
957c583b417b 201039_07
hgs
parents:
diff changeset
   550
			}
957c583b417b 201039_07
hgs
parents:
diff changeset
   551
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
   552
957c583b417b 201039_07
hgs
parents:
diff changeset
   553
	// Check that a suitable state was found
957c583b417b 201039_07
hgs
parents:
diff changeset
   554
	test(aState.iFailurePolicy == aContinueOnError ? ETransitionFailureContinue : ETransitionFailureStop);
957c583b417b 201039_07
hgs
parents:
diff changeset
   555
957c583b417b 201039_07
hgs
parents:
diff changeset
   556
	test.Printf(_L("Max deferrral state's TimeoutMs = %d , count = %d, failure policy %d\n"), aState.iTimeoutMs, aState.iDeferralLimit, aState.iFailurePolicy);
957c583b417b 201039_07
hgs
parents:
diff changeset
   557
	return aState;
957c583b417b 201039_07
hgs
parents:
diff changeset
   558
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   559
957c583b417b 201039_07
hgs
parents:
diff changeset
   560
// CDmDomainKeepAliveTest test
957c583b417b 201039_07
hgs
parents:
diff changeset
   561
//-------------------------------------------------
957c583b417b 201039_07
hgs
parents:
diff changeset
   562
// Domain member deferral and acknowledgments tests
957c583b417b 201039_07
hgs
parents:
diff changeset
   563
//-------------------------------------------------
957c583b417b 201039_07
hgs
parents:
diff changeset
   564
class CDmDomainKeepAliveTest : public CActive, public MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   565
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   566
public: 
957c583b417b 201039_07
hgs
parents:
diff changeset
   567
	// from CActive
957c583b417b 201039_07
hgs
parents:
diff changeset
   568
	void RunL();
957c583b417b 201039_07
hgs
parents:
diff changeset
   569
 
957c583b417b 201039_07
hgs
parents:
diff changeset
   570
	// from MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   571
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
   572
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
   573
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   574
	void TransitionRequestComplete() {};
957c583b417b 201039_07
hgs
parents:
diff changeset
   575
957c583b417b 201039_07
hgs
parents:
diff changeset
   576
	// for the individual tests to handle
957c583b417b 201039_07
hgs
parents:
diff changeset
   577
	void HandleTransitionL(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   578
	TInt HandleDeferralError(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   579
957c583b417b 201039_07
hgs
parents:
diff changeset
   580
	CDmDomainKeepAliveTest() : CActive(CActive::EPriorityStandard) {}
957c583b417b 201039_07
hgs
parents:
diff changeset
   581
	void SetExpectedValues(TInt aTestNotificationsExpected, TInt aTransitionsExpected);
957c583b417b 201039_07
hgs
parents:
diff changeset
   582
	void ValidateTestResults();
957c583b417b 201039_07
hgs
parents:
diff changeset
   583
	void RequestSystemTransition(TDmDomainState aTestState, TDmTraverseDirection aDirection);
957c583b417b 201039_07
hgs
parents:
diff changeset
   584
	void DoAsynMemberAck();
957c583b417b 201039_07
hgs
parents:
diff changeset
   585
	void CancelTransition();
957c583b417b 201039_07
hgs
parents:
diff changeset
   586
protected:
957c583b417b 201039_07
hgs
parents:
diff changeset
   587
	// from CActive
957c583b417b 201039_07
hgs
parents:
diff changeset
   588
	virtual void DoCancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
   589
957c583b417b 201039_07
hgs
parents:
diff changeset
   590
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   591
	void Init(MDomainMemberTests* aTest);
957c583b417b 201039_07
hgs
parents:
diff changeset
   592
	void UnInit();
957c583b417b 201039_07
hgs
parents:
diff changeset
   593
957c583b417b 201039_07
hgs
parents:
diff changeset
   594
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   595
	CDomainMemberKeepAlive*	iTestMembers[KMembersMax]; 
957c583b417b 201039_07
hgs
parents:
diff changeset
   596
	RDmDomainManager		iTestDomainManager;
957c583b417b 201039_07
hgs
parents:
diff changeset
   597
	
957c583b417b 201039_07
hgs
parents:
diff changeset
   598
	MDomainMemberTests*			iCurrentTest;
957c583b417b 201039_07
hgs
parents:
diff changeset
   599
957c583b417b 201039_07
hgs
parents:
diff changeset
   600
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   601
	static TUint		gTestMemberCount;
957c583b417b 201039_07
hgs
parents:
diff changeset
   602
	static TUint		gLeafMemberCount;
957c583b417b 201039_07
hgs
parents:
diff changeset
   603
	TInt				iTestNotifications;
957c583b417b 201039_07
hgs
parents:
diff changeset
   604
	TInt				iTestNotificationsExpected;
957c583b417b 201039_07
hgs
parents:
diff changeset
   605
957c583b417b 201039_07
hgs
parents:
diff changeset
   606
	TInt				iTransitionsCompleted;
957c583b417b 201039_07
hgs
parents:
diff changeset
   607
	TInt				iTransitionsExpected;
957c583b417b 201039_07
hgs
parents:
diff changeset
   608
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   609
957c583b417b 201039_07
hgs
parents:
diff changeset
   610
// CDomainMemberKeepAlive
957c583b417b 201039_07
hgs
parents:
diff changeset
   611
class CDomainMemberKeepAlive : public CDmDomainKeepAlive, public MDmDomainMember
957c583b417b 201039_07
hgs
parents:
diff changeset
   612
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   613
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   614
	static CDomainMemberKeepAlive* NewL(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDomainMemberTests*);
957c583b417b 201039_07
hgs
parents:
diff changeset
   615
	~CDomainMemberKeepAlive();
957c583b417b 201039_07
hgs
parents:
diff changeset
   616
957c583b417b 201039_07
hgs
parents:
diff changeset
   617
	// from CDmDomainKeepAlive
957c583b417b 201039_07
hgs
parents:
diff changeset
   618
	TInt HandleDeferralError(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   619
	void HandleTransitionL();
957c583b417b 201039_07
hgs
parents:
diff changeset
   620
957c583b417b 201039_07
hgs
parents:
diff changeset
   621
	// from MDmDomainMember
957c583b417b 201039_07
hgs
parents:
diff changeset
   622
	inline TDmHierarchyId HierarchyId() {return iHierarchy;};
957c583b417b 201039_07
hgs
parents:
diff changeset
   623
	inline TDmDomainId	DomainId() {return iId;};
957c583b417b 201039_07
hgs
parents:
diff changeset
   624
	inline TDmDomainState State() {return iState;};
957c583b417b 201039_07
hgs
parents:
diff changeset
   625
	inline TInt Status() {return iStatus.Int();};
957c583b417b 201039_07
hgs
parents:
diff changeset
   626
	inline TUint32 Ordinal() {return iOrdinal;};
957c583b417b 201039_07
hgs
parents:
diff changeset
   627
	inline TInt Notifications() {return iNotifications;};
957c583b417b 201039_07
hgs
parents:
diff changeset
   628
	static TInt TimerCallback(TAny* obj);
957c583b417b 201039_07
hgs
parents:
diff changeset
   629
	void DoAsynHandleTransition(const TTimeIntervalMicroSeconds32 aInterval);
957c583b417b 201039_07
hgs
parents:
diff changeset
   630
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   631
	CDomainMemberKeepAlive(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDomainMemberTests*);
957c583b417b 201039_07
hgs
parents:
diff changeset
   632
957c583b417b 201039_07
hgs
parents:
diff changeset
   633
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   634
	// used only for test cases TC 1.1.2.2.2, TC 1.1.2.3.1 and TC 1.1.2.3.2 where DoAsynMemberAck is used
957c583b417b 201039_07
hgs
parents:
diff changeset
   635
	TBool				iShouldAck; 
957c583b417b 201039_07
hgs
parents:
diff changeset
   636
	
957c583b417b 201039_07
hgs
parents:
diff changeset
   637
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   638
	TDmHierarchyId		iHierarchy;
957c583b417b 201039_07
hgs
parents:
diff changeset
   639
	TDmDomainId			iId;
957c583b417b 201039_07
hgs
parents:
diff changeset
   640
	TDmDomainState		iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
   641
	TUint32				iOrdinal;
957c583b417b 201039_07
hgs
parents:
diff changeset
   642
	MDomainMemberTests*	iTest;
957c583b417b 201039_07
hgs
parents:
diff changeset
   643
	TUint				iNotifications;
957c583b417b 201039_07
hgs
parents:
diff changeset
   644
957c583b417b 201039_07
hgs
parents:
diff changeset
   645
	CPeriodic*			iTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
   646
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   647
957c583b417b 201039_07
hgs
parents:
diff changeset
   648
class MDomainMemberTests
957c583b417b 201039_07
hgs
parents:
diff changeset
   649
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   650
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   651
	virtual void Perform() = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
   652
	virtual void Release() = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
   653
	virtual void HandleTransitionL(CDomainMemberKeepAlive* aDmMember) = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
   654
	virtual TInt HandleDeferralError(TInt aError) = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
   655
	virtual void DoAsynHandleTransition(CDomainMemberKeepAlive*) {};
957c583b417b 201039_07
hgs
parents:
diff changeset
   656
	virtual void DoAsynMemberAck(CDomainMemberKeepAlive*) {};
957c583b417b 201039_07
hgs
parents:
diff changeset
   657
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   658
	TDmDomainState		iTestState;
957c583b417b 201039_07
hgs
parents:
diff changeset
   659
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   660
957c583b417b 201039_07
hgs
parents:
diff changeset
   661
CDomainMemberKeepAlive* CDomainMemberKeepAlive::NewL(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDomainMemberTests* aTest)
957c583b417b 201039_07
hgs
parents:
diff changeset
   662
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   663
	CDomainMemberKeepAlive* self=new (ELeave) CDomainMemberKeepAlive(aHierarchy, aId, aOrdinal, aTest);
957c583b417b 201039_07
hgs
parents:
diff changeset
   664
	CleanupStack::PushL(self);
957c583b417b 201039_07
hgs
parents:
diff changeset
   665
	self->ConstructL();
957c583b417b 201039_07
hgs
parents:
diff changeset
   666
957c583b417b 201039_07
hgs
parents:
diff changeset
   667
	self->RequestTransitionNotification();
957c583b417b 201039_07
hgs
parents:
diff changeset
   668
957c583b417b 201039_07
hgs
parents:
diff changeset
   669
	CleanupStack::Pop();
957c583b417b 201039_07
hgs
parents:
diff changeset
   670
	return self;
957c583b417b 201039_07
hgs
parents:
diff changeset
   671
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   672
957c583b417b 201039_07
hgs
parents:
diff changeset
   673
CDomainMemberKeepAlive::~CDomainMemberKeepAlive()
957c583b417b 201039_07
hgs
parents:
diff changeset
   674
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   675
	delete iTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
   676
	Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
   677
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   678
957c583b417b 201039_07
hgs
parents:
diff changeset
   679
CDomainMemberKeepAlive::CDomainMemberKeepAlive(TDmHierarchyId aHierarchy, TDmDomainId aId, TUint32 aOrdinal, MDomainMemberTests* aTest):
957c583b417b 201039_07
hgs
parents:
diff changeset
   680
	CDmDomainKeepAlive(aHierarchy, aId), iShouldAck(EFalse),
957c583b417b 201039_07
hgs
parents:
diff changeset
   681
	iHierarchy(aHierarchy), iId(aId), iOrdinal(aOrdinal), iTest(aTest)
957c583b417b 201039_07
hgs
parents:
diff changeset
   682
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   683
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   684
957c583b417b 201039_07
hgs
parents:
diff changeset
   685
TInt CDomainMemberKeepAlive::HandleDeferralError(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
   686
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   687
	TInt r = KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
   688
957c583b417b 201039_07
hgs
parents:
diff changeset
   689
	TBuf16<4> buf;
957c583b417b 201039_07
hgs
parents:
diff changeset
   690
	GetDomainDesc(Ordinal(), buf);
957c583b417b 201039_07
hgs
parents:
diff changeset
   691
	test.Printf(_L("HandleDeferralError domain = %S, error = %d\n"), &buf, aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   692
957c583b417b 201039_07
hgs
parents:
diff changeset
   693
	r = iTest->HandleDeferralError(aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   694
	return r;
957c583b417b 201039_07
hgs
parents:
diff changeset
   695
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   696
957c583b417b 201039_07
hgs
parents:
diff changeset
   697
void CDomainMemberKeepAlive::HandleTransitionL()
957c583b417b 201039_07
hgs
parents:
diff changeset
   698
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   699
	iShouldAck = ETrue;
957c583b417b 201039_07
hgs
parents:
diff changeset
   700
	iNotifications++;
957c583b417b 201039_07
hgs
parents:
diff changeset
   701
	iTest->HandleTransitionL(this);
957c583b417b 201039_07
hgs
parents:
diff changeset
   702
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   703
957c583b417b 201039_07
hgs
parents:
diff changeset
   704
TInt CDomainMemberKeepAlive::TimerCallback(TAny* obj)
957c583b417b 201039_07
hgs
parents:
diff changeset
   705
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   706
    CDomainMemberKeepAlive* member = static_cast<CDomainMemberKeepAlive*>(obj);
957c583b417b 201039_07
hgs
parents:
diff changeset
   707
957c583b417b 201039_07
hgs
parents:
diff changeset
   708
	TBuf16<4> buf;
957c583b417b 201039_07
hgs
parents:
diff changeset
   709
	GetDomainDesc(member->Ordinal(), buf);
957c583b417b 201039_07
hgs
parents:
diff changeset
   710
957c583b417b 201039_07
hgs
parents:
diff changeset
   711
	test.Printf(_L("Member asynchronous transition handler, domain = %S\n"), &buf);
957c583b417b 201039_07
hgs
parents:
diff changeset
   712
957c583b417b 201039_07
hgs
parents:
diff changeset
   713
	member->iTest->DoAsynHandleTransition(member);
957c583b417b 201039_07
hgs
parents:
diff changeset
   714
	member->iTimer->Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
   715
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
   716
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   717
957c583b417b 201039_07
hgs
parents:
diff changeset
   718
void CDomainMemberKeepAlive::DoAsynHandleTransition(const TTimeIntervalMicroSeconds32 aInterval)
957c583b417b 201039_07
hgs
parents:
diff changeset
   719
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   720
	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
957c583b417b 201039_07
hgs
parents:
diff changeset
   721
957c583b417b 201039_07
hgs
parents:
diff changeset
   722
	TCallBack callback(TimerCallback, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
   723
	iTimer->Start(aInterval, aInterval, callback);
957c583b417b 201039_07
hgs
parents:
diff changeset
   724
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   725
957c583b417b 201039_07
hgs
parents:
diff changeset
   726
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   727
//                      TC 1.1.2.1.1 (with deferral count 0)                      //
957c583b417b 201039_07
hgs
parents:
diff changeset
   728
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   729
class TestTransitionWithDeferral0 : public MDomainMemberTests // TC 1.1.2.1.1 (with deferral count 0)
957c583b417b 201039_07
hgs
parents:
diff changeset
   730
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   731
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   732
	TestTransitionWithDeferral0(CDmDomainKeepAliveTest& aTester) : iTester(aTester) {}
957c583b417b 201039_07
hgs
parents:
diff changeset
   733
	// from MDmKeepAliveTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   734
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
   735
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
   736
	void HandleTransitionL(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   737
	TInt HandleDeferralError(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   738
957c583b417b 201039_07
hgs
parents:
diff changeset
   739
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   740
	CDmDomainKeepAliveTest& iTester;
957c583b417b 201039_07
hgs
parents:
diff changeset
   741
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   742
957c583b417b 201039_07
hgs
parents:
diff changeset
   743
void TestTransitionWithDeferral0::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
   744
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   745
	test.Printf(_L("****************TestTransitionWithDeferral0****************\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   746
	test.Next(_L("Test state transition that has 0 deferral"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   747
	test.Printf(_L("Acknowleding immediately......\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   748
957c583b417b 201039_07
hgs
parents:
diff changeset
   749
	iTester.SetExpectedValues(iTester.gTestMemberCount, 1);
957c583b417b 201039_07
hgs
parents:
diff changeset
   750
957c583b417b 201039_07
hgs
parents:
diff changeset
   751
	SDmStateSpecV1 aStateSpec = Get0DeferralState();
957c583b417b 201039_07
hgs
parents:
diff changeset
   752
957c583b417b 201039_07
hgs
parents:
diff changeset
   753
	iTestState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
   754
957c583b417b 201039_07
hgs
parents:
diff changeset
   755
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
   756
	iTester.RequestSystemTransition(iTestState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
   757
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   758
957c583b417b 201039_07
hgs
parents:
diff changeset
   759
	// wait for test transitions to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
   760
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
   761
	test.Printf(_L("....transition completed\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   762
957c583b417b 201039_07
hgs
parents:
diff changeset
   763
	iTester.ValidateTestResults();
957c583b417b 201039_07
hgs
parents:
diff changeset
   764
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   765
957c583b417b 201039_07
hgs
parents:
diff changeset
   766
void TestTransitionWithDeferral0::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
   767
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   768
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
   769
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   770
957c583b417b 201039_07
hgs
parents:
diff changeset
   771
void TestTransitionWithDeferral0::HandleTransitionL(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
   772
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   773
	TInt ackError = iTester.TransitionNotification(*aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   774
	aDmMember->GetState();
957c583b417b 201039_07
hgs
parents:
diff changeset
   775
957c583b417b 201039_07
hgs
parents:
diff changeset
   776
	aDmMember->AcknowledgeLastState(ackError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   777
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   778
957c583b417b 201039_07
hgs
parents:
diff changeset
   779
TInt TestTransitionWithDeferral0::HandleDeferralError(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
   780
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   781
	// Since this test case expects 0 deferral, the KErrNotSupported will happen which is expected
957c583b417b 201039_07
hgs
parents:
diff changeset
   782
	test(aError == KErrNotSupported);
957c583b417b 201039_07
hgs
parents:
diff changeset
   783
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
   784
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   785
957c583b417b 201039_07
hgs
parents:
diff changeset
   786
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   787
//         TC 1.1.2.1.1 (with max deferral count - ack after n deferrals          //
957c583b417b 201039_07
hgs
parents:
diff changeset
   788
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   789
class TestAckWithinDeferral : public MDomainMemberTests
957c583b417b 201039_07
hgs
parents:
diff changeset
   790
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   791
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   792
	TestAckWithinDeferral(CDmDomainKeepAliveTest& aTester) : iTester(aTester) {}
957c583b417b 201039_07
hgs
parents:
diff changeset
   793
	// from MDmKeepAliveTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   794
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
   795
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
   796
	void HandleTransitionL(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   797
	TInt HandleDeferralError(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   798
	void DoAsynHandleTransition(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   799
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   800
	CDmDomainKeepAliveTest& iTester;
957c583b417b 201039_07
hgs
parents:
diff changeset
   801
	TUint iTransitionTime;
957c583b417b 201039_07
hgs
parents:
diff changeset
   802
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   803
957c583b417b 201039_07
hgs
parents:
diff changeset
   804
void TestAckWithinDeferral::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
   805
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   806
	test.Printf(_L("****************TestAckWithinDeferral****************\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   807
	test.Next(_L("Test state transition that has deferral > 0"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   808
	test.Printf(_L("Acknowleding immediately......\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   809
957c583b417b 201039_07
hgs
parents:
diff changeset
   810
	iTester.SetExpectedValues(iTester.gTestMemberCount, 1);
957c583b417b 201039_07
hgs
parents:
diff changeset
   811
957c583b417b 201039_07
hgs
parents:
diff changeset
   812
	SDmStateSpecV1 aStateSpec = GetMaxDeferralState();
957c583b417b 201039_07
hgs
parents:
diff changeset
   813
957c583b417b 201039_07
hgs
parents:
diff changeset
   814
	iTestState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
   815
	iTransitionTime = aStateSpec.iTimeoutMs * aStateSpec.iDeferralLimit / 2;
957c583b417b 201039_07
hgs
parents:
diff changeset
   816
957c583b417b 201039_07
hgs
parents:
diff changeset
   817
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
   818
	iTester.RequestSystemTransition(iTestState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
   819
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   820
957c583b417b 201039_07
hgs
parents:
diff changeset
   821
	// wait for test transitions to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
   822
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
   823
	test.Printf(_L(".......transition completed\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   824
957c583b417b 201039_07
hgs
parents:
diff changeset
   825
	iTester.ValidateTestResults();
957c583b417b 201039_07
hgs
parents:
diff changeset
   826
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   827
957c583b417b 201039_07
hgs
parents:
diff changeset
   828
void TestAckWithinDeferral::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
   829
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   830
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
   831
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   832
957c583b417b 201039_07
hgs
parents:
diff changeset
   833
void TestAckWithinDeferral::HandleTransitionL(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
   834
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   835
	iTester.TransitionNotification(*aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   836
957c583b417b 201039_07
hgs
parents:
diff changeset
   837
	aDmMember->GetState();
957c583b417b 201039_07
hgs
parents:
diff changeset
   838
957c583b417b 201039_07
hgs
parents:
diff changeset
   839
	const TTimeIntervalMicroSeconds32 KInterval = iTransitionTime * 1000; // policy defines in millisec - convert it to microsec
957c583b417b 201039_07
hgs
parents:
diff changeset
   840
957c583b417b 201039_07
hgs
parents:
diff changeset
   841
	aDmMember->DoAsynHandleTransition(KInterval);
957c583b417b 201039_07
hgs
parents:
diff changeset
   842
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   843
957c583b417b 201039_07
hgs
parents:
diff changeset
   844
TInt TestAckWithinDeferral::HandleDeferralError(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
   845
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   846
	// Since this test case expects acknowledging within the deferral, the KErrCompletion will happen which is expected
957c583b417b 201039_07
hgs
parents:
diff changeset
   847
	test_Equal(KErrCompletion, aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   848
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
   849
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   850
957c583b417b 201039_07
hgs
parents:
diff changeset
   851
/* By now atleast 3 deferrals should have got finished */
957c583b417b 201039_07
hgs
parents:
diff changeset
   852
void TestAckWithinDeferral::DoAsynHandleTransition(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
   853
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   854
	aDmMember->AcknowledgeLastState(KErrNone);
957c583b417b 201039_07
hgs
parents:
diff changeset
   855
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   856
957c583b417b 201039_07
hgs
parents:
diff changeset
   857
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   858
//                 TC 1.1.2.2.1 (But still ongoing with other domain)             //
957c583b417b 201039_07
hgs
parents:
diff changeset
   859
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   860
class TestAckAfterDomainDeferralExpiry : public MDomainMemberTests
957c583b417b 201039_07
hgs
parents:
diff changeset
   861
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   862
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   863
	TestAckAfterDomainDeferralExpiry(CDmDomainKeepAliveTest& aTester) : iTester(aTester) {}
957c583b417b 201039_07
hgs
parents:
diff changeset
   864
	// from MDmKeepAliveTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   865
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
   866
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
   867
	void HandleTransitionL(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   868
	TInt HandleDeferralError(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   869
	void DoAsynHandleTransition(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   870
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   871
	CDmDomainKeepAliveTest& iTester;
957c583b417b 201039_07
hgs
parents:
diff changeset
   872
	TUint iTransitionTime;
957c583b417b 201039_07
hgs
parents:
diff changeset
   873
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   874
957c583b417b 201039_07
hgs
parents:
diff changeset
   875
void TestAckAfterDomainDeferralExpiry::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
   876
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   877
	test.Printf(_L("****************TestAckAfterDomainDeferralExpiry****************\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   878
	test.Next(_L("Test client that does not acknowledge within the allowed number of deferrals "));
957c583b417b 201039_07
hgs
parents:
diff changeset
   879
	test.Printf(_L("but which then acknowledges while transition still ongoing (in other domain)\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   880
957c583b417b 201039_07
hgs
parents:
diff changeset
   881
	iTester.SetExpectedValues(iTester.gTestMemberCount, 1);
957c583b417b 201039_07
hgs
parents:
diff changeset
   882
957c583b417b 201039_07
hgs
parents:
diff changeset
   883
	SDmStateSpecV1 aStateSpec = GetMaxDeferralState(ETrue);
957c583b417b 201039_07
hgs
parents:
diff changeset
   884
957c583b417b 201039_07
hgs
parents:
diff changeset
   885
	iTestState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
   886
	iTransitionTime = aStateSpec.iTimeoutMs * aStateSpec.iDeferralLimit * 2;
957c583b417b 201039_07
hgs
parents:
diff changeset
   887
957c583b417b 201039_07
hgs
parents:
diff changeset
   888
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
   889
	iTester.RequestSystemTransition(iTestState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
   890
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   891
957c583b417b 201039_07
hgs
parents:
diff changeset
   892
	// wait for test transitions to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
   893
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
   894
	test.Printf(_L(".......transition completed\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   895
957c583b417b 201039_07
hgs
parents:
diff changeset
   896
	iTester.ValidateTestResults();
957c583b417b 201039_07
hgs
parents:
diff changeset
   897
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   898
957c583b417b 201039_07
hgs
parents:
diff changeset
   899
void TestAckAfterDomainDeferralExpiry::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
   900
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   901
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
   902
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   903
957c583b417b 201039_07
hgs
parents:
diff changeset
   904
void TestAckAfterDomainDeferralExpiry::HandleTransitionL(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
   905
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   906
	iTester.TransitionNotification(*aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   907
957c583b417b 201039_07
hgs
parents:
diff changeset
   908
	aDmMember->GetState();
957c583b417b 201039_07
hgs
parents:
diff changeset
   909
957c583b417b 201039_07
hgs
parents:
diff changeset
   910
	const TTimeIntervalMicroSeconds32 KInterval = iTransitionTime * 1000; // policy defines in millisec - convert it to microsec
957c583b417b 201039_07
hgs
parents:
diff changeset
   911
957c583b417b 201039_07
hgs
parents:
diff changeset
   912
	aDmMember->DoAsynHandleTransition(KInterval);
957c583b417b 201039_07
hgs
parents:
diff changeset
   913
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   914
957c583b417b 201039_07
hgs
parents:
diff changeset
   915
TInt TestAckAfterDomainDeferralExpiry::HandleDeferralError(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
   916
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   917
	// We expect the KErrNotSupported happens after expiring the deferral counts
957c583b417b 201039_07
hgs
parents:
diff changeset
   918
	test(aError == KErrNotSupported);
957c583b417b 201039_07
hgs
parents:
diff changeset
   919
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
   920
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   921
957c583b417b 201039_07
hgs
parents:
diff changeset
   922
/* By the time this function is called the server would have transitioned this member
957c583b417b 201039_07
hgs
parents:
diff changeset
   923
   under the domain and would have moved on to the next domain */
957c583b417b 201039_07
hgs
parents:
diff changeset
   924
void TestAckAfterDomainDeferralExpiry::DoAsynHandleTransition(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
   925
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   926
	aDmMember->AcknowledgeLastState(KErrNone);
957c583b417b 201039_07
hgs
parents:
diff changeset
   927
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   928
957c583b417b 201039_07
hgs
parents:
diff changeset
   929
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   930
//                                   TC 1.1.2.2.2                                 //
957c583b417b 201039_07
hgs
parents:
diff changeset
   931
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   932
class TestAckAfterTransitionCompletes : public MDomainMemberTests
957c583b417b 201039_07
hgs
parents:
diff changeset
   933
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   934
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
   935
	TestAckAfterTransitionCompletes(CDmDomainKeepAliveTest& aTester) : iTester(aTester) {}
957c583b417b 201039_07
hgs
parents:
diff changeset
   936
	// from MDmKeepAliveTest
957c583b417b 201039_07
hgs
parents:
diff changeset
   937
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
   938
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
   939
	void HandleTransitionL(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   940
	TInt HandleDeferralError(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
   941
	void DoAsynMemberAck(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   942
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
   943
	CDmDomainKeepAliveTest& iTester;
957c583b417b 201039_07
hgs
parents:
diff changeset
   944
	TInt iExpectedErrorCode;
957c583b417b 201039_07
hgs
parents:
diff changeset
   945
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
   946
957c583b417b 201039_07
hgs
parents:
diff changeset
   947
void TestAckAfterTransitionCompletes::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
   948
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   949
	test.Printf(_L("****************TestAckAfterTransitionCompletes****************\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   950
957c583b417b 201039_07
hgs
parents:
diff changeset
   951
	test.Next(_L("Test client that does not acknowledge within the allowed number of deferrals "));
957c583b417b 201039_07
hgs
parents:
diff changeset
   952
	test.Printf(_L("but which then acknowledges while transition has completed\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   953
957c583b417b 201039_07
hgs
parents:
diff changeset
   954
	iTester.SetExpectedValues(iTester.gTestMemberCount, 1);
957c583b417b 201039_07
hgs
parents:
diff changeset
   955
957c583b417b 201039_07
hgs
parents:
diff changeset
   956
	SDmStateSpecV1 aStateSpec = GetMaxDeferralState(ETrue);
957c583b417b 201039_07
hgs
parents:
diff changeset
   957
957c583b417b 201039_07
hgs
parents:
diff changeset
   958
	iTestState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
   959
957c583b417b 201039_07
hgs
parents:
diff changeset
   960
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
   961
	iTester.RequestSystemTransition(iTestState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
   962
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   963
957c583b417b 201039_07
hgs
parents:
diff changeset
   964
	// wait for test transitions to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
   965
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
   966
	test.Printf(_L(".......transition completed\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
   967
957c583b417b 201039_07
hgs
parents:
diff changeset
   968
	iTester.ValidateTestResults();
957c583b417b 201039_07
hgs
parents:
diff changeset
   969
957c583b417b 201039_07
hgs
parents:
diff changeset
   970
	iTester.DoAsynMemberAck();
957c583b417b 201039_07
hgs
parents:
diff changeset
   971
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   972
957c583b417b 201039_07
hgs
parents:
diff changeset
   973
void TestAckAfterTransitionCompletes::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
   974
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   975
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
   976
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   977
957c583b417b 201039_07
hgs
parents:
diff changeset
   978
void TestAckAfterTransitionCompletes::HandleTransitionL(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
   979
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   980
	iTester.TransitionNotification(*aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
   981
	aDmMember->GetState();
957c583b417b 201039_07
hgs
parents:
diff changeset
   982
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   983
957c583b417b 201039_07
hgs
parents:
diff changeset
   984
void TestAckAfterTransitionCompletes::DoAsynMemberAck(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
   985
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   986
	aDmMember->AcknowledgeLastState(KErrNone);
957c583b417b 201039_07
hgs
parents:
diff changeset
   987
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   988
957c583b417b 201039_07
hgs
parents:
diff changeset
   989
TInt TestAckAfterTransitionCompletes::HandleDeferralError(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
   990
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
   991
	test(aError == KErrNotSupported);
957c583b417b 201039_07
hgs
parents:
diff changeset
   992
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
   993
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
   994
957c583b417b 201039_07
hgs
parents:
diff changeset
   995
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   996
//					TC 1.1.2.2.3	and    TC 1.1.2.2.4						      //
957c583b417b 201039_07
hgs
parents:
diff changeset
   997
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
   998
class TestAckPrevTransAfterNewTransStart : public MDomainMemberTests
957c583b417b 201039_07
hgs
parents:
diff changeset
   999
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1000
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1001
	TestAckPrevTransAfterNewTransStart(CDmDomainKeepAliveTest& aTester, TBool aAckPrevTran) :
957c583b417b 201039_07
hgs
parents:
diff changeset
  1002
				iShouldAck(EFalse), iAckPrevTran(aAckPrevTran), iTester(aTester) {}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1003
	// from MDmKeepAliveTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1004
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1005
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1006
	void HandleTransitionL(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1007
	TInt HandleDeferralError(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1008
957c583b417b 201039_07
hgs
parents:
diff changeset
  1009
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1010
	TBool iShouldAck;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1011
	TBool iAckPrevTran;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1012
	CDmDomainKeepAliveTest& iTester;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1013
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1014
957c583b417b 201039_07
hgs
parents:
diff changeset
  1015
void TestAckPrevTransAfterNewTransStart::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1016
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1017
	if(iAckPrevTran)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1018
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1019
		test.Printf(_L("**************** TestAckPrevTransAfterNewTransStart (Ack Previous Transition after new transition started) ****************\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1020
		test.Next(_L("Test client that does not acknowledge within the allowed number of deferrals "));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1021
		test.Printf(_L("but which then acknowledges while next new transition has started\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1022
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1023
	else
957c583b417b 201039_07
hgs
parents:
diff changeset
  1024
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1025
		test.Printf(_L("**************** TestAckPrevTransAfterNewTransStart (Never Ack Previous Transition) ****************\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1026
		test.Next(_L("Test client that does not acknowledge within the allowed number of deferrals "));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1027
		test.Printf(_L("but which never acknowledges and continues handling next transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1028
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1029
957c583b417b 201039_07
hgs
parents:
diff changeset
  1030
	iTester.SetExpectedValues(iTester.gTestMemberCount, 1);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1031
957c583b417b 201039_07
hgs
parents:
diff changeset
  1032
	SDmStateSpecV1 aStateSpec = GetMaxDeferralState(ETrue);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1033
957c583b417b 201039_07
hgs
parents:
diff changeset
  1034
	iTestState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1035
957c583b417b 201039_07
hgs
parents:
diff changeset
  1036
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
  1037
	iTester.RequestSystemTransition(iTestState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1038
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1039
957c583b417b 201039_07
hgs
parents:
diff changeset
  1040
	// wait for test transitions to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
  1041
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1042
	test.Printf(_L("....transition completed\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1043
957c583b417b 201039_07
hgs
parents:
diff changeset
  1044
	iTester.ValidateTestResults();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1045
957c583b417b 201039_07
hgs
parents:
diff changeset
  1046
	if(iAckPrevTran)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1047
		test.Printf(_L("Now request another transition for which the domain members should ack both transitions)\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1048
	else
957c583b417b 201039_07
hgs
parents:
diff changeset
  1049
		test.Printf(_L("Now request another transition for which the domain members should ack only the last transitions)\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1050
957c583b417b 201039_07
hgs
parents:
diff changeset
  1051
	iTester.SetExpectedValues(iTester.gTestMemberCount*2, 2);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1052
	aStateSpec = GetMinDeferralState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1053
	iTestState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1054
957c583b417b 201039_07
hgs
parents:
diff changeset
  1055
	iShouldAck = ETrue;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1056
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
  1057
	iTester.RequestSystemTransition(iTestState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1058
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1059
957c583b417b 201039_07
hgs
parents:
diff changeset
  1060
	// wait for test transitions to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
  1061
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1062
	test.Printf(_L("....transition completed\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1063
957c583b417b 201039_07
hgs
parents:
diff changeset
  1064
	iTester.ValidateTestResults();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1065
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1066
957c583b417b 201039_07
hgs
parents:
diff changeset
  1067
void TestAckPrevTransAfterNewTransStart::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1068
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1069
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1070
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1071
957c583b417b 201039_07
hgs
parents:
diff changeset
  1072
void TestAckPrevTransAfterNewTransStart::HandleTransitionL(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1073
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1074
	TInt ackError = iTester.TransitionNotification(*aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1075
	if(iShouldAck == EFalse)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1076
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1077
		aDmMember->GetState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1078
		// request another notification (even if we didn't acknowledge the last one)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1079
		aDmMember->RequestTransitionNotification();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1080
		test.Printf(_L("....Return without acknowledging\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1081
		return;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1082
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1083
957c583b417b 201039_07
hgs
parents:
diff changeset
  1084
	if(iAckPrevTran)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1085
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1086
		test.Printf(_L("....Acknowledge the first transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1087
		/* First ack the previous notification */
957c583b417b 201039_07
hgs
parents:
diff changeset
  1088
		aDmMember->AcknowledgeLastState(ackError);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1089
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1090
	else
957c583b417b 201039_07
hgs
parents:
diff changeset
  1091
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1092
		test.Printf(_L("Skipping to acknowledge the first transition...\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1093
		/* We are not going to ack the previous notification handled in the above if condition 
957c583b417b 201039_07
hgs
parents:
diff changeset
  1094
	   Intentionally not acking and continuing to do a GetState to handle the next notification */
957c583b417b 201039_07
hgs
parents:
diff changeset
  1095
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1096
957c583b417b 201039_07
hgs
parents:
diff changeset
  1097
	test.Printf(_L("Acknowledge the second transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1098
	/* Now handle the current notification */
957c583b417b 201039_07
hgs
parents:
diff changeset
  1099
	aDmMember->GetState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1100
	aDmMember->AcknowledgeLastState(ackError);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1101
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1102
957c583b417b 201039_07
hgs
parents:
diff changeset
  1103
TInt TestAckPrevTransAfterNewTransStart::HandleDeferralError(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1104
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1105
	if(!iShouldAck)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1106
		test(aError == KErrNotSupported);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1107
	else
957c583b417b 201039_07
hgs
parents:
diff changeset
  1108
		test_Equal(KErrCompletion, aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1109
957c583b417b 201039_07
hgs
parents:
diff changeset
  1110
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1111
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1112
957c583b417b 201039_07
hgs
parents:
diff changeset
  1113
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
  1114
//                      TC 1.1.2.3.1    and    TC 1.1.2.3.2                       //
957c583b417b 201039_07
hgs
parents:
diff changeset
  1115
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
  1116
class TestCancelTransitonWithMemberAck : public MDomainMemberTests
957c583b417b 201039_07
hgs
parents:
diff changeset
  1117
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1118
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1119
	TestCancelTransitonWithMemberAck(CDmDomainKeepAliveTest& aTester, TInt aErrorCode) : 
957c583b417b 201039_07
hgs
parents:
diff changeset
  1120
			iTester(aTester), iCancelCount(0), iErrorCode(aErrorCode) {}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1121
	// from MDmKeepAliveTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1122
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1123
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1124
	void HandleTransitionL(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1125
	TInt HandleDeferralError(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1126
	void DoAsynMemberAck(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1127
	static TInt CancelTransitionTimerCallback(TAny* obj);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1128
	static TInt DelayTimerCallback(TAny* obj);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1129
	void StopScheduler();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1130
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1131
	CDmDomainKeepAliveTest& iTester;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1132
	TUint iTransitionTime;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1133
	TUint iCancelCount;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1134
	TInt  iErrorCode;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1135
	CPeriodic *iCancelTransitionTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1136
	CPeriodic *iDelayTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1137
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1138
957c583b417b 201039_07
hgs
parents:
diff changeset
  1139
TInt TestCancelTransitonWithMemberAck::CancelTransitionTimerCallback(TAny* obj)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1140
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1141
    TestCancelTransitonWithMemberAck* thisTest = static_cast<TestCancelTransitonWithMemberAck*>(obj);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1142
957c583b417b 201039_07
hgs
parents:
diff changeset
  1143
	thisTest->iTester.CancelTransition();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1144
	thisTest->iCancelTransitionTimer->Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1145
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1146
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1147
957c583b417b 201039_07
hgs
parents:
diff changeset
  1148
TInt TestCancelTransitonWithMemberAck::DelayTimerCallback(TAny* obj)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1149
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1150
    TestCancelTransitonWithMemberAck* thisTest = static_cast<TestCancelTransitonWithMemberAck*>(obj);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1151
957c583b417b 201039_07
hgs
parents:
diff changeset
  1152
	thisTest->iDelayTimer->Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1153
	thisTest->StopScheduler();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1154
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1155
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1156
957c583b417b 201039_07
hgs
parents:
diff changeset
  1157
void TestCancelTransitonWithMemberAck::StopScheduler()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1158
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1159
	CActiveScheduler::Stop();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1160
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1161
957c583b417b 201039_07
hgs
parents:
diff changeset
  1162
void TestCancelTransitonWithMemberAck::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1163
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1164
	test.Printf(_L("****************TestCancelTransitonWithMemberAck****************\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1165
	test.Next(_L("Test state transition cancelation...."));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1166
	test.Printf(_L("that acknowledes KErrNone......\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1167
957c583b417b 201039_07
hgs
parents:
diff changeset
  1168
	iTester.SetExpectedValues(iTester.gLeafMemberCount, 1);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1169
957c583b417b 201039_07
hgs
parents:
diff changeset
  1170
	SDmStateSpecV1 aStateSpec = GetMaxDeferralState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1171
957c583b417b 201039_07
hgs
parents:
diff changeset
  1172
	iTestState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1173
	iTransitionTime = aStateSpec.iTimeoutMs * aStateSpec.iDeferralLimit / 2;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1174
957c583b417b 201039_07
hgs
parents:
diff changeset
  1175
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
  1176
	iTester.RequestSystemTransition(iTestState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1177
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1178
957c583b417b 201039_07
hgs
parents:
diff changeset
  1179
	iCancelTransitionTimer = CPeriodic::NewL(CActive::EPriorityHigh);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1180
957c583b417b 201039_07
hgs
parents:
diff changeset
  1181
	TCallBack cancelCb(CancelTransitionTimerCallback, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1182
	iCancelTransitionTimer->Start(aStateSpec.iTimeoutMs, aStateSpec.iTimeoutMs, cancelCb);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1183
957c583b417b 201039_07
hgs
parents:
diff changeset
  1184
	// wait for test transitions to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
  1185
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1186
	test.Printf(_L("....transition cancelled\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1187
957c583b417b 201039_07
hgs
parents:
diff changeset
  1188
	iDelayTimer = CPeriodic::NewL(CActive::EPriorityStandard);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1189
957c583b417b 201039_07
hgs
parents:
diff changeset
  1190
	TCallBack delayCb(DelayTimerCallback, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1191
	TUint delayTime = iTransitionTime * 3;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1192
	iDelayTimer->Start(delayTime, delayTime, delayCb);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1193
957c583b417b 201039_07
hgs
parents:
diff changeset
  1194
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1195
	test.Printf(_L("........expected members got cancelation notified\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1196
957c583b417b 201039_07
hgs
parents:
diff changeset
  1197
	iTester.DoAsynMemberAck();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1198
957c583b417b 201039_07
hgs
parents:
diff changeset
  1199
	iTester.ValidateTestResults();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1200
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1201
957c583b417b 201039_07
hgs
parents:
diff changeset
  1202
void TestCancelTransitonWithMemberAck::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1203
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1204
	delete iDelayTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1205
	delete iCancelTransitionTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1206
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1207
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1208
957c583b417b 201039_07
hgs
parents:
diff changeset
  1209
void TestCancelTransitonWithMemberAck::HandleTransitionL(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1210
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1211
	iTester.TransitionNotification(*aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1212
957c583b417b 201039_07
hgs
parents:
diff changeset
  1213
	aDmMember->GetState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1214
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1215
957c583b417b 201039_07
hgs
parents:
diff changeset
  1216
TInt TestCancelTransitonWithMemberAck::HandleDeferralError(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1217
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1218
	// KErrNotReady is possible if the cancellation
957c583b417b 201039_07
hgs
parents:
diff changeset
  1219
	// ocurred in between member deferrrals
957c583b417b 201039_07
hgs
parents:
diff changeset
  1220
	test(aError == KErrCancel || aError == KErrNotReady);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1221
	test(++iCancelCount <= iTester.gLeafMemberCount);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1222
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1223
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1224
957c583b417b 201039_07
hgs
parents:
diff changeset
  1225
void TestCancelTransitonWithMemberAck::DoAsynMemberAck(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1226
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1227
	aDmMember->AcknowledgeLastState(iErrorCode);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1228
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1229
957c583b417b 201039_07
hgs
parents:
diff changeset
  1230
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
  1231
//                                TC 1.1.2.3.3                                    //
957c583b417b 201039_07
hgs
parents:
diff changeset
  1232
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
  1233
class TestCancelTransitonNeverAck : public MDomainMemberTests // TC1.1.2.3.3
957c583b417b 201039_07
hgs
parents:
diff changeset
  1234
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1235
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1236
	TestCancelTransitonNeverAck(CDmDomainKeepAliveTest& aTester) : iTester(aTester), iCancelCount(0), iShouldAck(EFalse){}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1237
	// from MDmKeepAliveTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1238
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1239
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1240
	void HandleTransitionL(CDomainMemberKeepAlive* aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1241
	TInt HandleDeferralError(TInt aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1242
	static TInt CancelTransitionTimerCallback(TAny* obj);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1243
	static TInt DelayTimerCallback(TAny* obj);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1244
	void StopScheduler();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1245
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1246
	CDmDomainKeepAliveTest& iTester;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1247
	TUint iTransitionTime;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1248
	TUint iCancelCount;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1249
	TBool iShouldAck;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1250
	CPeriodic *iCancelTransitionTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1251
	CPeriodic *iDelayTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1252
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1253
957c583b417b 201039_07
hgs
parents:
diff changeset
  1254
TInt TestCancelTransitonNeverAck::CancelTransitionTimerCallback(TAny* obj)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1255
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1256
    TestCancelTransitonNeverAck* thisTest = static_cast<TestCancelTransitonNeverAck*>(obj);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1257
957c583b417b 201039_07
hgs
parents:
diff changeset
  1258
	thisTest->iTester.CancelTransition();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1259
	thisTest->iCancelTransitionTimer->Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1260
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1261
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1262
957c583b417b 201039_07
hgs
parents:
diff changeset
  1263
TInt TestCancelTransitonNeverAck::DelayTimerCallback(TAny* obj)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1264
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1265
    TestCancelTransitonNeverAck* thisTest = static_cast<TestCancelTransitonNeverAck*>(obj);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1266
957c583b417b 201039_07
hgs
parents:
diff changeset
  1267
	thisTest->iDelayTimer->Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1268
	thisTest->StopScheduler();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1269
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1270
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1271
957c583b417b 201039_07
hgs
parents:
diff changeset
  1272
void TestCancelTransitonNeverAck::StopScheduler()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1273
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1274
	CActiveScheduler::Stop();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1275
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1276
957c583b417b 201039_07
hgs
parents:
diff changeset
  1277
void TestCancelTransitonNeverAck::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1278
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1279
	test.Printf(_L("****************TestCancelTransitonNeverAck****************\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1280
	test.Next(_L("Test state transition cancelation...."));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1281
	test.Printf(_L("that never acknowledes ......\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1282
957c583b417b 201039_07
hgs
parents:
diff changeset
  1283
	iTester.SetExpectedValues(iTester.gLeafMemberCount, 1);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1284
957c583b417b 201039_07
hgs
parents:
diff changeset
  1285
	SDmStateSpecV1 aStateSpec = GetMaxDeferralState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1286
957c583b417b 201039_07
hgs
parents:
diff changeset
  1287
	iTestState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1288
	iTransitionTime = aStateSpec.iTimeoutMs * aStateSpec.iDeferralLimit / 2;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1289
957c583b417b 201039_07
hgs
parents:
diff changeset
  1290
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
  1291
	iTester.RequestSystemTransition(iTestState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1292
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1293
957c583b417b 201039_07
hgs
parents:
diff changeset
  1294
	iCancelTransitionTimer = CPeriodic::NewL(CActive::EPriorityHigh);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1295
957c583b417b 201039_07
hgs
parents:
diff changeset
  1296
	TCallBack cancelCb(CancelTransitionTimerCallback, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1297
	iCancelTransitionTimer->Start(iTransitionTime, iTransitionTime, cancelCb);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1298
957c583b417b 201039_07
hgs
parents:
diff changeset
  1299
	// wait for test transitions to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
  1300
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1301
	test.Printf(_L("....transition cancelled\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1302
957c583b417b 201039_07
hgs
parents:
diff changeset
  1303
	iDelayTimer = CPeriodic::NewL(CActive::EPriorityStandard);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1304
957c583b417b 201039_07
hgs
parents:
diff changeset
  1305
	TCallBack delayCb(DelayTimerCallback, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1306
	TUint delayTime = iTransitionTime * 3;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1307
	iDelayTimer->Start(delayTime, delayTime, delayCb);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1308
957c583b417b 201039_07
hgs
parents:
diff changeset
  1309
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1310
	test.Printf(_L("........expected members got cancelation notified\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1311
957c583b417b 201039_07
hgs
parents:
diff changeset
  1312
	iTester.ValidateTestResults();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1313
957c583b417b 201039_07
hgs
parents:
diff changeset
  1314
	test.Printf(_L("Now request another transition for which the domain members should ack only the last transitions)\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1315
957c583b417b 201039_07
hgs
parents:
diff changeset
  1316
	iTester.SetExpectedValues(iTester.gTestMemberCount + iTester.gLeafMemberCount, 2);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1317
	aStateSpec = GetMinDeferralState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1318
957c583b417b 201039_07
hgs
parents:
diff changeset
  1319
	iTestState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1320
957c583b417b 201039_07
hgs
parents:
diff changeset
  1321
	iShouldAck = ETrue;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1322
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
  1323
	iTester.RequestSystemTransition(iTestState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1324
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1325
957c583b417b 201039_07
hgs
parents:
diff changeset
  1326
	// wait for test transitions to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
  1327
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1328
	test.Printf(_L(".......transition completed\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1329
957c583b417b 201039_07
hgs
parents:
diff changeset
  1330
	iTester.ValidateTestResults();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1331
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1332
957c583b417b 201039_07
hgs
parents:
diff changeset
  1333
void TestCancelTransitonNeverAck::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1334
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1335
	delete iDelayTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1336
	delete iCancelTransitionTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1337
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1338
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1339
957c583b417b 201039_07
hgs
parents:
diff changeset
  1340
void TestCancelTransitonNeverAck::HandleTransitionL(CDomainMemberKeepAlive* aDmMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1341
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1342
	TInt ackError = iTester.TransitionNotification(*aDmMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1343
957c583b417b 201039_07
hgs
parents:
diff changeset
  1344
	if(iShouldAck == EFalse)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1345
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1346
		aDmMember->GetState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1347
957c583b417b 201039_07
hgs
parents:
diff changeset
  1348
		// request another notification (even if we didn't acknowledge the last one)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1349
		aDmMember->RequestTransitionNotification();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1350
		test.Printf(_L("Return without acknowledging...\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1351
		return;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1352
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1353
957c583b417b 201039_07
hgs
parents:
diff changeset
  1354
	test.Printf(_L("Skipping to acknowledge the first transition...\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1355
	/* We are not going to ack the previous notification handled in the above if condition 
957c583b417b 201039_07
hgs
parents:
diff changeset
  1356
	   Intentionally not acking and continuing to do a GetState to handle the next notification */
957c583b417b 201039_07
hgs
parents:
diff changeset
  1357
957c583b417b 201039_07
hgs
parents:
diff changeset
  1358
	test.Printf(_L("Acknowledge the second transition...\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1359
	/* Now handle the current notification */
957c583b417b 201039_07
hgs
parents:
diff changeset
  1360
	aDmMember->GetState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1361
	aDmMember->AcknowledgeLastState(ackError);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1362
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1363
957c583b417b 201039_07
hgs
parents:
diff changeset
  1364
TInt TestCancelTransitonNeverAck::HandleDeferralError(TInt aError)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1365
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1366
	if(!iShouldAck)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1367
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1368
		// KErrNotReady is possible if the cancellation
957c583b417b 201039_07
hgs
parents:
diff changeset
  1369
		// ocurred in between member deferrrals
957c583b417b 201039_07
hgs
parents:
diff changeset
  1370
		test(aError == KErrCancel || aError == KErrNotReady);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1371
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1372
	else
957c583b417b 201039_07
hgs
parents:
diff changeset
  1373
		test_Equal(KErrCompletion, aError);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1374
957c583b417b 201039_07
hgs
parents:
diff changeset
  1375
	if(aError == KErrCancel || (aError == KErrNotReady && !iShouldAck))
957c583b417b 201039_07
hgs
parents:
diff changeset
  1376
		test(++iCancelCount <= iTester.gLeafMemberCount);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1377
957c583b417b 201039_07
hgs
parents:
diff changeset
  1378
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1379
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1380
957c583b417b 201039_07
hgs
parents:
diff changeset
  1381
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
  1382
//                           CDmDomainKeepAliveTest                               //
957c583b417b 201039_07
hgs
parents:
diff changeset
  1383
////////////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
  1384
void CDmDomainKeepAliveTest::Init(MDomainMemberTests* aTest)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1385
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1386
	TInt r = RDmDomainManager::AddDomainHierarchy(KDmHierarchyIdTestV2);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1387
	test_KErrNone(r);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1388
957c583b417b 201039_07
hgs
parents:
diff changeset
  1389
	r = iTestDomainManager.Connect(KDmHierarchyIdTestV2);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1390
	test_KErrNone(r);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1391
957c583b417b 201039_07
hgs
parents:
diff changeset
  1392
	iTransitionsCompleted = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1393
	iTestNotifications = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1394
	gTestMemberCount = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1395
	gLeafMemberCount = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1396
957c583b417b 201039_07
hgs
parents:
diff changeset
  1397
	// Add some test hierarchy members
957c583b417b 201039_07
hgs
parents:
diff changeset
  1398
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1399
957c583b417b 201039_07
hgs
parents:
diff changeset
  1400
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdRoot, ORDINAL_FROM_DOMAINID0(KDmIdRoot), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1401
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  1402
	// row 1
957c583b417b 201039_07
hgs
parents:
diff changeset
  1403
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdTestA, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestA), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1404
957c583b417b 201039_07
hgs
parents:
diff changeset
  1405
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdTestB, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestB), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1406
957c583b417b 201039_07
hgs
parents:
diff changeset
  1407
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdTestC, ORDINAL_FROM_DOMAINID1(KDmIdRoot, KDmIdTestC), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1408
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  1409
	// row2
957c583b417b 201039_07
hgs
parents:
diff changeset
  1410
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdTestAA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAA), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1411
	gLeafMemberCount++;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1412
957c583b417b 201039_07
hgs
parents:
diff changeset
  1413
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdTestAB, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestA, KDmIdTestAB), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1414
957c583b417b 201039_07
hgs
parents:
diff changeset
  1415
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdTestBA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestB, KDmIdTestBA), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1416
	gLeafMemberCount++;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1417
957c583b417b 201039_07
hgs
parents:
diff changeset
  1418
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdTestCA, ORDINAL_FROM_DOMAINID2(KDmIdRoot, KDmIdTestC, KDmIdTestCA), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1419
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  1420
	// row 3
957c583b417b 201039_07
hgs
parents:
diff changeset
  1421
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdTestABA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABA), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1422
	gLeafMemberCount++;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1423
957c583b417b 201039_07
hgs
parents:
diff changeset
  1424
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdTestABB, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestA, KDmIdTestAB, KDmIdTestABB), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1425
	gLeafMemberCount++;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1426
957c583b417b 201039_07
hgs
parents:
diff changeset
  1427
	test_TRAP(iTestMembers[gTestMemberCount++] = CDomainMemberKeepAlive::NewL(KDmHierarchyIdTestV2, KDmIdTestCAA, ORDINAL_FROM_DOMAINID3(KDmIdRoot, KDmIdTestC, KDmIdTestCA, KDmIdTestCAA), aTest));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1428
	gLeafMemberCount++;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1429
957c583b417b 201039_07
hgs
parents:
diff changeset
  1430
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1431
957c583b417b 201039_07
hgs
parents:
diff changeset
  1432
void CDmDomainKeepAliveTest::SetExpectedValues(TInt aTestNotificationsExpected, TInt aTransitionsExpected)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1433
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1434
	iTestNotificationsExpected = aTestNotificationsExpected;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1435
	iTransitionsExpected = aTransitionsExpected;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1436
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1437
957c583b417b 201039_07
hgs
parents:
diff changeset
  1438
void CDmDomainKeepAliveTest::ValidateTestResults()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1439
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1440
	test.Printf(_L("ValidateResults().....\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1441
957c583b417b 201039_07
hgs
parents:
diff changeset
  1442
	test.Printf(_L("iTestNotifications = %d iTestNotificationsExpected = %d\n"), iTestNotifications ,
957c583b417b 201039_07
hgs
parents:
diff changeset
  1443
				iTestNotificationsExpected);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1444
	test(iTestNotifications == iTestNotificationsExpected);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1445
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1446
957c583b417b 201039_07
hgs
parents:
diff changeset
  1447
void CDmDomainKeepAliveTest::UnInit()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1448
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1449
	iTestDomainManager.Close();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1450
957c583b417b 201039_07
hgs
parents:
diff changeset
  1451
	// cleanup
957c583b417b 201039_07
hgs
parents:
diff changeset
  1452
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  1453
	for (TUint i = 0; i<gTestMemberCount; i++)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1454
		delete iTestMembers[i];
957c583b417b 201039_07
hgs
parents:
diff changeset
  1455
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1456
957c583b417b 201039_07
hgs
parents:
diff changeset
  1457
void CDmDomainKeepAliveTest::RequestSystemTransition(TDmDomainState aTestState, TDmTraverseDirection aDirection) 
957c583b417b 201039_07
hgs
parents:
diff changeset
  1458
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1459
	iTestDomainManager.RequestSystemTransition(aTestState, aDirection, CActive::iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1460
	CActive::SetActive();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1461
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1462
957c583b417b 201039_07
hgs
parents:
diff changeset
  1463
void CDmDomainKeepAliveTest::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1464
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1465
 	__UHEAP_MARK;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1466
957c583b417b 201039_07
hgs
parents:
diff changeset
  1467
	CActiveScheduler::Add(this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1468
957c583b417b 201039_07
hgs
parents:
diff changeset
  1469
	MDomainMemberTests* tests[] = 
957c583b417b 201039_07
hgs
parents:
diff changeset
  1470
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1471
			new TestTransitionWithDeferral0(*this), // TC 1.1.2.1.1 (with deferral count 0)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1472
			new TestAckWithinDeferral(*this), // TC 1.1.2.1.1 (with max deferral count)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1473
			new TestAckAfterDomainDeferralExpiry(*this), // TC 1.1.2.2.1 (But still ongoing with other domain)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1474
			new TestAckAfterTransitionCompletes(*this), // TC 1.1.2.2.2
957c583b417b 201039_07
hgs
parents:
diff changeset
  1475
			new TestAckPrevTransAfterNewTransStart(*this, ETrue), // TC 1.1.2.2.3
957c583b417b 201039_07
hgs
parents:
diff changeset
  1476
			new TestAckPrevTransAfterNewTransStart(*this, EFalse), // TC 1.1.2.2.4
957c583b417b 201039_07
hgs
parents:
diff changeset
  1477
			new TestCancelTransitonWithMemberAck(*this, KErrNone), // TC1.1.2.3.1
957c583b417b 201039_07
hgs
parents:
diff changeset
  1478
			new TestCancelTransitonWithMemberAck(*this, KErrCompletion), // TC1.1.2.3.2
957c583b417b 201039_07
hgs
parents:
diff changeset
  1479
			new TestCancelTransitonNeverAck(*this), // TC1.1.2.3.3
957c583b417b 201039_07
hgs
parents:
diff changeset
  1480
		};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1481
957c583b417b 201039_07
hgs
parents:
diff changeset
  1482
	for (unsigned int i = 0; i < sizeof(tests)/sizeof(*tests); ++i)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1483
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1484
		test(tests[i] != NULL);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1485
		Init(tests[i]);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1486
		iCurrentTest = tests[i];
957c583b417b 201039_07
hgs
parents:
diff changeset
  1487
		tests[i]->Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1488
		tests[i]->Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1489
		UnInit();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1490
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1491
	__UHEAP_MARKEND;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1492
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1493
957c583b417b 201039_07
hgs
parents:
diff changeset
  1494
void CDmDomainKeepAliveTest::DoAsynMemberAck()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1495
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1496
	for (TUint i = 0; i<gTestMemberCount; i++)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1497
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1498
		if(iTestMembers[i]->iShouldAck)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1499
			{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1500
			TBuf16<4> buf;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1501
			GetDomainDesc(iTestMembers[i]->Ordinal(), buf);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1502
			test.Printf(_L("Request current test to ack %S.......\n"), &buf);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1503
			iCurrentTest->DoAsynMemberAck(iTestMembers[i]);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1504
			iTestMembers[i]->iShouldAck = EFalse;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1505
			}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1506
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1507
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1508
957c583b417b 201039_07
hgs
parents:
diff changeset
  1509
void CDmDomainKeepAliveTest::CancelTransition()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1510
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1511
	iTestDomainManager.CancelTransition();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1512
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1513
957c583b417b 201039_07
hgs
parents:
diff changeset
  1514
	// This handles a transition notification from a test domain member.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1515
TInt CDmDomainKeepAliveTest::TransitionNotification(MDmDomainMember& aDomainMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1516
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1517
	TInt status = aDomainMember.Status();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1518
957c583b417b 201039_07
hgs
parents:
diff changeset
  1519
	iTestNotifications++;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1520
957c583b417b 201039_07
hgs
parents:
diff changeset
  1521
	test (aDomainMember.HierarchyId() == KDmHierarchyIdTestV2);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1522
957c583b417b 201039_07
hgs
parents:
diff changeset
  1523
	TBuf16<4> buf;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1524
	GetDomainDesc(aDomainMember.Ordinal(), buf);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1525
957c583b417b 201039_07
hgs
parents:
diff changeset
  1526
	test.Printf(_L("TransitionNotification Hierarchy = %d, domain = %S, iOrdinal = 0x%08X, state = 0x%x, status = %d\n"), 
957c583b417b 201039_07
hgs
parents:
diff changeset
  1527
		aDomainMember.HierarchyId(), &buf, aDomainMember.Ordinal(), aDomainMember.State(), status);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1528
957c583b417b 201039_07
hgs
parents:
diff changeset
  1529
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1530
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1531
957c583b417b 201039_07
hgs
parents:
diff changeset
  1532
void CDmDomainKeepAliveTest::RunL()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1533
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1534
	iTransitionsCompleted++;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1535
957c583b417b 201039_07
hgs
parents:
diff changeset
  1536
	TInt error = iStatus.Int();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1537
957c583b417b 201039_07
hgs
parents:
diff changeset
  1538
	test.Printf(_L("CDmDomainKeepAliveTest::RunL() error = %d, iTransitionsCompleted %d iTransitionsExpected %d\n"), 
957c583b417b 201039_07
hgs
parents:
diff changeset
  1539
		error, iTransitionsCompleted, iTransitionsExpected);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1540
957c583b417b 201039_07
hgs
parents:
diff changeset
  1541
	if (iTransitionsCompleted == iTransitionsExpected)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1542
		CActiveScheduler::Stop();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1543
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1544
957c583b417b 201039_07
hgs
parents:
diff changeset
  1545
void CDmDomainKeepAliveTest::DoCancel()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1546
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1547
	test(0);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1548
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1549
957c583b417b 201039_07
hgs
parents:
diff changeset
  1550
void CDmDomainKeepAliveTest::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1551
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1552
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1553
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1554
957c583b417b 201039_07
hgs
parents:
diff changeset
  1555
957c583b417b 201039_07
hgs
parents:
diff changeset
  1556
TUint CDmDomainKeepAliveTest::gTestMemberCount = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1557
TUint CDmDomainKeepAliveTest::gLeafMemberCount = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1558
957c583b417b 201039_07
hgs
parents:
diff changeset
  1559
957c583b417b 201039_07
hgs
parents:
diff changeset
  1560
/**
957c583b417b 201039_07
hgs
parents:
diff changeset
  1561
   DeferAcknowledgement() with status KErrServerBusy.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1562
957c583b417b 201039_07
hgs
parents:
diff changeset
  1563
   Client receives notification, defers once and then defers again before the
957c583b417b 201039_07
hgs
parents:
diff changeset
  1564
   next notification.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1565
*/
957c583b417b 201039_07
hgs
parents:
diff changeset
  1566
class ActiveMember : public CActive
957c583b417b 201039_07
hgs
parents:
diff changeset
  1567
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1568
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1569
	ActiveMember(CDmTestMember* aMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1570
		: CActive(CActive::EPriorityHigh), iMember(aMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1571
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1572
		CActiveScheduler::Add(this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1573
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1574
	~ActiveMember()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1575
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1576
		Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1577
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1578
	void Defer()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1579
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1580
		iMember->iDomain.DeferAcknowledgement(iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1581
		SetActive();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1582
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1583
	void DoCancel()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1584
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1585
		iMember->iDomain.CancelDeferral();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1586
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1587
protected:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1588
	CDmTestMember* const iMember;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1589
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1590
957c583b417b 201039_07
hgs
parents:
diff changeset
  1591
957c583b417b 201039_07
hgs
parents:
diff changeset
  1592
class TestServerBusy : public ActiveMember
957c583b417b 201039_07
hgs
parents:
diff changeset
  1593
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1594
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1595
	TestServerBusy(CDmTestMember* aMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1596
	~TestServerBusy();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1597
	void PrimeTimer();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1598
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1599
	void RunL();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1600
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1601
	RTimer iTimer;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1602
	TBool iDeferred;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1603
	const TInt iInstance;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1604
	static TInt iInstances;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1605
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1606
957c583b417b 201039_07
hgs
parents:
diff changeset
  1607
TInt TestServerBusy::iInstances = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1608
957c583b417b 201039_07
hgs
parents:
diff changeset
  1609
957c583b417b 201039_07
hgs
parents:
diff changeset
  1610
TestServerBusy::TestServerBusy(CDmTestMember* aMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1611
	: ActiveMember(aMember), iDeferred(EFalse), iInstance(++iInstances)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1612
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1613
	const TInt r = iTimer.CreateLocal();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1614
	test_KErrNone(r);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1615
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1616
957c583b417b 201039_07
hgs
parents:
diff changeset
  1617
957c583b417b 201039_07
hgs
parents:
diff changeset
  1618
TestServerBusy::~TestServerBusy()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1619
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1620
	Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1621
	iTimer.Close();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1622
	iInstances--;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1623
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1624
957c583b417b 201039_07
hgs
parents:
diff changeset
  1625
957c583b417b 201039_07
hgs
parents:
diff changeset
  1626
void TestServerBusy::PrimeTimer()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1627
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1628
	// let the timers fire at different times (first one in 1ms, second one in
957c583b417b 201039_07
hgs
parents:
diff changeset
  1629
	// 50ms)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1630
	const TTimeIntervalMicroSeconds32 t = (iInstance == 1) ? 1000 : 50000;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1631
	iTimer.After(iStatus, t);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1632
	SetActive();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1633
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1634
957c583b417b 201039_07
hgs
parents:
diff changeset
  1635
957c583b417b 201039_07
hgs
parents:
diff changeset
  1636
void TestServerBusy::RunL()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1637
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1638
	RDebug::Printf("TestServerBusy(#%d)::RunL(): %d", iInstance, iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  1639
	if (!iDeferred)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1640
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1641
		iDeferred = ETrue;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1642
		Defer();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1643
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1644
	else if (iInstance == 2)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1645
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1646
		// This is the test (TC 1.1.1.7.1):
957c583b417b 201039_07
hgs
parents:
diff changeset
  1647
		test_Equal(KErrServerBusy, iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  1648
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1649
	else if (iInstance == 1)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1650
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1651
		// Acknowledge at last
957c583b417b 201039_07
hgs
parents:
diff changeset
  1652
		test_KErrNone(iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  1653
		iMember->Acknowledge();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1654
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1655
	else
957c583b417b 201039_07
hgs
parents:
diff changeset
  1656
		test(0);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1657
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1658
957c583b417b 201039_07
hgs
parents:
diff changeset
  1659
957c583b417b 201039_07
hgs
parents:
diff changeset
  1660
class CDmDeferralTestKErrServerBusy : public CDmDeferralTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1661
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1662
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1663
	CDmDeferralTestKErrServerBusy(TDmHierarchyId aId, TDmDomainState aState);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1664
	~CDmDeferralTestKErrServerBusy();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1665
	// from CDmDeferralTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1666
	void DoPerform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1667
	// from MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1668
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1669
	void TransitionRequestComplete();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1670
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1671
	TestServerBusy* iDeferral1;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1672
	TestServerBusy* iDeferral2;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1673
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1674
957c583b417b 201039_07
hgs
parents:
diff changeset
  1675
957c583b417b 201039_07
hgs
parents:
diff changeset
  1676
CDmDeferralTestKErrServerBusy::CDmDeferralTestKErrServerBusy(TDmHierarchyId aId,
957c583b417b 201039_07
hgs
parents:
diff changeset
  1677
															 TDmDomainState aState)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1678
	: CDmDeferralTest(aId, aState)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1679
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1680
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1681
957c583b417b 201039_07
hgs
parents:
diff changeset
  1682
957c583b417b 201039_07
hgs
parents:
diff changeset
  1683
CDmDeferralTestKErrServerBusy::~CDmDeferralTestKErrServerBusy()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1684
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1685
	delete iDeferral1;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1686
	delete iDeferral2;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1687
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1688
957c583b417b 201039_07
hgs
parents:
diff changeset
  1689
957c583b417b 201039_07
hgs
parents:
diff changeset
  1690
void CDmDeferralTestKErrServerBusy::DoPerform()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1691
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1692
	test.Next(_L("CDmDeferralTestKErrServerBusy"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1693
957c583b417b 201039_07
hgs
parents:
diff changeset
  1694
	iMember = new CDmTestMember(iHierarchyId, KDmIdTestCAA, 0, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1695
	test_NotNull(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1696
957c583b417b 201039_07
hgs
parents:
diff changeset
  1697
	iDeferral1 = new TestServerBusy(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1698
	test_NotNull(iDeferral1);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1699
	iDeferral2 = new TestServerBusy(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1700
	test_NotNull(iDeferral2);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1701
957c583b417b 201039_07
hgs
parents:
diff changeset
  1702
	iManager.RequestSystemTransition(iState, ETraverseDefault, CActive::iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1703
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1704
957c583b417b 201039_07
hgs
parents:
diff changeset
  1705
957c583b417b 201039_07
hgs
parents:
diff changeset
  1706
TInt CDmDeferralTestKErrServerBusy::TransitionNotification(MDmDomainMember&)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1707
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1708
	RDebug::Printf("CDmDeferralTestKErrServerBusy::TransitionNotification()");
957c583b417b 201039_07
hgs
parents:
diff changeset
  1709
957c583b417b 201039_07
hgs
parents:
diff changeset
  1710
	iDeferral1->PrimeTimer();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1711
957c583b417b 201039_07
hgs
parents:
diff changeset
  1712
	iDeferral2->PrimeTimer();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1713
957c583b417b 201039_07
hgs
parents:
diff changeset
  1714
	// don't acknowledge yet
957c583b417b 201039_07
hgs
parents:
diff changeset
  1715
	return KErrAbort;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1716
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1717
957c583b417b 201039_07
hgs
parents:
diff changeset
  1718
957c583b417b 201039_07
hgs
parents:
diff changeset
  1719
void CDmDeferralTestKErrServerBusy::TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1720
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1721
	RDebug::Printf("CDmDeferralTestKErrServerBusy::TransitionRequestComplete()");
957c583b417b 201039_07
hgs
parents:
diff changeset
  1722
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1723
957c583b417b 201039_07
hgs
parents:
diff changeset
  1724
957c583b417b 201039_07
hgs
parents:
diff changeset
  1725
/**
957c583b417b 201039_07
hgs
parents:
diff changeset
  1726
   DeferAcknowledgement() with status KErrCancel.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1727
957c583b417b 201039_07
hgs
parents:
diff changeset
  1728
   1. Client receives notification, defers once and then cancels before the next
957c583b417b 201039_07
hgs
parents:
diff changeset
  1729
   notification.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1730
   2. Client receives notification, cancels deferral without one outstanding.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1731
*/
957c583b417b 201039_07
hgs
parents:
diff changeset
  1732
class TestCancel : public ActiveMember
957c583b417b 201039_07
hgs
parents:
diff changeset
  1733
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1734
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1735
	TestCancel(CDmTestMember* aMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1736
		: ActiveMember(aMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1737
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1738
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1739
	void RunL()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1740
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1741
		RDebug::Printf("TestCancel::RunL(): %d", iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  1742
957c583b417b 201039_07
hgs
parents:
diff changeset
  1743
		// This is the test (TC 1.1.1.4.1):
957c583b417b 201039_07
hgs
parents:
diff changeset
  1744
		test_Equal(KErrCancel, iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  1745
957c583b417b 201039_07
hgs
parents:
diff changeset
  1746
		// Acknowledge at last
957c583b417b 201039_07
hgs
parents:
diff changeset
  1747
		iMember->Acknowledge();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1748
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1749
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1750
957c583b417b 201039_07
hgs
parents:
diff changeset
  1751
957c583b417b 201039_07
hgs
parents:
diff changeset
  1752
class CDmDeferralTestKErrCancel : public CDmDeferralTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1753
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1754
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1755
	CDmDeferralTestKErrCancel(TDmHierarchyId aId, TDmDomainState aState, TBool aDeferFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1756
	~CDmDeferralTestKErrCancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1757
	// from CDmDeferralTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1758
	void DoPerform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1759
	// from MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1760
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1761
	void TransitionRequestComplete();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1762
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1763
	TestCancel* iCancel;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1764
	const TBool iDeferFirst;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1765
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1766
957c583b417b 201039_07
hgs
parents:
diff changeset
  1767
957c583b417b 201039_07
hgs
parents:
diff changeset
  1768
CDmDeferralTestKErrCancel::CDmDeferralTestKErrCancel(TDmHierarchyId aId,
957c583b417b 201039_07
hgs
parents:
diff changeset
  1769
													 TDmDomainState aState,
957c583b417b 201039_07
hgs
parents:
diff changeset
  1770
													 TBool aDeferFirst)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1771
	: CDmDeferralTest(aId, aState), iDeferFirst(aDeferFirst)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1772
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1773
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1774
957c583b417b 201039_07
hgs
parents:
diff changeset
  1775
957c583b417b 201039_07
hgs
parents:
diff changeset
  1776
CDmDeferralTestKErrCancel::~CDmDeferralTestKErrCancel()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1777
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1778
	delete iCancel;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1779
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1780
957c583b417b 201039_07
hgs
parents:
diff changeset
  1781
957c583b417b 201039_07
hgs
parents:
diff changeset
  1782
void CDmDeferralTestKErrCancel::DoPerform()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1783
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1784
	test.Next(_L("CDmDeferralTestKErrCancel"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1785
957c583b417b 201039_07
hgs
parents:
diff changeset
  1786
	iMember = new CDmTestMember(iHierarchyId, KDmIdTestABA, 0, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1787
	test_NotNull(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1788
957c583b417b 201039_07
hgs
parents:
diff changeset
  1789
	iCancel = new TestCancel(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1790
	test_NotNull(iCancel);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1791
957c583b417b 201039_07
hgs
parents:
diff changeset
  1792
	iManager.RequestSystemTransition(iState, ETraverseDefault, CActive::iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1793
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1794
957c583b417b 201039_07
hgs
parents:
diff changeset
  1795
957c583b417b 201039_07
hgs
parents:
diff changeset
  1796
TInt CDmDeferralTestKErrCancel::TransitionNotification(MDmDomainMember&)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1797
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1798
	RDebug::Printf("CDmDeferralTestKErrCancel::TransitionNotification()");
957c583b417b 201039_07
hgs
parents:
diff changeset
  1799
957c583b417b 201039_07
hgs
parents:
diff changeset
  1800
	if (iDeferFirst)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1801
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1802
		// Test case 1: First ask for a deferral...
957c583b417b 201039_07
hgs
parents:
diff changeset
  1803
		iCancel->Defer();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1804
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1805
957c583b417b 201039_07
hgs
parents:
diff changeset
  1806
	// Test cases 1 & 2: Cancel deferral request.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1807
957c583b417b 201039_07
hgs
parents:
diff changeset
  1808
	// RDmDomainSession::CancelDeferral() checks if
957c583b417b 201039_07
hgs
parents:
diff changeset
  1809
	// RSessionBase::SendReceive(EDmStateCancelDeferral) returned KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1810
	// if not it will panic the client. (TC 1.1.1.4.2)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1811
957c583b417b 201039_07
hgs
parents:
diff changeset
  1812
	iMember->iDomain.CancelDeferral();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1813
957c583b417b 201039_07
hgs
parents:
diff changeset
  1814
	if (iDeferFirst)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1815
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1816
		// don't acknowledge yet (RunL() will)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1817
		return KErrAbort;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1818
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1819
	else
957c583b417b 201039_07
hgs
parents:
diff changeset
  1820
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1821
		return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1822
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1823
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1824
957c583b417b 201039_07
hgs
parents:
diff changeset
  1825
957c583b417b 201039_07
hgs
parents:
diff changeset
  1826
void CDmDeferralTestKErrCancel::TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1827
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1828
	RDebug::Printf("CDmDeferralTestKErrCancel::TransitionRequestComplete()");
957c583b417b 201039_07
hgs
parents:
diff changeset
  1829
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1830
957c583b417b 201039_07
hgs
parents:
diff changeset
  1831
957c583b417b 201039_07
hgs
parents:
diff changeset
  1832
/**
957c583b417b 201039_07
hgs
parents:
diff changeset
  1833
   DeferAcknowledgement() with status KErrNotReady.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1834
957c583b417b 201039_07
hgs
parents:
diff changeset
  1835
   1. Client defers before a transition notification.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1836
   2. Client receives notification, defers once and then defers again after the
957c583b417b 201039_07
hgs
parents:
diff changeset
  1837
   next notification.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1838
*/
957c583b417b 201039_07
hgs
parents:
diff changeset
  1839
class TestNotReady : public ActiveMember
957c583b417b 201039_07
hgs
parents:
diff changeset
  1840
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1841
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1842
	TestNotReady(CDmTestMember* aMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1843
		: ActiveMember(aMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1844
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1845
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1846
	void RunL()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1847
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1848
		RDebug::Printf("TestNotReady::RunL(): %d", iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  1849
957c583b417b 201039_07
hgs
parents:
diff changeset
  1850
		// This is the test (TC 1.1.1.5.1):
957c583b417b 201039_07
hgs
parents:
diff changeset
  1851
		test_Equal(KErrNotReady, iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  1852
957c583b417b 201039_07
hgs
parents:
diff changeset
  1853
		CActiveScheduler::Stop();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1854
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1855
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1856
957c583b417b 201039_07
hgs
parents:
diff changeset
  1857
957c583b417b 201039_07
hgs
parents:
diff changeset
  1858
class CDmDeferralTestKErrNotReady : public CDmDeferralTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1859
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1860
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1861
	CDmDeferralTestKErrNotReady(TDmHierarchyId aId, TDmDomainState aState);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1862
	~CDmDeferralTestKErrNotReady();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1863
	// from CDmDeferralTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1864
	void DoPerform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1865
	// from MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1866
	TInt TransitionNotification(MDmDomainMember& aDomainMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1867
	void TransitionRequestComplete();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1868
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1869
	TestNotReady* iNotReady;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1870
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1871
957c583b417b 201039_07
hgs
parents:
diff changeset
  1872
957c583b417b 201039_07
hgs
parents:
diff changeset
  1873
CDmDeferralTestKErrNotReady::CDmDeferralTestKErrNotReady(TDmHierarchyId aId,
957c583b417b 201039_07
hgs
parents:
diff changeset
  1874
														 TDmDomainState aState)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1875
	: CDmDeferralTest(aId, aState)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1876
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1877
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1878
957c583b417b 201039_07
hgs
parents:
diff changeset
  1879
957c583b417b 201039_07
hgs
parents:
diff changeset
  1880
CDmDeferralTestKErrNotReady::~CDmDeferralTestKErrNotReady()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1881
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1882
	delete iNotReady;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1883
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1884
957c583b417b 201039_07
hgs
parents:
diff changeset
  1885
957c583b417b 201039_07
hgs
parents:
diff changeset
  1886
void CDmDeferralTestKErrNotReady::DoPerform()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1887
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1888
	test.Next(_L("CDmDeferralTestKErrNotReady"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1889
957c583b417b 201039_07
hgs
parents:
diff changeset
  1890
	iMember = new CDmTestMember(iHierarchyId, KDmIdTestABA, 0, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1891
	test_NotNull(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1892
957c583b417b 201039_07
hgs
parents:
diff changeset
  1893
	iNotReady = new TestNotReady(iMember);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1894
	test_NotNull(iNotReady);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1895
957c583b417b 201039_07
hgs
parents:
diff changeset
  1896
	iNotReady->Defer();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1897
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1898
957c583b417b 201039_07
hgs
parents:
diff changeset
  1899
	iManager.RequestSystemTransition(iState, ETraverseDefault, CActive::iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1900
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1901
957c583b417b 201039_07
hgs
parents:
diff changeset
  1902
957c583b417b 201039_07
hgs
parents:
diff changeset
  1903
TInt CDmDeferralTestKErrNotReady::TransitionNotification(MDmDomainMember&)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1904
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1905
	RDebug::Printf("CDmDeferralTestKErrNotReady::TransitionNotification()");
957c583b417b 201039_07
hgs
parents:
diff changeset
  1906
957c583b417b 201039_07
hgs
parents:
diff changeset
  1907
	// don't acknowledge yet
957c583b417b 201039_07
hgs
parents:
diff changeset
  1908
	return KErrAbort;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1909
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1910
957c583b417b 201039_07
hgs
parents:
diff changeset
  1911
957c583b417b 201039_07
hgs
parents:
diff changeset
  1912
void CDmDeferralTestKErrNotReady::TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1913
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1914
	RDebug::Printf("CDmDeferralTestKErrNotReady::TransitionRequestComplete()");
957c583b417b 201039_07
hgs
parents:
diff changeset
  1915
957c583b417b 201039_07
hgs
parents:
diff changeset
  1916
	TRequestStatus status;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1917
	iMember->iDomain.DeferAcknowledgement(status);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1918
	User::WaitForRequest(status);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1919
957c583b417b 201039_07
hgs
parents:
diff changeset
  1920
	RDebug::Printf("Deferral status: %d", status.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  1921
957c583b417b 201039_07
hgs
parents:
diff changeset
  1922
	// This is the test (TC 1.1.1.5.2):
957c583b417b 201039_07
hgs
parents:
diff changeset
  1923
	test_Equal(KErrNotReady, status.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  1924
957c583b417b 201039_07
hgs
parents:
diff changeset
  1925
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1926
957c583b417b 201039_07
hgs
parents:
diff changeset
  1927
957c583b417b 201039_07
hgs
parents:
diff changeset
  1928
/**
957c583b417b 201039_07
hgs
parents:
diff changeset
  1929
   Policy interface tests - negative tests.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1930
957c583b417b 201039_07
hgs
parents:
diff changeset
  1931
   1. Ordinals return null or error.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1932
   2. Structure returned contains invalid values.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1933
*/
957c583b417b 201039_07
hgs
parents:
diff changeset
  1934
class CDmPolicyInterfaceTest : public MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1935
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1936
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1937
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1938
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1939
	TInt TransitionNotification(MDmDomainMember&)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1940
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1941
		return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1942
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1943
	void TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1944
		{}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1945
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  1946
957c583b417b 201039_07
hgs
parents:
diff changeset
  1947
957c583b417b 201039_07
hgs
parents:
diff changeset
  1948
void CDmPolicyInterfaceTest::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1949
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1950
	test.Next(_L("CDmPolicyInterfaceTest"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  1951
957c583b417b 201039_07
hgs
parents:
diff changeset
  1952
	// In domainpolicy95.dll ordinal 4 (DmPolicy::GetStateSpec) returns an
957c583b417b 201039_07
hgs
parents:
diff changeset
  1953
	// error. This will lead to the failure of the following call, which will
957c583b417b 201039_07
hgs
parents:
diff changeset
  1954
	// also execute the destructors of classes CDmHierarchy and
957c583b417b 201039_07
hgs
parents:
diff changeset
  1955
	// CHierarchySettings.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1956
	TInt r = RDmDomainManager::AddDomainHierarchy(KDmHierarchyIdTestV2_95);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1957
957c583b417b 201039_07
hgs
parents:
diff changeset
  1958
	// This is the test (TC 1.4.2.1):
957c583b417b 201039_07
hgs
parents:
diff changeset
  1959
	test_Equal(KDmErrBadDomainSpec, r);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1960
957c583b417b 201039_07
hgs
parents:
diff changeset
  1961
	// domainpolicy94.dll contains garbage values in the SDmStateSpecV1 struct.
957c583b417b 201039_07
hgs
parents:
diff changeset
  1962
	r = RDmDomainManager::AddDomainHierarchy(KDmHierarchyIdTestV2_94);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1963
957c583b417b 201039_07
hgs
parents:
diff changeset
  1964
	// This is the test (TC 1.4.2.2):
957c583b417b 201039_07
hgs
parents:
diff changeset
  1965
	test_Equal(KDmErrBadDomainSpec, r);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1966
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1967
957c583b417b 201039_07
hgs
parents:
diff changeset
  1968
957c583b417b 201039_07
hgs
parents:
diff changeset
  1969
void CDmPolicyInterfaceTest::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1970
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1971
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
  1972
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1973
957c583b417b 201039_07
hgs
parents:
diff changeset
  1974
957c583b417b 201039_07
hgs
parents:
diff changeset
  1975
/////////////////////// Failure Policy Tests //////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
  1976
// 2.4 [M] Domain Controller DC5 (different failure policies for different 
957c583b417b 201039_07
hgs
parents:
diff changeset
  1977
//         system state transitions)
957c583b417b 201039_07
hgs
parents:
diff changeset
  1978
//    * TC 2.4.1 Create V2 policy where some states are "stop" and some are 
957c583b417b 201039_07
hgs
parents:
diff changeset
  1979
//      "continue" on failure, get member(s) to fail 
957c583b417b 201039_07
hgs
parents:
diff changeset
  1980
//
957c583b417b 201039_07
hgs
parents:
diff changeset
  1981
957c583b417b 201039_07
hgs
parents:
diff changeset
  1982
class CDmFailurePolicyTest : public CActive, public MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1983
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  1984
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1985
	CDmFailurePolicyTest(TDmDomainState aState, TDmTransitionFailurePolicy aPolicy);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1986
	~CDmFailurePolicyTest();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1987
		
957c583b417b 201039_07
hgs
parents:
diff changeset
  1988
	// from CActive
957c583b417b 201039_07
hgs
parents:
diff changeset
  1989
	void RunL();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1990
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  1991
	// from MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  1992
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1993
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
  1994
	TInt TransitionNotification(MDmDomainMember&);
957c583b417b 201039_07
hgs
parents:
diff changeset
  1995
	void TransitionRequestComplete()
957c583b417b 201039_07
hgs
parents:
diff changeset
  1996
		{}
957c583b417b 201039_07
hgs
parents:
diff changeset
  1997
		
957c583b417b 201039_07
hgs
parents:
diff changeset
  1998
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  1999
	// from CActive
957c583b417b 201039_07
hgs
parents:
diff changeset
  2000
	virtual void DoCancel()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2001
		{ test(0); }
957c583b417b 201039_07
hgs
parents:
diff changeset
  2002
		
957c583b417b 201039_07
hgs
parents:
diff changeset
  2003
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2004
	RDmDomainManager iManager;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2005
	CDmTestMember*	 iMembers[2];
957c583b417b 201039_07
hgs
parents:
diff changeset
  2006
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2007
	TDmDomainState				iDmState;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2008
	TDmTransitionFailurePolicy	iFailPolicy;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2009
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  2010
957c583b417b 201039_07
hgs
parents:
diff changeset
  2011
957c583b417b 201039_07
hgs
parents:
diff changeset
  2012
CDmFailurePolicyTest::CDmFailurePolicyTest(TDmDomainState aState, TDmTransitionFailurePolicy aPolicy)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2013
	: CActive(CActive::EPriorityStandard), iDmState(aState), iFailPolicy(aPolicy)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2014
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2015
	iMembers[0] = iMembers[1] = 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2016
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2017
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2018
CDmFailurePolicyTest::~CDmFailurePolicyTest()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2019
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2020
	Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2021
	for (int i = 0; i < 2; i++)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2022
		delete iMembers[i], iMembers[i]= 0;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2023
	iManager.Close();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2024
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2025
957c583b417b 201039_07
hgs
parents:
diff changeset
  2026
void CDmFailurePolicyTest::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2027
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2028
	test.Next(_L("CDmFailurePolicyTest"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2029
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2030
	RDebug::Printf("CDmFailurePolicyTest::Perform: iFailPolicy(%d)", iFailPolicy);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2031
957c583b417b 201039_07
hgs
parents:
diff changeset
  2032
	// 1. Set up test hierarchy/domain & join it
957c583b417b 201039_07
hgs
parents:
diff changeset
  2033
	TInt r = RDmDomainManager::AddDomainHierarchy(KDmHierarchyIdTestV2);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2034
	test_KErrNone(r);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2035
	r = iManager.Connect(KDmHierarchyIdTestV2);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2036
	test_KErrNone(r);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2037
957c583b417b 201039_07
hgs
parents:
diff changeset
  2038
	// 2. Create the two members needed for this test. First does not ackn.
957c583b417b 201039_07
hgs
parents:
diff changeset
  2039
	iMembers[0] = new CDmTestMember(KDmHierarchyIdTestV2, KDmIdTestB, (iFailPolicy<<8)+0, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2040
	test_NotNull(iMembers[0]);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2041
	iMembers[1] = new CDmTestMember(KDmHierarchyIdTestV2, KDmIdTestBA, (iFailPolicy<<8)+1, this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2042
	test_NotNull(iMembers[1]);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2043
957c583b417b 201039_07
hgs
parents:
diff changeset
  2044
	// 3. Initiate state transition from iInitState to iDmState
957c583b417b 201039_07
hgs
parents:
diff changeset
  2045
	CActiveScheduler::Add(this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2046
	iManager.RequestDomainTransition(KDmIdTestB, iDmState, ETraverseParentsFirst, iStatus);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2047
	CActive::SetActive();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2048
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2049
957c583b417b 201039_07
hgs
parents:
diff changeset
  2050
	// Close iManager when this object is destroyed in destructor
957c583b417b 201039_07
hgs
parents:
diff changeset
  2051
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2052
957c583b417b 201039_07
hgs
parents:
diff changeset
  2053
TInt CDmFailurePolicyTest::TransitionNotification(MDmDomainMember& aMember)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2054
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2055
	RDebug::Printf("CDmFailurePolicyTest::TransitionNotification: aMember(%d)", aMember.Ordinal());
957c583b417b 201039_07
hgs
parents:
diff changeset
  2056
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2057
    if ((aMember.Ordinal() & 0xff ) == 0)		// Member in domain B
957c583b417b 201039_07
hgs
parents:
diff changeset
  2058
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2059
		if (((aMember.Ordinal() & 0xff00) >> 8) == 0) // Stop policy
957c583b417b 201039_07
hgs
parents:
diff changeset
  2060
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2061
			return KErrAbort; // Dont let this member in domain B ackn.
957c583b417b 201039_07
hgs
parents:
diff changeset
  2062
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2063
		else // Continue policy
957c583b417b 201039_07
hgs
parents:
diff changeset
  2064
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2065
			return KErrCommsParity; // Ackn with bizarre error
957c583b417b 201039_07
hgs
parents:
diff changeset
  2066
		}	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2067
    }
957c583b417b 201039_07
hgs
parents:
diff changeset
  2068
    
957c583b417b 201039_07
hgs
parents:
diff changeset
  2069
	// Should only reach here for Members of sub-domain BA
957c583b417b 201039_07
hgs
parents:
diff changeset
  2070
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2071
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2072
957c583b417b 201039_07
hgs
parents:
diff changeset
  2073
957c583b417b 201039_07
hgs
parents:
diff changeset
  2074
void CDmFailurePolicyTest::RunL()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2075
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2076
	RDebug::Printf("CDmFailurePolicyTest::RunL: istatus(%d)", iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  2077
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2078
	// Handle Transition completion code here. Should be a time out.
957c583b417b 201039_07
hgs
parents:
diff changeset
  2079
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2080
	// Based on failure policy check to see if the second member was transitioned
957c583b417b 201039_07
hgs
parents:
diff changeset
  2081
	// (continue) or whether it was not (stop). Since ETraverseParentsFirst is used
957c583b417b 201039_07
hgs
parents:
diff changeset
  2082
	// in the transition iMember[0] in domain B should fail and the iMember [1]
957c583b417b 201039_07
hgs
parents:
diff changeset
  2083
	// in domain BA may or may not then be transitioned....
957c583b417b 201039_07
hgs
parents:
diff changeset
  2084
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2085
	test_Equal(1, iMembers[0]->Notifications());
957c583b417b 201039_07
hgs
parents:
diff changeset
  2086
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2087
	if (iFailPolicy == ETransitionFailureContinue)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2088
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2089
		test_Equal(KErrCommsParity, iStatus.Int());		
957c583b417b 201039_07
hgs
parents:
diff changeset
  2090
		test_Equal(1, iMembers[1]->Notifications()); // Proves it did continue with transition
957c583b417b 201039_07
hgs
parents:
diff changeset
  2091
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2092
	else if (iFailPolicy == ETransitionFailureStop)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2093
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2094
		test_Equal(KErrTimedOut, iStatus.Int());
957c583b417b 201039_07
hgs
parents:
diff changeset
  2095
		test_Equal(0, iMembers[1]->Notifications()); // Proves it did stop transition
957c583b417b 201039_07
hgs
parents:
diff changeset
  2096
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2097
	else
957c583b417b 201039_07
hgs
parents:
diff changeset
  2098
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2099
		test(0); // Panic default case
957c583b417b 201039_07
hgs
parents:
diff changeset
  2100
		}	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2101
		
957c583b417b 201039_07
hgs
parents:
diff changeset
  2102
	test.Printf(_L("Test passed - failure policy (%d)\n"), iFailPolicy);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2103
	
957c583b417b 201039_07
hgs
parents:
diff changeset
  2104
	CActiveScheduler::Stop();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2105
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2106
957c583b417b 201039_07
hgs
parents:
diff changeset
  2107
957c583b417b 201039_07
hgs
parents:
diff changeset
  2108
void CDmFailurePolicyTest::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2109
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2110
	RDebug::Printf("CDmFailurePolicyTest::Release");
957c583b417b 201039_07
hgs
parents:
diff changeset
  2111
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2112
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2113
957c583b417b 201039_07
hgs
parents:
diff changeset
  2114
/****************************** CDmDomainKeepAlive Functional coverage test ******************************/
957c583b417b 201039_07
hgs
parents:
diff changeset
  2115
// CDmKeepAliveFuncCov
957c583b417b 201039_07
hgs
parents:
diff changeset
  2116
class CDmKeepAliveFuncCov : public CDmDomainKeepAlive
957c583b417b 201039_07
hgs
parents:
diff changeset
  2117
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2118
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2119
	enum TMemKeepAliveCovTests { ECovHandleError, ECovDoCancel };
957c583b417b 201039_07
hgs
parents:
diff changeset
  2120
957c583b417b 201039_07
hgs
parents:
diff changeset
  2121
	static CDmKeepAliveFuncCov* NewL(TDmHierarchyId aHierarchy, TDmDomainId aId);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2122
	~CDmKeepAliveFuncCov();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2123
957c583b417b 201039_07
hgs
parents:
diff changeset
  2124
	// from CDmDomainKeepAlive
957c583b417b 201039_07
hgs
parents:
diff changeset
  2125
	void HandleTransitionL();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2126
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2127
	CDmKeepAliveFuncCov(TDmHierarchyId aHierarchy, TDmDomainId aId);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2128
957c583b417b 201039_07
hgs
parents:
diff changeset
  2129
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2130
	TMemKeepAliveCovTests iDmMemCov;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2131
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  2132
957c583b417b 201039_07
hgs
parents:
diff changeset
  2133
CDmKeepAliveFuncCov* CDmKeepAliveFuncCov::NewL(TDmHierarchyId aHierarchy, TDmDomainId aId)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2134
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2135
	CDmKeepAliveFuncCov* self=new (ELeave) CDmKeepAliveFuncCov(aHierarchy, aId);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2136
	CleanupStack::PushL(self);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2137
	self->ConstructL();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2138
957c583b417b 201039_07
hgs
parents:
diff changeset
  2139
	self->RequestTransitionNotification();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2140
957c583b417b 201039_07
hgs
parents:
diff changeset
  2141
	CleanupStack::Pop();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2142
	return self;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2143
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2144
957c583b417b 201039_07
hgs
parents:
diff changeset
  2145
CDmKeepAliveFuncCov::~CDmKeepAliveFuncCov()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2146
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2147
	Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2148
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2149
957c583b417b 201039_07
hgs
parents:
diff changeset
  2150
CDmKeepAliveFuncCov::CDmKeepAliveFuncCov(TDmHierarchyId aHierarchy, TDmDomainId aId):
957c583b417b 201039_07
hgs
parents:
diff changeset
  2151
	CDmDomainKeepAlive(aHierarchy, aId)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2152
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2153
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2154
957c583b417b 201039_07
hgs
parents:
diff changeset
  2155
void CDmKeepAliveFuncCov::HandleTransitionL()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2156
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2157
	switch(iDmMemCov)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2158
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2159
		case ECovHandleError:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2160
			// Simply ack. Since the request transition is for 0 deferral 
957c583b417b 201039_07
hgs
parents:
diff changeset
  2161
			// KErrNotSupported will anyways happen
957c583b417b 201039_07
hgs
parents:
diff changeset
  2162
			GetState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2163
			AcknowledgeLastState(KErrNone);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2164
			RequestTransitionNotification();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2165
			break;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2166
		case ECovDoCancel:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2167
			// do nothing, let the keep alive deferrals be active and let the CDmKeepAliveFuncCovTest delete this object
957c583b417b 201039_07
hgs
parents:
diff changeset
  2168
			CActiveScheduler::Stop();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2169
			break;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2170
		default:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2171
			User::Leave(KErrUnknown);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2172
			break;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2173
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2174
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2175
957c583b417b 201039_07
hgs
parents:
diff changeset
  2176
class CDmDomainManFuncCov : public CDmDomainManager
957c583b417b 201039_07
hgs
parents:
diff changeset
  2177
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2178
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2179
	static CDmDomainManFuncCov* NewL(TDmHierarchyId aHierarchy);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2180
	~CDmDomainManFuncCov();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2181
957c583b417b 201039_07
hgs
parents:
diff changeset
  2182
	// from CDmDomainManager
957c583b417b 201039_07
hgs
parents:
diff changeset
  2183
	void RunL();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2184
private:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2185
	CDmDomainManFuncCov(TDmHierarchyId aHierarchy);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2186
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  2187
957c583b417b 201039_07
hgs
parents:
diff changeset
  2188
CDmDomainManFuncCov* CDmDomainManFuncCov::NewL(TDmHierarchyId aHierarchy)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2189
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2190
	CDmDomainManFuncCov* self=new (ELeave) CDmDomainManFuncCov(aHierarchy);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2191
	CleanupStack::PushL(self);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2192
957c583b417b 201039_07
hgs
parents:
diff changeset
  2193
	self->ConstructL();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2194
	CleanupStack::Pop();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2195
	return self;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2196
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2197
957c583b417b 201039_07
hgs
parents:
diff changeset
  2198
CDmDomainManFuncCov::~CDmDomainManFuncCov()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2199
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2200
	Cancel();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2201
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2202
957c583b417b 201039_07
hgs
parents:
diff changeset
  2203
CDmDomainManFuncCov::CDmDomainManFuncCov(TDmHierarchyId aHierarchy) :
957c583b417b 201039_07
hgs
parents:
diff changeset
  2204
	CDmDomainManager(aHierarchy)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2205
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2206
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2207
957c583b417b 201039_07
hgs
parents:
diff changeset
  2208
void CDmDomainManFuncCov::RunL()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2209
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2210
	CActiveScheduler::Stop();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2211
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2212
957c583b417b 201039_07
hgs
parents:
diff changeset
  2213
class CDmKeepAliveFuncCovTest : public CActive, public MDmTest
957c583b417b 201039_07
hgs
parents:
diff changeset
  2214
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2215
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2216
	CDmKeepAliveFuncCovTest() : CActive(CActive::EPriorityStandard) {};
957c583b417b 201039_07
hgs
parents:
diff changeset
  2217
	void Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2218
	void Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2219
957c583b417b 201039_07
hgs
parents:
diff changeset
  2220
	TInt TransitionNotification(MDmDomainMember&) { return KErrNone; };
957c583b417b 201039_07
hgs
parents:
diff changeset
  2221
	void TransitionRequestComplete() {};
957c583b417b 201039_07
hgs
parents:
diff changeset
  2222
957c583b417b 201039_07
hgs
parents:
diff changeset
  2223
		// from CActive
957c583b417b 201039_07
hgs
parents:
diff changeset
  2224
	void RunL() {};
957c583b417b 201039_07
hgs
parents:
diff changeset
  2225
	virtual void DoCancel()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2226
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2227
		test(0);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2228
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2229
957c583b417b 201039_07
hgs
parents:
diff changeset
  2230
public:
957c583b417b 201039_07
hgs
parents:
diff changeset
  2231
	CDmDomainManFuncCov*		iTestDomainManager;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2232
	};
957c583b417b 201039_07
hgs
parents:
diff changeset
  2233
957c583b417b 201039_07
hgs
parents:
diff changeset
  2234
void CDmKeepAliveFuncCovTest::Perform()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2235
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2236
 	__UHEAP_MARK;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2237
957c583b417b 201039_07
hgs
parents:
diff changeset
  2238
	CActiveScheduler::Add(this);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2239
957c583b417b 201039_07
hgs
parents:
diff changeset
  2240
	test.Printf(_L("****************CFunctionalCoverageTest****************\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2241
	test.Next(_L("Test to perform code coverage"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2242
957c583b417b 201039_07
hgs
parents:
diff changeset
  2243
	TInt r = CDmDomainManager::AddDomainHierarchy(KDmHierarchyIdTestV2);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2244
	test(r == KErrNone);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2245
957c583b417b 201039_07
hgs
parents:
diff changeset
  2246
	TRAP_IGNORE(iTestDomainManager = CDmDomainManFuncCov::NewL(KDmHierarchyIdTestV2));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2247
	test (iTestDomainManager != NULL);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2248
957c583b417b 201039_07
hgs
parents:
diff changeset
  2249
	CDmKeepAliveFuncCov* member = NULL;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2250
	// Add some test hierarchy members
957c583b417b 201039_07
hgs
parents:
diff changeset
  2251
	TRAP(r, member = CDmKeepAliveFuncCov::NewL(KDmHierarchyIdTestV2, KDmIdRoot));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2252
	test(member != NULL);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2253
957c583b417b 201039_07
hgs
parents:
diff changeset
  2254
	SDmStateSpecV1 aStateSpec = Get0DeferralState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2255
957c583b417b 201039_07
hgs
parents:
diff changeset
  2256
	TDmDomainState		testState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2257
957c583b417b 201039_07
hgs
parents:
diff changeset
  2258
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
  2259
	iTestDomainManager->RequestSystemTransition(testState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2260
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2261
957c583b417b 201039_07
hgs
parents:
diff changeset
  2262
	member->iDmMemCov = CDmKeepAliveFuncCov::ECovHandleError;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2263
957c583b417b 201039_07
hgs
parents:
diff changeset
  2264
	test.Printf(_L("HandleDeferralError functional coverage...\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2265
	// wait for test transition to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
  2266
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2267
957c583b417b 201039_07
hgs
parents:
diff changeset
  2268
	test.Printf(_L("......system transition completed\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2269
957c583b417b 201039_07
hgs
parents:
diff changeset
  2270
	aStateSpec = GetMaxDeferralState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2271
	testState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2272
957c583b417b 201039_07
hgs
parents:
diff changeset
  2273
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
  2274
	iTestDomainManager->RequestSystemTransition(testState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2275
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2276
957c583b417b 201039_07
hgs
parents:
diff changeset
  2277
	member->iDmMemCov = CDmKeepAliveFuncCov::ECovDoCancel;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2278
	test.Printf(_L("DoCancel functional coverage...\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2279
	// wait for the member to call CActiveScheduler::Stop
957c583b417b 201039_07
hgs
parents:
diff changeset
  2280
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2281
	delete member;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2282
957c583b417b 201039_07
hgs
parents:
diff changeset
  2283
	// wait for test transition to complete
957c583b417b 201039_07
hgs
parents:
diff changeset
  2284
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2285
	test.Printf(_L("......system transition completed\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2286
957c583b417b 201039_07
hgs
parents:
diff changeset
  2287
	// Add some test hierarchy members
957c583b417b 201039_07
hgs
parents:
diff changeset
  2288
	TRAP(r, member = CDmKeepAliveFuncCov::NewL(KDmHierarchyIdTestV2, KDmIdRoot));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2289
	test(member != NULL);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2290
957c583b417b 201039_07
hgs
parents:
diff changeset
  2291
	aStateSpec = GetMaxDeferralState();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2292
	testState =  aStateSpec.iState;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2293
957c583b417b 201039_07
hgs
parents:
diff changeset
  2294
	// request a system transition
957c583b417b 201039_07
hgs
parents:
diff changeset
  2295
	iTestDomainManager->RequestSystemTransition(testState, ETraverseChildrenFirst);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2296
	test.Printf(_L("Requested system transition\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2297
957c583b417b 201039_07
hgs
parents:
diff changeset
  2298
	member->iDmMemCov = CDmKeepAliveFuncCov::ECovDoCancel; // just so that the member will call CActiveScheduler::Stop
957c583b417b 201039_07
hgs
parents:
diff changeset
  2299
957c583b417b 201039_07
hgs
parents:
diff changeset
  2300
	test.Printf(_L("DoCancel functional coverage...\n"));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2301
	// wait for the member to call CActiveScheduler::Stop
957c583b417b 201039_07
hgs
parents:
diff changeset
  2302
	CActiveScheduler::Start();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2303
957c583b417b 201039_07
hgs
parents:
diff changeset
  2304
	delete iTestDomainManager;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2305
	delete member;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2306
957c583b417b 201039_07
hgs
parents:
diff changeset
  2307
	__UHEAP_MARKEND;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2308
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2309
957c583b417b 201039_07
hgs
parents:
diff changeset
  2310
void CDmKeepAliveFuncCovTest::Release()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2311
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2312
	delete this;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2313
	}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2314
957c583b417b 201039_07
hgs
parents:
diff changeset
  2315
957c583b417b 201039_07
hgs
parents:
diff changeset
  2316
///////////////////////////////////////////////////////////////////////////////
957c583b417b 201039_07
hgs
parents:
diff changeset
  2317
// --- Main() ---
957c583b417b 201039_07
hgs
parents:
diff changeset
  2318
957c583b417b 201039_07
hgs
parents:
diff changeset
  2319
GLDEF_C TInt E32Main()
957c583b417b 201039_07
hgs
parents:
diff changeset
  2320
	{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2321
	CTrapCleanup* trapHandler = CTrapCleanup::New();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2322
	test(trapHandler != NULL);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2323
957c583b417b 201039_07
hgs
parents:
diff changeset
  2324
	CActiveScheduler* scheduler = new CActiveScheduler();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2325
	test(scheduler != NULL);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2326
	CActiveScheduler::Install(scheduler);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2327
957c583b417b 201039_07
hgs
parents:
diff changeset
  2328
	// Turn off evil lazy dll unloading
957c583b417b 201039_07
hgs
parents:
diff changeset
  2329
	RLoader l;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2330
	test(l.Connect() == KErrNone);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2331
	test(l.CancelLazyDllUnload()== KErrNone);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2332
	l.Close();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2333
957c583b417b 201039_07
hgs
parents:
diff changeset
  2334
	// Default number of iteration
957c583b417b 201039_07
hgs
parents:
diff changeset
  2335
    TInt iter = 1;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2336
957c583b417b 201039_07
hgs
parents:
diff changeset
  2337
	TInt len = User::CommandLineLength();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2338
	if (len)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2339
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2340
		// Copy the command line in a buffer
957c583b417b 201039_07
hgs
parents:
diff changeset
  2341
		HBufC* hb = HBufC::NewMax(len);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2342
		test(hb != NULL);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2343
		TPtr cmd((TUint16*) hb->Ptr(), len);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2344
		User::CommandLine(cmd);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2345
		// Extract the number of iterations
957c583b417b 201039_07
hgs
parents:
diff changeset
  2346
		TLex l(cmd);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2347
		TInt i;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2348
		TInt r = l.Val(i);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2349
		if (r == KErrNone)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2350
			iter = i;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2351
		else
957c583b417b 201039_07
hgs
parents:
diff changeset
  2352
			// strange command - silently ignore
957c583b417b 201039_07
hgs
parents:
diff changeset
  2353
			{}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2354
		delete hb;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2355
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2356
957c583b417b 201039_07
hgs
parents:
diff changeset
  2357
	test.Title();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2358
957c583b417b 201039_07
hgs
parents:
diff changeset
  2359
	test.Start(_L("Test starting..."));
957c583b417b 201039_07
hgs
parents:
diff changeset
  2360
957c583b417b 201039_07
hgs
parents:
diff changeset
  2361
	test.Printf(_L("Go for %d iterations\n"), iter);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2362
957c583b417b 201039_07
hgs
parents:
diff changeset
  2363
	// Remember the number of open handles. Just for a sanity check
957c583b417b 201039_07
hgs
parents:
diff changeset
  2364
	TInt start_thc, start_phc;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2365
	RThread().HandleCount(start_phc, start_thc);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2366
957c583b417b 201039_07
hgs
parents:
diff changeset
  2367
	for (TInt i = 1; i <= iter; i++)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2368
		{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2369
		test.Printf(_L("\nThis iteration: %d\n"), i);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2370
957c583b417b 201039_07
hgs
parents:
diff changeset
  2371
		MDmTest* tests[] =
957c583b417b 201039_07
hgs
parents:
diff changeset
  2372
			{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2373
			// DM Client PlatSec tests
957c583b417b 201039_07
hgs
parents:
diff changeset
  2374
			new CDmTestPlatSec(TPtrC(KSecuritySlavePath1)),
957c583b417b 201039_07
hgs
parents:
diff changeset
  2375
			new CDmTestPlatSec(TPtrC(KSecuritySlavePath2)),
957c583b417b 201039_07
hgs
parents:
diff changeset
  2376
			new CDmTestPlatSec(TPtrC(KSecuritySlavePath3)),
957c583b417b 201039_07
hgs
parents:
diff changeset
  2377
957c583b417b 201039_07
hgs
parents:
diff changeset
  2378
			// Domain Member R-Class API tests
957c583b417b 201039_07
hgs
parents:
diff changeset
  2379
			new CDmDeferralTestKErrNone(KDmHierarchyIdTestV2, EShutdownCritical, 1, ETrue), // TC 1.1.1.1.1
957c583b417b 201039_07
hgs
parents:
diff changeset
  2380
			new CDmDeferralTestKErrNone(KDmHierarchyIdTestV2, EShutdownCritical, 2, ETrue), // TC 1.1.1.1.2
957c583b417b 201039_07
hgs
parents:
diff changeset
  2381
			new CDmDeferralTestKErrNone(KDmHierarchyIdTestV2, EShutdownCritical, 1, EFalse), // TC 1.1.1.1.3
957c583b417b 201039_07
hgs
parents:
diff changeset
  2382
			new CDmDeferralTestCompletion(KDmHierarchyIdTestV2, EBackupMode), // TC 1.1.1.2.1
957c583b417b 201039_07
hgs
parents:
diff changeset
  2383
			new CDmDeferralTestKErrNotSupported(KDmHierarchyIdTestV2, EShutdownCritical, 6), // TC 1.1.1.3.1
957c583b417b 201039_07
hgs
parents:
diff changeset
  2384
			new CDmDeferralTestKErrNotSupported(KDmHierarchyIdTestV2, ENormalRunning, 1), // TC 1.1.1.3.2
957c583b417b 201039_07
hgs
parents:
diff changeset
  2385
			new CDmDeferralTestKErrNotSupported(KDmHierarchyIdTest, EBackupMode, 1), // TC 1.1.1.3.3
957c583b417b 201039_07
hgs
parents:
diff changeset
  2386
			new CDmDeferralTestKErrCancel(KDmHierarchyIdTestV2, EBackupMode, ETrue), // TC 1.1.1.4.1
957c583b417b 201039_07
hgs
parents:
diff changeset
  2387
			new CDmDeferralTestKErrCancel(KDmHierarchyIdTestV2, EBackupMode, EFalse), // TC 1.1.1.4.2
957c583b417b 201039_07
hgs
parents:
diff changeset
  2388
			new CDmDeferralTestKErrNotReady(KDmHierarchyIdTestV2, EBackupMode), // TC 1.1.1.5.1
957c583b417b 201039_07
hgs
parents:
diff changeset
  2389
			new CDmDeferralTestKErrServerBusy(KDmHierarchyIdTestV2, ERestoreMode), // TC 1.1.1.7.1
957c583b417b 201039_07
hgs
parents:
diff changeset
  2390
957c583b417b 201039_07
hgs
parents:
diff changeset
  2391
			new CDmDeferralTestKErrNone(KDmHierarchyIdTestV2, ERestoreMode, 0, ETrue), // TC 1.2.0
957c583b417b 201039_07
hgs
parents:
diff changeset
  2392
			new CDmDeferralTestKErrNone(KDmHierarchyIdTestV2, ERestoreMode, 1, ETrue), // TC 1.2.1
957c583b417b 201039_07
hgs
parents:
diff changeset
  2393
			new CDmDeferralTestKErrNone(KDmHierarchyIdTestV2, ERestoreMode, 2, ETrue), // TC 1.2.2
957c583b417b 201039_07
hgs
parents:
diff changeset
  2394
			new CDmDeferralTestKErrNone(KDmHierarchyIdTestV2, ERestoreMode, 3, ETrue), // TC 1.2.3
957c583b417b 201039_07
hgs
parents:
diff changeset
  2395
957c583b417b 201039_07
hgs
parents:
diff changeset
  2396
			new	CDmDeferralMixed(KDmHierarchyIdTestV2, EShutdownCritical, 3, ETrue,EFalse), // TC 1.3.1
957c583b417b 201039_07
hgs
parents:
diff changeset
  2397
			new	CDmDeferralMixed(KDmHierarchyIdTestV2, EShutdownCritical, 3, ETrue,ETrue),  // TC 1.3.2
957c583b417b 201039_07
hgs
parents:
diff changeset
  2398
957c583b417b 201039_07
hgs
parents:
diff changeset
  2399
			// Domain Member C-Class API tests
957c583b417b 201039_07
hgs
parents:
diff changeset
  2400
			new CDmDomainKeepAliveTest(),
957c583b417b 201039_07
hgs
parents:
diff changeset
  2401
957c583b417b 201039_07
hgs
parents:
diff changeset
  2402
			// Policy State Spec Failure Policy tests - transition timeouts
957c583b417b 201039_07
hgs
parents:
diff changeset
  2403
			//   ETransitionFailureUsePolicyFromOrdinal3
957c583b417b 201039_07
hgs
parents:
diff changeset
  2404
			new CDmFailurePolicyTest(EStartupCriticalStatic, HierarchyPolicy.iFailurePolicy),
957c583b417b 201039_07
hgs
parents:
diff changeset
  2405
			new CDmFailurePolicyTest(EStartupCriticalDynamic, ETransitionFailureStop),
957c583b417b 201039_07
hgs
parents:
diff changeset
  2406
			new CDmFailurePolicyTest(ENormalRunning, ETransitionFailureContinue),
957c583b417b 201039_07
hgs
parents:
diff changeset
  2407
957c583b417b 201039_07
hgs
parents:
diff changeset
  2408
			// Policy Interface tests
957c583b417b 201039_07
hgs
parents:
diff changeset
  2409
			new CDmPolicyInterfaceTest(),
957c583b417b 201039_07
hgs
parents:
diff changeset
  2410
957c583b417b 201039_07
hgs
parents:
diff changeset
  2411
			// Functional coverage test
957c583b417b 201039_07
hgs
parents:
diff changeset
  2412
			new CDmKeepAliveFuncCovTest(),
957c583b417b 201039_07
hgs
parents:
diff changeset
  2413
			};
957c583b417b 201039_07
hgs
parents:
diff changeset
  2414
957c583b417b 201039_07
hgs
parents:
diff changeset
  2415
		for (TUint j = 0; j < sizeof(tests)/sizeof(*tests); j++)
957c583b417b 201039_07
hgs
parents:
diff changeset
  2416
			{
957c583b417b 201039_07
hgs
parents:
diff changeset
  2417
			test(tests[j] != NULL);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2418
			tests[j]->Perform();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2419
			tests[j]->Release();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2420
			}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2421
		}
957c583b417b 201039_07
hgs
parents:
diff changeset
  2422
957c583b417b 201039_07
hgs
parents:
diff changeset
  2423
	test.End();
957c583b417b 201039_07
hgs
parents:
diff changeset
  2424
957c583b417b 201039_07
hgs
parents:
diff changeset
  2425
	// Sanity check for open handles and for pending requests
957c583b417b 201039_07
hgs
parents:
diff changeset
  2426
	TInt end_thc, end_phc;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2427
	RThread().HandleCount(end_phc, end_thc);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2428
	test(start_thc == end_thc);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2429
	test(start_phc == end_phc);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2430
	test(RThread().RequestCount() >= 0);
957c583b417b 201039_07
hgs
parents:
diff changeset
  2431
957c583b417b 201039_07
hgs
parents:
diff changeset
  2432
	delete scheduler;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2433
	delete trapHandler;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2434
957c583b417b 201039_07
hgs
parents:
diff changeset
  2435
	return KErrNone;
957c583b417b 201039_07
hgs
parents:
diff changeset
  2436
	}