multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCEStateServerEstablishing.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcesrv/mmceserver/tsrc/ut_server/src/UT_CMCEStateServerEstablishing.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,636 @@
+/*
+* 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_cmcestateserverestablishing.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/eunitmacros.h>
+
+//  INTERNAL INCLUDES
+#include "MCETestHelper.h"
+
+#include "mcesipsession.h"
+#include "mcesipstatemachine.h"
+#include "mceservercore.h"
+#include "mcecssession.h"
+#include "mcecssessionimplementation.h"
+#include "mcesipconnection.h"
+#include "mcecomsession.h"
+#include "mcestateserverestablishing.h"
+#include "mcemediamanager.h"
+
+const TUint32 KDialogId = 12345;
+
+#define MCE_ENTRYL_POSTCONDITION \
+MCE_CHECK_MEMORY_LEAVE( iStorage->iMediaManagerAction == CMCETls::ECloseSession )
+
+#define MCE_ENTRYL_POSTCONDITION_2( responseCode ) \
+MCE_CHECK_MEMORY_LEAVE( !iStorage->iSipSentResponse || iStorage->iSipSentResponse->StatusCode() != responseCode )
+// CONSTRUCTION
+UT_CMceStateServerEstablishing* UT_CMceStateServerEstablishing::NewL()
+    {
+    UT_CMceStateServerEstablishing* self = UT_CMceStateServerEstablishing::NewLC(); 
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+UT_CMceStateServerEstablishing* UT_CMceStateServerEstablishing::NewLC()
+    {
+    UT_CMceStateServerEstablishing* self = new( ELeave ) UT_CMceStateServerEstablishing();
+    CleanupStack::PushL( self );
+
+	self->ConstructL(); 
+
+    return self;
+    }
+
+
+// Destructor (virtual by CBase)
+UT_CMceStateServerEstablishing::~UT_CMceStateServerEstablishing()
+    {
+    }
+
+// Default constructor
+UT_CMceStateServerEstablishing::UT_CMceStateServerEstablishing()
+    {
+    }
+
+// Second phase construct
+void UT_CMceStateServerEstablishing::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+
+
+
+void UT_CMceStateServerEstablishing::SetupL(  )
+    {
+    CMCETls::OpenL();
+    SdpCodecStringPool::OpenL();
+    //TMceIds ids;
+    iIds.iProfileID = 1;
+    iIds.iManagerType = KMceCSSIPSession;
+    iIds.iDialogType = KMceDlgTypeInvite;
+    iServerCore = CMceServerCore::NewL();
+    
+    iStorage = CMCETls::Storage();
+    
+	CDesC8ArrayFlat* params = new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity );
+	CleanupStack::PushL( params );
+	params->AppendL( _L8("User <user2@host>") );
+	params->AppendL( _L8("User <user@host>") );
+    
+    CMceMsgTextArray* msgParams = new (ELeave) CMceMsgTextArray( *params );
+    CleanupStack::PushL( msgParams );
+    iStorage->StoreL( iIds, *msgParams );
+    CleanupStack::PopAndDestroy( msgParams );
+    CleanupStack::PopAndDestroy( params );
+    
+    iSession = CMceCsSession::NewL(*iServerCore);
+    iSession->CreateSubSessionL(iIds, RMessage2());
+    iSipSession =  static_cast<CMceSipSession*>((iSession->Implementation().SubSessions())[0]);
+    
+    // incoming request
+    CSIPServerTransaction* invite = 
+        MCETestHelper::ServerTransactionL( SipStrConsts::EInvite );
+    CleanupStack::PushL( invite );
+    iSipSession->iPendingReceivedRequests.AppendL( invite );
+    CleanupStack::Pop( invite );
+    
+    iSipSession->NextState( KMceStateServerEstablishing );
+    
+    iState = static_cast<CMceStateServerEstablishing*>(&iSipSession->CurrentState());
+    }
+
+void UT_CMceStateServerEstablishing::Teardown()
+    {
+    CMCETls::Close();
+	delete iSession;
+    delete iServerCore;
+    SdpCodecStringPool::Close();
+    }
+
+
+void UT_CMceStateServerEstablishing::UT_CMceStateServerEstablishing_AcceptLL()
+    {
+    TMceIds ids;
+    CMceMsgBase* msg = NULL;
+
+    TMceStateTransitionEvent event1( *iSipSession, EMceItcUpdate, ids, *msg );
+    EUNIT_ASSERT ( iState->AcceptL( event1 ) );
+
+    TMceStateTransitionEvent event2( *iSipSession, EMceItcRejectSession, ids, *msg  );
+    EUNIT_ASSERT ( iState->AcceptL( event2 ) );
+ 
+    TMceStateTransitionEvent event3( *iSipSession, EMceMediaSessionStopped );
+    TRAPD( e1, iState->AcceptL( event3 ) );
+    EUNIT_ASSERT ( e1 == KErrTotalLossOfPrecision );
+
+    TMceStateTransitionEvent event4( *iSipSession, EMceResponse );
+    TRAPD( e2, iState->AcceptL( event4 ) );
+    EUNIT_ASSERT ( e2 == KErrTotalLossOfPrecision );
+    
+    }
+
+void UT_CMceStateServerEstablishing::UT_CMceStateServerEstablishing_EntryLL()
+    {
+    
+    CSIPServerTransaction* invite = 
+            MCETestHelper::ServerTransactionL( SipStrConsts::EInvite );
+    CleanupStack::PushL( invite );
+    iSipSession->iPendingReceivedRequests.AppendL( invite );
+    CleanupStack::Pop( invite );
+    
+    TMceIds ids;
+    CMceMsgBase* msg = NULL;
+    
+    iSipSession->iBody = CMceComSession::NewL( CMceComSession::EInSession );
+    iSipSession->iBody->iID = 1;
+    iSipSession->iNewBodyCandidate = CMceComSession::NewL( CMceComSession::EInSession );
+    iSipSession->iNewBodyCandidate->iID = 1;
+    
+    ids.iAppUID = 10;
+    ids.iSessionID = 1;
+    
+    CMceComSession* clientSession = CMceComSession::NewL( CMceComSession::EInSession );
+    clientSession->iID = 1;
+    ids.iSessionID = clientSession->iID;
+    CleanupStack::PushL( clientSession );
+    CMceMsgObject<CMceComSession>* clientSessionMsg = 
+        new (ELeave) CMceMsgObject<CMceComSession>( *clientSession, EMceItcMsgTypeSession );
+    CleanupStack::Pop( clientSession );
+    clientSessionMsg->PushL();
+    CleanupStack::PushL( clientSessionMsg );
+    
+
+    iSipSession->iSubState = CMceSipSession::EAnswering;
+    MCE_RESET_STUBS();
+    iStorage->iMediaManagerUpdateStatus = KMceAsync;
+    delete iStorage->iSipSentResponse;
+    iStorage->iSipSentResponse = NULL;
+    
+    TMceStateTransitionEvent event1( *iSipSession, EMceItcUpdate, ids, 
+                                      *clientSessionMsg );
+
+    iState->EntryL( event1 );
+    MCE_ENTRYL_POSTCONDITION
+    
+    MCE_ASSERT_STUBS( CMCETls::EUpdate /*mmaction*/, 
+                      CMCETls::ENone /*mmsdpaction*/, 
+                      SipStrConsts::EEmpty /*sentMethod*/, 
+                      KErrNotFound /*sentResponse*/);
+    
+    EUNIT_ASSERT ( event1.Code() == EMceItcUpdate );
+    EUNIT_ASSERT ( event1.ParamStatus() == KMceAsync );
+    MCE_RESET_STUBS();
+    CleanupStack::PopAndDestroy( clientSessionMsg );
+
+// ---
+
+    clientSession = CMceComSession::NewL( CMceComSession::EInSession );
+    clientSession->iID = 1;
+    ids.iSessionID = clientSession->iID;
+    CleanupStack::PushL( clientSession );
+    clientSessionMsg = 
+        new (ELeave) CMceMsgObject<CMceComSession>( *clientSession, EMceItcMsgTypeSession );
+    CleanupStack::Pop( clientSession );
+    clientSessionMsg->PushL();
+    CleanupStack::PushL( clientSessionMsg );
+
+
+    iSipSession->iSubState = CMceSipSession::EAnswering;
+    iStorage->iMediaManagerUpdateStatus = KErrGeneral;
+    delete iStorage->iSipSentResponse;
+    iStorage->iSipSentResponse = NULL;
+    
+    TMceStateTransitionEvent event2( *iSipSession, EMceItcUpdate, ids, 
+                                      *clientSessionMsg );
+
+    iState->EntryL( event2 );
+    MCE_ENTRYL_POSTCONDITION_2( KMceSipServerInternalError )
+    
+    MCE_ASSERT_STUBS( CMCETls::ECloseSession /*mmaction*/, 
+                      CMCETls::ENone /*mmsdpaction*/, 
+                      SipStrConsts::EEmpty /*sentMethod*/, 
+                      KMceSipServerInternalError /*sentResponse*/);
+    
+    EUNIT_ASSERT ( event2.Code() == EMceItcRejectSession );
+    EUNIT_ASSERT ( event2.ParamStatus() == KErrGeneral );
+    MCE_RESET_STUBS();
+    CleanupStack::PopAndDestroy( clientSessionMsg );
+
+// ---
+
+    clientSession = CMceComSession::NewL( CMceComSession::EInSession );
+    clientSession->iID = 1000;//wrong
+    ids.iSessionID = clientSession->iID;
+    CleanupStack::PushL( clientSession );
+    clientSessionMsg = 
+        new (ELeave) CMceMsgObject<CMceComSession>( *clientSession, EMceItcMsgTypeSession );
+    CleanupStack::Pop( clientSession );
+    clientSessionMsg->PushL();
+    CleanupStack::PushL( clientSessionMsg );
+
+
+    iSipSession->iSubState = CMceSipSession::EAnswering;
+    iStorage->iMediaManagerUpdateStatus = KMceAsync;
+    delete iStorage->iSipSentResponse;
+    iStorage->iSipSentResponse = NULL;
+    
+    TMceStateTransitionEvent event2_1( *iSipSession, EMceItcUpdate, ids, 
+                                      *clientSessionMsg );
+
+    MCE_EUNIT_ASSERT_LEAVE( iState->EntryL( event2_1 ) );
+    
+    MCE_RESET_STUBS();
+    CleanupStack::PopAndDestroy( clientSessionMsg );
+
+
+// ---
+
+    clientSession = CMceComSession::NewL( CMceComSession::EInSession );
+    clientSession->iID = 1;
+    ids.iSessionID = clientSession->iID;
+    CleanupStack::PushL( clientSession );
+    clientSessionMsg = 
+        new (ELeave) CMceMsgObject<CMceComSession>( *clientSession, EMceItcMsgTypeSession );
+    CleanupStack::Pop( clientSession );
+    clientSessionMsg->PushL();
+    CleanupStack::PushL( clientSessionMsg );
+
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    iStorage->iMediaManagerUpdateStatus = KMceAsync;
+    delete iStorage->iSipSentResponse;
+    iStorage->iSipSentResponse = NULL;
+    
+    TMceStateTransitionEvent event3( *iSipSession, EMceItcUpdate, ids, 
+                                      *clientSessionMsg );
+
+    iState->EntryL( event3 );
+    MCE_ENTRYL_POSTCONDITION
+    
+    MCE_ASSERT_STUBS( CMCETls::EUpdate /*mmaction*/, 
+                      CMCETls::ENone /*mmsdpaction*/, 
+                      SipStrConsts::EEmpty /*sentMethod*/, 
+                      KErrNotFound /*sentResponse*/);
+    
+    EUNIT_ASSERT ( iStorage->iSipSentResponse == NULL );
+    EUNIT_ASSERT ( event3.Code() == EMceItcUpdate );
+    EUNIT_ASSERT ( event3.ParamStatus() == KMceAsync );
+    MCE_RESET_STUBS();
+    CleanupStack::PopAndDestroy( clientSessionMsg );
+
+// ---
+    // EMceItcUpdate, update ready, directly 200
+    clientSession = CMceComSession::NewL( CMceComSession::EInSession );
+    clientSession->iID = 1;
+    ids.iSessionID = clientSession->iID;
+    CleanupStack::PushL( clientSession );
+    clientSessionMsg = 
+        new (ELeave) CMceMsgObject<CMceComSession>( *clientSession, EMceItcMsgTypeSession );
+    CleanupStack::Pop( clientSession );
+    clientSessionMsg->PushL();
+    CleanupStack::PushL( clientSessionMsg );
+
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    iStorage->iMediaManagerUpdateStatus = KMceReady;
+    iStorage->iMediaManagerNeedToNegotiate = EFalse;
+    delete iStorage->iSipSentResponse;
+    iStorage->iSipSentResponse = NULL;
+    
+    TMceStateTransitionEvent event4( *iSipSession, EMceItcUpdate, ids, 
+                                      *clientSessionMsg );
+
+    iState->EntryL( event4 );
+    MCE_ENTRYL_POSTCONDITION_2( KMceSipOK )
+    MCE_ASSERT_STUBS( CMCETls::ECloseSession /*mmaction*/, 
+                      CMCETls::EEncode /*mmsdpaction*/, 
+                      SipStrConsts::EEmpty /*sentMethod*/, 
+                      KMceSipOK /*sentResponse*/);
+    
+    EUNIT_ASSERT ( event4.Code() == EMceItcUpdate );
+    EUNIT_ASSERT ( event4.ParamStatus() == KMceReady );
+    EUNIT_ASSERT ( iSipSession->BodyCandidate() == NULL );
+    MCE_RESET_STUBS();
+    CleanupStack::PopAndDestroy( clientSessionMsg );
+
+    iSipSession->iNewBodyCandidate = CMceComSession::NewL( CMceComSession::EInSession );
+    iSipSession->iNewBodyCandidate->iID = 1;
+
+// ---
+    // EMceItcUpdate, update ready, need 183
+    clientSession = CMceComSession::NewL( CMceComSession::EInSession );
+    clientSession->iID = 1;
+    ids.iSessionID = clientSession->iID;
+    CleanupStack::PushL( clientSession );
+    clientSessionMsg = 
+        new (ELeave) CMceMsgObject<CMceComSession>( *clientSession, EMceItcMsgTypeSession );
+    CleanupStack::Pop( clientSession );
+    clientSessionMsg->PushL();
+    CleanupStack::PushL( clientSessionMsg );
+
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    iStorage->iMediaManagerUpdateStatus = KMceReady;
+    iStorage->iMediaManagerNeedToNegotiate = ETrue;
+    delete iStorage->iSipSentResponse;
+    iStorage->iSipSentResponse = NULL;
+    iSipSession->Extensions().SetRemote( CMceSipExtensions::E100rel, CMceSipExtensions::ESupported );
+    TMceStateTransitionEvent event4_2( *iSipSession, EMceItcUpdate, ids, 
+                                      *clientSessionMsg );
+
+    iState->EntryL( event4_2 );
+    MCE_ENTRYL_POSTCONDITION_2( KMceSipSessionProgress )
+    MCE_ASSERT_STUBS( CMCETls::EUpdate /*mmaction*/, 
+                      CMCETls::EEncode /*mmsdpaction*/, 
+                      SipStrConsts::EEmpty /*sentMethod*/, 
+                      KMceSipSessionProgress /*sentResponse*/);
+    
+    EUNIT_ASSERT ( event4_2.Code() == EMceItcUpdate );
+    EUNIT_ASSERT ( event4_2.ParamStatus() == KMceReady );
+    EUNIT_ASSERT ( iSipSession->BodyCandidate() != NULL );
+    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateAcknowledgementRequired );
+    
+    MCE_RESET_STUBS();
+    CleanupStack::PopAndDestroy( clientSessionMsg );
+    MCE_DELETE( iSipSession->iNewBodyCandidate );
+    iSipSession->iNewBodyCandidate = CMceComSession::NewL( CMceComSession::EInSession );
+    iSipSession->iNewBodyCandidate->iID = 1;
+
+// ---
+
+    clientSession = CMceComSession::NewL( CMceComSession::EInSession );
+    clientSession->iID = 1;
+    ids.iSessionID = clientSession->iID;
+    CleanupStack::PushL( clientSession );
+    clientSessionMsg = 
+        new (ELeave) CMceMsgObject<CMceComSession>( *clientSession, EMceItcMsgTypeSession );
+    CleanupStack::Pop( clientSession );
+    clientSessionMsg->PushL();
+    CleanupStack::PushL( clientSessionMsg );
+
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    iStorage->iMediaManagerUpdateStatus = KErrGeneral;
+    delete iStorage->iSipSentResponse;
+    iStorage->iSipSentResponse = NULL;
+    
+    TMceStateTransitionEvent event5( *iSipSession, EMceItcUpdate, ids, 
+                                      *clientSessionMsg );
+
+    iState->EntryL( event5 );
+    MCE_ENTRYL_POSTCONDITION_2( KMceSipServerInternalError )
+    MCE_ASSERT_STUBS( CMCETls::ECloseSession /*mmaction*/, 
+                      CMCETls::ENone /*mmsdpaction*/, 
+                      SipStrConsts::EEmpty /*sentMethod*/, 
+                      KMceSipServerInternalError /*sentResponse*/);
+    
+    EUNIT_ASSERT ( event5.Code() == EMceItcUpdate );
+    EUNIT_ASSERT ( event5.ParamStatus() == KErrGeneral );
+    EUNIT_ASSERT ( iSipSession->BodyCandidate() == NULL );
+    MCE_RESET_STUBS();
+    CleanupStack::PopAndDestroy( clientSessionMsg );
+    
+    iSipSession->iNewBodyCandidate = CMceComSession::NewL( CMceComSession::EInSession );
+    iSipSession->iNewBodyCandidate->iID = 1;
+    
+
+// ---
+
+    clientSession = CMceComSession::NewL( CMceComSession::EInSession );
+    clientSession->iID = 1000;//wrong
+    ids.iSessionID = clientSession->iID;
+    CleanupStack::PushL( clientSession );
+    clientSessionMsg = 
+        new (ELeave) CMceMsgObject<CMceComSession>( *clientSession, EMceItcMsgTypeSession );
+    CleanupStack::Pop( clientSession );
+    clientSessionMsg->PushL();
+    CleanupStack::PushL( clientSessionMsg );
+
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    iStorage->iMediaManagerUpdateStatus = KMceAsync;
+    delete iStorage->iSipSentResponse;
+    iStorage->iSipSentResponse = NULL;
+    
+    TMceStateTransitionEvent event5_1( *iSipSession, EMceItcUpdate, ids, 
+                                      *clientSessionMsg );
+
+    MCE_EUNIT_ASSERT_LEAVE( iState->EntryL( event5_1 ) );
+    
+    MCE_RESET_STUBS();
+    CleanupStack::PopAndDestroy( clientSessionMsg );
+
+
+// --- reject
+
+    iSipSession->iSubState = CMceSipSession::EOffering;
+    iStorage->iMediaManagerAction = CMCETls::ENone;
+    iStorage->iSipSentMethod = SIPStrings::StringF( SipStrConsts::EEmpty );
+    delete iStorage->iSipSentResponse;
+    iStorage->iSipSentResponse = NULL;
+
+    TMceStateTransitionEvent event6( *iSipSession, EMceItcRejectSession, ids );
+
+    iState->EntryL( event6 );
+    MCE_ASSERT_STUBS( CMCETls::ECloseSession /*mmaction*/, 
+                      CMCETls::ENone /*mmsdpaction*/, 
+                      SipStrConsts::EEmpty /*sentMethod*/, 
+                      KMceSipDecline /*sentResponse*/);
+    
+    EUNIT_ASSERT ( event6.Code() == EMceItcRejectSession );
+    EUNIT_ASSERT ( event6.ParamStatus() == KErrNone );
+    MCE_RESET_STUBS();
+    
+// --- reject
+
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    iStorage->iMediaManagerAction = CMCETls::ENone;
+    iStorage->iSipSentMethod = SIPStrings::StringF( SipStrConsts::EEmpty );
+    delete iStorage->iSipSentResponse;
+    iStorage->iSipSentResponse = NULL;
+
+    TMceStateTransitionEvent event7( *iSipSession, EMceItcRejectSession, ids );
+
+    iState->EntryL( event7 );
+    
+    MCE_ASSERT_STUBS( CMCETls::ECloseSession /*mmaction*/, 
+                      CMCETls::ENone /*mmsdpaction*/, 
+                      SipStrConsts::EEmpty /*sentMethod*/, 
+                      KMceSipDecline /*sentResponse*/);
+    
+    EUNIT_ASSERT ( event7.Code() == EMceItcRejectSession );
+    EUNIT_ASSERT ( event7.ParamStatus() == KErrNone );
+
+
+// --- default
+
+    TMceStateTransitionEvent event8( *iSipSession, EMceItcRing, ids );
+
+    iState->EntryL( event8 );
+    
+    MCE_RESET_STUBS();
+    
+                      
+// ---  Enable & disable    
+    
+    MCE_ASSERT_ENDPOINT_ENABLE_AND_DISABLE();
+    
+    }
+    
+void UT_CMceStateServerEstablishing::UT_CMceStateServerEstablishing_ExitLL()
+    {
+    CMceMsgBase* msg = NULL;
+    
+    iSipSession->iBody = CMceComSession::NewL( CMceComSession::EInSession );
+    iSipSession->iSubState = CMceSipSession::EAnswering;
+    
+    
+    
+    TMceIds ids;
+    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateServerEstablishing );
+    
+    
+    ids.iState = KMceNotAssigned;
+    TMceStateTransitionEvent event1( *iSipSession, EMceItcUpdate, ids, *msg );
+    
+    iSipSession->iSubState = CMceSipSession::EAnswering;
+    event1.ParamStatus() = KMceReady;
+    
+    iState->ExitL( event1 );
+	EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateUpdated );
+	EUNIT_ASSERT ( ids.iState == CMceSession::EReserving );
+	EUNIT_ASSERT ( iSipSession->iBody->iState == CMceSession::EProceeding );
+
+    TMceStateTransitionEvent event1_2( *iSipSession, EMceItcUpdate, ids, *msg );
+    
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    event1.ParamStatus() = KMceReady;
+
+    iState->ExitL( event1_2 );
+    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateAnswering );
+    EUNIT_ASSERT ( ids.iState == CMceSession::EAnswering );
+    EUNIT_ASSERT ( iSipSession->iBody->iState == CMceSession::EAnswering );
+
+    TMceStateTransitionEvent event1_3( *iSipSession, EMceItcUpdate, ids, *msg );
+    
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    event1.ParamStatus() = KMceReady;
+    
+    CSIPServerTransaction* update = MCETestHelper::ServerTransactionL( SipStrConsts::EUpdate );
+    CleanupStack::PushL( update );
+    iSipSession->iPendingReceivedRequests.AppendL( update );
+    CleanupStack::Pop( update );
+
+    iState->ExitL( event1_3 );
+    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateEstablished );
+    EUNIT_ASSERT ( ids.iState == CMceSession::EEstablished );
+    EUNIT_ASSERT ( iSipSession->iBody->iState == CMceSession::EEstablished );
+    delete iSipSession->PopRequest();
+
+    ids.iState = KMceNotAssigned;
+    TMceStateTransitionEvent event2( *iSipSession, EMceItcUpdate, ids, *msg );
+    
+    iSipSession->iSubState = CMceSipSession::EAnswering;
+    event2.ParamStatus() = KMceAsync;
+    
+    iState->ExitL( event2 );
+    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateUpdating );
+    EUNIT_ASSERT ( ids.iState == CMceSession::EReserving );
+    EUNIT_ASSERT ( iSipSession->iBody->iState == CMceSession::EReserving );
+
+    ids.iState = KMceNotAssigned;
+    TMceStateTransitionEvent event3( *iSipSession, EMceItcUpdate, ids, *msg );
+    
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    event3.ParamStatus() = KErrGeneral;
+    
+    iState->ExitL( event3 );
+    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateEstablished );
+    EUNIT_ASSERT ( ids.iState == CMceSession::EEstablished );
+    EUNIT_ASSERT ( iSipSession->iBody->iState == CMceSession::EEstablished );
+
+ 
+    ids.iState = KMceNotAssigned;
+    TMceStateTransitionEvent event4( *iSipSession, EMceItcRejectSession, ids );
+    
+    iSipSession->iSubState = CMceSipSession::EAnswering;
+    
+    iState->ExitL( event4 );
+    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateTerminated );
+    EUNIT_ASSERT ( ids.iState == CMceSession::ETerminated );
+    EUNIT_ASSERT ( iSipSession->iBody->iState == CMceSession::ETerminated );
+
+    ids.iState = KMceNotAssigned;
+    TMceStateTransitionEvent event5( *iSipSession, EMceItcRejectSession, ids );
+    
+    iSipSession->iSubState = CMceSipSession::EUpdating;
+    
+    iState->ExitL( event5 );
+    EUNIT_ASSERT ( iSipSession->CurrentState().Id() == KMceStateEstablished );
+    EUNIT_ASSERT ( ids.iState == CMceSession::EEstablished );
+    EUNIT_ASSERT ( iSipSession->iBody->iState == CMceSession::EEstablished );
+
+
+    TMceStateTransitionEvent event6( *iSipSession, EMceItcRing, ids );
+    iState->ExitL( event6 );
+
+    
+    }
+    
+    
+        
+//  TEST TABLE
+
+EUNIT_BEGIN_TEST_TABLE( 
+    UT_CMceStateServerEstablishing,
+    "UT_CMceStateServerEstablishing",
+    "UNIT" )
+
+EUNIT_TEST(
+    "AcceptL - test ",
+    "CMceStateServerEstablishing",
+    "AcceptL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceStateServerEstablishing_AcceptLL, Teardown)
+
+EUNIT_TEST(
+    "EntryL - test ",
+    "CMceStateServerEstablishing",
+    "EntryL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceStateServerEstablishing_EntryLL, Teardown)
+
+EUNIT_TEST(
+    "ExitL - test ",
+    "CMceStateServerEstablishing",
+    "ExitL",
+    "FUNCTIONALITY",
+    SetupL, UT_CMceStateServerEstablishing_ExitLL, Teardown)
+    
+
+
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE