persistentstorage/sql/TEST/t_sqloom5.cpp
branchRCL_3
changeset 10 31a8f755b7fe
parent 9 667e88a979d7
child 11 211563e4b919
--- 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    
 	}