--- /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);
+ }