// Copyright (c) 2005-2009 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:
// Example CTestStep derived implementation
//
//
/**
@file mtlr19Step.cpp
@internalTechnology
*/
#include "mtlr19Step.h"
#include "te_suplprotocolsuitedefs.h"
/**
Destructor
*/
Cmtlr19Step::~Cmtlr19Step()
{
}
/**
Constructor
*/
Cmtlr19Step::Cmtlr19Step()
{
SetTestStepName(Kmtlr19Step);
}
/**
@return - TVerdict code
Override of base class virtual
*/
TVerdict Cmtlr19Step::doTestStepPreambleL()
{
// Call base class method for pre test actions
CTe_suplprotocolSuiteStepBase::doTestStepPreambleL();
TLbsNetProtocolModuleParams param(*iGatewayObserver);
iModule = CSuplGatewayInterface::NewL(reinterpret_cast<TAny*>(¶m));
// components for generating incoming SMS SUPL INIT
iSuplPush = CLbsSuplPush::NewL(ELbsSuplPushChannelSMS, *this);
iSuplInitGenerator = CSuplInitGenerator::NewL();
return TestStepResult();
}
/** Perform Cmtlr19Step test step.
MT-LR - cancel after Privacy Response accepted, connection is set up and
SUPL POS INIT sent, but before first SUPL POS message is received.
Protocol Module should immediately send SUPL END with error code
indicating user has cancelled request.
@return TVerdict test result code
*/
TVerdict Cmtlr19Step::doTestStepL()
{
INFO_PRINTF1(_L("\t********************************************************************"));
INFO_PRINTF1(_L("\tMTLR - Cancel after POS INIT sent / before 1st POS Message received."));
INFO_PRINTF1(_L("\t********************************************************************"));
INFO_PRINTF1(_L("- START -"));
// Initiate MT-LR
// Generate received SUPL INIT message (test message content #0)
TPtr8 messagePtr(iReceiveBuffer.Des());
TInt err = iSuplInitGenerator->GenerateSuplInitL(0, messagePtr);
if (err != KErrNone)
{
SetTestStepResult(EFail);
return TestStepResult();
}
// Inject SUPL INIT using the SUPL Push API
INFO_PRINTF1(_L("\tLBS (SuplPush) -> OnSuplInit()"));
TLbsSuplPushRequestId reqId = 12345;
TPtrC8 message(messagePtr);
iSuplPush->SuplInit(reqId, message, 0);
// Check Gateway receives a Privacy request and Location Request (no method specified)
INFO_PRINTF1(_L("\tLBS <- ProcessLocationRequest()"));
if (EFail == CheckGatewayCallbackL(CSuplGatewayObserver::EProcessLocationRequest) ||
!iGatewayObserver->IsPrivReqReceived() ||
MLbsNetworkProtocolObserver::EServiceMobileTerminated != iGatewayObserver->LocType() )
{
SetTestStepResult(EFail);
return TestStepResult();
}
// LBS delivers privacy response
INFO_PRINTF1(_L("\tLBS -> PrivacyResponse (EPrivacyResponseAccepted)"));
CLbsNetworkProtocolBase::TLbsPrivacyResponse privacyResponse = CLbsNetworkProtocolBase::EPrivacyResponseAccepted;
iModule->RespondPrivacyRequest(iGatewayObserver->SessionIdValue(), privacyResponse, 0);
// Check Connection Manager receives a request for connecting
if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::EConnectReq))
{
SetTestStepResult(EFail);
return TestStepResult();
}
INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t ConnectionRequest -> NET"));
// Simulate the connection is up (inject that event)
INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t Connected <- NET"));
iNetworkObserver->InjectConnectedIndication(iNetworkObserver->SessionId());
// LBS Requests assistance data
INFO_PRINTF1(_L("\tLBS -> RequestAssistanceData ()"));
TLbsAsistanceDataGroup dataRequestMask1 = EAssistanceDataBadSatList;
TLbsNetSessionIdArray dummyIdArray;
iModule->RequestAssistanceData(dataRequestMask1, dummyIdArray);
// Check Connection Manager receives a request to send a SUPL POS INIT
// with the assistance data mask requested by the gateway
if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::ESendSuplPosInitSendReq))
{
SetTestStepResult(EFail);
return TestStepResult();
}
INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL POS INIT -> NET"));
// USER CANCELS...
// Inject a RespondLocationRequest() with aReason == KErrCancel
INFO_PRINTF1(_L("\tLBS -> RespondLocationRequest (KErrCancel)"));
TPositionInfo mobilePosInfo;
iModule->RespondLocationRequest(iGatewayObserver->SessionIdValue(), KErrCancel, mobilePosInfo);
// Check the Connection Manager receives a request to send a SUPL END
if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::ESendSuplEndSendReq))
{
SetTestStepResult(EFail);
return TestStepResult();
}
INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t SUPL END -> NET"));
// Check Connection Manager receives a disconnection request
if (EFail == CheckNetworkCallbackL(CSuplNetworkTestObserver::EDisconnectReq))
{
SetTestStepResult(EFail);
return TestStepResult();
}
INFO_PRINTF1(_L("\t\t\t\t\t\t\t\t DisconnectRequest -> NET"));
// Check if more observer activity takes place
if (iGatewayObserver->IsMoreObserverActivity() ||
iNetworkObserver->IsMoreObserverActivity())
{
SetTestStepResult(EFail);
return TestStepResult();
}
INFO_PRINTF1(_L("- END -"));
SetTestStepResult(EPass);
return TestStepResult();
}
/**
* @return - TVerdict code
* Override of base class virtual
*/
TVerdict Cmtlr19Step::doTestStepPostambleL()
{
delete iModule;
delete iSuplPush;
delete iSuplInitGenerator;
// Call base class method for post test actions
CTe_suplprotocolSuiteStepBase::doTestStepPostambleL();
return TestStepResult();
}
/**
Overrides the pure virtual MLbsSuplPushObserver::OnSuplInitComplete.
Receives the result of the message sending.
@param aError [In] The error code or KErrNone if successful.
@see MTe_LbsSuplSmsTriggerSenderObserver::OnMessageSent
@see CTe_LbsSuplSmsTriggerSender::SendMessage
*/
void Cmtlr19Step::OnSuplInitComplete(TLbsSuplPushChannel /*aChannel*/, TLbsSuplPushRequestId /*aReqId*/, TInt aError, TInt /*aReserved*/)
{
iSmsSendError = aError;
if (iSmsSendError != KErrNone)
{
User::Invariant();
}
}