landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp117.cpp
author hgs
Fri, 09 Jul 2010 20:18:03 +0530
changeset 35 1a92308afc46
parent 33 834e27cad510
permissions -rw-r--r--
201027

/*
* Copyright (c) 2005 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: 
*   ?description_line
*
*/


//  INCLUDES
#include "FT_CPosTp117.h"
#include <EPos_CPosLandmarkDatabase.h> 
#include <d32dbms.h>
#include <StifLogger.h>

//#include <ss_std.h>
//  CONSTANTS

// ================= MEMBER FUNCTIONS =======================

// ---------------------------------------------------------
// CPosTp117::CloseTest
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp117::CloseTest()
    {
    iLog->Log(_L("CloseTest"));
    delete iActiveLmEvent;
    iActiveLmEvent = NULL;
    
    iThread.Close();
    }

// ---------------------------------------------------------
// CPosTp117::StartL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp117::StartL()
    {
    
    // Remove all landmark databases
   	RemoveAllLmDatabasesL();  
    LandmarkQueuedEvenTestL();
    
    // Remove all landmark databases
   	RemoveAllLmDatabasesL();
    LandmarkQueuedEvenTest2L();

    // Remove all landmark databases
   	RemoveAllLmDatabasesL();
    // Start test
    LandmarkEventTestL();
    
    // Remove all landmark databases
   	RemoveAllLmDatabasesL();
   	
    // Pancic test
    iActiveLmEvent = CTP117ActiveLmEvent::NewL(iLog);
    iExpectedExitType = ExitPanic;
    iLog->Log(_L("Panic test 1"));
    iTestCase = 1;
    /* EPosEventNotifierAlreadyHasOutstandingRequest defined in EPos_LandmarksServerPanics.h */
    iExpectedErrorCode = 2;
    ResumeThreadAndVerifyExit();
    
    delete iActiveLmEvent;
    iActiveLmEvent = NULL;
    
    
    if (iErrorsFound != KErrNone)
    	{
   
        iLog->Log(_L("Errors found in TP117"));
        User::Leave(-1);

    	}
	}

// ---------------------------------------------------------
// CPosTp28::LandmarkQueuedEvenTestL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp117::LandmarkQueuedEvenTestL()
    {
    iLog->Log(_L(">>>>>>>>>>LandmarkQueuedEvenTestL<<<<<<<<<"));
    
    _LIT(KDatabase1, "c:Tp117DummyLmDb_1.ldb");
    _LIT(KDatabase2, "c:Tp117DummyLmDb_2.ldb");
    _LIT(KDatabase3, "c:Tp117DummyLmDb_3.ldb");
    _LIT(KDatabase4, "c:Tp117DummyLmDb_4.ldb");
	
	CTP117ActiveLmEvent* client1 = CTP117ActiveLmEvent::NewL(iLog);
	CleanupStack::PushL(client1);

    CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
    CleanupStack::PushL(manager);
    
    // Creates db2, which should exist (deleted below)
    client1->Start();
    HPosLmDatabaseInfo* dbInfo2 = HPosLmDatabaseInfo::NewLC(KDatabase2);
    manager->CreateDatabaseL(*dbInfo2);
    CleanupStack::PopAndDestroy(dbInfo2);
    client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
    client1->SetExpectedDatabase(KDatabase2);
    CActiveScheduler::Start();

	// *********Start test*************
	iLog->Log(_L("*********Start test*************"));
	// 1) Enable client1
	client1->Start();
	client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
    client1->SetExpectedDatabase(KDatabase1);
	
    // 2) Client2 creates a database, db1
    iLog->Log(_L("Client2 creates a database, db1"));
    HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
    manager->CreateDatabaseL(*dbInfo1);
    CleanupStack::PopAndDestroy(dbInfo1);
    
    // 3) Client1 NotifyDatabaseEvent, should be event from create operation in step2
    iLog->Log(_L("Client1 will get EDatabaseCreated event"));
    CActiveScheduler::Start();
        
    iLog->Log(_L("Delete, Copy, Create db"));
    //4) Client2 deletes db2
    manager->DeleteDatabaseL(KDatabase2);
    
    //5) Client2 copies db1 to db3
    manager->CopyDatabaseL(KDatabase1, KDatabase3);
    
    //6) Client2 creates db4
    HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
    manager->CreateDatabaseL(*dbInfo4);
    CleanupStack::PopAndDestroy(dbInfo4);
    
    // 7) Client1 NotifyDatabaseEvent, should be event from delete operation in step4
    iLog->Log(_L("7) Client1 NotifyDatabaseEvent"));
    client1->Start();
    // Dont check URI here
    client1->iCheckUri = EFalse;
	client1->iExpectedEvent = EPosLmDbDatabaseUnregistered;
    client1->SetExpectedDatabase(KDatabase2);
    CActiveScheduler::Start();
    
    // 8) Client1 NotifyDatabaseEvent, should be event from copy operation in step5
	iLog->Log(_L("8) Client1 NotifyDatabaseEvent"));
    client1->Start();
    // Dont check URI here
	client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
    client1->SetExpectedDatabase(KDatabase3);
    CActiveScheduler::Start();
    
    // 9) Client1 NotifyDatabaseEvent, should be event from create operation in step6
    iLog->Log(_L("9) Client1 NotifyDatabaseEvent"));
    // Check URI here
    client1->iCheckUri = ETrue;
    client1->Start();
	client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
    client1->SetExpectedDatabase(KDatabase4);
    CActiveScheduler::Start();
    
    iErrorsFound+=client1->GetErrors();
    
    CleanupStack::PopAndDestroy(manager);
    CleanupStack::PopAndDestroy(client1);
    }
    
// ---------------------------------------------------------
// CPosTp28::LandmarkQueuedEvenTest2L
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp117::LandmarkQueuedEvenTest2L()
    {
    iLog->Log(_L(">>>>>>>>>>LandmarkQueuedEvenTest2L>>>>>>>>>>"));

    _LIT(KDatabase1, "c:Tp117DummyLmDb_1.ldb");
    _LIT(KDatabase2, "c:Tp117DummyLmDb_2.ldb");
    _LIT(KDatabase3, "c:Tp117DummyLmDb_3.ldb");
    _LIT(KDatabase4, "c:Tp117DummyLmDb_4.ldb");
    _LIT(KDatabase5, "c:Tp117DummyLmDb_5.ldb");
	
	CTP117ActiveLmEvent* client1 = CTP117ActiveLmEvent::NewL(iLog);
	CleanupStack::PushL(client1);

    CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
    CleanupStack::PushL(manager);
    
    // Creates db2, which should exist (deleted below)
    client1->Start();
    HPosLmDatabaseInfo* dbInfo2 = HPosLmDatabaseInfo::NewLC(KDatabase2);
    manager->CreateDatabaseL(*dbInfo2);
    CleanupStack::PopAndDestroy(dbInfo2);
    client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
    client1->SetExpectedDatabase(KDatabase2);
    CActiveScheduler::Start();

	// *********Start test*************
	iLog->Log(_L("*********Start test*************"));
	// 1) Enable client1
	client1->Start();
	client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
    client1->SetExpectedDatabase(KDatabase1);
	
    // 2) Client2 creates a database, db1
    iLog->Log(_L("Client2 creates a database, db1"));
    HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
    manager->CreateDatabaseL(*dbInfo1);
    CleanupStack::PopAndDestroy(dbInfo1);
    
    // 3) Client1 NotifyDatabaseEvent, should be event from create operation in step2
    iLog->Log(_L("Client1 will get EDatabaseCreated event"));
    CActiveScheduler::Start();
        
    iLog->Log(_L("Delete, Copy, Create, Delete, Copy, Delete"));
    //4) Client2 deletes db2
    manager->DeleteDatabaseL(KDatabase2);
    
    //5) Client2 copies db1 to db3
    manager->CopyDatabaseL(KDatabase1, KDatabase3);
    
    //6) Client2 creates db4
    HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
    manager->CreateDatabaseL(*dbInfo4);
    CleanupStack::PopAndDestroy(dbInfo4);
    
    //7) Client2 deletes db3
    manager->DeleteDatabaseL(KDatabase3);
    
    //8) Client2 copies db2 to db5
    manager->CopyDatabaseL(KDatabase1, KDatabase5);
    
    //7) Client2 deletes db2
    manager->DeleteDatabaseL(KDatabase5);
       
    // 9) Client1 NotifyDatabaseEvent, should be unknown event since too many events in queue
    // After unknown event the queue should be empty again, verified in step10
    iLog->Log(_L("9) Client1 NotifyDatabaseEvent"));    
    client1->Start();
	client1->iExpectedEvent = EPosLmDbUnknownEvent;
    client1->SetExpectedDatabase(KNullDesC);
    CActiveScheduler::Start();
    
    //10) Client1 deletes db4
    client1->Start();    
	iLog->Log(_L("10) Client1 NotifyDatabaseEvent"));    
    manager->DeleteDatabaseL(KDatabase4);
	client1->iExpectedEvent = EPosLmDbDatabaseUnregistered;
    client1->SetExpectedDatabase(KDatabase4);
    CActiveScheduler::Start();   
    
    iErrorsFound+=client1->GetErrors();
    
    CleanupStack::PopAndDestroy(manager);
    CleanupStack::PopAndDestroy(client1);
    }
        
// ---------------------------------------------------------
// CPosTp28::LandmarkEventTestL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp117::LandmarkEventTestL()
    {
    iLog->Log(_L(">>>>>>>>>>LandmarkEventTestL<<<<<<<<<<<<<<"));

    _LIT(KDatabase1, "c:Tp117DummyLmDb_1.ldb");
    _LIT(KDatabase2, "c:Tp117DummyLmDb_2.ldb");
    _LIT(KDatabase3, "c:Tp117DummyLmDb_3.ldb");
    _LIT(KDatabase4, "c:Tp117DummyLmDb_4.ldb");
    
    _LIT(KDatabase5, "c:Tp117DummyLmDb_5.ldb");
    _LIT(KDatabase6, "c:Tp117DummyLmDb_6.ldb");
    
	iActiveLmEvent = CTP117ActiveLmEvent::NewL(iLog);

    CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
    CleanupStack::PushL(manager);

    // 1) Just do something to cause an event
    iActiveLmEvent->Start();
    HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
    manager->CreateDatabaseL(*dbInfo1);
    CleanupStack::PopAndDestroy(dbInfo1);
    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
    iActiveLmEvent->SetExpectedDatabase(KDatabase1);
    CActiveScheduler::Start();
       
    iLog->Log(_L("Test 1_1"));
    iActiveLmEvent->Start();
    HPosLmDatabaseInfo* dbInfo2 = HPosLmDatabaseInfo::NewLC(KDatabase2);
    manager->CreateDatabaseL(*dbInfo2);
    CleanupStack::PopAndDestroy(dbInfo2);
    
    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
    iActiveLmEvent->SetExpectedDatabase(KDatabase2);
    CActiveScheduler::Start();

    iLog->Log(_L("Cancel NotifyDatabaseEvent 1"));    
    // Cancel NotifyDatabaseEvent
    iActiveLmEvent->Start();
    iActiveLmEvent->Cancel();
	iActiveLmEvent->Start();
	iActiveLmEvent->Cancel();
           
    iActiveLmEvent->Start();
    HPosLmDatabaseInfo* dbInfo3 = HPosLmDatabaseInfo::NewLC(KDatabase3);
    manager->CreateDatabaseL(*dbInfo3);
    CleanupStack::PopAndDestroy(dbInfo3);
    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
    iActiveLmEvent->SetExpectedDatabase(KDatabase3);
    CActiveScheduler::Start();
    
    iLog->Log(_L("Cancel NotifyDatabaseEvent 2"));       
    // Cancel NotifyDatabaseEvent
    iActiveLmEvent->Start();
    iActiveLmEvent->Cancel();
	iActiveLmEvent->Cancel();
        
    iLog->Log(_L("Test event after cancel"));
    iActiveLmEvent->Start();
    HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
    manager->CreateDatabaseL(*dbInfo4);
    CleanupStack::PopAndDestroy(dbInfo4);
    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
    iActiveLmEvent->SetExpectedDatabase(KDatabase4);
    CActiveScheduler::Start();
       
	iLog->Log(_L("Test to call DatabaseUriFromLastEventLC before events occurr"));
    iActiveLmEvent->Start();
    HPosLmDatabaseInfo* dbInfo5 = HPosLmDatabaseInfo::NewLC(KDatabase5);
    manager->CreateDatabaseL(*dbInfo5);
    CleanupStack::PopAndDestroy(dbInfo5);
    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
    iActiveLmEvent->SetExpectedDatabase(KDatabase5);
    iActiveLmEvent->CallDatabaseUriFromLastEventLC();
    // Need to cancel this notifyDatabaseEvent call
    iActiveLmEvent->Cancel();
    
    iLog->Log(_L("Test event3 after DatabaseUriFromLastEventLC"));
    iActiveLmEvent->Start();
    HPosLmDatabaseInfo* dbInfo6 = HPosLmDatabaseInfo::NewLC(KDatabase6);   
    manager->CreateDatabaseL(*dbInfo6);
    CleanupStack::PopAndDestroy(dbInfo6);
    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
    iActiveLmEvent->SetExpectedDatabase(KDatabase6);
    CActiveScheduler::Start();
    
    CleanupStack::PopAndDestroy(manager);
    
    iErrorsFound+=iActiveLmEvent->GetErrors();
    
    delete iActiveLmEvent;
    iActiveLmEvent = NULL;
    }

// ---------------------------------------------------------
// CPosTp117::ResumeThreadAndVerifyExit
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp117::ResumeThreadAndVerifyExit()
    {
    iLog->Log(_L("ResumeThreadAndVerifyExit"));
    _LIT(KPanicErr, "Method didn't Panic when expected"); 
    _LIT(KPanicCodeErr, "Paniced with unexpected panic code");
    _LIT(KLeaveErr, "Method didn't end correctly"); 
    _LIT(KLeaveCodeErr, "Unexpected leave error");

    CreateThreadL();
    TRequestStatus status;
    iThread.Logon(status);
    iThread.Resume();
        
    User::WaitForRequest(status);
    
    // Used for debugging
    TBuf<100> buf;
    buf.Format(_L("ExitType %d Exit reason %d"), iThread.ExitType(), iThread.ExitReason());
    iLog->Log(buf);

    if (iExpectedExitType == ExitPanic)
        {
        AssertTrueSecL(iThread.ExitType() == EExitPanic, KPanicErr);
        AssertTrueSecL(iThread.ExitReason() == iExpectedErrorCode, KPanicCodeErr);
        }
    else if (iExpectedExitType == ExitLeave)
        {
        AssertTrueSecL(iThread.ExitType() == EExitKill, KLeaveErr);
        AssertTrueSecL(iThread.ExitReason() == iExpectedErrorCode, KLeaveCodeErr);
        }
    iThread.Close();
    }
    

// ---------------------------------------------------------
// CPosTp117::RunPanicTestL
//
// (other items were commented in a header).
// ---------------------------------------------------------
void CPosTp117::RunPanicTestL(TAny* /*aData*/)
    {
    
    CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
    CleanupStack::PushL(manager);
    
    TPosLmDatabaseEvent event;
    TRequestStatus status;
    manager->NotifyDatabaseEvent(event, status);
    
    // TBD There might be timing problems on target
    User::After(100000);
    // The second call causes Panic EPosEventNotifierAlreadyHasOutstandingRequest
    manager->NotifyDatabaseEvent(event, status);
    User::After(100000);
    
    CleanupStack::PopAndDestroy(manager);

    }
    
// ---------------------------------------------------------
// LOCAL_C ThreadFunction
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
LOCAL_C TInt ThreadFunction(TAny* aData)
    {
    CTrapCleanup* cleanup=CTrapCleanup::New(); 

    CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
    CActiveScheduler::Install(actSch);

    TRAPD(err, CPosTp117::RunPanicTestL(aData));
    
    delete actSch;
    delete cleanup;
    return err;
    }

// ---------------------------------------------------------
// CPosTp117::CreateThreadL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp117::CreateThreadL()
    {
    _LIT(KThreadName, "Tp117 test thread");
    _LIT(KCreateThreadErr, "Create thread failed with %d");

     TInt err=0;
     err = iThread.Create(KThreadName, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, this);
     AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
    }
        
// -----------------------------------------------------------------------------
// CTP117ActiveLmEvent::NewL
//
//(other items were commented in a header).
// -----------------------------------------------------------------------------
//
CTP117ActiveLmEvent* CTP117ActiveLmEvent::NewL(CStifLogger* aLog)
    {
    CTP117ActiveLmEvent* self = new(ELeave) CTP117ActiveLmEvent(aLog);
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop();
    return self;
    }

// -----------------------------------------------------------------------------
// CTP117ActiveLmEvent::ConstructL
//
//(other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CTP117ActiveLmEvent::ConstructL()
    {
    iManager = CPosLmDatabaseManager::NewL();
    }

// -----------------------------------------------------------------------------
// CTP117ActiveLmEvent::CTP117ActiveLmEvent
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//

CTP117ActiveLmEvent::CTP117ActiveLmEvent(CStifLogger* aLog) : 
    CActive(EPriorityNormal),
    iLog(aLog)
    {   
    CActiveScheduler::Add(this);
    iGlobalErr=KErrNone;
    iCheckUri = ETrue;
    }

// Destructor
CTP117ActiveLmEvent::~CTP117ActiveLmEvent()
    {
    Cancel();
    delete iManager;
    iManager = NULL;
    }

// ---------------------------------------------------------
// CTP117ActiveLmEvent::SetExpectedDatabase
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CTP117ActiveLmEvent::SetExpectedDatabase(const TDesC& aDatabaseUri)
    {
    iExpectedDatabase.Zero();
    iExpectedDatabase.Append(_L("file://"));
    iExpectedDatabase.Append(aDatabaseUri);
    }

// ---------------------------------------------------------
// CTP117ActiveLmEvent::CallNotifyDatabaseEvent
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CTP117ActiveLmEvent::CallNotifyDatabaseEvent()                          
    {
    iLog->Log(_L("CallNotifyDatabaseEvent"));
    iManager->NotifyDatabaseEvent(iEvent, iStatus);
    SetActive();
    }

// ---------------------------------------------------------
// CTP117ActiveLmEvent::CallDatabaseUriFromLastEventLC
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CTP117ActiveLmEvent::CallDatabaseUriFromLastEventLC()
    {
    iLog->Log(_L("CallDatabaseUriFromLastEventLC"));
	TRAPD(err,
    		CleanupStack::PopAndDestroy(iManager->DatabaseUriFromLastEventLC()));
    	if (err !=KErrNone)
    		{
    		if (err == KErrNotFound)
    			{
    			iLog->Log(_L("DatabaseUriFromLastEventLC leaved with KErrNotFound"));
    			}
    		else
    			{
    			iLog->Log(_L("DatabaseUriFromLastEventLC leaved with error"));
    			}
    		}
    	else
    		{
    		// No error from second call to DatabaseUriFromLastEventLC
    	
    		}
    }    

// ---------------------------------------------------------
// CTP117ActiveLmEvent::Start
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CTP117ActiveLmEvent::Start()                          
    {
    iLog->Log(_L("CTP117ActiveLmEvent::Start"));
    // Get ready for event
    iManager->NotifyDatabaseEvent(iEvent, iStatus);
    SetActive();
    }   

// ---------------------------------------------------------
// CTP117ActiveLmEvent::RunL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CTP117ActiveLmEvent::RunL()
    {  
	iLog->Log(_L("CTP117ActiveLmEvent::RunL"));
    VerifyEventL();
    }
    
// ---------------------------------------------------------
// CTP117ActiveLmEvent::RunError
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
TInt CTP117ActiveLmEvent::RunError(TInt aError)
    {  
	iLog->Log(_L("CTP117ActiveLmEvent::RunError"));
	TBuf<100> buf;
	buf.Format(_L("Errorcode in RunError: %d"), aError);
	iLog->Log(buf);
	iGlobalErr++;
    //Error in RunL
	Cancel();
    CActiveScheduler::Stop();
    return aError;
    }
    
// ---------------------------------------------------------
// CActiveLmOperation::DoCancel
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CTP117ActiveLmEvent::DoCancel()
    {
    iLog->Log(_L("CTP117ActiveLmEvent::DoCancel"));
    iManager->CancelNotifyDatabaseEvent();
    iLog->Log(_L("CTP117ActiveLmEvent::DoCancel Done"));
    }
    
// ---------------------------------------------------------
// CActiveLmOperation::GetErrors
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
TInt CTP117ActiveLmEvent::GetErrors()
    {
	return iGlobalErr;
    }

// ---------------------------------------------------------
// CTP117ActiveLmEvent::VerifyEvent
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CTP117ActiveLmEvent::VerifyEventL()
    {
    iLog->Log(_L("CTP117ActiveLmEvent::VerifyEvent"));
    
    TBuf<150> buffe;
    
    buffe.Format(_L("VerifyEvent Event: %d "), iEvent.iEventType);
	iLog->Log(buffe);
	
	    // Verify event here
    if (iEvent.iEventType != iExpectedEvent) 
        {
        buffe.Zero();
        buffe.Format(_L("ERROR: Wrong event: exp %d got %d"),iExpectedEvent, iEvent.iEventType);
        iLog->Log(buffe);
        iGlobalErr++;
        }
        
    // Only do check of DatabaseUriFromLastEventLC when event is differet from unknown
    // because when this event occurs the uri is not set
	if (iCheckUri && iEvent.iEventType != EPosLmDbUnknownEvent)	
		{
	    HBufC16* dbUri = iManager->DatabaseUriFromLastEventLC();
	    buffe.Zero();
	    buffe.Format(_L("Event: %d URI %S"), iEvent.iEventType, dbUri);
	    iLog->Log(buffe);
    
		if (iExpectedDatabase.CompareC(*dbUri) != 0)
			{
			iLog->Log(_L("ERROR: Wrong db name"));
			buffe.Zero();
			buffe.Append(_L("Should be "));
			buffe.Append(iExpectedDatabase);
			iLog->Log(buffe);
	        iGlobalErr++;
			}
	    CleanupStack::PopAndDestroy(dbUri);
	    
	    // Call DatabaseUriFromLastEventLC again
	    TRAPD(err,
    		CleanupStack::PopAndDestroy(iManager->DatabaseUriFromLastEventLC()));
    	if (err !=KErrNone)
    		{
    		if (err == KErrNotFound)
    			{
    			iLog->Log(_L("Second call to DatabaseUriFromLastEventLC leaved with KErrNotFound"));
    			}
    		else
    			{
    			iLog->Log(_L("Second call to DatabaseUriFromLastEventLC leaved with error"));
    			}
    		}
    	else
    		{
    		// No error from second call to DatabaseUriFromLastEventLC
    		
    		}
		}
		else
		{
		iLog->Log(_L("URI was not checked"));	
		}
				
	CActiveScheduler::Stop();
   
	iLog->Log(_L("VerifyEvent Done"));
    }

//  End of File