persistentstorage/sql/TEST/t_sqlbur2.cpp
author hgs
Mon, 27 Sep 2010 11:59:56 +0100
changeset 51 7d4490026038
child 55 44f437012c90
permissions -rw-r--r--
201037_06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
7d4490026038 201037_06
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
7d4490026038 201037_06
hgs
parents:
diff changeset
     2
// All rights reserved.
7d4490026038 201037_06
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
7d4490026038 201037_06
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
7d4490026038 201037_06
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
7d4490026038 201037_06
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
7d4490026038 201037_06
hgs
parents:
diff changeset
     7
//
7d4490026038 201037_06
hgs
parents:
diff changeset
     8
// Initial Contributors:
7d4490026038 201037_06
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
7d4490026038 201037_06
hgs
parents:
diff changeset
    10
//
7d4490026038 201037_06
hgs
parents:
diff changeset
    11
// Contributors:
7d4490026038 201037_06
hgs
parents:
diff changeset
    12
//
7d4490026038 201037_06
hgs
parents:
diff changeset
    13
// Description:
7d4490026038 201037_06
hgs
parents:
diff changeset
    14
//
7d4490026038 201037_06
hgs
parents:
diff changeset
    15
7d4490026038 201037_06
hgs
parents:
diff changeset
    16
#include <e32test.h>
7d4490026038 201037_06
hgs
parents:
diff changeset
    17
#include <bautils.h>
7d4490026038 201037_06
hgs
parents:
diff changeset
    18
#include <sqldb.h>
7d4490026038 201037_06
hgs
parents:
diff changeset
    19
#include <e32math.h>
7d4490026038 201037_06
hgs
parents:
diff changeset
    20
#include "SqlBur.h"
7d4490026038 201037_06
hgs
parents:
diff changeset
    21
7d4490026038 201037_06
hgs
parents:
diff changeset
    22
//CSqlSrvTestBurInterface - test implementation of the MSqlSrvBurInterface, implemented in the production code by the SQL server.
7d4490026038 201037_06
hgs
parents:
diff changeset
    23
class CSqlSrvTestBurInterface : public CBase, public MSqlSrvBurInterface
7d4490026038 201037_06
hgs
parents:
diff changeset
    24
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
    25
	public:
7d4490026038 201037_06
hgs
parents:
diff changeset
    26
		static CSqlSrvTestBurInterface* New();
7d4490026038 201037_06
hgs
parents:
diff changeset
    27
		virtual ~CSqlSrvTestBurInterface();
7d4490026038 201037_06
hgs
parents:
diff changeset
    28
		virtual RFs& Fs();
7d4490026038 201037_06
hgs
parents:
diff changeset
    29
		virtual void GetBackUpListL(TSecureId aUid, TDriveNumber aDrive, RArray<HBufC*>& aFileList);
7d4490026038 201037_06
hgs
parents:
diff changeset
    30
		
7d4490026038 201037_06
hgs
parents:
diff changeset
    31
	private:
7d4490026038 201037_06
hgs
parents:
diff changeset
    32
		void Construct();
7d4490026038 201037_06
hgs
parents:
diff changeset
    33
		
7d4490026038 201037_06
hgs
parents:
diff changeset
    34
	private:
7d4490026038 201037_06
hgs
parents:
diff changeset
    35
		RFs iFs;
7d4490026038 201037_06
hgs
parents:
diff changeset
    36
		
7d4490026038 201037_06
hgs
parents:
diff changeset
    37
	};
7d4490026038 201037_06
hgs
parents:
diff changeset
    38
7d4490026038 201037_06
hgs
parents:
diff changeset
    39
///////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents:
diff changeset
    40
7d4490026038 201037_06
hgs
parents:
diff changeset
    41
RTest TheTest(_L("t_sqlbur2"));
7d4490026038 201037_06
hgs
parents:
diff changeset
    42
7d4490026038 201037_06
hgs
parents:
diff changeset
    43
#ifdef _DEBUG
7d4490026038 201037_06
hgs
parents:
diff changeset
    44
static const TInt KBurstRate = 100;
7d4490026038 201037_06
hgs
parents:
diff changeset
    45
#endif
7d4490026038 201037_06
hgs
parents:
diff changeset
    46
7d4490026038 201037_06
hgs
parents:
diff changeset
    47
TDriveNumber KTestDrive = EDriveC;
7d4490026038 201037_06
hgs
parents:
diff changeset
    48
_LIT(KTestDir, "c:\\test\\");
7d4490026038 201037_06
hgs
parents:
diff changeset
    49
CActiveScheduler* TheScheduler = NULL;
7d4490026038 201037_06
hgs
parents:
diff changeset
    50
CSqlSrvTestBurInterface* TheSqlSrvTestBurInterface = NULL;
7d4490026038 201037_06
hgs
parents:
diff changeset
    51
TInt TestModeSqlBurError = KErrNone;//The CSqlBurEventMonitor code will set the error here
7d4490026038 201037_06
hgs
parents:
diff changeset
    52
7d4490026038 201037_06
hgs
parents:
diff changeset
    53
///////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents:
diff changeset
    54
7d4490026038 201037_06
hgs
parents:
diff changeset
    55
void DestroyTestEnv()
7d4490026038 201037_06
hgs
parents:
diff changeset
    56
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
    57
	delete TheSqlSrvTestBurInterface;
7d4490026038 201037_06
hgs
parents:
diff changeset
    58
	TheSqlSrvTestBurInterface = NULL;		
7d4490026038 201037_06
hgs
parents:
diff changeset
    59
	
7d4490026038 201037_06
hgs
parents:
diff changeset
    60
	delete TheScheduler;
7d4490026038 201037_06
hgs
parents:
diff changeset
    61
	TheScheduler = NULL;
7d4490026038 201037_06
hgs
parents:
diff changeset
    62
	
7d4490026038 201037_06
hgs
parents:
diff changeset
    63
	(void)RProperty::Delete(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey);  
7d4490026038 201037_06
hgs
parents:
diff changeset
    64
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
    65
7d4490026038 201037_06
hgs
parents:
diff changeset
    66
///////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents:
diff changeset
    67
///////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents:
diff changeset
    68
//Test macros and functions
7d4490026038 201037_06
hgs
parents:
diff changeset
    69
void Check(TInt aValue, TInt aLine)
7d4490026038 201037_06
hgs
parents:
diff changeset
    70
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
    71
	if(!aValue)
7d4490026038 201037_06
hgs
parents:
diff changeset
    72
		{
7d4490026038 201037_06
hgs
parents:
diff changeset
    73
		DestroyTestEnv();
7d4490026038 201037_06
hgs
parents:
diff changeset
    74
		RDebug::Print(_L("*** Boolean expression evaluated to false.\r\n"));
7d4490026038 201037_06
hgs
parents:
diff changeset
    75
		TheTest(EFalse, aLine);
7d4490026038 201037_06
hgs
parents:
diff changeset
    76
		}
7d4490026038 201037_06
hgs
parents:
diff changeset
    77
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
    78
void Check(TInt aValue, TInt aExpected, TInt aLine)
7d4490026038 201037_06
hgs
parents:
diff changeset
    79
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
    80
	if(aValue != aExpected)
7d4490026038 201037_06
hgs
parents:
diff changeset
    81
		{
7d4490026038 201037_06
hgs
parents:
diff changeset
    82
		DestroyTestEnv();
7d4490026038 201037_06
hgs
parents:
diff changeset
    83
		RDebug::Print(_L("*** Expected error: %d, got: %d.\r\n"), aExpected, aValue);
7d4490026038 201037_06
hgs
parents:
diff changeset
    84
		TheTest(EFalse, aLine);
7d4490026038 201037_06
hgs
parents:
diff changeset
    85
		}
7d4490026038 201037_06
hgs
parents:
diff changeset
    86
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
    87
#define TEST(arg) ::Check((arg), __LINE__)
7d4490026038 201037_06
hgs
parents:
diff changeset
    88
#define TEST2(aValue, aExpected) ::Check(aValue, aExpected, __LINE__)
7d4490026038 201037_06
hgs
parents:
diff changeset
    89
7d4490026038 201037_06
hgs
parents:
diff changeset
    90
///////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents:
diff changeset
    91
7d4490026038 201037_06
hgs
parents:
diff changeset
    92
CSqlSrvTestBurInterface* CSqlSrvTestBurInterface::New()
7d4490026038 201037_06
hgs
parents:
diff changeset
    93
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
    94
	CSqlSrvTestBurInterface* self = new CSqlSrvTestBurInterface;
7d4490026038 201037_06
hgs
parents:
diff changeset
    95
	TEST(self != NULL);
7d4490026038 201037_06
hgs
parents:
diff changeset
    96
	self->Construct();
7d4490026038 201037_06
hgs
parents:
diff changeset
    97
	return self;
7d4490026038 201037_06
hgs
parents:
diff changeset
    98
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
    99
7d4490026038 201037_06
hgs
parents:
diff changeset
   100
void CSqlSrvTestBurInterface::Construct()
7d4490026038 201037_06
hgs
parents:
diff changeset
   101
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
   102
	TInt err = iFs.Connect();
7d4490026038 201037_06
hgs
parents:
diff changeset
   103
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   104
7d4490026038 201037_06
hgs
parents:
diff changeset
   105
	err = iFs.MkDir(KTestDir);
7d4490026038 201037_06
hgs
parents:
diff changeset
   106
	TEST(err == KErrNone || err == KErrAlreadyExists);
7d4490026038 201037_06
hgs
parents:
diff changeset
   107
7d4490026038 201037_06
hgs
parents:
diff changeset
   108
	err = iFs.CreatePrivatePath(KTestDrive);
7d4490026038 201037_06
hgs
parents:
diff changeset
   109
	TEST(err == KErrNone || err == KErrAlreadyExists);
7d4490026038 201037_06
hgs
parents:
diff changeset
   110
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
   111
7d4490026038 201037_06
hgs
parents:
diff changeset
   112
CSqlSrvTestBurInterface::~CSqlSrvTestBurInterface()
7d4490026038 201037_06
hgs
parents:
diff changeset
   113
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
   114
	iFs.Close();
7d4490026038 201037_06
hgs
parents:
diff changeset
   115
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
   116
7d4490026038 201037_06
hgs
parents:
diff changeset
   117
RFs& CSqlSrvTestBurInterface::Fs()
7d4490026038 201037_06
hgs
parents:
diff changeset
   118
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
   119
	return iFs;
7d4490026038 201037_06
hgs
parents:
diff changeset
   120
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
   121
7d4490026038 201037_06
hgs
parents:
diff changeset
   122
//No-op. Not needed in this test app.
7d4490026038 201037_06
hgs
parents:
diff changeset
   123
void CSqlSrvTestBurInterface::GetBackUpListL(TSecureId, TDriveNumber, RArray<HBufC*>&)
7d4490026038 201037_06
hgs
parents:
diff changeset
   124
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
   125
	TEST(EFalse);
7d4490026038 201037_06
hgs
parents:
diff changeset
   126
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
   127
7d4490026038 201037_06
hgs
parents:
diff changeset
   128
///////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents:
diff changeset
   129
7d4490026038 201037_06
hgs
parents:
diff changeset
   130
void CreateTestEnv()
7d4490026038 201037_06
hgs
parents:
diff changeset
   131
    {
7d4490026038 201037_06
hgs
parents:
diff changeset
   132
	TheScheduler = new CActiveScheduler;
7d4490026038 201037_06
hgs
parents:
diff changeset
   133
	TEST(TheScheduler != NULL);
7d4490026038 201037_06
hgs
parents:
diff changeset
   134
	CActiveScheduler::Install(TheScheduler);
7d4490026038 201037_06
hgs
parents:
diff changeset
   135
	
7d4490026038 201037_06
hgs
parents:
diff changeset
   136
	TheSqlSrvTestBurInterface = CSqlSrvTestBurInterface::New();
7d4490026038 201037_06
hgs
parents:
diff changeset
   137
	TEST(TheSqlSrvTestBurInterface != NULL);
7d4490026038 201037_06
hgs
parents:
diff changeset
   138
	
7d4490026038 201037_06
hgs
parents:
diff changeset
   139
	TInt err = RProperty::Define(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey, 0);  
7d4490026038 201037_06
hgs
parents:
diff changeset
   140
	TEST(err == KErrNone || err == KErrAlreadyExists);
7d4490026038 201037_06
hgs
parents:
diff changeset
   141
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
   142
7d4490026038 201037_06
hgs
parents:
diff changeset
   143
///////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents:
diff changeset
   144
7d4490026038 201037_06
hgs
parents:
diff changeset
   145
/**
7d4490026038 201037_06
hgs
parents:
diff changeset
   146
@SYMTestCaseID			PDS-SQL-UT-4233
7d4490026038 201037_06
hgs
parents:
diff changeset
   147
@SYMTestCaseDesc		CSqlBurEventMonitor object creation - OOM test
7d4490026038 201037_06
hgs
parents:
diff changeset
   148
						The test runs CSqlBurEventMonitor::NewL() in an OOM loop.
7d4490026038 201037_06
hgs
parents:
diff changeset
   149
@SYMTestActions			CSqlBurEventMonitor object creation - OOM test
7d4490026038 201037_06
hgs
parents:
diff changeset
   150
@SYMTestExpectedResults Test must not fail
7d4490026038 201037_06
hgs
parents:
diff changeset
   151
@SYMTestPriority		High
7d4490026038 201037_06
hgs
parents:
diff changeset
   152
*/
7d4490026038 201037_06
hgs
parents:
diff changeset
   153
void SqlBurEventMonitorOomTest()
7d4490026038 201037_06
hgs
parents:
diff changeset
   154
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
   155
	TInt err = KErrNoMemory;
7d4490026038 201037_06
hgs
parents:
diff changeset
   156
	TInt failingAllocationNo = 0;
7d4490026038 201037_06
hgs
parents:
diff changeset
   157
	TheTest.Printf(_L("Iteration:\r\n"));
7d4490026038 201037_06
hgs
parents:
diff changeset
   158
	while(err == KErrNoMemory)
7d4490026038 201037_06
hgs
parents:
diff changeset
   159
		{
7d4490026038 201037_06
hgs
parents:
diff changeset
   160
		TheTest.Printf(_L(" %d"), ++failingAllocationNo);
7d4490026038 201037_06
hgs
parents:
diff changeset
   161
		
7d4490026038 201037_06
hgs
parents:
diff changeset
   162
		TInt startProcessHandleCount;
7d4490026038 201037_06
hgs
parents:
diff changeset
   163
		TInt startThreadHandleCount;
7d4490026038 201037_06
hgs
parents:
diff changeset
   164
		RThread().HandleCount(startProcessHandleCount, startThreadHandleCount);
7d4490026038 201037_06
hgs
parents:
diff changeset
   165
		__UHEAP_MARK;
7d4490026038 201037_06
hgs
parents:
diff changeset
   166
		__UHEAP_SETBURSTFAIL(RAllocator::EBurstFailNext, failingAllocationNo, KBurstRate);
7d4490026038 201037_06
hgs
parents:
diff changeset
   167
7d4490026038 201037_06
hgs
parents:
diff changeset
   168
		CSqlBurEventMonitor* monitor = NULL;
7d4490026038 201037_06
hgs
parents:
diff changeset
   169
		TRAP(err, monitor = CSqlBurEventMonitor::NewL(*TheSqlSrvTestBurInterface));
7d4490026038 201037_06
hgs
parents:
diff changeset
   170
		delete monitor;
7d4490026038 201037_06
hgs
parents:
diff changeset
   171
		
7d4490026038 201037_06
hgs
parents:
diff changeset
   172
		__UHEAP_RESET;
7d4490026038 201037_06
hgs
parents:
diff changeset
   173
		__UHEAP_MARKEND;
7d4490026038 201037_06
hgs
parents:
diff changeset
   174
		TInt endProcessHandleCount;
7d4490026038 201037_06
hgs
parents:
diff changeset
   175
		TInt endThreadHandleCount;
7d4490026038 201037_06
hgs
parents:
diff changeset
   176
		RThread().HandleCount(endProcessHandleCount, endThreadHandleCount);
7d4490026038 201037_06
hgs
parents:
diff changeset
   177
		
7d4490026038 201037_06
hgs
parents:
diff changeset
   178
		TEST2(startProcessHandleCount, endProcessHandleCount);
7d4490026038 201037_06
hgs
parents:
diff changeset
   179
		TEST2(startThreadHandleCount, endThreadHandleCount);
7d4490026038 201037_06
hgs
parents:
diff changeset
   180
		}
7d4490026038 201037_06
hgs
parents:
diff changeset
   181
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   182
	TheTest.Printf(_L("\r\n=== OOM Test succeeded at heap failure rate of %d ===\r\n"), failingAllocationNo);
7d4490026038 201037_06
hgs
parents:
diff changeset
   183
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
   184
7d4490026038 201037_06
hgs
parents:
diff changeset
   185
/**
7d4490026038 201037_06
hgs
parents:
diff changeset
   186
@SYMTestCaseID			PDS-SQL-UT-4234
7d4490026038 201037_06
hgs
parents:
diff changeset
   187
@SYMTestCaseDesc		CSqlBurEventMonitor functional test
7d4490026038 201037_06
hgs
parents:
diff changeset
   188
						The test sets the backup & restore property status and then checks
7d4490026038 201037_06
hgs
parents:
diff changeset
   189
						how the backup & restore property monitor (CSqlBurEventMonitor) reacts to the event.
7d4490026038 201037_06
hgs
parents:
diff changeset
   190
@SYMTestActions			CSqlBurEventMonitor functional test
7d4490026038 201037_06
hgs
parents:
diff changeset
   191
@SYMTestExpectedResults Test must not fail
7d4490026038 201037_06
hgs
parents:
diff changeset
   192
@SYMTestPriority		High
7d4490026038 201037_06
hgs
parents:
diff changeset
   193
*/
7d4490026038 201037_06
hgs
parents:
diff changeset
   194
void SqlBurEventMonitorFunctionalTest()
7d4490026038 201037_06
hgs
parents:
diff changeset
   195
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
   196
	CSqlBurEventMonitor* monitor = NULL;
7d4490026038 201037_06
hgs
parents:
diff changeset
   197
	TRAPD(err, monitor = CSqlBurEventMonitor::NewL(*TheSqlSrvTestBurInterface));
7d4490026038 201037_06
hgs
parents:
diff changeset
   198
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   199
	TEST(!monitor->ActiveBackupClient());
7d4490026038 201037_06
hgs
parents:
diff changeset
   200
	TEST(!monitor->SqlBurCallback());
7d4490026038 201037_06
hgs
parents:
diff changeset
   201
	//Set the property to conn::EBURBackupFull, conn::EBURBackupPartial, conn::EBURRestoreFull, conn::EBURRestorePartial, 
7d4490026038 201037_06
hgs
parents:
diff changeset
   202
	//then start the scheduler. CSqlBurEventMonitor::RunL() gets called and 
7d4490026038 201037_06
hgs
parents:
diff changeset
   203
	//CSqlBurCallback and CActiveBackupClient interfaces get created (if the interfaces do exist, they are destroyed first).
7d4490026038 201037_06
hgs
parents:
diff changeset
   204
	TInt burPropertyStatus[] = {conn::EBURBackupFull, conn::EBURBackupPartial, conn::EBURRestoreFull, conn::EBURRestorePartial};
7d4490026038 201037_06
hgs
parents:
diff changeset
   205
	for(TInt i=0;i<(sizeof(burPropertyStatus)/sizeof(burPropertyStatus[0]));++i)
7d4490026038 201037_06
hgs
parents:
diff changeset
   206
		{
7d4490026038 201037_06
hgs
parents:
diff changeset
   207
		err = RProperty::Set(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey, burPropertyStatus[i]);
7d4490026038 201037_06
hgs
parents:
diff changeset
   208
		TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   209
		TestModeSqlBurError = KErrNone;
7d4490026038 201037_06
hgs
parents:
diff changeset
   210
		if(i > 0)
7d4490026038 201037_06
hgs
parents:
diff changeset
   211
			{
7d4490026038 201037_06
hgs
parents:
diff changeset
   212
			__UHEAP_MARK;
7d4490026038 201037_06
hgs
parents:
diff changeset
   213
			}
7d4490026038 201037_06
hgs
parents:
diff changeset
   214
		CActiveScheduler::Start();
7d4490026038 201037_06
hgs
parents:
diff changeset
   215
		if(i > 0)
7d4490026038 201037_06
hgs
parents:
diff changeset
   216
			{
7d4490026038 201037_06
hgs
parents:
diff changeset
   217
			__UHEAP_MARKEND;
7d4490026038 201037_06
hgs
parents:
diff changeset
   218
			}
7d4490026038 201037_06
hgs
parents:
diff changeset
   219
		TEST2(TestModeSqlBurError, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   220
		TEST(monitor->ActiveBackupClient() != NULL);
7d4490026038 201037_06
hgs
parents:
diff changeset
   221
		TEST(monitor->SqlBurCallback() != NULL);
7d4490026038 201037_06
hgs
parents:
diff changeset
   222
		}
7d4490026038 201037_06
hgs
parents:
diff changeset
   223
	//Set the property to conn::EBURUnset, start the scheduler. CSqlBurEventMonitor::RunL() gets called 
7d4490026038 201037_06
hgs
parents:
diff changeset
   224
	//and CSqlBurCallback interface gets destroyed.
7d4490026038 201037_06
hgs
parents:
diff changeset
   225
	err = RProperty::Set(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey, conn::EBURUnset);
7d4490026038 201037_06
hgs
parents:
diff changeset
   226
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   227
	TestModeSqlBurError = KErrNone;
7d4490026038 201037_06
hgs
parents:
diff changeset
   228
	CActiveScheduler::Start();
7d4490026038 201037_06
hgs
parents:
diff changeset
   229
	TEST2(TestModeSqlBurError, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   230
	TEST(!monitor->ActiveBackupClient());
7d4490026038 201037_06
hgs
parents:
diff changeset
   231
	TEST(!monitor->SqlBurCallback());
7d4490026038 201037_06
hgs
parents:
diff changeset
   232
	//Set the property to conn::EBURNormal, start the scheduler. CSqlBurEventMonitor::RunL() gets called. 
7d4490026038 201037_06
hgs
parents:
diff changeset
   233
	//CSqlBurCallback interface has been destroyed alread. No memory deallocations should be made during this call.
7d4490026038 201037_06
hgs
parents:
diff changeset
   234
	err = RProperty::Set(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey, conn::EBURNormal);
7d4490026038 201037_06
hgs
parents:
diff changeset
   235
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   236
	__UHEAP_MARK;
7d4490026038 201037_06
hgs
parents:
diff changeset
   237
	TestModeSqlBurError = KErrNone;
7d4490026038 201037_06
hgs
parents:
diff changeset
   238
	CActiveScheduler::Start();
7d4490026038 201037_06
hgs
parents:
diff changeset
   239
	TEST2(TestModeSqlBurError, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   240
	TEST(!monitor->ActiveBackupClient());
7d4490026038 201037_06
hgs
parents:
diff changeset
   241
	TEST(!monitor->SqlBurCallback());
7d4490026038 201037_06
hgs
parents:
diff changeset
   242
	__UHEAP_MARKEND;
7d4490026038 201037_06
hgs
parents:
diff changeset
   243
	//Set the property, then delete it. CSqlBurEventMonitor::RunL() should get called, but the call should
7d4490026038 201037_06
hgs
parents:
diff changeset
   244
	//fail because the property does not exist.
7d4490026038 201037_06
hgs
parents:
diff changeset
   245
	err = RProperty::Set(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey, conn::EBURBackupFull);
7d4490026038 201037_06
hgs
parents:
diff changeset
   246
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   247
	err = RProperty::Delete(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey);  
7d4490026038 201037_06
hgs
parents:
diff changeset
   248
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   249
	__UHEAP_MARK;
7d4490026038 201037_06
hgs
parents:
diff changeset
   250
	TestModeSqlBurError = KErrNone;
7d4490026038 201037_06
hgs
parents:
diff changeset
   251
	CActiveScheduler::Start();
7d4490026038 201037_06
hgs
parents:
diff changeset
   252
	TEST2(TestModeSqlBurError, KErrNotFound);
7d4490026038 201037_06
hgs
parents:
diff changeset
   253
	TEST(!monitor->ActiveBackupClient());
7d4490026038 201037_06
hgs
parents:
diff changeset
   254
	TEST(!monitor->SqlBurCallback());
7d4490026038 201037_06
hgs
parents:
diff changeset
   255
	__UHEAP_MARKEND;
7d4490026038 201037_06
hgs
parents:
diff changeset
   256
	//Restore the property
7d4490026038 201037_06
hgs
parents:
diff changeset
   257
	err = RProperty::Define(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey, 0);  
7d4490026038 201037_06
hgs
parents:
diff changeset
   258
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   259
	//
7d4490026038 201037_06
hgs
parents:
diff changeset
   260
	delete monitor;
7d4490026038 201037_06
hgs
parents:
diff changeset
   261
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
   262
7d4490026038 201037_06
hgs
parents:
diff changeset
   263
/**
7d4490026038 201037_06
hgs
parents:
diff changeset
   264
@SYMTestCaseID			PDS-SQL-UT-4235
7d4490026038 201037_06
hgs
parents:
diff changeset
   265
@SYMTestCaseDesc		CSqlBurEventMonitor::RunL() - OOM test
7d4490026038 201037_06
hgs
parents:
diff changeset
   266
						The test sets the backup & restore property status and then checks
7d4490026038 201037_06
hgs
parents:
diff changeset
   267
						how the backup & restore property monitor (CSqlBurEventMonitor) reacts to the event.
7d4490026038 201037_06
hgs
parents:
diff changeset
   268
						The test is performed in an OOM loop.
7d4490026038 201037_06
hgs
parents:
diff changeset
   269
@SYMTestActions			CSqlBurEventMonitor::RunL() - OOM test
7d4490026038 201037_06
hgs
parents:
diff changeset
   270
@SYMTestExpectedResults Test must not fail
7d4490026038 201037_06
hgs
parents:
diff changeset
   271
@SYMTestPriority		High
7d4490026038 201037_06
hgs
parents:
diff changeset
   272
*/
7d4490026038 201037_06
hgs
parents:
diff changeset
   273
void SqlBurEventMonitorRunOomTest()
7d4490026038 201037_06
hgs
parents:
diff changeset
   274
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
   275
	CSqlBurEventMonitor* monitor = NULL;
7d4490026038 201037_06
hgs
parents:
diff changeset
   276
	TRAPD(err, monitor = CSqlBurEventMonitor::NewL(*TheSqlSrvTestBurInterface));
7d4490026038 201037_06
hgs
parents:
diff changeset
   277
	
7d4490026038 201037_06
hgs
parents:
diff changeset
   278
	err = KErrNoMemory;
7d4490026038 201037_06
hgs
parents:
diff changeset
   279
	TInt failingAllocationNo = 0;
7d4490026038 201037_06
hgs
parents:
diff changeset
   280
	TheTest.Printf(_L("Iteration:\r\n"));
7d4490026038 201037_06
hgs
parents:
diff changeset
   281
	while(err == KErrNoMemory)
7d4490026038 201037_06
hgs
parents:
diff changeset
   282
		{
7d4490026038 201037_06
hgs
parents:
diff changeset
   283
		TheTest.Printf(_L(" %d"), ++failingAllocationNo);
7d4490026038 201037_06
hgs
parents:
diff changeset
   284
		
7d4490026038 201037_06
hgs
parents:
diff changeset
   285
		TInt startProcessHandleCount;
7d4490026038 201037_06
hgs
parents:
diff changeset
   286
		TInt startThreadHandleCount;
7d4490026038 201037_06
hgs
parents:
diff changeset
   287
		RThread().HandleCount(startProcessHandleCount, startThreadHandleCount);
7d4490026038 201037_06
hgs
parents:
diff changeset
   288
		__UHEAP_MARK;
7d4490026038 201037_06
hgs
parents:
diff changeset
   289
		__UHEAP_SETBURSTFAIL(RAllocator::EBurstFailNext, failingAllocationNo, KBurstRate);
7d4490026038 201037_06
hgs
parents:
diff changeset
   290
7d4490026038 201037_06
hgs
parents:
diff changeset
   291
		TEST(!monitor->ActiveBackupClient());
7d4490026038 201037_06
hgs
parents:
diff changeset
   292
		TEST(!monitor->SqlBurCallback());
7d4490026038 201037_06
hgs
parents:
diff changeset
   293
		//Set the property, start the scheduler. CSqlBurEventMonitor::RunL() gets called and CSqlBurCallback
7d4490026038 201037_06
hgs
parents:
diff changeset
   294
		//interface gets created.
7d4490026038 201037_06
hgs
parents:
diff changeset
   295
		err = RProperty::Set(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey, conn::EBURBackupFull);
7d4490026038 201037_06
hgs
parents:
diff changeset
   296
		if(err == KErrNone)
7d4490026038 201037_06
hgs
parents:
diff changeset
   297
			{
7d4490026038 201037_06
hgs
parents:
diff changeset
   298
			TestModeSqlBurError = KErrNone;
7d4490026038 201037_06
hgs
parents:
diff changeset
   299
			CActiveScheduler::Start();
7d4490026038 201037_06
hgs
parents:
diff changeset
   300
			err = TestModeSqlBurError;
7d4490026038 201037_06
hgs
parents:
diff changeset
   301
			if(err == KErrNone)
7d4490026038 201037_06
hgs
parents:
diff changeset
   302
				{
7d4490026038 201037_06
hgs
parents:
diff changeset
   303
				TEST(monitor->ActiveBackupClient() != NULL);
7d4490026038 201037_06
hgs
parents:
diff changeset
   304
				TEST(monitor->SqlBurCallback() != NULL);
7d4490026038 201037_06
hgs
parents:
diff changeset
   305
				//Destroy the SQL backup & restore callback
7d4490026038 201037_06
hgs
parents:
diff changeset
   306
				err = RProperty::Set(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey, conn::EBURNormal);
7d4490026038 201037_06
hgs
parents:
diff changeset
   307
				TestModeSqlBurError = KErrNone;
7d4490026038 201037_06
hgs
parents:
diff changeset
   308
				CActiveScheduler::Start();
7d4490026038 201037_06
hgs
parents:
diff changeset
   309
				err = TestModeSqlBurError;
7d4490026038 201037_06
hgs
parents:
diff changeset
   310
				if(err == KErrNone)
7d4490026038 201037_06
hgs
parents:
diff changeset
   311
					{
7d4490026038 201037_06
hgs
parents:
diff changeset
   312
					TEST(!monitor->ActiveBackupClient());
7d4490026038 201037_06
hgs
parents:
diff changeset
   313
					TEST(!monitor->SqlBurCallback());
7d4490026038 201037_06
hgs
parents:
diff changeset
   314
					}
7d4490026038 201037_06
hgs
parents:
diff changeset
   315
				}
7d4490026038 201037_06
hgs
parents:
diff changeset
   316
			}
7d4490026038 201037_06
hgs
parents:
diff changeset
   317
		
7d4490026038 201037_06
hgs
parents:
diff changeset
   318
		__UHEAP_RESET;
7d4490026038 201037_06
hgs
parents:
diff changeset
   319
		__UHEAP_MARKEND;
7d4490026038 201037_06
hgs
parents:
diff changeset
   320
		TInt endProcessHandleCount;
7d4490026038 201037_06
hgs
parents:
diff changeset
   321
		TInt endThreadHandleCount;
7d4490026038 201037_06
hgs
parents:
diff changeset
   322
		RThread().HandleCount(endProcessHandleCount, endThreadHandleCount);
7d4490026038 201037_06
hgs
parents:
diff changeset
   323
		
7d4490026038 201037_06
hgs
parents:
diff changeset
   324
		TEST2(startProcessHandleCount, endProcessHandleCount);
7d4490026038 201037_06
hgs
parents:
diff changeset
   325
		TEST2(startThreadHandleCount, endThreadHandleCount);
7d4490026038 201037_06
hgs
parents:
diff changeset
   326
		}
7d4490026038 201037_06
hgs
parents:
diff changeset
   327
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   328
	TheTest.Printf(_L("\r\n=== OOM Test succeeded at heap failure rate of %d ===\r\n"), failingAllocationNo);
7d4490026038 201037_06
hgs
parents:
diff changeset
   329
	delete monitor;
7d4490026038 201037_06
hgs
parents:
diff changeset
   330
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
   331
7d4490026038 201037_06
hgs
parents:
diff changeset
   332
void DoTestsL()
7d4490026038 201037_06
hgs
parents:
diff changeset
   333
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
   334
	TheTest.Start(_L(" @SYMTestCaseID:PDS-SQL-UT-4233 CSqlBurEventMonitor object creation - OOM test"));
7d4490026038 201037_06
hgs
parents:
diff changeset
   335
	SqlBurEventMonitorOomTest();
7d4490026038 201037_06
hgs
parents:
diff changeset
   336
	TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-UT-4234 CSqlBurEventMonitor functional test"));
7d4490026038 201037_06
hgs
parents:
diff changeset
   337
	SqlBurEventMonitorFunctionalTest();
7d4490026038 201037_06
hgs
parents:
diff changeset
   338
	TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-UT-4235 CSqlBurEventMonitor::RunL() - OOM test"));
7d4490026038 201037_06
hgs
parents:
diff changeset
   339
	SqlBurEventMonitorRunOomTest();
7d4490026038 201037_06
hgs
parents:
diff changeset
   340
	}
7d4490026038 201037_06
hgs
parents:
diff changeset
   341
7d4490026038 201037_06
hgs
parents:
diff changeset
   342
TInt E32Main()
7d4490026038 201037_06
hgs
parents:
diff changeset
   343
	{
7d4490026038 201037_06
hgs
parents:
diff changeset
   344
	TheTest.Title();
7d4490026038 201037_06
hgs
parents:
diff changeset
   345
7d4490026038 201037_06
hgs
parents:
diff changeset
   346
	CTrapCleanup* tc = CTrapCleanup::New();
7d4490026038 201037_06
hgs
parents:
diff changeset
   347
	TheTest(tc != NULL);
7d4490026038 201037_06
hgs
parents:
diff changeset
   348
7d4490026038 201037_06
hgs
parents:
diff changeset
   349
	__UHEAP_MARK;
7d4490026038 201037_06
hgs
parents:
diff changeset
   350
7d4490026038 201037_06
hgs
parents:
diff changeset
   351
	CreateTestEnv();
7d4490026038 201037_06
hgs
parents:
diff changeset
   352
	TRAPD(err, DoTestsL());
7d4490026038 201037_06
hgs
parents:
diff changeset
   353
	DestroyTestEnv();
7d4490026038 201037_06
hgs
parents:
diff changeset
   354
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents:
diff changeset
   355
7d4490026038 201037_06
hgs
parents:
diff changeset
   356
	__UHEAP_MARKEND;
7d4490026038 201037_06
hgs
parents:
diff changeset
   357
7d4490026038 201037_06
hgs
parents:
diff changeset
   358
	TheTest.End();
7d4490026038 201037_06
hgs
parents:
diff changeset
   359
	TheTest.Close();
7d4490026038 201037_06
hgs
parents:
diff changeset
   360
7d4490026038 201037_06
hgs
parents:
diff changeset
   361
	delete tc;
7d4490026038 201037_06
hgs
parents:
diff changeset
   362
7d4490026038 201037_06
hgs
parents:
diff changeset
   363
	User::Heap().Check();
7d4490026038 201037_06
hgs
parents:
diff changeset
   364
	return KErrNone;
7d4490026038 201037_06
hgs
parents:
diff changeset
   365
	}