--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/common/tools/ats/smoketest/lbs/lbsclient/src/ctlbsclientpostp189.cpp Tue Nov 10 13:50:58 2009 +0000
@@ -0,0 +1,343 @@
+// 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 "ctlbsclientpostp189.h"
+#include <EPos_CPosModules.h>
+#include <EPos_CPosModuleUpdate.h>
+
+// CONSTANTS
+const TInt32 KUidNonExistingPsy = 0x01111111;
+const TInt KMaxMessageSize = 200;
+const TInt KNrOfDeviceStatusChanges = 8; // 9 since some are ignored
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------
+CT_LbsClientPosTp189::CT_LbsClientPosTp189(CT_LbsServer& aParent): CT_LbsPortedStepBase(aParent)
+ {
+ _LIT(KTestName, "Tp189 - Status Events");
+ SetTestStepName(KTestName);
+ }
+
+// ---------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------
+CT_LbsClientPosTp189::~CT_LbsClientPosTp189()
+ {
+ }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp189::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp189::StartL()
+ {
+ _LIT(KDeviceStatusValues, "Device Status Values (Unknown = 0, Error = 1, Disabled = 2, Inactive = 3, Initialising = 4, StandBy = 5, Ready = 6, Active = 7)");
+ INFO_PRINTF1(KDeviceStatusValues);
+ _LIT(KDataQualityValue, "Data Quality Status (Unknown = 0, Loss = 1, Partial = 2, Normal = 3)");
+ INFO_PRINTF1(KDataQualityValue);
+
+ _LIT(KSetTestStatusPsy, "Setting up TestStatusPsy");
+ INFO_PRINTF1(KSetTestStatusPsy);
+
+ SetupPsyL(iUidTestStatusPsy);
+
+ TPositionModuleStatusEvent statusEvent2;
+ statusEvent2.SetRequestedEvents(TPositionModuleStatusEvent::EEventDeviceStatus);
+ TRequestStatus status2 = KErrNone;
+ RPositionServer client2;
+ CleanupClosePushL(client2);
+ TInt err = client2.Connect();
+ _LIT(KConnectError, "TP18 Unable to open connection to Epos, return code %d");
+ AssertTrueL(err == KErrNone, KConnectError, err);
+
+ // Synchronous request to start server.
+ ConnectL();
+
+ // 1. Request to be notified about Module Status Events.
+ TPositionModuleStatusEvent statusEvent;
+ TRequestStatus status = KErrNone;
+
+ // Open a subsession to PSY.1
+ _LIT(KOpenPSY, "Calling OpenPositionerByName");
+ INFO_PRINTF1(KOpenPSY);
+ err = OpenPositionerByName(iUidTestStatusPsy);
+ _LIT(KErrOpen, "1. Error when opening subsession to PSY , error code = %d");
+ AssertTrueL(err == KErrNone, KErrOpen, err);
+
+
+ for(TInt i = 0; i < (KNrOfDeviceStatusChanges - 1); i++) //Iterate through different device statuses. Skip first and last
+ {
+ RequestWaitAndLogEventL(TPositionModuleStatusEvent::EEventDeviceStatus);
+ }
+
+ RequestWaitAndLogEventL(TPositionModuleStatusEvent::EEventDataQualityStatus); //Test to be notified about data quality changes
+
+ // Renew request before proceeding
+ statusEvent.SetRequestedEvents(TPositionModuleStatusEvent::EEventDeviceStatus);
+ iPosServer.NotifyModuleStatusEvent(statusEvent, status, iUidTestStatusPsy);
+
+ // 2. Disable PSY1.
+ CPosModules* db = CPosModules::OpenL();
+ CleanupStack::PushL(db);
+ CPosModuleUpdate* moduleUpdate = CPosModuleUpdate::NewLC();
+
+ moduleUpdate->SetUpdateAvailability(EFalse);
+ db->UpdateModuleL(iUidTestStatusPsy, *moduleUpdate);
+ _LIT(KWaitStatus, "Waiting for status after UpdateModuleL1");
+ INFO_PRINTF1(KWaitStatus);
+ User::WaitForRequest(status);
+
+ _LIT(KWait, "Error when request completed, error code = %d");
+ iExpectedStatus.SetDeviceStatus(TPositionModuleStatus::EDeviceDisabled);
+ iExpectedStatus.SetDataQualityStatus(TPositionModuleStatus::EDataQualityNormal);
+
+ TPositionModuleStatus getStatus;
+ statusEvent.GetModuleStatus(getStatus);
+
+ if (iExpectedStatus.DeviceStatus() != getStatus.DeviceStatus() ||
+ iExpectedStatus.DataQualityStatus() != getStatus.DataQualityStatus())
+ {
+ TBuf<100> buf;
+ if (iExpectedStatus.DeviceStatus() != getStatus.DeviceStatus())
+ {
+ _LIT(KError, "Status is not correct, Status returned %d Status expected %d");
+ buf.Format(KError, getStatus.DeviceStatus(), iExpectedStatus.DeviceStatus());
+ LogErrorAndLeaveL(buf);
+ }
+ else
+ {
+ _LIT(KError , "Quality is not correct, Quality returned %d Quality expected");
+ buf.Format(KError, getStatus.DataQualityStatus(), iExpectedStatus.DataQualityStatus());
+ LogErrorAndLeaveL(KError);
+ }
+ }
+
+ // 3. Renew request
+ iPosServer.NotifyModuleStatusEvent(statusEvent, status, iUidTestStatusPsy);
+ _LIT(KNotifyModuleStatusEvent, "Called NotifyModuleStatusEvent");
+ INFO_PRINTF1(KNotifyModuleStatusEvent);
+
+ // 4. Enable PSY1
+ moduleUpdate->SetUpdateAvailability(ETrue);
+ db->UpdateModuleL(iUidTestStatusPsy, *moduleUpdate);
+ _LIT(KWaitUpdateModuleL2, "Waiting for status after UpdateModuleL2");
+ INFO_PRINTF1(KWaitUpdateModuleL2);
+
+ User::WaitForRequest(status);
+ AssertTrueL(status.Int() == KErrNone, KWait, status.Int());
+
+ // 5. Renew request
+ iPosServer.NotifyModuleStatusEvent(statusEvent, status, iUidTestStatusPsy);
+ client2.NotifyModuleStatusEvent(statusEvent2, status2, iUidMultiPsy);
+
+ // 7. Disable PSY1
+ _LIT(KDisable, "Disabling TestStatusPsy");
+ INFO_PRINTF1(KDisable);
+ moduleUpdate->SetUpdateAvailability(EFalse);
+ db->UpdateModuleL(iUidTestStatusPsy, *moduleUpdate);
+
+ // 9. Enable PSY2
+ _LIT(KEnable, "Enabling MultiPsy");
+ INFO_PRINTF1(KEnable);
+ moduleUpdate->SetUpdateAvailability(ETrue);
+ db->UpdateModuleL(iUidMultiPsy, *moduleUpdate);
+
+ _LIT(KStatus, "Waiting for status & status2");
+ INFO_PRINTF1(KStatus);
+ User::WaitForRequest(status, status2);
+ if (status == KRequestPending)
+ {
+ User::WaitForRequest(status);
+ }
+ else
+ {
+ User::WaitForRequest(status2);
+ }
+
+
+ AssertTrueL(status.Int() == KErrNone, KWait, status.Int());
+ AssertTrueL(status2.Int() == KErrNone, KWait, status2.Int());
+
+ // 10. Renew request for all PSYs
+ iPosServer.NotifyModuleStatusEvent(statusEvent, status, iUidTestStatusPsy);
+
+ // 11. Enable PSY1
+ moduleUpdate->SetUpdateAvailability(ETrue);
+ db->UpdateModuleL(iUidTestStatusPsy, *moduleUpdate);
+ _LIT(KWaitUpdateModuleL3, "Waiting for status after UpdateModuleL3");
+ INFO_PRINTF1(KWaitUpdateModuleL3);
+
+ User::WaitForRequest(status);
+ AssertTrueL(status.Int() == KErrNone, KWait, status.Int());
+
+ // Open a subsession to PSY.1
+ err = iPositioner2.Open(iPosServer, iUidTestStatusPsy);
+ _LIT(KErrOpenOther, "7. Error when opening subsession to PSY , error code = %d");
+ AssertTrueL(err == KErrNone, KErrOpenOther, err);
+
+ User::After(10000000); //wait for all psy event to timeout
+ // Renew request for all PSYs
+ iPosServer.NotifyModuleStatusEvent(statusEvent, status);
+ User::After(1000000);
+ // 14. Close subsession to PSY1. All events execept close event has happen
+ iPositioner2.Close();
+ _LIT(KStatusClose, "Waiting for status after Close");
+ INFO_PRINTF1(KStatusClose);
+
+ User::WaitForRequest(status);
+ err = status.Int();
+ _LIT(KStatusErr, "status: %d");
+ INFO_PRINTF2(KStatusErr, err);
+ AssertTrueL(err == KErrNone, KWait, err);
+
+
+ // 15. Renew request for PSY1
+ iPosServer.NotifyModuleStatusEvent(statusEvent, status, iUidTestStatusPsy);
+
+ User::After(600000);
+ // 16. Cancel request
+ TInt cancelErr = iPosServer.CancelRequest(EPositionServerNotifyModuleStatusEvent);
+ _LIT(KCancel, "7. Error canceling request, error code = %d");
+ AssertTrueL(cancelErr == KErrNone, KCancel, cancelErr);
+ _LIT(KStatusCancelRequest, "Waiting for status after CancelRequest");
+ INFO_PRINTF1(KStatusCancelRequest);
+
+ User::WaitForRequest(status);
+ AssertTrueL(status.Int() == KErrCancel, KCancel, status.Int());
+
+ // 17. Cancel request again
+ cancelErr = iPosServer.CancelRequest(EPositionServerNotifyModuleStatusEvent);
+ AssertTrueL(cancelErr == KErrNotFound, KCancel, cancelErr);
+
+ // 18. Request for non-existing PSY.
+ _LIT(KNonExistingPSY, "Request for non-existing PSY");
+ INFO_PRINTF1(KNonExistingPSY);
+ TUid aNonExistingUid;
+ aNonExistingUid.iUid = KUidNonExistingPsy;
+ iPosServer.NotifyModuleStatusEvent(statusEvent, status, aNonExistingUid);
+ _LIT(KStatusWaiting, "Waiting for status");
+ INFO_PRINTF1(KStatusWaiting);
+
+ User::WaitForRequest(status);
+ AssertTrueL(status.Int() == KErrNotFound, KWait, status.Int());
+
+
+ CleanupStack::PopAndDestroy(moduleUpdate);
+ CleanupStack::PopAndDestroy(db);
+ CleanupStack::PopAndDestroy(&client2);
+
+ _LIT(KClosePositioner, "Calling ClosePositioner");
+ INFO_PRINTF1(KClosePositioner);
+ ClosePositioner();
+
+ Disconnect();
+ }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp189::CheckModuleStatus
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp189::RequestWaitAndLogEventL(const TInt aEventToListenFor)
+ {
+ TPositionModuleStatusEvent statusEvent;
+ TRequestStatus status = KErrNone;
+
+ if(aEventToListenFor == TPositionModuleStatusEvent::EEventDataQualityStatus)
+ {
+ statusEvent.SetRequestedEvents(TPositionModuleStatusEvent::EEventDataQualityStatus);
+ }
+ else
+ {
+ statusEvent.SetRequestedEvents(TPositionModuleStatusEvent::EEventDeviceStatus);
+ }
+
+ // Renew request
+ iPosServer.NotifyModuleStatusEvent(statusEvent, status, iUidTestStatusPsy);
+
+ User::WaitForRequest(status);
+ _LIT(KErrLoopOpen, "Error in loop when opening subsession to PSY , error code = %d");
+ AssertTrueL(status.Int() == KErrNone, KErrLoopOpen, status.Int());
+
+ // Get status information for PSY.
+ TPositionModuleStatus moduleStatus = TPositionModuleStatus();
+ TInt err = iPosServer.GetModuleStatus(moduleStatus, iUidTestStatusPsy);
+ _LIT(KGet, "Error when getting module status from PSY , error code = %d");
+ AssertTrueL(err == KErrNone, KGet, err);
+ CheckModuleStatusL(moduleStatus);
+ }
+// ---------------------------------------------------------
+// CT_LbsClientPosTp189::CheckModuleStatus
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp189::CheckModuleStatusL(const TPositionModuleStatus& aStatus , const TBool /*aCheckStatus*/)
+ {
+ TBuf<KMaxMessageSize> buf;
+ _LIT(KStatus,"Checking module status");
+ INFO_PRINTF1(KStatus);
+ _LIT(KErrBoundary, "The value on status/quaity is out of range");
+
+ _LIT(KDevSta, "Device Status = %d");
+ TInt status = aStatus.DeviceStatus();
+ buf.Format(KDevSta, status);
+ INFO_PRINTF1(buf);
+ buf.Zero();
+ //check that status value is not out of range
+ switch(status)
+ {
+ case TPositionModuleStatus::EDeviceUnknown:
+ case TPositionModuleStatus::EDeviceError:
+ case TPositionModuleStatus::EDeviceInitialising:
+ case TPositionModuleStatus::EDeviceStandBy:
+ case TPositionModuleStatus::EDeviceReady:
+ case TPositionModuleStatus::EDeviceActive:
+ case TPositionModuleStatus::EDeviceInactive: //the psy should not be able to report this
+ break;
+ case TPositionModuleStatus::EDeviceDisabled: //the psy should not be able to report this
+ default:
+ LogErrorAndLeaveL(KErrBoundary);
+ }
+
+
+
+ _LIT(KDatQual, "Data Quality Status = %d");
+ TInt quality = aStatus.DataQualityStatus();
+ buf.Format(KDatQual, quality);
+ INFO_PRINTF1(buf);
+ buf.Zero();
+ //check that qauality value is not out of range
+ switch(quality)
+ {
+ case TPositionModuleStatus::EDataQualityUnknown:
+ case TPositionModuleStatus::EDataQualityLoss:
+ case TPositionModuleStatus::EDataQualityPartial:
+ case TPositionModuleStatus::EDataQualityNormal:
+ break;
+ default:
+ LogErrorAndLeaveL(KErrBoundary);
+ }
+ }
+
+// End of file