persistentstorage/sql/TEST/t_sqlfserr.cpp
branchRCL_3
changeset 11 211563e4b919
parent 8 fa9941cf3867
child 12 6b6fd149daa2
--- a/persistentstorage/sql/TEST/t_sqlfserr.cpp	Thu Apr 01 00:19:42 2010 +0300
+++ b/persistentstorage/sql/TEST/t_sqlfserr.cpp	Wed Apr 14 17:46:32 2010 +0300
@@ -284,6 +284,35 @@
     TEST2(err, KErrNone);
     }
 
+//Creates public shared, private secure and public secure databases.
+void DoCreateTestDatabases(const TPtrC aDbName[], TInt aCount)
+    {
+    TEST(aCount > 0);
+    for(TInt i=0;i<aCount;++i)
+        {
+        TheTest.Printf(_L("Database: \"%S\"\r\n"), &aDbName[i]);       
+        (void)RSqlDatabase::Delete(aDbName[i]);
+        TInt err = KErrGeneral;
+        if(i == (aCount - 1))
+            {
+            RSqlSecurityPolicy policy;
+            CreateTestSecurityPolicy(policy);
+            err = TheDb.Create(aDbName[i], policy);
+            policy.Close();
+            }
+        else
+            {
+            err = TheDb.Create(aDbName[i]);
+            }
+        TEST2(err, KErrNone);
+        err = TheDb.Exec(_L("CREATE TABLE A(Id INTEGER,Name TEXT)"));
+        TEST(err >= 0);
+        err = TheDb.Exec(_L("INSERT INTO A(Id,Name) VALUES(1,'Name')"));
+        TEST2(err, 1);
+        TheDb.Close();
+        }
+    }
+
 /**
 @SYMTestCaseID			SYSLIB-SQL-UT-3421
 @SYMTestCaseDesc		Test for DEF103859 "SQLITE panic, _DEBUG mode, persistent file I/O error simulation".
@@ -300,30 +329,11 @@
 	{
     TPtrC dbName[] = {KTestDbName(), KPrivateTestDbName(), KSecureTestDbName()};
     const TInt KDbNameCnt = sizeof(dbName) / sizeof(dbName[0]);
+    DoCreateTestDatabases(dbName, KDbNameCnt);
     for(TInt k=0;k<KDbNameCnt;++k)
         {	
         TheTest.Printf(_L("Database: \"%S\"\r\n"), &dbName[k]);       
-        (void)RSqlDatabase::Delete(dbName[k]);
-        TInt err = KErrGeneral;
-        if(k == (KDbNameCnt - 1))
-            {
-            RSqlSecurityPolicy policy;
-            CreateTestSecurityPolicy(policy);
-            err = TheDb.Create(dbName[k], policy);
-            policy.Close();
-            }
-        else
-            {
-            err = TheDb.Create(dbName[k]);
-            }
-        TEST2(err, KErrNone);
-        err = TheDb.Exec(_L("CREATE TABLE A(Id INTEGER,Name TEXT)"));
-        TEST(err >= 0);
-        err = TheDb.Exec(_L("INSERT INTO A(Id,Name) VALUES(1,'Name')"));
-        TEST2(err, 1);
-        TheDb.Close();
-    
-        err = KErrNotFound;
+        TInt err = KErrNotFound;
         for(TInt cnt=1;err<KErrNone;++cnt)
             {		
             TheTest.Printf(_L("%d \r"), cnt);		
@@ -354,7 +364,7 @@
         err = RSqlDatabase::Delete(dbName[k]);
         TEST2(err, KErrNone);
         TheTest.Printf(_L("\r\n"));
-        }
+        }//end of: for(TInt k=0;k<KDbNameCnt;++k)
 	}
 
 /**
@@ -413,6 +423,78 @@
 	}
 
 /**
+@SYMTestCaseID          PDS-SQL-UT-4189
+@SYMTestCaseDesc        Test for DEF145125 "SQL, low code coverage".
+                        The test creates public shared, private secure and public secure test databases.
+                        Then the test opens the publich shared database and attempts to attach one of the other two
+                        in a file I/O error simulation loop.
+@SYMTestPriority        High
+@SYMTestActions         Test for DEF145125 - "SQL, low code coverage".
+@SYMTestExpectedResults The test must not fail
+@SYMDEF                 DEF145125 
+*/
+void AttachDatabaseTest()
+    {
+    TPtrC dbName[] = {KTestDbName(), KPrivateTestDbName(), KSecureTestDbName()};
+    const TInt KDbNameCnt = sizeof(dbName) / sizeof(dbName[0]);
+    DoCreateTestDatabases(dbName, KDbNameCnt);
+    for(TInt k=1;k<KDbNameCnt;++k)
+        {
+        TheTest.Printf(_L("Database: \"%S\"\r\n"), &dbName[k]);       
+        TInt err = KErrGeneral;
+        for(TInt cnt=1;err<KErrNone;++cnt)
+            {
+            TheTest.Printf(_L("%d \r"), cnt);       
+            for(TInt fsError=KErrNotFound;fsError>=KErrDied;--fsError)
+                {
+                err = TheDb.Open(KTestDbName);
+                TEST2(err, KErrNone);
+                (void)TheFs.SetErrorCondition(fsError, cnt);
+                err = TheDb.Attach(dbName[k], _L("DB2"));
+                (void)TheFs.SetErrorCondition(KErrNone);
+                (void)TheDb.Detach(_L("DB2"));
+                TheDb.Close();//close the database to recover from the last error
+                }
+            }
+        TEST2(err, KErrNone);
+        err = RSqlDatabase::Delete(dbName[k]);
+        TEST2(err, KErrNone);
+        TheTest.Printf(_L("\r\n"));
+        }
+    }
+
+/**
+@SYMTestCaseID          PDS-SQL-UT-4190
+@SYMTestCaseDesc        Test for DEF145125 "SQL, low code coverage".
+                        The tests attempts to delete a database in a file I/O error simulation loop.
+@SYMTestPriority        High
+@SYMTestActions         Test for DEF145125 - "SQL, low code coverage".
+@SYMTestExpectedResults The test must not fail
+@SYMDEF                 DEF145125 
+*/
+void DeleteDatabaseTest()
+    {
+    TPtrC dbName[] = {KTestDbName(), KPrivateTestDbName(), KSecureTestDbName()};
+    const TInt KDbNameCnt = sizeof(dbName) / sizeof(dbName[0]);
+    DoCreateTestDatabases(dbName, KDbNameCnt);
+    for(TInt k=0;k<KDbNameCnt;++k)
+        {   
+        TheTest.Printf(_L("Database: \"%S\"\r\n"), &dbName[k]);       
+        TInt err = KErrGeneral;
+        for(TInt cnt=1;err<KErrNone;++cnt)
+            {
+            TheTest.Printf(_L("%d \r"), cnt);
+            (void)TheFs.SetErrorCondition(KErrGeneral, cnt);
+            err = RSqlDatabase::Delete(dbName[k]);
+            (void)TheFs.SetErrorCondition(KErrNone);
+            }
+        TEST2(err, KErrNone);
+        err = RSqlDatabase::Delete(KTestDbName);
+        TEST2(err, KErrNotFound);
+        }    
+    }
+
+/**
 @SYMTestCaseID			SYSLIB-SQL-UT-3462
 @SYMTestCaseDesc		Test for DEF105434 "SQL, persistent file I/O simulation, COMMIT problem".
 						The test creates a test database with one table, inserts one record.
@@ -1133,6 +1215,10 @@
 	OpenDatabaseTest();
 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SQL-UT-3434 Create database during file I/O error "));
 	CreateDatabaseTest();
+    TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-UT-4189 Attach database during file I/O error "));
+    AttachDatabaseTest();
+    TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-UT-4190 Delete database during file I/O error "));
+    DeleteDatabaseTest();
 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SQL-UT-3462 Select record test during file I/O error "));
 	SelectRecordTest();
 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SQL-UT-3463 Insert record test during file I/O error "));