--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCESIPExtensions.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,924 @@
+/*
+* Copyright (c) 2004 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:
+*
+*/
+
+
+
+
+// CLASS HEADER
+#include "ut_cmcesipextensions.h"
+
+// EXTERNAL INCLUDES
+#include <digia/eunit/eunitmacros.h>
+
+// INTERNAL INCLUDES
+#include "ut_cmcesipextensions.h"
+#include "MCETestHelper.h"
+#include "mcesipextensions.h"
+#include "mcedictionary.h"
+#include "sipclienttransaction.h"
+#include <sipstrings.h>
+#include <sipstrconsts.h>
+#include <siprequireheader.h>
+#include <sipsupportedheader.h>
+#include <sipallowheader.h>
+
+_LIT8( KUnKnownSupported, "MySupported" );
+_LIT8( KUnKnownRequire, "MyRequire" );
+
+#define MCE_ASSERT_LOCAL_EXTENSIONS( prack, qos, update, allowPrack, subscribe, refer, notify )\
+ EUNIT_ASSERT( iExtensions->Local( CMceSipExtensions::E100rel ) == prack );\
+ EUNIT_ASSERT( iExtensions->Local( CMceSipExtensions::EQosPreconds ) == qos );\
+ EUNIT_ASSERT( iExtensions->Local( CMceSipExtensions::EUpdate ) == update );\
+ EUNIT_ASSERT( iExtensions->Local( CMceSipExtensions::EPrack ) == allowPrack );\
+ EUNIT_ASSERT( iExtensions->Local( CMceSipExtensions::ESubscribe ) == subscribe );\
+ EUNIT_ASSERT( iExtensions->Local( CMceSipExtensions::ERefer ) == refer );\
+ EUNIT_ASSERT( iExtensions->Local( CMceSipExtensions::ENotify ) == notify );
+
+#define MCE_ASSERT_REMOTE_EXTENSIONS( prack, qos, update, allowPrack, subscribe, refer, notify )\
+ EUNIT_ASSERT( iExtensions->Remote( CMceSipExtensions::E100rel ) == prack );\
+ EUNIT_ASSERT( iExtensions->Remote( CMceSipExtensions::EQosPreconds ) == qos );\
+ EUNIT_ASSERT( iExtensions->Remote( CMceSipExtensions::EUpdate ) == update );\
+ EUNIT_ASSERT( iExtensions->Remote( CMceSipExtensions::EPrack ) == allowPrack );\
+ EUNIT_ASSERT( iExtensions->Remote( CMceSipExtensions::ESubscribe ) == subscribe );\
+ EUNIT_ASSERT( iExtensions->Remote( CMceSipExtensions::ERefer ) == refer );\
+ EUNIT_ASSERT( iExtensions->Remote( CMceSipExtensions::ENotify ) == notify );
+
+#define MCE_RESET_EXTENSIONS()\
+ iExtensions->SetLocal( CMceSipExtensions::E100rel, CMceSipExtensions::ESupported );\
+ iExtensions->SetLocal( CMceSipExtensions::EQosPreconds, CMceSipExtensions::ESupported );\
+ iExtensions->SetLocal( CMceSipExtensions::EUpdate, CMceSipExtensions::ESupported );\
+ iExtensions->SetLocal( CMceSipExtensions::EPrack, CMceSipExtensions::ESupported );\
+ iExtensions->SetLocal( CMceSipExtensions::ESubscribe, CMceSipExtensions::ESupported );\
+ iExtensions->SetLocal( CMceSipExtensions::ERefer, CMceSipExtensions::ESupported );\
+ iExtensions->SetLocal( CMceSipExtensions::ENotify, CMceSipExtensions::ESupported );\
+ iExtensions->SetRemote( CMceSipExtensions::E100rel, CMceSipExtensions::ESupported );\
+ iExtensions->SetRemote( CMceSipExtensions::EQosPreconds, CMceSipExtensions::ESupported );\
+ iExtensions->SetRemote( CMceSipExtensions::EUpdate, CMceSipExtensions::ESupported );\
+ iExtensions->SetRemote( CMceSipExtensions::EPrack, CMceSipExtensions::ESupported );\
+ iExtensions->SetRemote( CMceSipExtensions::ESubscribe, CMceSipExtensions::ESupported );\
+ iExtensions->SetRemote( CMceSipExtensions::ERefer, CMceSipExtensions::ESupported );\
+ iExtensions->SetRemote( CMceSipExtensions::ENotify, CMceSipExtensions::ESupported );
+
+
+// CONSTRUCTION
+UT_CMceSipExtensions* UT_CMceSipExtensions::NewL()
+ {
+ UT_CMceSipExtensions* self = UT_CMceSipExtensions::NewLC();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+UT_CMceSipExtensions* UT_CMceSipExtensions::NewLC()
+ {
+ UT_CMceSipExtensions* self = new( ELeave ) UT_CMceSipExtensions();
+ CleanupStack::PushL( self );
+
+ self->ConstructL();
+
+
+ return self;
+ }
+
+// Destructor (virtual by CBase)
+UT_CMceSipExtensions::~UT_CMceSipExtensions()
+ {
+ }
+
+// Default constructor
+UT_CMceSipExtensions::UT_CMceSipExtensions()
+ {
+ }
+
+// Second phase construct
+void UT_CMceSipExtensions::ConstructL()
+ {
+ // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+ // It generates the test case table.
+ CEUnitTestSuiteClass::ConstructL();
+ }
+
+// METHODS
+
+
+
+void UT_CMceSipExtensions::SetupL( )
+ {
+ SIPStrings::OpenL();
+ iExtensions = CMceSipExtensions::NewL();
+ }
+
+void UT_CMceSipExtensions::Teardown( )
+ {
+ delete iExtensions;
+ SIPStrings::Close();
+ }
+
+void UT_CMceSipExtensions::UT_CMceSipExtensions_LocalL()
+ {
+ CMceKeyTValuePair<CMceSipExtensions::TLevel>* item =
+ static_cast<CMceKeyTValuePair<CMceSipExtensions::TLevel>*>
+ ( iExtensions->iLocal->Pair( CMceSipExtensions::E100rel ) );
+ EUNIT_ASSERT( item );
+ EUNIT_ASSERT( iExtensions->Local( CMceSipExtensions::E100rel )
+ == item->Value() );
+
+ // remove one item, to test not finding
+ iExtensions->iLocal->Delete( CMceSipExtensions::E100rel );
+ EUNIT_ASSERT( iExtensions->Local( CMceSipExtensions::E100rel ) ==
+ CMceSipExtensions::ENotSupported );
+ }
+
+void UT_CMceSipExtensions::UT_CMceSipExtensions_RemoteL()
+ {
+ CMceKeyTValuePair<CMceSipExtensions::TLevel>* item =
+ static_cast<CMceKeyTValuePair<CMceSipExtensions::TLevel>*>
+ ( iExtensions->iRemote->Pair( CMceSipExtensions::EUpdate ) );
+ EUNIT_ASSERT( item );
+ EUNIT_ASSERT( iExtensions->Remote( CMceSipExtensions::EUpdate )
+ == item->Value() );
+
+ // remove one item, to test not finding
+ iExtensions->iRemote->Delete( CMceSipExtensions::E100rel );
+ EUNIT_ASSERT( iExtensions->Remote( CMceSipExtensions::E100rel ) ==
+ CMceSipExtensions::ENotSupported );
+ }
+
+void UT_CMceSipExtensions::UT_CMceSipExtensions_SetLocalL()
+ {
+ CMceKeyTValuePair<CMceSipExtensions::TLevel>* item =
+ static_cast<CMceKeyTValuePair<CMceSipExtensions::TLevel>*>
+ ( iExtensions->iLocal->Pair( CMceSipExtensions::EQosPreconds ) );
+ EUNIT_ASSERT( item );
+ item->SetValue( CMceSipExtensions::ENotSupported );
+ iExtensions->SetLocal( CMceSipExtensions::EQosPreconds,
+ CMceSipExtensions::ERequired );
+ EUNIT_ASSERT( item->Value() == CMceSipExtensions::ERequired );
+
+ // remove one item, to test not finding
+ iExtensions->iLocal->Delete( CMceSipExtensions::E100rel );
+ iExtensions->SetLocal( CMceSipExtensions::E100rel,
+ CMceSipExtensions::ESupported );
+
+ }
+
+void UT_CMceSipExtensions::UT_CMceSipExtensions_SetRemoteL()
+ {
+ CMceKeyTValuePair<CMceSipExtensions::TLevel>* item =
+ static_cast<CMceKeyTValuePair<CMceSipExtensions::TLevel>*>
+ ( iExtensions->iRemote->Pair( CMceSipExtensions::E100rel ) );
+ EUNIT_ASSERT( item );
+ item->SetValue( CMceSipExtensions::ENotSupported );
+ iExtensions->SetRemote( CMceSipExtensions::E100rel,
+ CMceSipExtensions::ERequired );
+ EUNIT_ASSERT( item->Value() == CMceSipExtensions::ERequired );
+
+ // remove one item, to test not finding
+ iExtensions->iRemote->Delete( CMceSipExtensions::E100rel );
+ iExtensions->SetRemote( CMceSipExtensions::E100rel,
+ CMceSipExtensions::ESupported );
+ }
+
+void UT_CMceSipExtensions::UT_CMceSipExtensions_LevelLL()
+ {
+ /*
+ CSIPTransactionBase& aTransaction,
+ CMceSipExtensions::TExtension aExtension )
+ */
+ RPointerArray<CSIPHeaderBase> hdrs;
+ CSIPHeaderBase::PushLC( &hdrs );
+
+ // no message elements
+ RStringF str = SIPStrings::StringF( SipStrConsts::EInvite );
+ CSIPTransactionBase* tran =
+ CSIPClientTransaction::NewL( SIPStrings::StringF( SipStrConsts::EInvite ) );
+ CleanupStack::PushL( tran );
+ CMceSipExtensions::TLevel result = iExtensions->LevelL( *tran, CMceSipExtensions::E100rel );
+ EUNIT_ASSERT( result == CMceSipExtensions::ENotSupported );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ // 100rel
+ // NOP
+ // no headers
+ tran = MCETestHelper::ServerTransactionL( SipStrConsts::EInvite,
+ hdrs );
+ CleanupStack::PushL( tran );
+ result = iExtensions->LevelL( *tran, CMceSipExtensions::E100rel );
+ EUNIT_ASSERT( result == CMceSipExtensions::ENotSupported );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ // unknown extensions
+ RStringF unknownSuppStr = SIPStrings::Pool().OpenFStringL( KUnKnownSupported );
+ CleanupClosePushL( unknownSuppStr );
+ CSIPSupportedHeader* unknownSupp = CSIPSupportedHeader::NewLC( unknownSuppStr );
+ hdrs.AppendL( unknownSupp );
+ CleanupStack::Pop( unknownSupp );
+ CleanupStack::PopAndDestroy(); //unknownSuppStr
+
+ RStringF unknownReqStr = SIPStrings::Pool().OpenFStringL( KUnKnownRequire );
+ CleanupClosePushL( unknownReqStr );
+ CSIPRequireHeader* unknownReq = CSIPRequireHeader::NewLC( unknownReqStr );
+ hdrs.AppendL( unknownReq );
+ CleanupStack::Pop( unknownReq );
+ CleanupStack::PopAndDestroy(); // unknownReqStr
+
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipOK,
+ SipStrConsts::EPhraseOk );
+
+
+ result = iExtensions->LevelL( *tran, CMceSipExtensions::E100rel );
+ EUNIT_ASSERT( result == CMceSipExtensions::ENotSupported );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ // Supported:100rel
+ RStringF supp100RelStr = SIPStrings::Pool().OpenFStringL( KMceSip100Rel );
+ CleanupClosePushL( supp100RelStr );
+ CSIPSupportedHeader* supp100Rel = CSIPSupportedHeader::NewLC( supp100RelStr );
+ hdrs.AppendL( supp100Rel );
+ CleanupStack::Pop( supp100Rel );
+ CleanupStack::PopAndDestroy(); // supp100RelStr
+ tran = MCETestHelper::ServerTransactionL( SipStrConsts::EInvite,
+ hdrs );
+
+ CleanupStack::PushL( tran );
+ result = iExtensions->LevelL( *tran, CMceSipExtensions::E100rel );
+ EUNIT_ASSERT( result == CMceSipExtensions::ESupported );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ // Require:100rel
+ RStringF req100RelStr = SIPStrings::Pool().OpenFStringL( KMceSip100Rel );
+ CleanupClosePushL( req100RelStr );
+ CSIPRequireHeader* require = CSIPRequireHeader::NewLC( req100RelStr );
+ hdrs.AppendL( require );
+ CleanupStack::Pop( require );
+ CleanupStack::PopAndDestroy(); // req100RelStr
+
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipOK,
+ SipStrConsts::EPhraseOk );
+
+ result = iExtensions->LevelL( *tran, CMceSipExtensions::E100rel );
+ EUNIT_ASSERT( result == CMceSipExtensions::ERequired );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+
+ // EQosPreconds
+ // NOP
+ tran = MCETestHelper::ServerTransactionL( SipStrConsts::EInvite,
+ hdrs );
+ CleanupStack::PushL( tran );
+ result = iExtensions->LevelL( *tran, CMceSipExtensions::EQosPreconds );
+ EUNIT_ASSERT( result == CMceSipExtensions::ENotSupported );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ // Supported
+ RStringF suppQosStr = SIPStrings::Pool().OpenFStringL( KMceSipPrecondition );
+ CleanupClosePushL( suppQosStr );
+ CSIPSupportedHeader* suppQos = CSIPSupportedHeader::NewLC( suppQosStr );
+ hdrs.AppendL( suppQos );
+ CleanupStack::Pop( suppQos );
+ CleanupStack::PopAndDestroy(); // suppQosStr
+
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipOK,
+ SipStrConsts::EPhraseOk );
+
+ result = iExtensions->LevelL( *tran, CMceSipExtensions::EQosPreconds );
+ EUNIT_ASSERT( result == CMceSipExtensions::ESupported );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ // Required
+ RStringF reqQosStr = SIPStrings::Pool().OpenFStringL( KMceSipPrecondition );
+ CleanupClosePushL( reqQosStr );
+ CSIPRequireHeader* reqQos = CSIPRequireHeader::NewLC( reqQosStr );
+ hdrs.AppendL( reqQos );
+ CleanupStack::Pop( reqQos );
+ CleanupStack::PopAndDestroy(); // reqQosStr
+
+ tran = MCETestHelper::ServerTransactionL( SipStrConsts::EInvite,
+ hdrs );
+ CleanupStack::PushL( tran );
+ result = iExtensions->LevelL( *tran, CMceSipExtensions::EQosPreconds );
+ EUNIT_ASSERT( result == CMceSipExtensions::ERequired );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ // UPDATE
+ // Not supported
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipOK,
+ SipStrConsts::EPhraseOk );
+ result = iExtensions->LevelL( *tran, CMceSipExtensions::EUpdate );
+ EUNIT_ASSERT( result == CMceSipExtensions::ENotSupported );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ // Supported
+ RStringF updateStr = SIPStrings::StringF( SipStrConsts::EUpdate );
+ CSIPAllowHeader* allowUpdate = CSIPAllowHeader::NewLC( updateStr );
+ hdrs.AppendL( allowUpdate );
+ CleanupStack::Pop( allowUpdate );
+
+ tran = MCETestHelper::ServerTransactionL( SipStrConsts::EInvite,
+ hdrs );
+
+ CleanupStack::PushL( tran );
+ result = iExtensions->LevelL( *tran, CMceSipExtensions::EUpdate );
+ EUNIT_ASSERT( result == CMceSipExtensions::ESupported );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ // unknown
+
+ CMceSipExtensions::TExtension unknown = static_cast< CMceSipExtensions::TExtension >( KErrNotSupported );
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipOK,
+ SipStrConsts::EPhraseOk );
+
+ result = iExtensions->LevelL( *tran, unknown );
+ EUNIT_ASSERT( result == CMceSipExtensions::ENotSupported );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ CleanupStack::PopAndDestroy( &hdrs );
+ }
+
+void UT_CMceSipExtensions::UT_CMceSipExtensions_UpdateLL()
+ {
+ // server transaction
+ RPointerArray<CSIPHeaderBase> hdrs;
+ CSIPHeaderBase::PushLC( &hdrs );
+
+ // no message elements
+ CSIPServerTransaction* tran =
+ CSIPServerTransaction::NewL( SIPStrings::StringF( SipStrConsts::EInvite ) );
+
+ CleanupStack::PushL( tran );
+ EUNIT_ASSERT_LEAVE( iExtensions->UpdateL( *tran ) );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported/*qos*/,
+ CMceSipExtensions::ESupported /*update*/,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ // local: 100rel = supported, preconds = supported
+ // remote: 100rel = not supported, preconds not supported
+ tran = MCETestHelper::ServerTransactionL( SipStrConsts::EInvite,
+ hdrs );
+ CleanupStack::PushL( tran );
+ iExtensions->UpdateL( *tran );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported/*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ENotSupported /*prack*/,
+ CMceSipExtensions::ENotSupported /*qos*/,
+ CMceSipExtensions::ENotSupported /*update*/ ,
+ CMceSipExtensions::ENotSupported /*allowprack*/,
+ CMceSipExtensions::ENotSupported /*subscribe*/,
+ CMceSipExtensions::ENotSupported /*refer*/,
+ CMceSipExtensions::ENotSupported /*notify*/ );
+
+ // Remote requires 100rel but locally not supported.
+ iExtensions->SetLocal( CMceSipExtensions::E100rel, CMceSipExtensions::ENotSupported );
+ RStringF req100RelStr = SIPStrings::Pool().OpenFStringL( KMceSip100Rel );
+ CleanupClosePushL( req100RelStr );
+ CSIPRequireHeader* req100Rel = CSIPRequireHeader::NewLC( req100RelStr );
+ hdrs.AppendL( req100Rel );
+ CleanupStack::Pop( req100Rel );
+ CleanupStack::PopAndDestroy(); // req100RelStr
+ tran = MCETestHelper::ServerTransactionL( SipStrConsts::EInvite,
+ hdrs );
+ CleanupStack::PushL( tran );
+
+ EUNIT_ASSERT_LEAVE( iExtensions->UpdateL( *tran ) );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ENotSupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+ // Remote requires qos preconds but locally not supported.
+ iExtensions->SetLocal( CMceSipExtensions::EQosPreconds, CMceSipExtensions::ENotSupported );
+ RStringF reqQosStr = SIPStrings::Pool().OpenFStringL( KMceSipPrecondition );
+ CleanupClosePushL( reqQosStr );
+ CSIPRequireHeader* reqQos = CSIPRequireHeader::NewLC( reqQosStr );
+ hdrs.AppendL( reqQos );
+ CleanupStack::Pop( reqQos );
+ CleanupStack::PopAndDestroy(); // reqQosStr
+ tran = MCETestHelper::ServerTransactionL( SipStrConsts::EInvite,
+ hdrs );
+ CleanupStack::PushL( tran );
+
+ EUNIT_ASSERT_LEAVE( iExtensions->UpdateL( *tran ) );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ENotSupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ MCE_RESET_EXTENSIONS();
+
+ // Remote requires 100rel && qos preconds, and allows update
+ RStringF req100RelStr2 = SIPStrings::Pool().OpenFStringL( KMceSip100Rel );
+ CleanupClosePushL( req100RelStr2 );
+ CSIPRequireHeader* req100Rel2 = CSIPRequireHeader::NewLC( req100RelStr2 );
+ hdrs.AppendL( req100Rel2 );
+ CleanupStack::Pop( req100Rel2 );
+ CleanupStack::PopAndDestroy(); // req100RelStr2
+
+ RStringF reqQosStr2 = SIPStrings::Pool().OpenFStringL( KMceSipPrecondition );
+ CleanupClosePushL( reqQosStr2 );
+ CSIPRequireHeader* reqQos2 = CSIPRequireHeader::NewLC( reqQosStr2 );
+ hdrs.AppendL( reqQos2 );
+ CleanupStack::Pop( reqQos2 );
+ CleanupStack::PopAndDestroy(); // reqQosStr2
+
+ RStringF updateStr = SIPStrings::StringF( SipStrConsts::EUpdate );
+ CSIPAllowHeader* allowUpdate = CSIPAllowHeader::NewLC( updateStr );
+ hdrs.AppendL( allowUpdate );
+ CleanupStack::Pop( allowUpdate );
+
+ tran = MCETestHelper::ServerTransactionL( SipStrConsts::EInvite,
+ hdrs );
+ CleanupStack::PushL( tran );
+
+ iExtensions->UpdateL( *tran );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ERequired /*prack*/,
+ CMceSipExtensions::ERequired /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ERequired /*prack*/,
+ CMceSipExtensions::ERequired /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ENotSupported /*allowprack*/,
+ CMceSipExtensions::ENotSupported /*subscribe*/,
+ CMceSipExtensions::ENotSupported /*refer*/,
+ CMceSipExtensions::ENotSupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+ CleanupStack::PopAndDestroy( &hdrs );
+ }
+
+void UT_CMceSipExtensions::UT_CMceSipExtensions_UpdateL2L()
+ {
+ // client transaction
+ RPointerArray<CSIPHeaderBase> hdrs;
+ CSIPHeaderBase::PushLC( &hdrs );
+
+ // No message
+ CSIPClientTransaction* tran =
+ CSIPClientTransaction::NewL( SIPStrings::StringF( SipStrConsts::EInvite ) );
+ EUNIT_ASSERT_LEAVE( iExtensions->UpdateL( *tran ) );
+ MCE_DELETE( tran );
+
+ // NOP -- KMceSipBadRequest
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipBadRequest,
+ SipStrConsts::EPhraseBadRequest );
+
+ iExtensions->UpdateL( *tran );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+ // 1xx UPDATE not allowed
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipRinging,
+ SipStrConsts::EPhraseRinging );
+
+ iExtensions->UpdateL( *tran );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ENotSupported /*update*/ ,
+ CMceSipExtensions::ENotSupported /*allowprack*/,
+ CMceSipExtensions::ENotSupported /*subscribe*/,
+ CMceSipExtensions::ENotSupported /*refer*/,
+ CMceSipExtensions::ENotSupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+ // 1xx, 100rel locally required, but not in 1xx
+ iExtensions->SetLocal( CMceSipExtensions::E100rel, CMceSipExtensions::ERequired );
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipRinging,
+ SipStrConsts::EPhraseRinging );
+
+ EUNIT_ASSERT_LEAVE( iExtensions->UpdateL( *tran ) );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ERequired /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+ // 2xx UPDATE allowed
+ RStringF update = SIPStrings::StringF( SipStrConsts::EUpdate );
+ CSIPAllowHeader* allowUpdate = CSIPAllowHeader::NewLC( update );
+ hdrs.AppendL( allowUpdate );
+ CleanupStack::Pop( allowUpdate );
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipOK,
+ SipStrConsts::EPhraseOk );
+
+ iExtensions->UpdateL( *tran );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ENotSupported /*allowprack*/,
+ CMceSipExtensions::ENotSupported /*subscribe*/,
+ CMceSipExtensions::ENotSupported /*refer*/,
+ CMceSipExtensions::ENotSupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+
+ // KMceSipExtensionRequired, no preconds required
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipExtensionRequired,
+ SipStrConsts::EPhraseExtensionRequired );
+ // There will leave when don't have require header field.
+ EUNIT_ASSERT_LEAVE( iExtensions->UpdateL( *tran ) );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+ // KMceSipExtensionRequired, preconds required, locally supported
+ RStringF reqQosStr = SIPStrings::Pool().OpenFStringL( KMceSipPrecondition );
+ CleanupClosePushL( reqQosStr );
+ CSIPRequireHeader* reqQos = CSIPRequireHeader::NewLC( reqQosStr );
+ hdrs.AppendL( reqQos );
+ CleanupStack::Pop( reqQos );
+ CleanupStack::PopAndDestroy(); // reqQosStr
+
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipExtensionRequired,
+ SipStrConsts::EPhraseExtensionRequired );
+
+ iExtensions->UpdateL( *tran );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ERequired /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+ // KMceSipExtensionRequired, preconds required, locally supported
+ iExtensions->SetLocal( CMceSipExtensions::EQosPreconds, CMceSipExtensions::ENotSupported );
+ iExtensions->SetLocal( CMceSipExtensions::ESecPreconds, CMceSipExtensions::ENotSupported );
+ RStringF reqQosStr2 = SIPStrings::Pool().OpenFStringL( KMceSipPrecondition );
+ CleanupClosePushL( reqQosStr2 );
+ CSIPRequireHeader* reqQos2 = CSIPRequireHeader::NewLC( reqQosStr2 );
+ hdrs.AppendL( reqQos2 );
+ CleanupStack::Pop( reqQos2 );
+ CleanupStack::PopAndDestroy(); // reqQosStr2
+
+ tran = MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite,
+ hdrs,
+ KMceSipExtensionRequired,
+ SipStrConsts::EPhraseExtensionRequired );
+
+ EUNIT_ASSERT_LEAVE( iExtensions->UpdateL( *tran ) );
+ CleanupStack::PopAndDestroy( tran );
+ tran = NULL;
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ENotSupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ MCE_ASSERT_REMOTE_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+ CleanupStack::PopAndDestroy( &hdrs );
+ }
+
+void UT_CMceSipExtensions::UT_CMceSipExtensions_RemoteIMSRel5L()
+ {
+ iExtensions->SetLocal( CMceSipExtensions::EQosPreconds, CMceSipExtensions::ENotSupported );
+ EUNIT_ASSERT( !iExtensions->RemoteIMSRel5() );
+
+ iExtensions->SetLocal( CMceSipExtensions::EQosPreconds, CMceSipExtensions::ESupported );
+ EUNIT_ASSERT( !iExtensions->RemoteIMSRel5() );
+
+ iExtensions->SetLocal( CMceSipExtensions::EQosPreconds, CMceSipExtensions::ERequired );
+ EUNIT_ASSERT( iExtensions->RemoteIMSRel5() );
+ }
+
+void UT_CMceSipExtensions::UT_CMceSipExtensions_UpdateL()
+ {
+ /*
+ TMceSessionModifier aModifier,
+ TUint aValue
+ */
+ // KMcePreconditions
+ // KMcePreconditionsSupported
+ iExtensions->Update( KMcePreconditions, KMcePreconditionsSupported );
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ // KMcePreconditions
+ // KMcePreconditionsNotUsed
+ iExtensions->Update( KMcePreconditions, KMcePreconditionsNotUsed );
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ENotSupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+ // KMcePreconditions
+ // Unknown
+ iExtensions->Update( KMcePreconditions, ( TUint )( KErrNotFound ) );
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ // KMce100Rel
+ // KMcePreconditionsSupported
+ iExtensions->Update( KMce100Rel, KMcePreconditionsSupported );
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ // KMce100Rel
+ // KMcePreconditionsNotUsed
+ iExtensions->Update( KMce100Rel, KMcePreconditionsNotUsed );
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ENotSupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ MCE_RESET_EXTENSIONS();
+
+ // KMce100Rel
+ // Unknown
+ iExtensions->Update( KMce100Rel, ( TUint )( KErrNotFound ) );
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+
+ // default
+ iExtensions->Update( ( TMceSessionModifier )( KErrNotFound ),
+ ( TUint )( KErrNotFound ) );
+ MCE_ASSERT_LOCAL_EXTENSIONS( CMceSipExtensions::ESupported /*prack*/,
+ CMceSipExtensions::ESupported /*qos*/,
+ CMceSipExtensions::ESupported /*update*/ ,
+ CMceSipExtensions::ESupported /*allowprack*/,
+ CMceSipExtensions::ESupported /*subscribe*/,
+ CMceSipExtensions::ESupported /*refer*/,
+ CMceSipExtensions::ESupported /*notify*/ );
+ }
+
+
+// TEST TABLE
+
+EUNIT_BEGIN_TEST_TABLE(
+ UT_CMceSipExtensions,
+ "UT_CMceSipExtensions",
+ "UNIT" )
+
+EUNIT_TEST(
+ "Local - method ",
+ "CMceSipExtensions",
+ "Local",
+ "FUNCTIONALITY",
+ SetupL, UT_CMceSipExtensions_LocalL, Teardown)
+
+EUNIT_TEST(
+ "Remote - method ",
+ "CMceSipExtensions",
+ "Remote",
+ "FUNCTIONALITY",
+ SetupL, UT_CMceSipExtensions_RemoteL, Teardown)
+
+EUNIT_TEST(
+ "SetLocal - method ",
+ "CMceSipExtensions",
+ "SetLocal",
+ "FUNCTIONALITY",
+ SetupL, UT_CMceSipExtensions_SetLocalL, Teardown)
+
+EUNIT_TEST(
+ "SetRemote - method ",
+ "CMceSipExtensions",
+ "SetRemote",
+ "FUNCTIONALITY",
+ SetupL, UT_CMceSipExtensions_SetRemoteL, Teardown)
+
+EUNIT_TEST(
+ "Level - method ",
+ "CMceSipExtensions",
+ "Level",
+ "FUNCTIONALITY",
+ SetupL, UT_CMceSipExtensions_LevelLL, Teardown)
+
+EUNIT_TEST(
+ "UpdateL - method, sta ",
+ "CMceSipExtensions",
+ "UpdateL",
+ "FUNCTIONALITY",
+ SetupL, UT_CMceSipExtensions_UpdateLL, Teardown)
+
+EUNIT_TEST(
+ "UpdateL - method, cta ",
+ "CMceSipExtensions",
+ "UpdateL",
+ "FUNCTIONALITY",
+ SetupL, UT_CMceSipExtensions_UpdateL2L, Teardown)
+
+EUNIT_TEST(
+ "RemoteIMSRel5 - method ",
+ "CMceSipExtensions",
+ "RemoteIMSRel5",
+ "FUNCTIONALITY",
+ SetupL, UT_CMceSipExtensions_RemoteIMSRel5L, Teardown)
+
+EUNIT_TEST(
+ "Update - method, session modifier ",
+ "CMceSipExtensions",
+ "Update",
+ "FUNCTIONALITY",
+ SetupL, UT_CMceSipExtensions_UpdateL, Teardown)
+
+
+EUNIT_END_TEST_TABLE
+
+// END OF FILE