--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationomasuplpostester/epos_comasuplpostestermodulecfg/src/epos_comasuplsessiontest.cpp Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,650 @@
+/*
+* Copyright (c) 2005-2006 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: Tests GetSuplInfoL in various scenarios.
+*
+*/
+
+#include <epos_comasuplposhandlerbase.h>
+#include <epos_comasuplpossessionbase.h>
+#include <epos_comasuplinforequestlist.h>
+#include <epos_comasuplinforequestlist.h>
+#include <epos_comasuplreqasstdata.h>
+#include <epos_comasuplsetcapabilities.h>
+#include <epos_comasuplposition.h>
+#include <epos_comasuplpospayload.h>
+#include <epos_comasuplvelocity.h>
+#include <epos_eomasuplposerrors.h>
+#include <ecom/ecom.h>
+
+#include "epos_comasuplsessiontest.h"
+#include "epos_comasuplpostesterlogger.h"
+#include "epos_comasupltesthandler.h"
+#include "epos_comasuplgetsuplinfomanager.h"
+
+/** Constant used for logging information about test*/
+_LIT8(KSessionTestComplete, "Info: Session Test Complete.");
+
+/** Constant used for logging information about test*/
+_LIT8(KSessionTestAborted, "Error: Session Test Aborted");
+
+/** Constant used for logging information about test*/
+_LIT8(KReqBeforeSessionInitialize, "Info: Requesting GetSuplInfo before \
+Initializing POS session.");
+
+/** Constant used for logging information about test*/
+_LIT8(KPositionReqBeforeSessionInitialize, "Info: Requesting GetPositionL\
+ before initializing POS session.");
+
+/** Constant used for logging information about test*/
+_LIT8(KGetSuplInfoSessionEndRequest, "Info: GetPositionL requested after \
+Session End.");
+
+/** Constant used for logging information about test*/
+_LIT8(KGetSuplInfoWarning, "Warning: POS session is Not initialized.\
+GetSuplInfoL() completed with KErrNone.");
+
+/** Constant used for logging information about test*/
+_LIT8(KPosInactiveInfo, "Info: GetSuplInfoL() completed with status \
+KErrOMASuplPosInActive");
+
+/** Constant used for logging information about test*/
+_LIT8(KGetSuplInfoInfo, "Info: GetSuplInfoL() completed with status \
+KErrNone.");
+
+/** Constant used for logging information about test*/
+_LIT8(KGetPositionInfo, "Info: GetPositionL() completed with status ");
+
+/** Constant used for logging information about test*/
+_LIT8(KGetPositionWarn, "Warning: GetPositionL() completed with status ");
+
+/** Constant used for logging information about test*/
+_LIT8(KGetSuplError, "Error: GetSuplInfoL() completed with status ");
+
+/** Constant used for logging information about test*/
+_LIT8(KGetPositionError, "Error: GetPositionL() completed with status ");
+
+/** Constant used for logging information about test*/
+_LIT8(KGetPositionInfoErr, "Error: Could not provide value to some \
+mandatory fields. GetPositionL() completed with status ");
+
+/** Constant used for logging information about test*/
+_LIT8(KRequestAfterSessionInit, "Info: Requesting GetSuplInfo after \
+Initializing POS session.");
+
+/** Constant used for logging information about test*/
+_LIT8(KGetPositionSessionInitRequest, "Info: Requesting for GetPositionL().\
+ Session is initialized.");
+
+/** Constant used for logging information about test*/
+_LIT8(KPositionEndSessionRequest, "Info: Requesting for GetPositionL() \
+ after ending POS Session.");
+
+/** Constant used for logging information about test*/
+_LIT8(KEndSession, "Info: Ending POS Session.");
+
+/** Constant used for logging information about test*/
+_LIT8(KEndSessionComplete, "Info: Ending POS Session complete.");
+
+/** Constant used for logging information about test*/
+_LIT8(KExistingSessionTest, "Info: Running test on an existing session.");
+
+// ---------------------------------------------------------------------------
+// Named constructor
+// ---------------------------------------------------------------------------
+//
+COMASuplSessionTest* COMASuplSessionTest::NewL(
+ COMASuplPosHandlerBase& aPosHandler
+ , COMASuplPosTesterCategory* aCallBack )
+ {
+ COMASuplSessionTest* self = new( ELeave )COMASuplSessionTest(
+ aPosHandler, aCallBack );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+COMASuplSessionTest::COMASuplSessionTest(
+ COMASuplPosHandlerBase& aPosHandler
+ , COMASuplPosTesterCategory* aCallBack )
+ :COMASuplGetSuplInfoManager(aPosHandler, aCallBack)
+ {
+ iSessionState = ESessionUninitialized;
+ iExistingSessionTestDone = EFalse;
+ CActiveScheduler::Add( this );
+ }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::ConstructL()
+ {
+ iRequestList = COMASuplInfoRequestList::NewL();
+ iPosition = COMASuplPosition::NewL();
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+COMASuplSessionTest::~COMASuplSessionTest()
+ {
+ delete iPosition;
+ }
+
+// ---------------------------------------------------------------------------
+// This function is called by test handler. It is entry point of execution
+// of a test case.
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::StartTestingL()
+ {
+ if(iCallBack)
+ {
+ iLogger->WriteTestHeader(KSessionTest, iTestNo);
+ }
+ iNextInSeq = EStartTest;
+ __ASSERT_ALWAYS(!IsActive(),User::Panic(KPanicSetActive, KErrAlreadyExists));
+ DummyRequest(iStatus);
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// Handles an active object's request completion event.
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::RunL()
+ {
+ switch( iNextInSeq )
+ {
+ case EStartTest:
+ {
+ iLogger->GetRequestStartTime();
+ TRAPD( err, iSessionBase = iPosHandler.CreateNewSessionL( this ) );
+ if( KErrNone != err )
+ {
+ iError++;
+ iLogger->WriteLine(KCreatingSessionFail, iTestNo);
+ User::Leave(err);
+ }
+ iInfo++;
+ iLogger->LogExecutionTime(KExecCreateNewSessionL);
+ iInfo++;
+ iLogger->WriteLine(KSessionCreated, iTestNo);
+ __ASSERT_ALWAYS(!IsActive(),User::Panic(KPanicSetActive, KErrAlreadyExists));
+ iNextInSeq = EGetSuplInfoSessionNotInitRequest;
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EGetSuplInfoSessionNotInitRequest:
+ {
+ iInfo++;
+ iLogger->WriteLine(KReqBeforeSessionInitialize, iTestNo);
+ iNextInSeq = EGetSuplInfoSessionNotInitRequestComplete;
+ GetSuplInfoRequestL();
+ break;
+ }
+ case EGetSuplInfoSessionNotInitRequestComplete:
+ {
+ iNextInSeq = EGetPositionSessionNotInitRequest;
+ GetSuplInfoRequestCompleteL();
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EGetPositionSessionNotInitRequest:
+ {
+ iNextInSeq = EGetPositionSessionNotInitRequestComplete;
+ iInfo++;
+ iLogger->WriteLine(KPositionReqBeforeSessionInitialize, iTestNo);
+ GetPositionRequestL();
+ break;
+ }
+ case EGetPositionSessionNotInitRequestComplete:
+ {
+ iNextInSeq = EInitializeSessionRequest;
+ GetPositionRequestComplete();
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EInitializeSessionRequest:
+ {
+ iNextInSeq = EinitializeSessionRequestComplete;
+ iInfo++;
+ iLogger->WriteLine(KInitializingSession, iTestNo);
+ InitializeSessionRequestL();
+ break;
+ }
+ case EinitializeSessionRequestComplete:
+ {
+ iNextInSeq = EGetSuplInfoSessionInitRequest;
+ InitializeSessionRequestCompleteL();
+ break;
+ }
+ case EGetSuplInfoSessionInitRequest:
+ {
+ iNextInSeq = EGetSuplInfoSessionInitRequestComplete;
+ //log "Info: Requesting for GetSuplInfoL(). Session is initialized."
+ iInfo++;
+ iLogger->WriteLine(KRequestAfterSessionInit, iTestNo);
+ GetSuplInfoRequestL();
+ break;
+ }
+ case EGetSuplInfoSessionInitRequestComplete:
+ {
+ iNextInSeq = EGetPositionSessionInitRequest;
+ GetSuplInfoRequestCompleteL();
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EGetPositionSessionInitRequest:
+ {
+ iNextInSeq = EGetPositionSessionInitRequestComplete;
+ iInfo++;
+ iLogger->WriteLine(KGetPositionSessionInitRequest, iTestNo);
+ GetPositionRequestL();
+ break;
+ }
+ case EGetPositionSessionInitRequestComplete:
+ {
+ iNextInSeq = EEndSessionRequest;
+ GetPositionRequestComplete();
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EEndSessionRequest:
+ {
+ iNextInSeq = EEndSessionRequestComplete;
+ //log "Info: Ending POS session."
+ iInfo++;
+ iLogger->WriteLine(KEndSession, iTestNo);
+ EndSession();
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EEndSessionRequestComplete:
+ {
+ iNextInSeq = EGetSuplInfoSessionEndRequest;
+ //log "Info: POS Session Ended."
+ iInfo++;
+ iLogger->WriteLine(KEndSessionComplete, iTestNo);
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EGetSuplInfoSessionEndRequest:
+ {
+ iNextInSeq = EGetSuplInfoSessionEndRequestComplete;
+ //log "Requesting for GetSuplInfoL(). Session is ended."
+ iInfo++;
+ iLogger->WriteLine(KGetSuplInfoSessionEndRequest, iTestNo);
+ GetSuplInfoRequestL();
+ break;
+ }
+ case EGetSuplInfoSessionEndRequestComplete:
+ {
+ iNextInSeq = EGetPositionSessionEndRequest;
+ GetSuplInfoRequestCompleteL();
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EGetPositionSessionEndRequest:
+ {
+ iNextInSeq = EGetPositionSessionEndRequestComplete;
+ iInfo++;
+ iLogger->WriteLine(KPositionEndSessionRequest, iTestNo);
+ GetPositionRequestL();
+ break;
+ }
+ case EGetPositionSessionEndRequestComplete:
+ {
+ iNextInSeq = EExistingSessionTest;
+ GetPositionRequestComplete();
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case EExistingSessionTest:
+ {
+ if(iExistingSessionTestDone)
+ {
+ iNextInSeq = ETestingComplete;
+ }
+ else
+ {
+ iExistingSessionTestDone = ETrue;
+ iInfo++;
+ iLogger->WriteLine(KExistingSessionTest, iTestNo);
+ iNextInSeq = EInitializeSessionRequest;
+ }
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ DummyRequest(iStatus);
+ SetActive();
+ break;
+ }
+ case ETestingComplete:
+ {
+ TestingComplete(KSessionTestComplete);
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Implements cancellation of an outstanding request.
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::DoCancel()
+ {
+ if(EGetSuplInfoSessionNotInitRequestComplete == iNextInSeq
+ || EGetSuplInfoSessionInitRequestComplete == iNextInSeq
+ ||EGetSuplInfoSessionEndRequestComplete == iNextInSeq)
+ {
+ //Cancel GetSuplInfoL()
+ iSessionBase->CancelSuplInfoRequest();
+ }
+ if(EGetPositionSessionNotInitRequestComplete == iNextInSeq
+ || EGetPositionSessionInitRequestComplete == iNextInSeq
+ || EGetPositionSessionEndRequestComplete == iNextInSeq)
+ {
+ // Cancel GetPositionL()
+ iSessionBase->CancelGetPosition();
+ }
+ if(EinitializeSessionRequestComplete == iNextInSeq)
+ {
+ //Cancel session initialization
+ iSessionBase->CancelInitialize();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Handles a leave occurring in the request completion event handler RunL().
+// ---------------------------------------------------------------------------
+//
+TInt COMASuplSessionTest::RunError( TInt aError )
+ {
+ if(EStartTest == iNextInSeq)
+ {
+ iError++;
+ iLogger->WriteStatus(KLeaveInCreateNewSession, aError, iTestNo);
+ }
+ else if(EGetSuplInfoSessionNotInitRequestComplete == iNextInSeq
+ || EGetSuplInfoSessionInitRequestComplete == iNextInSeq
+ ||EGetSuplInfoSessionEndRequestComplete == iNextInSeq)
+ {
+ //Cancel GetSuplInfoL()
+ iError++;
+ iLogger->WriteStatus(KLeaveInGetSuplInfo, aError, iTestNo);
+ }
+ else if(EGetPositionSessionNotInitRequestComplete == iNextInSeq
+ || EGetPositionSessionInitRequestComplete == iNextInSeq
+ || EGetPositionSessionEndRequestComplete == iNextInSeq)
+ {
+ // Cancel GetPositionL()
+ iError++;
+ iLogger->WriteStatus(KLeaveInGetPosition, aError, iTestNo);
+ }
+ else if(EinitializeSessionRequestComplete == iNextInSeq)
+ {
+ //Cancel session initialization
+ iError++;
+ iLogger->WriteStatus(KLeaveInSessionInit, aError, iTestNo);
+ }
+ TestingAborted(KSessionTestAborted);
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// Requests for GetSuplInfoL.
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::GetSuplInfoRequestL()
+ {
+ ResetLists();
+ TRAPD(err, CreateRequestListL());
+ if(KErrNone != err)
+ {
+ iError++;
+ iLogger->WriteStatus(KLeaveRequestListCreation(), err, iTestNo);
+ TestingAborted(KSessionTestAborted);
+ return;
+ }
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ iSessionBase->GetSuplInfoL(iRequestList, iStatus);
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// Logs the completion status of GetsuplinfoL.
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::GetSuplInfoRequestCompleteL()
+ {
+ TInt diff = -1;
+ if(!MatchLists(diff))
+ {
+ iError++;
+ iLogger->WriteStatus(KMatchError, diff, iTestNo, &KNULL());
+ }
+
+ switch (iStatus.Int())
+ {
+ case KErrNone:
+ {
+ if(ESessionInitialized == iSessionState)
+ {
+ //info
+ iInfo++;
+ iLogger->WriteLine(KGetSuplInfoInfo, iTestNo);
+ }
+ else
+ {
+ //warning
+ iWarning++;
+ iLogger->WriteLine(KGetSuplInfoWarning, iTestNo);
+ }
+ iLogger->LogRequestList(*iRequestList);
+ break;
+ }
+ case KErrOMASuplPosInActive:
+ {
+ if(ESessionInitialized == iSessionState)
+ {
+ //warning
+ iWarning++;
+ iLogger->WriteLine(_L8("Warning: GetSuplInfo completed with status KErrNone. Session is initialized."), iTestNo);
+ }
+ else
+ {
+ //info
+ iInfo++;
+ iLogger->WriteLine(KPosInactiveInfo, iTestNo);
+ }
+ break;
+ }
+ case KErrOMASuplParamNotSet:
+ {
+ //warning
+ iWarning++;
+ iLogger->WriteLine(_L8("Warning: Parameter not set."), iTestNo);
+ iLogger->LogRequestList(*iRequestList);
+ break;
+ }
+ default:
+ {
+ //Error
+ iWarning++;
+ iLogger->WriteStatus(KGetSuplError(), iStatus.Int(), iTestNo
+ , &KNULL());
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Initializes the POS session.
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::InitializeSessionRequestL()
+ {
+ __ASSERT_ALWAYS( !IsActive(), User::Panic(KPanicSetActive, 1));
+ // Set the status as session is initialized.
+ iSessionState = ESessionInitialized;
+ iSessionBase->InitializeL(iRequestID, iStatus);
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// Logs the completion status of session initialization.
+// Leaves if session initialization is not complete with KErrNone.
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::InitializeSessionRequestCompleteL()
+ {
+ if(iStatus != KErrNone)
+ {
+ iError++;
+ iLogger->WriteStatus(KError, iStatus.Int(), iTestNo, &KSessionInitResult());
+ TestingAborted(KSessionTestAborted);
+ return;
+ }
+ iInfo++;
+ iLogger->WriteLine(KSessionInitialized, iTestNo);
+ __ASSERT_ALWAYS(!IsActive(), User::Panic(KPanicSetActive, 1));
+ DummyRequest(iStatus);
+ SetActive();
+ }
+
+void COMASuplSessionTest::ResetPositionL()
+ {
+ delete iPosition;
+ iPosition = NULL;
+ iPosition = COMASuplPosition::NewL();
+ }
+// ---------------------------------------------------------------------------
+// Requests for GetPositionL().
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::GetPositionRequestL()
+ {
+ TRAPD(err, ResetPositionL());
+ if(KErrNone != err)
+ {
+ iError++;
+ iLogger->WriteStatus(KLeaveResettingPosition(), err, iTestNo);
+ TestingAborted(KSessionTestAborted);
+ return;
+ }
+ __ASSERT_ALWAYS(!IsActive(), User::Panic(KPanicSetActive, 1));
+ iSessionBase->GetPositionL(iStatus, iPosition);
+ SetActive();
+ }
+
+// ---------------------------------------------------------------------------
+// Logs the completion status of GetPositionL().
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::GetPositionRequestComplete()
+ {
+ TInt diff = -1;
+ if(!MatchLists(diff))
+ {
+ iError++;
+ iLogger->WriteStatus(KMatchError, diff, iTestNo, &KNULL());
+ }
+ switch (iStatus.Int())
+ {
+ case KErrNone:
+ {
+ if(iSessionState != ESessionInitialized)
+ {
+ //warning
+ iWarning++;
+ iLogger->WriteStatus(KGetPositionWarn, iStatus.Int()
+ , iTestNo, &KNULL());
+ }
+ else
+ {
+ iInfo++;
+ iLogger->WriteStatus(KGetPositionInfo, iStatus.Int()
+ , iTestNo, &KNULL());
+ }
+ break;
+ }
+ case KErrOMASuplPosInfo:
+ {
+ //Error
+ iError++;
+ iLogger->WriteStatus(KGetPositionInfoErr, iStatus.Int()
+ , iTestNo, &KNULL());
+ break;
+ }
+ case KErrOMASuplPosInActive:
+ {
+ if(iSessionState != ESessionInitialized)
+ {
+ //info
+ iInfo++;
+ iLogger->WriteStatus(KGetPositionInfo, iStatus.Int()
+ , iTestNo, &KNULL());
+ }
+ else
+ {
+ //warning
+ iWarning++;
+ iLogger->WriteStatus(KGetPositionWarn, iStatus.Int()
+ , iTestNo, &KNULL());
+ }
+ break;
+ }
+ default:
+ {
+ iError++;
+ iLogger->WriteStatus(KGetPositionError, iStatus.Int()
+ , iTestNo, &KNULL());
+ break;
+ }
+ }
+ iLogger->LogSuplPosition(iPosition);
+ }
+
+// ---------------------------------------------------------------------------
+// Ends a POS Session.
+// ---------------------------------------------------------------------------
+//
+void COMASuplSessionTest::EndSession()
+ {
+ __ASSERT_ALWAYS(!IsActive(), User::Panic(KPanicSetActive, 1));
+ iSessionState = ESessionEnded;
+ iSessionBase->SessionEnd();
+ }