mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengoutsession.cpp
changeset 22 496ad160a278
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengoutsession.cpp	Fri Jun 11 13:36:18 2010 +0300
@@ -0,0 +1,1096 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:
+*
+*/
+
+
+//  INTERNAL INCLUDES
+#include "ut_musengoutsession.h"
+#include "musengstubs.h"
+#include "musengtestdefs.h"
+#include "sipprofile.h"
+#include "musenglivesession.h"
+#include "musengclipsession.h"
+#include "mussipprofilehandler.h"
+#include "mussessionproperties.h"
+#include "contactenginestub.h"
+
+//  SYSTEM INCLUDES
+#include <lcsourcefilecontrol.h>
+#include <digia/eunit/eunitmacros.h>
+#include <mceoutsession.h>
+#include <mcestreambundle.h>
+#include <mceaudiostream.h>
+#include <mcevideostream.h>
+#include <mcespeakersink.h>
+#include <mcedisplaysink.h>
+#include <mceh263codec.h>
+#include <mceavccodec.h>
+#include <mceaudiocodec.h>
+#include <mcecamerasource.h>
+
+
+#include <sipstrings.h>
+
+#include <audiopreference.h>
+#include <uri8.h>
+
+_LIT( KTestContactName, "nokia" );
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+UT_CMusEngOutSession* UT_CMusEngOutSession::NewL()
+    {
+    UT_CMusEngOutSession* self = UT_CMusEngOutSession::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+UT_CMusEngOutSession* UT_CMusEngOutSession::NewLC()
+    {
+    UT_CMusEngOutSession* self = new( ELeave ) UT_CMusEngOutSession();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+UT_CMusEngOutSession::~UT_CMusEngOutSession()
+    {
+    // NOP
+    }
+
+
+// -----------------------------------------------------------------------------
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+UT_CMusEngOutSession::UT_CMusEngOutSession()
+    {
+    // NOP
+    }
+
+
+// -----------------------------------------------------------------------------
+// Second phase construct
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngOutSession::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngOutSession::SetupL()
+    {
+    
+    PropertyHelper::SetErrorCode( KErrNone );
+    
+    iLcSessionObserver = new( ELeave )CLcSessionObserverStub;
+    iLcUiProvider = new( ELeave )CLcUiProviderStub;
+    iAudioRoutingObserver = new( ELeave )CMusEngObserverStub;
+    // Name is published using publish/subscribe key by Availblity
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KContactName,
+                                        KTestContactName ) );
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+
+    SIPStrings::OpenL();
+    
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KRemoteSipAddress,
+                                        KTestRecipientSipUri ) );
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngOutSession::Teardown()
+    {
+    SIPStrings::Close();
+    delete iLiveSession;
+    delete iLcSessionObserver;
+    delete iLcUiProvider;
+    delete iAudioRoutingObserver;
+    PropertyHelper::SetErrorCode( KErrNone );
+    PropertyHelper::Close();
+    }
+
+
+// TEST CASES
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngOutSession::UT_EstablishLcSessionL()
+    {
+    // Initial state
+    EUNIT_ASSERT( !iLiveSession->iSession );
+    
+    ///////////////////////////////////////////////////////////////////////////
+    // 1. Simulate failing session structure construction.
+    iLiveSession->EstablishLcSessionL();
+    
+    iLiveSession->iSession->iState = CMceSession::EIdle;
+    delete iLiveSession->iSession->Streams()[0];
+    const RPointerArray<CMceMediaStream>& constStreams = 
+                                            iLiveSession->iSession->Streams();
+    const_cast<RPointerArray<CMceMediaStream>&>(constStreams)[0] = NULL;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // 2. Normal invite
+    iLiveSession->EstablishLcSessionL();
+    
+    EUNIT_ASSERT( iLiveSession->iSession );
+    // Next assertion ensures that session structure is new
+    EUNIT_ASSERT( iLiveSession->iSession->Streams().Count() > 0 );   
+    EUNIT_ASSERT( iLiveSession->iSession->Streams()[0] ); 
+    EUNIT_ASSERT( *(iLiveSession->iRecipient) == KTestRecipientSipUri8() );
+    EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering );
+    
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders );
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders->Count() == 2 );
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 0 ) ==
+                  KMusEngAcceptContactHeader() );
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 1 ) ==
+                  KMusAcceptHeader() );    
+    EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines );
+    EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->Count() == 1 );
+    EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->MdcaPoint( 0 ) ==
+                  KMusEngSessionSdpLineXApplication() );
+        
+    // Ensure there is no SDP lines at media level
+    MDesC8Array* mediaSdpLines = 
+        iLiveSession->iSession->Streams()[0]->iMediaSDPLines;
+    EUNIT_ASSERT( mediaSdpLines );
+    EUNIT_ASSERT( mediaSdpLines->MdcaCount() == 0 );
+
+    ///////////////////////////////////////////////////////////////////////////
+    // 3. Normal operator invite
+    delete iLiveSession;
+    iLiveSession = NULL;
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+   	iLiveSession->iOperatorVariant = ETrue;
+   	CSIPProfile* profile = iLiveSession->iSipProfileHandler->Profile();
+    delete profile->iArray;
+    profile->iArray = NULL;
+    profile->iArray = new ( ELeave ) CDesC8ArrayFlat( 1 );
+    profile->iArray->AppendL( KMusTestUri );
+
+    iLiveSession->EstablishLcSessionL();
+    
+    EUNIT_ASSERT( iLiveSession->iSession );
+    // Next assertion ensures that session structure is new
+    EUNIT_ASSERT( *(iLiveSession->iRecipient) == KTestRecipientSipUri8() );
+    EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering );
+    
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders );
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders->Count() == 3 );
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 0 ) ==
+                  KMusEngAcceptContactHeader() );
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 1 ) ==
+                  KMusAcceptHeader() );
+    
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 2 ) ==
+                  KMusPPreferredIdentityTestHeader() );
+    
+    // Ensure there is only a=type and a=application attributes (and no b=TIAS)
+    // at session level for operator variant
+    EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines );
+    EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->Count() == 2 );
+    EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->MdcaPoint( 0 ) ==
+                  KMusEngSessionSdpLineApplication() )
+   	EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->MdcaPoint( 1 ) ==
+                  KMusEngSessionSdpLineType() )
+                  
+    EUNIT_ASSERT( iLiveSession->iSession->Streams().Count() > 0 );   
+    EUNIT_ASSERT( iLiveSession->iSession->Streams()[0] ); 
+    EUNIT_ASSERT( iLiveSession->iSession->Streams()[0]->Type() == KMceVideo );
+
+    // Ensure there is only b=AS and no b=TIAS present at media level
+    // for operator variant
+    mediaSdpLines = iLiveSession->iSession->Streams()[0]->iMediaSDPLines;
+    EUNIT_ASSERT( mediaSdpLines );
+    EUNIT_ASSERT( mediaSdpLines->MdcaCount() == 1 );
+    EUNIT_ASSERT( mediaSdpLines->MdcaPoint( 0 ) == 
+                  KMusEngSessionSdpLineBandwidthField() );
+    
+    ///////////////////////////////////////////////////////////////////////////
+    // 4. Try invite again, must fail
+    TRAPD( error, iLiveSession->EstablishLcSessionL() );
+    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
+    EUNIT_ASSERT( error == KErrAlreadyExists );
+    
+    // 5. Simulate normal session ending, no need for observer call in this case
+    iLiveSession->iSession->iState = CMceSession::ETerminated;
+    
+    // Try again. Establishment must be OK with new MceSession object
+    iLiveSession->EstablishLcSessionL();
+    EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering );
+    }
+    
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngOutSession::UT_EstablishLcSession_RecipientResolvingL()
+    {   
+    // Manual query from user, 
+    // the user cancels the query (MLcUiProvider::Query returns EFalse)
+    PropertyHelper::SetErrorCode( KErrNotFound );
+    TRAPD( err, iLiveSession->EstablishLcSessionL() )
+    if ( err == KErrNoMemory )
+        {
+        User::Leave( err );
+        }
+    EUNIT_ASSERT_EQUALS( KErrCancel, err )        
+ 
+    // Manual query from user succeeds
+    iLcSessionObserver->Reset();
+    iLcUiProvider->Reset();        
+    delete iLiveSession;
+    iLiveSession = NULL;
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+    iLcUiProvider->iSimulatedReturnValue = ETrue;
+    iLcUiProvider->iRecipient.Set( KTestRecipient2SipUri );
+    PropertyHelper::SetErrorCode( KErrNotFound );
+    iLiveSession->EstablishLcSessionL();
+    EUNIT_ASSERT_EQUALS( 1, iLiveSession->iTriedInvitations )
+    EUNIT_ASSERT_EQUALS( 
+        TInt( CLcUiProviderStub::EInputRecipient ),
+        iLcUiProvider->iCalledFunction )
+    EUNIT_ASSERT_EQUALS( 
+        KTestRecipient2SipUri8(), 
+        *( iLiveSession->iRecipient ) )        
+    EUNIT_ASSERT_EQUALS( KTestRecipient2SipUri(),iLiveSession->RemoteDisplayName() )  
+
+    // Multiple resolved recipients
+    iLcSessionObserver->Reset();
+    iLcUiProvider->Reset();
+    iLcUiProvider->iSimulatedReturnValue = ETrue;
+    PropertyHelper::SetErrorCode( KErrNone );
+    TBuf<200> multipleAddr;
+    multipleAddr.Append( KTestRecipient2SipUri );
+    multipleAddr.Append( _L(",") );
+    multipleAddr.Append( KTestRecipientSipUri );
+    
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KRemoteSipAddress,
+                                        multipleAddr ) );
+    delete iLiveSession;
+    iLiveSession = NULL;
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+    iLiveSession->EstablishLcSessionL();
+        
+    EUNIT_ASSERT_EQUALS( 0, iLiveSession->iTriedInvitations )
+    EUNIT_ASSERT_EQUALS( 
+        TInt( CLcUiProviderStub::ESelectRecipient ),
+        iLcUiProvider->iCalledFunction )
+    // Stub selected first one from multiple addresses list
+    EUNIT_ASSERT_EQUALS( 
+        KTestRecipient2SipUri8(), 
+        *( iLiveSession->iRecipient ) )    
+       
+    // Multiple resolved recipient, user doesn't select any
+    iLcSessionObserver->Reset();
+    iLcUiProvider->Reset();
+    delete iLiveSession;
+    iLiveSession = NULL;
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+    TRAP( err, iLiveSession->EstablishLcSessionL() );
+    if ( err == KErrNoMemory )
+        {
+        User::Leave( err );
+        }
+    EUNIT_ASSERT_EQUALS( KErrNotFound, err )   
+    EUNIT_ASSERT_EQUALS( 0, iLiveSession->iTriedInvitations )
+    EUNIT_ASSERT_EQUALS( 
+        TInt( CLcUiProviderStub::ESelectRecipient ),
+        iLcUiProvider->iCalledFunction )
+    
+    // Malformed multiple addresses, selection fails, manual entry is launched
+    iLcSessionObserver->Reset();
+    iLcUiProvider->Reset();
+    iLcUiProvider->iSimulatedReturnValue = ETrue;
+    iLcUiProvider->iRecipient.Set( KTestRecipient2SipUri );
+    PropertyHelper::SetErrorCode( KErrNone );
+    multipleAddr.Copy( _L(",") );
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KRemoteSipAddress,
+                                        multipleAddr ) );
+    delete iLiveSession;
+    iLiveSession = NULL;
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+    TRAP( err, iLiveSession->EstablishLcSessionL() );
+    if ( err == KErrNoMemory )
+       {
+       User::Leave( err );
+       }
+    EUNIT_ASSERT_EQUALS( 
+        TInt( CLcUiProviderStub::EInputRecipient ),
+        iLcUiProvider->iCalledFunction )    
+    EUNIT_ASSERT_EQUALS( KErrNone, err );
+    EUNIT_ASSERT_EQUALS( 1, iLiveSession->iTriedInvitations )
+    EUNIT_ASSERT_EQUALS( 
+        KTestRecipient2SipUri8(), 
+        *( iLiveSession->iRecipient ) )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngOutSession::UT_EstablishLcSession_RegistrationPendingL()
+    {
+    // Set registration as pending
+    iLiveSession->iSipProfileHandler->Profile()->iTBoolValue = EFalse;
+    
+    iLiveSession->EstablishLcSessionL();
+    EUNIT_ASSERT( !iLiveSession->iSession )
+    EUNIT_ASSERT( iLiveSession->iRegistrationPending )
+    
+    // Fake registration, session starts
+    iLiveSession->iSipProfileHandler->Profile()->iTBoolValue = ETrue;
+    iLiveSession->ProfileRegistered();
+    
+    if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed )
+        {
+        // Session didn't start because of running out of memory
+        User::Leave( KErrNoMemory );
+        }
+    
+    iLiveSession->iDeltaTimer->Remove( iLiveSession->iInvitationResponseEntry );
+    CMusEngMceOutSession::InvitationResponseTimerExpired( iLiveSession );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ENoAnswer ) )    
+    iLcSessionObserver->Reset();
+    
+    EUNIT_ASSERT( iLiveSession->iSession )
+    EUNIT_ASSERT_EQUALS( iLiveSession->iSession->State(), 
+                         CMceSession::EOffering )
+    EUNIT_ASSERT( !iLiveSession->iRegistrationPending )    
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//    
+void UT_CMusEngOutSession::UT_TerminateLcSessionL()
+    {
+    // No MCE session
+    EUNIT_ASSERT_SPECIFIC_LEAVE( 
+        iLiveSession->TerminateLcSessionL(), KErrNotReady )
+
+    // Cancel a session that is in offering state
+    iLiveSession->EstablishLcSessionL();
+    EUNIT_ASSERT_EQUALS( TInt( CMceSession::EOffering ),
+                         TInt( iLiveSession->iSession->iState ) )
+    iLiveSession->TerminateLcSessionL();
+    EUNIT_ASSERT_EQUALS( TInt( CMceSession::ECancelling ),
+                         TInt( iLiveSession->iSession->iState ) )
+    
+    // Terminate an established session
+    iLiveSession->iSession->iState = CMceSession::ETerminated;
+    iLiveSession->EstablishLcSessionL();
+    iLiveSession->iSession->iState = CMceSession::EEstablished;
+    iLiveSession->TerminateLcSessionL();
+    EUNIT_ASSERT_EQUALS( TInt( CMceSession::ETerminating ),
+                         TInt( iLiveSession->iSession->iState ) )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//  
+void UT_CMusEngOutSession::UT_EstablishSessionLL()
+    {
+    // Try to establish, must fail, because of missing session
+    TRAPD( error, iLiveSession->EstablishSessionL() );
+    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
+    EUNIT_ASSERT( error == KErrNotReady );
+    
+    // Call to CMusEngOutMceSession::InviteL leads to call to EstablishL
+    iLiveSession->EstablishLcSessionL();
+    
+    // Check that ports are correct
+    
+    for ( TInt i = 0; i < iLiveSession->iSession->Streams().Count(); ++i )
+        {
+        CMceMediaStream* stream = iLiveSession->iSession->Streams()[i];
+        if ( stream->Type() == KMceAudio )
+            {
+            EUNIT_ASSERT( stream->iLocalMediaPort == 57344 )
+            }
+        else
+            {
+            EUNIT_ASSERT( stream->iLocalMediaPort == 49152 )
+            }
+        }
+        
+    // Check Accept-Contact -header
+    
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders )
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders->Count() == 2 )
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 0 ) ==
+                  KMusEngAcceptContactHeader() )
+    EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 1 ) ==
+                  KMusAcceptHeader() );   
+    EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//    
+void UT_CMusEngOutSession::UT_HandleTerminationL()
+    {
+    // Try different values    
+    iLiveSession->HandleTermination( KSipStatusCode408ConnectionTimeOut, 
+                                     KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ENoAnswer ) )
+    iLcSessionObserver->Reset();
+    
+    iLiveSession->HandleTermination( KSipStatusCode415UnsupportedMediaType, 
+                                     KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ESessionRejected ) ) 
+    iLcSessionObserver->Reset();
+    
+    iLiveSession->HandleTermination( KSipStatusCode488NotAcceptableHere, 
+                                     KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ESessionRejected ) )
+    iLcSessionObserver->Reset();
+    
+    iLiveSession->HandleTermination( KSipStatusCode606NotAcceptable, 
+                                     KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ESessionRejected ) )
+    iLcSessionObserver->Reset(); 
+    
+    iLiveSession->HandleTermination( KSipStatusCode486BusyHere, 
+                                     KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ERecipientBusy ) )
+    iLcSessionObserver->Reset();
+    
+    iLiveSession->HandleTermination( KSipStatusCode487RequestCancelled, 
+                                     KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ESessionCancelled ) )
+    iLcSessionObserver->Reset();
+    
+    iLiveSession->HandleTermination( KSipStatusCode603Decline, KNullDesC8()  );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ESessionRejected ) )
+    iLcSessionObserver->Reset();
+
+    iLiveSession->HandleTermination( KSipStatusCode480TemporarilyNotAvailable, 
+                                     KNullDesC8() );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ERecipientTemporarilyNotAvailable ) )
+    iLcSessionObserver->Reset();
+    
+    // Receive 486 with operator variant
+    iLiveSession->iOperatorVariant = ETrue;
+    iLiveSession->HandleTermination( KSipStatusCode486BusyHere, KNullDesC8()  );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ESessionRejected ) )    
+    iLcSessionObserver->Reset();
+    iLiveSession->iOperatorVariant = EFalse;
+    
+    // Normal termination, let the base class handle
+    iLiveSession->HandleTermination(  KSipStatusCode200OK, KNullDesC8()  );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionStateChanged ) )
+    iLcSessionObserver->Reset();
+    }    
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//    
+void UT_CMusEngOutSession::UT_HandleRecipientNotFoundTerminationL()
+    {
+    EUNIT_ASSERT_EQUALS( iLiveSession->iTriedInvitations, 0 );
+    
+    // Retry possible when 404 is received but fails because of recipient 
+    // proposal is missing for some reason, recipient not found callback
+    // is called instead of retry
+    delete iLiveSession->iRemoteSipAddressProposal;
+    iLiveSession->iRemoteSipAddressProposal = NULL;
+    iLcSessionObserver->Reset();
+    iLiveSession->HandleTermination( KSipStatusCode404RecipientNotFound, 
+                                     KNullDesC8() );
+    
+    EUNIT_ASSERT( iLiveSession->iDeltaTimer->IsActive() == ETrue )
+    iLiveSession->AsyncBrakeCompleted( iLiveSession );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ERecipientNotFound ) )
+    
+    // Retry possible when 404 is received
+    delete iLiveSession->iRemoteSipAddressProposal;
+    iLiveSession->iRemoteSipAddressProposal = NULL;
+    iLiveSession->iRemoteSipAddressProposal = KTestRecipient2SipUri().AllocL();
+    iLcSessionObserver->Reset();
+    iLcUiProvider->iRecipient.Set( KTestRecipient2SipUri );
+    iLcUiProvider->iSimulatedReturnValue = ETrue;
+    iLiveSession->HandleTermination( KSipStatusCode404RecipientNotFound, 
+                                     KNullDesC8() );
+       
+    EUNIT_ASSERT( iLiveSession->iDeltaTimer->IsActive() == ETrue );
+    iLiveSession->AsyncBrakeCompleted( iLiveSession );
+
+    // Memory running out might cause that retry is not done
+    if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed )
+        {
+        User::Leave( KErrNoMemory );
+        }
+    EUNIT_ASSERT_EQUALS( 1, iLiveSession->iTriedInvitations )    
+    EUNIT_ASSERT_EQUALS( 
+        KTestRecipient2SipUri8(), 
+        *( iLiveSession->iRecipient ) )
+    
+    // Retry not anymore possible when 404 received (e.g. manual address query
+    // was done for invite).
+    iLcSessionObserver->Reset();
+    iLiveSession->HandleTermination( KSipStatusCode404RecipientNotFound, 
+                                     KNullDesC8() );
+    EUNIT_ASSERT( iLiveSession->iDeltaTimer->IsActive() == ETrue )
+    iLiveSession->AsyncBrakeCompleted( iLiveSession );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ERecipientNotFound ) )
+    
+    // 416 has identical handling
+    iLcSessionObserver->Reset();
+    iLiveSession->HandleTermination( KSipStatusCode416UnsupportedUriScheme, 
+                                     KNullDesC8() );
+    EUNIT_ASSERT( iLiveSession->iDeltaTimer->IsActive() == ETrue );
+    iLiveSession->AsyncBrakeCompleted( iLiveSession );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ERecipientNotFound ) )
+   
+    // 479 has identical handling
+    iLcSessionObserver->Reset();
+    iLiveSession->HandleTermination( KSipStatusCode479NotAbleToProcessURI, 
+                                    KNullDesC8() );
+    EUNIT_ASSERT( iLiveSession->iDeltaTimer->IsActive() == ETrue );
+    iLiveSession->AsyncBrakeCompleted( iLiveSession );
+    EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
+                         TInt( CLcSessionObserverStub::ESessionFailed ) )
+    EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError,
+                         TInt( MLcSession::ERecipientNotFound ) )
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//   
+void UT_CMusEngOutSession::UT_AdjustVideoCodecLL()
+    {
+    //H263
+    CMceH263Codec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH2632000() );
+    iLiveSession->CMusEngMceOutSession::AdjustVideoCodecL( *codecH263,
+                                                           KMceCameraSource );
+    // Test payloadtype
+    EUNIT_ASSERT( codecH263->iPayloadType == 96 )
+    CleanupStack::PopAndDestroy( codecH263 );
+    
+    //H264
+    CMceAvcCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() );
+    iLiveSession->CMusEngMceOutSession::AdjustVideoCodecL( *codecAvc,
+                                                           KMceCameraSource  );
+    // Test payloadtype
+    EUNIT_ASSERT( codecAvc->iPayloadType == 98 )
+    CleanupStack::PopAndDestroy( codecAvc );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//   
+void UT_CMusEngOutSession::UT_AdjustAudioCodecLL()
+    {
+    CMceAudioCodec* codec = 
+                iLiveSession->iManager->SupportedAudioCodecs()[0]->CloneL();
+    CleanupStack::PushL( codec );
+    iLiveSession->CMusEngMceOutSession::AdjustAudioCodecL( *codec );
+    
+    // Test payloadtype
+    
+    EUNIT_ASSERT( codec->iPayloadType == 97 )
+    
+    // Test that base class has been called
+    
+    EUNIT_ASSERT( codec->iMMFPriority == KAudioPrioritySwisPlayback )
+    EUNIT_ASSERT( codec->iMMFPriorityPreference == KAudioPrefSwisPlayback )
+    
+    CleanupStack::PopAndDestroy( codec );
+    }
+        
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//   
+void UT_CMusEngOutSession::UT_CreateMceSessionStructureLL()
+    {
+    // Test removal of QoS-lines
+    
+    iLiveSession->iRecipient = KTestRecipientSipUri8().AllocL();
+  
+    // IETF profile
+    iLiveSession->CreateMceSessionStructureL();
+    TUint modifierValue = 500; //Just some value that is not used
+    iLiveSession->iSession->GetModifierL( KMcePreconditions, modifierValue );
+    EUNIT_ASSERT( modifierValue == KMcePreconditionsNotUsed );
+    
+    delete iLiveSession->iSession;
+    iLiveSession->iSession = NULL;
+    
+    // IMS profile
+    CSIPProfile* profile = iLiveSession->iSipProfileHandler->Profile();
+    profile->iTypeInfo.iSIPProfileClass = TSIPProfileTypeInfo::EIms;
+    iLiveSession->CreateMceSessionStructureL();
+    modifierValue = 0;
+    iLiveSession->iSession->GetModifierL( KMcePreconditions, modifierValue );
+    EUNIT_ASSERT( modifierValue == KMcePreconditionsSupported );
+    
+    // IMS profile with force internet signaling
+    
+    // TODO: Stub MultimediaSharingSettings, set ForceInternetSignalingSettingL
+    // to return EForceInternetSignaling and test again
+    
+    // Test bundling
+    
+    EUNIT_ASSERT( iLiveSession->iSession->Bundles().Count() == 0 )
+
+    CMusEngClipSession* clipSession = CMusEngClipSession::NewL();
+    CleanupStack::PushL( clipSession );
+    clipSession->SetLcSessionObserver( iLcSessionObserver );
+    clipSession->SetLcUiProvider( iLcUiProvider );    
+    clipSession->LocalVideoPlayer()->LcSourceFileControl()->SetLcFileNameL(
+        KTestVideoFileName() );
+    
+    clipSession->iRecipient = KTestRecipientSipUri8().AllocL();
+    
+    clipSession->CreateMceSessionStructureL();
+    
+    CMceSession* session = clipSession->iSession;
+    
+    EUNIT_ASSERT( session->Bundles().Count() == 1 )
+    EUNIT_ASSERT( session->Bundles()[0]->Streams().Count() == 2 )
+    EUNIT_ASSERT( session->Bundles()[0]->Streams()[0]->Type() == KMceAudio )
+    EUNIT_ASSERT( session->Bundles()[0]->Streams()[0]->Sinks()[0]->Type() == 
+                  KMceSpeakerSink )
+    EUNIT_ASSERT( session->Bundles()[0]->Streams()[1]->Type() == KMceVideo )              
+    EUNIT_ASSERT( session->Bundles()[0]->Streams()[1]->Sinks()[0]->Type() == 
+                  KMceDisplaySink )
+
+    CleanupStack::PopAndDestroy( clipSession );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//   
+void UT_CMusEngOutSession::UT_ConstructLL()
+    {
+    TUint32 profileid = 0;
+    CSIPProfile* profile = iLiveSession->iSipProfileHandler->Profile();
+    profile->GetParameter( KSIPProfileId, profileid );
+    //stub creates defaultprofile if profileid is zero
+    //stub does not care if the profileid is given or not
+    //profileid of new profile is always 1
+    EUNIT_ASSERT(profile->iIsDefaultProfile)
+
+    TInt error = NULL;
+    const TUint KSipProfileId2( 2 );
+    TRAP( error, RProperty::Set( NMusSessionApi::KCategoryUid,
+                                 NMusSessionApi::KSipProfileId,
+                                 KSipProfileId2 ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( error == KErrNone );
+    profile = NULL;
+    profileid = 0;
+    
+    SIPStrings::Close();
+    delete iLcSessionObserver;
+    iLcSessionObserver = NULL;
+    delete iLiveSession;
+    iLiveSession = NULL;
+        
+    iLcSessionObserver = new( ELeave )CLcSessionObserverStub;
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+    
+    SIPStrings::OpenL();
+    
+    profile = iLiveSession->iSipProfileHandler->Profile();
+    profile->GetParameter( KSIPProfileId, profileid );
+    EUNIT_ASSERT( !profile->iIsDefaultProfile )
+    
+    
+    TRAP( error, RProperty::Delete( NMusSessionApi::KCategoryUid,
+                                     NMusSessionApi::KSipProfileId ) );
+    if ( error == KErrNoMemory ) User::Leave( error );
+    EUNIT_ASSERT ( error == KErrNone );
+    profile = NULL;
+    profileid = 0;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngOutSession::UT_ContactSavingLL()
+    {
+    ContactEngineStubHelper::Reset();
+    
+    // Saving of contact is done at destruction phase only if recipient
+    // has been queried from client
+    //
+    CMusEngLiveSession* liveSession = CMusEngLiveSession::NewL();
+    liveSession->SetLcSessionObserver( iLcSessionObserver );
+    liveSession->SetLcUiProvider( iLcUiProvider );    
+    delete liveSession;
+    liveSession = NULL;
+    EUNIT_ASSERT( ContactEngineStubHelper::GetCalledFunction() == EContactEngineStubNone );
+    
+    
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KContactId,
+                                        2 ) );
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KTelNumber,
+                                        _L("12341234") ) );
+    
+    liveSession = CMusEngLiveSession::NewL();
+    CleanupStack::PushL( liveSession );
+    liveSession->SetLcSessionObserver( iLcSessionObserver );
+    liveSession->SetLcUiProvider( iLcUiProvider );    
+    
+    delete liveSession->iRecipient;
+    liveSession->iRecipient = NULL;
+    liveSession->iRecipient = _L8("sip:yep@10.10.10.10").AllocL();
+    liveSession->iAddressQueried = ETrue;
+    CleanupStack::PopAndDestroy( liveSession );
+    if ( ContactEngineStubHelper::GetCalledFunction() != EContactEngineStubSetText )
+        {
+        // out-of-memory was trap ignored and saving failed because of that
+        User::Leave( KErrNoMemory );
+        }
+    EUNIT_ASSERT( ContactEngineStubHelper::GetCalledFunction() == EContactEngineStubSetText );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//  
+void UT_CMusEngOutSession::UT_RemoteAddressLL()
+    {
+    delete iLiveSession->iRecipient;
+    iLiveSession->iRecipient = NULL;
+    EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->RemoteAddressL(), KErrNotReady )
+    
+    iLiveSession->iRecipient = KTestRecipient2SipUri8().AllocL();
+    
+    HBufC* remoteAddr = iLiveSession->RemoteAddressL();
+    CleanupStack::PushL( remoteAddr );
+    EUNIT_ASSERT_EQUALS( KTestRecipient2SipUri(), *remoteAddr )
+    CleanupStack::PopAndDestroy( remoteAddr );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void UT_CMusEngOutSession::UT_RemoteDisplayNameL()
+    {
+    // Test 1 : Default setting, contact name set
+    EUNIT_ASSERT_EQUALS ( KTestContactName(), iLiveSession->RemoteDisplayName() )    
+    
+    // Test 2 : Contact name set to null descriptor
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                       NMusSessionApi::KContactName,
+                                       KNullDesC) );
+    delete iLiveSession;
+    iLiveSession = NULL;
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+    EUNIT_ASSERT( iLiveSession->RemoteDisplayName().Length() == 0 );
+    
+    // Test 3 : Manual address entered
+    PropertyHelper::SetErrorCode( KErrNone );
+    delete iLiveSession;
+    iLiveSession = NULL;
+    iLcSessionObserver->Reset();
+    iLcUiProvider->Reset();
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KContactName,
+                                        KTestContactName ) );    
+    iLcUiProvider->iSimulatedReturnValue = ETrue;
+    iLcUiProvider->iRecipient.Set( KTestRecipientSipUri );
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+    PropertyHelper::SetErrorCode( KErrNotFound );
+    iLiveSession->EstablishLcSessionL();    
+    EUNIT_ASSERT_EQUALS( 1, iLiveSession->iTriedInvitations )
+    EUNIT_ASSERT_EQUALS( KTestRecipientSipUri(),iLiveSession->RemoteDisplayName() )
+    
+    // Test 4 : Contact name has zero lenth and multiple address entry query. 
+    //          Displayname should have user selected address.
+    //          Rare scenario.
+    PropertyHelper::SetErrorCode( KErrNone );
+    iLcSessionObserver->Reset();
+    iLcUiProvider->Reset();
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KContactName,
+                                        KNullDesC) );
+    delete iLiveSession;
+    iLiveSession = NULL;    
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+    iLcUiProvider->iSimulatedReturnValue = ETrue;    
+    PropertyHelper::SetErrorCode( KErrNone );
+    TBuf<200> multipleAddr;
+    multipleAddr.Append( KTestRecipientTelUri );
+    multipleAddr.Append( _L(",") );
+    multipleAddr.Append( KTestRecipientSipUri );
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KRemoteSipAddress,
+                                        multipleAddr ) );
+    iLiveSession->EstablishLcSessionL();    
+    /* Stub selects the first one automatically */
+    EUNIT_ASSERT_EQUALS( KTestRecipientTelUri(),iLiveSession->RemoteDisplayName() );
+    
+    // Test 5 : Contact name has zero lenth and no manual entry queried. 
+    //          Recipient has only teluri. So displayname should have tel uri address.
+    PropertyHelper::SetErrorCode( KErrNone );
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KContactName,
+                                        KNullDesC) );
+    delete iLiveSession;
+    iLiveSession = NULL;    
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+    iLcUiProvider->iSimulatedReturnValue = ETrue;
+    TBuf<200> singleAddr;
+    singleAddr.Append( KTestRecipientTelUri );    
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KRemoteSipAddress,
+                                        singleAddr ) );
+    PropertyHelper::SetErrorCode( KErrNone );
+    iLiveSession->EstablishLcSessionL();
+    EUNIT_ASSERT_EQUALS( KTestRecipientTelUri(),iLiveSession->RemoteDisplayName() );
+    
+    // Test 6 : Contact name has zero lenth and recipient has teluri 
+    //          and invitation fails to teluri.
+    //          Manual address query entered and now display should have entered 
+    //          manual address.
+    PropertyHelper::SetErrorCode( KErrNone );
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                           NMusSessionApi::KContactName,
+                                           KNullDesC) );
+    delete iLiveSession;
+    iLiveSession = NULL;    
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
+    iLcUiProvider->iRecipient.Set( KTestRecipientSipUri );
+    iLcUiProvider->iSimulatedReturnValue = ETrue;
+    singleAddr.Copy( KTestRecipientTelUri );
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KRemoteSipAddress,
+                                        singleAddr ) );
+    PropertyHelper::SetErrorCode( KErrNotFound );
+    iLiveSession->EstablishLcSessionL(); 
+    EUNIT_ASSERT_EQUALS( 1, iLiveSession->iTriedInvitations )
+    EUNIT_ASSERT_EQUALS( KTestRecipientSipUri(),iLiveSession->RemoteDisplayName() );
+    }
+
+//  TEST TABLE
+
+EUNIT_BEGIN_TEST_TABLE(
+    UT_CMusEngOutSession,
+    "UT_CMusEngOutSesssion",
+    "UNIT" )
+
+EUNIT_TEST(
+    "EstablishLcSessionL - test ",
+    "CMusEngOutSession",
+    "EstablishLcSessionL",
+    "FUNCTIONALITY",
+    SetupL, UT_EstablishLcSessionL, Teardown)
+
+EUNIT_TEST(
+    "TerminateLcSessionL - test ",
+    "CMusEngOutSession",
+    "TerminateLcSessionL",
+    "FUNCTIONALITY",
+    SetupL, UT_TerminateLcSessionL, Teardown)    
+    
+EUNIT_TEST(
+    "EstablishLcSessionL recipient resolving - test ",
+    "CMusEngOutSession",
+    "EstablishLcSessionL",
+    "FUNCTIONALITY",
+    SetupL, UT_EstablishLcSession_RecipientResolvingL, Teardown)
+
+EUNIT_TEST(
+    "EstablishLcSessionL registration pending - test ",
+    "CMusEngOutSession",
+    "EstablishLcSessionL",
+    "FUNCTIONALITY",
+    SetupL, UT_EstablishLcSession_RegistrationPendingL, Teardown)
+
+EUNIT_TEST(
+    "EstablishSessionL - test ",
+    "CMusEngOutSession",
+    "EstablishSessionL",
+    "FUNCTIONALITY",
+    SetupL, UT_EstablishSessionLL, Teardown)   
+
+EUNIT_TEST(
+    "HandleTermination - test ",
+    "CMusEngOutSession",
+    "HandleTermination",
+    "FUNCTIONALITY",
+    SetupL, UT_HandleTerminationL, Teardown)   
+
+EUNIT_TEST(
+    "HandleTermination recipient not found - test ",
+    "CMusEngOutSession",
+    "HandleTermination recipient not found",
+    "FUNCTIONALITY",
+    SetupL, UT_HandleRecipientNotFoundTerminationL, Teardown)  
+    
+EUNIT_TEST(
+    "AdjustVideoCodecL - test ",
+    "CMusEngOutSession",
+    "AdjustVideoCodecL",
+    "FUNCTIONALITY",
+    SetupL, UT_AdjustVideoCodecLL, Teardown)   
+
+EUNIT_TEST(
+    "AdjustAudioCodecL - test ",
+    "CMusEngOutSession",
+    "AdjustAudioCodecL",
+    "FUNCTIONALITY",
+    SetupL, UT_AdjustAudioCodecLL, Teardown)   
+    
+EUNIT_TEST(
+    "CreateMceSessionStructureL - test ",
+    "CMusEngOutSession",
+    "CreateMceSessionStructureL",
+    "FUNCTIONALITY",
+    SetupL, UT_CreateMceSessionStructureLL, Teardown)    
+  
+EUNIT_TEST(
+    "ConstructLL - test ",
+    "CMusEngOutSession",
+    "ConstructLL",
+    "FUNCTIONALITY",
+    SetupL, UT_ConstructLL, Teardown) 
+
+EUNIT_TEST(
+    "ContactSavingL - test ",
+    "CMusEngOutSession",
+    "ContactSavingL",
+    "FUNCTIONALITY",
+    SetupL, UT_ContactSavingLL, Teardown) 
+
+EUNIT_TEST(
+    "RemoteAddressLL - test ",
+    "CMusEngOutSession",
+    "RemoteAddressLL",
+    "FUNCTIONALITY",
+    SetupL, UT_RemoteAddressLL, Teardown)
+
+EUNIT_TEST(
+    "RemoteDisplayName - test ",
+    "CMusEngOutSession",
+    "RemoteDisplayName",
+    "FUNCTIONALITY",
+    SetupL, UT_RemoteDisplayNameL, Teardown)
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE
+
+