--- a/mmsharing/mmshengine/tsrc/ut_engine/src/ut_musengtwowayrecvsession.cpp Tue Aug 31 15:12:07 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1582 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-
-// INTERNAL INCLUDES
-#include "ut_musengtwowayrecvsession.h"
-#include "musengstubs.h"
-#include "musengtestdefs.h"
-#include "musengtwowayrecvsession.h"
-#include "musengmceutils.h"
-#include "mussessionproperties.h"
-#include "contactenginestub.h"
-#include "musenglivevideoplayer.h"
-
-// SYSTEM INCLUDES
-#include <eunitmacros.h>
-
-#include <mceinsession.h>
-#include <mcestreambundle.h>
-#include <mcevideostream.h>
-#include <mceaudiostream.h>
-#include <mcertpsource.h>
-#include <mcedisplaysink.h>
-#include <mcespeakersink.h>
-#include <mcecamerasource.h>
-#include <mcefilesource.h>
-#include <mcertpsink.h>
-#include <mceaudiocodec.h>
-#include <mceh263codec.h>
-#include <mceavccodec.h>
-#include <musmanager.h>
-
-#include <audiopreference.h>
-
-// Incoming session may be rejected silently due memory running out. Ensure that
-// incoming session was handled fully by using this macro.
-#define MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L \
-__ASSERT_ALWAYS( iReceiveSession->iSession && \
-iReceiveSession->iSession->iState != CMceSession::ETerminated, User::Leave( KErrNoMemory ) );
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-UT_CMusEngTwoWayRecvSession* UT_CMusEngTwoWayRecvSession::NewL()
- {
- UT_CMusEngTwoWayRecvSession* self = UT_CMusEngTwoWayRecvSession::NewLC();
- CleanupStack::Pop( self );
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-UT_CMusEngTwoWayRecvSession* UT_CMusEngTwoWayRecvSession::NewLC()
- {
- UT_CMusEngTwoWayRecvSession* self = new( ELeave ) UT_CMusEngTwoWayRecvSession();
- CleanupStack::PushL( self );
- self->ConstructL();
- return self;
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-UT_CMusEngTwoWayRecvSession::~UT_CMusEngTwoWayRecvSession()
- {
- // NOP
- }
-
-
-// -----------------------------------------------------------------------------
-// Default constructor
-// -----------------------------------------------------------------------------
-//
-UT_CMusEngTwoWayRecvSession::UT_CMusEngTwoWayRecvSession()
- {
- // NOP
- }
-
-
-// -----------------------------------------------------------------------------
-// Second phase construct
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::ConstructL()
- {
- // The ConstructL from the base class CEUnitTestSuiteClass must be called.
- // It generates the test case table.
- CEUnitTestSuiteClass::ConstructL();
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::SetupL( )
- {
- iLcSessionObserver = new( ELeave )CLcSessionObserverStub;
- iReceiveSession = CMusEngTwoWayRecvSession::NewL();
- iReceiveSession->SetLcSessionObserver( iLcSessionObserver );
- }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::Teardown( )
- {
- delete iReceiveSession;
- delete iLcSessionObserver;
- PropertyHelper::Close();
- }
-
-
-// TEST HELPERS
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CMceVideoStream* UT_CMusEngTwoWayRecvSession::ConstructVideoInStreamLC()
- {
- CMceVideoStream* videoStream = CMceVideoStream::NewLC();
-
- videoStream->SetSourceL( CMceRtpSource::NewLC() );
- CleanupStack::Pop();
-
- videoStream->AddSinkL(
- CMceDisplaySink::NewLC( *iReceiveSession->iManager ) );
- CleanupStack::Pop();
-
- return videoStream;
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CMceVideoStream* UT_CMusEngTwoWayRecvSession::ConstructVideoOutStreamLC()
- {
- CMceVideoStream* videoStream = CMceVideoStream::NewLC();
-
- videoStream->SetSourceL(
- CMceCameraSource::NewLC( *iReceiveSession->iManager ) );
- CleanupStack::Pop();
-
- videoStream->AddSinkL( CMceRtpSink::NewLC() );
- CleanupStack::Pop();
-
- return videoStream;
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CMceAudioStream* UT_CMusEngTwoWayRecvSession::ConstructAudioInStreamLC()
- {
- CMceAudioStream* audioStream = CMceAudioStream::NewLC();
-
- audioStream->SetSourceL( CMceRtpSource::NewLC() );
- CleanupStack::Pop();
-
- audioStream->AddSinkL( CMceSpeakerSink::NewLC() );
- CleanupStack::Pop();
-
- return audioStream;
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CMceAudioStream* UT_CMusEngTwoWayRecvSession::ConstructAudioOutStreamLC()
- {
- CMceAudioStream* audioStream = CMceAudioStream::NewLC();
-
- audioStream->SetSourceL(
- CMceFileSource::NewLC( *iReceiveSession->iManager, KNullDesC() ) );
- CleanupStack::Pop();
-
- audioStream->AddSinkL( CMceRtpSink::NewLC() );
- CleanupStack::Pop();
-
- return audioStream;
-
- }
-
-
-// -----------------------------------------------------------------------------
-// Helper to construct incoming sessions.
-// -----------------------------------------------------------------------------
-//
-CMceInSession* UT_CMusEngTwoWayRecvSession::ConstructInSessionLC(
- TInt aVideoStreamCount,
- TInt aAudioStreamCount,
- TBool aConstructSinks )
- {
- CMceInSession* inSession = CMceInSession::NewL(
- *(iReceiveSession->iManager),
- KTestOriginator() );
- CleanupStack::PushL( inSession );
-
- for ( TInt i = 0; i < aVideoStreamCount; ++i )
- {
- CMceVideoStream* videoStream = CMceVideoStream::NewLC();
-
- CMceRtpSource* rtpSource = CMceRtpSource::NewLC();
- videoStream->SetSourceL( rtpSource );
- CleanupStack::Pop( rtpSource );
-
- if ( aConstructSinks )
- {
- CMceDisplaySink* display = CMceDisplaySink::NewLC(
- *(iReceiveSession->iManager) );
- videoStream->AddSinkL( display );
- CleanupStack::Pop( display );
- }
-
- inSession->AddStreamL( videoStream );
- CleanupStack::Pop( videoStream );
- }
-
- for ( TInt i = 0; i < aAudioStreamCount; ++i )
- {
- CMceAudioStream* audioStream = CMceAudioStream::NewLC();
-
- CMceRtpSource* rtpSource = CMceRtpSource::NewLC();
- audioStream->SetSourceL( rtpSource );
- CleanupStack::Pop( rtpSource );
-
- if ( aConstructSinks )
- {
- CMceSpeakerSink* speaker = CMceSpeakerSink::NewLC();
- audioStream->AddSinkL( speaker );
- CleanupStack::Pop( speaker );
- }
-
- inSession->AddStreamL( audioStream );
- CleanupStack::Pop( audioStream );
- }
-
- return inSession;
- }
-
-// -----------------------------------------------------------------------------
-// Helper to construct incoming two-way video session.
-// -----------------------------------------------------------------------------
-//
-CMceInSession* UT_CMusEngTwoWayRecvSession::ConstructTwoWayInSessionLC( TBool aConstructSinks )
- {
- CMceInSession* inSession = CMceInSession::NewL(
- *(iReceiveSession->iManager),
- KTestOriginator() );
- CleanupStack::PushL( inSession );
-
- CMceVideoStream* videoStream = CMceVideoStream::NewLC();
-
- CMceRtpSource* rtpSource = CMceRtpSource::NewLC();
- videoStream->SetSourceL( rtpSource );
- CleanupStack::Pop( rtpSource );
-
- if ( aConstructSinks )
- {
- CMceDisplaySink* display = CMceDisplaySink::NewLC(
- *(iReceiveSession->iManager) );
- videoStream->AddSinkL( display );
- CleanupStack::Pop( display );
- }
-
- CMceVideoStream* videoOutStream = CMceVideoStream::NewLC();
-
- CMceCameraSource* cameraSource = CMceCameraSource::NewLC( *(iReceiveSession->iManager) );
- videoOutStream->SetSourceL( cameraSource );
- CleanupStack::Pop( cameraSource );
-
- if ( aConstructSinks )
- {
- CMceRtpSink* rtpSink = CMceRtpSink::NewLC();
- videoOutStream->AddSinkL( rtpSink );
- CleanupStack::Pop( rtpSink );
- }
- videoStream->BindL( videoOutStream );
- CleanupStack::Pop( videoOutStream );
-
- inSession->AddStreamL( videoStream );
- CleanupStack::Pop( videoStream );
-
- return inSession;
- }
-
-
-// TEST CASES
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_NewLL( )
- {
- EUNIT_ASSERT( iReceiveSession );
- EUNIT_ASSERT( !iReceiveSession->iSession );
- EUNIT_ASSERT( iReceiveSession->iMceManagerUid ==
- TUid::Uid(CMusManager::ESipInviteDesired2WayVideo) );
- }
-
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_EnableDisplayLL()
- {
- TRAPD( error, iReceiveSession->EnableDisplayL( ETrue ) );
- MUS_TEST_FORWARD_ALLOC_FAILURE( error );
- EUNIT_ASSERT( error == KErrNotReady );
-
- TMceTransactionDataContainer container;
- CMceInSession* inSession = ConstructTwoWayInSessionLC();
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L
-
- CMceDisplaySink* display =
- MusEngMceUtils::GetDisplayL( *(iReceiveSession->iSession) );
-
- CMceDisplaySink* receivingDisplay =
- MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession );
-
- // Disable
- iReceiveSession->EnableDisplayL( EFalse );
-
- EUNIT_ASSERT( !display->iIsEnabled );
- EUNIT_ASSERT( !receivingDisplay->iIsEnabled );
-
- // Try to disable again, request should be ignored
-
- iReceiveSession->EnableDisplayL( EFalse );
-
- EUNIT_ASSERT( !display->iIsEnabled );
- EUNIT_ASSERT( !receivingDisplay->iIsEnabled );
-
- // Enable
-
- iReceiveSession->EnableDisplayL( ETrue );
-
- EUNIT_ASSERT( display->iIsEnabled );
- EUNIT_ASSERT( receivingDisplay->iIsEnabled );
-
- // Try to enable again, request should be ignored
-
- iReceiveSession->EnableDisplayL( ETrue );
-
- EUNIT_ASSERT( display->iIsEnabled );
- EUNIT_ASSERT( receivingDisplay->iIsEnabled );
-
- // Session does not have sending stream (viewfinder does not exist)
- //
- delete iReceiveSession->iSession;
- iReceiveSession->iSession = NULL;
- inSession = ConstructInSessionLC( 1, 0 );
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- display = MusEngMceUtils::GetVfDisplay( *(iReceiveSession->iSession) );
- EUNIT_ASSERT( display == NULL );
- receivingDisplay = MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession );
- iReceiveSession->EnableDisplayL( EFalse );
- EUNIT_ASSERT( !receivingDisplay->iIsEnabled );
-
- }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_SetOrientationLL()
- {
- // Try without session, fails
- EUNIT_ASSERT_SPECIFIC_LEAVE( iReceiveSession->SetOrientationL(
- CMusEngMceSession::EPortrait ),
- KErrNotReady )
-
- TMceTransactionDataContainer container;
- CMceInSession* inSession = ConstructTwoWayInSessionLC();
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L
-
- CMceDisplaySink* display =
- MusEngMceUtils::GetDisplayL( *iReceiveSession->iSession );
-
- CMceDisplaySink* receivingDisplay =
- MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession );
-
-
- // Check the initial state
- display->iRotation = CMceDisplaySink::ENone;
- receivingDisplay->iRotation = CMceDisplaySink::ENone;
- EUNIT_ASSERT_EQUALS( iReceiveSession->OrientationL(),
- CMusEngMceSession::EPortrait )
-
- // Successfully change orientation
-
- iReceiveSession->SetOrientationL( CMusEngMceSession::ELandscape );
- EUNIT_ASSERT_EQUALS( iReceiveSession->OrientationL(),
- CMusEngMceSession::ELandscape )
-
- EUNIT_ASSERT_EQUALS( display->iRotation, CMceDisplaySink::EClockwise90Degree );
- EUNIT_ASSERT_EQUALS( receivingDisplay->iRotation, CMceDisplaySink::EClockwise90Degree );
-
- iReceiveSession->SetOrientationL( CMusEngMceSession::EPortrait );
- EUNIT_ASSERT_EQUALS( iReceiveSession->OrientationL(),
- CMusEngMceSession::EPortrait )
-
- EUNIT_ASSERT_EQUALS( display->iRotation, CMceDisplaySink::ENone );
- EUNIT_ASSERT_EQUALS( receivingDisplay->iRotation, CMceDisplaySink::ENone );
-
- // Session does not have sending stream (viewfinder does not exist)
- delete iReceiveSession->iSession;
- iReceiveSession->iSession = NULL;
- inSession = ConstructInSessionLC( 1, 0 );
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L
- display = MusEngMceUtils::GetVfDisplay( *(iReceiveSession->iSession) );
- EUNIT_ASSERT( display == NULL );
- receivingDisplay = MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession );
- iReceiveSession->SetOrientationL( CMusEngMceSession::ELandscape );
- EUNIT_ASSERT_EQUALS( receivingDisplay->iRotation, CMceDisplaySink::EClockwise90Degree );
- }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_OrientationLL()
- {
- // Try without session, fails
- EUNIT_ASSERT_SPECIFIC_LEAVE( iReceiveSession->OrientationL(),
- KErrNotReady )
-
- TMceTransactionDataContainer container;
- CMceInSession* inSession = ConstructTwoWayInSessionLC();
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L
-
- CMceDisplaySink* receivingDisplay =
- MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession );
- receivingDisplay->iRotation = CMceDisplaySink::ENone;
-
- EUNIT_ASSERT_EQUALS( iReceiveSession->OrientationL(),
- CMusEngMceSession::EPortrait )
-
- receivingDisplay->iRotation = CMceDisplaySink::EClockwise90Degree;
-
- EUNIT_ASSERT_EQUALS( iReceiveSession->OrientationL(),
- CMusEngMceSession::ELandscape )
- }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_SetLocalRectLL()
- {
- // Does nothing real before session establishment
- TRect rect1( 100, 200, 300, 500 );
- iReceiveSession->SetSecondaryRectL( rect1 );
-
- EUNIT_ASSERT( rect1 == iReceiveSession->iLocalRect );
-
- // Local rect changing affects to viewfinder display sink not to receiving video
- //
- TMceTransactionDataContainer container;
- CMceInSession* inSession = ConstructTwoWayInSessionLC();
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L
-
- CMceDisplaySink* vfDisplay =
- MusEngMceUtils::GetDisplayL( *( iReceiveSession->iSession ) );
- CMceDisplaySink* receivingDisplay =
- MusEngMceUtils::GetReceivingDisplayL( *( iReceiveSession->iSession ) );
-
- EUNIT_ASSERT( vfDisplay->DisplayRectL() == iReceiveSession->iLocalRect );
- EUNIT_ASSERT( receivingDisplay->DisplayRectL() != iReceiveSession->iLocalRect );
-
- TRect rect2( 200, 200, 300, 500 );
- iReceiveSession->SetSecondaryRectL( rect2 );
- EUNIT_ASSERT( rect2 == iReceiveSession->iLocalRect );
- EUNIT_ASSERT( vfDisplay->DisplayRectL() == iReceiveSession->iLocalRect );
- EUNIT_ASSERT( receivingDisplay->DisplayRectL() != iReceiveSession->iLocalRect );
-
- // Terminate session and try again, rect must not be changed
-
- iReceiveSession->iSession->iState = CMceSession::ETerminated;
-
- TRect rect3( 300, 300, 400, 600 );
-
- iReceiveSession->SetSecondaryRectL( rect3 );
-
- EUNIT_ASSERT( vfDisplay->DisplayRectL() != rect3 )
- }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_SetRectsLL()
- {
- // Does nothing real before session establishment
- TRect localrect1( 100, 200, 300, 400 );
- TRect remoterect1( 100, 200, 300, 500 );
- iReceiveSession->SetRectsL( remoterect1, localrect1 );
-
- EUNIT_ASSERT( localrect1 == iReceiveSession->iLocalRect );
- EUNIT_ASSERT( remoterect1 == iReceiveSession->iRect );
-
- // Local rect changing affects to viewfinder display sink and remote rect to
- // receiving video display sink
- //
- TMceTransactionDataContainer container;
- CMceInSession* inSession = ConstructTwoWayInSessionLC();
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L
-
- CMceDisplaySink* vfDisplay =
- MusEngMceUtils::GetDisplayL( *( iReceiveSession->iSession ) );
- CMceDisplaySink* receivingDisplay =
- MusEngMceUtils::GetReceivingDisplayL( *( iReceiveSession->iSession ) );
-
- TRect localrect2( 200, 200, 300, 400 );
- TRect remoterect2( 200, 200, 300, 500 );
- EUNIT_ASSERT( vfDisplay->DisplayRectL() != localrect2 );
- EUNIT_ASSERT( receivingDisplay->DisplayRectL() != remoterect2 );
-
- iReceiveSession->SetRectsL( remoterect2, localrect2 );
- EUNIT_ASSERT( localrect2 == iReceiveSession->iLocalRect );
- EUNIT_ASSERT( remoterect2 == iReceiveSession->iRect );
- EUNIT_ASSERT( vfDisplay->DisplayRectL() == iReceiveSession->iLocalRect );
- EUNIT_ASSERT( receivingDisplay->DisplayRectL() == iReceiveSession->iRect );
-
- // Terminate session and try again, rect must not be changed
-
- iReceiveSession->iSession->iState = CMceSession::ETerminated;
-
- TRect localrect3( 300, 200, 300, 400 );
- TRect remoterect3( 300, 200, 300, 500 );
-
- iReceiveSession->SetRectsL( remoterect3, localrect3 );
-
- EUNIT_ASSERT( vfDisplay->DisplayRectL() != localrect3 )
- EUNIT_ASSERT( receivingDisplay->DisplayRectL() != remoterect3 );
-
- // Session does not have sending stream (viewfinder does not exist)
-
- TRect localrect4( 400, 200, 300, 400 );
- TRect remoterect4( 400, 200, 300, 500 );
- delete iReceiveSession->iSession;
- iReceiveSession->iSession = NULL;
- inSession = ConstructInSessionLC( 1, 0 );
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L
- vfDisplay = MusEngMceUtils::GetVfDisplay( *(iReceiveSession->iSession) );
- EUNIT_ASSERT( vfDisplay == NULL );
- receivingDisplay = MusEngMceUtils::GetReceivingDisplayL( *iReceiveSession->iSession );
- iReceiveSession->SetRectsL( remoterect4, localrect4 );
- EUNIT_ASSERT( localrect4 == iReceiveSession->iLocalRect );
- EUNIT_ASSERT( remoterect4 == iReceiveSession->iRect );
- EUNIT_ASSERT( receivingDisplay->DisplayRectL() == iReceiveSession->iRect );
- }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_CameraL()
- {
- // Camera cannot be used without MCE session
- //
- EUNIT_ASSERT_LEAVE( iReceiveSession->Camera().ChangeCameraL(
- TMusEngCameraHandler::EFrontCamera ) );
-
- // Camera cannot be used without video out stream
- //
- TMceTransactionDataContainer container;
- CMceInSession* inSession = ConstructInSessionLC( 1, 0 );
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L
- EUNIT_ASSERT_LEAVE( iReceiveSession->Camera().ChangeCameraL(
- TMusEngCameraHandler::EFrontCamera ) );
-
- // Camera can be used when video out stream exists
- //
- delete iReceiveSession->iSession;
- iReceiveSession->iSession = NULL;
- inSession = ConstructTwoWayInSessionLC();
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- MUSENG_TEST_ASSERT_INCOMING_SESSION_ALLOC_FAILURE_L
- iReceiveSession->Camera().ChangeCameraL(
- TMusEngCameraHandler::EFrontCamera );
- }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_LocalVideoPlayerL()
- {
- EUNIT_ASSERT( iReceiveSession->LocalVideoPlayer() ==
- iReceiveSession->iLiveVideoPlayer )
- }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_HandleSessionStateChangedL()
- {
- // Unknown session, let the base class handle
- CMceInSession* inSession = ConstructInSessionLC( 1, 1 );
-
- iReceiveSession->HandleSessionStateChanged( *inSession, 0, KNullDesC8() );
-
- // Simulate incoming session
- TMceTransactionDataContainer container;
-
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
-
- // Session is in state EReserving, let the base class handle
- iReceiveSession->HandleSessionStateChanged( *inSession, 0, KNullDesC8() );
-
- // The normal cases:
-
- // 1 ) First transition to state EProceeding, user and remote end should
- // be notified
- inSession->iState = CMceSession::EProceeding;
- iReceiveSession->HandleSessionStateChanged( *inSession, 0, KNullDesC8() );
- EUNIT_ASSERT_EQUALS( TInt( iLcSessionObserver->iCalledFunction ),
- TInt( CLcSessionObserverStub::ESessionStateChanged ) )
- EUNIT_ASSERT( iReceiveSession->iRingLCalled )
- iLcSessionObserver->Reset();
-
- // 2 ) Now simulate second transition to EProceeding state which can happen
- // if we force 100rel to be used. User and remote end should not be
- // notified anymore but change should be ignored.
- inSession->iState = CMceSession::EProceeding;
- iReceiveSession->HandleSessionStateChanged( *inSession, 0, KNullDesC8() );
- EUNIT_ASSERT_EQUALS( TInt( CLcSessionObserverStub::EUnknown ),
- TInt( iLcSessionObserver->iCalledFunction ) )
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_AdjustVideoCodecLL()
- {
- CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() );
- CMceVideoCodec* codecH2632000 = CMceH263Codec::NewLC( KMceSDPNameH2632000() );
- CMceVideoCodec* codecAvc = CMceAvcCodec::NewLC( KMceSDPNameH264() );
- CMceVideoCodec* codecUnknown = CMceH263Codec::NewLC( KNullDesC8() );
-
- iReceiveSession->AdjustVideoCodecL( *codecH263, KMceRTPSource );
- iReceiveSession->AdjustVideoCodecL( *codecH2632000, KMceRTPSource );
- iReceiveSession->AdjustVideoCodecL( *codecAvc, KMceRTPSource );
- iReceiveSession->AdjustVideoCodecL( *codecUnknown, KMceRTPSource );
-
- EUNIT_ASSERT_EQUALS( codecH263->KeepAliveTimer(), 6 )
- EUNIT_ASSERT_EQUALS( codecH263->KeepAlivePayloadType(), 96 )
- EUNIT_ASSERT_EQUALS( codecH263->KeepAliveData(), KNullDesC8() )
-
- EUNIT_ASSERT_EQUALS( codecH2632000->KeepAliveTimer(), 6 )
- EUNIT_ASSERT_EQUALS( codecH2632000->KeepAlivePayloadType(), 96 )
- EUNIT_ASSERT_EQUALS( codecH2632000->KeepAliveData(), KNullDesC8() )
-
- EUNIT_ASSERT_EQUALS( codecAvc->KeepAliveTimer(), 6 )
- EUNIT_ASSERT_EQUALS( codecAvc->KeepAlivePayloadType(), 98 )
- EUNIT_ASSERT_EQUALS( codecAvc->KeepAliveData(), KNullDesC8() )
-
- EUNIT_ASSERT_EQUALS( codecUnknown->KeepAliveTimer(), 6 )
- EUNIT_ASSERT_EQUALS( codecUnknown->KeepAlivePayloadType(), 0 )
- EUNIT_ASSERT_EQUALS( codecUnknown->KeepAliveData(), KNullDesC8() )
-
- CleanupStack::PopAndDestroy( codecUnknown );
- CleanupStack::PopAndDestroy( codecAvc );
- CleanupStack::PopAndDestroy( codecH2632000 );
- CleanupStack::PopAndDestroy( codecH263 );
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_AdjustAudioCodecLL()
- {
- CMceAudioCodec* codec =
- iReceiveSession->iManager->SupportedAudioCodecs()[0]->CloneL();
- CleanupStack::PushL( codec );
- iReceiveSession->AdjustAudioCodecL( *codec );
-
- // Test keepalive timer
-
- TUint8 keepAliveTimer = codec->KeepAliveTimer();
- EUNIT_ASSERT( codec->KeepAliveTimer() == 6 )
- EUNIT_ASSERT( codec->KeepAlivePayloadType() == 97 )
- EUNIT_ASSERT( codec->KeepAliveData() == KNullDesC8() )
-
- // Test that base class has been called
-
- EUNIT_ASSERT( codec->iMMFPriority == KAudioPrioritySwisPlayback )
- EUNIT_ASSERT( codec->iMMFPriorityPreference == KAudioPrefSwisPlayback )
-
- CleanupStack::PopAndDestroy( codec );
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_DoCodecSelectionLL()
- {
- // Check that Non-Interleaved AVC is preferred over single NAL
- CMceVideoStream* videoStream = CMceVideoStream::NewLC();
-
- CMceVideoCodec* codecAvcSingleNal = CMceAvcCodec::NewLC( KMceSDPNameH264() );
- codecAvcSingleNal->iCodecMode = KMceAvcModeSingleNal;
- videoStream->AddCodecL( codecAvcSingleNal );
- CleanupStack::Pop( codecAvcSingleNal );
-
- CMceVideoCodec* codecAvcNonInterleaved = CMceAvcCodec::NewLC( KMceSDPNameH264() );
- codecAvcNonInterleaved->iCodecMode = KMceAvcModeNonInterleaved;
- videoStream->AddCodecL( codecAvcNonInterleaved );
- CleanupStack::Pop( codecAvcNonInterleaved );
-
- iReceiveSession->DoCodecSelectionL( *videoStream );
-
- EUNIT_ASSERT_EQUALS( videoStream->Codecs().Count(), 1 )
- EUNIT_ASSERT_EQUALS( videoStream->Codecs()[0]->SdpName(), KMceSDPNameH264() )
- EUNIT_ASSERT_EQUALS( videoStream->Codecs()[0]->CodecMode(),
- KMceAvcModeNonInterleaved )
-
- CleanupStack::PopAndDestroy( videoStream );
-
- // Check that Single NAL AVC is preferred over H263
- videoStream = CMceVideoStream::NewLC();
-
- CMceVideoCodec* codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() );
- videoStream->AddCodecL( codecH263 );
- CleanupStack::Pop( codecH263 );
-
- codecAvcSingleNal = CMceAvcCodec::NewLC( KMceSDPNameH264() );
- codecAvcSingleNal->iCodecMode = KMceAvcModeSingleNal;
- videoStream->AddCodecL( codecAvcSingleNal );
- CleanupStack::Pop( codecAvcSingleNal );
-
- iReceiveSession->DoCodecSelectionL( *videoStream );
-
- EUNIT_ASSERT_EQUALS( videoStream->Codecs().Count(), 1 )
- EUNIT_ASSERT_EQUALS( videoStream->Codecs()[0]->SdpName(), KMceSDPNameH264() )
- EUNIT_ASSERT_EQUALS( videoStream->Codecs()[0]->CodecMode(),
- KMceAvcModeSingleNal )
-
- CleanupStack::PopAndDestroy( videoStream );
-
- // Check that H263 codecs without AVC are handled correctly (in base class)
- videoStream = CMceVideoStream::NewLC();
-
- codecH263 = CMceH263Codec::NewLC( KMceSDPNameH263() );
- videoStream->AddCodecL( codecH263 );
- CleanupStack::Pop( codecH263 );
-
- CMceVideoCodec* codecH2632000 = CMceH263Codec::NewLC( KMceSDPNameH2632000() );
- videoStream->AddCodecL( codecH2632000 );
- CleanupStack::Pop( codecH2632000 );
-
- iReceiveSession->DoCodecSelectionL( *videoStream );
-
- EUNIT_ASSERT_EQUALS( videoStream->Codecs().Count(), 1 )
-
- CleanupStack::PopAndDestroy( videoStream );
-
- // Check that AVC non-interleaved with best bitrate is preferred
- videoStream = CMceVideoStream::NewLC();
-
- codecAvcNonInterleaved = CMceAvcCodec::NewLC( KMceSDPNameH264() );
- codecAvcNonInterleaved->iCodecMode = KMceAvcModeNonInterleaved;
- codecAvcNonInterleaved->SetMaxBitrateL( 80000 );
- videoStream->AddCodecL( codecAvcNonInterleaved );
- CleanupStack::Pop( codecAvcNonInterleaved );
-
- CMceVideoCodec* codecAvcNonInterleaved128 = CMceAvcCodec::NewLC( KMceSDPNameH264() );
- codecAvcNonInterleaved128->iCodecMode = KMceAvcModeNonInterleaved;
- codecAvcNonInterleaved128->SetMaxBitrateL( 128000 );
- videoStream->AddCodecL( codecAvcNonInterleaved128 );
- CleanupStack::Pop( codecAvcNonInterleaved128 );
-
- iReceiveSession->DoCodecSelectionL( *videoStream );
-
- EUNIT_ASSERT_EQUALS( videoStream->Codecs().Count(), 1 )
- EUNIT_ASSERT( videoStream->Codecs()[0] == codecAvcNonInterleaved128 )
-
- CleanupStack::PopAndDestroy( videoStream );
-
- // Check that in case of several AVC single NALs, the best bitrate is preferred
- videoStream = CMceVideoStream::NewLC();
-
- codecAvcSingleNal = CMceAvcCodec::NewLC( KMceSDPNameH264() );
- codecAvcSingleNal->iCodecMode = KMceAvcModeSingleNal;
- codecAvcSingleNal->SetMaxBitrateL( 80000 );
- videoStream->AddCodecL( codecAvcSingleNal );
- CleanupStack::Pop( codecAvcSingleNal );
-
- CMceVideoCodec* codecAvcSingleNal128 = CMceAvcCodec::NewLC( KMceSDPNameH264() );
- codecAvcSingleNal128->iCodecMode = KMceAvcModeSingleNal;
- codecAvcSingleNal128->SetMaxBitrateL( 128000 );
- videoStream->AddCodecL( codecAvcSingleNal128 );
- CleanupStack::Pop( codecAvcSingleNal128 );
-
- iReceiveSession->DoCodecSelectionL( *videoStream );
-
- EUNIT_ASSERT_EQUALS( videoStream->Codecs().Count(), 1 )
- EUNIT_ASSERT( videoStream->Codecs()[0] == codecAvcSingleNal128 )
-
- CleanupStack::PopAndDestroy( videoStream );
-
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_IncomingSessionL()
- {
- _LIT8( KMusEngSwisTestIdentifier, "Require: precondition" );
- _LIT8( KMusEngTestHeader, "Some header" );
-
- TMceTransactionDataContainer container;
-
- // Simulate SWIS 2.2 invite. There are no streams, so completion fails and
- // session gets rejected. Still prenotification has been given.
- CMceInSession* inSession = ConstructInSessionLC( 0, 0 );
- CDesC8Array* headers = new ( ELeave ) CDesC8ArrayFlat( 2 );
- CleanupStack::PushL( headers );
- headers->AppendL( KMusEngTestHeader() );
- headers->AppendL( KMusEngSwisTestIdentifier() );
- container.SetHeaders( headers );
- CleanupStack::Pop( headers );
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
- container.Clear();
-
- EUNIT_ASSERT( iReceiveSession->iSession );
- EUNIT_ASSERT( iReceiveSession->iSession->iState ==
- CMceSession::ETerminated );
-
- EUNIT_ASSERT( iReceiveSession->iSession->i100RelUsage ==
- KMce100RelRequired )
- EUNIT_ASSERT( !iReceiveSession->iRingLCalled )
-
- // Try again with valid session, normal case
- inSession = ConstructInSessionLC( 1, 0 );
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
-
- EUNIT_ASSERT( iReceiveSession->iSession );
- // Next state depends on success of completion of session structure.
- // When using alloc failure state is ETerminated, in succesfull case it is
- // EReserving. However it is set to "normal" state EReserving after
- // assertion
- EUNIT_ASSERT( iReceiveSession->iSession->iState ==
- CMceSession::EReserving ||
- iReceiveSession->iSession->iState ==
- CMceSession::ETerminated );
- iReceiveSession->iSession->iState = CMceSession::EReserving;
-
- // Try again without container, new session gets terminated and deleted
- inSession = ConstructInSessionLC( 1, 0 );
- iReceiveSession->IncomingSession( inSession, NULL );
- CleanupStack::Pop( inSession );
-
- EUNIT_ASSERT( iReceiveSession->iSession );
- EUNIT_ASSERT( iReceiveSession->iSession != inSession );
- EUNIT_ASSERT( iReceiveSession->iSession->iState ==
- CMceSession::EReserving );
-
- // Try again when there is session pending, new session gets terminated
- // and deleted
- inSession = ConstructInSessionLC( 1, 0 );
- iReceiveSession->IncomingSession( inSession, &container );
- CleanupStack::Pop( inSession );
-
- EUNIT_ASSERT( iReceiveSession->iSession );
- EUNIT_ASSERT( iReceiveSession->iSession != inSession );
- EUNIT_ASSERT( iReceiveSession->iSession->iState ==
- CMceSession::EReserving );
- }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithoutSessionL()
- {
- TRAPD( error, iReceiveSession->CompleteSessionStructureL() );
- MUS_TEST_FORWARD_ALLOC_FAILURE( error );
- EUNIT_ASSERT( error == KErrNotReady );
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithoutStreamsL()
- {
- CMceInSession* inSession = ConstructInSessionLC( 0, 0 );
- iReceiveSession->iSession = inSession; // Transfers ownership
- CleanupStack::Pop( inSession );
-
- TRAPD( error, iReceiveSession->CompleteSessionStructureL() );
- MUS_TEST_FORWARD_ALLOC_FAILURE( error );
- EUNIT_ASSERT( error == KErrCorrupt );
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithOutgoingStreamL()
- {
- // Stream will be removed.
- CMceInSession* inSession = ConstructInSessionLC( 0, 0 );
-
- inSession->AddStreamL( ConstructVideoOutStreamLC() );
- CleanupStack::Pop();
-
- iReceiveSession->iSession = inSession; // Transfers ownership
- CleanupStack::Pop( inSession );
-
- TRAPD( error, iReceiveSession->CompleteSessionStructureL() )
- MUS_TEST_FORWARD_ALLOC_FAILURE( error );
- EUNIT_ASSERT( error == KErrCorrupt );
- EUNIT_ASSERT( inSession->Streams().Count() == 0 );
- EUNIT_ASSERT( inSession->Bundles().Count() == 0 );
- }
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithVideoInL()
- {
- CMceInSession* inSession = ConstructInSessionLC( 1, 0 );
-
- iReceiveSession->iSession = inSession; // Transfers ownership
- CleanupStack::Pop( inSession );
-
- iReceiveSession->CompleteSessionStructureL();
-
- EUNIT_ASSERT( inSession->Streams().Count() == 1 );
- EUNIT_ASSERT( inSession->Streams()[0]->IsEnabled() )
- EUNIT_ASSERT( inSession->Streams()[0]->Type() == KMceVideo )
- EUNIT_ASSERT( inSession->Streams()[0]->Sinks().Count() == 1 )
- EUNIT_ASSERT( inSession->Streams()[0]->Sinks()[0]->Type() ==
- KMceDisplaySink )
-
- // No audio, bundle is not constructed
- EUNIT_ASSERT( inSession->Bundles().Count() == 0 )
-
- }
-
-
-// -----------------------------------------------------------------------------
-// Two-way video in incoming session. Incoming stream is the main stream.
-// Both directions are enabled. Local viewfinder stream is added to display
-// outgoing video locally
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithVideoOutBoundToVideoInL()
- {
- CMceInSession* inSession = ConstructInSessionLC( 1, 0 );
-
- CMceVideoStream* videoOut = ConstructVideoOutStreamLC();
- inSession->Streams()[0]->BindL( videoOut );
- CleanupStack::Pop( videoOut );
-
- iReceiveSession->iSession = inSession; // Transfers ownership
- CleanupStack::Pop( inSession );
-
- iReceiveSession->CompleteSessionStructureL();
-
- EUNIT_ASSERT( inSession->Streams().Count() == 2 );
-
- CMceMediaStream* videoIn = inSession->Streams()[0];
-
- EUNIT_ASSERT( videoIn->IsEnabled() )
- EUNIT_ASSERT( videoIn->Type() == KMceVideo )
- EUNIT_ASSERT( videoIn->Sinks().Count() == 1 )
- EUNIT_ASSERT( videoIn->Sinks()[0]->Type() == KMceDisplaySink )
-
- EUNIT_ASSERT( videoIn->BoundStream() )
- EUNIT_ASSERT( videoIn->BoundStreamL().IsEnabled() )
-
- CMceMediaStream* videoVf = inSession->Streams()[1];
- EUNIT_ASSERT( videoVf->IsEnabled() )
- EUNIT_ASSERT( videoVf->Type() == KMceVideo )
- EUNIT_ASSERT( videoVf->Sinks().Count() == 1 )
- EUNIT_ASSERT( videoVf->Sinks()[0]->Type() == KMceDisplaySink )
- EUNIT_ASSERT( videoVf->Source()->Type() == KMceCameraSource )
-
- // No audio, bundle is not constructed
- EUNIT_ASSERT( inSession->Bundles().Count() == 0 )
- }
-
-
-// -----------------------------------------------------------------------------
-// Two-way video in incoming session. Incoming stream is the bound stream.
-// Both directions are enabled. Local viewfinder stream is added to display
-// outgoing video locally
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithVideoInBoundToVideoOutL()
- {
- CMceInSession* inSession = ConstructInSessionLC( 0, 0 );
-
- CMceVideoStream* videoOut = ConstructVideoOutStreamLC();
-
- CMceVideoStream* videoIn = ConstructVideoInStreamLC();
- videoOut->BindL( videoIn );
- CleanupStack::Pop( videoIn );
-
- inSession->AddStreamL( videoOut );
- CleanupStack::Pop( videoOut );
-
- iReceiveSession->iSession = inSession; // Transfers ownership
- CleanupStack::Pop( inSession );
-
- iReceiveSession->CompleteSessionStructureL();
-
- EUNIT_ASSERT( inSession->Streams().Count() == 2 );
- EUNIT_ASSERT( videoOut->IsEnabled() )
- EUNIT_ASSERT( videoOut->Type() == KMceVideo )
- EUNIT_ASSERT( videoOut->Sinks().Count() == 1 )
- EUNIT_ASSERT( videoOut->Sinks()[0]->Type() == KMceRTPSink )
- EUNIT_ASSERT( videoOut->Sinks()[0]->IsEnabled() )
-
- EUNIT_ASSERT( videoOut->BoundStream() )
- EUNIT_ASSERT( videoOut->BoundStreamL().IsEnabled() )
- EUNIT_ASSERT( videoOut->BoundStreamL().Type() == KMceVideo )
- EUNIT_ASSERT( videoOut->BoundStreamL().Sinks().Count() == 1 )
- EUNIT_ASSERT( videoOut->BoundStreamL().Sinks()[0]->Type() ==
- KMceDisplaySink )
- EUNIT_ASSERT( videoOut->BoundStreamL().Sinks()[0]->IsEnabled() )
-
- CMceMediaStream* videoVf = inSession->Streams()[1];
- EUNIT_ASSERT( videoVf->IsEnabled() )
- EUNIT_ASSERT( videoVf->Type() == KMceVideo )
- EUNIT_ASSERT( videoVf->Sinks().Count() == 1 )
- EUNIT_ASSERT( videoVf->Sinks()[0]->Type() == KMceDisplaySink )
- EUNIT_ASSERT( videoVf->Source()->Type() == KMceCameraSource )
-
- // No audio, bundle is not constructed
- EUNIT_ASSERT( inSession->Bundles().Count() == 0 )
- }
-
-
-// -----------------------------------------------------------------------------
-// Construct 3 video instreams:
-// 0. Without bound stream
-// 1. Bounds video out stream
-// 2. Bounded by video out stream
-// Bound stream should be selected and vf stream is added
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_WithMultipleVideoInsL()
- {
- // construct session and stream 0
- CMceInSession* inSession = ConstructInSessionLC( 2, 0 );
-
- // finish constructing stream 1
- CMceVideoStream* videoOut = ConstructVideoOutStreamLC();
- inSession->Streams()[1]->BindL( videoOut );
- CleanupStack::Pop( videoOut );
-
- // finish constructing stream 2
- videoOut = ConstructVideoOutStreamLC();
-
- CMceVideoStream* videoIn = ConstructVideoInStreamLC();
- videoOut->BindL( videoIn );
- CleanupStack::Pop( videoIn );
-
- inSession->AddStreamL( videoOut );
- CleanupStack::Pop( videoOut );
-
- // Transfers ownership
- iReceiveSession->iSession = inSession;
- CleanupStack::Pop( inSession );
-
- // complete
- iReceiveSession->CompleteSessionStructureL();
-
- // Bound stream should be used, other original streams should be deleted
- // but vf stream is added
- EUNIT_ASSERT( inSession->Streams().Count() == 2 );
-
- // First stream
- EUNIT_ASSERT( inSession->Streams()[0]->IsEnabled() )
- EUNIT_ASSERT( inSession->Streams()[0]->Type() == KMceVideo )
- EUNIT_ASSERT( inSession->Streams()[0]->Sinks().Count() == 1 )
- EUNIT_ASSERT( inSession->Streams()[0]->Sinks()[0]->Type() == KMceDisplaySink )
- EUNIT_ASSERT( inSession->Streams()[0]->Sinks()[0]->IsEnabled() )
- EUNIT_ASSERT( inSession->Streams()[0]->BoundStream() )
- EUNIT_ASSERT( inSession->Streams()[0]->BoundStreamL().Type() == KMceVideo )
-
- CMceMediaStream* videoVf = inSession->Streams()[1];
- EUNIT_ASSERT( videoVf->IsEnabled() )
- EUNIT_ASSERT( videoVf->Type() == KMceVideo )
- EUNIT_ASSERT( videoVf->Sinks().Count() == 1 )
- EUNIT_ASSERT( videoVf->Sinks()[0]->Type() == KMceDisplaySink )
- EUNIT_ASSERT( videoVf->Source()->Type() == KMceCameraSource )
-
- // No audio, bundle is not constructed
- EUNIT_ASSERT( inSession->Bundles().Count() == 0 )
- }
-
-
-// -----------------------------------------------------------------------------
-// Streams in this test case
-// 0. Video in
-// 1. Audio in
-// 2. Audio out bound to audio in
-// 3. Audio in bound to audio out
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::
- UT_CompleteSessionStructureL_WithVideoAndMultipleAudioInsL()
- {
- // Construct session and streams 0 and 1
- CMceInSession* inSession = inSession = ConstructInSessionLC( 1, 2 );
-
- // Construct stream 2
- CMceAudioStream* audioOut = ConstructAudioOutStreamLC();
- inSession->Streams()[2]->BindL( audioOut );
- CleanupStack::Pop( audioOut );
-
- // Construct stream 3
-
- audioOut = ConstructAudioOutStreamLC();
-
- CMceAudioStream* audioIn = ConstructAudioInStreamLC();
- audioOut->BindL( audioIn );
- CleanupStack::Pop( audioIn );
-
- inSession->AddStreamL( audioOut );
- CleanupStack::Pop( audioOut );
-
- // Transfers ownership
- iReceiveSession->iSession = inSession;
- CleanupStack::Pop( inSession );
-
- // Complete
- iReceiveSession->CompleteSessionStructureL();
- EUNIT_ASSERT( inSession->Streams().Count() == 4 );
-
- // Stream 0
- EUNIT_ASSERT( inSession->Streams()[0]->Type() == KMceVideo )
- EUNIT_ASSERT( inSession->Streams()[0]->IsEnabled() )
- EUNIT_ASSERT( inSession->Streams()[0]->Sinks().Count() == 1 )
- EUNIT_ASSERT( inSession->Streams()[0]->Sinks()[0]->Type() ==
- KMceDisplaySink )
-
- // Stream 1
- EUNIT_ASSERT( inSession->Streams()[1]->Type() == KMceAudio )
- EUNIT_ASSERT( inSession->Streams()[1]->IsEnabled() )
- EUNIT_ASSERT( inSession->Streams()[1]->Sinks().Count() == 1 )
- EUNIT_ASSERT( inSession->Streams()[1]->Sinks()[0]->Type() ==
- KMceSpeakerSink );
- CMceSpeakerSink* speaker =
- static_cast<CMceSpeakerSink*>(inSession->Streams()[1]->Sinks()[0]);
- EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->LcVolumeL() )
-
- // Stream 2 and bound stream
- EUNIT_ASSERT( inSession->Streams()[2]->Type() == KMceAudio )
- EUNIT_ASSERT( inSession->Streams()[2]->IsEnabled() )
- EUNIT_ASSERT( inSession->Streams()[2]->Sinks().Count() == 1 )
- EUNIT_ASSERT( inSession->Streams()[2]->Sinks()[0]->Type() ==
- KMceSpeakerSink );
- speaker = static_cast<CMceSpeakerSink*>(inSession->Streams()[2]->Sinks()[0]);
- EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->LcVolumeL() )
-
- EUNIT_ASSERT( inSession->Streams()[2]->BoundStream() )
- EUNIT_ASSERT( !inSession->Streams()[2]->BoundStreamL().IsEnabled() )
- EUNIT_ASSERT( inSession->Streams()[2]->BoundStreamL().Type() == KMceAudio )
-
- EUNIT_ASSERT( inSession->Streams()[2]->BoundStreamL().Sinks().Count() == 1 )
- EUNIT_ASSERT( inSession->Streams()[2]->BoundStreamL().Sinks()[0]->Type() ==
- KMceRTPSink );
-
- // Stream 3 and bound stream
- EUNIT_ASSERT( inSession->Streams()[3]->Type() == KMceAudio )
- EUNIT_ASSERT( !inSession->Streams()[3]->IsEnabled() )
- EUNIT_ASSERT( inSession->Streams()[3]->Sinks().Count() == 1 )
- EUNIT_ASSERT( inSession->Streams()[3]->Sinks()[0]->Type() == KMceRTPSink )
- EUNIT_ASSERT( !inSession->Streams()[3]->Sinks()[0]->IsEnabled() )
-
- EUNIT_ASSERT( inSession->Streams()[3]->BoundStream() )
- EUNIT_ASSERT( inSession->Streams()[3]->BoundStreamL().IsEnabled() )
- EUNIT_ASSERT( inSession->Streams()[3]->BoundStreamL().Type() == KMceAudio )
- EUNIT_ASSERT( inSession->Streams()[3]->BoundStreamL().Sinks().Count() == 1 )
- EUNIT_ASSERT( inSession->Streams()[3]->BoundStreamL().Sinks()[0]->Type() ==
- KMceSpeakerSink )
- speaker = static_cast<CMceSpeakerSink*>
- (inSession->Streams()[3]->BoundStreamL().Sinks()[0]);
- EUNIT_ASSERT( speaker->VolumeL() == iReceiveSession->LcVolumeL() )
-
- // Check for bundles
- EUNIT_ASSERT( inSession->Bundles().Count() == 1 )
- EUNIT_ASSERT( inSession->Bundles()[0]->Streams().Count() == 4 )
- EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[0]->Type() == KMceAudio )
- EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[0]->Sinks()[0]->Type() ==
- KMceSpeakerSink )
- EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[1]->Type() == KMceAudio )
- EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[1]->Sinks()[0]->Type() ==
- KMceSpeakerSink )
- EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[2]->Type() == KMceAudio )
- EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[2]->Sinks()[0]->Type() ==
- KMceSpeakerSink )
- EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[3]->Type() == KMceVideo )
- EUNIT_ASSERT( inSession->Bundles()[0]->Streams()[3]->Sinks()[0]->Type() ==
- KMceDisplaySink )
- }
-
-
-// -----------------------------------------------------------------------------
-// Streams in this test case
-// 0. Video in
-// 1. Audio in
-// 2. Audio out bound to audio in
-// 3. Audio in bound to audio out
-// All audio will be removed because of operator variant
-// -----------------------------------------------------------------------------
-//
-void UT_CMusEngTwoWayRecvSession::UT_CompleteSessionStructureL_OperatorVariant()
- {
- iReceiveSession->iOperatorVariant = ETrue;
-
- // Construct session and streams 0 and 1
- CMceInSession* inSession = inSession = ConstructInSessionLC( 1, 2 );
-
- // Construct stream 2
- CMceAudioStream* audioOut = ConstructAudioOutStreamLC();
- inSession->Streams()[2]->BindL( audioOut );
- CleanupStack::Pop( audioOut );
-
- // Construct stream 3
-
- audioOut = ConstructAudioOutStreamLC();
-
- CMceAudioStream* audioIn = ConstructAudioInStreamLC();
- audioOut->BindL( audioIn );
- CleanupStack::Pop( audioIn );
-
- inSession->AddStreamL( audioOut );
- CleanupStack::Pop( audioOut );
-
- // Transfers ownership
- iReceiveSession->iSession = inSession;
- CleanupStack::Pop( inSession );
-
- // Complete
- iReceiveSession->CompleteSessionStructureL();
-
- // Check that all audio has been removed and no bundles has been
- // constructed
- EUNIT_ASSERT_EQUALS( inSession->Streams().Count(), 1 )
- EUNIT_ASSERT_EQUALS( inSession->Streams()[0]->Type(), KMceVideo )
- EUNIT_ASSERT_EQUALS( inSession->Bundles().Count(), 0 )
-
-
- // Session with bandwidth attribute at sessionlevel
- // -> bandwidth is taken in use at session level
- //
- delete iReceiveSession->iSession;
- iReceiveSession->iSession = NULL;
-
- inSession = ConstructInSessionLC( 1, 0 );
- CDesC8Array* sdpLines = new ( ELeave ) CDesC8ArrayFlat( 1 );
- CleanupStack::PushL( sdpLines );
- sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() );
- inSession->SetSessionSDPLinesL( sdpLines );
- CleanupStack::Pop( sdpLines );
-
- // Transfers ownership
- iReceiveSession->iSession = inSession;
- CleanupStack::Pop( inSession );
-
- iReceiveSession->CompleteSessionStructureL();
-
- MDesC8Array* newSdpLines = iReceiveSession->iSession->SessionSDPLinesL();
- CleanupDeletePushL( newSdpLines );
- TBool bandwidthFoundFromSessionLevel( EFalse );
- for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ )
- {
- if ( newSdpLines->MdcaPoint( i ).Compare(
- KMusEngSessionSdpLineBandwidthField() ) == 0 )
- {
- bandwidthFoundFromSessionLevel = ETrue;
- }
- }
- EUNIT_ASSERT( bandwidthFoundFromSessionLevel );
- CleanupStack::PopAndDestroy( newSdpLines );
-
- newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->MediaAttributeLinesL();
- CleanupDeletePushL( newSdpLines );
- TBool bandwidthFoundFromMediaLevel( EFalse );
- for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ )
- {
- if ( newSdpLines->MdcaPoint( i ).Compare(
- KMusEngSessionSdpLineBandwidthField() ) == 0 )
- {
- bandwidthFoundFromMediaLevel = ETrue;
- }
- }
- EUNIT_ASSERT( !bandwidthFoundFromMediaLevel );
- CleanupStack::PopAndDestroy( newSdpLines );
-
- // Session with bandwidth attribute at media level
- // -> bandwidth is taken in use at media level
- //
- delete iReceiveSession->iSession;
- iReceiveSession->iSession = NULL;
-
- inSession = ConstructInSessionLC( 1, 0 );
-
- sdpLines = new ( ELeave ) CDesC8ArrayFlat( 1 );
- CleanupStack::PushL( sdpLines );
- sdpLines->AppendL( KMusEngSessionSdpLineBandwidthField() );
- inSession->Streams()[ 0 ]->SetMediaAttributeLinesL( sdpLines );
- CleanupStack::Pop( sdpLines );
-
- // Transfers ownership
- iReceiveSession->iSession = inSession;
- CleanupStack::Pop( inSession );
-
- iReceiveSession->CompleteSessionStructureL();
-
- newSdpLines = iReceiveSession->iSession->SessionSDPLinesL();
- CleanupDeletePushL( newSdpLines );
- bandwidthFoundFromSessionLevel = EFalse;
- for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ )
- {
- if ( newSdpLines->MdcaPoint( i ).Compare(
- KMusEngSessionSdpLineBandwidthField() ) == 0 )
- {
- bandwidthFoundFromSessionLevel = ETrue;
- }
- }
- EUNIT_ASSERT( !bandwidthFoundFromSessionLevel );
- CleanupStack::PopAndDestroy( newSdpLines );
-
- newSdpLines = iReceiveSession->iSession->Streams()[ 0 ]->MediaAttributeLinesL();
- CleanupDeletePushL( newSdpLines );
- bandwidthFoundFromMediaLevel = EFalse;
- for ( TInt i = 0; newSdpLines && i < newSdpLines->MdcaCount(); i++ )
- {
- if ( newSdpLines->MdcaPoint( i ).Compare(
- KMusEngSessionSdpLineBandwidthField() ) == 0 )
- {
- bandwidthFoundFromMediaLevel = ETrue;
- }
- }
- EUNIT_ASSERT( bandwidthFoundFromMediaLevel );
- CleanupStack::PopAndDestroy( newSdpLines );
- }
-
-
-// TEST TABLE
-
-EUNIT_BEGIN_TEST_TABLE(
- UT_CMusEngTwoWayRecvSession,
- "UT_CMusEngTwoWayRecvSession",
- "UNIT" )
-
-
-EUNIT_TEST(
- "NewL - test ",
- "CMusEngTwoWayRecvSession",
- "NewL",
- "FUNCTIONALITY",
- SetupL, UT_NewLL, Teardown)
-
-EUNIT_TEST(
- "EnableDisplayL - test ",
- "CMusEngTwoWayRecvSession",
- "EnableDisplayL",
- "FUNCTIONALITY",
- SetupL, UT_EnableDisplayLL, Teardown)
-
-EUNIT_TEST(
- "SetOrientationL - test ",
- "CMusEngTwoWayRecvSession",
- "SetOrientationL",
- "FUNCTIONALITY",
- SetupL, UT_SetOrientationLL, Teardown)
-
-EUNIT_TEST(
- "OrientationL - test ",
- "CMusEngTwoWayRecvSession",
- "OrientationL",
- "FUNCTIONALITY",
- SetupL, UT_OrientationLL, Teardown)
-
-EUNIT_TEST(
- "SetLocalRectL - test ",
- "CMusEngTwoWayRecvSession",
- "SetLocalRectL",
- "FUNCTIONALITY",
- SetupL, UT_SetLocalRectLL, Teardown)
-
-EUNIT_TEST(
- "SetRectsL - test ",
- "CMusEngTwoWayRecvSession",
- "SetRectsL",
- "FUNCTIONALITY",
- SetupL, UT_SetRectsLL, Teardown)
-
-EUNIT_TEST(
- "Camera - test ",
- "CMusEngTwoWayRecvSession",
- "Camera",
- "FUNCTIONALITY",
- SetupL, UT_CameraL, Teardown)
-
-EUNIT_TEST(
- "LocalVideoPlayer - test ",
- "CMusEngTwoWayRecvSession",
- "LocalVideoPlayer",
- "FUNCTIONALITY",
- SetupL, UT_LocalVideoPlayerL, Teardown)
-
-EUNIT_TEST(
- "HandleSessionStateChanged - test ",
- "CMusEngTwoWayRecvSession",
- "HandleSessionStateChanged",
- "FUNCTIONALITY",
- SetupL, UT_HandleSessionStateChangedL, Teardown)
-
-EUNIT_TEST(
- "AdjustVideoCodecL - test ",
- "CMusEngTwoWayRecvSession",
- "AdjustVideoCodecL",
- "FUNCTIONALITY",
- SetupL, UT_AdjustVideoCodecLL, Teardown)
-
-EUNIT_TEST(
- "AdjustAudioCodecL - test ",
- "CMusEngTwoWayRecvSession",
- "AdjustAudioCodecL",
- "FUNCTIONALITY",
- SetupL, UT_AdjustAudioCodecLL, Teardown)
-
-EUNIT_TEST(
- "DoCodecSelectionL - test ",
- "CMusEngTwoWayRecvSession",
- "DoCodecSelectionL",
- "FUNCTIONALITY",
- SetupL, UT_DoCodecSelectionLL, Teardown)
-
-EUNIT_TEST(
- "IncomingSession - test ",
- "CMusEngTwoWayRecvSession",
- "IncomingSession",
- "FUNCTIONALITY",
- SetupL, UT_IncomingSessionL, Teardown)
-
-EUNIT_TEST(
- "UT_CompleteSessionStructureL_WithoutSessionL - test without a session",
- "CMusEngTwoWayRecvSession",
- "CompleteSessionStructureL",
- "FUNCTIONALITY",
- SetupL, UT_CompleteSessionStructureL_WithoutSessionL, Teardown)
-
-EUNIT_TEST(
- "UT_CompleteSessionStructureL_WithoutStreamsL - without streams",
- "CMusEngTwoWayRecvSession",
- "CompleteSessionStructureL",
- "FUNCTIONALITY",
- SetupL, UT_CompleteSessionStructureL_WithoutStreamsL, Teardown)
-
-EUNIT_TEST(
- "UT_CompleteSessionStructureL_WithOutgoingStreamL - with outgoing stream",
- "CMusEngTwoWayRecvSession",
- "CompleteSessionStructureL",
- "FUNCTIONALITY",
- SetupL, UT_CompleteSessionStructureL_WithOutgoingStreamL, Teardown)
-
-EUNIT_TEST(
- "UT_CompleteSessionStructureL_WithVideoInL - with video in stream",
- "CMusEngTwoWayRecvSession",
- "CompleteSessionStructureL",
- "FUNCTIONALITY",
- SetupL, UT_CompleteSessionStructureL_WithVideoInL, Teardown)
-
-EUNIT_TEST(
- "UT_CompleteSessionStructureL_WithVideoOutBoundToVideoInL - with sendrecv video, video out bound to video in",
- "CMusEngTwoWayRecvSession",
- "CompleteSessionStructureL",
- "FUNCTIONALITY",
- SetupL, UT_CompleteSessionStructureL_WithVideoOutBoundToVideoInL, Teardown)
-
-EUNIT_TEST(
- "UT_CompleteSessionStructureL_WithVideoInBoundToVideoOutL - with sendrecv video, video in bound to video out",
- "CMusEngTwoWayRecvSession",
- "CompleteSessionStructureL",
- "FUNCTIONALITY",
- SetupL, UT_CompleteSessionStructureL_WithVideoInBoundToVideoOutL, Teardown)
-
-EUNIT_TEST(
- "UT_CompleteSessionStructureL_WithMultipleVideoInsL - with multiple video in streams",
- "CMusEngTwoWayRecvSession",
- "CompleteSessionStructureL",
- "FUNCTIONALITY",
- SetupL, UT_CompleteSessionStructureL_WithMultipleVideoInsL, Teardown)
-
-EUNIT_TEST(
- "CompleteSessionStructureL - test one video and multiple audio streams",
- "CMusEngTwoWayRecvSession",
- "CompleteSessionStructureL",
- "FUNCTIONALITY",
- SetupL, UT_CompleteSessionStructureL_WithVideoAndMultipleAudioInsL, Teardown)
-
-EUNIT_TEST(
- "CompleteSessionStructureL - test operator variant",
- "CMusEngTwoWayRecvSession",
- "CompleteSessionStructureL",
- "FUNCTIONALITY",
- SetupL, UT_CompleteSessionStructureL_OperatorVariant, Teardown)
-
-EUNIT_END_TEST_TABLE
-
-// END OF FILE
-
-