--- a/persistentstorage/sql/TEST/t_sqlfserr.cpp Mon Jun 21 22:46:09 2010 +0100
+++ b/persistentstorage/sql/TEST/t_sqlfserr.cpp Thu Jul 22 16:49:09 2010 +0100
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-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"
@@ -165,7 +165,7 @@
TEST(err >= 0);
TheDb.Close();
err = KErrNotFound;
- for(TInt cnt=1;err<KErrNone;++cnt)
+ for(TInt cnt=0;err<KErrNone;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
for (TInt fsError=KErrNotFound;fsError>=KErrDied;--fsError)
@@ -225,7 +225,7 @@
TEST(err >= 0);
TheDb.Close();
err = KErrNotFound;
- for(TInt cnt=1;err<KErrNone;++cnt)
+ for(TInt cnt=0;err<KErrNone;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
for (TInt fsError=KErrNotFound;fsError>=KErrDied;--fsError)
@@ -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,31 +329,12 @@
{
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;
- for(TInt cnt=1;err<KErrNone;++cnt)
+ TInt err = KErrNotFound;
+ for(TInt cnt=0;err<KErrNone;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
for (TInt fsError=KErrNotFound;fsError>=KErrDied;--fsError)
@@ -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)
}
/**
@@ -380,7 +390,7 @@
{
TheTest.Printf(_L("Database: \"%S\"\r\n"), &dbName[k]);
TInt err = -1;
- for(TInt cnt=1;err<KErrNone;++cnt)
+ for(TInt cnt=0;err<KErrNone;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
for (TInt fsError=KErrNotFound;fsError>=KErrDied;--fsError)
@@ -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=0;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.
@@ -434,7 +516,7 @@
TEST2(err, 1);
TheDb.Close();
err = -1;
- for(TInt cnt=1;err<KErrNone;++cnt)
+ for(TInt cnt=0;err<KErrNone;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
err = TheDb.Open(KTestDbName);
@@ -499,7 +581,7 @@
TEST2(err, 1);
TheDb.Close();
err = -1;
- for(TInt cnt=1;err<KErrNone;++cnt)
+ for(TInt cnt=0;err<KErrNone;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
err = TheDb.Open(KTestDbName);
@@ -717,7 +799,7 @@
TInt rc = -1;
TBuf8<KMaxFileName + 1> dbFileName8;
dbFileName8.Copy(TheRmvMediaDbFileName);
- for(TInt cnt=1;rc!=SQLITE_OK;++cnt)
+ for(TInt cnt=0;rc!=SQLITE_OK;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
sqlite3* dbHandle = NULL;
@@ -818,7 +900,7 @@
TheDb.Close();
//"File I/O" error simulation loop
err = KErrCorrupt;
- for(TInt cnt=1;err<KErrNone;++cnt)
+ for(TInt cnt=0;err<KErrNone;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
TEST2(TheDb.Open(KTestDbName), KErrNone);
@@ -901,7 +983,7 @@
TEST(size.iFree > 0);
//"File I/O" error simulation loop
err = KErrCorrupt;
- for(TInt cnt=1;err<KErrNone;++cnt)
+ for(TInt cnt=0;err<KErrNone;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
TEST2(TheDb.Open(KTestDbName), KErrNone);
@@ -991,7 +1073,7 @@
TheDb.Close();
err = KErrCorrupt;
- for(TInt cnt=1;err<KErrNone;++cnt)
+ for(TInt cnt=0;err<KErrNone;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
TEST2(TheDb.Open(KTestDbName), KErrNone);
@@ -1090,7 +1172,7 @@
TPtr8 bufptr = buf->Des();
err = KErrCorrupt;
- for(TInt cnt=1;err<KErrNone;++cnt)
+ for(TInt cnt=0;err<KErrNone;++cnt)
{
TheTest.Printf(_L("%d \r"), cnt);
TEST2(TheDb.Open(KTestDbName), KErrNone);
@@ -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 "));