--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivitylayer/isimessage/isimessage_dll/internal/test/src/cisimsgbasetest.cpp Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,616 @@
+/*
+* Copyright (c) 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 "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:
+*
+*/
+
+
+// INCLUDES
+#include <pn_obj_auto.h> // For PN_OBJ_EPOC_MONSERV_SERV
+#include <isimsg.h> // For CIsiMsg
+#include <isi_sos_bluetooth.h> // For CBtIsiMsg
+#include <isi_call.h> // For CCallIsiMsg
+#include <isi_sim.h> // For CSimIsiMsg
+#include <isi_tone.h> // For CToneIsiMsg
+#include <f32file.h> // For RDebug
+#include "tisimsgerrcodestest.h" // For IsiMsgTestErrors
+#include "tisimsghexstest.h" // For 0x00 etc..
+#include "ctestlogger.h" // For CTestLogger
+#include "tisimsgtestconstants.h"
+#include "cisimsgbasetest.h"
+
+// EXTERNAL DATA STRUCTURES
+// None
+
+// EXTERNAL FUNCTION PROTOTYPES
+// None
+
+// CONSTANTS
+_LIT( KOpen, "CIsiMsgBaseTest::OpenIsaApiAndGetIsiMsgL" );
+_LIT( KReceive, "CIsiMsgBaseTest::ReceiveIsiMsgL" );
+_LIT( KSend, "CIsiMsgBaseTest::SendIsiMsgL" );
+_LIT( KSendError, "*** Send: Wrong Message ID ***" );
+
+// MACROS
+// None
+
+// LOCAL CONSTANTS AND MACROS
+// None
+
+// MODULE DATA STRUCTURES
+// None
+
+// LOCAL FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+// None
+
+// ============================= LOCAL FUNCTIONS ===============================
+// None
+
+// ============================ MEMBER FUNCTIONS ===============================
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::NewL
+// Second phase static constuctor.
+// -----------------------------------------------------------------------------
+//
+CIsiMsgBaseTest* CIsiMsgBaseTest::NewL
+ (
+ TExecutionAndDebugInfo& aInfo,
+ TInt& aResult
+ )
+ {
+
+ // Construct new CCommSubBlockTest instance.
+ CIsiMsgBaseTest* self = CIsiMsgBaseTest::NewLC( aInfo, aResult );
+ CleanupStack::Pop( self );
+ return self;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::NewLC
+// Second phase static constuctor.
+// -----------------------------------------------------------------------------
+//
+CIsiMsgBaseTest* CIsiMsgBaseTest::NewLC
+ (
+ TExecutionAndDebugInfo& aInfo,
+ TInt& aResult
+ )
+ {
+
+ // Construct new CCommSubBlockTest instance.
+ CIsiMsgBaseTest* self = new ( ELeave )CIsiMsgBaseTest( aInfo, aResult );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::~CIsiMsgBaseTest
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CIsiMsgBaseTest::~CIsiMsgBaseTest
+ (
+ // None
+ )
+ {
+
+ // Delete and free local variables.
+ ClearReceivedMsg();
+ delete iIsaApiMsgExc;
+ iIsaApiMsgExc = NULL;
+ delete iTestLog;
+ iTestLog = NULL;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::OpenIsaApiAndGetIsiMsgL
+// Opens the IsaApi and creates new IsiMsg.
+//
+// If the IsaApi connection was already open, tries again.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::OpenIsaApiAndGetIsiMsgL
+ (
+ // None
+ )
+ {
+
+ // Prints that case started for STIF, ATS and Logger.
+ iTestLog->PrintCaseStatus( iInfo, iResult, iInfo.iCaseName, EStart );
+ // For debug.
+ RDebug::Print( KOpen );
+
+ // Fo until connection OK.
+ for( TInt i( 0 ), result = KErrAlreadyExists;
+ KErrNone != result;
+ i++ )
+ {
+ result = iIsaApi.Open( PN_OBJ_EPOC_MONSERV_SERV ); // 50
+ // If exist allready try again until previous connection is closed.
+ if( KErrAlreadyExists == result )
+ {
+ iResult = result;
+ PrintCaseProgress( result, KIsaApiNotReady );
+ // Wait for one second.
+ RDebug::Print( KIsaApiNotReady );
+ User::After( KOneSecond );
+ }
+ // If connection couldn't be opened and not open connection already
+ // panic and leave.
+ else if( KErrNone != result )
+ {
+ iResult = result;
+ PrintCaseProgress( iResult, KIsaApiPanic );
+ RDebug::Print( KIsaApiPanic );
+ User::Panic( KIsaApiPanic, KZero );
+ }
+ else
+ {
+ // Nothing.
+ }
+ }
+
+ iIsaApiMsgExc = CPnMsg::NewL( KLengthOfMessage - KSix );
+ iIsaApiMsgExc->Ptr().FillZ();
+ // If empty panic.
+ if( !iIsaApiMsgExc )
+ {
+ iResult = KErrNoMemory;
+ PrintCaseProgress( iResult, KIsaApiMsgEmpty );
+ RDebug::Print( KIsaApiMsgEmpty );
+ User::Panic( KIsaApiMsgEmpty, KOne );
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::CloseIsaApi
+// Closes the IsaApi connection down.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::CloseIsaApi
+ (
+ // None
+ )
+ {
+
+ iIsaApi.Close();
+ // Writes the end Status of case to STIF UI, ATS and log file.
+ iTestLog->PrintCaseStatus( iInfo, iResult, iInfo.iCaseName, EEnd );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::ClearReceivedMsg
+// Clears the memory reserved for PnMsg.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::ClearReceivedMsg
+ (
+ // None
+ )
+ {
+
+ delete iPnMsg;
+ iPnMsg = NULL;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CAccSubBlockTest::SetCaseProgress
+// Set the status failed / passed of the case.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::PrintCaseProgress
+ (
+ TInt aResult,
+ const TDesC& aComment
+ )
+ {
+
+ iResult = aResult;
+ iTestLog->PrintCaseProgress( iInfo, iResult, aComment );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::ReceiveIsiMsgL
+// Receveis an Isi message.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::ReceiveIsiMsgL
+ (
+ CIsiMsg& aCopyRcvMsg
+ )
+ {
+
+ // For debug print.
+ RDebug::Print( KReceive );
+
+ iPnMsg = CPnMsg::NewL( KPnMsgSize );
+ CIsiMsg isaApiRcvMsg;
+ isaApiRcvMsg.SetMessage( *iPnMsg );
+
+ TRequestStatus localStatus;
+ TPckgBuf<TUint16> len;
+ iResult = iIsaApi.Receive( localStatus, isaApiRcvMsg, len );
+ if( KErrNone != iResult )
+ {
+ PrintCaseProgress( iResult, KSendFail );
+ RDebug::Print( KSendFail );
+ User::Panic( KSendFail, KTwo );
+ }
+ RTimer timer;
+ timer.CreateLocal();
+ // Set timer
+ TRequestStatus timerStatus;
+ // Wait for response is expired.
+ timer.After( timerStatus, RESP_EXPIRE_TIME );
+ // Wait for timer or response.
+ User::WaitForRequest( timerStatus, localStatus );
+
+ // When either one has returned, check if iStatus is the one
+ // that didn't return, thus meaning the timer did.
+ if( localStatus == KRequestPending )
+ {
+ iIsaApi.ReceiveCancel();
+ iResult = KErrTimedOut;
+ PrintCaseProgress( iResult, KTimeOut );
+ User::WaitForRequest( localStatus );
+ }
+ else
+ {
+ timer.Cancel();
+ User::WaitForRequest( timerStatus );
+ PrintCaseProgress( iResult, KInTime );
+ }
+ timer.Close();
+ // Copy the received message to icommIsiMsg
+ isaApiRcvMsg.CopyAndNull( &aCopyRcvMsg );
+
+ /*FOR HEX's
+ TRAPD( err, iTestLog->PrintHexL( iInfo, ERequest ) );
+ if( KErrNone != err )
+ {
+ PrintCaseProgress( err, KHexPrintFail );
+ }
+ */
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::Receive16BitIsiMsgL
+// Receveis an Isi message.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::Receive16BitIsiMsgL
+ (
+ CIsiMsg& aCopyRcvMsg
+ )
+ {
+
+ // For debug print.
+ RDebug::Print( KReceive );
+
+ iPnMsg = CPnMsg::NewL( KPnMsgSize );
+ CSimIsiMsg isaApiRcvMsg;
+ isaApiRcvMsg.SetMessage16( *iPnMsg );
+
+ TRequestStatus localStatus;
+ TPckgBuf<TUint16> len;
+ iResult = iIsaApi.Receive( localStatus, isaApiRcvMsg, len );
+ if( KErrNone != iResult )
+ {
+ PrintCaseProgress( iResult, KSendFail );
+ RDebug::Print( KSendFail );
+ User::Panic( KSendFail, KTwo );
+ }
+ RTimer timer;
+ timer.CreateLocal();
+ // Set timer
+ TRequestStatus timerStatus;
+ // Wait for response is expired.
+ timer.After( timerStatus, RESP_EXPIRE_TIME );
+ // Wait for timer or response.
+ User::WaitForRequest( timerStatus, localStatus );
+
+ // When either one has returned, check if iStatus is the one
+ // that didn't return, thus meaning the timer did.
+ if( localStatus == KRequestPending )
+ {
+ iIsaApi.ReceiveCancel();
+ iResult = KErrTimedOut;
+ User::WaitForRequest( localStatus );
+ PrintCaseProgress( iResult, KTimeOut );
+ }
+ else
+ {
+ timer.Cancel();
+ PrintCaseProgress( iResult, KInTime );
+ User::WaitForRequest( timerStatus );
+ }
+ timer.Close();
+ // Copy the received message to icommIsiMsg
+ isaApiRcvMsg.CopyAndNull( &aCopyRcvMsg );
+
+ /*FOR HEX's
+ TRAPD( err, iTestLog->PrintHexL( iInfo, ERequest ) );
+ if( KErrNone != err )
+ {
+ PrintCaseProgress( err, KHexPrintFail );
+ }
+ */
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::SendIsiMsgL
+// Send an Isi message.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::SendIsiMsgL
+ (
+ const TUint8 aFunctionType,
+ const TUint8 aMessageId,
+ CIsiMsg& aMessage,
+ TDesC8& aData
+ )
+ {
+
+ // For debug print.
+ RDebug::Print( KSend );
+
+ // Set message to point send buffer.
+ aMessage.SetMessage( *iIsaApiMsgExc );
+
+ if( PN_CALL == aFunctionType )
+ {
+ CCallIsiMsg& message = static_cast<CCallIsiMsg&>(aMessage);
+ message.Create( 0x01, aMessageId, aData[0] );
+ }
+ else if( PN_TONE == aFunctionType )
+ {
+ CToneIsiMsg& message = static_cast<CToneIsiMsg&>(aMessage);
+ message.Create( 0x01, aMessageId, &aData );
+ }
+ else
+ {
+ aMessage.Create( 0x01, aMessageId, &aData );
+ }
+ aMessage.Create( 0x01, aMessageId, &aData );
+
+/*FOR HEX's
+ TRAPD( err, iTestLog->PrintHexL( iInfo, aData, ERequest ) );
+ if( KErrNone != err )
+ {
+ PrintCaseProgress( err, KHexPrintFail );
+ }
+*/
+
+ aMessage.SetFunction( aFunctionType );
+ iResult = iIsaApi.Send( aMessage );
+ if( KErrNone != iResult )
+ {
+ PrintCaseProgress( iResult, KReceiveFail );
+ RDebug::Print( KReceiveFail );
+ User::Panic( KReceiveFail, KTwo );
+ }
+ // Wait until 1sec*aSeconds has gone
+ WaitASecond();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::SendIsiMsgL
+// Send an Isi message.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::Send16BitIsiMsgL
+ (
+ const TUint8 aFunctionType,
+ const TUint8 aMessageId,
+ CIsiMsg& aMessage,
+ TDesC8& aData
+ )
+ {
+
+ // For debug print.
+ RDebug::Print( KSend );
+
+ if( aFunctionType != PN_SIM )
+ {
+ iResult = KErrNotSupported;
+ // For debug print.
+ RDebug::Print( KSend );
+ RDebug::Print( KSendError );
+ User::Leave( KErrNotSupported );
+ }
+
+ CSimIsiMsg& simIsiMsg = static_cast<CSimIsiMsg&>( aMessage );
+ // Set message to point send buffer.
+ simIsiMsg.SetMessage16( *iIsaApiMsgExc );
+ simIsiMsg.Create16( 0x01, aMessageId, &aData );
+
+/*FOR HEX's
+ TRAPD( err, iTestLog->PrintHexL( iInfo, aData, ERequest ) );
+ if( KErrNone != err )
+ {
+ PrintCaseProgress( err, KHexPrintFail );
+ }
+*/
+
+ simIsiMsg.SetFunction( aFunctionType );
+ iResult = iIsaApi.Send( aMessage );
+ if( KErrNone != iResult )
+ {
+ PrintCaseProgress( iResult, KReceiveFail );
+ RDebug::Print( KReceiveFail );
+ User::Panic( KReceiveFail, KTwo );
+ }
+ // Wait until 1sec*aSeconds has gone
+ WaitASecond();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::SendIsiMsgL
+// Send an Isi message.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::CreateIsiMsgL
+ (
+ const TUint8 aFunctionType,
+ const TUint8 aMessageId,
+ CIsiMsg& aMessage,
+ TDesC8& aData
+ )
+ {
+
+ // If used with wrong messageID
+ if( aFunctionType != PN_BLUETOOTH_CORE && aFunctionType != PN_LOCATION
+ && aFunctionType != PN_FM_RADIO && aFunctionType != PN_KEY
+ && aFunctionType != PN_TUNEPLAYER && aFunctionType != PN_TONE
+ && aFunctionType != PN_TIME && aFunctionType != PN_GSS
+ && aFunctionType != PN_SELFTEST && aFunctionType != PN_EPOC_INFO
+ && aFunctionType != PN_SIM && aFunctionType != PN_DSP_AUDIO
+ && aFunctionType != PN_SMS_MEMORY )
+ {
+ iResult = KErrNotSupported;
+ // For debug print.
+ RDebug::Print( KSend );
+ RDebug::Print( KSendError );
+ User::Leave( KErrNotSupported );
+ }
+ // For debug print.
+ RDebug::Print( KSend );
+
+ // Set message to point send buffer.
+ aMessage.SetMessage( *iIsaApiMsgExc );
+ aMessage.Create( 0x01, aMessageId, &aData );
+ aMessage.SetFunction( aFunctionType );
+
+/*FOR HEX's
+ TRAPD( err, iTestLog->PrintHexL( iInfo, aData, ERequest ) );
+ if( KErrNone != err )
+ {
+ PrintCaseProgress( err, KHexPrintFail );
+ }
+*/
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::SendIsiMsgL
+// Send an Isi message.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::SendCreatedIsiMsgL
+ (
+ const TUint8 aFunctionType,
+ const TUint8, //aMessageId,
+ CIsiMsg& aMessage,
+ TDesC8& //aData
+ )
+ {
+
+ // If used with wrong messageID
+ if( aFunctionType != PN_BLUETOOTH_CORE && aFunctionType != PN_LOCATION
+ && aFunctionType != PN_FM_RADIO && aFunctionType != PN_KEY
+ && aFunctionType != PN_TUNEPLAYER && aFunctionType != PN_TONE
+ && aFunctionType != PN_TIME && aFunctionType != PN_GSS
+ && aFunctionType != PN_SELFTEST && aFunctionType != PN_EPOC_INFO
+ && aFunctionType != PN_SIM && aFunctionType != PN_DSP_AUDIO
+ && aFunctionType != PN_SMS_MEMORY )
+ {
+ iResult = KErrNotSupported;
+ // For debug print.
+ RDebug::Print( KSend );
+ RDebug::Print( KSendError );
+ User::Leave( KErrNotSupported );
+ }
+
+ iResult = iIsaApi.Send( aMessage );
+ if( KErrNone != iResult )
+ {
+ PrintCaseProgress( iResult, KReceiveFail );
+ RDebug::Print( KReceiveFail );
+ User::Panic( KReceiveFail, KTwo );
+ }
+ // Wait until 1sec*aSeconds has gone
+ WaitASecond();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::CIsiMsgBaseTest
+// Default constructor.
+// -----------------------------------------------------------------------------
+//
+CIsiMsgBaseTest::CIsiMsgBaseTest
+ (
+ TExecutionAndDebugInfo& aInfo,
+ TInt& aResult
+ ):iInfo( aInfo ), iResult( aResult )
+ {
+
+ // None
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::ConstructL
+// Symbian OS second phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::ConstructL
+ (
+ // None
+ )
+ {
+
+ // Writes notices to STIF UI, ATS, and logfile.
+ iTestLog = CTestLogger::NewL();
+ iIsaApiMsgExc = NULL;
+ iPnMsg = NULL;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CIsiMsgBaseTest::WaitASecond
+// Waits a second.
+// -----------------------------------------------------------------------------
+//
+void CIsiMsgBaseTest::WaitASecond
+ (
+ // None
+ )
+ {
+
+ // Wait until 1sec*aSeconds has gone
+ RTimer timer;
+ TRequestStatus timerStatus;
+ timer.CreateLocal();
+ timer.After( timerStatus, KThousand * AUTOMATIC_MODE_SWITCH_DELAY );
+ User::WaitForRequest( timerStatus );
+ timer.Close();
+
+ }