--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lbstest/lbstestproduct/lbsconflict/src/ctlbsmolrstepnewclient.cpp Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,543 @@
+// 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 ctlbsmolrstepnewclient.cpp
+// This is the class implementation for the MoLr New Client Tests
+// EPOC includes.
+//
+//
+
+// LBS includes.
+#include <lbs.h>
+#include <lbs/lbsnetcommon.h>
+#include <lbssatellite.h>
+#include <lbs/lbsnetprotocolbase.h>
+#include <lbs/lbsassistancedatabuilderset.h>
+#include <e32math.h>
+
+// LBS test includes.
+#include "ctlbsmolrstepnewclient.h"
+#include <lbs/test/tlbsutils.h>
+
+
+/**
+Static Constructor
+*/
+CT_LbsMolrStep_NewClient* CT_LbsMolrStep_NewClient::New(CT_LbsConflictServer& aParent)
+ {
+ // Note the lack of ELeave.
+ // This means that having insufficient memory will return NULL;
+ CT_LbsMolrStep_NewClient* testStep = new CT_LbsMolrStep_NewClient(aParent);
+ if (testStep)
+ {
+ TInt err = KErrNone;
+
+ TRAP(err, testStep->ConstructL());
+ if (err)
+ {
+ delete testStep;
+ testStep = NULL;
+ }
+ }
+ return testStep;
+ }
+
+
+/**
+ * Constructor
+ */
+CT_LbsMolrStep_NewClient::CT_LbsMolrStep_NewClient(CT_LbsConflictServer& aParent) : CT_LbsConflictStep(aParent)
+ {
+ SetTestStepName(KLbsMolrStep_NewClient);
+ }
+
+
+void CT_LbsMolrStep_NewClient::ConstructL()
+ {
+ // Create the base class objects.
+ CT_LbsConflictStep::ConstructL();
+
+ // Self locate async wrapper.
+ iDoPosUpdate = CT_LbsDoPosUpdate::NewL(this);
+
+ }
+
+/**
+ * Destructor
+ */
+CT_LbsMolrStep_NewClient::~CT_LbsMolrStep_NewClient()
+ {
+ iDoPosUpdate->Cancel();
+ delete iDoPosUpdate;
+ }
+
+
+
+/** A standard TEF test case doTestStepL, this SHOULD only support a single test case.
+ Typically the function will look much like this.
+ */
+TVerdict CT_LbsMolrStep_NewClient::doTestStepL()
+ {
+ // Generic test step used to test the LBS Client Notify position update API.
+ INFO_PRINTF1(_L(">>CT_LbsMolrStep_NewClient::doTestStepL()"));
+
+ CLbsAdmin* lbsAdminApi = CLbsAdmin::NewL();
+ CleanupStack::PushL(lbsAdminApi);
+
+ if (TestStepResult() == EPass)
+ {
+ // Carry out unique test actions.
+ iPosUpdateFlag = ETrue;
+
+ if (GetIntFromConfig(ConfigSection(), KTestCaseId, iTestCaseId))
+ {
+ switch (iTestCaseId)
+ {
+ case 01:
+ {
+ CLbsAdmin::TGpsMode gpsMode = CLbsAdmin::EGpsAutonomous;
+ lbsAdminApi->Set(KLbsSettingHomeGpsMode,gpsMode);
+ }
+ break;
+
+ case 02:
+ {
+ CLbsAdmin::TGpsMode gpsMode = CLbsAdmin::EGpsPreferTerminalBased;
+ lbsAdminApi->Set(KLbsSettingHomeGpsMode,gpsMode);
+
+ //We dont check for EClient_Got_PosUpdate_Complete event as we not sure when it will come
+ //But we do make sure that EClient_Got_PosUpdate_Complete is called appropriate number of times
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyRegisterLcsMoLr); // --> To Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementControlLocation); // <-- From Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementReportLocation); // --> To Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyFacilityLcsMoLrResult); //
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyReleaseLcsMoLr); // --> To Net
+ }
+ break;
+
+ case 03:
+ case 04:
+ {
+ CLbsAdmin::TGpsMode gpsMode = CLbsAdmin::EGpsPreferTerminalBased;
+ lbsAdminApi->Set(KLbsSettingHomeGpsMode,gpsMode);
+
+ //We dont check for EClient_Got_PosUpdate_Complete event as we not sure when it will come
+ //But we do make sure that EClient_Got_PosUpdate_Complete is called appropriate number of times
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyRegisterLcsMoLr); // --> To Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementControlLocation); // <-- From Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementReportLocation); // --> To Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyFacilityLcsMoLrResult); //
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyReleaseLcsMoLr); // --> To Net
+
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyRegisterLcsMoLr); // --> To Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementControlLocation); // <-- From Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementReportLocation); // --> To Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyFacilityLcsMoLrResult); //
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyReleaseLcsMoLr); // --> To Net
+ }
+ break;
+
+ case 05:
+ {
+ CLbsAdmin::TGpsMode gpsMode = CLbsAdmin::EGpsPreferTerminalBased;
+ lbsAdminApi->Set(KLbsSettingHomeGpsMode,gpsMode);
+
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyRegisterLcsMoLr); // --> To Net
+ //SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementControlLocation); // <-- From Net
+ }
+ break;
+
+ case 06:
+ {
+ T_LbsUtils utils;
+ TModuleDataIn modDataIn; // Used to send test information to the test module.
+ modDataIn.iRequestType = TModuleDataIn::EModuleRequestTestMode;
+ modDataIn.iAssDataEventType = TModuleDataIn::EAssDataEventExpectSingle;
+ modDataIn.iAssDataTestMode = TModuleDataIn::EModuleTestModeAssDataOn_SomeDataNotAvailable;
+
+ utils.NotifyModuleOfConfigChangeL(modDataIn);
+
+ //We dont check for EClient_Got_PosUpdate_Complete event as we not sure when it will come
+ //But we do make sure that EClient_Got_PosUpdate_Complete is called appropriate number of times
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyRegisterLcsMoLr); // --> To Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementControlLocation); // <-- From Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementReportRequestMoreAssistanceData); // --> To Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementControlLocation); // <-- From Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementReportLocation); // --> To Net
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyFacilityLcsMoLrResult); //
+ SetVerifySeqEvent(ESelf_MOLR_NetSim_Got_NotifyReleaseLcsMoLr); // --> To Net
+ }
+ break;
+
+ default:
+ {
+ User::Panic(KLbsMolrStep_NewClient, KErrUnknown);
+ }
+ }
+ }
+
+ // Open and setup net sim.
+ OpenNetSim(this);
+
+ // Kick off the test abort and keep alive timers.
+ TTimeIntervalMicroSeconds32 abortInterval(KLbsAbortPeriod);
+ TTimeIntervalMicroSeconds32 keepAliveInterval(KLbsKeepAlivePeriod);
+
+ iAbortTimer->SetTimer(abortInterval);
+ iKeepAliveTimer->SetTimer(keepAliveInterval);
+
+ // Kick off test.
+ CActiveScheduler::Start();
+
+ // Verify location data.
+ VerifyPosInfos();
+
+ // Clean up.
+ CloseNetSim();
+ }
+
+ CleanupStack::PopAndDestroy(lbsAdminApi);
+
+ INFO_PRINTF1(_L("<<CT_LbsMolrStep_NewClient::doTestStepL()"));
+
+ return TestStepResult();
+ }
+
+
+void CT_LbsMolrStep_NewClient::VerifyPosInfos()
+ {
+ T_LbsUtils utils;
+ RPointerArray<TAny>& verifyPosInfoArr = iParent.iSharedData->iVerifyPosInfoArr;
+ RPointerArray<TAny>& currPosInfoArr = iParent.iSharedData->iCurrentPosInfoArr;
+ //TPositionInfo* currPosInfo;
+
+
+ //If we get Netsim callbacks, the first position in iCurrentPosInfoArr is reference position from Netsim
+
+
+ if(verifyPosInfoArr.Count() == currPosInfoArr.Count())
+ {
+ TPositionInfo* verifyPosInfo;
+ TPositionInfo* currPosInfo;
+
+ for(TInt count = 0; count < verifyPosInfoArr.Count(); count++)
+ {
+ if(iTestCaseId ==1 || iTestCaseId==5) //Autonomous mode
+ {
+ verifyPosInfo = reinterpret_cast<TPositionInfo*>(verifyPosInfoArr[count]);
+ currPosInfo = reinterpret_cast<TPositionInfo*>(currPosInfoArr[count]);
+ if (!utils.Compare_PosInfo(*verifyPosInfo, *currPosInfo))
+ {
+ INFO_PRINTF1(_L("Failed test, Positions incorrect."));
+ SetTestStepResult(EFail);
+ }
+ }
+ else if(iTestCaseId==3 || iTestCaseId==4)
+ {
+ currPosInfo = reinterpret_cast<TPositionInfo*>(currPosInfoArr[count]);
+ TPositionInfo *refPosition = new(ELeave) TPositionInfo();
+ refPosition->SetPosition(iRefPos);
+ if (!utils.Compare_PosInfo(*refPosition, *currPosInfo))
+ {
+ INFO_PRINTF1(_L("Failed test, Positions incorrect."));
+ SetTestStepResult(EFail);
+ }
+
+ delete refPosition;
+ }
+ else //Preferred Terminal mode
+ {
+ if(count==0)
+ {
+ currPosInfo = reinterpret_cast<TPositionInfo*>(currPosInfoArr[count]);
+ TPositionInfo *refPosition = new(ELeave) TPositionInfo();
+ refPosition->SetPosition(iRefPos);
+ if (!utils.Compare_PosInfo(*refPosition, *currPosInfo))
+ {
+ INFO_PRINTF1(_L("Failed test, Positions incorrect."));
+ SetTestStepResult(EFail);
+ }
+
+ delete refPosition;
+ }
+ else
+ {
+ verifyPosInfo = reinterpret_cast<TPositionInfo*>(verifyPosInfoArr[0]);
+ currPosInfo = reinterpret_cast<TPositionInfo*>(currPosInfoArr[count]);
+ if (!utils.Compare_PosInfo(*verifyPosInfo, *currPosInfo))
+ {
+ INFO_PRINTF1(_L("Failed test, Positions incorrect."));
+ SetTestStepResult(EFail);
+ }
+ }
+ }
+
+ }
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Failed test, Positions incorrect."));
+ SetTestStepResult(EFail);
+ }
+ }
+
+
+
+/** NetSim callbacks given for a MoLr, which we invoke as a result of the notify position update.
+*/
+void CT_LbsMolrStep_NewClient::Connected()
+ {
+ // Call base implementation.
+ CT_LbsConflictStep::Connected();
+
+ // Kick off first pos update.
+
+ // Create a posinfo and store in our shared array for later verification.
+ RPointerArray<TAny>& posInfoArr = iParent.iSharedData->iCurrentPosInfoArr;
+
+ T_LbsUtils utils;
+ utils.ResetAndDestroy_PosInfoArr(posInfoArr); // Clear previous entries before new entry is appended.
+ iPosInfo1 = new(ELeave) TPositionInfo();
+ posInfoArr.Append(iPosInfo1);
+ iPosInfo2 = new(ELeave) TPositionInfo();
+ posInfoArr.Append(iPosInfo2);
+
+ // Kick off pos update.
+ iDoPosUpdate->StartL(*iPosInfo1);
+ }
+
+
+void CT_LbsMolrStep_NewClient::Disconnected()
+ {
+ // Call base implementation.
+ CT_LbsConflictStep::Disconnected();
+ }
+
+void CT_LbsMolrStep_NewClient::NotifyRegisterLcsMoLr(const TDesC& aData)
+ {
+ if (aData != KNullDesC)
+ {
+ INFO_PRINTF1(_L("Got unexpected - NetSim Notify Register Lcs MoLr - Event."));
+ SetTestStepResult(EFail);
+ }
+ else
+ INFO_PRINTF1(_L("Got - NetSim Notify Register Lcs MoLr - Callback Event."));
+
+ if(iTestCaseId==5)
+ {
+ if(!iNetSim.SetResponseError(RLbsNetSimTest::KNetSimNetworkNotAvailable, ETrue))
+ {
+ INFO_PRINTF1(_L("CT_LbsClientStep_CellBasedNotifyPosUpdate::doTestStepL() Failed: Can't set NetSim's response error."));
+ SetTestStepResult(EFail);
+ }
+ }
+ SetCurrentSeqEvent(ESelf_MOLR_NetSim_Got_NotifyRegisterLcsMoLr);
+ }
+
+
+void CT_LbsMolrStep_NewClient::NotifyReleaseLcsMoLr(TInt aReason)
+ {
+ (void)aReason;
+
+ INFO_PRINTF1(_L("Got - NetSim Notify Release Lcs MoLr - Callback Event."));
+ SetCurrentSeqEvent(ESelf_MOLR_NetSim_Got_NotifyReleaseLcsMoLr);
+
+ switch(iTestCaseId)
+ {
+ case 02:
+ {
+ // Kick off pos update.
+ iDoPosUpdate->StartL(*iPosInfo2);
+ }
+ break;
+
+ case 03:
+ {
+ if(iPosUpdateFlag)
+ {
+ //Close the connection first
+ iDoPosUpdate->ClosePositioner();
+
+ //Open new connection
+ iDoPosUpdate->OpenPositioner();
+
+ // Kick off pos update.
+ iDoPosUpdate->StartL(*iPosInfo2);
+
+ iPosUpdateFlag=EFalse;
+ }
+ else
+ iState = EWaiting;
+
+ }
+ break;
+
+ case 04:
+ {
+ if(iPosUpdateFlag)
+ {
+ //Close the connection first
+ iDoPosUpdate->ClosePositioner();
+ iDoPosUpdate->CloseServer();
+
+ //Open new connection
+ iDoPosUpdate->ConnectServer();
+ iDoPosUpdate->OpenPositioner();
+
+ // Kick off pos update.
+ iDoPosUpdate->StartL(*iPosInfo2);
+ iPosUpdateFlag=EFalse;
+ }
+ else
+ iState = EWaiting;
+ }
+ break;
+
+ default:
+ break;
+
+ }
+ }
+
+
+void CT_LbsMolrStep_NewClient::NotifyMeasurementControlLocation(const TPositionInfo& aPosition,
+ const RLbsAssistanceDataBuilderSet& aData,
+ const TLbsNetPosRequestQuality& aQuality)
+ {
+ (void)aPosition;
+ (void)aData;
+ (void)aQuality;
+
+ INFO_PRINTF1(_L("Got - NetSim Notify Measurement Control Location - Callback Event."));
+
+ //if(iTestCaseId==5)
+ // {
+ // if(!iNetSim.SetResponseError(RLbsNetSimTest::KNetSimNetworkNotAvailable, ETrue))
+ // {
+ // INFO_PRINTF1(_L("CT_LbsClientStep_CellBasedNotifyPosUpdate::doTestStepL() Failed: Can't set NetSim's response error."));
+ // SetTestStepResult(EFail);
+ // }
+ // }
+ SetCurrentSeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementControlLocation);
+ }
+
+
+void CT_LbsMolrStep_NewClient::NotifyReleaseLcsLocationNotification(const CLbsNetworkProtocolBase::TLbsPrivacyResponse& aResult)
+ {
+ (void)aResult;
+
+ INFO_PRINTF1(_L("Got - NetSim Notify Release Lcs Location Notification - Callback Event."));
+ SetCurrentSeqEvent(ESelf_MOLR_NetSim_Got_NotifyReleaseLcsLocationNotification);
+ }
+
+
+void CT_LbsMolrStep_NewClient::NotifyFacilityLcsMoLrResult(TInt aReason, const TPositionInfo& aPosition)
+ {
+ (void)aReason;
+ (void)aPosition;
+
+ INFO_PRINTF1(_L("Got - NetSim Notify Facility Lcs MoLr Result - Callback Event."));
+ SetCurrentSeqEvent(ESelf_MOLR_NetSim_Got_NotifyFacilityLcsMoLrResult);
+ }
+
+
+void CT_LbsMolrStep_NewClient::NotifyMeasurementReportLocation(const TPositionInfo& aPosition)
+ {
+ (void)aPosition;
+
+ INFO_PRINTF1(_L("Got - Net Sim Notify Measurement Report - Callback Event."));
+ SetCurrentSeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementReportLocation);
+ }
+
+
+void CT_LbsMolrStep_NewClient::NotifyMeasurementReportRequestMoreAssistanceData(const TLbsAssistanceDataGroup& aFilter)
+ {
+ (void)aFilter;
+
+ INFO_PRINTF1(_L("Got - Net Sim Notify Measurement Report Request More Assistance Data - Callback Event."));
+ SetCurrentSeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementReportRequestMoreAssistanceData);
+ }
+
+
+void CT_LbsMolrStep_NewClient::NotifyMeasurementReportControlFailure(TInt aReason)
+ {
+ (void)aReason;
+
+ INFO_PRINTF2(_L("Got - Net Sim Notify Measurement Report Control Failure - Callback Event. Reason = %d"), aReason);
+ SetCurrentSeqEvent(ESelf_MOLR_NetSim_Got_NotifyMeasurementReportControlFailure);
+ }
+
+
+/** Notify position update callback.
+ The notify position update has completed.
+*/
+void CT_LbsMolrStep_NewClient::MT_LbsDoPosUpdateCallback(TRequestStatus& aStatus)
+ {
+ INFO_PRINTF1(_L("Got - Client Notify Update Complete - Callback Event."));
+
+
+ if(iTestCaseId==3 || iTestCaseId==4)
+ {
+ if(KErrNone != aStatus.Int())
+ {
+ INFO_PRINTF1(_L("<FONT><B>Request should have returned KErrNone</B></FONT>"));
+ SetTestStepResult(EFail);
+ }
+ return;
+ }
+
+ if(iPosUpdateFlag)
+ {
+ switch(iTestCaseId)
+ {
+ case 01:
+ case 06:
+ {
+ if(KErrNone != aStatus.Int())
+ {
+ INFO_PRINTF1(_L("aStatus is not KErrNone"));
+ SetTestStepResult(EFail);
+ }
+
+ iDoPosUpdate->StartL(*iPosInfo2);
+ }
+ break;
+
+ case 05:
+ {
+ if(KErrTimedOut != aStatus.Int() && KErrNone != aStatus.Int())
+ {
+ INFO_PRINTF1(_L("<FONT><B>Request should have returned KErrTimedOut</B></FONT>"));
+ SetTestStepResult(EFail);
+ }
+ else
+ iDoPosUpdate->StartL(*iPosInfo2);
+ }
+ break;
+
+ default:
+ {
+ if(KErrNone != aStatus.Int())
+ {
+ INFO_PRINTF1(_L("aStatus is not KErrNone"));
+ SetTestStepResult(EFail);
+ }
+ }
+ break;
+ }
+
+ iPosUpdateFlag = EFalse;
+ }
+ else
+ iState = EWaiting;
+ }