loggingservices/eventlogger/test/src/t_logwrap.cpp
changeset 0 08ec8eefde2f
child 9 667e88a979d7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loggingservices/eventlogger/test/src/t_logwrap.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,396 @@
+// Copyright (c) 2002-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:
+//
+
+#include <s32file.h>
+#include <bautils.h>
+#include "TEST.H"
+
+#undef test  //there is a "test" macro which hides "RTest test" declaration.
+
+RTest test(_L("Log Wrapper Test Harness"));
+
+_LIT(KTestRemoteParty, "Remote Party");
+_LIT(KTestDirection, "Direction");
+const TLogDurationType KTestDurationType = 1;
+const TLogDuration KTestDuration = 0x1234;
+_LIT(KTestStatus, "Status");
+_LIT(KTestSubject, "Subject");
+_LIT(KTestNumber, "Number");
+const TLogContactItemId KTestContact = 0x1234;
+const TLogLink KTestLink = 0x1234;
+_LIT8(KTestData, "ABCDEFGH");
+
+/**
+@SYMTestCaseID          SYSLIB-LOGENG-CT-1011
+@SYMTestCaseDesc	    Tests for the functionality of CLogEvent class
+@SYMTestPriority 	    High
+@SYMTestActions  	    Tests for adding,changing,deleting and getting event type functions on the logevent
+                        Check for memory,KErrNone and KErrNotSupported error flags
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestBasicL(CLogBase& aClient, TBool aClientAvailable)
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1011 "));
+	CTestActive* active = new(ELeave)CTestActive();
+	CleanupStack::PushL(active);
+
+	CLogEvent* event = CLogEvent::NewL();
+	CleanupStack::PushL(event);
+
+	TTime now;
+	now.UniversalTime();
+
+	event->SetEventType(KLogCallEventTypeUid);
+
+	active->StartL();
+	aClient.AddEvent(*event, active->iStatus);
+	CActiveScheduler::Start();
+	if(aClientAvailable)
+		{
+		TEST2(active->iStatus.Int(), KErrNone);
+		}
+	else
+		{
+		TEST2(active->iStatus.Int(), KErrNotSupported);
+		}
+
+	if (aClientAvailable)
+		{
+		TEST(event->EventType() == KLogCallEventTypeUid);
+		TEST(event->Description().Length() > 0);
+		TEST(event->Time() >= now);
+		now = event->Time();
+		}
+
+	TLogId id = event->Id();
+
+	event->SetRemoteParty(KTestRemoteParty);
+	event->SetDirection(KTestDirection);
+	event->SetDurationType(KTestDurationType);
+	event->SetDuration(KTestDuration);
+	event->SetStatus(KTestStatus);
+	event->SetSubject(KTestSubject);
+	event->SetNumber(KTestNumber);
+	event->SetContact(KTestContact);
+	event->SetLink(KTestLink);
+	event->SetDataL(KTestData);
+
+	active->StartL();
+	aClient.ChangeEvent(*event, active->iStatus);
+	CActiveScheduler::Start();
+	if(aClientAvailable)
+		{
+		TEST2(active->iStatus.Int(), KErrNone);
+		}
+	else
+		{
+		TEST2(active->iStatus.Int(), KErrNotSupported);
+		}
+
+	if (aClientAvailable)
+		{
+		TEST(event->Id() == id);
+		TEST(event->EventType() == KLogCallEventTypeUid);
+		TEST(event->Description().Length() > 0);
+		TEST(event->Time() == now);
+		TEST(event->RemoteParty() == KTestRemoteParty);
+		TEST(event->Direction() == KTestDirection);
+		TEST(event->DurationType() == KTestDurationType);
+		TEST(event->Duration() == KTestDuration);
+		TEST(event->Status() == KTestStatus);
+		TEST(event->Subject() == KTestSubject);
+		TEST(event->Number() == KTestNumber);
+		TEST(event->Contact() == KTestContact);
+		TEST(event->Link() == KTestLink);
+		TEST(event->Data() == KTestData);
+		}
+
+	CleanupStack::PopAndDestroy(); // event;
+
+	event = CLogEvent::NewL();
+	CleanupStack::PushL(event);
+
+	event->SetId(id);
+
+	active->StartL();
+	aClient.GetEvent(*event, active->iStatus);
+	CActiveScheduler::Start();
+	if(aClientAvailable)
+		{
+		TEST2(active->iStatus.Int(), KErrNone);
+		}
+	else
+		{
+		TEST2(active->iStatus.Int(), KErrNotSupported);
+		}
+
+	if (aClientAvailable)
+		{
+		TEST(event->Id() == id);
+		TEST(event->EventType() == KLogCallEventTypeUid);
+		TEST(event->Description().Length() > 0);
+		TEST(event->Time() == now);
+		TEST(event->RemoteParty() == KTestRemoteParty);
+		TEST(event->Direction() == KTestDirection);
+		TEST(event->DurationType() == KTestDurationType);
+		TEST(event->Duration() == KTestDuration);
+		TEST(event->Status() == KTestStatus);
+		TEST(event->Subject() == KTestSubject);
+		TEST(event->Number() == KTestNumber);
+		TEST(event->Contact() == KTestContact);
+		TEST(event->Link() == KTestLink);
+		TEST(event->Data() == KTestData);
+		}
+
+	active->StartL();
+	aClient.DeleteEvent(id, active->iStatus);
+	CActiveScheduler::Start();
+	if(aClientAvailable)
+		{
+		TEST2(active->iStatus.Int(), KErrNone);
+		}
+	else
+		{
+		TEST2(active->iStatus.Int(), KErrNotSupported);
+		}
+
+	active->StartL();
+	aClient.GetEvent(*event, active->iStatus);
+	CActiveScheduler::Start();
+	if(aClientAvailable)
+		{
+		TEST2(active->iStatus.Int(), KErrNotFound);
+		}
+	else
+		{
+		TEST2(active->iStatus.Int(), KErrNotSupported);
+		}
+
+	CleanupStack::PopAndDestroy(2); // event, active
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-LOGENG-CT-1012
+@SYMTestCaseDesc	    Test for CLogWrapper::Log(),CLogWrapper::ClientAvailable() functions
+@SYMTestPriority 	    High
+@SYMTestActions  	    Execute basics event test on a log wrapper
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestWrapperL()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1012 "));
+	CTestActive* active = new(ELeave)CTestActive();
+	CleanupStack::PushL(active);
+
+	CLogWrapper* wrapper = CLogWrapper::NewL(theFs);
+	CleanupStack::PushL(wrapper);
+
+	CLogBase& logBase = wrapper->Log();
+	TestBasicL(logBase, wrapper->ClientAvailable());
+
+	TBuf<KLogMaxSharedStringLength> buf;
+	if (wrapper->ClientAvailable())
+		{
+		CLogBase& logBase2 = wrapper->Log();
+		TEST2(logBase2.GetString(buf, R_LOG_DIR_IN), KErrNone);
+		TEST(buf.Length() > 0);
+		}
+	else
+		{
+		CLogBase& logBase3 = wrapper->Log();
+		TEST2(logBase3.GetString(buf, R_LOG_DIR_IN), KErrNotSupported);
+		TEST(buf.Length() == 0);
+		}
+
+	CleanupStack::PopAndDestroy(2); // wrapper, active
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-LOGENG-CT-1013
+@SYMTestCaseDesc	    Tests for out of memory errors on CLogWrapper::NewL() function call
+@SYMTestPriority 	    High
+@SYMTestActions  	    Check for no memory error condition
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestHeapFailL()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1013 "));
+	CLogWrapper* wrapper = NULL;
+	
+#ifdef _DEBUG
+	TInt failCount = 0;
+#endif
+
+	TBool finished = EFalse;
+	TInt error;
+	
+	while(!finished)
+		{
+		__UHEAP_FAILNEXT(failCount++);
+
+		TRAP(error, wrapper = CLogWrapper::NewL(theFs));
+
+		__UHEAP_RESET;
+
+		if (error == KErrNone)
+			{
+			finished = ETrue;
+			CLogBase& logBase = wrapper->Log();
+			TestBasicL(logBase, wrapper->ClientAvailable());
+			delete wrapper;
+			}
+		else
+			TEST2(error, KErrNoMemory);
+		}
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-LOGENG-CT-1014
+@SYMTestCaseDesc	    Tests for CLogWrapper::NewL() function 
+@SYMTestPriority 	    High
+@SYMTestActions  	    Create log wrapper on heap,if no error execute the basic event tests.
+                        Check for general errors.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestFileFailL()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1014 "));
+	CLogWrapper* wrapper = NULL;
+	
+	TInt failCount = 0;
+	TBool finished = EFalse;
+	TInt error;
+	
+	while(!finished)
+		{
+		__FILE_FAILNEXT(failCount++);
+
+		TRAP(error, wrapper = CLogWrapper::NewL(theFs));
+
+		__FILE_RESET;
+
+		if (error == KErrNone)
+			{
+			finished = ETrue;
+			CLogBase& logBase = wrapper->Log();
+			TestBasicL(logBase, wrapper->ClientAvailable());
+			delete wrapper;
+			}
+		else
+			TEST2(error, KErrGeneral);
+		}
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-LOGENG-CT-1015
+@SYMTestCaseDesc	    Tests for INC047632
+@SYMTestPriority 	    High
+@SYMTestActions  	    This test uses a stored copy of a corrupt database which is copied to z:\system\data.
+						When this database ia accessed open returns an error KErrEof.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void Test4INC047632L()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1015 "));
+#ifdef _DEBUG	
+	TestUtils::CopyCorruptDbL();
+
+	// run basic test
+	CLogWrapper* wrapper = NULL;
+	
+	TInt error = KErrNone;
+	TRAP(error, wrapper = CLogWrapper::NewL(theFs));
+
+	if (error == KErrNone)
+		{
+		CLogBase& logBase = wrapper->Log();
+		TestBasicL(logBase, wrapper->ClientAvailable());
+		delete wrapper;
+		}
+#else
+	RDebug::Print(_L("Test4INC047632L() can be executed only in debug mode. In release mode the LogEng server cannot be stopped.\n"));
+#endif//_DEBUG
+	}
+/**
+@SYMTestCaseID          SYSLIB-LOGENG-CT-4001
+@SYMTestCaseDesc	    Tests for INC114909
+@SYMTestPriority 	    High
+@SYMTestActions  	    This test uses a stored copy of a corrupt damaged database which is 
+						copied to z:\system\data.
+						When an attempt is made to open the database the fault should be 
+						recognised and the database deleted.
+@SYMTestExpectedResults Test must not fail
+@SYMDEF                 INC114909
+*/
+LOCAL_C void Test5INC114909L()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-4001 "));
+#ifdef _DEBUG	
+ 	// Copy over the damaged database to be used.
+	TestUtils::CopyCorruptDamagedDbL();
+ 
+	// run basic test
+	CLogWrapper* wrapper = NULL;	
+	TInt error = KErrNone;
+	TRAP(error, wrapper = CLogWrapper::NewL(theFs));
+	delete wrapper;
+	
+	// Without the code for this defect the error here will be KErrCorrupt.
+	// and the log server will continually try to restart and be brought down
+	// with KErrCorrupt 
+	// With the fix the error with the database is detected on opening the database 
+	// and the  database file is deleted and re-created.
+ 
+	TEST(error == KErrNone);
+	
+	// Perform an extra check that the log server has not been brought down
+	// as is the case without the defect fix.
+	RLogTestSession theLogServ;
+	error = theLogServ.Connect();
+ 	TEST(error == KErrNone);
+#else
+	RDebug::Print(_L("Test4INC047632L() can be executed only in debug mode. In release mode the LogEng server cannot be stopped.\n"));
+#endif//_DEBUG
+	}
+
+void doTestsL()
+	{
+	TestUtils::Initialize(_L("T_LOGWRAP"));
+
+	test.Start(_L("Wrapper"));
+	TestWrapperL();
+	theLog.Write(_L8("Test 1 OK\n"));
+
+	test.Next(_L("Heap Failure"));
+	TestHeapFailL();
+	theLog.Write(_L8("Test 2 OK\n"));
+
+	test.Next(_L("File Failure"));
+	TestFileFailL();
+	theLog.Write(_L8("Test 3 OK\n"));
+
+	test.Next(_L("Test4 for INC047632 - corrupt Logdbu.dat returns KErrEoF"));
+	Test4INC047632L();
+	theLog.Write(_L8("Test 4 for INC047632 OK\n"));
+	
+	test.Next(_L("Test5 for INC114909 - test damaged Logdbu.dat is dealt with correctly "));
+	Test5INC114909L();
+	theLog.Write(_L8("Test 5 for INC114909 OK\n"));
+	}