mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengoutsession.cpp
branchRCL_3
changeset 22 73a1feb507fb
parent 0 f0cf47e981f9
child 23 bc78a40cd63c
--- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengoutsession.cpp	Thu Aug 19 09:51:39 2010 +0300
+++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengoutsession.cpp	Tue Aug 31 15:12:07 2010 +0300
@@ -20,15 +20,16 @@
 #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>
@@ -38,13 +39,15 @@
 #include <mceh263codec.h>
 #include <mceavccodec.h>
 #include <mceaudiocodec.h>
+#include <mcecamerasource.h>
 
-#include <sipprofile.h>
+
 #include <sipstrings.h>
 
 #include <audiopreference.h>
 #include <uri8.h>
 
+_LIT( KTestContactName, "nokia" );
 
 // -----------------------------------------------------------------------------
 //
@@ -109,17 +112,25 @@
 //
 void UT_CMusEngOutSession::SetupL()
     {
-    iObserver = new( ELeave ) CMusEngObserverStub;
-    iLiveSession = CMusEngLiveSession::NewL( KNullDesC(),
-                                             TRect(0,0, 100,100),
-                                             *iObserver,
-                                             *iObserver,
-                                             *iObserver );
+    
+    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();
     
-    iLiveSession->iPrivate = EFalse;
-    iLiveSession->iPrivateNumber = EFalse;
-    
+    User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid,
+                                        NMusSessionApi::KRemoteSipAddress,
+                                        KTestRecipientSipUri ) );
     }
 
 
@@ -131,26 +142,28 @@
     {
     SIPStrings::Close();
     delete iLiveSession;
-    delete iObserver;
+    delete iLcSessionObserver;
+    delete iLcUiProvider;
+    delete iAudioRoutingObserver;
+    PropertyHelper::SetErrorCode( KErrNone );
+    PropertyHelper::Close();
     }
 
 
-
 // TEST CASES
 
-
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //
-void UT_CMusEngOutSession::UT_CMusEngOutSession_InviteLL()
+void UT_CMusEngOutSession::UT_EstablishLcSessionL()
     {
-
     // Initial state
     EUNIT_ASSERT( !iLiveSession->iSession );
     
-    // Simulate failing session structure construction.
-    iLiveSession->InviteL( KTestRecipientSipUri );
+    ///////////////////////////////////////////////////////////////////////////
+    // 1. Simulate failing session structure construction.
+    iLiveSession->EstablishLcSessionL();
     
     iLiveSession->iSession->iState = CMceSession::EIdle;
     delete iLiveSession->iSession->Streams()[0];
@@ -158,11 +171,13 @@
                                             iLiveSession->iSession->Streams();
     const_cast<RPointerArray<CMceMediaStream>&>(constStreams)[0] = NULL;
 
-    // Normal invite
-    iLiveSession->InviteL( KTestRecipientSipUri );
+    ///////////////////////////////////////////////////////////////////////////
+    // 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 );
@@ -177,15 +192,20 @@
     EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->Count() == 1 );
     EUNIT_ASSERT( iLiveSession->iSession->iSessionSDPLines->MdcaPoint( 0 ) ==
                   KMusEngSessionSdpLineXApplication() );
-    
-    // Normal operator invite
+        
+    // 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( KNullDesC,
-                                             TRect(0,0, 100,100),
-                                             *iObserver,
-                                             *iObserver,
-                                             *iObserver );
+    iLiveSession = CMusEngLiveSession::NewL();
+    iLiveSession->SetLcSessionObserver( iLcSessionObserver );
+    iLiveSession->SetLcUiProvider( iLcUiProvider );    
    	iLiveSession->iOperatorVariant = ETrue;
    	CSIPProfile* profile = iLiveSession->iSipProfileHandler->Profile();
     delete profile->iArray;
@@ -193,11 +213,10 @@
     profile->iArray = new ( ELeave ) CDesC8ArrayFlat( 1 );
     profile->iArray->AppendL( KMusTestUri );
 
-    iLiveSession->InviteL( KTestRecipientSipUri );
+    iLiveSession->EstablishLcSessionL();
     
     EUNIT_ASSERT( iLiveSession->iSession );
     // Next assertion ensures that session structure is new
-    EUNIT_ASSERT( iLiveSession->iSession->Streams()[0] ); 
     EUNIT_ASSERT( *(iLiveSession->iRecipient) == KTestRecipientSipUri8() );
     EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering );
     
@@ -211,6 +230,8 @@
     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 ) ==
@@ -219,77 +240,223 @@
                   KMusEngSessionSdpLineType() )
                   
     EUNIT_ASSERT( iLiveSession->iSession->Streams().Count() > 0 );   
-    TBool foundBandwidthLineFromMediaLevel( EFalse );
-    for ( TInt i = 0; i <  iLiveSession->iSession->Streams().Count(); i++ )
-        {
-        if ( iLiveSession->iSession->Streams()[0]->Type() == KMceVideo )
-            {
-            if ( iLiveSession->iSession->Streams()[0]->iMediaSDPLines->MdcaCount() > 0 &&
-                 iLiveSession->iSession->Streams()[0]->iMediaSDPLines->MdcaPoint( 0 ) ==
-                    KMusEngSessionSdpLineBandwidthField() )
-                {
-                foundBandwidthLineFromMediaLevel = ETrue;
-                }
-            }
-        }
-    EUNIT_ASSERT( foundBandwidthLineFromMediaLevel );
-                      
-    // Try invite again, must fail
-    TRAPD( error, iLiveSession->InviteL( KTestRecipientSipUri ) );
+    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 );
     
-    // Simulate normal session ending, no need for observer call in this case
+    // 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->InviteL( KTestRecipientSipUri );
+    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_CMusEngOutSession_CancelInviteLL()
+void UT_CMusEngOutSession::UT_TerminateLcSessionL()
     {
-    // Try to cancel, must fail
-    TRAPD( error, iLiveSession->CancelInviteL() );
-    MUS_TEST_FORWARD_ALLOC_FAILURE( error );
-    EUNIT_ASSERT( error == KErrNotReady );
+    // 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 ) )
     
-    // Invite
-    iLiveSession->InviteL( KTestRecipientSipUri );
-    EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering );
-    
-    // Cancel
-    iLiveSession->CancelInviteL();
-    EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::ECancelling );
-    
-    // Try to cancel again, does nothing
-    iLiveSession->CancelInviteL();
-    EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::ECancelling );
+    // 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_CMusEngOutSession_EstablishSessionLL()
+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 );
-    iLiveSession->iPrivate = ETrue;
-    iLiveSession->iPrivateNumber = EFalse;
     
     // Call to CMusEngOutMceSession::InviteL leads to call to EstablishL
-    iLiveSession->InviteL( KTestRecipientSipUri );
+    iLiveSession->EstablishLcSessionL();
     
     // Check that ports are correct
     
@@ -315,160 +482,205 @@
     EUNIT_ASSERT( iLiveSession->iSession->iHeaders->MdcaPoint( 1 ) ==
                   KMusAcceptHeader() );   
     EUNIT_ASSERT( iLiveSession->iSession->State() == CMceSession::EOffering );
-    
-    // Privacy test : Check Private -header & originator
-    delete iLiveSession;
-    iLiveSession = NULL;
-    iLiveSession = CMusEngLiveSession::NewL( KNullDesC(),
-                                                TRect(0,0, 100,100),
-                                                *iObserver,
-                                                *iObserver,
-                                                *iObserver );
-    iLiveSession->iPrivate = ETrue;
-    iLiveSession->iPrivateNumber = ETrue;
-    
-    // Call to CMusEngOutMceSession::InviteL leads to call to EstablishL
-    iLiveSession->InviteL( KTestRecipientSipUri );
-    EUNIT_ASSERT( *iLiveSession->iSession->iOriginator == KMusAnonymousHeader );
-    
-    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 ).Find( KMusPrivacyHeader() ) == 0 );
-    
-    
     }
 
-
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //    
-void UT_CMusEngOutSession::UT_CMusEngOutSession_HandleTerminationL()
+void UT_CMusEngOutSession::UT_HandleTerminationL()
     {
-
-    // Try different values
-    iLiveSession->HandleTermination( KSipStatusCode400BadRequest, 
-                                     KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionBadRequestCalled );
-    iObserver->Reset();
-    
-    iLiveSession->HandleTermination( KSipStatusCode401Unauthorized, 
-                                     KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionUnauthorizedCalled );
-    iObserver->Reset();
-    
-    iLiveSession->HandleTermination( KSipStatusCode402PaymentRequired, 
-                                     KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionPaymentRequiredCalled );
-    iObserver->Reset();
-    
-    iLiveSession->HandleTermination( KSipStatusCode404RecipientNotFound, 
-                                     KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionRecipientNotFoundCalled );
-    iObserver->Reset();
-    
-    iLiveSession->HandleTermination( KSipStatusCode416UnsupportedUriScheme, 
-                                     KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionRecipientNotFoundCalled );
-    iObserver->Reset();
-
-    iLiveSession->HandleTermination( KSipStatusCode479NotAbleToProcessURI, 
-                                     KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionRecipientNotFoundCalled );
-    iObserver->Reset();
-    
-    iLiveSession->HandleTermination( 
-                            KSipStatusCode407ProxyAuthenticationRequired, 
-                            KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionProxyAuthenticationRequiredCalled );
-    iObserver->Reset();
-    
+    // Try different values    
     iLiveSession->HandleTermination( KSipStatusCode408ConnectionTimeOut, 
                                      KNullDesC8() );
-    EUNIT_ASSERT( iObserver->iSessionRequestTimeOutCalled );
-    iObserver->Reset();
+    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( iObserver->iSessionUnsupportedMediaTypeCalled );
-    iObserver->Reset();
+    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( iObserver->iSessionUnsupportedMediaTypeCalled );
-    iObserver->Reset();
+    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( iObserver->iSessionUnsupportedMediaTypeCalled );
-    iObserver->Reset(); 
+    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( iObserver->iSessionBusyHereCalled );
-    iObserver->Reset();
+    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( iObserver->iSessionRequestCancelledCalled );
-    iObserver->Reset();
+    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( iObserver->iSessionRejectedCalled );
-    iObserver->Reset();
+    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( iObserver->iSessionTemporarilyNotAvailable );
-    iObserver->Reset();
+    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( iObserver->iSessionRejectedCalled )
-    EUNIT_ASSERT( !iObserver->iSessionBusyHereCalled )
-    iObserver->Reset();
+    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( iObserver->iSessionTerminatedCalled ); // called by base class
-    iObserver->Reset();
-
+    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_CMusEngOutSession_AdjustVideoCodecLL()
+void UT_CMusEngOutSession::UT_AdjustVideoCodecLL()
     {
     //H263
     CMceH263Codec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH2632000() );
-    iLiveSession->CMusEngMceOutSession::AdjustVideoCodecL( *codecH263 );
+    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 );
+    iLiveSession->CMusEngMceOutSession::AdjustVideoCodecL( *codecAvc,
+                                                           KMceCameraSource  );
     // Test payloadtype
     EUNIT_ASSERT( codecAvc->iPayloadType == 98 )
     CleanupStack::PopAndDestroy( codecAvc );
     }
 
-
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //   
-void UT_CMusEngOutSession::UT_CMusEngOutSession_AdjustAudioCodecLL()
+void UT_CMusEngOutSession::UT_AdjustAudioCodecLL()
     {
     CMceAudioCodec* codec = 
                 iLiveSession->iManager->SupportedAudioCodecs()[0]->CloneL();
@@ -487,12 +699,11 @@
     CleanupStack::PopAndDestroy( codec );
     }
         
-
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //   
-void UT_CMusEngOutSession::UT_CMusEngOutSession_CreateMceSessionStructureLL()
+void UT_CMusEngOutSession::UT_CreateMceSessionStructureLL()
     {
     // Test removal of QoS-lines
     
@@ -524,14 +735,12 @@
     
     EUNIT_ASSERT( iLiveSession->iSession->Bundles().Count() == 0 )
 
-    CMusEngClipSession* clipSession = CMusEngClipSession::NewL(
-                                                    TRect(0, 100, 200, 300 ),
-                                                    *iObserver,
-                                                    *iObserver,
-                                                    *iObserver );
+    CMusEngClipSession* clipSession = CMusEngClipSession::NewL();
     CleanupStack::PushL( clipSession );
-    
-    clipSession->SetClipL( KTestVideoFileName );
+    clipSession->SetLcSessionObserver( iLcSessionObserver );
+    clipSession->SetLcUiProvider( iLcUiProvider );    
+    clipSession->LocalVideoPlayer()->LcSourceFileControl()->SetLcFileNameL(
+        KTestVideoFileName() );
     
     clipSession->iRecipient = KTestRecipientSipUri8().AllocL();
     
@@ -551,6 +760,230 @@
     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(
@@ -559,53 +992,102 @@
     "UNIT" )
 
 EUNIT_TEST(
-    "InviteL - test ",
+    "EstablishLcSessionL - test ",
     "CMusEngOutSession",
-    "InviteL",
+    "EstablishLcSessionL",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngOutSession_InviteLL, Teardown)
+    SetupL, UT_EstablishLcSessionL, Teardown)
 
 EUNIT_TEST(
-    "CancelInviteL - test ",
+    "TerminateLcSessionL - test ",
+    "CMusEngOutSession",
+    "TerminateLcSessionL",
+    "FUNCTIONALITY",
+    SetupL, UT_TerminateLcSessionL, Teardown)    
+    
+EUNIT_TEST(
+    "EstablishLcSessionL recipient resolving - test ",
     "CMusEngOutSession",
-    "CancelInviteL",
+    "EstablishLcSessionL",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngOutSession_CancelInviteLL, Teardown)
+    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_CMusEngOutSession_EstablishSessionLL, Teardown)   
+    SetupL, UT_EstablishSessionLL, Teardown)   
 
 EUNIT_TEST(
     "HandleTermination - test ",
     "CMusEngOutSession",
     "HandleTermination",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngOutSession_HandleTerminationL, Teardown)   
+    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_CMusEngOutSession_AdjustVideoCodecLL, Teardown)   
+    SetupL, UT_AdjustVideoCodecLL, Teardown)   
 
 EUNIT_TEST(
     "AdjustAudioCodecL - test ",
     "CMusEngOutSession",
     "AdjustAudioCodecL",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngOutSession_AdjustAudioCodecLL, Teardown)   
+    SetupL, UT_AdjustAudioCodecLL, Teardown)   
     
 EUNIT_TEST(
     "CreateMceSessionStructureL - test ",
     "CMusEngOutSession",
     "CreateMceSessionStructureL",
     "FUNCTIONALITY",
-    SetupL, UT_CMusEngOutSession_CreateMceSessionStructureLL, Teardown)    
+    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