lbs/lbsclient/src/ctlbsclientperiodictester.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lbs/lbsclient/src/ctlbsclientperiodictester.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,457 @@
+// 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 FILES
+#include "ctlbsclientperiodictester.h"
+#include "ctlbsclientlog.h"
+
+// CONSTANTS
+const TInt KSmallestUpdateIntervalToLog = 4000000; //2000000
+const TInt KMilliSecondTolerance = 2500000; //One second
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPeriodicTester::CPeriodicTester
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CT_LbsClientPeriodicTester::CT_LbsClientPeriodicTester() : CActive(CActive::EPriorityHigh), iError(EFalse), iErrorCode(KErrNone)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPeriodicTester::ConstructL
+//
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::ConstructL(
+	TTimeIntervalMicroSeconds aInterval, 
+	const TDesC& aServiceName, 
+	CT_LbsClientLog* aLog,
+	TUid aUid,
+	TInt aNumberOfRuns)
+    {
+    iLog = aLog;
+	iName = aServiceName;
+	iNumberOfRuns = aNumberOfRuns;
+	iInterval = aInterval;
+	iUid = aUid;
+	iNumberOfUpdates = 0;
+    iPrematureChangeOfParameters = EFalse;
+    iCanceledRequest = EFalse;
+    iCancelRequest = EFalse;
+    iWriteToLog = ETrue; //EFalse
+	iRecentTime = TTime(0);
+	iPositionInfo = TPositionInfo();
+
+	_LIT(KConnectErr, "Error when connecing to EPos server,  %d");
+	TInt err = iPosServer.Connect();
+	AssertTrueL(err == KErrNone, KConnectErr, err);
+
+	_LIT(KOpenErr, "Error when opening positioner,  %d");
+	err = iPositioner.Open(iPosServer, aUid);
+	AssertTrueL(err == KErrNone, KOpenErr, err);
+
+	TPositionUpdateOptions posOption;
+	posOption.SetUpdateInterval(aInterval);
+	
+	_LIT(KUpdateErr, "Error when setting update interval,  %d");
+	err = iPositioner.SetUpdateOptions(posOption);
+	AssertTrueL(err == KErrNone, KUpdateErr, err);
+
+	iPositioner.SetRequestor(CRequestor::ERequestorService,
+							 CRequestor::EFormatApplication, aServiceName);
+	
+	CActiveScheduler::Add(this);
+	}
+
+// -----------------------------------------------------------------------------
+// CPeriodicTester::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CT_LbsClientPeriodicTester* CT_LbsClientPeriodicTester::NewL(
+	TTimeIntervalMicroSeconds aInterval,
+	const TDesC& aServiceName,
+	CT_LbsClientLog* aLog,
+	TUid aUid,
+	TInt aNumberOfRuns)
+    {
+    CT_LbsClientPeriodicTester* self = new( ELeave ) CT_LbsClientPeriodicTester;
+    
+    CleanupStack::PushL(self);
+    self->ConstructL(aInterval, aServiceName, aLog, aUid, aNumberOfRuns);
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+    
+// Destructor
+CT_LbsClientPeriodicTester::~CT_LbsClientPeriodicTester()
+    {
+    iPositioner.Close();
+	iPosServer.Close();
+	
+	iLog = NULL;
+	}
+
+// -----------------------------------------------------------------------------
+// CPeriodicTester::RunL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::RunL()
+    {
+	iNumberOfUpdates++;
+    //User::Leave(-10); //used for testing the test code
+	TBuf<175> buf;
+	_LIT(KStatus,"Status invalid in RunL, status = %d");
+	buf.Format(KStatus, iStatus.Int());
+	AssertTrueL((iStatus == KErrNone || iStatus == KPositionQualityLoss || 
+                 iStatus == KErrCancel), buf, iStatus.Int());
+	if(iNumberOfUpdates <= iNumberOfRuns)
+		{
+		_LIT(KTime, "%F%H:%F%T:%F%S:%F%*C3");
+		TBuf<100> time;
+		TTime now;
+		now.UniversalTime();
+		TInt difference;
+		TInt smallestIntervalToLog = KSmallestUpdateIntervalToLog;
+		if(iNumberOfUpdates == 1)
+			{
+            difference = I64LOW(now.MicroSecondsFrom(iRecentTime).Int64());
+			}
+		else
+			{
+			difference = I64LOW(now.MicroSecondsFrom(iRecentTime).Int64());
+			}
+		
+        _LIT(KInterval, "The interval is %d, and the difference is %d");
+        TBuf<150> buf; 
+        buf.Format(KInterval,iInterval.Int64(), difference); 
+        iLog->Put (buf);
+		if((iInterval.Int64() > smallestIntervalToLog) && (I64LOW(iRecentTime.Int64()) != 0))
+			{
+			_LIT(KTimeErr, "ERROR: Time difference greater than tolerated interval, time difference = %d");
+			AssertTrueL(difference < (iInterval.Int64() +  KMilliSecondTolerance), KTimeErr, I64LOW(now.MicroSecondsFrom(iRecentTime).Int64()));
+            
+            if(difference < 0)
+				{
+                #ifdef __WINS__
+                _LIT(KEarlyErr, "ERROR: Negative time difference on WINS greater than 0.4s");
+                AssertTrueL((KToleratedEarliness > -(difference)), KEarlyErr, KErrTotalLossOfPrecision);
+                #else
+                _LIT(KEarlyErr, "ERROR: Time difference negative on target");
+				iLog->Put(KEarlyErr);
+				User::LeaveIfError(KErrTotalLossOfPrecision);
+                #endif
+
+				}
+			}
+
+		if(iWriteToLog && ((iNumberOfUpdates % KTracePeriod) == 0))
+            {
+		    now.UniversalTime();
+		    now.FormatL(time, KTime);
+    		_LIT(KLog, "Client got update no. %d at %S,  Time-diff = %d, Status = ");
+    		TBuf<175> buf;
+    		buf.Format(KLog, iNumberOfUpdates, &time, difference);
+    		buf.AppendNum(iStatus.Int());
+    		buf.Append(iName);
+    		_LIT(KNrOfRuns, "Nr of runs = ");
+            buf.Append(KNrOfRuns);
+            buf.AppendNum(iNumberOfRuns);
+            iLog->Put(buf);
+            }
+		
+		if(iPrematureChangeOfParameters)
+			{
+			iInterval = TTimeIntervalMicroSeconds(2000000);
+			User::After(I64LOW(iInterval.Int64()));
+	
+			TPositionUpdateOptions posOption;
+			posOption.SetUpdateInterval(iInterval);
+	
+			TInt err = iPositioner.SetUpdateOptions(posOption);
+			_LIT(KChange, "ERROR: Got error code when setting update options prematurely in ChangeTestParameters");
+			AssertTrueL(err == KErrNone, KChange, err);
+			iPrematureChangeOfParameters = EFalse;
+			}
+		
+		RequestNotification();
+            
+        if(iCancelRequest)
+			{
+			User::After(3000000);
+			iPositioner.CancelRequest(EPositionerNotifyPositionUpdate);
+			iCancelRequest = EFalse;
+            iCanceledRequest = ETrue;
+			}
+     
+        if(iCanceledRequest)
+            {
+            iCanceledRequest = EFalse;
+            _LIT(KCancelErr, "ERROR: Status was not KErrCancel after CancelRequest");
+			AssertTrueL(iStatus.Int() == KErrCancel, KCancelErr, KErrCancel);
+            }
+        }
+	else 
+		{
+		CActiveScheduler::Stop();
+		}
+		
+	}
+
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::RunError
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CT_LbsClientPeriodicTester::RunError(TInt aError)
+    {
+    iError = ETrue;
+    iErrorCode = aError;
+    CActiveScheduler::Stop();
+    _LIT(KErrorInRunL, "Error code in RunError is, %d");
+    TBuf<100> buf;
+    buf.Format(KErrorInRunL, aError);
+    iLog -> Put(buf);
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::IsCompletedOK
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CT_LbsClientPeriodicTester::IsCompletedOK()
+    {
+    return !iError;
+    }
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::GetError
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CT_LbsClientPeriodicTester::GetError()
+    {   
+    return iErrorCode;
+    }
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::ChangeTestParametersL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::ChangeTestParametersL(TTimeIntervalMicroSeconds aInterval, TInt aNumberOfRuns)
+	{
+	iNumberOfRuns = aNumberOfRuns;
+	iNumberOfUpdates = 0;
+	iInterval = aInterval;
+	iRecentTime = TTime(0);
+    iError = EFalse;
+    iErrorCode = KErrNone;
+	
+	TPositionUpdateOptions posOption;
+	posOption.SetUpdateInterval(aInterval);
+	
+	TInt err = iPositioner.SetUpdateOptions(posOption);
+	_LIT(KChange, "ERROR: When setting update options in ChangeTestParameters, err: %d");
+	AssertTrueL(err == KErrNone, KChange, err);
+	}
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::ChangeRequestorInformation
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::ChangeRequestorInformation(const TDesC& aServiceName)
+	{
+	iPositioner.SetRequestor(CRequestor::ERequestorService,
+							 CRequestor::EFormatApplication, aServiceName);
+	}
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::ClosePositioner
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::ClosePositioner()
+	{
+	iPositioner.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::OpenPositionerL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::OpenPositionerL(const TDesC& aServiceName)
+	{
+	_LIT(KOpenErr, "Error when opening positioner,  %d");
+	TInt err = iPositioner.Open(iPosServer, iUid);
+	AssertTrueL(err == KErrNone, KOpenErr, err);
+	
+	iPositioner.SetRequestor(CRequestor::ERequestorService,
+						 CRequestor::EFormatApplication, aServiceName);
+	}
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::SetMaxAgeL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::SetMaxAgeL(TTimeIntervalMicroSeconds aInterval)
+	{
+	TPositionUpdateOptions posOption;
+	posOption.SetUpdateInterval(iInterval);
+	posOption.SetMaxUpdateAge(aInterval);
+
+	TInt err = iPositioner.SetUpdateOptions(posOption);
+	_LIT(KChange, "ERROR: When setting max age in SetMaxAge, err: %d");
+	AssertTrueL(err == KErrNone, KChange, err);	
+	}
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::SetPartialUpdateL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::SetPartialUpdateL(TBool aUpdateOption)
+	{
+	TPositionUpdateOptions posOption;
+	posOption.SetUpdateInterval(iInterval);
+	posOption.SetAcceptPartialUpdates(aUpdateOption);
+
+	TInt err = iPositioner.SetUpdateOptions(posOption);
+	_LIT(KChange, "ERROR: When setting partial update in SetPartialUpdate, err: %d");
+	AssertTrueL(err == KErrNone, KChange, err);	
+	}
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::SetTimeOutL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::SetTimeOutL(TTimeIntervalMicroSeconds aInterval)
+	{
+	TPositionUpdateOptions posOption;
+	posOption.SetUpdateInterval(iInterval);
+	posOption.SetUpdateTimeOut(aInterval);
+
+	TInt err = iPositioner.SetUpdateOptions(posOption);
+	_LIT(KChange, "ERROR: When setting timeout in SetTimeOut");
+	AssertTrueL(err == KErrNone, KChange, err);	
+	}
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::SetChangeParametersPrematurely
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::SetChangeParametersPrematurely(TBool aCondition)
+	{
+	iPrematureChangeOfParameters = aCondition;
+	}
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::CancelRequest
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::CancelRequest()
+	{
+	iCancelRequest= ETrue;
+    iCanceledRequest = EFalse;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::RequestNotification
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::RequestNotification()
+	{
+    TTime now;
+    now.UniversalTime();
+    iRecentTime = now;
+	iPositioner.NotifyPositionUpdate(iPositionInfo, iStatus);
+	SetActive();
+	}
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::RequestNotification
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::GetPosition(TPositionInfo& aPosInfo)
+    {
+    aPosInfo = iPositionInfo;
+    }
+
+// -----------------------------------------------------------------------------
+// CT_LbsClientPeriodicTester::DoCancel
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::DoCancel()
+	{
+	}
+
+// ---------------------------------------------------------
+// CT_LbsClientPeriodicTester::AssertTrueL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPeriodicTester::AssertTrueL(TBool aCondition, const TDesC& aErrorMsg, TInt aErrorCode)
+  {
+  if (!aCondition)
+		{
+		TBuf<100> buf;
+		buf.Format(aErrorMsg, aErrorCode);
+		iLog->Put(buf);
+        User::Leave(aErrorCode);
+		}
+  }
+
+//  End of File