loggingservices/eventlogger/test/src/t_logservercrash.cpp
changeset 0 08ec8eefde2f
child 6 5ffdb8f2067f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loggingservices/eventlogger/test/src/t_logservercrash.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,229 @@
+// Copyright (c) 2004-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:
+// T_LOGSERVCRASH.CPP
+// This tests the fix implemented for DEF047320
+// 
+//
+
+#include <s32file.h>
+#include <e32math.h>
+
+#include "TEST.H"
+#include <logview.h>
+
+#undef test  //there is a "test" macro which hides "RTest test" declaration.
+
+RTest test(_L("Log Event Test Harness"));
+
+const TInt KTestEventNum = 10;
+const TLogDurationType KTestDurationType1 = 1;
+const TLogDuration KTestDuration1 = 0x1234;
+const TLogFlags KTestFlags1 = 0x5;
+const TLogLink KTestLink1 = 0x1234;
+
+_LIT(KTestRemoteParty1, "Remote Party");
+_LIT(KTestDirection1, "Direction");
+_LIT(KTestStatus1, "Status");
+_LIT(KTestSubject1, "Subject");
+_LIT(KTestNumber1, "TheNumber");
+_LIT8(KTestData1, "ABCDEFGH");
+
+TBool TheMatchingIsEnabled = EFalse;
+
+
+#define SERVER_NAME _L("LogServ*")
+
+/**
+@SYMTestCaseID          SYSLIB-LOGENG-CT-1021
+@SYMTestCaseDesc	    Tests for killing the server
+                        Tests for RProcess::Kill(),RThread::Kill() function
+@SYMTestPriority 	    High
+@SYMTestActions  	    If EKA2 find the process and kill it, for EKA1 find thread and kill it
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/	
+LOCAL_C void TestKillServerL()
+	{	
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1021 Before Killing Server "));
+	User::After(2000000);
+	
+	// for EKA2 find process and Kill
+	// Note: this needs CAPABILITY PowerMgmt
+	TFindProcess findProcess(SERVER_NAME);
+	TFullName result;
+	LEAVE_IF_ERROR( findProcess.Next(result) );
+	
+	RProcess server;
+	LEAVE_IF_ERROR( server.Open(findProcess, EOwnerProcess) );
+	server.Kill(0);		
+ 
+	test.Next(_L("Server is Killed"));
+	User::After(2000000);
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-LOGENG-CT-1022
+@SYMTestCaseDesc	    Tests for operations on log database
+@SYMTestPriority 	    High
+@SYMTestActions  	    Check by add new event,change the event,and get event and check for integrity of data 
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/	
+LOCAL_C void TestEventViewL(CLogClient& aClient)
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-LOGENG-CT-1022 "));
+	CTestActive* active = new(ELeave)CTestActive();
+	CleanupStack::PushL(active);
+
+	CLogViewChangeObserver* changeObs = CLogViewChangeObserver::NewLC();
+	changeObs->SetActive();
+
+  	CLogViewEvent* view = CLogViewEvent::NewL(aClient, *changeObs);
+	CleanupStack::PushL(view);
+
+	CLogEvent* event;
+	TLogId id;
+	TTime now;
+	now.UniversalTime();
+	TInt count;
+
+	for(count = 0; count < KTestEventNum; count++)
+		{
+		event = CLogEvent::NewL();
+		CleanupStack::PushL(event);
+		event->SetEventType(KLogCallEventTypeUid);
+
+		//User::After(Math::Random() % 100000);
+		User::After(1000000);
+		active->StartL();
+		aClient.AddEvent(*event, active->iStatus);
+		CActiveScheduler::Start();
+
+		TEST2(active->iStatus.Int(), KErrNone);
+		TEST(event->EventType() == KLogCallEventTypeUid);
+		TEST(event->Description().Length() > 0);
+		TEST(event->Time() >= now);
+
+		now = event->Time();
+		id = event->Id();
+		
+		event->SetRemoteParty(KTestRemoteParty1);
+		event->SetDirection(KTestDirection1);
+		event->SetDurationType(KTestDurationType1);
+		event->SetDuration(KTestDuration1);
+		event->SetStatus(KTestStatus1);
+		event->SetSubject(KTestSubject1);
+		event->SetNumber(KTestNumber1);
+		event->SetLink(KTestLink1);
+		event->SetDataL(KTestData1);
+		event->SetFlags(KTestFlags1);
+		event->SetContact((TLogContactItemId) count+1);
+
+		User::After(Math::Random() % 100000);
+		active->StartL();
+		aClient.ChangeEvent(*event, active->iStatus);
+		CActiveScheduler::Start();
+
+		TEST2(active->iStatus.Int(), KErrNone);
+		TEST(event->EventType() == KLogCallEventTypeUid);
+		TEST(event->RemoteParty() == KTestRemoteParty1);
+		TEST(event->Direction() == KTestDirection1);
+		TEST(event->DurationType() == KTestDurationType1);
+		TEST(event->Duration() == KTestDuration1);
+		TEST(event->Status() == KTestStatus1);
+		TEST(event->Subject() == KTestSubject1);
+		TEST(event->Number() == KTestNumber1);
+		TEST(event->Link() == KTestLink1);
+		TEST(event->Data() == KTestData1);
+		TLogFlags eventFlags;
+		if(TheMatchingIsEnabled)
+			{
+			eventFlags=KTestFlags1|KLogEventContactSearched;
+			}
+		else
+			{
+			eventFlags=KTestFlags1;
+			}
+		TEST(event->Flags() == eventFlags);
+		TEST(event->Contact()==(TLogContactItemId) count+1);
+
+		CleanupStack::PopAndDestroy(); // event;
+
+		event = CLogEvent::NewL();
+		CleanupStack::PushL(event);
+
+		event->SetId(id);
+		active->StartL();
+		aClient.GetEvent(*event, active->iStatus);
+		CActiveScheduler::Start();
+
+		TEST2(active->iStatus.Int(), KErrNone);
+		TEST(event->EventType() == KLogCallEventTypeUid);
+		TEST(event->RemoteParty() == KTestRemoteParty1);
+		TEST(event->Direction() == KTestDirection1);
+		TEST(event->DurationType() == KTestDurationType1);
+		TEST(event->Duration() == KTestDuration1);
+		TEST(event->Status() == KTestStatus1);
+		TEST(event->Subject() == KTestSubject1);
+		TEST(event->Number() == KTestNumber1);
+		TEST(event->Link() == KTestLink1);
+		TEST(event->Data() == KTestData1);
+		TEST(event->Flags() == eventFlags);
+		TEST(event->Contact()==(TLogContactItemId) count+1);
+		CleanupStack::PopAndDestroy(); // event;
+		}
+
+	CleanupStack::PopAndDestroy(3, active); // Delete view, changeObs, active
+	}
+
+/**
+ This code tests that the log engine will restart automatically
+ by killing the Log engine server and then checking that
+ a test event can be added.
+ Details can be found in DEF047320
+ 
+ */
+void doTestsL() 
+	{
+	TheMatchingIsEnabled = TestUtils::MatchingEnabledL();
+	
+	// test 0 adds an event
+	TestUtils::Initialize(_L("T_LOGSERVERCRASH"));
+	TestUtils::DeleteDatabaseL();
+
+	CLogClient* client = CLogClient::NewL(theFs);
+	CleanupStack::PushL(client);
+
+	CLogChangeNotifier* notifier = CLogChangeNotifier::NewL();
+	CleanupStack::PushL(notifier);
+
+	test.Start(_L("Event View With No Filter: Before Killing Sever"));
+	test.Next(_L("Test Add Event"));
+	TestEventViewL(*client);
+	theLog.Write(_L8("Test 0 OK\n"));
+
+	// Test 1 stops the server
+	test.Next(_L("Test Kill Server"));
+	TestKillServerL();
+	theLog.Write(_L8("Test 1 OK\n"));
+
+	// Test 2 checks the server is going again
+	test.Start(_L("Event View With No Filter : After Killing Sever"));
+	test.Next(_L("Test Add Event"));
+	TestEventViewL(*client);
+	theLog.Write(_L8("Test 2 OK\n"));
+
+	test.End();
+	CleanupStack::PopAndDestroy(2);
+	}