diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmcesession.cpp --- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmcesession.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengmcesession.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -28,9 +28,12 @@ #include "musengsessiondurationtimer.h" #include "musengtelephoneutils.h" #include "musengmceutils.h" +#include "mussessionproperties.h" +#include "contactenginestub.h" +#include "musenglivevideoplayer.h" // SYSTEM INCLUDES - +#include #include #include #include @@ -42,9 +45,37 @@ #include #include #include +#include #include -#include +#include +#include +#include + +// CONSTANTS + +_LIT8( KMusAvcBitrateLevel1TestText, "TestTextForAvcBrL1Level" ); +_LIT8( KMusAvcBitrateLevel1bTestText, "TestTextForAvcBrL1bLevel" ); +_LIT8( KMusAvcBitrateLevel1_1TestText, "TestTextForAvcBrL1_1Level" ); +_LIT8( KMusAvcBitrateLevel1_2TestText, "TestTextForAvcBrL1_2Level" ); +_LIT8( KMusAvcBitrateLevel1_3TestText, "TestTextForAvcBrL1_3Level" ); +_LIT8( KMusAvcBitrateLevel2TestText, "TestTextForAvcBrL2Level" ); + +_LIT8( KMusAvcBitrateLevel_1b_ConfigKey, "AvcBrL1b=TestTextForAvcBrL1bLevel;" ); +_LIT8( KMusAvcBitrateLevel_1_1_ConfigKey, +"AvcBrL1_1=TestTextForAvcBrL1_1Level;"); + +_LIT8( KMusAvcBitrateLevels_1_1_And_1b_ConfigKeys, +"AvcBrL1_1=TestTextForAvcBrL1_1Level;\ +AvcBrL1b=TestTextForAvcBrL1bLevel;" ); + +_LIT8( KMusAvcAllLevelsConcatenation, +"AvcBrL1=TestTextForAvcBrL1Level;\ +AvcBrL1b=TestTextForAvcBrL1bLevel;\ +AvcBrL1_1=TestTextForAvcBrL1_1Level;\ +AvcBrL1_2=TestTextForAvcBrL1_2Level;\ +AvcBrL1_3=TestTextForAvcBrL1_3Level;\ +AvcBrL2=TestTextForAvcBrL2Level;" ); // ----------------------------------------------------------------------------- @@ -110,34 +141,37 @@ // void UT_CMusEngMceSession::SetupL( ) { - iObserver = new( ELeave ) CMusEngObserverStub; - iLiveSession = CMusEngLiveSession::NewL( KNullDesC, - TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); + iLcSessionObserver = new( ELeave )CLcSessionObserverStub; + iLcUiProvider = new( ELeave )CLcUiProviderStub; + + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KRemoteSipAddress, + KTestRecipientSipUri ) ); + + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); - iSomeOtherSession = CMusEngLiveSession::NewL( KNullDesC, - TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); - ESTABLISH_OUT_SESSION( iSomeOtherSession ); + iSomeOtherSession = CMusEngLiveSession::NewL(); + iSomeOtherSession->SetLcSessionObserver( iLcSessionObserver ); + iSomeOtherSession->SetLcUiProvider( iLcUiProvider ); - iClipSession = CMusEngClipSession::NewL( TRect(0,0, 100,100), - *iObserver, - *iObserver, - *iObserver ); - iClipSession->SetClipL( KTestVideoFileName() ); + ESTABLISH_OUT_SESSION( iSomeOtherSession ); + + iClipSession = CMusEngClipSession::NewL(); + iClipSession->SetLcSessionObserver( iLcSessionObserver ); + iClipSession->SetLcUiProvider( iLcUiProvider ); + MLcSourceFileControl* sourceFileControl = + iClipSession->LocalVideoPlayer()->LcSourceFileControl(); + sourceFileControl->SetLcFileNameL( KTestAvcVideoFileName() ); - TBuf<50> videoCodec; - videoCodec.Copy( KMceSDPNameH264() ); - iClipSession->SetSupportedVideoCodecListL(videoCodec); + delete iClipSession->iVideoCodecList; + iClipSession->iVideoCodecList = NULL; + iClipSession->iVideoCodecList = KMceSDPNameH264().AllocL(); // Construct and establish an incoming session - iReceiveSession = CMusEngReceiveSession::NewL( TRect(0,0, 100,100), - *iObserver, - *iObserver ); + iReceiveSession = CMusEngReceiveSession::NewL(); + iReceiveSession->SetLcSessionObserver( iLcSessionObserver ); CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, KTestOriginator() ); @@ -153,12 +187,11 @@ inSession, &iContainer ); iReceiveSession->iSession->iState = CMceSession::EProceeding; - iReceiveSession->AcceptInvitationL( ETrue ); - - iObserver->Reset(); + iReceiveSession->EstablishLcSessionL(); + + iLcSessionObserver->Reset(); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -168,47 +201,282 @@ delete iLiveSession; delete iClipSession; delete iReceiveSession; - delete iObserver; + delete iLcSessionObserver; + delete iLcUiProvider; delete iSomeOtherSession; - + PropertyHelper::Close(); + // Delete static data from CenRep stub + CRepository::iStaticWriteAvcKeysToStaticData = EFalse; + CRepository::DeleteStubAvcConfigKeys(); + CRepository::ResetStubGlobal(); + CRepository::iForceFailWithCode = KErrNone; } // TEST CASES +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_LcSessionStateL() + { + // No MCE session -> MLcSession::EUninitialized + EUNIT_ASSERT_EQUALS( MLcSession::EUninitialized, + iLiveSession->LcSessionState() ) + + // MLcSession::EOpen + ESTABLISH_OUT_SESSION( iLiveSession ) + EUNIT_ASSERT_EQUALS( TInt( CMceSession::EEstablished ), + TInt( iLiveSession->iSession->iState ) ) + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EOpen ), + TInt( iLiveSession->LcSessionState() ) ) + + // MLcSession::EInitialized + iLiveSession->iSession->iState = CMceSession::EIdle; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EInitialized ), + TInt( iLiveSession->LcSessionState() ) ) + + // MLcSession::EReceived + iLiveSession->iSession->iState = CMceSession::EIncoming; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EReceived ), + TInt( iLiveSession->LcSessionState() ) ) + + iLiveSession->iSession->iState = CMceSession::EProceeding; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EReceived ), + TInt( iLiveSession->LcSessionState() ) ) + + iLiveSession->iSession->iState = CMceSession::EReserving; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EReceived ), + TInt( iLiveSession->LcSessionState() ) ) + + // MLcSession::EOpening + iLiveSession->iSession->iState = CMceSession::EOffering; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EOpening ), + TInt( iLiveSession->LcSessionState() ) ) + + iLiveSession->iSession->iState = CMceSession::EAnswering; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EOpening ), + TInt( iLiveSession->LcSessionState() ) ) + + // MLcSession::EClosing + iLiveSession->iSession->iState = CMceSession::ECancelling; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EClosing ), + TInt( iLiveSession->LcSessionState() ) ) + + iLiveSession->iSession->iState = CMceSession::ETerminating; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EClosing ), + TInt( iLiveSession->LcSessionState() ) ) + + // MLcSession::EClosed + iLiveSession->iSession->iState = CMceSession::ETerminated; + EUNIT_ASSERT_EQUALS( TInt( MLcSession::EClosed ), + TInt( iLiveSession->LcSessionState() ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_RemoteVideoPlayerL() + { + EUNIT_ASSERT( iLiveSession->CMusEngMceSession::RemoteVideoPlayer() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_LocalVideoPlayerL() + { + EUNIT_ASSERT( iLiveSession->CMusEngMceSession::LocalVideoPlayer() == NULL ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_LocalDisplayNameL() + { + EUNIT_ASSERT_EQUALS( KNullDesC(), iLiveSession->LocalDisplayName() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_RemoteDisplayNameL() + { + // Clear the thread common storage to ensrue its not polluted. + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactName, + KNullDesC) ); + + EUNIT_ASSERT_EQUALS( KNullDesC(), iLiveSession->RemoteDisplayName() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_RemoteDetailsL() + { + // Clear the thread common storage to ensrue its not polluted. + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KTelNumber, + KNullDesC) ); + + EUNIT_ASSERT_EQUALS( KNullDesC(), iLiveSession->RemoteDetails() ) + + _LIT( KMusTestDetails, "1222233499" ); + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KTelNumber, + KMusTestDetails) ); + EUNIT_ASSERT_EQUALS( KMusTestDetails(), iLiveSession->RemoteDetails() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetParameterL() + { + const TInt dummy( 0 ); + EUNIT_ASSERT_EQUALS( KErrNotSupported, + iLiveSession->SetParameter( dummy, dummy ) ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_ParameterValueL() + { + const TInt dummy( 0 ); + EUNIT_ASSERT_EQUALS( KErrNotSupported, + iLiveSession->ParameterValue( dummy ) ) + } + // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_TerminateLL() +void UT_CMusEngMceSession::UT_IsLcAudioMutedL() { - TRAPD( error, iLiveSession->TerminateL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); + // No MCE session + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IsLcAudioMutedL(), KErrNotReady ) + + ESTABLISH_OUT_SESSION( iLiveSession ) + + // No audio + EUNIT_ASSERT( iLiveSession->IsLcAudioMutedL() ) + + // Contains audio, but explicitly muted + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + iLiveSession->iSession->AddStreamL( audioStream ); + CleanupStack::Pop( audioStream ); + iLiveSession->iExplicitlyMuted = ETrue; + EUNIT_ASSERT( iLiveSession->IsLcAudioMutedL() ) - ESTABLISH_OUT_SESSION( iLiveSession ); - - EUNIT_ASSERT( iLiveSession->iSession->iState == CMceSession::EEstablished ); + // Contains audio, not muted + iLiveSession->iExplicitlyMuted = EFalse; + EUNIT_ASSERT( !iLiveSession->IsLcAudioMutedL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_MuteLcAudioL() + { + // No MCE session + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IsLcAudioMutedL(), KErrNotReady ) - iLiveSession->TerminateL(); + ESTABLISH_OUT_SESSION( iLiveSession ) - EUNIT_ASSERT( iLiveSession->iSession->iState == CMceSession::ETerminating ); + // Mute + iLiveSession->MuteLcAudioL( ETrue ); + EUNIT_ASSERT( iLiveSession->iExplicitlyMuted ) + EUNIT_ASSERT( iLiveSession->IsLcAudioMutedL() ) + // Unmute + iLiveSession->MuteLcAudioL( EFalse ); + EUNIT_ASSERT( !iLiveSession->iExplicitlyMuted ) } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_MuteLcMicL() + { + // Mute + iLiveSession->MuteLcMicL( ETrue ); + User::LeaveIfError( RProperty::Set( KPSUidTelMicrophoneMuteStatus, + KTelMicrophoneMuteState, + EPSTelMicMuteOn ) ); + EUNIT_ASSERT( iLiveSession->IsLcMicMutedL() ) + + // Unmute + iLiveSession->MuteLcMicL( EFalse ); + User::LeaveIfError( RProperty::Set( KPSUidTelMicrophoneMuteStatus, + KTelMicrophoneMuteState, + EPSTelMicMuteOff ) ); + EUNIT_ASSERT( !iLiveSession->IsLcMicMutedL() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_EnableLcLoudspeakerL() + { + // Check that enabling the loudspeaker is allowed + EUNIT_ASSERT( iLiveSession->IsEnablingLcLoudspeakerAllowed() ) + + // Disable + iLiveSession->EnableLcLoudspeakerL( EFalse ); + EUNIT_ASSERT( !iLiveSession->IsLcLoudspeakerEnabled() ) + + // Enable + iLiveSession->EnableLcLoudspeakerL( ETrue ); + EUNIT_ASSERT( iLiveSession->IsLcLoudspeakerEnabled() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetLcVolumeL() + { + ESTABLISH_OUT_SESSION( iLiveSession ) + + // Set volume + const TInt volume( 5 ); + iLiveSession->SetLcVolumeL( volume ); + EUNIT_ASSERT_EQUALS( volume, iLiveSession->LcVolumeL() ); + + // Increase volume + iLiveSession->IncreaseLcVolumeL(); + EUNIT_ASSERT_EQUALS( volume+1, iLiveSession->LcVolumeL() ); + + // Decrease volume + iLiveSession->DecreaseLcVolumeL(); + EUNIT_ASSERT_EQUALS( volume, iLiveSession->LcVolumeL() ); + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_GetSessionTimeL() +void UT_CMusEngMceSession::UT_GetSessionTimeL() { EUNIT_ASSERT( iLiveSession->GetSessionTime() < TTimeIntervalSeconds( 0 ) ); // Invite - iLiveSession->InviteL( KTestRecipientSipUri ); + iLiveSession->EstablishLcSessionL(); EUNIT_ASSERT( iLiveSession->GetSessionTime() < TTimeIntervalSeconds( 0 ) ); @@ -219,546 +487,68 @@ TTimeIntervalSeconds sessionTime = iLiveSession->GetSessionTime(); EUNIT_ASSERT( sessionTime >= TTimeIntervalSeconds( 0 ) ); } - -void UT_CMusEngMceSession::UT_CMusEngMceSession_IsDisplayEnabledLL() - { - TRAPD( error, iLiveSession->IsDisplayEnabledL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - ESTABLISH_OUT_SESSION( iLiveSession ); - - //Enable - CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) ); - display->iIsEnabled = ETrue; - EUNIT_ASSERT( iLiveSession->IsDisplayEnabledL() ); - - //Disable - display->iIsEnabled = EFalse; - EUNIT_ASSERT( !iLiveSession->IsDisplayEnabledL() ); - - // Display is reported as disabled when session state is terminated or idle - iLiveSession->iSession->iState = CMceSession::ETerminated; - display->iIsEnabled = ETrue; - EUNIT_ASSERT( !iLiveSession->IsDisplayEnabledL() ); - iLiveSession->iSession->iState = CMceSession::EIdle; - EUNIT_ASSERT( !iLiveSession->IsDisplayEnabledL() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_ConnectionActiveL() - { - EUNIT_ASSERT( !iLiveSession->ConnectionActive() ); - - ESTABLISH_OUT_SESSION( iLiveSession ); - - EUNIT_ASSERT( iLiveSession->ConnectionActive() ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_ContainsAudioLL() - { - // Try without session, fails - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->ContainsAudioL(), KErrNotReady ) - - // Establish session without audio - ESTABLISH_OUT_SESSION( iLiveSession ) - - EUNIT_ASSERT( !iLiveSession->ContainsAudioL() ) - - // Establish session with audio - ESTABLISH_OUT_SESSION( iClipSession ) - - EUNIT_ASSERT( iClipSession->ContainsAudioL() ) - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_IsMutedLL() - { - // Try without session, fails - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->IsMutedL(), KErrNotReady ) - - // Establish session without audio - ESTABLISH_OUT_SESSION( iLiveSession ) - - EUNIT_ASSERT( iLiveSession->IsMutedL() ) - - // Establish session with audio - ESTABLISH_OUT_SESSION( iClipSession ) - - EUNIT_ASSERT( !iClipSession->IsMutedL() ) // Not muted although disabled - - iClipSession->EnableDisplayL( ETrue ); // Enabled also speaker - - EUNIT_ASSERT( !iClipSession->IsMutedL() ) // Enabled and not muted - - iClipSession->MuteL(); - - EUNIT_ASSERT( iClipSession->IsMutedL() ) // Explicitly muted - - iClipSession->UnmuteL(); - - EUNIT_ASSERT( !iClipSession->IsMutedL() ) // Explicitly unmuted - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_OrientationLL() - { - // Try without session, fails - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->OrientationL(), KErrNotReady ) - - // Establish a session and try all the MCE rotation values - ESTABLISH_OUT_SESSION( iLiveSession ) - - CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *iLiveSession->iSession ); - - display->iRotation = CMceDisplaySink::ENone; - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::EPortrait ) - - display->iRotation = CMceDisplaySink::EClockwise90Degree; - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::ELandscape ) - - display->iRotation = CMceDisplaySink::EClockwise180Degree; - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::ELandscape ) - - display->iRotation = CMceDisplaySink::EClockwise270Degree; - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::ELandscape ) - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_SetOrientationLL() - { - // Try without session, fails - EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->SetOrientationL( - CMusEngMceSession::EPortrait ), - KErrNotReady ) - - // Establish a session - ESTABLISH_OUT_SESSION( iLiveSession ) - - CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *iLiveSession->iSession ); - - // Check the initial state - display->iRotation = CMceDisplaySink::ENone; - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::EPortrait ) - - // Successfully change orientation - - iLiveSession->SetOrientationL( CMusEngMceSession::ELandscape ); - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::ELandscape ) - - iLiveSession->SetOrientationL( CMusEngMceSession::EPortrait ); - EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), - CMusEngMceSession::EPortrait ) - - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_VolumeUpLL() - { - // Try without session, fails - TRAPD( error, iLiveSession->VolumeUpL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // Test only usage of CMceSpeaker, phone part is tested in base class - - // Check that nothing crashes without any speakers - iReceiveSession->VolumeUpL(); - - // Establish session - ESTABLISH_OUT_SESSION( iClipSession ) - - TInt initialVolume = iClipSession->VolumeL(); - - iClipSession->VolumeUpL(); - - // Check that all speaker volumes are adjusted and store one speaker pointer - - CMceSpeakerSink* speaker = NULL; - - CMceSession* session = iClipSession->iSession; - - for ( TInt i = 0; i < session->Streams().Count(); ++i ) - { - for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j ) - { - if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - speaker = static_cast( - session->Streams()[i]->Sinks()[j] ); - EUNIT_ASSERT( speaker->VolumeL() == initialVolume + 1 ); - } - } - } - - while ( iClipSession->VolumeL() < speaker->MaxVolumeL() ) - { - iClipSession->VolumeUpL(); - } - - iClipSession->VolumeUpL(); // Does not do anything to volume - - EUNIT_ASSERT( iClipSession->VolumeL() == speaker->MaxVolumeL() ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_VolumeDownLL() - { - // Try without session, fails - TRAPD( error, iLiveSession->VolumeDownL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // Test only usage of CMceSpeaker, phone part is tested in base class - - // Check that nothing crashes without any speakers - iReceiveSession->VolumeUpL(); - - // Establish session - ESTABLISH_OUT_SESSION( iClipSession ) - - TInt initialVolume = iClipSession->VolumeL(); - - iClipSession->VolumeDownL(); - - // Check that all speaker volumes are adjusted and store one speaker pointer - - CMceSpeakerSink* speaker = NULL; - - CMceSession* session = iClipSession->iSession; - - for ( TInt i = 0; i < session->Streams().Count(); ++i ) - { - for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j ) - { - if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - speaker = static_cast( - session->Streams()[i]->Sinks()[j] ); - EUNIT_ASSERT( speaker->VolumeL() == initialVolume - 1 ); - } - } - } - - while ( iClipSession->VolumeL() > 0 ) - { - iClipSession->VolumeDownL(); - } +void UT_CMusEngMceSession::UT_HandleTerminationL() + { + // Try different values + iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeNoCodeSet, + KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) + iLcSessionObserver->Reset(); - iClipSession->VolumeDownL(); // Does not do anything to volume - - EUNIT_ASSERT_EQUALS( iClipSession->VolumeL(), 0 ); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_SetVolumeLL() - { - // Try without session, fails - TInt newVolume = KTelephonyVolumeDefaultValue + 1; - - TRAPD( error, iLiveSession->SetVolumeL( newVolume ) ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - // Test only usage of CMceSpeaker, phone part is tested in base class - - // Check that nothing crashes without any speakers - iReceiveSession->SetVolumeL( newVolume ); - - // Establish session - ESTABLISH_OUT_SESSION( iClipSession ) - - TInt initialVolume = iClipSession->VolumeL(); - - iClipSession->SetVolumeL( newVolume ); - - // Check that all speaker volumes are adjusted and store one speaker pointer - - CMceSpeakerSink* speaker = NULL; - - CMceSession* session = iClipSession->iSession; - - for ( TInt i = 0; i < session->Streams().Count(); ++i ) - { - for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j ) - { - if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - speaker = static_cast( - session->Streams()[i]->Sinks()[j] ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume ); - } - } - } + iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCode200OK, + KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) + iLcSessionObserver->Reset(); - newVolume = speaker->MaxVolumeL() + 1; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == speaker->MaxVolumeL() ); - - newVolume = -1; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == 0 ); - - // Test situation where MCE max volume is bigger than MUS max vol - SetMaxVolForSpeakersL(*session, KMusEngMaxVolume * 10); - newVolume = 5; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 10 ); - newVolume = 1; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 10 ); - newVolume = KMusEngMaxVolume; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 10 ); - - SetMaxVolForSpeakersL(*session, KMusEngMaxVolume * 1000); - newVolume = 7; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 1000 ); - newVolume = 1; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 1000 ); - newVolume = KMusEngMaxVolume; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume * 1000 ); - - - // Test situation where MCE max volume is smaller than MUS max vol - SetMaxVolForSpeakersL(*session, KMusEngMaxVolume / 2); - newVolume = 3; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume / 2 ); - newVolume = 1; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == 1 ); - newVolume = KMusEngMaxVolume; - iClipSession->SetVolumeL( newVolume ); - EUNIT_ASSERT( iClipSession->VolumeL() == newVolume ); - EUNIT_ASSERT( speaker->VolumeL() == newVolume / 2 ); + iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeUnknown, + KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_EnableDisplayL() +void UT_CMusEngMceSession::UT_AdjustVideoCodecL() { - TRAPD( error, iLiveSession->EnableDisplayL( ETrue ) ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - ESTABLISH_OUT_SESSION( iLiveSession ); - - CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) ); - - // Disable - iLiveSession->EnableDisplayL( EFalse ); - - EUNIT_ASSERT( !display->iIsEnabled ); - - // Try to disable again, request should be ignored + CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); + + CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() ); + CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + CMceVideoCodec* codecAvcFromFile = CMceAvcCodec::NewLC( KMceSDPNameH264() ); - iLiveSession->EnableDisplayL( EFalse ); - - EUNIT_ASSERT( !display->iIsEnabled ); + iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codecH263, + KMceCameraSource ); + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) - // Enable - - iLiveSession->EnableDisplayL( ETrue ); + iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codecAvcFromFile, + KMceFileSource); + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) - EUNIT_ASSERT( display->iIsEnabled ); - - // Try to enable again, request should be ignored + iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codecAvc, + KMceCameraSource ); + EUNIT_ASSERT( iLiveSession->iStoreEncoderConfigInfo ) - iLiveSession->EnableDisplayL( ETrue ); - - EUNIT_ASSERT( display->iIsEnabled ); + CleanupStack::PopAndDestroy( codecAvcFromFile ); + CleanupStack::PopAndDestroy( codecAvc ); + CleanupStack::PopAndDestroy( codecH263 ); } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_MuteLL() - { - TRAPD( error, iClipSession->MuteL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - ESTABLISH_OUT_SESSION_AND_START_STREAMING( iClipSession ); - - const RPointerArray streams = - iClipSession->iSession->Streams(); - - iClipSession->MuteL(); - - // Check that all audio speaker sinks are disabled and only those - for ( TInt i = 0; i < streams.Count(); ++i ) - { - for ( TInt j = 0; j < streams[i]->Sinks().Count(); ++j ) - { - CMceMediaSink* sink = streams[i]->Sinks()[j]; - if ( sink->Type() == KMceSpeakerSink && - streams[i]->Type() == KMceAudio ) - { - EUNIT_ASSERT( sink->IsEnabled() == EFalse ) - } - else - { - EUNIT_ASSERT( sink->IsEnabled() == ETrue ) - } - } - } - - EUNIT_ASSERT( iClipSession->iExplicitlyMuted ) - - // Try to mute again, request should be ignored without actions or leaving - - iClipSession->MuteL(); - - } - - -// ----------------------------------------------------------------------------- -// Relies on previous test -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_UnmuteLL() - { - TRAPD( error, iClipSession->UnmuteL() ); - MUS_TEST_FORWARD_ALLOC_FAILURE( error ); - EUNIT_ASSERT( error == KErrNotReady ); - - ESTABLISH_OUT_SESSION( iClipSession ); - - const RPointerArray streams = - iClipSession->iSession->Streams(); - - iClipSession->MuteL(); - - iClipSession->UnmuteL(); - - // Check that all audio speaker sinks are enabled - - for ( TInt i = 0; i < streams.Count(); ++i ) - { - for ( TInt j = 0; j < streams[i]->Sinks().Count(); ++j ) - { - if ( streams[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - EUNIT_ASSERT( streams[i]->Sinks()[j]->IsEnabled() == ETrue ) - } - } - } - - EUNIT_ASSERT( !iClipSession->iExplicitlyMuted ) - - // Try to unmute again, request should be ignored without actions or leaving - - iClipSession->UnmuteL(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_HandleTerminationL() - { - // Try different values - iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeNoCodeSet, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionTerminatedCalled ); - iObserver->Reset(); - - iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCode200OK, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionTerminatedCalled ); - iObserver->Reset(); - - iLiveSession->CMusEngMceSession::HandleTermination( KSipStatusCodeUnknown, - KNullDesC8() ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_AdjustVideoCodecLL() - { - // CMusEngMceSession::AdjustVideoCodecL does nothing, so NULL test is enough - CMceVideoCodec* codec = - iLiveSession->iManager->SupportedVideoCodecs()[0]->CloneL(); - CleanupStack::PushL( codec ); - iLiveSession->CMusEngMceSession::AdjustVideoCodecL( *codec ); - CleanupStack::PopAndDestroy( codec ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_AdjustAudioCodecLL() +void UT_CMusEngMceSession::UT_AdjustAudioCodecL() { CMceAudioCodec* codec = iLiveSession->iManager->SupportedAudioCodecs()[0]->CloneL(); @@ -769,16 +559,14 @@ EUNIT_ASSERT( codec->iMMFPriorityPreference == KAudioPrefSwisPlayback ) CleanupStack::PopAndDestroy( codec ); - } - + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_RectChangedLL() +void UT_CMusEngMceSession::UT_RectChangedL() { - // Does nothing before session establishment iLiveSession->RectChangedL(); @@ -791,9 +579,9 @@ // Display size has been updated CMceDisplaySink* display = - MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); + MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); - EUNIT_ASSERT( display->DisplayRectL() == iLiveSession->Rect() ); + EUNIT_ASSERT( display->DisplayRectL() == iLiveSession->Rect() ) // Terminate session and try again, rect must not be changed @@ -804,8 +592,307 @@ iLiveSession->SetRectL( newRect ); EUNIT_ASSERT( display->DisplayRectL() != newRect ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetSessionSdpLinesL() + { + // set operator variant off + iReceiveSession->iOperatorVariant = EFalse; + CRepository::SetStubGlobal( MusSettingsKeys::KVideoBandwidth, + 128 ); + + // 1. There is b=AS line at session level + // => Xapplication, b=AS and b=TIAS set to session level + CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, + KTestOriginator ); + CleanupStack::PushL( inSession ); + EUNIT_ASSERT( !inSession->iSessionSDPLines ); + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + + iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue ); + + MDesC8Array* sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 3 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 2 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + // 2. There are b=TIAS sdp line at session + // => Xapplication, b=AS and b=TIAS set to session level + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + + iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue ); + + sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 3 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 2 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + + // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse + // => only Xapplication SDP line is set + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + + iReceiveSession->SetSessionSdpLinesL( *inSession, EFalse ); + + sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + + // 4. No KVideoBandwidth entry in CenRep => TIAS usage should be disabled + // There is AS and TIAS at session level => AS is taken at session level + CRepository::iForceFailWithCode = KErrNotFound; + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + + iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue ); + + sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineBandwidthField() ); + + CleanupStack::PopAndDestroy( inSession ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetSessionSdpLines_OperatorL() + { + // set operator variant + iReceiveSession->iOperatorVariant = ETrue; + + // 1. There is b=TIAS sdp line in session => only application and + // type lines are set, no bandwidth related attributes + CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, + KTestOriginator ); + CleanupStack::PushL( inSession ); + + EUNIT_ASSERT( !inSession->iSessionSDPLines ); + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + + iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue ); + + MDesC8Array* sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() ); + + // 2. There are b=AS and b=TIAS sdp lines in session => application and + // type SDP lines as well as b=AS bandwidth attributes are set + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 2 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + + iReceiveSession->SetSessionSdpLinesL( *inSession, ETrue ); + + sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 3 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 2 ) == KMusEngSessionSdpLineBandwidthField() ); + + + // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse + // => only application and type SDP lines are set + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + + iReceiveSession->SetSessionSdpLinesL( *inSession, EFalse ); + + sdpLines = inSession->iSessionSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() ); + + CleanupStack::PopAndDestroy( inSession ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetMediaSdpLinesL() + { + // set operator variant off + iReceiveSession->iOperatorVariant = EFalse; + CRepository::SetStubGlobal( MusSettingsKeys::KVideoBandwidth, + 128 ); + + // 1. There is no b=AS, b=TIAS sdp lines at session level + // => b=AS and b=TIAS are taken at media level + CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, + KTestOriginator ); + CleanupStack::PushL( inSession ); + + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + videoStream->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); //rtpSource + videoStream->AddSinkL( CMceDisplaySink::NewLC( *iReceiveSession->iManager ) ); + CleanupStack::Pop(); //displaySink + + inSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + + iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue ); + + MDesC8Array* sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ).Find( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + + + // 2. There is b=AS sdp line at session and media level + // => b=AS and b=TIAS are taken at media level + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + + iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue ); + + sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ).Find( + KMusEngSessionSdpLineBandwidthLine() ) == 0 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ).Find( + KMusEngSessionSdpLineTiasLine() ) == 0 ); + + // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse + // => no bandwidth attributes at media level + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + + delete inSession->Streams()[ 0 ]->iMediaSDPLines; + inSession->Streams()[ 0 ]->iMediaSDPLines = NULL; + + iReceiveSession->SetMediaSdpLinesL( *videoStream, EFalse ); + + sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 0 ); + + // 4. No KVideoBandwidth entry in CenRep => TIAS usage should be disabled + // There is no bandwidth attributes in session => AS is taken at meida level + CRepository::iForceFailWithCode = KErrNotFound; + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + + iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue ); + + sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineBandwidthField() ); + + CleanupStack::PopAndDestroy( inSession ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetMediaSdpLines_OperatorL() + { + // set operator variant + iReceiveSession->iOperatorVariant = ETrue; + + // 1. There is no b=AS sdp line at session level + // => b=AS is taken at media level + CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, + KTestOriginator ); + CleanupStack::PushL( inSession ); + + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + videoStream->SetSourceL( CMceRtpSource::NewLC() ); + CleanupStack::Pop(); //rtpSource + videoStream->AddSinkL( CMceDisplaySink::NewLC( *iReceiveSession->iManager ) ); + CleanupStack::Pop(); //displaySink + + inSession->AddStreamL( videoStream ); + CleanupStack::Pop( videoStream ); + + EUNIT_ASSERT( !inSession->iSessionSDPLines ); + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineTiasLine() ); + + iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue ); + + MDesC8Array* sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineBandwidthField() ); + + + // 2. There is b=AS sdp line at session and media level + // => b=AS is not taken at media level + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + inSession->iSessionSDPLines = new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->iSessionSDPLines->AppendL( KMusEngSessionSdpLineBandwidthField() ); + + delete inSession->Streams()[ 0 ]->iMediaSDPLines; + inSession->Streams()[ 0 ]->iMediaSDPLines = NULL; + inSession->Streams()[ 0 ]->iMediaSDPLines = + new ( ELeave ) CDesC8ArrayFlat( 1 ); + inSession->Streams()[ 0 ]->iMediaSDPLines->AppendL( + KMusEngSessionSdpLineBandwidthField() ); + + iReceiveSession->SetMediaSdpLinesL( *videoStream, ETrue ); + + EUNIT_ASSERT( inSession->Streams()[ 0 ]->iMediaSDPLines ); + EUNIT_ASSERT( inSession->Streams()[ 0 ]->iMediaSDPLines->MdcaCount() == 0 ); + + + // 3. Simulating outcoming session, i.e. 2d param aForceBandwidthLine is EFalse + // => b=AS is taken at media level + delete inSession->iSessionSDPLines; + inSession->iSessionSDPLines = NULL; + + delete inSession->Streams()[ 0 ]->iMediaSDPLines; + inSession->Streams()[ 0 ]->iMediaSDPLines = NULL; + + iReceiveSession->SetMediaSdpLinesL( *videoStream, EFalse ); + + sdpLines = inSession->Streams()[ 0 ]->iMediaSDPLines; + EUNIT_ASSERT( sdpLines ); + EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); + EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineBandwidthField() ); + + CleanupStack::PopAndDestroy( inSession ); } @@ -813,120 +900,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_SetSessionSdpLinesLL() - { - // set operator variant off - MultimediaSharingSettings::SetOperatorVariantSettingL( - MusSettingsKeys::EStandard ); - - // There is no sdp lines in session, right one is added - - CMceInSession* inSession = CMceInSession::NewL( *iReceiveSession->iManager, - KTestOriginator ); - CleanupStack::PushL( inSession ); - - iReceiveSession->SetSessionSdpLinesL( *inSession ); - - MDesC8Array* sdpLines = inSession->SessionSDPLinesL(); - CleanupDeletePushL( sdpLines ); - - EUNIT_ASSERT( sdpLines ); - EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); - - CleanupStack::PopAndDestroy(); // sdplines - - // There is one line ready, replace it with right one - CDesC8Array* newSdpLines = new ( ELeave ) CDesC8ArrayFlat( 3 ); - CleanupStack::PushL( newSdpLines ); - newSdpLines->AppendL( KTestRecipientRandomText8() ); - inSession->SetSessionSDPLinesL( newSdpLines ); - CleanupStack::Pop( newSdpLines ); - - iReceiveSession->SetSessionSdpLinesL( *inSession ); - - sdpLines = inSession->SessionSDPLinesL(); - CleanupDeletePushL( sdpLines ); - - EUNIT_ASSERT( sdpLines ); - EUNIT_ASSERT( sdpLines->MdcaCount() == 1 ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineXApplication() ); - - CleanupStack::PopAndDestroy(); // sdplines - - - CleanupStack::PopAndDestroy( inSession ); - - // for operator variant testing - // set operator variant - iReceiveSession->iOperatorVariant = ETrue; - - // There is no sdp lines in session, right ones are added to session and media level - inSession = CMceInSession::NewL( *iReceiveSession->iManager, - KTestOriginator ); - CleanupStack::PushL( inSession ); - - iReceiveSession->SetSessionSdpLinesL( *inSession ); - - sdpLines = inSession->SessionSDPLinesL(); - CleanupDeletePushL( sdpLines ); - - EUNIT_ASSERT( sdpLines ); - EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() ); - - CleanupStack::PopAndDestroy(); // sdplines - - MDesC8Array* mediaSdpLines = - iReceiveSession->iSession->Streams()[ 0 ]->MediaAttributeLinesL(); - CleanupDeletePushL( mediaSdpLines ); - TBool bandwidthFoundFromMediaLevel = EFalse; - for ( TInt i = 0; mediaSdpLines && i < mediaSdpLines->MdcaCount(); i++ ) - { - if ( mediaSdpLines->MdcaPoint( i ).Compare( - KMusEngSessionSdpLineBandwidthField() ) == 0 ) - { - bandwidthFoundFromMediaLevel = ETrue; - } - } - EUNIT_ASSERT( bandwidthFoundFromMediaLevel ); - CleanupStack::PopAndDestroy( mediaSdpLines ); - - // There is one line ready, replace it with right ones - newSdpLines = new ( ELeave ) CDesC8ArrayFlat( 3 ); - CleanupStack::PushL( newSdpLines ); - newSdpLines->AppendL( KTestRecipientRandomText8() ); - inSession->SetSessionSDPLinesL( newSdpLines ); - CleanupStack::Pop( newSdpLines ); - - iReceiveSession->SetSessionSdpLinesL( *inSession ); - - sdpLines = inSession->SessionSDPLinesL(); - CleanupDeletePushL( sdpLines ); - - EUNIT_ASSERT( sdpLines ); - EUNIT_ASSERT( sdpLines->MdcaCount() == 2 ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 0 ) == KMusEngSessionSdpLineApplication() ); - EUNIT_ASSERT( sdpLines->MdcaPoint( 1 ) == KMusEngSessionSdpLineType() ); - - CleanupStack::PopAndDestroy(); // sdplines - - - CleanupStack::PopAndDestroy( inSession ); - - - // set operator variant off - MultimediaSharingSettings::SetOperatorVariantSettingL( - MusSettingsKeys::EStandard ); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_AdjustStreamsAndCodecsLL() +void UT_CMusEngMceSession::UT_AdjustStreamsAndCodecsL() { // Check that function cannot be called before creating the session TRAPD( error, iClipSession->AdjustStreamsAndCodecsL() ); @@ -1031,46 +1005,6 @@ EUNIT_ASSERT( videoStream->Codecs()[ i ]->MaxBitRate() == 128000 ); } - - // Test for Configuration based codec removal. Magic uid not set. - CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); - videoStream->AddCodecL( codecAvc ); - CleanupStack::Pop( codecAvc ); - iClipSession->AdjustStreamsAndCodecsL(); - TBool avcCodecFound(EFalse); - for ( TInt i = 0; i < videoStream->Codecs().Count(); i++ ) - { - if( !videoStream->Codecs()[ i ]->SdpName().CompareF( KMceSDPNameH264 ) ) - { - avcCodecFound = ETrue; - } - } - // AVC should present - EUNIT_ASSERT(avcCodecFound); - - // Test for Configuration based codec removal. Magic uid set. - // Store the real value and revert back later , so that other tests will not be affected. - TUid uid = MultimediaSharingSettings::EncodingDeviceL(); - TInt32 KMusDisableAVC = 0x0fffffff; - MultimediaSharingSettings::SetPropertyValueL( MusSettingsKeys::KEncodingDevice,KMusDisableAVC); - codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() ); - videoStream->AddCodecL( codecAvc ); - CleanupStack::Pop( codecAvc ); - codecH2632000 = CMceH263Codec::NewLC( KMceSDPNameH2632000() ); - videoStream->AddCodecL( codecH2632000 ); - CleanupStack::Pop( codecH2632000 ); - iClipSession->AdjustStreamsAndCodecsL(); - for ( TInt i = 0; i < videoStream->Codecs().Count(); i++ ) - { - // H264 ( AVC ) codec should be removed - EUNIT_ASSERT( - videoStream->Codecs()[ i ]->SdpName().CompareF( KMceSDPNameH264 ) ); - } - - - MultimediaSharingSettings::SetPropertyValueL( MusSettingsKeys::KEncodingDevice,uid.iUid); - - } @@ -1078,7 +1012,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_IncomingSessionL() +void UT_CMusEngMceSession::UT_IncomingSessionL() { // New session should get rejected and deleted in any case, first failure CMceInSession* inSession = CMceInSession::NewL( @@ -1100,7 +1034,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_IncomingUpdateL() +void UT_CMusEngMceSession::UT_IncomingUpdateL() { CMceInSession* inSession = CMceInSession::NewL( *iLiveSession->iManager, KNullDesC8 ); @@ -1138,7 +1072,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_StreamStateChangedL() +void UT_CMusEngMceSession::UT_StreamStateChangedL() { // Try without a session, nothing happens CMceAudioStream* audioStream = CMceAudioStream::NewLC(); @@ -1146,7 +1080,7 @@ CleanupStack::PopAndDestroy( audioStream ); // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + iLiveSession->EstablishLcSessionL(); // No observer set, so expect nothing to be done, cannot be asserted CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0]; @@ -1156,55 +1090,56 @@ // EUninitialized, stream is created, unexpected change, nothing happens changedStream->iState = CMceMediaStream::EUninitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EStreaming, stream is streaming, other than video out- or instream changedStream->iState = CMceMediaStream::EStreaming; iLiveSession->CMusEngMceSession::StreamStateChanged( *iLiveSession->iSession->Streams()[1] ); - EUNIT_ASSERT( iObserver->IsReseted() ); - iObserver->Reset(); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ENoResources, stream has no needed resources to stream changedStream->iState = CMceMediaStream::ENoResources; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); } @@ -1214,7 +1149,7 @@ // when function is changed // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_StreamStateChangedWithSourceL() +void UT_CMusEngMceSession::UT_StreamStateChangedWithSourceL() { // Try without a session, nothing happens iLiveSession->CMusEngMceSession::StreamStateChanged( @@ -1225,7 +1160,7 @@ CleanupStack::PopAndDestroy(); // audiostream // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + iLiveSession->EstablishLcSessionL(); // Try all the stream states CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0]; @@ -1233,48 +1168,49 @@ // EUninitialized, stream is created, unexpected change, nothing happens changedStream->iState = CMceMediaStream::EUninitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ENoResources, stream has no needed resources to stream changedStream->iState = CMceMediaStream::ENoResources; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); } @@ -1284,7 +1220,7 @@ // when function is changed // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_StreamStateChangedWithSinkL() +void UT_CMusEngMceSession::UT_StreamStateChangedWithSinkL() { // Try without a session, nothing happens CMceAudioStream* audioStream = CMceAudioStream::NewLC(); @@ -1292,7 +1228,7 @@ CleanupStack::PopAndDestroy( audioStream ); // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + iLiveSession->EstablishLcSessionL(); // Try all the stream states CMceMediaStream* changedStream = iLiveSession->iSession->Streams()[0]; @@ -1300,48 +1236,49 @@ // EUninitialized, stream is created, unexpected change, nothing happens changedStream->iState = CMceMediaStream::EUninitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EInitialized, stream is initialized changedStream->iState = CMceMediaStream::EInitialized; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EBuffering, stream is buffering changedStream->iState = CMceMediaStream::EBuffering; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EIdle, stream is not receiving RTP changedStream->iState = CMceMediaStream::EIdle; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamIdleCalled ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EStreaming, stream is streaming changedStream->iState = CMceMediaStream::EStreaming; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->iStreamStreamingCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EPlayerStateChanged ) ) + iLcSessionObserver->Reset(); // EDisabled, stream is explicitly disabled changedStream->iState = CMceMediaStream::EDisabled; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ENoResources, stream has no needed resources to stream changedStream->iState = CMceMediaStream::ENoResources; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscodingRequired, stream requires non-realtime transcoding changedStream->iState = CMceMediaStream::ETranscodingRequired; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ETranscoding, stream is transcoding in non-realtime changedStream->iState = CMceMediaStream::ETranscoding; iLiveSession->CMusEngMceSession::StreamStateChanged( *changedStream ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); } @@ -1350,22 +1287,24 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_SessionStateChangedL() +void UT_CMusEngMceSession::UT_SessionStateChangedL() { // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + iLiveSession->EstablishLcSessionL(); // No container, so expect to be handled as internal error iLiveSession->SessionStateChanged( *iLiveSession->iSession, NULL ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); // Try to tell session about some other session's state transition TMceTransactionDataContainer container; iLiveSession->SessionStateChanged( *iSomeOtherSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Try all the normal cases: @@ -1377,8 +1316,10 @@ container.SetReasonPhrase( anyReasonPhrase ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); container.Clear(); // EOffering @@ -1386,44 +1327,47 @@ container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EIncoming iLiveSession->iSession->iState = CMceSession::EIncoming; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); // EReserving iLiveSession->iSession->iState = CMceSession::EReserving; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EAnswering iLiveSession->iSession->iState = CMceSession::EAnswering; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EProceeding iLiveSession->iSession->iState = CMceSession::EProceeding; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // EEstablished iLiveSession->iSession->iState = CMceSession::EEstablished; container.SetStatusCode( KSipStatusCode200OK ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->iSessionEstablishedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) + iLcSessionObserver->Reset(); // EEstablished again (meaning expiration of session timer // and refresment of session ) @@ -1431,38 +1375,136 @@ container.SetStatusCode( KSipStatusCode200OK ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // ECancelling iLiveSession->iSession->iState = CMceSession::ECancelling; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); - iObserver->Reset(); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + iLcSessionObserver->Reset(); // ETerminating iLiveSession->iSession->iState = CMceSession::ETerminating; container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); - iObserver->Reset(); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + iLcSessionObserver->Reset(); // ETerminated iLiveSession->iSession->iState = CMceSession::ETerminated; container.SetStatusCode( KSipStatusCode200OK ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->iSessionTerminatedCalled ); - iObserver->Reset(); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionStateChanged ) ) + iLcSessionObserver->Reset(); // Default case iLiveSession->iSession->iState = static_cast( 10 ); container.SetStatusCode( KSipStatusCodeNoCodeSet ); iLiveSession->SessionStateChanged( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); + + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_HandleSessionStateChanged_EncoderKeyStoringL() + { + // Make repository empty, config keys must be written + CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); + + // Invite + iLiveSession->EstablishLcSessionL(); + iLiveSession->iSession->iState = CMceSession::EEstablished; + + // Force failure on CenRep + CRepository::iForceFailWithCode = KErrNoMemory; + + // Simulate session state transition notification + iLiveSession->HandleSessionStateChanged( + *iLiveSession->iSession, 200, KNullDesC8() ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrNoMemory ) + + // Normal case, something will be written to CenRep + iClipSession->EstablishLcSessionL(); + iClipSession->iSession->iState = CMceSession::EEstablished; + iClipSession->HandleSessionStateChanged( + *iClipSession->iSession, 200, KNullDesC8() ); + HBufC8* info = MultimediaSharingSettings::EncoderConfigInfoLC(); + EUNIT_ASSERT_NOT_EQUALS( *info, KMusAvcBitrateLevel_1b_ConfigKey() ) + CleanupStack::PopAndDestroy( info ); + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SessionConnectionStateChangedL() + { + + // Try to tell session about another session's connection state change + + iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, + ETrue ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // No session yet, nothing happened + + // Simulate sending invite + iLiveSession->EstablishLcSessionL(); + + // Now try again to notify session about session connection state change + // of an another session + iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, + ETrue ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Wrong session, nothing happened + + // Try tell session connection state is active + iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, + ETrue ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Session active, nothing happened + + // Try tell session connection state is inactive + iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, + EFalse ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::EConnectionLost ) ) + iLcSessionObserver->Reset(); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_FailedL() + { + // Try to tell session about failure of another session + + iLiveSession->Failed( *iSomeOtherSession->iSession, 0 ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // No session yet, nothing happened + + // Simulate sending invite + iLiveSession->EstablishLcSessionL(); + + // Now try again to notify session about failure of an another session + iLiveSession->Failed( *iSomeOtherSession->iSession, 0 ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Wrong session, nothing happened + + // Tell session that it has failed + iLiveSession->Failed( *iLiveSession->iSession, KErrNotFound ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrNotFound ) + iLcSessionObserver->Reset(); } @@ -1470,35 +1512,31 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_SessionConnectionStateChangedL() +void UT_CMusEngMceSession::UT_UpdateFailedL() { - - // Try to tell session about another session's connection state change - - iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, - ETrue ); - EUNIT_ASSERT( iObserver->IsReseted() ); // No session yet, nothing happened - - // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); + // Try to tell session about update failure of another session + iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, NULL ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); - // Now try again to notify session about session connection state change - // of an another session - iLiveSession->SessionConnectionStateChanged( *iSomeOtherSession->iSession, - ETrue ); - EUNIT_ASSERT( iObserver->IsReseted() ); // Wrong session, nothing happened + // Try again with container + TMceTransactionDataContainer container; + iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // No session yet, nothing happened - // Try tell session connection state is active - iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, - ETrue ); - EUNIT_ASSERT( iObserver->IsReseted() ); // Session active, nothing happened + // Invite and try again. + iLiveSession->EstablishLcSessionL(); + iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ); // Wrong session, nothing happened¨ - // Try tell session connection state is inactive - iLiveSession->SessionConnectionStateChanged( *iLiveSession->iSession, - EFalse ); - EUNIT_ASSERT( iObserver->iSessionConnectionLostCalled ); - iObserver->Reset(); - + // Try with right session + iLiveSession->UpdateFailed( *iLiveSession->iSession, &container ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, KErrGeneral ) + iLcSessionObserver->Reset(); } @@ -1506,61 +1544,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_FailedL() - { - // Try to tell session about failure of another session - - iLiveSession->Failed( *iSomeOtherSession->iSession, 0 ); - EUNIT_ASSERT( iObserver->IsReseted() ); // No session yet, nothing happened - - // Simulate sending invite - iLiveSession->InviteL( KTestRecipientSipUri() ); - - // Now try again to notify session about failure of an another session - iLiveSession->Failed( *iSomeOtherSession->iSession, 0 ); - EUNIT_ASSERT( iObserver->IsReseted() ); // Wrong session, nothing happened - - // Tell session that it has failed - iLiveSession->Failed( *iLiveSession->iSession, 0 ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); - - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_UpdateFailedL() - { - // Try to tell session about update failure of another session - iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, NULL ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); // No container, internal error - iObserver->Reset(); - - // Try again with container - TMceTransactionDataContainer container; - iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); // No session yet, nothing happened - - // Invite and try again. - iLiveSession->InviteL( KTestRecipientSipUri() ); - iLiveSession->UpdateFailed( *iSomeOtherSession->iSession, &container ); - EUNIT_ASSERT( iObserver->IsReseted() ); // Wrong session, nothing happened¨ - - // Try with right session - iLiveSession->UpdateFailed( *iLiveSession->iSession, &container ); - EUNIT_ASSERT( iObserver->iSessionFailedCalled ); - iObserver->Reset(); - } - - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_SRReceivedL() +void UT_CMusEngMceSession::UT_SRReceivedL() { EUNIT_ASSERT( iLiveSession->iSecondsFromLastRtcpReport == 0 ); @@ -1603,7 +1587,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_RRReceivedL() +void UT_CMusEngMceSession::UT_RRReceivedL() { EUNIT_ASSERT( iLiveSession->iSecondsFromLastRtcpReport == 0 ); @@ -1640,45 +1624,12 @@ EUNIT_ASSERT( iLiveSession->iSecondsFromLastRtcpReport == 0 ); } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void UT_CMusEngMceSession::UT_CMusEngMceSession_InactivityTimeoutL() - { - // Construct an audio stream for this test - - CMceAudioStream* audioStream = CMceAudioStream::NewLC(); - - CMceRtpSource* rtpSource = CMceRtpSource::NewLC(); - audioStream->SetSourceL( rtpSource ); - CleanupStack::Pop( rtpSource ); - - iReceiveSession->InactivityTimeout( *audioStream, *rtpSource ); - - EUNIT_ASSERT( iObserver->IsReseted() ) - - CleanupStack::PopAndDestroy( audioStream ); - - // And now real inactivity timeout - - iReceiveSession->InactivityTimeout( - *iReceiveSession->iSession->Streams()[0], - *static_cast - (iReceiveSession->iSession->Streams()[0]->Source()) ); - - EUNIT_ASSERT( iObserver->iStreamIdleCalled ) - - iObserver->Reset(); - } - // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_SsrcAddedL() +void UT_CMusEngMceSession::UT_SsrcAddedL() { // As CMusEngMceSession::SsrcAdded is expected to do nothing, just call // it to make sure it does not weaken the test coverage @@ -1697,7 +1648,7 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_SsrcRemovedL() +void UT_CMusEngMceSession::UT_SsrcRemovedL() { // As CMusEngMceSession::SsrcRemoved is expected to do nothing, just call // it to make sure it does not weaken the test coverage @@ -1716,21 +1667,25 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_UpdateTimerEventL() +void UT_CMusEngMceSession::UT_UpdateTimerEventL() { + iLcSessionObserver->Reset(); iLiveSession->UpdateTimerEvent(); - EUNIT_ASSERT( iObserver->iSessionTimeChangedCalled ) + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::EUnknown ) ) EUNIT_ASSERT( iLiveSession->iUpdateTimer->IsActive() ) iLiveSession->iUpdateTimer->Cancel(); - iObserver->Reset(); + iLcSessionObserver->Reset(); iLiveSession->iSecondsFromLastRtcpReport = 25; // >KMusEngRtcpInactivityThreshold iLiveSession->UpdateTimerEvent(); - EUNIT_ASSERT( iObserver->iSessionTimeChangedCalled ) - EUNIT_ASSERT( iObserver->iInactivityTimeoutCalled ); + EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ), + TInt( CLcSessionObserverStub::ESessionFailed ) ) + EUNIT_ASSERT_EQUALS( iLcSessionObserver->iError, + TInt( MLcSession::EMediaInactivityTimeout ) ) EUNIT_ASSERT( iLiveSession->iUpdateTimer->IsActive() ) iLiveSession->iUpdateTimer->Cancel(); - iObserver->Reset(); + iLcSessionObserver->Reset(); } @@ -1738,14 +1693,13 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_IsRoamingBetweenAPsAllowedL() +void UT_CMusEngMceSession::UT_IsRoamingBetweenAPsAllowedL() { // No session EUNIT_ASSERT( iLiveSession->IsRoamingBetweenAPsAllowed() ) // Session idle - _LIT( KRecipientSipUri, "sip:user@some.where" ); - iLiveSession->InviteL( KRecipientSipUri ); + iLiveSession->EstablishLcSessionL(); iLiveSession->iSession->iState = CMceSession::EIdle; EUNIT_ASSERT( iLiveSession->IsRoamingBetweenAPsAllowed() ) @@ -1762,55 +1716,249 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::UT_CMusEngMceSession_VolumeChangedL() - { - // Try without session, nothing happens - EUNIT_ASSERT( iObserver->iVolume == 0 ); - iLiveSession->VolumeChanged( 1, EFalse ); - EUNIT_ASSERT( !VerifySpeakersVolume(*iLiveSession, 1) ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); +void UT_CMusEngMceSession::UT_SaveContactL() + { + _LIT8( KTestSaveContactAddr, "sip:abc@10.10.10.10"); + + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KTelNumber, + _L("12341234") ) ); + + // Operator variant + iLiveSession->iOperatorVariant = ETrue; + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrNotSupported ) + + // No address to save + iLiveSession->iOperatorVariant = EFalse; + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->SaveContactL( KNullDesC8 ), KErrArgument ) - // Establish session - ESTABLISH_OUT_SESSION( iClipSession ) + // Contact id KErrNotSupported (multiple matching contacts) + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactId, + KErrNotSupported ) ); - // Try without observer - iClipSession->VolumeChanged( 2, EFalse ); - EUNIT_ASSERT( VerifySpeakersVolume(*iClipSession, 2) ) - EUNIT_ASSERT( iObserver->iVolume == 0 ); - + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrNotFound ) - // Try with observer set - iClipSession->SetVolumeChangeObserver( iObserver ); - iClipSession->VolumeChanged( 3, EFalse ); - EUNIT_ASSERT( VerifySpeakersVolume(*iClipSession, 3) ) - EUNIT_ASSERT( iObserver->iVolume == 3 ); + // SIP field exists already + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KContactId, + 2 ) ); + + ContactEngineStubHelper::SetSIPFieldFound( ETrue ); + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrAlreadyExists ) + + // No correct field in fields info + ContactEngineStubHelper::Reset(); + ContactEngineStubHelper::SetSIPFieldInfoFound( EFalse ); + MUSENG_EUNIT_ASSERT_SPECIFIC_LEAVE( + iLiveSession->SaveContactL( KTestSaveContactAddr ), KErrNotFound ) + + // Success + ContactEngineStubHelper::Reset(); + iLiveSession->SaveContactL( KTestSaveContactAddr ); + EUNIT_ASSERT( ContactEngineStubHelper::GetCalledFunction() == EContactEngineStubSetText ); } -// HELPERS -TBool UT_CMusEngMceSession::VerifySpeakersVolume(CMusEngMceSession& aSession, TInt aVolume) +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_RectL() + { + iLiveSession->SetRectL( TRect( 0, 0, 100, 100 ) ); + TRect rect = iLiveSession->Rect(); + + // Initial values + EUNIT_ASSERT( rect.iTl.iX == 0 ); + EUNIT_ASSERT( rect.iTl.iY == 0 ); + EUNIT_ASSERT( rect.iBr.iX == 100 ); + EUNIT_ASSERT( rect.iBr.iY == 100 ); + + iLiveSession->iRect.iTl.iX = 100; + iLiveSession->iRect.iTl.iY = 200; + iLiveSession->iRect.iBr.iX = 300; + iLiveSession->iRect.iBr.iY = 400; + + rect = iLiveSession->Rect(); + + EUNIT_ASSERT( rect.iTl.iX == 100 ); + EUNIT_ASSERT( rect.iTl.iY == 200 ); + EUNIT_ASSERT( rect.iBr.iX == 300 ); + EUNIT_ASSERT( rect.iBr.iY == 400 ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetRectLL() { - TBool result = EFalse; + TRect rect; + + rect.iTl.iX = 100; + rect.iTl.iY = 200; + rect.iBr.iX = 300; + rect.iBr.iY = 400; + + iLiveSession->SetRectL( rect ); + + EUNIT_ASSERT( iLiveSession->iRect.iTl.iX == 100 ); + EUNIT_ASSERT( iLiveSession->iRect.iTl.iY == 200 ); + EUNIT_ASSERT( iLiveSession->iRect.iBr.iX == 300 ); + EUNIT_ASSERT( iLiveSession->iRect.iBr.iY == 400 ); + + ESTABLISH_OUT_SESSION( iLiveSession ); + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); + TRect displayRect = display->DisplayRectL(); - CMceSpeakerSink* speaker = NULL; - CMceSession* session = aSession.iSession; + EUNIT_ASSERT( displayRect.iTl.iX == 100 ); + EUNIT_ASSERT( displayRect.iTl.iY == 200 ); + EUNIT_ASSERT( displayRect.iBr.iX == 300 ); + EUNIT_ASSERT( displayRect.iBr.iY == 400 ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SecondaryRectL() + { + iLiveSession->SetSecondaryRectL( TRect( 0, 0, 100, 100 ) ); + TRect rect = iLiveSession->SecondaryRect(); + + // Initial values + EUNIT_ASSERT( rect.iTl.iX == 0 ); + EUNIT_ASSERT( rect.iTl.iY == 0 ); + EUNIT_ASSERT( rect.iBr.iX == 100 ); + EUNIT_ASSERT( rect.iBr.iY == 100 ); + + iLiveSession->iRect.iTl.iX = 100; + iLiveSession->iRect.iTl.iY = 200; + iLiveSession->iRect.iBr.iX = 300; + iLiveSession->iRect.iBr.iY = 400; + + rect = iLiveSession->SecondaryRect(); - if ( session ) - { - for ( TInt i = 0; i < session->Streams().Count(); ++i ) - { - for ( TInt j = 0; j < session->Streams()[i]->Sinks().Count(); ++j ) - { - if ( session->Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - speaker = static_cast( - session->Streams()[i]->Sinks()[j] ); - result = ( speaker->VolumeL() == aVolume ); - } - } - } - } - return result; + EUNIT_ASSERT( rect.iTl.iX == 100 ); + EUNIT_ASSERT( rect.iTl.iY == 200 ); + EUNIT_ASSERT( rect.iBr.iX == 300 ); + EUNIT_ASSERT( rect.iBr.iY == 400 ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetSecondaryRectLL() + { + TRect rect; + + rect.iTl.iX = 100; + rect.iTl.iY = 200; + rect.iBr.iX = 300; + rect.iBr.iY = 400; + + iLiveSession->SetSecondaryRectL( rect ); + + EUNIT_ASSERT( iLiveSession->iRect.iTl.iX == 100 ); + EUNIT_ASSERT( iLiveSession->iRect.iTl.iY == 200 ); + EUNIT_ASSERT( iLiveSession->iRect.iBr.iX == 300 ); + EUNIT_ASSERT( iLiveSession->iRect.iBr.iY == 400 ); + + ESTABLISH_OUT_SESSION( iLiveSession ); + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *( iLiveSession->iSession ) ); + TRect displayRect = display->DisplayRectL(); + + EUNIT_ASSERT( displayRect.iTl.iX == 100 ); + EUNIT_ASSERT( displayRect.iTl.iY == 200 ); + EUNIT_ASSERT( displayRect.iBr.iX == 300 ); + EUNIT_ASSERT( displayRect.iBr.iY == 400 ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_EnableDisplayLL() + { + TRAPD( error, iLiveSession->EnableDisplayL( ETrue ) ); + MUS_TEST_FORWARD_ALLOC_FAILURE( error ); + EUNIT_ASSERT( error == KErrNotReady ); + + ESTABLISH_OUT_SESSION( iLiveSession ); + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *(iLiveSession->iSession) ); + + // Disable + iLiveSession->EnableDisplayL( EFalse ); + + EUNIT_ASSERT( !display->iIsEnabled ); + + // Try to disable again, request should be ignored + + iLiveSession->EnableDisplayL( EFalse ); + + EUNIT_ASSERT( !display->iIsEnabled ); + + // Enable + + iLiveSession->EnableDisplayL( ETrue ); + + EUNIT_ASSERT( display->iIsEnabled ); + + // Try to enable again, request should be ignored + + iLiveSession->EnableDisplayL( ETrue ); + + EUNIT_ASSERT( display->iIsEnabled ); + + EUNIT_ASSERT( iLiveSession->IsDisplayEnabled() ) + EUNIT_ASSERT( iLiveSession->IsDisplayActive() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_CMusEngMceSession_SetOrientationLL() + { + // Try without session, fails + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->SetOrientationL( + CMusEngMceSession::EPortrait ), + KErrNotReady ) + + // Establish a session + ESTABLISH_OUT_SESSION( iLiveSession ) + + CMceDisplaySink* display = + MusEngMceUtils::GetDisplayL( *iLiveSession->iSession ); + + // Check the initial state + display->iRotation = CMceDisplaySink::ENone; + EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), + CMusEngMceSession::EPortrait ) + + // Successfully change orientation + + iLiveSession->SetOrientationL( CMusEngMceSession::ELandscape ); + EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), + CMusEngMceSession::ELandscape ) + + iLiveSession->SetOrientationL( CMusEngMceSession::EPortrait ); + EUNIT_ASSERT_EQUALS( iLiveSession->OrientationL(), + CMusEngMceSession::EPortrait ) } @@ -1818,22 +1966,510 @@ // // ----------------------------------------------------------------------------- // -void UT_CMusEngMceSession::SetMaxVolForSpeakersL(CMceSession& aSession, TInt aMaxVol) +void UT_CMusEngMceSession::UT_SetEncodingDeviceLL() + { + CMceAvcCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + + // Generic error in CenRep, leave expected + CRepository::iForceFailWithCode = KErrNotReady; + EUNIT_ASSERT_LEAVE( iLiveSession->SetEncodingDeviceL( *codec ) ) + EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, TUid::Uid( 0 ) ) + + // No entry in CenRep, default value expected + CRepository::iForceFailWithCode = KErrNotFound; + const TUid KDefaultEncodingDevice( TUid::Uid( 0x20001C13 ) ); + iLiveSession->SetEncodingDeviceL( *codec ); + EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, + KDefaultEncodingDevice ) + + // Entry in CenRep + const TInt KSomeEncodingDevice( 0x20001C15 ); + CRepository::iStaticEncoderUid = KSomeEncodingDevice; + iLiveSession->SetEncodingDeviceL( *codec ); + EUNIT_ASSERT_EQUALS( codec->iEncodingDecodingDevice, + TUid::Uid( KSomeEncodingDevice ) ) + + CleanupStack::PopAndDestroy( codec ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetCodecConfigKeyLL() + { + CMceAvcCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codec->SetAllowedBitrates( KMceAvcBitrateLevel1b ); + + // Generic error in CenRep, leave expected + CRepository::iForceFailWithCode = KErrNotReady; + EUNIT_ASSERT_LEAVE( iLiveSession->SetCodecConfigKeyL( *codec ) ); + EUNIT_ASSERT( !codec->iConfigKey ) + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) + CRepository::iForceFailWithCode = KErrNone; + + // No entry in CenRep, nothing happens + iLiveSession->SetCodecConfigKeyL( *codec ); + EUNIT_ASSERT( !codec->iConfigKey ) + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) + + // Empty entry in CenRep + CRepository::SetStubAvcConfigKeysL( KNullDesC8() ); + iLiveSession->SetCodecConfigKeyL( *codec ); + EUNIT_ASSERT( !codec->iConfigKey ) + EUNIT_ASSERT( iLiveSession->iStoreEncoderConfigInfo ) + iLiveSession->iStoreEncoderConfigInfo = EFalse; // emulate original situation + + // Entry in CenRep + CRepository::SetStubAvcConfigKeysL( KMusAvcBitrateLevel_1b_ConfigKey ); + iLiveSession->SetCodecConfigKeyL( *codec ); + EUNIT_ASSERT( codec->iConfigKey ) + HBufC8* key = codec->ConfigKeyL(); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1bTestText() ) + CleanupStack::PopAndDestroy( key ); + EUNIT_ASSERT( !iLiveSession->iStoreEncoderConfigInfo ) + + CleanupStack::PopAndDestroy( codec ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_ReadCodecConfigKeyLL() + { + HBufC8* key( NULL ); + + // Try with H263, leave expected + CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() ); + EUNIT_ASSERT_LEAVE( key = iLiveSession->ReadCodecConfigKeyL( *codecH263 ) ) + CleanupStack::PopAndDestroy( codecH263 ); + + // Try without an entry in CenRep, leave expected + CMceVideoCodec* codec = CMceAvcCodec::NewLC( KMceSDPNameH264() ); + codec->SetAllowedBitrates( 0 | KMceAvcBitrateLevel1 ); + EUNIT_ASSERT_LEAVE( key = iLiveSession->ReadCodecConfigKeyL( *codec ) ) + + // Create CenRep entry which does not include wanted bitrate, NULL value + // expected + CRepository::SetStubAvcConfigKeysL( KMusAvcBitrateLevel1bTestText() ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( !key ) + + // Create entry with all AVC keys and try with all the values + CRepository::SetStubAvcConfigKeysL( KMusAvcAllLevelsConcatenation() ); + + // KMceAvcBitrateLevel1 + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1b + codec->SetAllowedBitrates( KMceAvcBitrateLevel1b ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1bTestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1_1 + codec->SetAllowedBitrates( KMceAvcBitrateLevel1_1 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_1TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1_2 + codec->SetAllowedBitrates( KMceAvcBitrateLevel1_2 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_2TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel1_3 + codec->SetAllowedBitrates( KMceAvcBitrateLevel1_3 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel1_3TestText ); + CleanupStack::PopAndDestroy( key ); + + // KMceAvcBitrateLevel2 + codec->SetAllowedBitrates( KMceAvcBitrateLevel2 ); + key = iLiveSession->ReadCodecConfigKeyL( *codec ); + EUNIT_ASSERT( key ); + CleanupStack::PushL( key ); + EUNIT_ASSERT_EQUALS( *key, KMusAvcBitrateLevel2TestText ); + CleanupStack::PopAndDestroy( key ); + + CleanupStack::PopAndDestroy( codec ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_StoreEncoderConfigInfoLL() + { + CRepository::iStaticWriteAvcKeysToStaticData = ETrue; + + // Try with clean CenRep + MultimediaSharingSettings::SetEncoderConfigInfoL( KNullDesC8() ); + + ESTABLISH_OUT_SESSION( iLiveSession ) // calls StoreEncoderConfigInfoL + // If StoreEncoderConfigInfoL leaves with KErrNoMemory, + // MMusEngSessionObserver::SessionFailed will be called. + if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed ) + { + User::Leave( KErrNoMemory ); + } + + HBufC8* keys = MultimediaSharingSettings::EncoderConfigInfoLC(); + EUNIT_ASSERT_EQUALS( *keys, KMusAvcBitrateLevel_1b_ConfigKey() ) + CleanupStack::PopAndDestroy( keys ); + + // Try without a clean CenRep + MultimediaSharingSettings::SetEncoderConfigInfoL( + KMusAvcBitrateLevel_1_1_ConfigKey() ); + + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->SetLcUiProvider( iLcUiProvider ); + + ESTABLISH_OUT_SESSION( iLiveSession ) // calls StoreEncoderConfigInfoL + // If StoreEncoderConfigInfoL leaves with KErrNoMemory, + // MMusEngSessionObserver::SessionFailed will be called. + if ( iLcSessionObserver->iCalledFunction == CLcSessionObserverStub::ESessionFailed ) + { + User::Leave( KErrNoMemory ); + } + + keys = MultimediaSharingSettings::EncoderConfigInfoLC(); + EUNIT_ASSERT_EQUALS( *keys, + KMusAvcBitrateLevels_1_1_And_1b_ConfigKeys() ) + CleanupStack::PopAndDestroy( keys ); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_StreamStreamingL() { - for ( TInt i = 0; i < aSession.Streams().Count(); ++i ) - { - for ( TInt j = 0; j < aSession.Streams()[i]->Sinks().Count(); ++j ) - { - if ( aSession.Streams()[i]->Sinks()[j]->Type() == KMceSpeakerSink ) - { - CMceSpeakerSink* speaker = static_cast( - aSession.Streams()[i]->Sinks()[j] ); - speaker->iMaxVolume = aMaxVol; - } - } - } + // Wrong stream type, no callbacks to MLcSessionObserver + CMceAudioStream* audioStream = CMceAudioStream::NewLC(); + iLiveSession->StreamStreaming( *audioStream ); + CleanupStack::PopAndDestroy( audioStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) + + // Wrong state, no callbacks to MLcSessionObserver + CMceVideoStream* videoStream = CMceVideoStream::NewLC(); + videoStream->iState = CMceMediaStream::EIdle; + iLiveSession->StreamStreaming( *videoStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) + + // Receive session, RTP source and remote player present + iLcSessionObserver->Reset(); + videoStream->iState = CMceMediaStream::EStreaming; + CMceRtpSource* rtpSource = CMceRtpSource::NewLC(); + videoStream->SetSourceL( rtpSource ); + CleanupStack::Pop( rtpSource ); + iReceiveSession->StreamStreaming( *videoStream ); + EUNIT_ASSERT_EQUALS( + TInt( CLcSessionObserverStub::EPlayerStateChanged ), + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( + iReceiveSession->RemoteVideoPlayer(), + iLcSessionObserver->iCurrentPlayer ) + + // Live session, RTP sink and local player present + iLcSessionObserver->Reset(); + videoStream->SetSourceL( NULL ); + CMceRtpSink* rtpSink = CMceRtpSink::NewLC(); + videoStream->AddSinkL( rtpSink ); + CleanupStack::Pop( rtpSink ); + iLiveSession->StreamStreaming( *videoStream ); + EUNIT_ASSERT_EQUALS( + TInt( CLcSessionObserverStub::EPlayerStateChanged ), + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( + iLiveSession->LocalVideoPlayer(), + iLcSessionObserver->iCurrentPlayer ) + + // Live session, RTP sink present, but no local player + iLcSessionObserver->Reset(); + delete iLiveSession->iLiveVideoPlayer; + iLiveSession->iLiveVideoPlayer = NULL; + iLiveSession->StreamStreaming( *videoStream ); + EUNIT_ASSERT( iLcSessionObserver->IsReseted() ) + + CleanupStack::PopAndDestroy( videoStream ); + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutSessionStateChangeL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutSessionStateChange(); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Observer exists + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutSessionStateChange(); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::ESessionStateChanged, + iLcSessionObserver->iCalledFunction ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutSessionUpdateL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutSessionUpdate(); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Observer exists + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutSessionUpdate(); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::ESessionUpdated, + iLcSessionObserver->iCalledFunction ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutSessionFailureL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutSessionFailure( KErrGeneral ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrNone, iLcSessionObserver->iError ) + + // Observer exists + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutSessionFailure( KErrGeneral ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::ESessionFailed, + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrGeneral, iLcSessionObserver->iError ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutPlayerStateChangeL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutPlayerStateChange( NULL ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Observer exists, but the player is NULL + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutPlayerStateChange( NULL ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Both observer and player exist + iLiveSession->InformObserverAboutPlayerStateChange( + iLiveSession->LocalVideoPlayer() ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EPlayerStateChanged, + iLcSessionObserver->iCalledFunction ) } - + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutPlayerUpdateL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutPlayerUpdate( NULL ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Observer exists, but the player is NULL + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutPlayerUpdate( NULL ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + + // Both observer and player exist + iLiveSession->InformObserverAboutPlayerUpdate( + iLiveSession->LocalVideoPlayer() ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EPlayerUpdated, + iLcSessionObserver->iCalledFunction ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformObserverAboutPlayerFailureL() + { + // Observer does not exist + iLiveSession->SetLcSessionObserver( NULL ); + iLiveSession->InformObserverAboutPlayerFailure( NULL, KErrGeneral ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrNone, iLcSessionObserver->iError ) + + // Observer exists, but the player is NULL + iLiveSession->SetLcSessionObserver( iLcSessionObserver ); + iLiveSession->InformObserverAboutPlayerFailure( NULL, KErrGeneral ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EUnknown, + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrNone, iLcSessionObserver->iError ) + + // Both observer and player exist + iLiveSession->InformObserverAboutPlayerFailure( + iLiveSession->LocalVideoPlayer(), KErrGeneral ); + EUNIT_ASSERT_EQUALS( + CLcSessionObserverStub::EPlayerFailed, + iLcSessionObserver->iCalledFunction ) + EUNIT_ASSERT_EQUALS( KErrGeneral, iLcSessionObserver->iError ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_LcUiProviderL() + { + // Provider does not exist + iLiveSession->SetLcUiProvider( NULL ); + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->LcUiProviderL(), KErrNotReady ) + + // Provider exists + iLiveSession->SetLcUiProvider( iLcUiProvider ); + EUNIT_ASSERT( &iLiveSession->LcUiProviderL() == iLcUiProvider ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UI_IsBackgroundStartupL() + { + // fast mode is not defined + EUNIT_ASSERT( !iLiveSession->IsBackgroundStartup() ) + + // fast mode is Off + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + 1 ) ); + + EUNIT_ASSERT( !iLiveSession->IsBackgroundStartup() ) + + // fast mode is On + // Bg value would be set to true at session contruct phase if property + // is set to EFastModeOn at that time. + iLiveSession->iBackground = ETrue; + User::LeaveIfError( RProperty::Set( NMusSessionApi::KCategoryUid, + NMusSessionApi::KFastMode, + 0 ) ); + + EUNIT_ASSERT( iLiveSession->IsBackgroundStartup() ) + + // Ensure after session recreation fast mode is off + delete iLiveSession; + iLiveSession = NULL; + iLiveSession = CMusEngLiveSession::NewL(); + EUNIT_ASSERT( !iLiveSession->IsBackgroundStartup() ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_InformUiProviderAboutReceivingStartL() + { + // Observer does not exist + iLiveSession->SetLcUiProvider( NULL ); + iLiveSession->InformUiProviderAboutReceivingStart(); + EUNIT_ASSERT_EQUALS( TInt( CLcUiProviderStub::EUnknown ), + iLcUiProvider->iCalledFunction ) + + // Observer exists, but we are on foreground (fast mode is off) + iLiveSession->SetLcUiProvider( iLcUiProvider ); + iLiveSession->InformUiProviderAboutReceivingStart(); + EUNIT_ASSERT_EQUALS( TInt( CLcUiProviderStub::EUnknown ), + iLcUiProvider->iCalledFunction ) + + // Observer exists, we are on background + iLiveSession->iBackground = ETrue; + EUNIT_ASSERT( !iLcUiProvider->iForeground ) + iLiveSession->InformUiProviderAboutReceivingStart(); + EUNIT_ASSERT_EQUALS( TInt( CLcUiProviderStub::EHandleForegroundStatus ), + iLcUiProvider->iCalledFunction ) + EUNIT_ASSERT( iLcUiProvider->iForeground ) + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_SetForegroundStatusL() + { + iLiveSession->iBackground = ETrue; + EUNIT_ASSERT( iLiveSession->SetForegroundStatus( ETrue ) == KErrNone ); + EUNIT_ASSERT( !iLiveSession->iBackground ); + EUNIT_ASSERT( iLiveSession->SetForegroundStatus( EFalse ) == KErrNone ); + EUNIT_ASSERT( !iLiveSession->iBackground ); // Still bg + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void UT_CMusEngMceSession::UT_UpdateLcSessionLL() + { + // No MCE session + EUNIT_ASSERT_SPECIFIC_LEAVE( iLiveSession->UpdateLcSessionL(), KErrNotReady ) + + ESTABLISH_OUT_SESSION( iLiveSession ); + + iLiveSession->UpdateLcSessionL(); + + } + // TEST TABLE EUNIT_BEGIN_TEST_TABLE( @@ -1842,264 +2478,442 @@ "UNIT" ) EUNIT_TEST( - "TerminateL - test ", + "LcSessionState - test ", + "CMusEngMceSession", + "LcSessionState", + "FUNCTIONALITY", + SetupL, UT_LcSessionStateL, Teardown) + +EUNIT_TEST( + "RemoteVideoPlayer - test ", + "CMusEngMceSession", + "RemoteVideoPlayer", + "FUNCTIONALITY", + SetupL, UT_RemoteVideoPlayerL, Teardown) + +EUNIT_TEST( + "LocalVideoPlayer - test ", + "CMusEngMceSession", + "LocalVideoPlayer", + "FUNCTIONALITY", + SetupL, UT_LocalVideoPlayerL, Teardown) + +EUNIT_TEST( + "LocalDisplayNameL - test ", + "CMusEngMceSession", + "LocalDisplayNameL", + "FUNCTIONALITY", + SetupL, UT_LocalDisplayNameL, Teardown) + +EUNIT_TEST( + "RemoteDisplayName - test ", + "CMusEngMceSession", + "RemoteDisplayName", + "FUNCTIONALITY", + SetupL, UT_RemoteDisplayNameL, Teardown) + +EUNIT_TEST( + "RemoteDetails - test ", + "CMusEngMceSession", + "RemoteDetails", + "FUNCTIONALITY", + SetupL, UT_RemoteDetailsL, Teardown) + +EUNIT_TEST( + "SetParameter - test ", "CMusEngMceSession", - "TerminateL", + "SetParameter", + "FUNCTIONALITY", + SetupL, UT_SetParameterL, Teardown) + +EUNIT_TEST( + "ParameterValue - test ", + "CMusEngMceSession", + "ParameterValue", + "FUNCTIONALITY", + SetupL, UT_ParameterValueL, Teardown) + +EUNIT_TEST( + "IsLcAudioMutedL - test ", + "CMusEngMceSession", + "IsLcAudioMutedL", + "FUNCTIONALITY", + SetupL, UT_IsLcAudioMutedL, Teardown) + +EUNIT_TEST( + "MuteLcAudioL - test ", + "CMusEngMceSession", + "MuteLcAudioL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_TerminateLL, Teardown) + SetupL, UT_MuteLcAudioL, Teardown) + +EUNIT_TEST( + "MuteLcMicL - test ", + "CMusEngMceSession", + "MuteLcMicL", + "FUNCTIONALITY", + SetupL, UT_MuteLcMicL, Teardown) + +EUNIT_TEST( + "EnableLcLoudspeakerL - test ", + "CMusEngMceSession", + "EnableLcLoudspeakerL", + "FUNCTIONALITY", + SetupL, UT_EnableLcLoudspeakerL, Teardown) + +EUNIT_TEST( + "SetLcVolumeL - test ", + "CMusEngMceSession", + "SetLcVolumeL", + "FUNCTIONALITY", + SetupL, UT_SetLcVolumeL, Teardown) EUNIT_TEST( "GetSessionTime - test ", "CMusEngMceSession", "GetSessionTime", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_GetSessionTimeL, Teardown) - -EUNIT_TEST( - "ConnectionActive - test ", - "CMusEngMceSession", - "ConnectionActive", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_ConnectionActiveL, Teardown) - -EUNIT_TEST( - "ContainsAudioL - test ", - "CMusEngMceSession", - "ContainsAudioL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_ContainsAudioLL, Teardown) - -EUNIT_TEST( - "IsMutedL - test ", - "CMusEngMceSession", - "IsMutedL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_IsMutedLL, Teardown) - -EUNIT_TEST( - "OrientationL - test ", - "CMusEngMceSession", - "OrientationL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_OrientationLL, Teardown) - -EUNIT_TEST( - "SetOrientationL - test ", - "CMusEngMceSession", - "SetOrientationL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SetOrientationLL, Teardown) - -EUNIT_TEST( - "VolumeUpL - test ", - "CMusEngMceSession", - "VolumeUpL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_VolumeUpLL, Teardown) - -EUNIT_TEST( - "VolumeDownL - test ", - "CMusEngMceSession", - "VolumeDownL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_VolumeDownLL, Teardown) - -EUNIT_TEST( - "SetVolumeL - test ", - "CMusEngMceSession", - "SetVolumeL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SetVolumeLL, Teardown) - -EUNIT_TEST( - "EnableDisplay - test ", - "CMusEngMceSession", - "EnableDisplay", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_EnableDisplayL, Teardown) - -EUNIT_TEST( - "MuteL - test ", - "CMusEngMceSession", - "MuteL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_MuteLL, Teardown) - -EUNIT_TEST( - "UnmuteL - test ", - "CMusEngMceSession", - "UnmuteL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_UnmuteLL, Teardown) + SetupL, UT_GetSessionTimeL, Teardown) EUNIT_TEST( "HandleTermination - test ", "CMusEngMceSession", "HandleTermination", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_HandleTerminationL, Teardown) + SetupL, UT_HandleTerminationL, Teardown) EUNIT_TEST( "AdjustVideoCodecL - test ", "CMusEngMceSession", "AdjustVideoCodecL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_AdjustVideoCodecLL, Teardown) + SetupL, UT_AdjustVideoCodecL, Teardown) EUNIT_TEST( "AdjustAudioCodecL - test ", "CMusEngMceSession", "AdjustAudioCodecL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_AdjustAudioCodecLL, Teardown) + SetupL, UT_AdjustAudioCodecL, Teardown) EUNIT_TEST( "RectChangedL - test ", "CMusEngMceSession", "RectChangedL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_RectChangedLL, Teardown) + SetupL, UT_RectChangedL, Teardown) EUNIT_TEST( "SetSessionSdpLinesL - test ", "CMusEngMceSession", "SetSessionSdpLinesL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SetSessionSdpLinesLL, Teardown) + SetupL, UT_SetSessionSdpLinesL, Teardown) EUNIT_TEST( + "SetSessionSdpLinesL - operator variant test ", + "CMusEngMceSession", + "SetSessionSdpLinesL", + "FUNCTIONALITY", + SetupL, UT_SetSessionSdpLines_OperatorL, Teardown) + +EUNIT_TEST( + "SetMediaSdpLinesL - test ", + "CMusEngMceSession", + "SetMediaSdpLinesL", + "FUNCTIONALITY", + SetupL, UT_SetMediaSdpLinesL, Teardown) + +EUNIT_TEST( + "SetMediaSdpLinesL - operator variant test ", + "CMusEngMceSession", + "SetMediaSdpLinesL", + "FUNCTIONALITY", + SetupL, UT_SetMediaSdpLines_OperatorL, Teardown) + +EUNIT_TEST( "AdjustStreamsAndCodecsL - test ", "CMusEngMceSession", "AdjustStreamsAndCodecsL", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_AdjustStreamsAndCodecsLL, Teardown) + SetupL, UT_AdjustStreamsAndCodecsL, Teardown) EUNIT_TEST( "IncomingSession - test ", "CMusEngMceSession", "IncomingSession", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_IncomingSessionL, Teardown) + SetupL, UT_IncomingSessionL, Teardown) EUNIT_TEST( "IncomingUpdate - test ", "CMusEngMceSession", "IncomingUpdate", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_IncomingUpdateL, Teardown) + SetupL, UT_IncomingUpdateL, Teardown) EUNIT_TEST( "StreamStateChangedL( source ) - test ", "CMusEngMceSession", "StreamStateChangedL( source )", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_StreamStateChangedWithSourceL, Teardown) + SetupL, UT_StreamStateChangedWithSourceL, Teardown) EUNIT_TEST( "SessionStateChanged - test ", "CMusEngMceSession", "SessionStateChanged", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SessionStateChangedL, Teardown) + SetupL, UT_SessionStateChangedL, Teardown) + +EUNIT_TEST( + "HandleSessionStateChanged - encoder key storing ", + "CMusEngMceSession", + "HandleSessionStateChanged", + "FUNCTIONALITY", + SetupL, UT_HandleSessionStateChanged_EncoderKeyStoringL, Teardown) EUNIT_TEST( "SessionConnectionStateChanged - test ", "CMusEngMceSession", "SessionConnectionStateChanged", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SessionConnectionStateChangedL, Teardown) + SetupL, UT_SessionConnectionStateChangedL, Teardown) EUNIT_TEST( "Failed - test ", "CMusEngMceSession", "Failed", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_FailedL, Teardown) + SetupL, UT_FailedL, Teardown) EUNIT_TEST( "UpdateFailed - test ", "CMusEngMceSession", "UpdateFailed", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_UpdateFailedL, Teardown) + SetupL, UT_UpdateFailedL, Teardown) EUNIT_TEST( "StreamStateChanged - test ", "CMusEngMceSession", "StreamStateChanged", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_StreamStateChangedL, Teardown) + SetupL, UT_StreamStateChangedL, Teardown) EUNIT_TEST( "StreamStateChangedL (sink ) - test ", "CMusEngMceSession", "StreamStateChangedL( sink )", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_StreamStateChangedWithSinkL, Teardown) + SetupL, UT_StreamStateChangedWithSinkL, Teardown) EUNIT_TEST( "SRReceived - test ", "CMusEngMceSession", "SRReceived", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SRReceivedL, Teardown) + SetupL, UT_SRReceivedL, Teardown) EUNIT_TEST( "RRReceived - test ", "CMusEngMceSession", "RRReceived", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_RRReceivedL, Teardown) - -EUNIT_TEST( - "InactivityTimeout - test ", - "CMusEngMceSession", - "InactivityTimeout", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_InactivityTimeoutL, Teardown) + SetupL, UT_RRReceivedL, Teardown) EUNIT_TEST( "SsrcAdded - test ", "CMusEngMceSession", "SsrcAdded", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SsrcAddedL, Teardown) + SetupL, UT_SsrcAddedL, Teardown) EUNIT_TEST( "SsrcRemoved - test ", "CMusEngMceSession", "SsrcRemoved", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_SsrcRemovedL, Teardown) -EUNIT_TEST( - "IsDisplayEnabledL - test ", - "CMusEngMceSession", - "IsDisplayEnabledL", - "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_IsDisplayEnabledLL, Teardown) + SetupL, UT_SsrcRemovedL, Teardown) EUNIT_TEST( "UpdateTimerEvent - test ", "CMusEngMceSession", "UpdateTimerEvent", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_UpdateTimerEventL, Teardown) + SetupL, UT_UpdateTimerEventL, Teardown) EUNIT_TEST( "IsRoamingBetweenAPsAllowed - test ", "CMusEngMceSession", "IsRoamingBetweenAPsAllowed", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_IsRoamingBetweenAPsAllowedL, Teardown) - + SetupL, UT_IsRoamingBetweenAPsAllowedL, Teardown) + +EUNIT_TEST( + "SaveContactL - test ", + "CMusEngMceSession", + "SaveContactL", + "FUNCTIONALITY", + SetupL, UT_SaveContactL, Teardown) + +EUNIT_TEST( + "Rect - test ", + "CMusEngMceSession", + "Rect", + "FUNCTIONALITY", + SetupL, UT_RectL, Teardown) + +EUNIT_TEST( + "SetRectL - test ", + "CMusEngMceSession", + "SetRectL", + "FUNCTIONALITY", + SetupL, UT_SetRectLL, Teardown) + +EUNIT_TEST( + "SecondaryRect - test ", + "CMusEngMceSession", + "SecondaryRect", + "FUNCTIONALITY", + SetupL, UT_SecondaryRectL, Teardown) + +EUNIT_TEST( + "SetSecondaryRectL - test ", + "CMusEngMceSession", + "SetSecondaryRectL", + "FUNCTIONALITY", + SetupL, UT_SetSecondaryRectLL, Teardown) + EUNIT_TEST( - "VolumeChanged - test ", + "EnableDisplayL - test ", + "CMusEngMceSession", + "EnableDisplayL", + "FUNCTIONALITY", + SetupL, UT_EnableDisplayLL, Teardown) + +EUNIT_TEST( + "SetOrientationL - test ", + "CMusEngMceSession", + "SetOrientationL", + "FUNCTIONALITY", + SetupL, UT_CMusEngMceSession_SetOrientationLL, Teardown) + +EUNIT_TEST( + "SetEncodingDeviceL - test ", + "CMusEngMceSession", + "SetEncodingDeviceL", + "FUNCTIONALITY", + SetupL, UT_SetEncodingDeviceLL, Teardown) + +EUNIT_TEST( + "SetCodecConfigKeyL - test ", + "CMusEngMceSession", + "SetCodecConfigKeyL", + "FUNCTIONALITY", + SetupL, UT_SetCodecConfigKeyLL, Teardown) + +EUNIT_TEST( + "ReadCodecConfigKeyL - test ", + "CMusEngMceSession", + "ReadCodecConfigKeyL", + "FUNCTIONALITY", + SetupL, UT_ReadCodecConfigKeyLL, Teardown) + +EUNIT_TEST( + "StoreEncoderConfigInfoL - test ", + "CMusEngMceSession", + "StoreEncoderConfigInfoL", + "FUNCTIONALITY", + SetupL, UT_StoreEncoderConfigInfoLL, Teardown) + +EUNIT_TEST( + "StreamStreaming - test ", "CMusEngMceSession", - "VolumeChanged", + "StreamStreaming", + "FUNCTIONALITY", + SetupL, UT_StreamStreamingL, Teardown) + +EUNIT_TEST( + "InformObserverAboutSessionStateChange - test ", + "CMusEngMceSession", + "InformObserverAboutSessionStateChange", + "FUNCTIONALITY", + SetupL, UT_InformObserverAboutSessionStateChangeL, Teardown) + +EUNIT_TEST( + "InformObserverAboutSessionUpdate - test ", + "CMusEngMceSession", + "InformObserverAboutSessionUpdate", + "FUNCTIONALITY", + SetupL, UT_InformObserverAboutSessionUpdateL, Teardown) + +EUNIT_TEST( + "InformObserverAboutSessionFailure - test ", + "CMusEngMceSession", + "InformObserverAboutSessionFailure", + "FUNCTIONALITY", + SetupL, UT_InformObserverAboutSessionFailureL, Teardown) + +EUNIT_TEST( + "InformObserverAboutPlayerStateChange - test ", + "CMusEngMceSession", + "InformObserverAboutPlayerStateChange", + "FUNCTIONALITY", + SetupL, UT_InformObserverAboutPlayerStateChangeL, Teardown) + +EUNIT_TEST( + "InformObserverAboutPlayerUpdate - test ", + "CMusEngMceSession", + "InformObserverAboutPlayerUpdate", "FUNCTIONALITY", - SetupL, UT_CMusEngMceSession_VolumeChangedL, Teardown) + SetupL, UT_InformObserverAboutPlayerUpdateL, Teardown) + +EUNIT_TEST( + "InformObserverAboutPlayerFailure - test ", + "CMusEngMceSession", + "InformObserverAboutPlayerFailure", + "FUNCTIONALITY", + SetupL, UT_InformObserverAboutPlayerFailureL, Teardown) +EUNIT_TEST( + "LcUiProviderL - test ", + "CMusEngMceSession", + "LcUiProviderL", + "FUNCTIONALITY", + SetupL, UT_LcUiProviderL, Teardown) +EUNIT_TEST( + "IsBackgroundStartup - test ", + "CMusEngMceSession", + "IsBackgroundStartup", + "FUNCTIONALITY", + SetupL, UI_IsBackgroundStartupL, Teardown) + +EUNIT_TEST( + "InformUiProviderAboutReceivingStart - test ", + "CMusEngMceSession", + "InformUiProviderAboutReceivingStart", + "FUNCTIONALITY", + SetupL, UT_InformUiProviderAboutReceivingStartL, Teardown) + +EUNIT_TEST( + "SetForegroundStatus - test ", + "CMusEngMceSession", + "SetForegroundStatus", + "FUNCTIONALITY", + SetupL, UT_SetForegroundStatusL, Teardown) + +EUNIT_TEST( + "UpdateLcSessionL - test ", + "CMusEngMceSession", + "UpdateL", + "FUNCTIONALITY", + SetupL, UT_UpdateLcSessionLL, Teardown) + + EUNIT_END_TEST_TABLE // END OF FILE + +