--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lbs/lbsclient/src/ctlbsclientpostp218.cpp Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,414 @@
+// 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:
+//
+
+
+
+// INCLUDES
+#include "ctlbsclientpostp218.h"
+#include <EPos_CPosModules.h>
+#include <EPos_CPosModuleUpdate.h>
+#include <EPos_CPosModuleIdList.h>
+#include <LbsSatellite.h>
+
+// CONSTANTS
+const TInt MAX_AGE_TIME = 10000000; // 10 sec
+const TInt HALF_MAX_AGE_TIME = 5000000; // 5 sec
+
+_LIT(KKallesService, "Kalles Service");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Constructor.
+CT_LbsClientPosTp218::CT_LbsClientPosTp218(CT_LbsServer& aParent): CT_LbsPortedStepBase(aParent)
+ {
+ _LIT(KTestName, "TP218 - Max Age, default Psy");
+ SetTestStepName(KTestName);
+ }
+
+// ---------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------
+CT_LbsClientPosTp218::~CT_LbsClientPosTp218()
+ {
+ }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp218::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp218::CloseTest()
+ {
+ ClosePositioner();
+ iPositioner1.Close();
+ iPositioner2.Close();
+ Disconnect();
+ }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp218::SetupDefaultPsyL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp218::SetupDefaultPsyL(const TUid aPsyUid)
+ {
+ CPosModules* db = CPosModules::OpenL();
+ CleanupStack::PushL(db);
+
+ SetupPsyL(aPsyUid);
+ //setting priority
+ TPositionModuleInfo moduleInfoHp;//Hp - high prio;
+ TPositionModuleInfo moduleInfoLp;//Lp - low prio;
+
+ CPosModuleIdList* prioList = db->ModuleIdListLC();
+
+ db->GetModuleInfoL(prioList->At(0), moduleInfoHp);
+
+ CPosModuleUpdate* moduleUpdate = CPosModuleUpdate::NewLC();
+
+ if (aPsyUid.iUid == moduleInfoHp.ModuleId().iUid)
+ {
+ moduleUpdate->SetUpdateAvailability(ETrue);
+ db->UpdateModuleL((*prioList)[0], *moduleUpdate);
+ }
+ else
+ {
+ db->GetModuleInfoL(aPsyUid, moduleInfoLp);
+ db->UpdateModuleL(aPsyUid, *moduleUpdate);
+ TUint hp = db -> PriorityL(moduleInfoHp.ModuleId());
+ TUint lp = db -> PriorityL(moduleInfoLp.ModuleId());
+ db->SetModulePriorityL(aPsyUid, hp); //lp
+ db->SetModulePriorityL((*prioList)[0], lp); //hp
+ }
+
+ moduleUpdate->SetUpdateAvailability(ETrue);
+ db -> UpdateModuleL(aPsyUid, *moduleUpdate);
+
+ CleanupStack::PopAndDestroy(moduleUpdate);
+ CleanupStack::PopAndDestroy(2); // db, prioList
+ }
+
+
+// This flag must be defined if MaxAge should NOT be tested
+#ifdef MAX_AGE_NOT_SUPPORTED
+// ---------------------------------------------------------
+// CT_LbsClientPosTp218::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+// >>>>>>>>>>>>>>>MaxAge NOT supported<<<<<<<<<<<<<<<<<<<<<<
+void CT_LbsClientPosTp218::StartL()
+ {
+ TTimeIntervalMicroSeconds maxAge = TTimeIntervalMicroSeconds(MAX_AGE_TIME);
+
+ // Set iUidTestPsyMaxAge to defaultpsy
+ SetupDefaultPsyL(iUidTestPsyMaxAge);
+
+ //connect to EPos
+ User::LeaveIfError(iPosServer.Connect());
+ TInt err = KErrNone;
+ TRequestStatus myStatus;
+
+ // Open default psy
+ User::LeaveIfError(iPositioner.Open(iPosServer));
+ TBuf<150> buf;
+
+ SetupGlobalPrivacyL(TPosPrivacy(TPosPrivacy::EAcceptAll, EFalse));
+
+ TPositionUpdateOptions posOption;
+ posOption.SetMaxUpdateAge(maxAge);
+
+ _LIT(KTestMaxAge, "Testing that MaxAge is not supported");
+ INFO_PRINTF1(KTestMaxAge);
+ err = iPositioner.SetUpdateOptions(posOption);
+ _LIT(KErr, "MaxAge should NOT be supported instead code %d was returned");
+ AssertTrueL(err == KErrNotSupported, KErr, err);
+
+ TPositionInfo posInfo1 = TPositionInfo();
+ TPositionInfo posInfo2 = TPositionInfo();
+
+ iPositioner.SetRequestor(CRequestor::ERequestorService,
+ CRequestor::EFormatApplication, KKallesService);
+
+ // Get position, first position
+ iPositioner.NotifyPositionUpdate(posInfo1, myStatus);
+
+ User::WaitForRequest(myStatus);
+
+ err = myStatus.Int();
+ _LIT(KNotifyPositionUpdate, "Error from NotifyPositionUpdate, err %d");
+ AssertTrueL(err == KErrNone, KNotifyPositionUpdate, err);
+
+ _LIT(KWaitMaxAge, "Wait for half Max Age...");
+ INFO_PRINTF1(KWaitMaxAge);
+ // Wait half MAX_AGE_TIME
+ User::After(HALF_MAX_AGE_TIME);
+
+ // Get position again, should be the same as first position
+ iPositioner.NotifyPositionUpdate(posInfo2, myStatus);
+ User::WaitForRequest(myStatus);
+ err = myStatus.Int();
+ AssertTrueL(err == KErrNone, KNotifyPositionUpdate, err);
+
+ if (ComparePositionL(posInfo1, posInfo2))
+ {
+ _LIT(KErrorAndLeave,
+ "The old position was returned from positioner, MaxAge seems to be supported!!!");
+ LogErrorAndLeaveL(KErrorAndLeave);
+ }
+
+ }
+
+#else
+// ---------------------------------------------------------
+// CT_LbsClientPosTp218::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+// >>>>>>>>>>>>>>>>>>>>MaxAge supported<<<<<<<<<<<<<<<<<<<<<<
+void CT_LbsClientPosTp218::StartL()
+ {
+ TTimeIntervalMicroSeconds maxAge = TTimeIntervalMicroSeconds(MAX_AGE_TIME);
+
+ // Set iUidTestPsyMaxAge to defaultpsy
+ SetupDefaultPsyL(iUidTestPsyMaxAge);
+
+ //connect to EPos
+ User::LeaveIfError(iPosServer.Connect());
+ TInt err = KErrNone;
+
+ // Open default psy
+ User::LeaveIfError(iPositioner.Open(iPosServer));
+ TBuf<150> buf;
+
+ TPositionInfo posInfo = TPositionInfo();
+ TPositionInfo posInfo2 = TPositionInfo();
+ TRequestStatus myStatus;
+
+ iPositioner.SetRequestor(CRequestor::ERequestorService,
+ CRequestor::EFormatApplication, KKallesService);
+
+ // Make sure that it is possible to get position from psy
+ iPositioner.NotifyPositionUpdate(posInfo, myStatus);
+ User::WaitForRequest(myStatus);
+ err = myStatus.Int();
+ _LIT(KNotifyPositionUpdate, "Error from NotifyPositionUpdate, err %d");
+ AssertTrueL(err == KErrNone, KNotifyPositionUpdate, err);
+
+ // Make sure that the psy returns differens positions
+ iPositioner.NotifyPositionUpdate(posInfo2, myStatus);
+ User::WaitForRequest(myStatus);
+ err = myStatus.Int();
+ AssertTrueL(err == KErrNone, KNotifyPositionUpdate, err);
+
+
+ TPositionUpdateOptions returnPosOption;
+ iPositioner.GetUpdateOptions(returnPosOption);
+ TTimeIntervalMicroSeconds returnInterval = returnPosOption.MaxUpdateAge();
+
+ _LIT(KMaxAge, "Max age should not hold a value");
+ AssertTrueL(returnInterval == TTimeIntervalMicroSeconds(0), KMaxAge, KErrGeneral);
+
+ TPositionUpdateOptions posOption;
+ posOption.SetMaxUpdateAge(maxAge);
+
+ err = iPositioner.SetUpdateOptions(posOption);
+ _LIT(KChange, "Error when setting max age in SetMaxAge, error %d");
+ AssertTrueL(err == KErrNone, KChange, err);
+
+ TPositionUpdateOptions returnPosOption2;
+ iPositioner.GetUpdateOptions(returnPosOption2);
+
+ returnInterval = returnPosOption2.MaxUpdateAge();
+ _LIT(KMaxAgeNotMatch, "Max age does not match, %d %d ");
+ buf.Format(KMaxAgeNotMatch, returnInterval.Int64(), MAX_AGE_TIME);
+ AssertTrueL(returnInterval == maxAge, buf, KErrGeneral);
+
+ TPositionInfo posInfo3 = TPositionInfo();
+ TPositionInfo posInfo4 = TPositionInfo();
+ TPositionInfo posInfo5 = TPositionInfo();
+ // Get position, first position
+ iPositioner.NotifyPositionUpdate(posInfo3, myStatus);
+
+ User::WaitForRequest(myStatus);
+
+ err = myStatus.Int();
+ AssertTrueL(err == KErrNone, KNotifyPositionUpdate, err);
+
+ _LIT(KWaitMAxAge, "Wait for half Max Age...");
+ INFO_PRINTF1(KWaitMAxAge);
+ // Wait half MAX_AGE_TIME
+ User::After(HALF_MAX_AGE_TIME);
+
+ // Get position again, should be the same as first position
+ iPositioner.NotifyPositionUpdate(posInfo4, myStatus);
+ User::WaitForRequest(myStatus);
+ err = myStatus.Int();
+ AssertTrueL(err == KErrNone, KNotifyPositionUpdate, err);
+
+ if (!ComparePositionL(posInfo3, posInfo4))
+ {
+ _LIT(KErrorAndLeave, "The old position was not returned from positioner!!!");
+ LogErrorAndLeaveL(KErrorAndLeave);
+ }
+
+ // Wait MAX_AGE_TIME
+ _LIT(KWait, "Waiting waiting...");
+ INFO_PRINTF1(KWait);
+ User::After(MAX_AGE_TIME);
+
+ // Get position again, should NOT be the same as earlier
+ iPositioner.NotifyPositionUpdate(posInfo5, myStatus);
+
+ User::WaitForRequest(myStatus);
+ err = myStatus.Int();
+ AssertTrueL(err == KErrNone, KNotifyPositionUpdate, err);
+
+ if (ComparePositionL(posInfo4, posInfo5))
+ {
+ _LIT(KErrorAndLeave, "(1)The old position was returned from positioner!!!");
+ LogErrorAndLeaveL(KErrorAndLeave);
+ }
+
+ _LIT(KChangePSY11, "Changing default psy to Psy11");
+ INFO_PRINTF1(KChangePSY11);
+ // Set iUidTestPsy11 psy to defaultpsy
+ SetupDefaultPsyL(iUidTestPsy11);
+
+ // Wait some time to make changes occur
+ User::After(5000000);
+ TPositionInfo posInfo6 = TPositionInfo();
+ TPositionInfo posInfo7 = TPositionInfo();
+
+ // Get position again, should NOT be the same as earlier
+ iPositioner.NotifyPositionUpdate(posInfo6, myStatus);
+
+ User::WaitForRequest(myStatus);
+ err = myStatus.Int();
+ _LIT(KErr1, "Error from NotifyPositionUpdate for default psy, err1: %d");
+ AssertTrueL(err == KErrNone, KErr1, err);
+
+ if (ComparePositionL(posInfo5, posInfo6))
+ {
+ _LIT(KErrorAndLeave,
+ "(2)The old position was returned from positioner!!!");
+ LogErrorAndLeaveL(KErrorAndLeave);
+ }
+
+ // Get position again, should NOT be the same as earlier
+ iPositioner.NotifyPositionUpdate(posInfo7, myStatus);
+
+ User::WaitForRequest(myStatus);
+ err = myStatus.Int();
+ // TestPsy11 returns error every second request
+ _LIT(KErr2, "Error from NotifyPositionUpdate for default psy, err2: %d");
+ AssertTrueL(err == KPositionPartialUpdate, KErr2, err);
+
+ if (ComparePositionL(posInfo6, posInfo7))
+ {
+ _LIT(KErrorAndLeave,
+ "The old position was returned from default positioner!!!");
+ LogErrorAndLeaveL(KErrorAndLeave);
+ }
+
+ ClosePositioner();
+ Disconnect();
+ }
+
+#endif
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp218::ComparePositionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CT_LbsClientPosTp218::ComparePositionL(TPositionInfo aPosInfo1, TPositionInfo aPosInfo2)
+ {
+ _LIT(KFunctionName, "We are inside ComparePositionL()");
+ INFO_PRINTF1(KFunctionName);
+ TBool result = ETrue;
+ TBuf<150> buf;
+
+ TPosition pos1 = TPosition();
+ TPosition pos2 = TPosition();
+ aPosInfo1.GetPosition(pos1);
+ aPosInfo2.GetPosition(pos2);
+
+ TTime time1 = pos1.Time();
+ TTime time2 = pos2.Time();
+
+ if (time1 == time2)
+ {
+ _LIT(KEqualTime, "Equal Time");
+ INFO_PRINTF1(KEqualTime);
+ }
+ else
+ {
+ _LIT(KNotEqualTime, "NOT Equal Time");
+ INFO_PRINTF1(KNotEqualTime);
+ }
+
+ if ((time1 != time2) || (pos1.Latitude() != pos2.Latitude()) ||
+ (pos1.Longitude() != pos2.Longitude()) ||
+ (pos1.Altitude() != pos2.Altitude()) )
+ {
+ // Not equal
+ result = EFalse;
+ _LIT(KNotEqual, "Not equal");
+ INFO_PRINTF1(KNotEqual);
+ _LIT(KPosition1, "Position1: Lat %f Long %f Alt %f");
+ buf.Format(KPosition1, pos1.Latitude(), pos1.Longitude() ,pos1.Altitude());
+ INFO_PRINTF1(buf);
+ _LIT(KPosition2, "Position2: Lat %f Long %f Alt %f");
+ buf.Format(KPosition2, pos2.Latitude(), pos2.Longitude() ,pos2.Altitude());
+ INFO_PRINTF1(buf);
+ }
+ else
+ {
+ _LIT(KEqual, "Equal");
+ INFO_PRINTF1(KEqual);
+ result = ETrue;
+ _LIT(KPosition1, "Position1: Lat %f Long %f Alt %f");
+ buf.Format( KPosition1, pos1.Latitude(), pos1.Longitude() ,pos1.Altitude());
+ INFO_PRINTF1(buf);
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp218::AssertTrueSecL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp218::AssertTrueL(TBool aCondition, const TDesC& aErrorMsg, TInt aErrorCode)
+ {
+ if (!aCondition)
+ {
+ // LogErrorAndLeave does not leave if KErrNone is error
+ if (aErrorCode == KErrNone) aErrorCode = KErrGeneral;
+ TBuf<100> buf;
+ buf.Format(aErrorMsg, aErrorCode);
+ LogErrorAndLeaveL(buf, aErrorCode);
+ }
+ }
+
+