--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lbstest/lbstestproduct/common/src/ctlbsstepverifyloginfo.cpp Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,1180 @@
+// Copyright (c) 2006-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:
+// @file ctlbsstepverifyloginfo.cpp
+// This is the class implementation for the log verification test step
+//
+//
+
+#include "ctlbsstepverifyloginfo.h"
+
+_LIT(KLogType, "log_type");
+
+/**
+Public, non-leaving, static constructor
+*/
+CT_LbsStep_VerifyLogInfo* CT_LbsStep_VerifyLogInfo::New(CT_LbsServer& aParent)
+ {
+ CT_LbsStep_VerifyLogInfo* self = NULL;
+ // Note the lack of ELeave.
+ // This means that having insufficient memory will return NULL;
+ TRAPD(err, self = NewL(aParent));
+ if(KErrNone != err)
+ {
+ self = NULL;
+ }
+ return self;
+ }
+/**
+ * Static Constructor that may leave
+ */
+CT_LbsStep_VerifyLogInfo* CT_LbsStep_VerifyLogInfo::NewL(CT_LbsServer& aParent)
+ {
+ CT_LbsStep_VerifyLogInfo* verifyLog = new(ELeave) CT_LbsStep_VerifyLogInfo(aParent);
+ CleanupStack::PushL(verifyLog);
+ verifyLog->ConstructL();
+ CleanupStack::Pop(verifyLog);
+
+ return verifyLog;
+ }
+/**
+2nd phase Constructor that may leave
+*/
+void CT_LbsStep_VerifyLogInfo::ConstructL()
+ {
+
+ // Create everything for the right hand side of all compares
+ _LIT(KTheDest,"07712345678");
+ TPtrC theDest(KTheDest);
+
+ iX3PLogIntiailisedFromValues = CLbsTransmitLocationLogEvent::NewL(TUid::Uid(0), NULL, theDest);
+ iSelfLocateLogIntiailisedFromValues = CLbsSelfLocateLogEvent::NewL(TUid::Uid(0), NULL);
+ iExternalLocateLogIntiailisedFromValues = CLbsExternalLocateLogEvent::NewL(TUid::Uid(0), NULL, NULL);
+ iNetworkLocateLogIntiailisedFromValues = CLbsNetworkLocateLogEvent::NewL(TUid::Uid(0), NULL);
+ iAssistanceDataLogIntiailisedFromValuesFirst = CLbsAssistanceDataLogEvent::NewL(0, 0);
+
+ //Setup other reference position
+ iRefPosTwo = new TPositionInfo();
+ TPosition refpos;
+ refpos.SetCoordinate(REFPOS_LAT, REFPOS_LONG, REFPOS_ALT);
+ refpos.SetAccuracy(REFPOS_HORZ_ACCURACY, REFPOS_VERT_ACCURACY);
+ refpos.SetCurrentTime();
+ iRefPosTwo->SetPosition(refpos);
+
+
+ // read logs using CLogViewEvent
+ TInt ErrorCode = itheFs.Connect();
+ if(ErrorCode)
+ {
+ INFO_PRINTF1(_L("\t Error: Open FileServer failed."));
+ SetTestStepResult(EFail);
+ }
+
+ iclient = CLogClient::NewL(itheFs, CActive::EPriorityStandard);
+ iview = CLogViewEvent::NewL(*iclient, CActive::EPriorityStandard);
+
+ iActiveWaiter = CT_LbsAsyncWaiter::NewL(); // NEW iActiveWaiter
+
+ }
+/**
+ * Destructor
+ */
+CT_LbsStep_VerifyLogInfo::~CT_LbsStep_VerifyLogInfo()
+ {
+ iview->Cancel();
+ iclient->Cancel();
+ delete iview;
+ delete iclient;
+ itheFs.Close();
+ delete iActiveWaiter;
+ // Delete everything for the right hand side of all compares
+ delete iRefPosTwo;
+ delete iSelfLocateLogIntiailisedFromValues;
+ delete iExternalLocateLogIntiailisedFromValues;
+ delete iNetworkLocateLogIntiailisedFromValues;
+ delete iAssistanceDataLogIntiailisedFromValuesFirst;
+ delete iX3PLogIntiailisedFromValues;
+
+ }
+
+
+/**
+ * Constructor
+ */
+CT_LbsStep_VerifyLogInfo::CT_LbsStep_VerifyLogInfo(CT_LbsServer& aParent) : CT_LbsStep(aParent)
+ {
+ SetTestStepName(KLbsStep_VerifyLogInfo);
+ }
+
+
+TVerdict CT_LbsStep_VerifyLogInfo::doTestStepPreambleL()
+ {
+
+ return TestStepResult();
+ }
+
+TVerdict CT_LbsStep_VerifyLogInfo::doTestStepPostambleL()
+ {
+
+ return TestStepResult();
+ }
+
+
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+TVerdict CT_LbsStep_VerifyLogInfo::doTestStepL()
+ {
+ // Helper test step used to Verify the Position Information Array.
+ INFO_PRINTF1(_L(">>CT_LbsStep_VerifyLogInfo::doTestStepL()"));
+
+ if (TestStepResult() == EPass)
+ {
+
+ // Left and right parameters of compare functions.
+ if (GetIntFromConfig(ConfigSection(), KLogType, iLogType))
+ {
+
+
+ if(iParent.iSharedData->iTestModuleInUse)
+ {
+ iWhatAccuracyToUse = T_LbsUtils::EExactAccuracy;
+ }
+ else
+ {
+ iWhatAccuracyToUse = T_LbsUtils::ERoughAccuracy;
+ }
+
+ InitialiseRHS();
+
+ switch(iLogType)
+ {
+ case EAutonomousSelfLocateRequest: // Enum 0
+ {
+ AutonomousSelfLocateLogTest();
+ }
+ break;
+
+ case EMOLRSelfLocateRequest: // Enum 1
+ {
+ MOLRSelfLocateRequest();
+ }
+ break;
+
+ case EMOLRCellBasedLocationRequest: // Enum 2
+ {
+ MOLRCellBasedLocationRequest();
+ }
+ break;
+
+ case EMOLRTransmitTo3rdPartyLocationRequest: // Enum 3
+ {
+ MOLRTransmitTo3rdPartyLocationRequest();
+ }
+ break;
+
+ case EMTLR: // Enum 4
+ {
+ MTLR();
+ }
+ break;
+
+ case EMOLRTrackingLocationRequest: // Enum 5
+ {
+ MOLRTrackingLocationRequest();
+ }
+ break;
+
+ case EAutonomousTrackingLocationRequest: // Enum 6
+ {
+ AutonomousTrackingLocationRequest();
+ }
+ break;
+
+ default:
+ {
+ INFO_PRINTF1(_L("<FONT><B>Failed to match a test case Id.</B></FONT>"));
+ SetTestStepResult(EFail);
+ }
+ break;
+ }// End of switch
+
+ ClearLog();
+ }// End of GetIntFromConfig()...
+
+ } // End of "If TestStepResult..."
+
+
+ INFO_PRINTF1(_L("<<CT_LbsStep_VerifyLogInfo::doTestStepL()"));
+
+ return TestStepResult();
+ }
+TVerdict CT_LbsStep_VerifyLogInfo::ReadFromLogL(TInt aUidForTheLogType)
+ {
+
+ /**
+ * Filter the type of log we are looking for based on UID
+ */
+ CLogFilter* filter = CLogFilter::NewL(); // NEW FILTER
+ CleanupStack::PushL(filter);
+ filter->SetEventType(TUid::Uid(aUidForTheLogType));
+
+ /*
+ * Obtain the last added event from LBS logger
+ */
+ TBool res = iview->SetFilterL(*filter, iActiveWaiter->iStatus);
+ if (!res)
+ {
+ INFO_PRINTF1(_L("\t Error: Set filter failed."));
+ return EFail;
+ }
+
+ iActiveWaiter->StartAndWait();
+ if (iActiveWaiter->iStatus != KErrNone)
+ {
+ INFO_PRINTF1(_L("\t Error: Create Log iview failed."));
+ return EFail;
+ }
+
+ /*
+ * Count how many of these events there are and
+ * store each event in the relevant array
+ */
+
+ TInt count = iview->CountL();
+ TLinearOrder<CLbsSelfLocateLogEvent> selfLocLogOrder(SelfLocateLogEventTimestampCompare);
+ for(int i=0 ; i<count ; i++)
+ {
+ // Start at first event to have occured...
+ if(i==0 && count > 0)
+ {
+ // Get first event in order of occurance
+ if(!iview->LastL(iActiveWaiter->iStatus))
+ {
+ INFO_PRINTF2(_L("\t Error: Read last log failed with error %d."), iActiveWaiter->iStatus.Int());
+ return EFail;
+ }
+ }
+
+ if(i>0 && i<count)
+ {
+ // Cancel outstanding request...
+ iActiveWaiter->Cancel();
+ iActiveWaiter->StartAndWait();
+ if (iActiveWaiter->iStatus != KErrNone)
+ {
+ INFO_PRINTF1(_L("\t Error: Failed to cancel outstanding request."));
+ return EFail;
+ }
+
+ // Move onto the next event in order of occurance and store it in succession
+ if(!iview->PreviousL(iActiveWaiter->iStatus))
+ {
+ INFO_PRINTF2(_L("\t Error: Read previous log failed with error %d."), iActiveWaiter->iStatus.Int());
+ return EFail;
+ }
+ }
+
+ CLogEvent* logEvent = CLogEvent::NewL(); // NEW LOGEVENT
+ CleanupStack::PushL(logEvent);
+ logEvent->CopyL(iview->Event());
+
+ // Pass ownership to the relevant array
+ switch(aUidForTheLogType)
+ {
+ case KLogLbsSelfLocateEventType:
+ {
+ RPointerArray<CLbsSelfLocateLogEvent>& logInfoArr = iParent.iSharedData->iSelfLocateLogInfoArr;
+ CLbsSelfLocateLogEvent* selfLocateEv = static_cast<CLbsSelfLocateLogEvent*>(CLbsLogEvent::NewL(*logEvent));
+ CleanupStack::PushL(selfLocateEv);
+ // SelfLoc Log events seem to be returned out of order, so wee need to sort them
+ logInfoArr.InsertInOrder(selfLocateEv, selfLocLogOrder);
+ CleanupStack::Pop(selfLocateEv);
+ }
+ break;
+
+ case KLogLbsNetworkLocateEventType:
+ {
+ RPointerArray<CLbsNetworkLocateLogEvent>& logInfoArr = iParent.iSharedData->iNetworkLocateLogInfoArr;
+ CLbsNetworkLocateLogEvent* networkLocateEv = static_cast<CLbsNetworkLocateLogEvent*>(CLbsLogEvent::NewL(*logEvent));
+ CleanupStack::PushL(networkLocateEv);
+ logInfoArr.AppendL(networkLocateEv); // Store it in the array
+ CleanupStack::Pop(networkLocateEv); }
+ break;
+
+ case KLogLbsExternalLocateEventType:
+ {
+ RPointerArray<CLbsExternalLocateLogEvent>& logInfoArr = iParent.iSharedData->iExternalLocateLogInfoArr;
+ CLbsExternalLocateLogEvent* externalLocateEv = static_cast<CLbsExternalLocateLogEvent*>(CLbsLogEvent::NewL(*logEvent));
+ CleanupStack::PushL(externalLocateEv);
+ logInfoArr.AppendL(externalLocateEv); // Store it in the array
+ CleanupStack::Pop(externalLocateEv);
+ }
+ break;
+
+ case KLogLbsTransmitLocationEventType:
+ {
+ RPointerArray<CLbsTransmitLocationLogEvent>& logInfoArr = iParent.iSharedData->iX3PLocateLogInfoArr;
+ CLbsTransmitLocationLogEvent* x3pLocateEv = static_cast<CLbsTransmitLocationLogEvent*>(CLbsLogEvent::NewL(*logEvent));
+ CleanupStack::PushL(x3pLocateEv);
+ logInfoArr.AppendL(x3pLocateEv); // Store it in the array
+ CleanupStack::Pop(x3pLocateEv);
+ }
+ break;
+
+ case KLogLbsAssistanceDataEventType:
+ {
+ RPointerArray<CLbsAssistanceDataLogEvent>& logInfoArr = iParent.iSharedData->iAssistanceDataLogInfoArr;
+ CLbsAssistanceDataLogEvent* assistanceLogEv = static_cast<CLbsAssistanceDataLogEvent*>(CLbsLogEvent::NewL(*logEvent));
+ CleanupStack::PushL(assistanceLogEv);
+ logInfoArr.AppendL(assistanceLogEv); // Store it in the array
+ CleanupStack::Pop(assistanceLogEv);
+ }
+ break;
+
+ default:
+ {
+ INFO_PRINTF1(_L("\t Error: Couldnt match UID to a testable logtype."));
+ i = count; // Force loop exit
+ SetTestStepResult(EFail);
+ }
+ }
+
+ // Cleanup scoped variables
+ CleanupStack::PopAndDestroy(logEvent);
+ }// End of for loop
+
+ // Cancel outstanding request...
+ iActiveWaiter->Cancel();
+ iActiveWaiter->StartAndWait();
+ if (iActiveWaiter->iStatus != KErrNone)
+ {
+ INFO_PRINTF1(_L("\t Error: Failed to cancel any outstanding requests."));
+ return EFail;
+ }
+
+ // Cleanup local variables
+ CleanupStack::PopAndDestroy(filter);
+
+ return EPass;
+ }
+
+void CT_LbsStep_VerifyLogInfo::SelfLocateLogTest()
+ {
+
+ INFO_PRINTF1(_L("* * * * * * * * * * * * * * * * * * * * * *"));
+ INFO_PRINTF1(_L("SelfLocateLogTest>>"));
+ TVerdict res;
+ TBool compareResult;
+
+ // Empty SharedData values between update options tests
+ iParent.iSharedData->iSelfLocateLogInfoArr.Reset();
+
+ // reads all self-locate log entries into iSelfLocateLogInfoArr:
+ res = ReadFromLogL(KLogLbsSelfLocateEventType);
+
+ if (res == EFail) // if readfromlog fails...
+ {
+ INFO_PRINTF1(_L("<FONT><b>SelfLocateRequest > ReadFromLog Failed</b></font>"));
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+
+ // Compare DB log event and expected log event
+ INFO_PRINTF1(_L("SelfLocateRequest > About to compare..."));
+
+
+ RPointerArray<CLbsSelfLocateLogEvent>& logInfoArr = iParent.iSharedData->iSelfLocateLogInfoArr;
+
+ TInt sizeOfArray = logInfoArr.Count();
+
+ if( ((sizeOfArray != 2) && (iLogType == EAutonomousTrackingLocationRequest)) ||
+ ((sizeOfArray != 3) && (iLogType == EMOLRTrackingLocationRequest))
+ )
+ {
+ INFO_PRINTF2(_L("<FONT><b>Update Log test failed, there were %d Self Locate events</b></font>"),sizeOfArray);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ // Change reference location to be expected value
+ TPositionInfo* posInfoSecond = new TPositionInfo();
+ SecondPositionFromArray(posInfoSecond);
+
+ for(TInt i = 0 ; i < sizeOfArray ; i++)
+ {
+ // note that events are in reverse order, therefore the reference position is last rather than first of 2
+ if(iLogType == EMOLRTrackingLocationRequest && i == 2)
+ {
+ iSelfLocateLogIntiailisedFromValues->SetPositionInfo(posInfoSecond);
+ }
+
+
+ if(iLogType == EMOLRSelfLocateRequest && i == 1)
+ {
+ iSelfLocateLogIntiailisedFromValues->SetPositionInfo(posInfoSecond);
+ }
+
+ compareResult = iUtils.Compare_SelfLocateLog( *(reinterpret_cast<CLbsSelfLocateLogEvent*>(logInfoArr[i])) ,
+ *iSelfLocateLogIntiailisedFromValues
+ );
+ if(!compareResult)
+ {
+ INFO_PRINTF2(_L("<FONT><b>SelfLocateRequest > compare returns false for element %d...</b></font>"),i);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("SelfLocateRequest > compare returns true..."));
+ }
+ }
+
+ delete posInfoSecond;
+
+ }
+ }
+
+ INFO_PRINTF1(_L("SelfLocateLogTest<<"));
+ INFO_PRINTF1(_L("* * * * * * * * * * * * * * * * * * * * * *"));
+ }
+
+
+void CT_LbsStep_VerifyLogInfo::NetworkLocateLogTest()
+ {
+ INFO_PRINTF1(_L("* * * * * * * * * * * * * * * * * * * * * *"));
+ INFO_PRINTF1(_L("NetworkLocateLogTest>>"));
+ TVerdict res;
+ TBool compareResult;
+
+ res = ReadFromLogL(KLogLbsNetworkLocateEventType);
+
+ if (res == EFail) // if readfromlog fails...
+ {
+ INFO_PRINTF1(_L("<FONT><b>NetworkLocateRequest > Readfrom log failed</b></font>"));
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ // Compare DB log event and expected log event
+ INFO_PRINTF1(_L("NetworkSelfLocateRequest > About to compare..."));
+
+ RPointerArray<CLbsNetworkLocateLogEvent>& logInfoArr = iParent.iSharedData->iNetworkLocateLogInfoArr;
+
+ TInt sizeOfArray = logInfoArr.Count();
+
+
+ for(TInt i = 0 ; i < sizeOfArray ; i++)
+ {
+
+ compareResult = iUtils.Compare_NetworkLocateLog( *(reinterpret_cast<CLbsNetworkLocateLogEvent*>(logInfoArr[i])) ,
+ *iNetworkLocateLogIntiailisedFromValues
+ );
+ if(!compareResult)
+ {
+ INFO_PRINTF2(_L("<FONT><b>NetworkLocateRequest > compare returns false for element %d...</b></font>"),i);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("NetworkLocateRequest > compare returns true..."));
+ }
+ }
+
+ }
+
+ INFO_PRINTF1(_L("NetworkLocateLogTest<<"));
+ INFO_PRINTF1(_L("* * * * * * * * * * * * * * * * * * * * * *"));
+ }
+
+void CT_LbsStep_VerifyLogInfo::ExternalLocateLogTest()
+ {
+
+ INFO_PRINTF1(_L("* * * * * * * * * * * * * * * * * * * * * *"));
+ INFO_PRINTF1(_L("ExternalLocateLogTest>>"));
+ TVerdict res;
+ TBool compareResult;
+
+ res = ReadFromLogL(KLogLbsExternalLocateEventType);
+
+ if (res == EFail) // if readfromlog fails...
+ {
+ INFO_PRINTF1(_L("<FONT><b>ExternalLocateRequest > ReadFromLog Failed</b></font>"));
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ // Compare DB log event and expected log event
+ INFO_PRINTF1(_L("NetworkSelfLocateRequest > About to compare..."));
+
+ RPointerArray<CLbsExternalLocateLogEvent>& logInfoArr = iParent.iSharedData->iExternalLocateLogInfoArr;
+
+ TInt sizeOfArray = logInfoArr.Count();
+ TPositionInfo* posInfoSecond = new TPositionInfo();
+ TPositionInfo* commonPosinfo = CommonPositionInfo();
+ for(TInt i = 0 ; i < sizeOfArray ; i++)
+ {
+ if(iLogType==EMOLRTrackingLocationRequest && i%2==1)
+ {
+ TInt gatewayId = 271064388; // KLbsGpsLocManagerUidValue
+ TUid gatewayUid = TUid::Uid(gatewayId);
+ iExternalLocateLogIntiailisedFromValues->SetRequestOriginator(gatewayUid);
+
+ TLbsRequestOutcome tweakedOutcome = ELbsRequestOutcomeInconclusive;
+ iExternalLocateLogIntiailisedFromValues->SetRequestOutcome(tweakedOutcome);
+
+ SecondPositionFromArray(posInfoSecond);
+ iExternalLocateLogIntiailisedFromValues->SetReferenceLocation(posInfoSecond);
+ iExternalLocateLogIntiailisedFromValues->SetPositionInfo(commonPosinfo);
+ }
+
+ // logtype 5
+ if(iLogType==EMOLRTrackingLocationRequest && i%2==0)
+ {
+ TInt gatewayId = 271064388; // KLbsGpsLocManagerUidValueS
+ TUid gatewayUid = TUid::Uid(gatewayId);
+ iExternalLocateLogIntiailisedFromValues->SetRequestOriginator(gatewayUid);
+
+ // Change outcome to expected value
+ TLbsRequestOutcome tweakedOutcome = ELbsRequestOutcomeSuccess;
+ iExternalLocateLogIntiailisedFromValues->SetRequestOutcome(tweakedOutcome);
+
+ // Change reference location to be expected value
+ // Set the reference position, which also be used for any required verification.
+ TPosition refPos;
+ TPositionInfo* posInfo = new TPositionInfo();
+ refPos.SetCoordinate(REFPOS_LAT_OTHER, REFPOS_LONG_OTHER, REFPOS_ALT_OTHER);
+ refPos.SetAccuracy(REFPOS_HORZ_ACCURACY_OTHER, REFPOS_VERT_ACCURACY_OTHER);
+ refPos.SetCurrentTime();
+ static_cast<TPositionInfo*>(posInfo)->SetPosition(refPos);
+
+ iExternalLocateLogIntiailisedFromValues->SetReferenceLocation(posInfo);
+ delete posInfo;
+ }
+
+ // logtype 1
+ if(iLogType==EMOLRSelfLocateRequest)
+ {
+ TInt locManagerId = 271064388; // KLbsGpsLocManagerUidValue
+ TUid locManagerUid = TUid::Uid(locManagerId);
+ iExternalLocateLogIntiailisedFromValues->SetRequestOriginator(locManagerUid);
+
+ // Change outcome to expected value
+ TLbsRequestOutcome tweakedOutcome = ELbsRequestOutcomeSuccess;
+ iExternalLocateLogIntiailisedFromValues->SetRequestOutcome(tweakedOutcome);
+
+ // Expect position to be NULL for first event
+ // Set expected outcome of second External event
+ if(i==1)
+ {
+ TLbsRequestOutcome tweakedOutcome = ELbsRequestOutcomeInconclusive;
+ iExternalLocateLogIntiailisedFromValues->SetRequestOutcome(tweakedOutcome);
+ iExternalLocateLogIntiailisedFromValues->SetPositionInfo(commonPosinfo);
+ iExternalLocateLogIntiailisedFromValues->SetReferenceLocation(iRefPosTwo);
+ }
+ }
+
+ if(iLogType==EMOLRTransmitTo3rdPartyLocationRequest && i==1)
+ {
+ TLbsRequestOutcome tweakedOutcome = ELbsRequestOutcomeInconclusive;
+ iExternalLocateLogIntiailisedFromValues->SetRequestOutcome(tweakedOutcome);
+ SecondPositionFromArray(posInfoSecond);
+ iExternalLocateLogIntiailisedFromValues->SetReferenceLocation(posInfoSecond);
+ }
+
+ if(iLogType==EMOLRTransmitTo3rdPartyLocationRequest && i==1)
+ {
+ iExternalLocateLogIntiailisedFromValues->SetPositionInfo(commonPosinfo);
+ }
+
+
+ if(iLogType == EMTLR)
+ {
+ iExternalLocateLogIntiailisedFromValues->SetPositionInfo(commonPosinfo);
+ InitialiseRHSforMTLR();
+ }
+
+
+ compareResult = iUtils.Compare_ExternalLocateLog( *(reinterpret_cast<CLbsExternalLocateLogEvent*>(logInfoArr[i])) ,
+ *iExternalLocateLogIntiailisedFromValues
+ );
+ if(!compareResult)
+ {
+ INFO_PRINTF2(_L("<FONT><b>ExternalLocateLog > compare returns false for element %d...</b></font>"),i);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("ExternalLocateLog > compare returns true..."));
+ }
+ } // End for loop
+ delete commonPosinfo;
+ delete posInfoSecond;
+ }
+
+ INFO_PRINTF1(_L("ExternalLocateLogTest<<"));
+ INFO_PRINTF1(_L("* * * * * * * * * * * * * * * * * * * * * *"));
+
+ }
+
+void CT_LbsStep_VerifyLogInfo::X3PLocateLogTest()
+ {
+ INFO_PRINTF1(_L("* * * * * * * * * * * * * * * * * * * * * *"));
+ INFO_PRINTF1(_L("X3PLocateLogTest>>"));
+ TVerdict res;
+ TBool compareResult;
+
+ res = ReadFromLogL(KLogLbsTransmitLocationEventType);
+
+ if (res == EFail) // if readfromlog fails...
+ {
+ INFO_PRINTF1(_L("<FONT><b>X3PLocateRequest > ReadFromLog Failed</B></FONT>"));
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ // Compare DB log event and expected log event
+ INFO_PRINTF1(_L("X3PLocateLog > About to compare..."));
+
+ RPointerArray<CLbsTransmitLocationLogEvent>& logInfoArr = iParent.iSharedData->iX3PLocateLogInfoArr;
+
+ TInt sizeOfArray = logInfoArr.Count();
+
+ for(TInt i = 0 ; i < sizeOfArray ; i++)
+ {
+ compareResult = iUtils.Compare_TransmitLocationLog( *(reinterpret_cast<CLbsTransmitLocationLogEvent*>(logInfoArr[i])) ,
+ *iX3PLogIntiailisedFromValues
+ );
+ if(!compareResult)
+ {
+ INFO_PRINTF2(_L("<FONT><b>X3PLocateLogTest > compare returns false for element %d...</b></font>"),i);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("X3PLocateLogTest > compare returns true..."));
+ }
+ }
+ }
+
+ INFO_PRINTF1(_L("X3PLocateLogTest<<"));
+ INFO_PRINTF1(_L("* * * * * * * * * * * * * * * * * * * * * *"));
+ }
+
+void CT_LbsStep_VerifyLogInfo::AssistanceDataLogTest()
+ {
+
+ INFO_PRINTF1(_L("* * * * * * * * * * * * * * * * * * * * * *"));
+ INFO_PRINTF1(_L("AssistanceDataLogTest>>"));
+ TVerdict res;
+ TBool compareResult = ETrue;
+
+ res = ReadFromLogL(KLogLbsAssistanceDataEventType);
+
+ if (res == EFail) // if readfromlog fails...
+ {
+ INFO_PRINTF1(_L("<FONT><b>AssistanceDataLog > ReadFromLog Failed</b></font>"));
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ // Compare DB log event and expected log event
+ INFO_PRINTF1(_L("AssistanceDataLog > About to compare..."));
+
+ RPointerArray<CLbsAssistanceDataLogEvent>& logInfoArr = iParent.iSharedData->iAssistanceDataLogInfoArr;
+
+ TInt sizeOfArray = logInfoArr.Count();
+ TPositionInfo* commonPosinfo = CommonPositionInfo();
+ for(TInt i = 0 ; i < sizeOfArray ; i++)
+ {
+
+ if( iLogType == EMOLRTrackingLocationRequest ||
+ iLogType ==EMOLRTransmitTo3rdPartyLocationRequest )
+ {
+ iAssistanceDataLogIntiailisedFromValuesFirst->SetRequestAssistanceDataType(0);
+ }
+
+
+ /*
+ * If we run X3P log test on its own we get logs that are different than when its run
+ * in sequence with other tests.
+ */
+ if(sizeOfArray > 1 && iLogType ==EMOLRTransmitTo3rdPartyLocationRequest)
+ {
+ if(i==1)
+ {
+ // Second log has a mask of 0
+ iAssistanceDataLogIntiailisedFromValuesFirst->SetRequestAssistanceDataType(0);
+ compareResult = iUtils.Compare_AssistanceDataLog( *(reinterpret_cast<CLbsAssistanceDataLogEvent*>(logInfoArr[i])) ,
+ *iAssistanceDataLogIntiailisedFromValuesFirst
+ );
+ }
+ else
+ {
+ iAssistanceDataLogIntiailisedFromValuesFirst->SetRequestAssistanceDataType(8);
+ compareResult = iUtils.Compare_AssistanceDataLog( *(reinterpret_cast<CLbsAssistanceDataLogEvent*>(logInfoArr[i])) ,
+ *iAssistanceDataLogIntiailisedFromValuesFirst
+ );
+ }
+ }
+
+ if(!compareResult)
+ {
+ INFO_PRINTF2(_L("<FONT><b>AssistanceDataLogTest > compare returns false for element %d...</b></FONT>"),i);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("AssistanceDataLogTest > compare returns true..."));
+ }
+ }// End of for loop
+ delete commonPosinfo;
+ }
+
+ INFO_PRINTF1(_L("AssistanceDataLogTest<<"));
+ INFO_PRINTF1(_L("* * * * * * * * * * * * * * * * * * * * * *"));
+ }
+
+
+
+// Top level functionality
+
+void CT_LbsStep_VerifyLogInfo::AutonomousSelfLocateLogTest()
+ {
+ SelfLocateLogTest();
+ }
+
+void CT_LbsStep_VerifyLogInfo::MOLRSelfLocateRequest() // ** Similar **
+ {
+ ExternalLocateLogTest();
+ AssistanceDataLogTest();
+ SelfLocateLogTest();
+ }
+
+void CT_LbsStep_VerifyLogInfo::MOLRCellBasedLocationRequest()
+ {
+ NetworkLocateLogTest();
+ }
+
+void CT_LbsStep_VerifyLogInfo::MOLRTransmitTo3rdPartyLocationRequest()
+ {
+ AssistanceDataLogTest();
+
+ ExternalLocateLogTest();
+
+ X3PLocateLogTest();
+ }
+
+void CT_LbsStep_VerifyLogInfo::MTLR() // ** Similar **
+ {
+ // SelfLocateLogTest();
+ ExternalLocateLogTest();
+ AssistanceDataLogTest();
+ }
+
+void CT_LbsStep_VerifyLogInfo::MOLRTrackingLocationRequest() // ** Similar **
+ {
+ SelfLocateLogTest();
+ AssistanceDataLogTest();
+ ExternalLocateLogTest();
+ }
+
+void CT_LbsStep_VerifyLogInfo::AutonomousTrackingLocationRequest()
+ {
+ SelfLocateLogTest();
+ }
+
+
+
+
+void CT_LbsStep_VerifyLogInfo::InitialiseRHS()
+ {
+ // Variables needed for all reads
+ // CommonToAll
+ TBool direction; // Inbound or outbound
+
+ // wont be filled in components ELbsRequestOutcomeSuccess/ELbsRequestOutcomeFailed/...Inconclusive etc
+ TLbsRequestOutcome theSelfLocateRequestOutcome;
+ TLbsRequestOutcome theX3PRequestOutcome;
+ TLbsRequestOutcome theExternalLocateRequestOutcome;
+ TLbsRequestOutcome theNetworkLocateRequestOutcome;
+ TLbsRequestOutcome theAssistanceDataRequestOutcome;
+
+ // Common to 4/5 but not assistance
+ TInt theCost; // not implemented
+
+ // Common to 4/5 but not external
+ TUid theLocalAppUid; // work out from PID
+
+ // Common only to External Locate
+ TInt theOriginator; // From network gateway
+ TInt theSessionNum; // TNetLocSessionID?
+ TInt theSessionOwner; // TNetLocSessionID?
+ TInt theAction; // Set within privacy request
+ TInt theAdvice; // Set within privacy request
+ TPtrC theClientName; // Set within privacy request
+ TPtrC theExternalId; // Set within privacy request
+ TPtrC theRequestor; // Set within privacy request
+ TInt theResult; // ENum within privacy response
+
+ // Common only to X3P Locate
+ TUid theX3PUid; // work out from PID
+
+ // Common only to Assistance
+ TInt theFirstRequestMask; // Set within GPSlocmanager // Set within GPSlocmanager for wanted
+ TInt theReceiveMask; // Set within GPSlocmanager // Set within GPSlocmanager for recieved
+
+
+ // Specialised variables
+ theCost = 0;
+ theLocalAppUid = TUid::Uid(RProcess().SecureId()); // Get this from ProcessId each time
+ // The X3PUid used to be hard-coded to 271065697, but this is not valid anymore, since there are
+ // two test servers using this code. So using the UID of the current process instead
+ theX3PUid = theLocalAppUid;
+ TInt locServerAppId = 271064387;
+ TUid locServerAppUid = TUid::Uid(locServerAppId);
+
+ direction = EFalse;
+
+ theSelfLocateRequestOutcome = ELbsRequestOutcomeSuccess; // or ELbsRequestOutcomeFailed or Inconclusive etc
+ theX3PRequestOutcome = ELbsRequestOutcomeSuccess;// Set it to this for X3P test
+ theExternalLocateRequestOutcome = ELbsRequestOutcomeSuccess;
+ theNetworkLocateRequestOutcome = ELbsRequestOutcomeSuccess;
+ theAssistanceDataRequestOutcome = ELbsRequestOutcomeInconclusive; // Set it to this for X3P test
+
+ TPositionInfo* commonPosinfo = CommonPositionInfo();
+
+
+ // Set up relevant 5 Log variables for comparison using position info etc
+ // SELF LOCATE LOG
+ iSelfLocateLogIntiailisedFromValues->SetPositionInfo(commonPosinfo);
+ iSelfLocateLogIntiailisedFromValues->SetDirection(direction);
+ iSelfLocateLogIntiailisedFromValues->SetLocalApp(theLocalAppUid); // This apps UID
+ iSelfLocateLogIntiailisedFromValues->SetCostInformation(theCost); // set cost information if there are any;
+ iSelfLocateLogIntiailisedFromValues->SetRequestOutcome(theSelfLocateRequestOutcome); // by passing the location request outcome;
+
+
+ // EXTERNAL LOG
+ iExternalLocateLogIntiailisedFromValues->SetDirection(direction);
+ iExternalLocateLogIntiailisedFromValues->SetCostInformation(theCost);
+ iExternalLocateLogIntiailisedFromValues->SetRequestOutcome(theExternalLocateRequestOutcome); // by passing the location request outcome;
+ // No local app id to set for external log
+ // Common only to External Locate
+ theOriginator = 271064389; // From Network request handler
+ theSessionOwner = 0; // 268440115 TNetLocSessionID?
+ theSessionNum = 0; // TNetLocSessionID?
+ theAction = 0; // Set within privacy request 0
+ theAdvice = 0; // Set within privacy request 0 = ERequestAdviceNotUsed, 1 = ERequestActionAllow
+
+ _LIT(KClientName,"");
+ _LIT(KRequestor,"");
+ _LIT(KExternalId,"");
+ theClientName.Set(KClientName); // Set within privacy request
+ theRequestor.Set(KRequestor); // Set within privacy request
+ theExternalId.Set(KExternalId); // Set within privacy request
+ theResult = 0; // ENum within privacy response, 1 = ERequestAccepted
+
+ // set privacy request parameters
+ TLbsLoggingPrivacyRequestParams reqParams;
+ TLbsNetSessionId sessionId(TUid::Uid(0), (TUint32)theSessionNum);
+ reqParams.iSessionId.SetSessionOwner(TUid::Uid(theSessionOwner));
+ reqParams.iSessionId.SetSessionNum(theSessionNum);
+ reqParams.iRequestPrivacy.SetRequestAction((TLbsNetPosRequestPrivacy::TLbsRequestAction)theAction);
+ reqParams.iRequestPrivacy.SetRequestAdvice((TLbsNetPosRequestPrivacy::TLbsRequestAdvice)theAdvice);
+
+ TPtrC8 ptrReq((TUint8*)theRequestor.Ptr(), theRequestor.Size());
+ TPtrC8 ptrClient((TUint8*)theClientName.Ptr(), theClientName.Size());
+ TPtrC8 ptrId((TUint8*)theExternalId.Ptr(), theExternalId.Size());
+ reqParams.iRequestInfo.SetRequesterId(reinterpret_cast<const TDesC8&>(ptrReq));
+ reqParams.iRequestInfo.SetClientName(reinterpret_cast<const TDesC8&>(ptrClient));
+ reqParams.iRequestInfo.SetClientExternalId(reinterpret_cast<const TDesC8&>(ptrId));
+
+ // set privacy response parameters
+ TLbsLoggingPrivacyResponseParams respParams;
+ respParams.iSessionId.SetSessionOwner(TUid::Uid(0));
+ respParams.iSessionId.SetSessionNum(0);
+ respParams.iResult = static_cast<CLbsNetworkProtocolBase::TLbsPrivacyResponse>(theResult);
+
+ iExternalLocateLogIntiailisedFromValues->SetRequestOriginator(TUid::Uid(theOriginator));
+ iExternalLocateLogIntiailisedFromValues->SetPrivacyRequestParams(reqParams); // set privacy request parameters from request originator
+ iExternalLocateLogIntiailisedFromValues->SetPrivacyResponseParams(respParams); // set privacy response parameters from privacy controller
+ iExternalLocateLogIntiailisedFromValues->SetReferenceLocation(commonPosinfo);
+
+
+ // X3P LOG
+ iX3PLogIntiailisedFromValues->SetPositionInfo(commonPosinfo);
+ iX3PLogIntiailisedFromValues->SetDirection(direction);
+ iX3PLogIntiailisedFromValues->SetCostInformation(theCost); // set cost information if there are any;
+ iX3PLogIntiailisedFromValues->SetRequestOutcome(theX3PRequestOutcome); // by passing the location request outcome;
+ // X3P log only
+ iX3PLogIntiailisedFromValues->SetX3PApp(theX3PUid); // This apps Uid
+
+
+
+ // FIRST ASSISTANCE DATA LOG
+ iAssistanceDataLogIntiailisedFromValuesFirst->SetDirection(direction);
+ iAssistanceDataLogIntiailisedFromValuesFirst->SetRequestOutcome(theAssistanceDataRequestOutcome); // by passing the location request outcome;
+ // No cost to set for assistance log
+ // Common only to Assistance
+ theFirstRequestMask = 8; // Set within GPSlocmanager for wanted (8 for first in array, 0 for second)
+ theReceiveMask = 8; // Set within GPSlocmanager for recieved
+ iAssistanceDataLogIntiailisedFromValuesFirst->SetRequestAssistanceDataType(theFirstRequestMask);
+ iAssistanceDataLogIntiailisedFromValuesFirst->SetReceiveAssistanceDataType(theReceiveMask);
+
+
+
+ // NETWORK LOCATE LOG
+ commonPosinfo->SetModuleId(TUid::Uid(0));
+
+ iNetworkLocateLogIntiailisedFromValues->SetPositionInfo(commonPosinfo);
+ iNetworkLocateLogIntiailisedFromValues->SetDirection(direction);
+ iNetworkLocateLogIntiailisedFromValues->SetCostInformation(theCost); // set cost information if there are any;
+ iNetworkLocateLogIntiailisedFromValues->SetRequestOutcome(theNetworkLocateRequestOutcome); // by passing the location request outcome;
+ iNetworkLocateLogIntiailisedFromValues->SetLocalApp(locServerAppUid); // This apps UID
+
+ delete commonPosinfo;
+ }
+
+void CT_LbsStep_VerifyLogInfo::InitialiseRHSforMTLR()
+ {
+ // For MTLR, most of the expected external logs values need to be completely different.
+
+ TInt theOriginator; // From network gateway
+ TInt theSessionNum; // TNetLocSessionID?
+ TInt theSessionOwner; // TNetLocSessionID?
+ TInt theAction; // Set within privacy request
+ TInt theAdvice; // Set within privacy request
+ TPtrC8 theClientName; // Set within privacy request
+ TPtrC8 theExternalId; // Set within privacy request
+ TPtrC8 theRequestor; // Set within privacy request
+ TInt theRequestResult; // ENum within privacy response
+
+ theOriginator = 271064432; // From Protocol Module
+ theSessionOwner = 271064432; // Protocol Module
+ theSessionNum = 1; // TNetLocSessionID?
+ theAction = 1; // Set within privacy request 0
+ theAdvice = 1; // Set within privacy request 0 = ERequestAdviceNotUsed, 1 = ERequestActionAllow
+
+ _LIT8(KMTLRClientName,"MT-LR test client name");
+ _LIT8(KMTLRRequestor,"MT-LR test requester id");
+ _LIT8(KMTLRExternalId,"MT-LR test client external id");
+ theClientName.Set(KMTLRClientName); // Set within privacy request
+ theRequestor.Set(KMTLRRequestor); // Set within privacy request
+ theExternalId.Set(KMTLRExternalId); // Set within privacy request
+ theRequestResult = 1; // ENum within privacy response, 1 = ERequestAccepted
+
+
+ // set privacy request parameters
+ TLbsLoggingPrivacyRequestParams reqParams;
+ TLbsNetSessionId sessionId(TUid::Uid(0), (TUint32)theSessionNum);
+ reqParams.iSessionId.SetSessionOwner(TUid::Uid(theSessionOwner));
+ reqParams.iSessionId.SetSessionNum(theSessionNum);
+ reqParams.iRequestPrivacy.SetRequestAction((TLbsNetPosRequestPrivacy::TLbsRequestAction)theAction);
+ reqParams.iRequestPrivacy.SetRequestAdvice((TLbsNetPosRequestPrivacy::TLbsRequestAdvice)theAdvice);
+
+ TPtrC8 ptrReq((TUint8*)theRequestor.Ptr(), theRequestor.Size());
+ TPtrC8 ptrClient((TUint8*)theClientName.Ptr(), theClientName.Size());
+ TPtrC8 ptrId((TUint8*)theExternalId.Ptr(), theExternalId.Size());
+ reqParams.iRequestInfo.SetRequesterId(reinterpret_cast<const TDesC8&>(ptrReq));
+ reqParams.iRequestInfo.SetClientName(reinterpret_cast<const TDesC8&>(ptrClient));
+ reqParams.iRequestInfo.SetClientExternalId(reinterpret_cast<const TDesC8&>(ptrId));
+
+ // set privacy response parameters
+ TLbsLoggingPrivacyResponseParams respParams;
+ respParams.iSessionId.SetSessionOwner(TUid::Uid(theSessionOwner ));
+ respParams.iSessionId.SetSessionNum(theSessionNum );
+ respParams.iResult = static_cast<CLbsNetworkProtocolBase::TLbsPrivacyResponse>(theRequestResult);
+
+ iExternalLocateLogIntiailisedFromValues->SetRequestOriginator(TUid::Uid(theOriginator));
+ iExternalLocateLogIntiailisedFromValues->SetPrivacyRequestParams(reqParams); // set privacy request parameters from request originator
+ iExternalLocateLogIntiailisedFromValues->SetPrivacyResponseParams(respParams); // set privacy response parameters from privacy controller
+ }
+
+void CT_LbsStep_VerifyLogInfo::ClearLog()
+ {
+ // Setup a time in the future, before which all events will be deleted
+ _LIT(KDateCorrect1,"20900101:");
+ TTime time;
+ TBuf <10> theDate(KDateCorrect1);
+ TInt err=time.Set(theDate);
+
+ // Ensure time has been set correctly
+ if(err != KErrNone)
+ {
+ INFO_PRINTF1(_L("Failed to set time"));
+ }
+
+ if(err == KErrGeneral)
+ {
+ INFO_PRINTF1(_L("Time syntax is incorrect"));
+ }
+
+ // Set the filter to view ALL logs
+ CLogFilter* filter = CLogFilter::NewL(); // NEW FILTER
+ CleanupStack::PushL(filter);
+ TBool res = iview->SetFilterL(*filter, iActiveWaiter->iStatus);
+ if (res == EFalse)
+ {
+ INFO_PRINTF1(_L("\t No such events to filter in the view."));
+ iclient->Cancel();
+ }
+ else
+ {
+ // else If there are logs, flush them
+
+ // Cancel outstanding requests
+ iclient->Cancel();
+ iActiveWaiter->StartAndWait();
+ if (iActiveWaiter->iStatus != KErrNone)
+ {
+ INFO_PRINTF2(_L("\t Error: Cancel returned error %d."),iActiveWaiter->iStatus.Int());
+ SetTestStepResult(EFail);
+ }
+
+ // Clear ALL logs
+ iclient->ClearLog(time, iActiveWaiter->iStatus);
+ iActiveWaiter->StartAndWait();
+ if (iActiveWaiter->iStatus != KErrNone)
+ {
+ INFO_PRINTF2(_L("\t Error: Clear log returned error %d."),iActiveWaiter->iStatus.Int());
+ SetTestStepResult(EFail);
+ }
+
+ //Confirm log is cleared
+ if(iview->CountL() != 0)
+ {
+ INFO_PRINTF2(_L("<FONT><B>ERROR: Log still has %d entries</B></FONT>"),iview->CountL());
+ SetTestStepResult(EFail);
+ }
+
+ }
+
+ CleanupStack::PopAndDestroy(filter);
+
+ }
+void CT_LbsStep_VerifyLogInfo::SecondPositionFromArray(TPositionInfo* aPosInfoSecond)
+{
+
+ //All this in TPosInfo Structure
+ TUid theModuleId; // use from VerifyLogInfo array
+ TPositionModuleInfo::TTechnologyType theTechType;
+ TPositionModeReason theModeReason;
+ TReal32 theVerAccuracy;
+ TReal32 theHorAccuracy;
+ TReal64 theLat;
+ TReal64 theLong;
+ TReal theAltitude;
+
+ // Initialise variables from Verify array
+ RPointerArray<TAny>& logInfoArr = iParent.iSharedData->iVerifyPosInfoArr;
+ TPositionInfo* tPosInfo = (reinterpret_cast<TPositionInfo*>(logInfoArr[0]));
+ TPosition tPos;
+ tPosInfo->GetPosition(tPos);
+
+ theModuleId = TUid::Uid(271064388); // 271064388;
+ theTechType = tPosInfo->PositionMode();
+ theModeReason = tPosInfo->PositionModeReason();
+ theVerAccuracy = REFPOS_VERT_ACCURACY; // For second x3p reference position comparison
+ theHorAccuracy = REFPOS_HORZ_ACCURACY; // For second x3p reference position comparison
+ theLat = REFPOS_LAT; // For second x3p reference position comparison
+ theLong = REFPOS_LONG; // For second x3p reference position comparison
+ theAltitude = REFPOS_ALT; // For second x3p reference position comparison
+
+
+ // Setup position information using intialised variables
+ aPosInfoSecond->SetModuleId(theModuleId);
+ aPosInfoSecond->SetUpdateType(EPositionUpdateGeneral);
+ aPosInfoSecond->SetPositionMode((TPositionModuleInfo::TTechnologyType)theTechType);
+ aPosInfoSecond->SetPositionModeReason((TPositionModeReason)theModeReason);
+ TPosition position;
+ position.SetCurrentTime();
+ position.SetAccuracy(theHorAccuracy,theVerAccuracy);
+ position.SetCoordinate(theLat,theLong, theAltitude);
+ static_cast<TPositionInfo*>(aPosInfoSecond)->SetPosition(position);
+}
+
+
+TPositionInfo* CT_LbsStep_VerifyLogInfo::CommonPositionInfo()
+{
+ //All this in TPosInfo Structure
+ TUid theModuleId; // use from VerifyLogInfo array
+ TPositionModuleInfo::TTechnologyType theTechType;
+ TPositionModeReason theModeReason;
+ TReal32 theVerAccuracy;
+ TReal32 theHorAccuracy;
+ TReal64 theLat;
+ TReal64 theLong;
+ TReal theAltitude;
+
+ // All this in TPosInfo Structure use from VerifyLogInfo array
+ RPointerArray<TAny>& logInfoArr = iParent.iSharedData->iVerifyPosInfoArr;
+
+ // Initialise variables from Verify array
+ TPositionInfo* tPosInfo = (reinterpret_cast<TPositionInfo*>(logInfoArr[0]));
+ TPosition tPos;
+ tPosInfo->GetPosition(tPos);
+
+ theModuleId = TUid::Uid(271064388); // 271064388;
+ theTechType = tPosInfo->PositionMode();
+ theModeReason = tPosInfo->PositionModeReason();
+ theVerAccuracy = tPos.VerticalAccuracy();
+ theHorAccuracy = tPos.HorizontalAccuracy();
+ theLat = tPos.Latitude();
+ theLong = tPos.Longitude();
+ theAltitude = tPos.Altitude();
+
+
+ // Setup position information using intialised variables
+ TPositionInfo* posInfo = new TPositionInfo();
+ posInfo->SetModuleId(theModuleId);
+ posInfo->SetUpdateType(EPositionUpdateGeneral);
+ posInfo->SetPositionMode((TPositionModuleInfo::TTechnologyType)theTechType);
+ posInfo->SetPositionModeReason((TPositionModeReason)theModeReason);
+ TPosition position;
+ position.SetCurrentTime();
+ position.SetAccuracy(theHorAccuracy,theVerAccuracy);
+ position.SetCoordinate(theLat,theLong, theAltitude);
+ static_cast<TPositionInfo*>(posInfo)->SetPosition(position);
+
+ return posInfo;
+}
+
+/** Compares the timestamps of two log events
+ returns 1 if the lhs is newer, -1 if the lhs is older or 0 if both are the same */
+TInt CT_LbsStep_VerifyLogInfo::SelfLocateLogEventTimestampCompare(const CLbsSelfLocateLogEvent& aLog1,
+ const CLbsSelfLocateLogEvent& aLog2)
+ {
+ TPositionInfo* tPosInfo1 = static_cast<TPositionInfo*>(aLog1.PositionInfo());
+ TPositionInfo* tPosInfo2 = static_cast<TPositionInfo*>(aLog2.PositionInfo());
+ TPosition tPos1;
+ TPosition tPos2;
+ tPosInfo1->GetPosition(tPos1);
+ tPosInfo2->GetPosition(tPos2);
+ TInt64 t1 = tPos1.Time().Int64();
+ TInt64 t2 = tPos2.Time().Int64();
+ if(t1 < t2)
+ {
+ // lhs is Newer
+ return 1;
+ }
+ else if(t1 > t2)
+ {
+ // lhs is Older
+ return -1;
+ }
+ // the same
+ return 0;
+ }