multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCESIPConnection.cpp
changeset 0 1bce908db942
child 42 817c922b90eb
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 //  CLASS HEADER
       
    22 #include "ut_cmcesipconnection.h"
       
    23 
       
    24 //  EXTERNAL INCLUDES
       
    25 #include <digia/eunit/eunitmacros.h>
       
    26 
       
    27 //  INTERNAL INCLUDES
       
    28 #include "MCETestHelper.h"
       
    29 #include "mceactionset.h"
       
    30 #include "mcesipsession.h"
       
    31 #include "mceservercore.h"
       
    32 #include "mcecssession.h"
       
    33 #include "mcecssessionimplementation.h"
       
    34 #include "mcesipconnection.h"
       
    35 #include "mcecomsession.h"
       
    36 #include "mcelocaladdrresolver.h"
       
    37 
       
    38 // CONSTRUCTION
       
    39 UT_CMceSipConnection* UT_CMceSipConnection::NewL()
       
    40     {
       
    41     UT_CMceSipConnection* self = UT_CMceSipConnection::NewLC(); 
       
    42     CleanupStack::Pop();
       
    43 
       
    44     return self;
       
    45     }
       
    46 
       
    47 UT_CMceSipConnection* UT_CMceSipConnection::NewLC()
       
    48     {
       
    49     UT_CMceSipConnection* self = new( ELeave ) UT_CMceSipConnection();
       
    50     CleanupStack::PushL( self );
       
    51 
       
    52 	self->ConstructL(); 
       
    53 
       
    54 
       
    55     return self;
       
    56     }
       
    57 
       
    58 // Destructor (virtual by CBase)
       
    59 UT_CMceSipConnection::~UT_CMceSipConnection()
       
    60     {
       
    61     }
       
    62 
       
    63 // Default constructor
       
    64 UT_CMceSipConnection::UT_CMceSipConnection()
       
    65     {
       
    66     }
       
    67 
       
    68 // Second phase construct
       
    69 void UT_CMceSipConnection::ConstructL()
       
    70     {
       
    71     // The ConstructL from the base class CEUnitTestSuiteClass must be called.
       
    72     // It generates the test case table.
       
    73     CEUnitTestSuiteClass::ConstructL();
       
    74     }
       
    75 
       
    76 //  METHODS
       
    77 
       
    78 
       
    79 
       
    80 void UT_CMceSipConnection::SetupL(  )
       
    81     {
       
    82     CMCETls::OpenL();
       
    83     SdpCodecStringPool::OpenL();
       
    84         
       
    85     iIds.iAppUID = 1;
       
    86     iIds.iProfileID = 1;
       
    87     iIds.iManagerType = KMceCSSIPSession;
       
    88     iIds.iDialogType = KMceDlgTypeInvite;
       
    89     iStorage = CMCETls::Storage();
       
    90     
       
    91     iServerCore = CMceServerCore::NewL();
       
    92     
       
    93     
       
    94 	CDesC8ArrayFlat* params = new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity );
       
    95 	CleanupStack::PushL( params );
       
    96 	params->AppendL( _L8("User <user2@host>") );
       
    97 	params->AppendL( _L8("User <user@host>") );
       
    98     
       
    99     CMceMsgTextArray* msgParams = new (ELeave) CMceMsgTextArray( *params );
       
   100     CleanupStack::PushL( msgParams );
       
   101     iStorage->StoreL( iIds, *msgParams );
       
   102     CleanupStack::PopAndDestroy( msgParams );
       
   103     CleanupStack::PopAndDestroy( params );
       
   104     
       
   105     iSession = CMceCsSession::NewL( *iServerCore );
       
   106     iSession->SetClientUidL( iIds, RMessage2() );
       
   107     iSession->CreateSubSessionL(iIds, RMessage2());
       
   108     iSipSession =  static_cast<CMceSipSession*>((iSession->Implementation().SubSessions())[0]);
       
   109     
       
   110     iSipSession->iBody = CMceComSession::NewL( CMceComSession::EOutSession );
       
   111     iConnection = &iSipSession->SIPConnection();
       
   112     } 
       
   113 
       
   114 void UT_CMceSipConnection::Teardown(  )
       
   115     {
       
   116     CMCETls::Close();
       
   117    	delete iSession;
       
   118    	delete iServerCore;
       
   119     SdpCodecStringPool::Close();
       
   120     }
       
   121 
       
   122 void UT_CMceSipConnection::UT_CMceSipConnection_StateL()
       
   123     {
       
   124     EUNIT_ASSERT( iConnection->State() >= 0 );
       
   125     }
       
   126     
       
   127 void UT_CMceSipConnection::UT_CMceSipConnection_ConnectionL()
       
   128     {
       
   129     EUNIT_ASSERT( &iConnection->Connection() != NULL );
       
   130     }
       
   131     
       
   132 void UT_CMceSipConnection::UT_CMceSipConnection_AttachLL()
       
   133     {
       
   134     EUNIT_ASSERT( iConnection->iSessions.Count() == 1 );
       
   135   	EUNIT_ASSERT_LEAVE( iConnection->AttachL( *iSipSession ) );
       
   136     EUNIT_ASSERT( iConnection->iSessions.Count() == 1 );
       
   137     iConnection->Connection().SetState( CSIPConnection::EInactive );
       
   138   	EUNIT_ASSERT_LEAVE( iConnection->AttachL( *iSipSession ) );
       
   139     EUNIT_ASSERT( iConnection->iSessions.Count() == 1 );
       
   140       	
       
   141     }
       
   142     
       
   143 void UT_CMceSipConnection::UT_CMceSipConnection_DetachL()
       
   144     {
       
   145     EUNIT_ASSERT( iConnection->iSessions.Count() == 1 );
       
   146   	EUNIT_ASSERT( iConnection->Detach( *iSipSession ) == 0 );
       
   147     EUNIT_ASSERT( iConnection->iSessions.Count() == 0 );
       
   148   	
       
   149   	EUNIT_ASSERT( iConnection->Detach( *iSipSession ) == 0 );
       
   150     }
       
   151     
       
   152 void UT_CMceSipConnection::UT_CMceSipConnection_IncomingRequest_1L()
       
   153     {
       
   154     CMceSipManager& manager = iServerCore->Manager();
       
   155     TUint32 profileId = 1;
       
   156     CSIPProfile& profile = manager.ProfileL( profileId );
       
   157     
       
   158   	iSipSession->NextState( KMceStateTerminated );
       
   159   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 1 );
       
   160 
       
   161 //OK case
       
   162     CSIPServerTransaction* srvtransaction = 
       
   163         MCETestHelper::ServerTransactionL( SipStrConsts::EInvite, ETrue );
       
   164 
       
   165   	iConnection->IncomingRequest( srvtransaction );
       
   166   	iStorage->ExecuteCallback();
       
   167   	
       
   168   	MCE_CHECK_MEMORY_LEAVE( iSession->Implementation().SubSessions().Count() != 2 )
       
   169   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 2 );
       
   170   	EUNIT_ASSERT( &(iSession->Implementation().SubSessions()[1]->Request()) == srvtransaction );
       
   171   	
       
   172   	MCE_RESET_STUBS();
       
   173 //MESSAGE is not accepted
       
   174 
       
   175     srvtransaction = 
       
   176         MCETestHelper::ServerTransactionL( SipStrConsts::EMessage, EFalse );
       
   177 
       
   178   	iConnection->IncomingRequest( srvtransaction );
       
   179   	MCE_CHECK_MEMORY_LEAVE( !iStorage->iSipSentResponse || 
       
   180   	                        iStorage->iSipSentResponse->StatusCode() != KMceSipNotImplemented )
       
   181   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 2 );
       
   182   	MCE_ASSERT_STUBS( CMCETls::ENone /*mmaction*/, 
       
   183   	                  CMCETls::ENone /*mmsdpaction*/, 
       
   184                       SipStrConsts::EEmpty /*sentMethod*/, 
       
   185                       KMceSipNotImplemented /*sentResponse*/);
       
   186   	MCE_RESET_STUBS();
       
   187 
       
   188 //OPTIONS is not accepted
       
   189     srvtransaction = 
       
   190         MCETestHelper::ServerTransactionL( SipStrConsts::EOptions, EFalse );
       
   191 
       
   192   	iConnection->IncomingRequest( srvtransaction );
       
   193 	MCE_CHECK_MEMORY_LEAVE( !iStorage->iSipSentResponse || 
       
   194   	                        iStorage->iSipSentResponse->StatusCode() != KMceSipNotImplemented )
       
   195   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 2 );
       
   196   	MCE_ASSERT_STUBS( CMCETls::ENone /*mmaction*/,
       
   197   	                  CMCETls::ENone /*mmsdpaction*/, 
       
   198                       SipStrConsts::EEmpty /*sentMethod*/, 
       
   199                       KMceSipNotImplemented /*sentResponse*/);
       
   200   	MCE_RESET_STUBS();
       
   201   	
       
   202 //UPDATE-> 501 Not Implemented
       
   203     srvtransaction = 
       
   204         MCETestHelper::ServerTransactionL( SipStrConsts::EUpdate, EFalse );
       
   205 
       
   206   	iConnection->IncomingRequest( srvtransaction );
       
   207   	MCE_CHECK_MEMORY_LEAVE( !iStorage->iSipSentResponse || 
       
   208   	                        iStorage->iSipSentResponse->StatusCode() != KMceSipNotImplemented )
       
   209   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 2 );
       
   210   	MCE_ASSERT_STUBS( CMCETls::ENone /*mmaction*/, 
       
   211   	                  CMCETls::ENone /*mmsdpaction*/, 
       
   212                       SipStrConsts::EEmpty /*sentMethod*/, 
       
   213                       KMceSipNotImplemented /*sentResponse*/);
       
   214 
       
   215   	MCE_RESET_STUBS();
       
   216 
       
   217 //Client resolver fails
       
   218     iStorage->SetLeave( KErrGeneral );
       
   219     srvtransaction = 
       
   220         MCETestHelper::ServerTransactionL( SipStrConsts::EInvite, EFalse );
       
   221 
       
   222   	iConnection->IncomingRequest( srvtransaction );
       
   223   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 2 );
       
   224 
       
   225     iStorage->SetLeave( KErrNone );
       
   226     
       
   227 //fake situation, just for testing
       
   228 
       
   229     CSIPServerTransaction* tmp = iSession->Implementation().SubSessions()[1]->PopRequest();
       
   230     CleanupStack::PushL( tmp );
       
   231     
       
   232     srvtransaction = 
       
   233         MCETestHelper::ServerTransactionL( SipStrConsts::EBye, EFalse );
       
   234     iConnection->IncomingRequest( srvtransaction );
       
   235   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 2 );
       
   236     iSession->Implementation().SubSessions()[1]->iPendingReceivedRequests.AppendL( tmp );
       
   237     CleanupStack::Pop( tmp );
       
   238 
       
   239   	
       
   240 //state leaves
       
   241     iStorage->iMediaManagerDecodeStatus = KMceSipWarnMiscellaneous;
       
   242     srvtransaction = 
       
   243         MCETestHelper::ServerTransactionL( SipStrConsts::EInvite, ETrue );
       
   244 
       
   245   	iConnection->IncomingRequest( srvtransaction );
       
   246   	iStorage->ExecuteCallback();
       
   247   	
       
   248   	TInt count = iSession->Implementation().SubSessions().Count();
       
   249   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 2 );
       
   250   	
       
   251 
       
   252 //INVITE does not got state machine due offer creation problem
       
   253     iStorage->SetLeave( KErrNone );
       
   254 
       
   255     srvtransaction = 
       
   256         MCETestHelper::ServerTransactionL( SipStrConsts::EInvite, EFalse );
       
   257 
       
   258   	iConnection->IncomingRequest( srvtransaction );
       
   259   	iStorage->ExecuteCallback();
       
   260   	
       
   261   	MCE_CHECK_MEMORY_LEAVE( iSession->Implementation().SubSessions().Count() != 3 )
       
   262   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 3 );
       
   263     }
       
   264     
       
   265 void UT_CMceSipConnection::UT_CMceSipConnection_IncomingRequest_2L()
       
   266     {
       
   267   	
       
   268   	iSipSession->NextState( KMceStateTerminated );
       
   269   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 1 );
       
   270 
       
   271     CSIPServerTransaction* srvtransaction = 
       
   272         MCETestHelper::ServerTransactionL( SipStrConsts::EBye );
       
   273         
       
   274   	iConnection->IncomingRequest( srvtransaction, iSipSession->Dialog()->Dialog() );
       
   275   	MCE_CHECK_MEMORY_LEAVE( &iSipSession->Request() != srvtransaction )
       
   276   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 1 );
       
   277   	EUNIT_ASSERT( &iSipSession->Request() == srvtransaction );
       
   278     MCE_RESET_STUBS();
       
   279     
       
   280     // MESSAGE
       
   281     srvtransaction = 
       
   282         MCETestHelper::ServerTransactionL( SipStrConsts::EMessage );
       
   283         
       
   284   	iConnection->IncomingRequest( srvtransaction, iSipSession->Dialog()->Dialog() );
       
   285   	
       
   286   	//Incomming Requests will be passed to the client 
       
   287   	//Responses to those requests will be created by the client itself.
       
   288   	
       
   289   	EUNIT_ASSERT( !iStorage->iSipSentResponse )
       
   290   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 1 );
       
   291     MCE_ASSERT_STUBS( CMCETls::ENone ,
       
   292                       CMCETls::ENone ,  
       
   293                       SipStrConsts::EEmpty , 
       
   294                       SipStrConsts::EEmpty );
       
   295     MCE_RESET_STUBS();
       
   296 	
       
   297 // OPTIONS -> 501 Not Implemented
       
   298     srvtransaction = 
       
   299         MCETestHelper::ServerTransactionL( SipStrConsts::EOptions );
       
   300         
       
   301   	iConnection->IncomingRequest( srvtransaction, iSipSession->Dialog()->Dialog() );
       
   302   	EUNIT_ASSERT( !iStorage->iSipSentResponse )
       
   303   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 1 );
       
   304   	MCE_ASSERT_STUBS( CMCETls::ENone,
       
   305   	                  CMCETls::ENone ,  
       
   306                       SipStrConsts::EEmpty, 
       
   307                       SipStrConsts::EEmpty);
       
   308     MCE_RESET_STUBS();                  
       
   309 		
       
   310 // unknown -> 501 Not Implemented
       
   311 
       
   312     iSipSession->NextState( KMceStateEstablished );
       
   313     
       
   314     srvtransaction = 
       
   315         MCETestHelper::ServerTransactionL( SipStrConsts::ERequire );
       
   316         
       
   317   	iConnection->IncomingRequest( srvtransaction, iSipSession->Dialog()->Dialog() );
       
   318 
       
   319   	MCE_CHECK_MEMORY_LEAVE( iStorage->iSipSentResponse )
       
   320   	EUNIT_ASSERT( !iStorage->iSipSentResponse )
       
   321   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 1 );
       
   322   	MCE_ASSERT_STUBS( CMCETls::ENone,
       
   323   	                  CMCETls::ENone ,  
       
   324                       SipStrConsts::EEmpty , 
       
   325                       SipStrConsts::EEmpty );
       
   326     MCE_RESET_STUBS();                      
       
   327 
       
   328 //there is pending response
       
   329   	iSipSession->NextState( KMceStateIdle );
       
   330   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 1 );
       
   331 
       
   332     srvtransaction = 
       
   333         MCETestHelper::ServerTransactionL( SipStrConsts::EBye );
       
   334     
       
   335   	iConnection->IncomingRequest( srvtransaction, iSipSession->Dialog()->Dialog() );
       
   336   	MCE_CHECK_MEMORY_LEAVE( !iStorage->iSipSentResponse || 
       
   337   	                        iStorage->iSipSentResponse->StatusCode() != KMceSipServerInternalError )
       
   338   	EUNIT_ASSERT( iSession->Implementation().SubSessions().Count() == 1 );
       
   339   	MCE_ASSERT_STUBS( CMCETls::ENone /*mmaction*/, 
       
   340   	                  CMCETls::ENone /*mmsdpaction*/, 
       
   341                       SipStrConsts::EEmpty /*sentMethod*/, 
       
   342                       KMceSipServerInternalError /*sentResponse*/ );
       
   343     }
       
   344     
       
   345 void UT_CMceSipConnection::UT_CMceSipConnection_IncomingResponse_1L()
       
   346     {
       
   347   	iSipSession->NextState( KMceStateTerminated );
       
   348     
       
   349     CSIPClientTransaction* clitransaction = 
       
   350         MCETestHelper::ClientTransactionLC( SipStrConsts::ECancel, KMceSipOK, SipStrConsts::EPhraseOk, EFalse );
       
   351 	iSipSession->SetPendingTransactionL( clitransaction );
       
   352     CleanupStack::Pop( clitransaction );
       
   353     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 1 );
       
   354 
       
   355     clitransaction->iState = CSIPTransactionBase::ETerminated;
       
   356 
       
   357   	iConnection->IncomingResponse( *clitransaction );
       
   358   	EUNIT_ASSERT( &iSipSession->Response() == clitransaction );
       
   359     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   360   	
       
   361 //SIP behaving badly
       
   362     clitransaction = 
       
   363         MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite, KMceSipOK, SipStrConsts::EPhraseOk, ETrue );
       
   364     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   365 
       
   366   	iConnection->IncomingResponse( *clitransaction );
       
   367   	EUNIT_ASSERT( &iSipSession->Response() != clitransaction );
       
   368     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   369 
       
   370     CleanupStack::PopAndDestroy( clitransaction );
       
   371   	
       
   372     }
       
   373     
       
   374 void UT_CMceSipConnection::UT_CMceSipConnection_IncomingResponse_2L()
       
   375     {
       
   376 
       
   377   	iSipSession->NextState( KMceStateTerminated );
       
   378     
       
   379     CSIPClientTransaction* clitransaction = 
       
   380       MCETestHelper::ClientTransactionLC( SipStrConsts::EBye, KMceSipOK, SipStrConsts::EPhraseOk, EFalse );
       
   381 	iSipSession->SetPendingTransactionL( clitransaction );
       
   382     CleanupStack::Pop( clitransaction );
       
   383     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 1 );
       
   384     
       
   385     clitransaction->iState = CSIPTransactionBase::ETerminated;
       
   386 
       
   387   	iConnection->IncomingResponse( *clitransaction, *iSipSession->Dialog() );
       
   388   	EUNIT_ASSERT( &iSipSession->Response() == clitransaction );
       
   389     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   390 
       
   391 //SIP behaving badly
       
   392     clitransaction = 
       
   393         MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite, KMceSipOK, SipStrConsts::EPhraseOk, ETrue );
       
   394     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   395 
       
   396   	iConnection->IncomingResponse( *clitransaction, *iSipSession->Dialog() );
       
   397   	EUNIT_ASSERT( &iSipSession->Response() != clitransaction );
       
   398     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   399 
       
   400     CleanupStack::PopAndDestroy( clitransaction );
       
   401 
       
   402     
       
   403   	
       
   404     }
       
   405     
       
   406 void UT_CMceSipConnection::UT_CMceSipConnection_IncomingResponse_3L()
       
   407     {
       
   408     CSIPClientTransaction* clitransaction = 
       
   409         MCETestHelper::ClientTransactionLC( 
       
   410             SipStrConsts::EInvite, KMceSipRinging, 
       
   411             SipStrConsts::EPhraseRinging, EFalse );
       
   412       
       
   413 	iSipSession->SetPendingTransactionL( clitransaction );
       
   414     CleanupStack::Pop( clitransaction );
       
   415     EUNIT_ASSERT_EQUALS( 1, iSipSession->PendingTransactions().Count() )
       
   416     iSipSession->NextState( KMceStateOffering );
       
   417     
       
   418     // Callback for forked dialogs called with a NULL pointer
       
   419   	iConnection->IncomingResponse( *clitransaction, NULL );
       
   420   	EUNIT_ASSERT_EQUALS( 0, iSipSession->iForkedDialogs.Count() )
       
   421   	EUNIT_ASSERT_EQUALS( 1, iSipSession->PendingTransactions().Count() )
       
   422   	
       
   423   	// 180 response to the original dialog
       
   424   	iConnection->IncomingResponse( *clitransaction, *iSipSession->Dialog() );
       
   425   	EUNIT_ASSERT_EQUALS( 0, iSipSession->iForkedDialogs.Count() )
       
   426   	EUNIT_ASSERT_EQUALS( 1, iSipSession->PendingTransactions().Count() );
       
   427   	
       
   428   	// Forked dialog created for another 180 response
       
   429   	CUri8* uri = CUri8::NewLC(); //OK
       
   430   	uri->SetComponentL( _L8("sip"), EUriScheme );
       
   431   	uri->SetComponentL( _L8("user"), EUriUserinfo );
       
   432   	uri->SetComponentL( _L8("nokia.com"), EUriHost );
       
   433     CSIPFromHeader* fromheader = CSIPFromHeader::DecodeL(_L8("User <user2@host>")); 
       
   434     CleanupStack::PushL( fromheader );
       
   435     CSIPInviteDialogAssoc* forked = 
       
   436         CSIPInviteDialogAssoc::NewL( iSipSession->SIPConnection().Connection(),
       
   437                                      fromheader, uri );
       
   438     CleanupStack::Pop( fromheader );
       
   439     CleanupStack::Pop( uri );
       
   440     CleanupStack::PushL( forked );
       
   441   	iConnection->IncomingResponse( *clitransaction, forked );
       
   442     CleanupStack::Pop( forked ); 
       
   443     MCE_CHECK_MEMORY_LEAVE( iSipSession->iForkedDialogs.Count() != 1 )
       
   444   	EUNIT_ASSERT_EQUALS( 1, iSipSession->iForkedDialogs.Count() )
       
   445   	EUNIT_ASSERT_EQUALS( 1, iSipSession->PendingTransactions().Count() );
       
   446 
       
   447   	// 200 response for the forked dialog -> session established
       
   448   	MCETestHelper::SetResponseL( 
       
   449   	    *clitransaction, KMceSipOK, SipStrConsts::EPhraseOk , ETrue );
       
   450   	clitransaction->SetState( CSIPTransactionBase::ETerminated );
       
   451   	forked->Dialog().iState = CSIPDialog::EConfirmed;
       
   452   	iConnection->IncomingResponse( *clitransaction, *forked );
       
   453   	MCE_CHECK_MEMORY_LEAVE( iSipSession->PendingTransactions().Count() != 1 )
       
   454   	EUNIT_ASSERT_EQUALS( 1, iSipSession->iForkedDialogs.Count() );
       
   455   	EUNIT_ASSERT_EQUALS( 1, iSipSession->PendingTransactions().Count() );  	
       
   456   	
       
   457   	// Invite transaction completed
       
   458   	iConnection->InviteCompleted( *clitransaction );
       
   459   	EUNIT_ASSERT_EQUALS( 0, iSipSession->iForkedDialogs.Count() );
       
   460   	EUNIT_ASSERT_EQUALS( 0, iSipSession->PendingTransactions().Count() );
       
   461     }
       
   462     
       
   463 void UT_CMceSipConnection::UT_CMceSipConnection_IncomingResponse_4L()
       
   464     {
       
   465     CSIPClientTransaction* trx = NULL;
       
   466     CSIPRegistrationBinding* bnd = NULL;
       
   467   	iConnection->IncomingResponse( *trx, *bnd );
       
   468   	
       
   469     }
       
   470     
       
   471 void UT_CMceSipConnection::UT_CMceSipConnection_ErrorOccured_1L()
       
   472     {
       
   473     
       
   474     CSIPServerTransaction* srvtransaction = 
       
   475       MCETestHelper::ServerTransactionL( SipStrConsts::EBye, EFalse );
       
   476     CleanupStack::PushL( srvtransaction );
       
   477     iSipSession->iPendingReceivedRequests.AppendL( srvtransaction );
       
   478     CleanupStack::Pop( srvtransaction );
       
   479   	iConnection->ErrorOccured( KErrServerTerminated, *srvtransaction );
       
   480     
       
   481     CSIPClientTransaction* clitransaction = 
       
   482       MCETestHelper::ClientTransactionLC( SipStrConsts::EBye );
       
   483       
       
   484 	iSipSession->SetPendingTransactionL( clitransaction );
       
   485     CleanupStack::Pop( clitransaction );
       
   486     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 1 );
       
   487 
       
   488     clitransaction->iState = CSIPTransactionBase::ETerminated;
       
   489 
       
   490   	iConnection->ErrorOccured( KErrServerTerminated, *clitransaction );
       
   491     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   492   	
       
   493 //SIP behaving badly
       
   494     clitransaction = 
       
   495         MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite, KMceSipOK, SipStrConsts::EPhraseOk, ETrue );
       
   496     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   497 
       
   498   	iConnection->ErrorOccured( KErrServerTerminated, *clitransaction );
       
   499   	EUNIT_ASSERT( &iSipSession->Response() != clitransaction );
       
   500     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   501 
       
   502     CleanupStack::PopAndDestroy( clitransaction );
       
   503 
       
   504   	
       
   505     }
       
   506     
       
   507 void UT_CMceSipConnection::UT_CMceSipConnection_ErrorOccured_2L()
       
   508     {
       
   509 
       
   510     CSIPServerTransaction* srvtransaction = 
       
   511       MCETestHelper::ServerTransactionL( SipStrConsts::EBye, EFalse );
       
   512     
       
   513     CleanupStack::PushL( srvtransaction );
       
   514     iSipSession->iPendingReceivedRequests.AppendL( srvtransaction );
       
   515     CleanupStack::Pop( srvtransaction );
       
   516   	
       
   517   	iConnection->ErrorOccured( KErrServerTerminated, *srvtransaction, *iSipSession->Dialog() );
       
   518 
       
   519 
       
   520 //SIP behaving badly
       
   521     CSIPClientTransaction* clitransaction = 
       
   522         MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite, KMceSipOK, SipStrConsts::EPhraseOk, ETrue );
       
   523     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   524 
       
   525   		iConnection->ErrorOccured( KErrServerTerminated, *clitransaction, *iSipSession->Dialog() );
       
   526   	EUNIT_ASSERT( &iSipSession->Response() != clitransaction );
       
   527     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   528 
       
   529     CleanupStack::PopAndDestroy( clitransaction );
       
   530 
       
   531   	
       
   532     }
       
   533     
       
   534 void UT_CMceSipConnection::UT_CMceSipConnection_ErrorOccured_3L()
       
   535     {
       
   536     CSIPDialogAssocBase* dlg = NULL;
       
   537     
       
   538   	iConnection->ErrorOccured( KErrServerTerminated, *iSipSession->Dialog() );
       
   539 
       
   540   	iConnection->ErrorOccured( KErrServerTerminated, *dlg );
       
   541   	
       
   542     }
       
   543     
       
   544 void UT_CMceSipConnection::UT_CMceSipConnection_ErrorOccured_4L()
       
   545     {
       
   546     CSIPClientTransaction* trx = NULL;
       
   547     CSIPRegistrationBinding* bnd = NULL;
       
   548   	iConnection->ErrorOccured( KErrServerTerminated, *trx, *bnd );
       
   549   	
       
   550     }
       
   551     
       
   552 void UT_CMceSipConnection::UT_CMceSipConnection_ErrorOccured_5L()
       
   553     {
       
   554   	CSIPRefresh* refresh = NULL;
       
   555   	iConnection->ErrorOccured( KErrServerTerminated, *refresh );
       
   556     }
       
   557     
       
   558 void UT_CMceSipConnection::UT_CMceSipConnection_ErrorOccured_6L()
       
   559     {
       
   560     CSIPRegistrationBinding* bnd = NULL;
       
   561   	iConnection->ErrorOccured( KErrServerTerminated, *bnd );
       
   562   	
       
   563     }
       
   564     
       
   565 void UT_CMceSipConnection::UT_CMceSipConnection_InviteCompletedL()
       
   566     {
       
   567 
       
   568     CSIPClientTransaction* clitransaction = 
       
   569       MCETestHelper::ClientTransactionLC( SipStrConsts::EInvite, KMceSipOK, SipStrConsts::EPhraseOk );
       
   570 	iSipSession->SetPendingTransactionL( clitransaction );
       
   571     CleanupStack::Pop( clitransaction );
       
   572     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 1 );
       
   573 
       
   574     clitransaction->iState = CSIPTransactionBase::ETerminated;
       
   575   	
       
   576   	iConnection->IncomingResponse( *clitransaction );
       
   577   	EUNIT_ASSERT( &iSipSession->Response() == clitransaction );
       
   578     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 1 );
       
   579 
       
   580   	iConnection->InviteCompleted( *clitransaction );
       
   581     EUNIT_ASSERT ( iSipSession->PendingTransactions().Count() == 0 );
       
   582   	
       
   583     }
       
   584     
       
   585 void UT_CMceSipConnection::UT_CMceSipConnection_InviteCanceledL()
       
   586     {
       
   587     CSIPServerTransaction* srvtransaction = 
       
   588       MCETestHelper::ServerTransactionL( SipStrConsts::EInvite, EFalse );
       
   589       
       
   590     CleanupStack::PushL( srvtransaction );
       
   591     iSipSession->iPendingReceivedRequests.AppendL( srvtransaction );
       
   592     CleanupStack::Pop( srvtransaction );
       
   593   	
       
   594   	iConnection->InviteCanceled( *srvtransaction );
       
   595     EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateTerminated );
       
   596     EUNIT_ASSERT ( iStorage->iMediaManagerAction == CMCETls::ECloseSession );
       
   597     
       
   598   	
       
   599     }
       
   600     
       
   601 void UT_CMceSipConnection::UT_CMceSipConnection_ConnectionStateChangedL()
       
   602     {
       
   603     iConnection->Connection().SetState( CSIPConnection::ESuspended );
       
   604   	iConnection->ConnectionStateChanged( CSIPConnection::ESuspended );
       
   605   	iConnection->ConnectionStateChanged( CSIPConnection::ESuspended );
       
   606     EUNIT_ASSERT( !iSipSession->Body()->iIsConnectionActive );
       
   607   	
       
   608     iConnection->Connection().SetState( CSIPConnection::EActive );
       
   609   	iConnection->ConnectionStateChanged( CSIPConnection::EActive );
       
   610     EUNIT_ASSERT( iSipSession->Body()->iIsConnectionActive );
       
   611   	
       
   612     iConnection->Connection().SetState( CSIPConnection::EInactive );
       
   613   	iConnection->ConnectionStateChanged( CSIPConnection::EInactive );
       
   614     EUNIT_ASSERT( !iSipSession->Body()->iIsConnectionActive );
       
   615   	
       
   616     iConnection->Connection().SetState( CSIPConnection::EUnavailable );
       
   617   	iConnection->ConnectionStateChanged( CSIPConnection::EUnavailable );
       
   618     EUNIT_ASSERT( !iSipSession->Body()->iIsConnectionActive );
       
   619   	
       
   620   	
       
   621     }
       
   622     
       
   623     
       
   624 void UT_CMceSipConnection::UT_CMceSipConnection_FillWithMatchingAddrFamilyL()
       
   625     {
       
   626     TInetAddr addr;
       
   627     TInetAddr nextHop;
       
   628     
       
   629     // No next-hop, only IPv4 address available
       
   630     iConnection->iLocalAddrResolver->iAddr.SetAddress(INET_ADDR(2,3,4,5));
       
   631     iConnection->iLocalAddrResolver->iIPv4Addr.SetAddress(INET_ADDR(2,3,4,5));
       
   632     iConnection->FillWithMatchingAddrFamily(addr,NULL);
       
   633     EUNIT_ASSERT(addr.CmpAddr(iConnection->iLocalAddrResolver->iIPv4Addr));
       
   634     EUNIT_ASSERT(addr.CmpAddr(iConnection->iLocalAddrResolver->iAddr));
       
   635     
       
   636     // No next-hop, only IPv6 address available
       
   637     iConnection->iLocalAddrResolver->iIPv4Addr.Init(KAfInet);
       
   638     User::LeaveIfError(
       
   639         iConnection->iLocalAddrResolver->iAddr.Input(_L("::ffff:2.3.4.5")));    
       
   640     iConnection->FillWithMatchingAddrFamily(addr,NULL);
       
   641     EUNIT_ASSERT(!addr.CmpAddr(iConnection->iLocalAddrResolver->iIPv4Addr));
       
   642     EUNIT_ASSERT(addr.CmpAddr(iConnection->iLocalAddrResolver->iAddr));    
       
   643     
       
   644     // No next-hop, both IPv4 and IPv6 address available
       
   645     iConnection->iLocalAddrResolver->iIPv4Addr.SetAddress(INET_ADDR(2,3,4,5));
       
   646     iConnection->FillWithMatchingAddrFamily(addr,NULL);
       
   647     EUNIT_ASSERT(addr.CmpAddr(iConnection->iLocalAddrResolver->iIPv4Addr));
       
   648     EUNIT_ASSERT(!addr.CmpAddr(iConnection->iLocalAddrResolver->iAddr));    
       
   649     
       
   650     // Next-hop IPv4, local address IPv4
       
   651     addr.Init(KAfInet);
       
   652     nextHop.SetAddress(INET_ADDR(1,2,3,4));
       
   653     iConnection->iLocalAddrResolver->iIPv4Addr.SetAddress(INET_ADDR(2,3,4,5));
       
   654     iConnection->FillWithMatchingAddrFamily(addr,&nextHop);
       
   655     EUNIT_ASSERT(addr.CmpAddr(iConnection->iLocalAddrResolver->iIPv4Addr));
       
   656     
       
   657     // Next-hop IPv4, local address IPv6, but can be converted to IPv6
       
   658     addr.Init(KAfInet);
       
   659     iConnection->iLocalAddrResolver->iIPv4Addr.Init(KAfInet);
       
   660     User::LeaveIfError(
       
   661         iConnection->iLocalAddrResolver->iAddr.Input(_L("::ffff:2.3.4.5")));
       
   662     iConnection->FillWithMatchingAddrFamily(addr,&nextHop);
       
   663     TInetAddr tmp;
       
   664     tmp.SetAddress(INET_ADDR(2,3,4,5));
       
   665     EUNIT_ASSERT(addr.CmpAddr(tmp));
       
   666     
       
   667     // Next-hop IPv4, local address IPv6, cannot be converted to IPv6
       
   668     addr.Init(KAfInet);
       
   669     User::LeaveIfError(
       
   670         iConnection->iLocalAddrResolver->iAddr.Input(
       
   671             _L("2001:490:ff2:1002:0:dead:cafe:fe")));
       
   672     iConnection->FillWithMatchingAddrFamily(addr,&nextHop);
       
   673     EUNIT_ASSERT(addr.CmpAddr(iConnection->iLocalAddrResolver->iAddr));    
       
   674     
       
   675     // Next-hop IPv6, local address IPv6
       
   676     addr.Init(KAfInet);
       
   677     User::LeaveIfError(nextHop.Input(_L("2001:490:ff2:1002:0:dead:cafe:de")));
       
   678     iConnection->FillWithMatchingAddrFamily(addr,&nextHop);
       
   679     EUNIT_ASSERT(addr.CmpAddr(iConnection->iLocalAddrResolver->iAddr));
       
   680     
       
   681     // Next-hop IPv6, local address IPv4, convert to IPv6
       
   682     addr.Init(KAfInet);
       
   683     iConnection->iLocalAddrResolver->iAddr.SetAddress(INET_ADDR(2,3,4,5));
       
   684     iConnection->FillWithMatchingAddrFamily(addr,&nextHop);
       
   685     EUNIT_ASSERT_EQUALS(KAfInet6,addr.Family());	        
       
   686     }
       
   687 
       
   688 
       
   689 void UT_CMceSipConnection::UT_CMceSipConnection_LocalIPAddressLL()
       
   690 	{	
       
   691 	TInetAddr nextHop;
       
   692 	TInetAddr address = iConnection->LocalIPAddressL( iSipSession->NextHopL( nextHop ) );
       
   693 	EUNIT_ASSERT( !address.Match( INET_ADDR( 0,0,0,0 ) ) );
       
   694 	}
       
   695 
       
   696 void UT_CMceSipConnection::UT_CMceSipConnection_ConnectionUpdateLL()
       
   697     {
       
   698     // Profile configured, tos is ignored
       
   699     TUint tosVal( 40 );
       
   700     
       
   701     /*
       
   702     
       
   703     MceSipConnection::UpdateConnectionL( ) - method is changed, now it doesn't
       
   704     handle profiles anymore so caller must check from SipSession if profile is
       
   705     configured or not. example is below.
       
   706     
       
   707     if( !iSipSession->ProfileConfigured )
       
   708     	{
       
   709 	    iConnection->UpdateConnectionL( tosVal );
       
   710     	EUNIT_ASSERT( iConnection->iCurrentSignallingTypeOfService == tosVal );
       
   711     	}
       
   712     */
       
   713 
       
   714     // tos is set
       
   715     iConnection->UpdateConnectionL( tosVal );
       
   716     EUNIT_ASSERT( iConnection->iCurrentSignallingTypeOfService == tosVal );
       
   717     
       
   718     // Tos is not changing
       
   719     iConnection->UpdateConnectionL( tosVal );
       
   720     EUNIT_ASSERT( iConnection->iCurrentSignallingTypeOfService == tosVal );
       
   721     }
       
   722 
       
   723 
       
   724 void UT_CMceSipConnection::UT_CMceSipConnection_IsProfileUsedInSessionL()
       
   725     {
       
   726     CMceSipManager& manager = iServerCore->Manager();
       
   727     TUint32 profileId = 1;
       
   728     CSIPProfile& profile = manager.ProfileL( profileId );
       
   729 
       
   730 	TBool profileUsed = EFalse;
       
   731   	profileUsed = iConnection->IsProfileUsedInSession( profile );
       
   732     EUNIT_ASSERT( profileUsed == ETrue );
       
   733     
       
   734     UT_CMceSipConnection_DetachL();
       
   735     profileUsed = EFalse;
       
   736   	profileUsed = iConnection->IsProfileUsedInSession( profile );
       
   737     EUNIT_ASSERT( profileUsed == EFalse );
       
   738     }
       
   739 
       
   740     
       
   741 //  TEST TABLE
       
   742 
       
   743 EUNIT_BEGIN_TEST_TABLE( 
       
   744     UT_CMceSipConnection,
       
   745     "UT_CMceSipConnection",
       
   746     "UNIT" )
       
   747 
       
   748 EUNIT_TEST(
       
   749     "Is Profile used in any session - test ",
       
   750     "CMceSipConnection",
       
   751     "Used profile",
       
   752     "FUNCTIONALITY",
       
   753     SetupL, UT_CMceSipConnection_IsProfileUsedInSessionL, Teardown)
       
   754 
       
   755 EUNIT_TEST(
       
   756     "State - test ",
       
   757     "CMceSipConnection",
       
   758     "State",
       
   759     "FUNCTIONALITY",
       
   760     SetupL, UT_CMceSipConnection_StateL, Teardown)
       
   761 
       
   762 EUNIT_TEST(
       
   763     "AttachL - test ",
       
   764     "CMceSipConnection",
       
   765     "AttachL",
       
   766     "FUNCTIONALITY",
       
   767     SetupL, UT_CMceSipConnection_AttachLL, Teardown)
       
   768 
       
   769 EUNIT_TEST(
       
   770     "Detach - test ",
       
   771     "CMceSipConnection",
       
   772     "Detach",
       
   773     "FUNCTIONALITY",
       
   774     SetupL, UT_CMceSipConnection_DetachL, Teardown)
       
   775 
       
   776 EUNIT_TEST(
       
   777     "LocalIPAddressL - test ",
       
   778     "CMceSipConnection",
       
   779     "LocalIPAddressL",
       
   780     "FUNCTIONALITY",
       
   781     SetupL, UT_CMceSipConnection_LocalIPAddressLL, Teardown)
       
   782 
       
   783 EUNIT_TEST(
       
   784     "IncomingRequest - test ",
       
   785     "CMceSipConnection",
       
   786     "IncomingRequest",
       
   787     "FUNCTIONALITY",
       
   788     SetupL, UT_CMceSipConnection_IncomingRequest_1L, Teardown)
       
   789 
       
   790 EUNIT_TEST(
       
   791     "IncomingRequest - test 2 ",
       
   792     "CMceSipConnection",
       
   793     "IncomingRequest",
       
   794     "FUNCTIONALITY",
       
   795     SetupL, UT_CMceSipConnection_IncomingRequest_2L, Teardown)
       
   796 
       
   797 EUNIT_TEST(
       
   798     "IncomingResponse - test ",
       
   799     "CMceSipConnection",
       
   800     "IncomingResponse",
       
   801     "FUNCTIONALITY",
       
   802     SetupL, UT_CMceSipConnection_IncomingResponse_1L, Teardown)
       
   803 
       
   804 EUNIT_TEST(
       
   805     "IncomingResponse - test 2 ",
       
   806     "CMceSipConnection",
       
   807     "IncomingResponse",
       
   808     "FUNCTIONALITY",
       
   809     SetupL, UT_CMceSipConnection_IncomingResponse_2L, Teardown)
       
   810 
       
   811 EUNIT_TEST(
       
   812     "IncomingResponse - test 3 ",
       
   813     "CMceSipConnection",
       
   814     "IncomingResponse",
       
   815     "FUNCTIONALITY",
       
   816     SetupL, UT_CMceSipConnection_IncomingResponse_3L, Teardown)
       
   817 
       
   818 EUNIT_TEST(
       
   819     "IncomingResponse - test 4 ",
       
   820     "CMceSipConnection",
       
   821     "IncomingResponse",
       
   822     "FUNCTIONALITY",
       
   823     SetupL, UT_CMceSipConnection_IncomingResponse_4L, Teardown)
       
   824 
       
   825 EUNIT_TEST(
       
   826     "ErrorOccured - test ",
       
   827     "CMceSipConnection",
       
   828     "ErrorOccured",
       
   829     "FUNCTIONALITY",
       
   830     SetupL, UT_CMceSipConnection_ErrorOccured_1L, Teardown)
       
   831 
       
   832 EUNIT_TEST(
       
   833     "ErrorOccured - test 2 ",
       
   834     "CMceSipConnection",
       
   835     "ErrorOccured",
       
   836     "FUNCTIONALITY",
       
   837     SetupL, UT_CMceSipConnection_ErrorOccured_2L, Teardown)
       
   838 
       
   839 EUNIT_TEST(
       
   840     "ErrorOccured - test 3 ",
       
   841     "CMceSipConnection",
       
   842     "ErrorOccured",
       
   843     "FUNCTIONALITY",
       
   844     SetupL, UT_CMceSipConnection_ErrorOccured_3L, Teardown)
       
   845 
       
   846 EUNIT_TEST(
       
   847     "ErrorOccured - test 4 ",
       
   848     "CMceSipConnection",
       
   849     "ErrorOccured",
       
   850     "FUNCTIONALITY",
       
   851     SetupL, UT_CMceSipConnection_ErrorOccured_4L, Teardown)
       
   852 
       
   853 EUNIT_TEST(
       
   854     "ErrorOccured - test 5 ",
       
   855     "CMceSipConnection",
       
   856     "ErrorOccured",
       
   857     "FUNCTIONALITY",
       
   858     SetupL, UT_CMceSipConnection_ErrorOccured_5L, Teardown)
       
   859 
       
   860 EUNIT_TEST(
       
   861     "ErrorOccured - test 6 ",
       
   862     "CMceSipConnection",
       
   863     "ErrorOccured",
       
   864     "FUNCTIONALITY",
       
   865     SetupL, UT_CMceSipConnection_ErrorOccured_6L, Teardown)
       
   866 
       
   867 EUNIT_TEST(
       
   868     "InviteCompleted - test ",
       
   869     "CMceSipConnection",
       
   870     "InviteCompleted",
       
   871     "FUNCTIONALITY",
       
   872     SetupL, UT_CMceSipConnection_InviteCompletedL, Teardown)
       
   873 
       
   874 EUNIT_TEST(
       
   875     "InviteCanceled - test ",
       
   876     "CMceSipConnection",
       
   877     "InviteCanceled",
       
   878     "FUNCTIONALITY",
       
   879     SetupL, UT_CMceSipConnection_InviteCanceledL, Teardown)
       
   880 
       
   881 EUNIT_TEST(
       
   882     "ConnectionStateChanged - test ",
       
   883     "CMceSipConnection",
       
   884     "ConnectionStateChanged",
       
   885     "FUNCTIONALITY",
       
   886     SetupL, UT_CMceSipConnection_ConnectionStateChangedL, Teardown)
       
   887 
       
   888 EUNIT_TEST(
       
   889     "FillWithMatchingAddrFamily - test ",
       
   890     "CMceSipConnection",
       
   891     "FillWithMatchingAddrFamily",
       
   892     "FUNCTIONALITY",
       
   893     SetupL, UT_CMceSipConnection_FillWithMatchingAddrFamilyL, Teardown)
       
   894    
       
   895 EUNIT_TEST(
       
   896     "ConnectionUpdateL - test ",
       
   897     "CMceSipConnection",
       
   898     "ConnectionUpdateL",
       
   899     "FUNCTIONALITY",
       
   900     SetupL, UT_CMceSipConnection_ConnectionUpdateLL, Teardown)   
       
   901 
       
   902 
       
   903 EUNIT_END_TEST_TABLE
       
   904 
       
   905 //  END OF FILE