--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lbs/common/src/ctlbsportedstepbase.cpp Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,659 @@
+// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+
+#include "ctlbsportedstepbase.h"
+#include "ctlbsportedsuitedefs.h"
+
+/*
+* ============================================================================
+* ============================================================================
+*/
+
+// INCLUDES
+#include <TestExecuteStepBase.h>
+#include <EPos_CPosModules.h>
+#include <EPos_CPosModuleUpdate.h>
+#include <EPos_CPosModuleIdList.h>
+#include <SimulationPSYInternalCRKeys.h>
+#include "ctlbsclientlog.h"
+
+// Device driver constants
+
+TVerdict CT_LbsPortedStepBase::doTestStepPreambleL()
+/**
+ * @return - TVerdict
+ * Implementation of CTestStep base class virtual
+ * It is used for doing all initialisation common to derived classes in here.
+ * Make it being able to leave if there are any errors here as there's no point in
+ * trying to run a test step if anything fails.
+ * The leave will be picked up by the framework.
+ */
+ {
+ // process some common pre setting to test steps then set SetTestStepResult to EFail or Epass.
+ SetTestStepResult(EPass);
+ return TestStepResult();
+ }
+
+TVerdict CT_LbsPortedStepBase::doTestStepPostambleL()
+/**
+ * @return - TVerdict
+ * Implementation of CTestStep base class virtual
+ * It is used for doing all after test treatment common to derived classes in here.
+ * Make it being able to leave
+ * The leave will be picked up by the framework.
+ */
+ {
+ // process some common post setting to test steps then set SetTestStepResult to EFail or Epass.
+ // SetTestStepResult(EPass); // or EFail
+ return TestStepResult();
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CT_LbsPortedStepBase::CT_LbsPortedStepBase(CT_LbsServer& aParent): CT_LbsStep(aParent)
+ {
+ iUidExternalGps.iUid = KUidExternalGps;
+ iUidManualInput.iUid = KUidManualInput;
+ iUidDefault.iUid = KUidDefault;
+ iUidStrategy.iUid = KUidStrategy;
+ iUidStubPositioner.iUid = KUidStubPositioner;
+ iUidSimulationPsy.iUid = KUidSimulationPsy;
+ iUidDynDbTestPsy.iUid = KUidDynDbTestPsy;
+ iUidInstallTestPsy.iUid = KUidInstallTestPsy;
+ iUidTestPsySimulateIsa.iUid = KUidTestPsySimulateIsa;
+ iUidTestPsy1.iUid = KUidTestPsy1;
+ iUidTestPsy2.iUid = KUidTestPsy2;
+ iUidTestPsy3.iUid = KUidTestPsy3;
+ iUidTestPsy4.iUid = KUidTestPsy4;
+ iUidTestPsy5.iUid = KUidTestPsy5;
+ iUidTestPsy6.iUid = KUidTestPsy6;
+ iUidTestPsy7.iUid = KUidTestPsy7;
+ iUidTestPsy8.iUid = KUidTestPsy8;
+ iUidTestPsy9.iUid = KUidTestPsy9;
+ iUidTestPsy10.iUid = KUidTestPsy10;
+ iUidTestPsy11.iUid = KUidTestPsy11;
+ iUidTestPsy12.iUid = KUidTestPsy12;
+ iUidTestPsy13.iUid = KUidTestPsy13;
+ iUidTestPsyTp176.iUid = KUidTestPsyTp176;
+ iUidMultiPsy.iUid = KUidMultiPsy;
+ iUidTestPsy256.iUid = KUidTestPsy256;
+ iUidExamplePsy.iUid = KUidExamplePsy;
+ iUidTestStatusPsy.iUid = KUidTestStatusPsy;
+ iUidTestTimerPsy.iUid = KUidTestTimerPsy;
+ iUidPanicPsy.iUid = KUidPanicPsy;
+ iUidPsySwitching.iUid = KUidPsySwitching;
+ iUidTestPsyPartialUpdate.iUid = KUidTestPsyPartialUpdate;
+ iUidTestPsyMaxAge.iUid = KUidTestPsyMaxAge;
+ iUidTestRangePsy.iUid = KUidTestRangePsy;
+ iUidTestSingPsy.iUid = KUidTestSingPsy;
+ iUidTestTrackingPsy.iUid = KUidTestTrackingPsy;
+ iUidTestProxyPsy1.iUid = KTestProxyPsy1;
+ iUidTestProxyPsy2.iUid = KTestProxyPsy2;
+ iUidTestProxyPsy3.iUid = KTestProxyPsy3;
+ iUidTestProxyPsy4.iUid = KTestProxyPsy4;
+ iUidInstallPsyTp273.iUid = KInstallPsyTp273;
+ iUidPartialUpdate2.iUid = KUidTestPsyPartialUpdate2;
+ iUidSatInfoPsy.iUid = KUidSatInfoPsy;
+ iUidBtgPsy.iUid = KUidBtgPsy;
+ iUidIgPsy.iUid = KUidIgPsy;
+ }
+
+// Destructor
+CT_LbsPortedStepBase::~CT_LbsPortedStepBase()
+ {
+ iPositioner.Close();
+ iPosServer.Close();
+ delete iScheduler;
+ iFileServer.Close();
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::StartL(TInt aIndex)
+ {
+ if (aIndex == 0)
+ {
+ __UHEAP_MARK;
+
+ iLog = CT_LbsClientLog::NewL(Logger());
+
+ // Give extra time for epos server to shut down after previous tests:
+ User::After(2000000);
+ TRAPD(err, InitTestL());
+ if (err == KErrNone)
+ {
+ TRAP(err, StartL());
+ }
+ CloseTest();
+
+ delete iLog;
+ __UHEAP_MARKEND;
+
+ if (err != KErrNone)
+ {
+ User::Leave(err); // Not using LeaveIfError to allow positive error codes
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::SetupPsyL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::SetupPsyL(const TUid aPsyUid,
+ TPosSetupPsyDirective /*aDirective*/)
+ {
+ CPosModules* db = CPosModules::OpenL();
+ CleanupStack::PushL(db);
+ CPosModuleUpdate* moduleUpdate = CPosModuleUpdate::NewLC();
+
+ moduleUpdate->SetUpdateAvailability(EFalse);
+ CPosModuleIdList* prioList = db->ModuleIdListLC();
+
+ // Disable all PSY:s except aPsyUid
+ for (TInt i = 0 ; i < prioList->Count(); i++)
+ {
+ if ((*prioList)[i] != aPsyUid)
+ {
+ db->UpdateModuleL((*prioList)[i], *moduleUpdate);
+ }
+ }
+
+ // Enable the PSY that came as an in parameter
+ moduleUpdate->SetUpdateAvailability(ETrue);
+ db->UpdateModuleL(aPsyUid, *moduleUpdate);
+
+ CleanupStack::PopAndDestroy(prioList);
+ CleanupStack::PopAndDestroy(moduleUpdate);
+ CleanupStack::PopAndDestroy(db);
+ }
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::InitTestL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::CloseTest()
+ {
+ }
+
+// ---------------------------------------------------------
+// CTe_LbsPortedStepBase::ConnectL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::ConnectL()
+ {
+ TInt err = iPosServer.Connect();
+ if (err != KErrNone)
+ {
+ _LIT(KOpenError,
+ "TP%d, part %d failed. Unable to open connection to Epos, err = %d");
+ TBuf<100> error;
+ error.Format(KOpenError, iModuleId, iNrOfRequests, err);
+ LogErrorAndLeaveL(error);
+ }
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::OpenPositionerByName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CT_LbsPortedStepBase::OpenPositionerByName(
+ const TUid aPsyUid)
+ {
+ TInt err = iPositioner.Open(iPosServer, aPsyUid);
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::OpenPositionerL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CT_LbsPortedStepBase::OpenPositioner()
+ {
+ TInt err = iPositioner.Open(iPosServer);
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::ClosePositioner
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::ClosePositioner()
+ {
+ iPositioner.Close();
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::Disconnect
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::Disconnect()
+ {
+ iPosServer.Close();
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::PerformRequest
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::PerformRequestL(const TDesC& aRequestor,
+ CRequestor::_TRequestorType aRequestorType,
+ CRequestor::_TRequestorFormat aRequestorFormat)
+ {
+ iNrOfRequests++;
+
+ iModuleInfo = TPositionInfo();
+ TInt err = iPositioner.SetRequestor(aRequestorType,
+ aRequestorFormat, aRequestor);
+ if (err != KErrNone)
+ {
+ _LIT(KErrRequestor, "Error when setting requestor in PerformRequestL");
+ LogErrorAndLeaveL(KErrRequestor, err);
+ }
+
+ iPositioner.NotifyPositionUpdate(iModuleInfo, iStatus);
+ }
+
+// ---------------------------------------------------------
+// CTe_LbsPortedStepBase::PerformRequestL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::PerformRequestL(
+ const TDesC& aService, const TDesC& aContact,
+ CRequestor::_TRequestorType aServiceIdType,
+ CRequestor::_TRequestorType aContactIdType,
+ CRequestor::_TRequestorFormat aServiceFormat,
+ CRequestor::_TRequestorFormat aContactFormat)
+ {
+ CRequestor* contactId =
+ CRequestor::New(aContactIdType, aContactFormat,
+ aContact);
+
+ CRequestor* servId =
+ CRequestor::New(aServiceIdType, aServiceFormat,
+ aService);
+
+ RRequestorStack stack = RRequestorStack();
+ stack.Append(contactId);
+ stack.Append(servId);
+
+ CleanupStack::PushL(contactId);
+ CleanupStack::PushL(servId);
+
+ iNrOfRequests++;
+
+ TInt err = iPositioner.SetRequestor(stack);
+ stack.Close();
+ if (err != KErrNone)
+ {
+ _LIT(KErrRequestor, "Error when setting requestor in PerformRequestL");
+ LogErrorAndLeaveL(KErrRequestor, err);
+ }
+
+ CleanupStack::PopAndDestroy(servId);
+ CleanupStack::PopAndDestroy(contactId);
+ iModuleInfo = TPositionInfo();
+ iPositioner.NotifyPositionUpdate(iModuleInfo, iStatus);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::PerformSyncRequestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CT_LbsPortedStepBase::PerformSyncRequest(
+ const TDesC& aServiceName,
+ TPositionInfoBase* aModuleInfo)
+ {
+ iNrOfRequests++;
+ iPositioner.SetRequestor(CRequestor::ERequestorService,
+ CRequestor::EFormatApplication, aServiceName);
+
+ iPositioner.NotifyPositionUpdate(*aModuleInfo, iStatus);
+
+ User::WaitForRequest(iStatus);
+ TInt err = iStatus.Int();
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::CheckRequestResultL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::CheckRequestResultL(TInt aExpectedErrorCode, TBool aLogFlag)
+ {
+ User::WaitForRequest(iStatus);
+
+ if (iStatus != aExpectedErrorCode)
+ {
+ _LIT(KError, "TP%d, request %d failed. iStatus = %d");
+ TBuf<100> error;
+ error.Format(KError, iModuleId, iNrOfRequests, iStatus.Int());
+ LogErrorAndLeaveL(error);
+ }
+ else {
+ if (aLogFlag)
+ {
+ _LIT(KMsg, "TP%d, part %d completed.");
+ TBuf<30> msg;
+ msg.Format(KMsg, iModuleId, iNrOfRequests);
+ INFO_PRINTF1(msg);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::AssertTrueL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::AssertTrueL(TBool aCondition,
+ const TDesC& aErrorMsg, TInt aErrorCode)
+ {
+ if (!aCondition)
+ {
+ TBuf<100> buf;
+ buf.Format(aErrorMsg, aErrorCode);
+ LogErrorAndLeaveL(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::AssertTrueL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::AssertTrueL(TBool aCondition,
+ const TDesC& aErrorMsg)
+ {
+ if (!aCondition)
+ {
+ LogErrorAndLeaveL(aErrorMsg);
+ }
+ }
+
+// ---------------------------------------------------------
+// CTe_LbsPortedStepBase::AllocPositionInfoL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TPositionInfo CT_LbsPortedStepBase::AllocPositionInfoL()
+ {
+ TPositionInfo moduleInfo = TPositionInfo();
+ iPositioner.GetLastKnownPosition(moduleInfo, iStatus);
+ return moduleInfo;
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::VerifyPsyLoadedL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::VerifyPsyLoadedL(TPositionModuleId aUid)
+ {
+ _LIT(KVerPSYLoaded, "Verifies if PSY: %x, is loaded by getting its status");
+ TBuf<100> buf;
+ buf.Format(KVerPSYLoaded, aUid.iUid);
+ INFO_PRINTF1(buf);
+
+ _LIT(KDevStatusErr, "The PSY has not reported expected Device Status.");
+ TPositionModuleStatus moduleStatus;
+ iPosServer.GetModuleStatus (moduleStatus, aUid);
+ AssertTrueL(TPositionModuleStatus::EDeviceReady == moduleStatus.DeviceStatus(),
+ KDevStatusErr, KErrGeneral);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::VerifyPsyUnloadedL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::VerifyPsyUnloadedL(TPositionModuleId aUid)
+ {
+ _LIT(KVerPSYUnloaded, "Verifies if PSY: %x, is unloaded by getting its status");
+ TBuf<100> buf;
+ buf.Format(KVerPSYUnloaded, aUid.iUid);
+ INFO_PRINTF1(buf);
+
+ _LIT(KDevStatusErr, "The PSY has not reported expected Device Status.");
+ TPositionModuleStatus moduleStatus;
+ iPosServer.GetModuleStatus(moduleStatus, aUid);
+ AssertTrueL(TPositionModuleStatus::EDeviceInactive == moduleStatus.DeviceStatus(),
+ KDevStatusErr, KErrGeneral);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::RequestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::RequestL(TPositionInfo& aPosInfo,
+ const TInt& aRequestIndex,
+ const TInt& aExpectedErrorCode)
+ {
+ TBuf<100> info;
+ _LIT(KInfo, "Making request: %d");
+ _LIT(KInfoCompCode, "Making request: %d, expecting completion code: %d.");
+ if (aExpectedErrorCode != 999)
+ {
+ info.Format(KInfoCompCode, aRequestIndex, aExpectedErrorCode);
+ }
+ else
+ {
+ info.Format(KInfo, aRequestIndex);
+ }
+ INFO_PRINTF1(info);
+
+ aPosInfo.SetUpdateType(aRequestIndex); // Used here as request index
+
+ TTime starttime, stoptime;
+ starttime.UniversalTime();
+
+ TRequestStatus status;
+ iPositioner.NotifyPositionUpdate(aPosInfo, status);
+ User::WaitForRequest(status);
+
+ stoptime.UniversalTime();
+ iRequestTime = stoptime.Int64() - starttime.Int64();
+
+ if (aExpectedErrorCode != 999)
+ {
+ _LIT(KUnexpectedErrCode, "Unexpected error code %d, expected %d.");
+ TBuf<200> buf;
+ buf.Format(KUnexpectedErrCode, status.Int(), aExpectedErrorCode);
+ AssertTrueL(status.Int() == aExpectedErrorCode, buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CT_LbsPortedStepBase::LogErrorAndLeave
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C void CT_LbsPortedStepBase::LogErrorAndLeaveL(const TDesC& aErrorInfo,
+ const TInt aReason)
+ {
+ ERR_PRINTF2(aErrorInfo, aReason);
+ User::Leave(aReason);
+ }
+
+TVerdict CT_LbsPortedStepBase::doTestStepL()
+/**
+ * @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.
+ */
+ {
+ if (TestStepResult() == EPass)
+ {
+ CActiveScheduler* sched = new (ELeave) CActiveScheduler;
+ sched->Install(sched);
+ CleanupStack::PushL(sched);
+ StartL(0);
+ CleanupStack::PopAndDestroy(sched);
+
+ SetTestStepResult(EPass);
+ }
+ return TestStepResult();
+ }
+
+// ---------------------------------------------------------
+// CPosSimulationPSYTestProcedureBase::SetSimDataFile()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::SetSimDataFileL(const TDesC& aFileName)
+ {
+ CRepository* repository =
+ CRepository::NewLC(KCRUidSimulationPSY);
+ TInt err = repository->Set(KCRKeySimPSYSimulationFile,
+ aFileName);
+ if (err != KErrNone)
+ {
+ _LIT(KErr, "CRepository::Set(KCRKeySimPSYSimulationFile...) returned error");
+ INFO_PRINTF1(KErr);
+ LogErrorAndLeaveL(KErr);
+ }
+
+ CleanupStack::PopAndDestroy(repository);
+ }
+
+// ---------------------------------------------------------
+// CPosSimulationPSYTestProcedureBase::ResetDefaultPSYLastWorkingExtGPSPSYL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::ResetDefaultPSYLastWorkingExtGPSPSYL()
+ {
+ TPositionModuleId modId = KPositionNullModuleId;
+
+ CRepository* repos = CRepository::NewL( KCRUidDefaultProxyConfiguration );
+ TBuf<40> idBuf;
+ idBuf.AppendNumFixedWidth( modId.iUid, EHex, 8);
+ TInt err = repos->Set(KDefaultProxyLastWorkingGpsPsy, idBuf);
+ delete repos;
+ User::LeaveIfError(err);
+
+ _LIT(KInfo, "ResetDefaultPSYLastWorkingExtGPSPSYL successfully executed.");
+ INFO_PRINTF1(KInfo);
+ }
+
+// ---------------------------------------------------------
+// CPosSimulationPSYTestProcedureBase::VerifyPositionFromL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::VerifyPositionFromL(TPositionInfo& aPosInfo,
+ TPositionModuleId& aModuleId)
+ {
+ if (aModuleId.iUid != aPosInfo.ModuleId().iUid)
+ {
+ _LIT(KIncorrPsyErr,
+ "Position from wrong PSY received, got position from: %x, expected: %x.");
+ TBuf<200> buf;
+ buf.Format(KIncorrPsyErr, aPosInfo.ModuleId().iUid, aModuleId.iUid);
+ LogErrorAndLeaveL(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosSimulationPSYTestProcedureBase::VerifyPositionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::VerifyPositionL(TPositionInfo& aPosInfo,
+ TReal64 aLat, TReal64 aLong, TReal64 aAlt)
+ {
+ _LIT(KWrongFix, "Wrong Fix");
+ TPosition pos;
+ aPosInfo.GetPosition(pos);
+ AssertTrueL( aLat == pos.Latitude(), KWrongFix);
+ AssertTrueL( aLong == pos.Longitude(), KWrongFix);
+ AssertTrueL( aAlt == pos.Altitude(), KWrongFix);
+ }
+
+// ---------------------------------------------------------
+// CPosSimulationPSYTestProcedureBase::VerifyRequestTimeLessThanL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsPortedStepBase::VerifyRequestTimeLessThanL(TInt aExpectedReqTime)
+ {
+ if (iRequestTime > aExpectedReqTime)
+ {
+ _LIT(KTime, "Request time for last request was more than: %d");
+ TBuf<100> buf;
+ buf.Format(KTime, aExpectedReqTime);
+ INFO_PRINTF1(buf);
+ }
+ }
+
+void CT_LbsPortedStepBase::ConstructL()
+ {
+ iScheduler = new ( ELeave ) CActiveScheduler;
+ CActiveScheduler::Install(iScheduler);
+ User::LeaveIfError(iFileServer.Connect());
+ }
+// End of File