diff -r 5ffdb8f2067f -r fa9941cf3867 persistentstorage/sql/TEST/t_sqlstartup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/sql/TEST/t_sqlstartup.cpp Fri Mar 12 15:51:02 2010 +0200 @@ -0,0 +1,365 @@ +// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include +#include +#include "SqlSrvMain.h" +#include "SqlSrvStartup.h" +#include "SqlSrvUtil.h" + +/////////////////////////////////////////////////////////////////////////////////////// + +RTest TheTest(_L("t_sqlstartup test")); + +static TInt TheProcessHandleCount = 0; +static TInt TheThreadHandleCount = 0; +static TInt TheAllocatedCellsCount = 0; + +#ifdef _DEBUG +static const TInt KBurstRate = 20; +#endif + +/////////////////////////////////////////////////////////////////////////////////////// + +void DeleteTestFiles() + { + } + +/////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////// +//Test macros and functions +void Check(TInt aValue, TInt aLine) + { + if(!aValue) + { + DeleteTestFiles(); + RDebug::Print(_L("*** Expresssion evaluated to false\r\n")); + TheTest(EFalse, aLine); + } + } +void Check(TInt aValue, TInt aExpected, TInt aLine) + { + if(aValue != aExpected) + { + DeleteTestFiles(); + RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue); + TheTest(EFalse, aLine); + } + } +#define TEST(arg) ::Check((arg), __LINE__) +#define TEST2(aValue, aExpected) ::Check(aValue, aExpected, __LINE__) + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +static void MarkHandles() + { + RThread().HandleCount(TheProcessHandleCount, TheThreadHandleCount); + } + +static void MarkAllocatedCells() + { + TheAllocatedCellsCount = User::CountAllocCells(); + } + +static void CheckAllocatedCells() + { + TInt allocatedCellsCount = User::CountAllocCells(); + TEST2(allocatedCellsCount, TheAllocatedCellsCount); + } + +static void CheckHandles() + { + TInt endProcessHandleCount; + TInt endThreadHandleCount; + + RThread().HandleCount(endProcessHandleCount, endThreadHandleCount); + + TEST2(TheProcessHandleCount, endProcessHandleCount); + TEST2(TheThreadHandleCount, endThreadHandleCount); + } + +static void OomPreStep(TInt +#ifdef _DEBUG + aFailingAllocationNo +#endif + ) + { + MarkHandles(); + MarkAllocatedCells(); + __UHEAP_MARK; + __UHEAP_SETBURSTFAIL(RAllocator::EBurstFailNext, aFailingAllocationNo, KBurstRate); + } + +static void OomPostStep() + { + __UHEAP_RESET; + __UHEAP_MARKEND; + CheckAllocatedCells(); + CheckHandles(); + } + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +static void CreateAndDestroySqlServerL() + { + CSqlServer* server = CSqlServer::NewLC(); + CleanupStack::PopAndDestroy(server); + } + +static CSqlServer* CreateSqlServerL() + { + CSqlServer* server = CSqlServer::NewLC(); + CleanupStack::Pop(server); + return server; + } + +/** +@SYMTestCaseID PDS-SQL-UT-4159 +@SYMTestCaseDesc SQL server startup OOM test +@SYMTestPriority High +@SYMTestActions Runs the SQL server startup code in an OOM loop. +@SYMTestExpectedResults Test must not fail +@SYMDEF DEF144096 +*/ +void SqlServerStartupOomTest() + { + TInt err = KErrNoMemory; + TInt failingAllocationNo = 0; + TheTest.Printf(_L("Iteration:\r\n")); + while(err == KErrNoMemory) + { + TheTest.Printf(_L(" %d"), ++failingAllocationNo); + OomPreStep(failingAllocationNo); + TRAP(err, CreateAndDestroySqlServerL()); + OomPostStep(); + } + if(err != KErrNoMemory) + { + TEST2(err, KErrNone); + } + TheTest.Printf(_L("\r\n===OOM test succeeded at heap failure rate of %d ===\r\n"), failingAllocationNo); + } + +/** +@SYMTestCaseID PDS-SQL-UT-4160 +@SYMTestCaseDesc CSqlServer::GetBackUpListL() OOM test +@SYMTestPriority High +@SYMTestActions Calls CSqlServer::GetBackUpListL() in an OOM loop. +@SYMTestExpectedResults Test must not fail +@SYMDEF DEF144096 +*/ +void GetBackupListOomTest() + { + CSqlServer* server = NULL; + TRAPD(err, server = CreateSqlServerL()); + TEST2(err, KErrNone); + + TInt fileCnt = 0; + err = KErrNoMemory; + TInt failingAllocationNo = 0; + TheTest.Printf(_L("Iteration:\r\n")); + while(err == KErrNoMemory) + { + TheTest.Printf(_L(" %d"), ++failingAllocationNo); + OomPreStep(failingAllocationNo); + const TUid KDbUd = {0x98765432}; + RArray files; + TRAP(err, server->GetBackUpListL(KDbUd, files)); + fileCnt = files.Count(); + files.Close(); + OomPostStep(); + } + + delete server; + + if(err != KErrNoMemory) + { + TEST2(err, KErrNone); + } + TheTest.Printf(_L("\r\n===OOM test succeeded at heap failure rate of %d ===\r\nFile count: %d\r\n"), failingAllocationNo, fileCnt); + } + +/** +@SYMTestCaseID PDS-SQL-UT-4161 +@SYMTestCaseDesc SQL server startup file I/O error simulation test +@SYMTestPriority High +@SYMTestActions Runs the SQL server startup code in a file I/O error simulation loop. +@SYMTestExpectedResults Test must not fail +@SYMDEF DEF144096 +*/ +void SqlServerStartupFileIoErrorTest() + { + RFs fs; + TInt err = fs.Connect(); + TEST2(err, KErrNone); + + for(TInt fsError=KErrNotFound;fsError>=KErrBadName;--fsError) + { + TheTest.Printf(_L("===Simulated error: %d\r\nIteration: "), fsError); + err = KErrNotFound; + TInt cnt=1; + while(err=KErrBadName;--fsError) + { + TheTest.Printf(_L("===Simulated error: %d\r\nIteration: "), fsError); + err = KErrNotFound; + TInt fileCnt = 0; + TInt cnt=1; + while(errFs().SetErrorCondition(fsError, cnt); + const TUid KDbUd = {0x98765432}; + RArray files; + TRAP(err, server->GetBackUpListL(KDbUd, files)); + fileCnt = files.Count(); + files.Close(); + (void)server->Fs().SetErrorCondition(KErrNone); + if(err != KErrNone) + { + ++cnt; + } + } + TEST2(err, KErrNone); + TheTest.Printf(_L("\r\n===File I/O error simulation test succeeded on iteration %d===\r\nFile count: %d\r\n"), cnt, fileCnt); + } + + delete server; + } + +/** +@SYMTestCaseID PDS-SQL-UT-4163 +@SYMTestCaseDesc Test for DEF144196: SQL, server code coverage can be improved +@SYMTestPriority High +@SYMTestActions Tests the UTF conversion functions implemented in SqlSrvUtil.cpp. +@SYMTestExpectedResults Test must not fail +@SYMDEF DEF144196 +*/ +void UtfConversionTest() + { + ///////// UTF16ToUTF8() /////////////////////// + _LIT(KStr16, "abcd"); + _LIT8(KStr8, "abcd"); + TBuf8 bufout; + TBool rc = UTF16ToUTF8(KStr16, bufout); + TEST(rc); + TEST(bufout == KStr8); + //Test where the input buffer contains non-convertible characters + TBuf<2> name2; + name2.SetLength(2); + name2[0] = TChar(0xD800); + name2[1] = TChar(0xFC00); + rc = UTF16ToUTF8(name2, bufout); + TEST(!rc); + ///////// UTF16ToUTF8Z() /////////////////////// + _LIT8(KStr8Z, "abcd\x0"); + rc = UTF16ToUTF8Z(KStr16, bufout); + TEST(rc); + TEST(bufout == KStr8Z); + //Test where the input buffer contains non-convertible characters + rc = UTF16ToUTF8Z(name2, bufout); + TEST(!rc); + ///////// UTF16ZToUTF8Z() /////////////////////// + _LIT(KStr16Z, "abcd\x0"); + rc = UTF16ZToUTF8Z(KStr16Z, bufout); + TEST(rc); + TEST(bufout == KStr8Z); + //Test where the input buffer contains non-convertible characters + TBuf<3> name3; + name3.SetLength(3); + name3[0] = TChar(0xD800); + name3[1] = TChar(0xFC00); + name3[2] = TChar(0x0000); + rc = UTF16ZToUTF8Z(name3, bufout); + TEST(!rc); + } + +void DoTests() + { + CActiveScheduler* scheduler = new CActiveScheduler; + TEST(scheduler != NULL); + CActiveScheduler::Install(scheduler); + + TheTest.Start(_L(" @SYMTestCaseID:PDS-SQL-UT-4159 SQL server startup OOM test")); + SqlServerStartupOomTest(); + + TheTest.Next (_L(" @SYMTestCaseID:PDS-SQL-UT-4160 CSqlServer::GetBackUpListL() OOM test")); + GetBackupListOomTest(); + + TheTest.Next (_L(" @SYMTestCaseID:PDS-SQL-UT-4161 SQL server startup file I/O error simulation test")); + SqlServerStartupFileIoErrorTest(); + + TheTest.Next (_L(" @SYMTestCaseID:PDS-SQL-UT-4162 CSqlServer::GetBackUpListL() file I/O error simulation test")); + GetBackupListFileIoErrorTest(); + + TheTest.Next (_L(" @SYMTestCaseID:PDS-SQL-UT-4163 SQL server, UTF conversion test")); + UtfConversionTest(); + + delete scheduler; + } + +TInt E32Main() + { + TheTest.Title(); + + CTrapCleanup* tc = CTrapCleanup::New(); + + __UHEAP_MARK; + + DoTests(); + DeleteTestFiles(); + + __UHEAP_MARKEND; + + TheTest.End(); + TheTest.Close(); + + delete tc; + + User::Heap().Check(); + return KErrNone; + }