persistentstorage/sql/TEST/t_sqlfilesrvcrash2.cpp
branchRCL_3
changeset 8 fa9941cf3867
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sql/TEST/t_sqlfilesrvcrash2.cpp	Fri Mar 12 15:51:02 2010 +0200
@@ -0,0 +1,152 @@
+// Copyright (c) 2009 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:
+//
+
+/**
+Instructions:
+
+This is a manual test created to verify DEFXXXXX, 2 executables needs to be run to do this test
+1) t_sqlfilesrvcrash1.exe - Generate a corrupted journal file, this will cause the device to reset. 
+2) t_sqlfilesrvcrash2.exe - After the reboot, tests if SQL can handle the courrpted journal file.
+
+This test requires a non-rugged drive to store the database file and therefore will only work in hardware mode
+*/
+
+#include <e32test.h>
+#include <f32file.h>
+#include <Sqldb.h>
+
+RTest TheTest(_L("t_sqlfilesrvcrash2 test"));
+
+#if !defined __WINS__ && !defined __WINSCW__
+
+RFs TheFs;
+RSqlDatabase TheDb;
+
+_LIT(KDbName, "E:\\test\\t_sqlfilesrvcrash.db");
+_LIT(KJournalName,  "E:\\test\t_sqlfilesrvcrash.db-journal");
+///////////////////////////////////////////////////////////////////////////////////////
+//Deletes all created test files.
+void DeleteTestFiles()
+    {
+    TheDb.Close();
+    (void)RSqlDatabase::Delete(KDbName);
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////
+//Test macros and functions
+void Check(TInt aValue, TInt aLine)
+    {
+    if(!aValue)
+        {
+        RDebug::Print(_L("*** Line %d\r\n"), aLine);
+        TheTest(EFalse, aLine);
+        }
+    }
+void Check(TInt aValue, TInt aExpected, TInt aLine)
+    {
+    if(aValue != aExpected)
+        {
+        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__)
+///////////////////////////////////////////////////////////////////////////////////////
+//Creates file session instance and the test directory
+void CreateTestEnv()
+    {
+    TInt  err = TheFs.Connect();
+    TEST2(err, KErrNone);
+    
+    RFile file;
+    err = file.Open(TheFs, KJournalName, EFileRead);
+    TEST2(err, KErrNone);
+    
+    TInt size;
+    err = file.Size(size);
+    TEST2(err, KErrNone);
+    TEST(size > SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT);
+    file.Close();
+    }
+///////////////////////////////////////////////////////////////////////////////////////
+/**
+@SYMTestCaseID          PDS-SQL-CT-4165
+@SYMTestCaseDesc        Tests for DEF144027: SQL Open returns error if the reported and actual file size are different
+                        Requires a corrupted journal file to be created using t_sqlfilesrvcrash1.exe before running 
+                        this test. If a corrupted journal file exists then check that the opening the database does not
+                        return an error.
+@SYMTestActions         DEF144027: SQL Open returns error if the reported and actual file size are different
+@SYMTestExpectedResults The RSqlDatabase::Open operation should not fail
+@SYMTestPriority        Medium
+@SYMDEF                 DEF144027
+                        DEF144238
+*/
+void DEF144027()
+	{
+    TInt err = TheDb.Open(KDbName);
+    TEST2(err, KErrNone);
+    
+    //Lets perform a simple operation to make sure it works
+    err = TheDb.Exec(_L("BEGIN"));
+    TEST(err >= 0);
+    
+    err = TheDb.Exec(_L("INSERT INTO t1(NUM) VALUES (55)"));
+    TEST2(err, 1);
+    
+    err = TheDb.Exec(_L("INSERT INTO t2(NUM) VALUES (55)"));
+    TEST2(err, 1);
+        
+    err = TheDb.Exec(_L("COMMIT"));
+    TEST(err >= 0);
+        
+    TheDb.Close();
+	}
+
+void DoTests()
+    {    
+    TheTest.Start(_L(" @SYMTestCaseID:PDS-SQL-CT-4165 DEF144027: SQL Open returns error if the reported and actual file size are different"));
+    DEF144027();    
+    }
+#endif //#if !defined __WINS__ && !defined __WINSCW__
+
+TInt E32Main()
+    {
+    TheTest.Title();
+    
+    CTrapCleanup* tc = CTrapCleanup::New();
+    
+    __UHEAP_MARK;
+    
+#if !defined __WINS__ && !defined __WINSCW__
+    DoTests();
+    DeleteTestFiles();
+    TheFs.Close();
+    TheTest.End();
+#else
+    TheTest.Start(_L("This test works only works on hardware!"));
+    TheTest.End();
+#endif  
+ 
+    __UHEAP_MARKEND;
+    
+    TheTest.Close();
+    
+    delete tc;
+
+    User::Heap().Check();
+    return KErrNone;
+    }