sl@0: // Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
sl@0: // All rights reserved.
sl@0: // This component and the accompanying materials are made available
sl@0: // under the terms of "Eclipse Public License v1.0"
sl@0: // which accompanies this distribution, and is available
sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0: //
sl@0: // Initial Contributors:
sl@0: // Nokia Corporation - initial contribution.
sl@0: //
sl@0: // Contributors:
sl@0: //
sl@0: // Description:
sl@0: //
sl@0: 
sl@0: #include <s32file.h>
sl@0: #include "t_logutil2.h"
sl@0: 
sl@0: /*
sl@0: This test may fail occasionally, especially after changing the LogEng server code. The reported error is KErrCorrupt.
sl@0: The typical scenario when the test fails is:
sl@0: 1) Some of the test functions calls "__FILE_FAILNEXT(failCount++)"
sl@0: 2) The test calls some CLogClient method, typically "aClient.GetEventType()".
sl@0: 3) The statement "test(active->iStatus == KErrNone)" fails.
sl@0: This behaviour might be related to INC044553 "DBMS does not handle OOD error 
sl@0: scenarios correctly when committing a transaction".
sl@0: "__FILE_FAILNEXT" is a macro, which calls theFs.SetErrorCondition(KErrGeneral, X).
sl@0: If you perform a search with "SetErrorCondition" keyword in "Programming" database, you will find
sl@0: some explanations that the programmer has to be careful when using SetErrorCondition() method,
sl@0: because:
sl@0: 
sl@0: "You have to be careful if you use this in the same way as you do for heap testing, because you 
sl@0: can get the file system in a state where it think the file you're working on is corrupted."
sl@0: 
sl@0: Anyway, LOGENG server internally uses DBMS component. Calling SetErrorCondition() we test DBMS 
sl@0: component actually not LOGENG component!
sl@0: There is one addidtional thing in the test, which makes me believing that the problem is not 
sl@0: in LOGENG but in SetErrorCondition()/DBMS interaction - in many if the test functions a statement
sl@0: like:
sl@0: 
sl@0:   		if (failCount == 5)
sl@0: 			failCount++;
sl@0: 
sl@0: may be found. I think that it is there to prevent exactly the problem with 
sl@0: SetErrorCondition()/DBMS interaction.
sl@0: */
sl@0: 
sl@0: RTest TheTest(_L("t_logfile"));
sl@0: 
sl@0: const TUid KTestEventUid = {0x10005393};
sl@0: _LIT(KTestEventDesc1, "Event Type Description");
sl@0: _LIT(KTestEventDesc2, "Changed Event Description");
sl@0: _LIT(KTestRemoteParty1, "Remote Party");
sl@0: _LIT(KTestRemoteParty2, "Changed Remote Party");
sl@0: _LIT(KTestDirection1, "Direction");
sl@0: _LIT(KTestDirection2, "Changed Direction");
sl@0: const TLogDurationType KTestDurationType1 = 1;
sl@0: const TLogDurationType KTestDurationType2 = 2;
sl@0: const TLogDuration KTestDuration1 = 0x1234;
sl@0: const TLogDuration KTestDuration2 = 0x1234567;
sl@0: _LIT(KTestStatus1, "Status");
sl@0: _LIT(KTestStatus2, "Changed Status");
sl@0: _LIT(KTestSubject1, "Subject");
sl@0: _LIT(KTestSubject2, "Changed Subject");
sl@0: _LIT(KTestNumber1, "Number");
sl@0: _LIT(KTestNumber2, "Changed Number");
sl@0: const TLogContactItemId KTestContact1 = 0x1234;
sl@0: const TLogContactItemId KTestContact2 = 0x1234567;
sl@0: const TLogLink KTestLink1 = 0x1234;
sl@0: const TLogLink KTestLink2 = 0x1234567;
sl@0: _LIT8(KTestData1, "ABCDEFGH");
sl@0: _LIT8(KTestData2, "IJKLMNOPQRSTUVWXYZ");
sl@0: const TLogSize KTestMaxLogSize = 0xFFF;
sl@0: const TLogRecentSize KTestMaxRecentLogSize = 0xF;
sl@0: const TLogAge KTestMaxEventAge = 0xFFFFFFF;
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-1334
sl@0: @SYMTestCaseDesc	    Basic test to add events
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Tests for CLogClient::AddEvent() function
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestBasicL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1334 "));
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	CLogEvent* event = CLogEvent::NewL();
sl@0: 	CleanupStack::PushL(event);
sl@0: 
sl@0: 	TTime now;
sl@0: 	now.UniversalTime();
sl@0: 
sl@0: 	event->SetEventType(KLogCallEventTypeUid);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.AddEvent(*event, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	TEST(event->EventType() == KLogCallEventTypeUid);
sl@0: 	TEST(event->Description().Length() > 0);
sl@0: 	TEST(event->Time() >= now);
sl@0: 	now = event->Time();
sl@0: 
sl@0: 	TLogId id = event->Id();
sl@0: 
sl@0: 	event->SetRemoteParty(KTestRemoteParty1);
sl@0: 	event->SetDirection(KTestDirection1);
sl@0: 	event->SetDurationType(KTestDurationType1);
sl@0: 	event->SetDuration(KTestDuration1);
sl@0: 	event->SetStatus(KTestStatus1);
sl@0: 	event->SetSubject(KTestSubject1);
sl@0: 	event->SetNumber(KTestNumber1);
sl@0: 	event->SetContact(KTestContact1);
sl@0: 	event->SetLink(KTestLink1);
sl@0: 	event->SetDataL(KTestData1);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.ChangeEvent(*event, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	TEST(event->Id() == id);
sl@0: 	TEST(event->EventType() == KLogCallEventTypeUid);
sl@0: 	TEST(event->Description().Length() > 0);
sl@0: 	TEST(event->Time() == now);
sl@0: 	TEST(event->RemoteParty() == KTestRemoteParty1);
sl@0: 	TEST(event->Direction() == KTestDirection1);
sl@0: 	TEST(event->DurationType() == KTestDurationType1);
sl@0: 	TEST(event->Duration() == KTestDuration1);
sl@0: 	TEST(event->Status() == KTestStatus1);
sl@0: 	TEST(event->Subject() == KTestSubject1);
sl@0: 	TEST(event->Number() == KTestNumber1);
sl@0: 	TEST(event->Contact() == KTestContact1);
sl@0: 	TEST(event->Link() == KTestLink1);
sl@0: 	TEST(event->Data() == KTestData1);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(); // event;
sl@0: 
sl@0: 	event = CLogEvent::NewL();
sl@0: 	CleanupStack::PushL(event);
sl@0: 
sl@0: 	event->SetId(id);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(),KErrNone);
sl@0: 
sl@0: 	TEST(event->Id() == id);
sl@0: 	TEST(event->EventType() == KLogCallEventTypeUid);
sl@0: 	TEST(event->Description().Length() > 0);
sl@0: 	TEST(event->Time() == now);
sl@0: 	TEST(event->RemoteParty() == KTestRemoteParty1);
sl@0: 	TEST(event->Direction() == KTestDirection1);
sl@0: 	TEST(event->DurationType() == KTestDurationType1);
sl@0: 	TEST(event->Duration() == KTestDuration1);
sl@0: 	TEST(event->Status() == KTestStatus1);
sl@0: 	TEST(event->Subject() == KTestSubject1);
sl@0: 	TEST(event->Number() == KTestNumber1);
sl@0: 	TEST(event->Contact() == KTestContact1);
sl@0: 	TEST(event->Link() == KTestLink1);
sl@0: 	TEST(event->Data() == KTestData1);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.DeleteEvent(id, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(),KErrNone);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNotFound);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(2); // event, active
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0911
sl@0: @SYMTestCaseDesc	    Tests for new CLogClient object creation
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Create a new CLogClient check for memory errors
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestConstructionL()
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0911 "));
sl@0: 	CLogClient* client = NULL;
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 	TInt error;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		TheTest.Printf(_L("%d\r\n"), failCount);
sl@0: 
sl@0:         if(failCount > 8)
sl@0:             {
sl@0:             TRAP(error, client = CLogClient::NewL(theFs));
sl@0:             TEST2(error, KErrNone);
sl@0:             TestBasicL(*client);
sl@0:             finished = ETrue;
sl@0:             continue;
sl@0:             }
sl@0: 		
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 
sl@0: 		TRAP(error, client = CLogClient::NewL(theFs));
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 
sl@0: 		if (error == KErrNone)
sl@0: 			{
sl@0: 			finished = ETrue;
sl@0: 			TestBasicL(*client);
sl@0: 			}
sl@0: 		else
sl@0: 			{
sl@0: 			TEST2(error, KErrNoMemory);
sl@0: 			TestUtils::DeleteDatabaseL();
sl@0: 			}
sl@0: 		}
sl@0: 
sl@0: 	delete client;
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0912
sl@0: @SYMTestCaseDesc	    Adding an event type test,
sl@0:                         Tests for CLogClient::AddEventType() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while adding event types
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestAddEventTypeL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0912 "));
sl@0: 	CLogEventType* type = CLogEventType::NewL();
sl@0: 	CleanupStack::PushL(type);
sl@0: 
sl@0: 	type->SetUid(KTestEventUid);
sl@0: 	type->SetDescription(KTestEventDesc1);
sl@0: 	type->SetLoggingEnabled(ETrue);
sl@0: 
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 	TInt error;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		error = KErrNone;
sl@0:         if(failCount == 8)
sl@0:             {
sl@0:             aClient.AddEventType(*type, active->iStatus);
sl@0:             active->StartL();
sl@0:             CActiveScheduler::Start();
sl@0:             TEST2(active->iStatus.Int(), KErrNone);
sl@0:             finished = ETrue;
sl@0:             continue;
sl@0:             }
sl@0: 
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0:         
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 		
sl@0: 		aClient.AddEventType(*type, active->iStatus);
sl@0: 	
sl@0: 		active->StartL();
sl@0: 		CActiveScheduler::Start();
sl@0: 		
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			error = active->iStatus.Int();
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 
sl@0: 		if (error == KErrNoMemory)
sl@0: 			{
sl@0: 			active->StartL();
sl@0: 			aClient.GetEventType(*type, active->iStatus);
sl@0: 			CActiveScheduler::Start();
sl@0: 			TEST2(active->iStatus.Int(), KErrNotFound);
sl@0: 			}
sl@0: 		else
sl@0: 			TEST2(error, KErrNone);
sl@0: 
sl@0: 		}
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.AddEventType(*type, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrAlreadyExists);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(2); // active, type
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0913
sl@0: @SYMTestCaseDesc	    Getting an event type test.
sl@0:                         Tests for CLogClient::GetEventType() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while getting event types
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestGetEventTypeL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0913 "));
sl@0: 	CLogEventType* type = CLogEventType::NewL();
sl@0: 	CleanupStack::PushL(type);
sl@0: 
sl@0: 	type->SetUid(KTestEventUid);
sl@0: 
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 
sl@0: 		aClient.GetEventType(*type, active->iStatus);
sl@0: 
sl@0: 		active->StartL();
sl@0: 		CActiveScheduler::Start();
sl@0: 		
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			{
sl@0: 			TEST2(active->iStatus.Int(), KErrNoMemory);
sl@0: 			TEST(type->Description() == KNullDesC);
sl@0: 			}
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 		}
sl@0: 
sl@0: 	TEST(type->Uid() == KTestEventUid);
sl@0: 	TEST(type->Description() == KTestEventDesc1);
sl@0: 	TEST(type->LoggingEnabled());
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(2); // active, type
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0914
sl@0: @SYMTestCaseDesc	    Changing an event type test,
sl@0:                         Tests for CLogClient::ChangeEventType() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while changing event types
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestChangeEventTypeL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0914 "));
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	CLogEventType* type = CLogEventType::NewL();
sl@0: 	CleanupStack::PushL(type);
sl@0: 
sl@0: 	type->SetUid(KTestEventUid);
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 	TInt error;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		error = KErrNone;
sl@0: 
sl@0: 		type->SetDescription(KTestEventDesc2);
sl@0: 		type->SetLoggingEnabled(EFalse);
sl@0: 
sl@0:         if(failCount == 8)
sl@0:             {
sl@0:             aClient.ChangeEventType(*type, active->iStatus);
sl@0:             active->StartL();
sl@0:             CActiveScheduler::Start();
sl@0:             TEST2(active->iStatus.Int(), KErrNone);
sl@0:             finished = ETrue;
sl@0:             continue;
sl@0:             }
sl@0: 		
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 
sl@0: 		aClient.ChangeEventType(*type, active->iStatus);
sl@0: 
sl@0: 		active->StartL();
sl@0: 		CActiveScheduler::Start();
sl@0: 
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			error = active->iStatus.Int();
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 
sl@0: 		if (error == KErrNoMemory)
sl@0: 			{
sl@0: 			active->StartL();
sl@0: 			aClient.GetEventType(*type, active->iStatus);
sl@0: 			CActiveScheduler::Start();
sl@0: 			TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 			TEST(type->Description() == KTestEventDesc1);
sl@0: 			TEST(type->LoggingEnabled());
sl@0: 			}
sl@0: 		else
sl@0: 			TEST2(error, KErrNone);
sl@0: 		}
sl@0: 
sl@0: 	type->SetUid(KTestEventUid);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEventType(*type, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	TEST(type->Uid() == KTestEventUid);
sl@0: 	TEST(type->Description() == KTestEventDesc2);
sl@0: 	TEST(type->LoggingEnabled() == EFalse);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(2); // type, active
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0915
sl@0: @SYMTestCaseDesc	    Deleting an event type test
sl@0:                         Tests for CLogClient::DeleteEventType() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while deleting event types
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestDeleteEventTypeL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0915 "));
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	CLogEventType* type = CLogEventType::NewL();
sl@0: 	CleanupStack::PushL(type);
sl@0: 
sl@0: 	type->SetUid(KTestEventUid);
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 	TInt error;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		error = KErrNone;
sl@0: 
sl@0:         if(failCount == 8)
sl@0:             {
sl@0:             aClient.DeleteEventType(KTestEventUid, active->iStatus);
sl@0:             active->StartL();
sl@0:             CActiveScheduler::Start();
sl@0:             TEST2(active->iStatus.Int(), KErrNone);
sl@0:             finished = ETrue;
sl@0:             continue;
sl@0:             }
sl@0: 		
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 
sl@0: 		aClient.DeleteEventType(KTestEventUid, active->iStatus);
sl@0: 
sl@0: 		active->StartL();
sl@0: 		CActiveScheduler::Start();
sl@0: 
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			error = active->iStatus.Int();
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 
sl@0: 		if (error == KErrNoMemory)
sl@0: 			{
sl@0: 			active->StartL();
sl@0: 			aClient.GetEventType(*type, active->iStatus);
sl@0: 			CActiveScheduler::Start();
sl@0: 			TEST2(active->iStatus.Int(), KErrNone);
sl@0: 			}
sl@0: 		else
sl@0: 			TEST2(error, KErrNone);
sl@0: 		}
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEventType(*type, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNotFound);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(2); // type, active
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0916
sl@0: @SYMTestCaseDesc	    Adding an event test,
sl@0:                         Tests for CLogClient::AddEvent() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while adding event
sl@0:                         Tests for no error conditons,and the event information 
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestAddEventL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0916 "));
sl@0: 	// Ensure we always start from the same state
sl@0:     TestUtils::DeleteDatabaseL();
sl@0: 
sl@0: 	CLogEventType* type = CLogEventType::NewL();
sl@0: 	CleanupStack::PushL(type);
sl@0: 
sl@0: 	type->SetUid(KTestEventUid);
sl@0: 	type->SetDescription(KTestEventDesc1);
sl@0: 	type->SetLoggingEnabled(ETrue);
sl@0: 
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.AddEventType(*type, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	CLogEvent* event = CLogEvent::NewL();
sl@0: 	CleanupStack::PushL(event);
sl@0: 
sl@0: 	TTime now;
sl@0: 	now.UniversalTime();
sl@0: 
sl@0: 	event->SetEventType(KTestEventUid);
sl@0: 	event->SetRemoteParty(KTestRemoteParty1);
sl@0: 	event->SetDirection(KTestDirection1);
sl@0: 	event->SetDurationType(KTestDurationType1);
sl@0: 	event->SetDuration(KTestDuration1);
sl@0: 	event->SetStatus(KTestStatus1);
sl@0: 	event->SetSubject(KTestSubject1);
sl@0: 	event->SetNumber(KTestNumber1);
sl@0: 	event->SetContact(KTestContact1);
sl@0: 	event->SetLink(KTestLink1);
sl@0: 	event->SetDataL(KTestData1);
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 	TInt error;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		error = KErrNone;
sl@0: 
sl@0:         if(failCount == 8)
sl@0:             {
sl@0:             aClient.AddEvent(*event, active->iStatus);
sl@0:             active->StartL();
sl@0:             CActiveScheduler::Start();
sl@0:             TEST2(active->iStatus.Int(), KErrNone);
sl@0:             finished = ETrue;
sl@0:             continue;
sl@0:             }
sl@0: 
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 		aClient.AddEvent(*event, active->iStatus);
sl@0: 
sl@0: 		active->StartL();
sl@0: 		CActiveScheduler::Start();
sl@0: 
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			error = active->iStatus.Int();
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 
sl@0: 		if (error == KErrNoMemory)
sl@0: 			{
sl@0: 			event->SetId(0);
sl@0: 
sl@0: 			active->StartL();
sl@0: 			aClient.GetEvent(*event, active->iStatus);
sl@0: 			CActiveScheduler::Start();
sl@0: 			TEST2(active->iStatus.Int(), KErrNotFound);
sl@0: 
sl@0: 			event->SetId(KLogNullId);
sl@0: 			}
sl@0: 		else
sl@0: 			TEST2(error, KErrNone);
sl@0: 		}
sl@0: 
sl@0: 	TEST(event->Id() == 0);
sl@0: 	TEST(event->Time() >= now);
sl@0: 	TEST(event->Description() == KTestEventDesc1);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(3); // event, active, type
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0917
sl@0: @SYMTestCaseDesc	    Get an events' information test
sl@0:                         Tests for CLogClient::GetEvent() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while getting an event
sl@0:                         Tests for no error conditons,and the event information. 
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestGetEventL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0917 "));
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	CLogEvent* event = CLogEvent::NewL();
sl@0: 	CleanupStack::PushL(event);
sl@0: 
sl@0: 	event->SetId(0);
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 		aClient.GetEvent(*event, active->iStatus);
sl@0: 
sl@0: 		active->StartL();
sl@0: 		CActiveScheduler::Start();
sl@0: 
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			TEST2(active->iStatus.Int(), KErrNoMemory);
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 		}
sl@0: 
sl@0: 	TEST(event->Id() == 0);
sl@0: 	TEST(event->Time() > TTime(0));
sl@0: 	TEST(event->Description() == KTestEventDesc1);
sl@0: 	TEST(event->EventType() == KTestEventUid);
sl@0: 	TEST(event->RemoteParty() == KTestRemoteParty1);
sl@0: 	TEST(event->Direction() == KTestDirection1);
sl@0: 	TEST(event->DurationType() == KTestDurationType1);
sl@0: 	TEST(event->Duration() == KTestDuration1);
sl@0: 	TEST(event->Status() == KTestStatus1);
sl@0: 	TEST(event->Subject() == KTestSubject1);
sl@0: 	TEST(event->Number() == KTestNumber1);
sl@0: 	TEST(event->Contact() == KTestContact1);
sl@0: 	TEST(event->Link() == KTestLink1);
sl@0: 	TEST(event->Data() == KTestData1);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(2); // event, active
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0918
sl@0: @SYMTestCaseDesc	    Changing an event type test
sl@0:                         Tests for CLogClient::ChangeEvent() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while changing an event
sl@0:                         Tests for no error conditons,and the event information for the changed event
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestChangeEventL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0918 "));
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	CLogEvent* event = CLogEvent::NewL();
sl@0: 	CleanupStack::PushL(event);
sl@0: 
sl@0: 	TTime now;
sl@0: 	now.UniversalTime();
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 	TInt error;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		error = KErrNone;
sl@0: 
sl@0: 		event->SetId(0);
sl@0: 		event->SetTime(now);
sl@0: 		event->SetRemoteParty(KTestRemoteParty2);
sl@0: 		event->SetDirection(KTestDirection2);
sl@0: 		event->SetDurationType(KTestDurationType2);
sl@0: 		event->SetDuration(KTestDuration2);
sl@0: 		event->SetStatus(KTestStatus2);
sl@0: 		event->SetSubject(KTestSubject2);
sl@0: 		event->SetNumber(KTestNumber2);
sl@0: 		event->SetContact(KTestContact2);
sl@0: 		event->SetLink(KTestLink2);
sl@0: 		event->SetDataL(KTestData2);
sl@0: 
sl@0:         if(failCount == 14)
sl@0:             {
sl@0:             aClient.ChangeEvent(*event, active->iStatus);
sl@0:             active->StartL();
sl@0:             CActiveScheduler::Start();
sl@0:             TEST2(active->iStatus.Int(), KErrNone);
sl@0:             finished = ETrue;
sl@0:             continue;
sl@0:             }
sl@0: 		
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 
sl@0: 		aClient.ChangeEvent(*event, active->iStatus);
sl@0: 
sl@0: 		active->StartL();
sl@0: 		CActiveScheduler::Start();
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			error = active->iStatus.Int();
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 
sl@0: 		if (error == KErrNoMemory)
sl@0: 			{
sl@0: 			active->StartL();
sl@0: 			aClient.GetEvent(*event, active->iStatus);
sl@0: 			CActiveScheduler::Start();
sl@0: 			if (active->iStatus != KErrNone) 
sl@0: 			    TheTest.Printf(_L("\nerror code:%d failcount:%d\n"),active->iStatus.Int(),failCount);
sl@0: 			TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 			TEST(event->Id() == 0);
sl@0: 			TEST(event->Time() > TTime(0));
sl@0: 			TEST(event->Description() == KTestEventDesc1);
sl@0: 			TEST(event->EventType() == KTestEventUid);
sl@0: 			TEST(event->RemoteParty() == KTestRemoteParty1);
sl@0: 			TEST(event->Direction() == KTestDirection1);
sl@0: 			TEST(event->DurationType() == KTestDurationType1);
sl@0: 			TEST(event->Duration() == KTestDuration1);
sl@0: 			TEST(event->Status() == KTestStatus1);
sl@0: 			TEST(event->Subject() == KTestSubject1);
sl@0: 			TEST(event->Number() == KTestNumber1);
sl@0: 			TEST(event->Contact() == KTestContact1);
sl@0: 			TEST(event->Link() == KTestLink1);
sl@0: 			TEST(event->Data() == KTestData1);
sl@0: 			}
sl@0: 		else
sl@0: 			TEST2(error, KErrNone);
sl@0: 		}
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	TEST(event->Id() == 0);
sl@0: 	TEST(event->Time() == now);
sl@0: 	TEST(event->Description() == KTestEventDesc1);
sl@0: 	TEST(event->EventType() == KTestEventUid);
sl@0: 	TEST(event->RemoteParty() == KTestRemoteParty2);
sl@0: 	TEST(event->Direction() == KTestDirection2);
sl@0: 	TEST(event->DurationType() == KTestDurationType2);
sl@0: 	TEST(event->Duration() == KTestDuration2);
sl@0: 	TEST(event->Status() == KTestStatus2);
sl@0: 	TEST(event->Subject() == KTestSubject2);
sl@0: 	TEST(event->Number() == KTestNumber2);
sl@0: 	TEST(event->Contact() == KTestContact2);
sl@0: 	TEST(event->Link() == KTestLink2);
sl@0: 	TEST(event->Data() == KTestData2);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(2); // event, active
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0919
sl@0: @SYMTestCaseDesc	    Deleting an event test,
sl@0:                         Tests for CLogClient::DeleteEvent() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while deleting an event
sl@0:                         Tests for ErrNone flag.
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestDeleteEventL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0919 "));
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	CLogEvent* event = CLogEvent::NewL();
sl@0: 	CleanupStack::PushL(event);
sl@0: 
sl@0: 	event->SetId(0);
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 	TInt error;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		error = KErrNone;
sl@0: 
sl@0:         if(failCount == 10)
sl@0:             {
sl@0:             aClient.DeleteEvent(0, active->iStatus);
sl@0:             active->StartL();
sl@0:             CActiveScheduler::Start();
sl@0:             TEST2(active->iStatus.Int(), KErrNone);
sl@0:             finished = ETrue;
sl@0:             continue;
sl@0:             }
sl@0: 		
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 
sl@0: 		aClient.DeleteEvent(0, active->iStatus);
sl@0: 
sl@0: 		active->StartL();
sl@0: 		CActiveScheduler::Start();
sl@0: 
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			error = active->iStatus.Int();
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 
sl@0: 		if (error == KErrNoMemory)
sl@0: 			{
sl@0: 			active->StartL();
sl@0: 			aClient.GetEvent(*event, active->iStatus);
sl@0: 			CActiveScheduler::Start();
sl@0: 			TEST2(active->iStatus.Int(), KErrNone);
sl@0: 			}
sl@0: 		else
sl@0: 			TEST2(error, KErrNone);
sl@0: 		}
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNotFound);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(2); // event, active
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0920
sl@0: @SYMTestCaseDesc	    Getting the Log Engine configuration information test
sl@0:                         Tests for CLogClient::GetConfig() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while getting the configuration data
sl@0:                         Tests for ErrNone flag.Tests for the retrieved information
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestGetConfigL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0920 "));
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	TLogConfig config;
sl@0: 
sl@0: 	TEST(config.iMaxEventAge == 0);
sl@0: 	TEST(config.iMaxLogSize == 0);
sl@0: 	TEST(config.iMaxRecentLogSize == 0);
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 		aClient.GetConfig(config, active->iStatus);
sl@0: 
sl@0: 		active->StartL();
sl@0: 		CActiveScheduler::Start();
sl@0: 
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			TEST2(active->iStatus.Int(), KErrNoMemory);
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 		}
sl@0: 
sl@0: 	TEST(config.iMaxEventAge > 0);
sl@0: 	TEST(config.iMaxLogSize > 0);
sl@0: 	TEST(config.iMaxRecentLogSize > 0);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(); // active
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0921
sl@0: @SYMTestCaseDesc	    Changing the configuration of Log Engine test,
sl@0:                         Tests for CLogClient::ChangeConfig() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while changing the log engine configuration data
sl@0:                         Tests for ErrNone error conditons.Tests for the changed configuration data
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestChangeConfigL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0921 "));
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	TLogConfig configOld;
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetConfig(configOld, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	TLogConfig config;
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 	TInt error;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		error = KErrNone;
sl@0: 
sl@0: 		config.iMaxLogSize = KTestMaxLogSize;
sl@0: 		config.iMaxRecentLogSize = KTestMaxRecentLogSize;
sl@0: 		config.iMaxEventAge = KTestMaxEventAge;
sl@0: 
sl@0:         if(failCount == 11)
sl@0:             {
sl@0:             aClient.ChangeConfig(config, active->iStatus);
sl@0:             active->StartL();
sl@0:             CActiveScheduler::Start();
sl@0:             TEST2(active->iStatus.Int(), KErrNone);
sl@0:             finished = ETrue;
sl@0:             continue;
sl@0:             }
sl@0: 		
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 
sl@0: 		aClient.ChangeConfig(config, active->iStatus);
sl@0: 
sl@0: 		active->StartL();
sl@0: 		CActiveScheduler::Start();
sl@0: 
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			error = active->iStatus.Int();
sl@0: 		
sl@0: 		__FILE_RESET;
sl@0: 
sl@0: 		if (error == KErrNoMemory)
sl@0: 			{
sl@0: 			active->StartL();
sl@0: 			aClient.GetConfig(config, active->iStatus);
sl@0: 			CActiveScheduler::Start();
sl@0: 			TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 			TEST(config.iMaxLogSize == configOld.iMaxLogSize);
sl@0: 			TEST(config.iMaxRecentLogSize == configOld.iMaxRecentLogSize);
sl@0: 			TEST(config.iMaxEventAge == configOld.iMaxEventAge);
sl@0: 			}
sl@0: 		else
sl@0: 			TEST2(error, KErrNone);		
sl@0: 		}
sl@0: 
sl@0: 	TEST(config.iMaxLogSize == KTestMaxLogSize);
sl@0: 	TEST(config.iMaxRecentLogSize == KTestMaxRecentLogSize);
sl@0: 	TEST(config.iMaxEventAge == KTestMaxEventAge);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(); // active
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0922
sl@0: @SYMTestCaseDesc	    Getting a standard string from the specified resource file test
sl@0:                         Tests for CLogClient::GetString() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Check for file failure errors while changing the log engine configuration data
sl@0:                         Check for ErrNone flag.Tests for general errors,and retrieved string length. 
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ0000
sl@0: */
sl@0: LOCAL_C void TestGetStringL(CLogClient& aClient)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0922 "));
sl@0: 	TBuf<KLogMaxSharedStringLength> str;
sl@0: 	
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 	TInt error;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 
sl@0: 		error = aClient.GetString(str, R_LOG_DIR_IN);
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 
sl@0: 		if (error == KErrNone)
sl@0: 			{
sl@0: 			finished = ETrue;
sl@0: 			TEST(str.Length() > 0);
sl@0: 			}
sl@0: 		else
sl@0: 			{
sl@0: 			TEST2(error, KErrNoMemory);
sl@0: 			TEST(str.Length() == 0);
sl@0: 			}
sl@0: 		}
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: /**
sl@0: @SYMTestCaseID          SYSLIB-LOGENG-CT-0923
sl@0: @SYMTestCaseDesc	    Clearing the Log Event test.
sl@0:                         Tests for CLogClient::ClearLog() function
sl@0: @SYMTestPriority 	    High
sl@0: @SYMTestActions  	    Add 4 events to the event log,check for ErrNone flag
sl@0:                         Clear the log by calling CLogClient::ClearLog() function.
sl@0: 						Try for getting the added 4 events.Check for not found error.
sl@0: @SYMTestExpectedResults Test must not fail
sl@0: @SYMREQ                 REQ12748
sl@0: */
sl@0: LOCAL_C void TestClearEventLogL(CLogClient& aClient
sl@0: #ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM	
sl@0: 		, TBool aUseSimId = EFalse
sl@0: #endif		
sl@0: 		)
sl@0: 	{
sl@0: 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-0923 "));
sl@0: 	TTime now;
sl@0: 	now.UniversalTime();
sl@0: 	
sl@0: 	TDateTime dt(now.DateTime());
sl@0: 	dt.SetYear(dt.Year() - 1);
sl@0: 	TTime date1(dt);
sl@0: 
sl@0: 	dt.SetYear(dt.Year() - 1);
sl@0: 	TTime date2(dt);
sl@0: 
sl@0: 	CTestActive* active = new(ELeave)CTestActive();
sl@0: 	CleanupStack::PushL(active);
sl@0: 
sl@0: 	CLogEvent* event1 = CLogEvent::NewL();
sl@0: 	CleanupStack::PushL(event1);
sl@0: 	event1->SetEventType(KTestEventUid);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.AddEvent(*event1, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	event1->SetTime(date1);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.ChangeEvent(*event1, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	CLogEvent* event2 = CLogEvent::NewL();
sl@0: 	CleanupStack::PushL(event2);
sl@0: 	event2->SetEventType(KTestEventUid);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.AddEvent(*event2, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	event2->SetTime(date1);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.ChangeEvent(*event2, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	CLogEvent* event3 = CLogEvent::NewL();
sl@0: 	CleanupStack::PushL(event3);
sl@0: 	event3->SetEventType(KTestEventUid);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.AddEvent(*event3, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	event3->SetTime(date2);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.ChangeEvent(*event3, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	CLogEvent* event4 = CLogEvent::NewL();
sl@0: 	CleanupStack::PushL(event4);
sl@0: 	event4->SetEventType(KTestEventUid);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.AddEvent(*event4, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	event4->SetTime(date2);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.ChangeEvent(*event4, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	TInt failCount = 0;
sl@0: 	TBool finished = EFalse;
sl@0: 
sl@0: 	while(!finished)
sl@0: 		{
sl@0: 		TheTest.Printf(_L("%d  \r"), failCount);
sl@0: 		__FILE_FAILNEXT(KErrNoMemory, failCount++);
sl@0: 
sl@0: #ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM	
sl@0: 		if(aUseSimId)
sl@0: 			{
sl@0: 			aClient.ClearLog(date1, KLogNullSimId, active->iStatus);
sl@0: 			}
sl@0: 		else
sl@0: #endif			
sl@0: 			{
sl@0: 			aClient.ClearLog(date1, active->iStatus);
sl@0: 			}
sl@0: 
sl@0: 		__FILE_RESET;
sl@0: 
sl@0: 		active->StartL();	
sl@0: 		CActiveScheduler::Start();
sl@0: 
sl@0: 		if (active->iStatus == KErrNone)
sl@0: 			finished = ETrue;
sl@0: 		else
sl@0: 			TEST2(active->iStatus.Int(), KErrNoMemory);
sl@0: 		}
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event1, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	if (active->iStatus != KErrNone) 
sl@0: 	    TheTest.Printf(_L("error code:%d\n"),active->iStatus.Int());
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event2, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event3, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNotFound);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event4, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNotFound);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.ClearLog(now, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNone);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event1, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNotFound);
sl@0: 
sl@0: 	active->StartL();
sl@0: 	aClient.GetEvent(*event2, active->iStatus);
sl@0: 	CActiveScheduler::Start();
sl@0: 	TEST2(active->iStatus.Int(), KErrNotFound);
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(5); // event4, event3, event2, event1, active
sl@0: 	TheTest.Printf(_L("\r\nThe test has succeeded at iteration %d\n"), failCount);
sl@0: 	}
sl@0: 
sl@0: void doTestsL()
sl@0: 	{
sl@0: 	TestUtils::Initialize(_L("t_logfile"));
sl@0: 
sl@0:     TheTest.Start(_L("Construction + create db"));
sl@0: 	TestUtils::DeleteDatabaseL();
sl@0: 	TestConstructionL(); // Creates database
sl@0: 	TheTest.Next(_L("Construction + open db"));
sl@0: 	TestConstructionL(); // Opens existing database
sl@0: 	TestUtils::DeleteDatabaseL();
sl@0: 	theLog.Write(_L8("Test 1 OK\n"));
sl@0: 
sl@0: 	CLogClient* client = CLogClient::NewL(theFs);
sl@0: 	CleanupStack::PushL(client);
sl@0: 
sl@0: 	TheTest.Next(_L("Add Event Type"));
sl@0: 	TestAddEventTypeL(*client);
sl@0: 	theLog.Write(_L8("Test 2 OK\n"));
sl@0: 
sl@0: 	TheTest.Next(_L("Get Event Type"));
sl@0: 	TestGetEventTypeL(*client);
sl@0: 	theLog.Write(_L8("Test 3 OK\n"));
sl@0: 
sl@0: 	TheTest.Next(_L("Change Event Type"));
sl@0: 	TestChangeEventTypeL(*client);
sl@0: 	theLog.Write(_L8("Test 4 OK\n"));
sl@0: 
sl@0: 	TheTest.Next(_L("Delete Event Type"));
sl@0: 	TestDeleteEventTypeL(*client);
sl@0: 	theLog.Write(_L8("Test 5 OK\n"));
sl@0: 
sl@0: 	TestUtils::DeleteDatabaseL();
sl@0: 
sl@0: 	TheTest.Next(_L("Add Event"));
sl@0: 	TestAddEventL(*client);
sl@0: 	theLog.Write(_L8("Test 6 OK\n"));
sl@0: 
sl@0: 	TheTest.Next(_L("Get Event"));
sl@0: 	TestGetEventL(*client);
sl@0: 	theLog.Write(_L8("Test 7 OK\n"));
sl@0: 
sl@0: 	TheTest.Next(_L("Change Event"));
sl@0: 	TestChangeEventL(*client);
sl@0: 	theLog.Write(_L8("Test 8 OK\n"));
sl@0: 
sl@0: 	TheTest.Next(_L("Delete Event"));
sl@0: 	TestDeleteEventL(*client);
sl@0: 	theLog.Write(_L8("Test 9 OK\n"));
sl@0: 
sl@0: 	TheTest.Next(_L("Get Config"));
sl@0: 	TestGetConfigL(*client);
sl@0: 	theLog.Write(_L8("Test 10 OK\n"));
sl@0: 
sl@0: 	TheTest.Next(_L("Change Config"));
sl@0: 	TestChangeConfigL(*client);
sl@0: 	theLog.Write(_L8("Test 11 OK\n"));
sl@0: 
sl@0: 	TheTest.Next(_L("Get String"));
sl@0: 	TestGetStringL(*client);
sl@0: 	theLog.Write(_L8("Test 12 OK\n"));
sl@0: 
sl@0: 	TheTest.Next(_L("Clear Event Log"));
sl@0: 	TestClearEventLogL(*client);
sl@0: 	theLog.Write(_L8("Test 13 OK\n"));
sl@0: 
sl@0: #ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM	
sl@0: 	TheTest.Next(_L("Clear Event Log + SimId"));
sl@0: 	TestClearEventLogL(*client, ETrue);
sl@0: 	theLog.Write(_L8("Test 14 OK\n"));
sl@0: #endif	
sl@0: 
sl@0: 	CleanupStack::PopAndDestroy(); // client
sl@0: 	}