diff -r 667e88a979d7 -r 31a8f755b7fe persistentstorage/sql/TEST/t_sqloom5.cpp --- a/persistentstorage/sql/TEST/t_sqloom5.cpp Mon Mar 15 12:46:30 2010 +0200 +++ b/persistentstorage/sql/TEST/t_sqloom5.cpp Thu Apr 01 00:19:42 2010 +0300 @@ -187,10 +187,7 @@ delete TheServer; TheServer = NULL; - if(err != KErrNoMemory) - { - TEST2(err, KErrNone); - } + TEST2(err, KErrNone); TheTest.Printf(_L("\r\n===CSqlSrvDatabase::CreateL() OOM test succeeded at heap failure rate of %d ===\r\n"), failingAllocationNo); } @@ -235,10 +232,7 @@ delete TheServer; TheServer = NULL; - if(err != KErrNoMemory) - { - TEST2(err, KErrNone); - } + TEST2(err, KErrNone); TheTest.Printf(_L("\r\n===CSqlSrvDatabase::OpenL() [non-secure db] OOM test succeeded at heap failure rate of %d ===\r\n"), failingAllocationNo); } @@ -287,10 +281,7 @@ delete TheServer; TheServer = NULL; - if(err != KErrNoMemory) - { - TEST2(err, KErrNone); - } + TEST2(err, KErrNone); TheTest.Printf(_L("\r\n===CSqlSrvDatabase::CreateSecureL() OOM test succeeded at heap failure rate of %d ===\r\n"), failingAllocationNo); } @@ -335,10 +326,7 @@ delete TheServer; TheServer = NULL; - if(err != KErrNoMemory) - { - TEST2(err, KErrNone); - } + TEST2(err, KErrNone); TheTest.Printf(_L("\r\n===CSqlSrvDatabase::OpenL() [secure db] OOM test succeeded at heap failure rate of %d ===\r\n"), failingAllocationNo); } @@ -515,11 +503,169 @@ delete TheServer; TheServer = NULL; - if(err != KErrNoMemory) + (void)TheFs.Delete(KDbFile4); + (void)TheFs.Delete(KDbFile3); + + TEST2(err, KErrNone); + TheTest.Printf(_L("\r\n===CSqlSrvDatabase::OpenL() & CSqlSrvDatabase::AttachDbL() OOM test succeeded at heap failure rate of %d ===\r\n"), failingAllocationNo); + } + +/** +@SYMTestCaseID PDS-SQL-UT-4172 +@SYMTestCaseDesc CSqlSrvDatabase::OpenL() & CSqlSrvDatabase::AttachDbL() OOM test. +@SYMTestPriority High +@SYMTestActions The test runs CSqlSrvDatabase::OpenL() and CSqlSrvDatabase::AttachDbL() in an OOM test. + Two secure databases are created and then, in an OOM loop, the test executes this sequence of + commands: open first database, attach the second database, detach the attached database, + close the first database. +@SYMTestExpectedResults Test must not fail +@SYMDEF DEF144577, PDEF44845 +*/ +void OpenAttachDatabaseOomTest2() + { + TheServer = NULL; + TRAPD(err, TheServer = CreateSqlServerL()); + TEST2(err, KErrNone); + + CreateSecureTestDb(KDbFile3); + CreateSecureTestDb(KDbFile4); + + TInt failingAllocationNo = 0; + TheTest.Printf(_L("Iteration:\r\n")); + + RMessage2 msg; + TSqlSrvFileData& fdata = TheServer->FileData(); + + err = KErrNoMemory; + while(err == KErrNoMemory) { - TEST2(err, KErrNone); + TheTest.Printf(_L(" %d"), ++failingAllocationNo); + OomPreStep(failingAllocationNo); + + TRAP(err, fdata.SetL(msg, KDbFile3().Length(), 0, (const TDesC8*)&KDbFile3)); + if(err == KErrNone) + { + CSqlSrvDatabase* db = NULL; + TRAP(err, db = CSqlSrvDatabase::OpenL(fdata)); + if(err == KErrNone) + { + TRAP(err, fdata.SetL(msg, KDbFile4().Length(), 0, (const TDesC8*)&KDbFile4)); + if(err == KErrNone) + { + TRAP(err, db->AttachDbL(fdata, _L("db2"))); + if(err == KErrNone) + { + TRAP(err, db->DetachDbL(_L("db2"))); + } + } + delete db; + } + } + OomPostStep(); } - TheTest.Printf(_L("\r\n===CSqlSrvDatabase::OpenL() & CSqlSrvDatabase::AttachDbL() OOM test succeeded at heap failure rate of %d ===\r\n"), failingAllocationNo); + + (void)TheFs.Delete(KDbFile4); + (void)TheFs.Delete(KDbFile3); + + delete TheServer; + TheServer = NULL; + + TEST2(err, KErrNone); + TheTest.Printf(_L("\r\n===CSqlSrvDatabase::OpenL() & CSqlSrvDatabase::AttachDbL() OOM test 2 succeeded at heap failure rate of %d ===\r\n"), failingAllocationNo); + } + +/** +@SYMTestCaseID PDS-SQL-UT-4173 +@SYMTestCaseDesc CSqlSrvDatabase::OpenL() & CSqlSrvDatabase::CreateSecureL() OOM test. +@SYMTestPriority High +@SYMTestActions The test runs CSqlSrvDatabase::OpenL() and CSqlSrvDatabase::CreateSecureL() in an OOM test. + The test creates a secure database then executes CSqlSrvDatabase::OpenL() in an OOM loop. + After that the database is deleted and the test executes CSqlSrvDatabase::CreateSecureL() in an OOM loop. + The purpose of the test is to check that the CSqlSrver maps are properly updated when + the database is closed. +@SYMTestExpectedResults Test must not fail +@SYMDEF DEF144577, PDEF44845 +*/ +void OpenCreateDatabaseOomTest() + { + TheServer = NULL; + TRAPD(err, TheServer = CreateSqlServerL()); + TEST2(err, KErrNone); + + (void)TheFs.Delete(KDbFile2); + CreateSecureTestDb(KDbFile2); + + TheTest.Printf(_L("Iteration:\r\n")); + + //Open the database + TInt failingAllocationNo = 0; + err = KErrNoMemory; + while(err == KErrNoMemory) + { + TheTest.Printf(_L(" %d"), ++failingAllocationNo); + OomPreStep(failingAllocationNo); + + RMessage2 msg; + TSqlSrvFileData& fdata = TheServer->FileData(); + TRAP(err, fdata.SetL(msg, KDbFile2().Length(), 0, (const TDesC8*)&KDbFile2)); + if(err == KErrNone) + { + CSqlSrvDatabase* db = NULL; + TRAP(err, db = CSqlSrvDatabase::OpenL(fdata)); + if(err == KErrNone) + { + delete db; + } + else + { + TEST(!db); + } + } + OomPostStep(); + } + TEST2(err, KErrNone); + err = TheFs.Delete(KDbFile2); + TEST2(err, KErrNone); + //Create the database + TInt failingAllocationNo2 = 0; + err = KErrNoMemory; + while(err == KErrNoMemory) + { + TheTest.Printf(_L(" %d"), ++failingAllocationNo2); + OomPreStep(failingAllocationNo2); + RMessage2 msg; + TSqlSrvFileData& fdata = TheServer->FileData(); + TRAP(err, fdata.SetL(msg, KDbFile2().Length(), 0, (const TDesC8*)&KDbFile2)); + if(err == KErrNone) + { + TSecurityPolicy defaultPolicy(TSecurityPolicy::EAlwaysPass); + CSqlSecurityPolicy* policy = NULL; + TRAP(err, policy = CSqlSecurityPolicy::NewL(defaultPolicy)); + if(err == KErrNone) + { + CSqlSrvDatabase* db = NULL; + TRAP(err, db = CSqlSrvDatabase::CreateSecureL(fdata, policy)); + if(err == KErrNone) + { + delete db; + } + else + { + TEST(!db); + } + } + } + OomPostStep(); + } + + (void)TheFs.Delete(KDbFile2); + + delete TheServer; + TheServer = NULL; + + TEST2(err, KErrNone); + TheTest.Printf(_L("\r\n===CSqlSrvDatabase::OpenL() & CSqlSrvDatabase::CreateSecureL() OOM test succeeded at heap failure rate of %d ===\r\n"), + failingAllocationNo + failingAllocationNo2); } void DoTests() @@ -545,7 +691,13 @@ TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-UT-4171 CSqlSrvDatabase::OpenL() & CSqlSrvDatabase::AttachDbL() OOM unit test")); OpenAttachDatabaseOomTest(); - + + TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-UT-4172 CSqlSrvDatabase::OpenL() & CSqlSrvDatabase::AttachDbL() OOM unit test - 2")); + OpenAttachDatabaseOomTest2(); + + TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-UT-4173 CSqlSrvDatabase::OpenL() & CSqlSrvDatabase::CreateL() OOM unit test")); + OpenCreateDatabaseOomTest(); + delete scheduler; #endif //_DEBUG }