multimediacommscontroller/mmccrtpsourcesink/tsrc/ut_rtpsourcesink/src/UT_CMccRtpDataSource.cpp
changeset 0 1bce908db942
child 32 f2ed1fc4c163
equal deleted inserted replaced
-1:000000000000 0:1bce908db942
       
     1 /*
       
     2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 //  CLASS HEADER
       
    22 #include "UT_CMccRtpDataSource.h"
       
    23 
       
    24 //  EXTERNAL INCLUDES
       
    25 #include <digia/eunit/eunitmacros.h>
       
    26 
       
    27 
       
    28 //  INTERNAL INCLUDES
       
    29 #include "MccRtpDataSource.h"
       
    30 #include "MmccEvents.h"
       
    31 #include "AmrPayloadFormatRead.h"
       
    32 #include "mccrtpkeepalivecontainer.h"
       
    33 #include "mcctesteventhandler.h"
       
    34 #include <srtpcryptocontext.h>
       
    35 #include <srtpmastersalt.h>
       
    36 #include <srtpstreamin.h>
       
    37 #include "UT_CMccRtpInterface.h"
       
    38 #include "mccunittestmacros.h"
       
    39 
       
    40 // CONSTANTS
       
    41 _LIT8(KRFC3711_TestMasterKey128bits,    "E1F97A0D3E018BE0D64FA32C06DE4139");
       
    42 _LIT8(KRFC3711_TestMasterSalt112bits,   "0EC675AD498AFEEBB6960B3AABE6");	
       
    43 _LIT8(KTestMKI128Bits,      "ABCDEF1234567890ABCDEF1234567890");
       
    44 
       
    45 // CONSTRUCTION
       
    46 UT_CMccRtpDataSource* UT_CMccRtpDataSource::NewL()
       
    47     {
       
    48     UT_CMccRtpDataSource* self = UT_CMccRtpDataSource::NewLC(); 
       
    49     CleanupStack::Pop();
       
    50 
       
    51     return self;
       
    52     }
       
    53 
       
    54 UT_CMccRtpDataSource* UT_CMccRtpDataSource::NewLC()
       
    55     {
       
    56     UT_CMccRtpDataSource* self = new( ELeave ) UT_CMccRtpDataSource();
       
    57     CleanupStack::PushL( self );
       
    58 
       
    59 	self->ConstructL(); 
       
    60 
       
    61     return self;
       
    62     }
       
    63 
       
    64 // Destructor (virtual by CBase)
       
    65 UT_CMccRtpDataSource::~UT_CMccRtpDataSource()
       
    66     {
       
    67     }
       
    68 
       
    69 // Default constructor
       
    70 UT_CMccRtpDataSource::UT_CMccRtpDataSource()
       
    71     : MDataSink( KUidMediaTypeAudio )
       
    72     {
       
    73     }
       
    74 
       
    75 // Second phase construct
       
    76 void UT_CMccRtpDataSource::ConstructL()
       
    77     {
       
    78     // The ConstructL from the base class CEUnitTestSuiteClass must be called.
       
    79     // It generates the test case table.
       
    80     CEUnitTestSuiteClass::ConstructL();
       
    81     }
       
    82 
       
    83 //  METHODS
       
    84 
       
    85 
       
    86 void UT_CMccRtpDataSource::SetupL()
       
    87     {
       
    88     iEventHandler = CMccTestEventHandler::NewL();
       
    89     iRtpApi = CRtpAPI::NewL( *iEventHandler );
       
    90     TUid dummyUid( TUid::Uid( 42 ) ); 
       
    91     TBuf8<5> dummyBuf( _L8( "foo" ) );
       
    92     iSource = static_cast<CMccRtpDataSource*>(
       
    93         CMccRtpDataSource::NewSourceL( dummyUid, dummyBuf ) );
       
    94     
       
    95     TMccRtpSourceSetting setting;
       
    96     setting.iStandByTimerValue = 3000;   
       
    97     TMccRtpSourceSettingBuf settingBuf( setting );
       
    98     iSource->ConstructSourceL( settingBuf );
       
    99     
       
   100     MAsyncEventHandler* eventHandler = NULL;
       
   101     TRtpId rtpSessionId(0);
       
   102     iRtpKeepaliveMechanism = 
       
   103         CMccRtpKeepaliveContainer::NewL( *eventHandler, 
       
   104                                          *iRtpApi, 
       
   105                                          rtpSessionId ); 
       
   106                                          
       
   107     } 
       
   108 
       
   109 void UT_CMccRtpDataSource::Teardown()
       
   110     {
       
   111     delete iRtpKeepaliveMechanism;
       
   112     
       
   113     if ( iSource )
       
   114         {
       
   115         delete iSource;
       
   116         iSource = NULL;
       
   117         }
       
   118     if ( iSecSession)
       
   119     	{
       
   120     	delete iSecSession;
       
   121 		iSecSession = NULL;
       
   122     	}
       
   123 
       
   124     if ( iRtpApi )
       
   125         {
       
   126         delete iRtpApi;
       
   127         iRtpApi = NULL;
       
   128         }
       
   129         
       
   130     delete iEventHandler;
       
   131     }
       
   132 
       
   133 
       
   134 // HELPER FUNCTIONS
       
   135 
       
   136 void UT_CMccRtpDataSource::InitializeL( TBool aCreateStream, TBool aEnableRtcp )
       
   137     {
       
   138     iSource->SourceThreadLogon( *iEventHandler );
       
   139     
       
   140     RArray<TUint> payloads;
       
   141     CleanupClosePushL( payloads );
       
   142     payloads.AppendL( KDefaultAmrNbPT );
       
   143     payloads.AppendL( KPcmuPayloadType );
       
   144     iSource->RegisterPayloadTypesL( payloads );
       
   145     CleanupStack::PopAndDestroy( &payloads );
       
   146 
       
   147     TMccRtpSessionParams params;
       
   148     params.iRtpAPI = iRtpApi;
       
   149     params.iSessionId = iSession;
       
   150     params.iEnableRTCP = aEnableRtcp;
       
   151     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   152     EUNIT_ASSERT_NO_LEAVE( iSource->SetSessionParamsL( params ) );
       
   153 
       
   154     if ( aCreateStream )
       
   155         {
       
   156         CreateStreamL();
       
   157         }
       
   158     }
       
   159 
       
   160 void UT_CMccRtpDataSource::CreateStreamL()
       
   161     {
       
   162     TMccCodecInfo cInfo;
       
   163     cInfo.iType = KUidMediaTypeAudio;
       
   164     cInfo.iFourCC = TFourCC( ' ','A','M','R' );
       
   165     cInfo.iBitrate = 8000;
       
   166     cInfo.iPayloadType = KDefaultAmrNbPT;
       
   167     TMccCodecInfoBuffer cInfoBuf( cInfo );
       
   168     EUNIT_ASSERT_NO_LEAVE( iSource->ConfigureL( cInfoBuf ) );
       
   169     }
       
   170     
       
   171 // TEST FUNCTIONS
       
   172 
       
   173 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_RtpPacketReceivedL()
       
   174     {
       
   175     TRtpId stream( 0 );
       
   176     TRtpId wrongStream( 99 );
       
   177     TRtpRecvHeader header;
       
   178     TBuf8<5> data;
       
   179     data.Format( _L8( "foo42" ) );
       
   180     iSource->SourceThreadLogon( *iEventHandler );
       
   181 
       
   182     CMMFBuffer* buffer = CMMFDescriptorBuffer::NewL(10);
       
   183     CleanupStack::PushL( buffer );    
       
   184     CAmrPayloadFormatRead* amrPfRead = CAmrPayloadFormatRead::NewL( NULL );
       
   185     CleanupStack::PushL( amrPfRead );
       
   186     
       
   187     header.iPayloadType = KPcmuPayloadType;    
       
   188     RArray<TUint> payloads;
       
   189     CleanupClosePushL( payloads );
       
   190     payloads.AppendL( KDefaultAmrNbPT );
       
   191     payloads.AppendL( KPcmuPayloadType );
       
   192     iSource->RegisterPayloadTypesL( payloads );
       
   193     CleanupStack::PopAndDestroy( &payloads );
       
   194     
       
   195     // Wrong stream
       
   196     iSource->FillBufferL( buffer, amrPfRead, TMediaId() );
       
   197     iSource->RtpPacketReceived( wrongStream, header, data );
       
   198 
       
   199     TMccRtpSessionParams params;
       
   200     params.iRtpAPI = iRtpApi;
       
   201     params.iSessionId = iSession;
       
   202     params.iEnableRTCP = EFalse;
       
   203     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   204     EUNIT_ASSERT_NO_LEAVE( iSource->SetSessionParamsL( params ) );
       
   205 
       
   206     TMccCodecInfo cInfo;
       
   207     cInfo.iFourCC = TFourCC( ' ','A','M','R' );
       
   208     cInfo.iBitrate = 8000;
       
   209     cInfo.iPayloadType = KDefaultAmrNbPT;
       
   210     TMccCodecInfoBuffer cInfoBuf( cInfo );
       
   211     
       
   212     EUNIT_ASSERT_NO_LEAVE( iSource->ConfigureL( cInfoBuf ) );
       
   213     //iSource->NegotiateSourceL( *iEventHandler );
       
   214     EUNIT_ASSERT_NO_LEAVE( iSource->NegotiateSourceL( *amrPfRead ) );
       
   215     EUNIT_ASSERT_NO_LEAVE( iSource->SourcePrimeL() );
       
   216     EUNIT_ASSERT_NO_LEAVE( iSource->SourcePlayL() );
       
   217 
       
   218     stream = 2; // This is what the RtpAPI stub gives
       
   219     header.iPayloadType = KDefaultAmrNbPT;
       
   220     
       
   221     EUNIT_ASSERT_EQUALS( iSource->iTimeoutTime, 0 );
       
   222     iSource->FillBufferL( buffer, amrPfRead, TMediaId() );
       
   223     iSource->RtpPacketReceived( stream, header, data );
       
   224     EUNIT_ASSERT_EQUALS( iSource->iTimeoutTime, 0 );
       
   225     EUNIT_ASSERT_EQUALS( iSource->iInactivityTimerId, KMaxTUint32 );
       
   226     
       
   227     // Inactivity timer is activated when receiving packet
       
   228     MCC_EUNIT_ASSERT_NO_LEAVE( iSource->StartInactivityTimerL( 500000 ) );
       
   229     iSource->RtpPacketReceived( stream, header, data );
       
   230     EUNIT_ASSERT_EQUALS( iSource->iTimeoutTime, 500000 );
       
   231     EUNIT_ASSERT( iSource->iInactivityTimerId != KMaxTUint32 );
       
   232 
       
   233     // Jitter observing is active
       
   234     iSource->iJitCalc->iMediaQualityObservingStarted = ETrue;
       
   235     iSource->RtpPacketReceived( stream, header, data );
       
   236     
       
   237     // Sink not ready, error ignored silently
       
   238     iEventHandler->iLastEvent.iEventType = KMccEventNone;
       
   239     iSource->iFillBufferRequester = NULL;
       
   240     iSource->RtpPacketReceived( stream, header, data );
       
   241     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccEventNone );
       
   242     
       
   243     // secure key expired, error ignored silently
       
   244     iSource->iSecureKeyExpired = ETrue;
       
   245     iSource->RtpPacketReceived( stream, header, data );
       
   246     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccEventNone );
       
   247     
       
   248     CleanupStack::PopAndDestroy( amrPfRead );
       
   249     CleanupStack::PopAndDestroy( buffer );
       
   250     iSource->SourceThreadLogoff();
       
   251     }
       
   252 
       
   253 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_StartInactivityTimerLL()
       
   254     {
       
   255     TUint32 time( 0 );
       
   256     
       
   257     // Invalid time
       
   258     EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->StartInactivityTimerL( time ), KErrArgument );
       
   259 
       
   260     time = 5000;
       
   261 
       
   262     // Ok
       
   263     MCC_EUNIT_ASSERT_NO_LEAVE( iSource->StartInactivityTimerL( time ) );
       
   264     }
       
   265 
       
   266 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_StopInactivityTimerLL()
       
   267     {
       
   268     // No timer exists
       
   269     EUNIT_ASSERT_NO_LEAVE( iSource->StopInactivityTimerL() );
       
   270 
       
   271     TUint32 time( 5000 );
       
   272     iSource->StartInactivityTimerL( time );
       
   273 
       
   274     // OK
       
   275     EUNIT_ASSERT_NO_LEAVE( iSource->StopInactivityTimerL() );
       
   276     }
       
   277 
       
   278 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SendMediaSignallingLL()
       
   279     {
       
   280     iSource->iEnableRtcp = ETrue;
       
   281     TMccEvent foo;
       
   282     UT_CMccRtpInterface::CreateRtcpEvent( foo );
       
   283     
       
   284     EUNIT_ASSERT_LEAVE( iSource->SendMediaSignallingL( foo ) );
       
   285     
       
   286     // No RtpApi
       
   287     foo.iEventCategory = KMccEventCategoryRtcp;
       
   288     foo.iEventType = KMccRtcpControl;
       
   289     TMccRtcpEventData eventData;
       
   290     eventData.iRtcpPacketType = KRtcpRrPacket;
       
   291     TMccRtcpEventDataPackage eventDataPkg( eventData );
       
   292     foo.iEventData.Copy( eventDataPkg );
       
   293     EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->SendMediaSignallingL( foo ), KErrNotReady );
       
   294     
       
   295     // Rr, stream does not exist
       
   296     InitializeL( EFalse, ETrue );
       
   297     EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->SendMediaSignallingL( foo ), KErrNotReady );
       
   298     
       
   299     // Stream exists
       
   300     CreateStreamL();
       
   301     EUNIT_ASSERT_NO_LEAVE( iSource->SendMediaSignallingL( foo ) );
       
   302     
       
   303     // Sr
       
   304     eventData.iRtcpPacketType = KRtcpSrPacket;
       
   305     eventDataPkg = eventData;
       
   306     foo.iEventData.Copy( eventDataPkg );
       
   307     EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->SendMediaSignallingL( foo ), KErrArgument );
       
   308     }
       
   309 
       
   310 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SourceDataTypeCodeL()
       
   311     {
       
   312     TMediaId mediaId( KUidMediaTypeVideo );
       
   313     EUNIT_ASSERT_EQUALS( iSource->SourceDataTypeCode( mediaId ), TFourCC() );
       
   314 
       
   315     iSource->SourceThreadLogoff();
       
   316     TFourCC codec( ' ','A','M','R' );
       
   317     TMediaId media2( KUidMediaTypeAudio );
       
   318     iSource->SetSourceDataTypeCode( codec, media2 );
       
   319 
       
   320     // The codecs SHOULD be equal
       
   321     EUNIT_ASSERT_EQUALS( iSource->SourceDataTypeCode( media2 ), codec );
       
   322     }
       
   323 
       
   324 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SetSourceDataTypeCodeL()
       
   325     {
       
   326     TFourCC codec;
       
   327     TMediaId media( KUidMediaTypeVideo ); // wrong media type
       
   328 
       
   329     EUNIT_ASSERT_EQUALS( iSource->SetSourceDataTypeCode( codec, media ), KErrNone );
       
   330 
       
   331     // Set the correct media type
       
   332     TMediaId media2( KUidMediaTypeAudio );
       
   333     EUNIT_ASSERT_EQUALS( iSource->SetSourceDataTypeCode( codec, media2 ), KErrNone );
       
   334     }
       
   335 
       
   336 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_BufferEmptiedLL()
       
   337     {
       
   338     EUNIT_ASSERT_LEAVE( iSource->BufferEmptiedL( NULL ) );
       
   339     }
       
   340 
       
   341 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_CanCreateSourceBufferL()
       
   342     {
       
   343     EUNIT_ASSERT_EQUALS( iSource->CanCreateSourceBuffer(), EFalse );
       
   344     }
       
   345 
       
   346 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_CreateSourceBufferLL()
       
   347     {
       
   348     TMediaId dummyId;
       
   349     TBool dummyBool;
       
   350     EUNIT_ASSERT_LEAVE( iSource->CreateSourceBufferL( dummyId, dummyBool ) );
       
   351     }
       
   352 
       
   353 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SourceThreadLogonL()
       
   354     {
       
   355     iSource->SourceThreadLogon( *iEventHandler );
       
   356     iSource->SourceThreadLogon( *iEventHandler );
       
   357     iSource->SourceThreadLogoff();
       
   358     }
       
   359 
       
   360 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SourceThreadLogoffL()
       
   361     {
       
   362     iSource->SourceThreadLogoff();
       
   363 
       
   364     // Reach more branches
       
   365     TMccRtpSessionParams params;
       
   366     params.iRtpAPI = iRtpApi;
       
   367     params.iSessionId = iSession;
       
   368     params.iEnableRTCP = EFalse;
       
   369     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   370     EUNIT_ASSERT_NO_LEAVE( iSource->SetSessionParamsL( params ) );
       
   371 
       
   372     TMccCodecInfo cInfo;
       
   373     cInfo.iFourCC = TFourCC( ' ','A','M','R' );
       
   374     cInfo.iBitrate = 8000;
       
   375     cInfo.iPayloadType = KDefaultAmrNbPT;
       
   376     TMccCodecInfoBuffer cInfoBuf( cInfo );
       
   377     
       
   378     EUNIT_ASSERT_NO_LEAVE( iSource->ConfigureL( cInfoBuf ) );
       
   379 
       
   380     MCC_EUNIT_ASSERT_EQUALS( iSource->SourceThreadLogon( *iEventHandler ), KErrNone );
       
   381     EUNIT_ASSERT_NO_LEAVE( iSource->SourcePrimeL() );
       
   382 
       
   383     iSource->SourceThreadLogoff();
       
   384 
       
   385     }
       
   386 
       
   387 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SourcePrimeLL()
       
   388     {
       
   389     // Ok
       
   390     TMccRtpSessionParams params;
       
   391     params.iRtpAPI = iRtpApi;
       
   392     params.iSessionId = iSession;
       
   393     params.iEnableRTCP = EFalse;
       
   394     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   395     EUNIT_ASSERT_NO_LEAVE( iSource->SetSessionParamsL( params ) );
       
   396 
       
   397     TMccCodecInfo cInfo;
       
   398     cInfo.iFourCC = TFourCC( ' ','A','M','R' );
       
   399     cInfo.iBitrate = 8000;
       
   400     cInfo.iPayloadType = KDefaultAmrNbPT;
       
   401     TMccCodecInfoBuffer cInfoBuf( cInfo );
       
   402     
       
   403     EUNIT_ASSERT_NO_LEAVE( iSource->ConfigureL( cInfoBuf ) );
       
   404 
       
   405     MCC_EUNIT_ASSERT_EQUALS( iSource->SourceThreadLogon( *iEventHandler ), KErrNone );
       
   406     EUNIT_ASSERT_NO_LEAVE( iSource->SourcePrimeL() );
       
   407     
       
   408     iSource->SourceThreadLogoff();
       
   409     }
       
   410 
       
   411 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SourcePlayLL()
       
   412     {
       
   413     // Not logged on
       
   414     EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->SourcePlayL(), KErrNotFound );
       
   415     
       
   416     // Not allowed if not yet prepared
       
   417     InitializeL();
       
   418     EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->SourcePlayL(), KErrNotReady );
       
   419     
       
   420     // Ok when already prepared
       
   421     iSource->iState = MMccRtpInterface::ERtpStatePrimed;
       
   422     
       
   423     EUNIT_ASSERT_NO_LEAVE( iSource->SourcePlayL() );
       
   424     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccStreamStarted );
       
   425     
       
   426     // Resuming
       
   427     iSource->iState = MMccRtpInterface::ERtpStatePaused; 
       
   428     EUNIT_ASSERT_NO_LEAVE( iSource->SourcePlayL() );
       
   429     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccStreamResumed );
       
   430     EUNIT_ASSERT( iRtpKeepaliveMechanism->iStopped == EFalse )
       
   431     
       
   432     // State downgrade is ignored
       
   433     EUNIT_ASSERT_NO_LEAVE( iSource->SourcePrimeL() );
       
   434     EUNIT_ASSERT( MMccRtpInterface::ERtpStatePlaying == iSource->State() );
       
   435     
       
   436     // "Secure session"
       
   437     iRtpKeepaliveMechanism->iStopped = ETrue;
       
   438     TInt fakeSecSession( 3 );
       
   439     iSource->iSecSession = reinterpret_cast<CSRTPSession*>( &fakeSecSession );
       
   440     EUNIT_ASSERT_NO_LEAVE( iSource->SourcePlayL() );
       
   441     EUNIT_ASSERT( iRtpKeepaliveMechanism->iStopped == ETrue )
       
   442     iSource->iSecSession = NULL;
       
   443     }
       
   444 
       
   445 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SourcePauseLL()
       
   446     {
       
   447     EUNIT_ASSERT_LEAVE( iSource->SourcePauseL() );
       
   448     }
       
   449 
       
   450 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SourceStopLL()
       
   451     {
       
   452     EUNIT_ASSERT_NO_LEAVE( iSource->SourceStopL() );
       
   453     }
       
   454 
       
   455 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_FillBufferLL()
       
   456     {
       
   457     EUNIT_ASSERT_NO_LEAVE( iSource->FillBufferL( NULL, NULL, TMediaId() ) );
       
   458     CMMFDataBuffer* buffer = CMMFDataBuffer::NewL( 100 );
       
   459     CleanupStack::PushL( buffer );
       
   460     EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->FillBufferL( buffer, NULL, TMediaId() ), KErrArgument );
       
   461     CleanupStack::PopAndDestroy( buffer );
       
   462     }
       
   463 
       
   464 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SendRTCPReceiverReportL()
       
   465     {
       
   466     // No RTP API set
       
   467     EUNIT_ASSERT_EQUALS( iSource->SendRTCPReceiverReport(), KErrNotReady );
       
   468 
       
   469     TMccRtpSessionParams params;
       
   470     params.iRtpAPI = iRtpApi;
       
   471     params.iSessionId = iSession;
       
   472     params.iEnableRTCP = EFalse;
       
   473     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   474     iSource->SetSessionParamsL( params );
       
   475 
       
   476 
       
   477     // Ok
       
   478     iSource->iRtpStreamId = 1; // the iStreamID must not be empty
       
   479     EUNIT_ASSERT_EQUALS( iSource->SendRTCPReceiverReport(), KErrNone );
       
   480     }
       
   481 
       
   482 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SendRTCPSenderReportL()
       
   483     {
       
   484     // No RTP API set
       
   485     EUNIT_ASSERT_EQUALS( iSource->SendRTCPSenderReport(), KErrNotReady );
       
   486 
       
   487     TMccRtpSessionParams params;
       
   488     params.iRtpAPI = iRtpApi;
       
   489     params.iSessionId = iSession;
       
   490     params.iEnableRTCP = EFalse;
       
   491     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   492     iSource->SetSessionParamsL( params );
       
   493 
       
   494     // Ok
       
   495     iSource->iRtpStreamId = 1; // the iStreamID must not be empty
       
   496     EUNIT_ASSERT_EQUALS( iSource->SendRTCPSenderReport(), KErrNone );
       
   497     }
       
   498 
       
   499 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SendRTCPDataLL()
       
   500     {
       
   501     TBuf8<5> dummy;
       
   502     EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->SendRTCPDataL( dummy ), KErrNotSupported );
       
   503     }
       
   504 
       
   505 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_NegotiateSourceLL()
       
   506     {
       
   507     // wrong codec
       
   508     EUNIT_ASSERT_NO_LEAVE( iSource->NegotiateSourceL( *this ) );
       
   509 
       
   510     // Reach more branches
       
   511     TMccRtpSessionParams params;
       
   512     params.iRtpAPI = iRtpApi;
       
   513     params.iSessionId = iSession;
       
   514     params.iEnableRTCP = EFalse;
       
   515     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   516     EUNIT_ASSERT_NO_LEAVE( iSource->SetSessionParamsL( params ) );
       
   517 
       
   518     TMccCodecInfo cInfo;
       
   519     cInfo.iFourCC = TFourCC( ' ','A','M','R' );
       
   520     cInfo.iBitrate = 8000;
       
   521     cInfo.iPayloadType = KDefaultAmrNbPT;
       
   522     TMccCodecInfoBuffer cInfoBuf( cInfo );
       
   523     
       
   524     EUNIT_ASSERT_NO_LEAVE( iSource->ConfigureL( cInfoBuf ) );
       
   525     MCC_EUNIT_ASSERT_EQUALS( iSource->SourceThreadLogon( *iEventHandler ), KErrNone );
       
   526     EUNIT_ASSERT_NO_LEAVE( iSource->SourcePrimeL() );
       
   527 
       
   528     EUNIT_ASSERT_NO_LEAVE( iSource->NegotiateSourceL( *this ) );
       
   529     iSource->SourceThreadLogoff();
       
   530     }
       
   531 
       
   532 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_ConstructSourceLL()
       
   533     {
       
   534     TUid dummyUid( TUid::Uid( 42 ) ); 
       
   535     TBuf8<5> dummyBuf( _L8( "foo" ) );
       
   536     CMccRtpDataSource* source = static_cast<CMccRtpDataSource*>(
       
   537         CMccRtpDataSource::NewSourceL( dummyUid, dummyBuf ) );
       
   538     CleanupStack::PushL( source );
       
   539     MCC_EUNIT_ASSERT_NO_LEAVE( source->ConstructSourceL( KNullDesC8 ) );
       
   540     CleanupStack::PopAndDestroy( source );
       
   541     }
       
   542 
       
   543 
       
   544 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_ValidatePacketL()
       
   545     {
       
   546     TRtpId streamId( KNullId );
       
   547     TRtpRecvHeader header;
       
   548 
       
   549     TBuf8<5> data5;
       
   550     TBuf8<15> data15;
       
   551     data5.Format( _L8( "foo42" ) );
       
   552     data15.Format( _L8( "foo42foo42foo42" ) );
       
   553 
       
   554     // Data too big, stream ok, wrong payload type
       
   555     EUNIT_ASSERT_LEAVE( iSource->ValidatePacketL( streamId, header, data15 ) );
       
   556 
       
   557     // Data ok, stream ok, wrong payload type
       
   558     EUNIT_ASSERT_LEAVE( iSource->ValidatePacketL( streamId, header, data5 ) );
       
   559 
       
   560     header.iPayloadType = KMccPayloadTypeMax;
       
   561 
       
   562     // header not OK
       
   563     CMMFDataBuffer* buffer = CMMFDataBuffer::NewL(10);
       
   564     CleanupStack::PushL( buffer );
       
   565     iSource->iBufferToFill = buffer;
       
   566     EUNIT_ASSERT_LEAVE( iSource->ValidatePacketL( streamId, header, data5 ) );
       
   567     
       
   568     // Get a new source
       
   569     //Teardown();
       
   570     if( iRtpKeepaliveMechanism )
       
   571     	{
       
   572     	delete iRtpKeepaliveMechanism;
       
   573     	iRtpKeepaliveMechanism = NULL;
       
   574     	}
       
   575     
       
   576     if ( iSource )
       
   577         {
       
   578         delete iSource;
       
   579         iSource = NULL;
       
   580         }
       
   581     //SetupL();
       
   582     TUid dummyUid( TUid::Uid( 42 ) ); 
       
   583     TBuf8<5> dummyBuf( _L8( "foo" ) );
       
   584     iSource = static_cast<CMccRtpDataSource*>(
       
   585         CMccRtpDataSource::NewSourceL( dummyUid, dummyBuf ) );
       
   586     
       
   587     TMccRtpSourceSetting setting;
       
   588     setting.iStandByTimerValue = 3000;   
       
   589     TMccRtpSourceSettingBuf settingBuf( setting );
       
   590     iSource->ConstructSourceL( settingBuf );
       
   591     
       
   592     MAsyncEventHandler* eventHandler = NULL;
       
   593     TRtpId rtpSessionId(0);
       
   594     iRtpKeepaliveMechanism = 
       
   595         CMccRtpKeepaliveContainer::NewL( *eventHandler, 
       
   596                                          *iRtpApi, 
       
   597                                          rtpSessionId ); 
       
   598 
       
   599     TMccRtpSessionParams params;
       
   600     params.iRtpAPI = iRtpApi;
       
   601     params.iSessionId = iSession;
       
   602     params.iEnableRTCP = EFalse;
       
   603     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   604     EUNIT_ASSERT_NO_LEAVE( iSource->SetSessionParamsL( params ) );
       
   605 
       
   606     TMccCodecInfo cInfo;
       
   607     cInfo.iFourCC = TFourCC( KMccFourCCIdG711 );
       
   608     cInfo.iEnableDTX = ETrue;
       
   609     TMccCodecInfoBuffer cInfoBuf( cInfo );
       
   610     EUNIT_ASSERT_NO_LEAVE( iSource->ConfigureL( cInfoBuf ) );
       
   611 
       
   612     header.iPayloadType = KPcmuPayloadType;
       
   613 
       
   614     // Data ok, stream ok, payload type ok    
       
   615     CAmrPayloadFormatRead* amrPfRead = CAmrPayloadFormatRead::NewL( NULL );
       
   616     CleanupStack::PushL( amrPfRead );
       
   617     
       
   618     RArray<TUint> payloads;
       
   619     CleanupClosePushL( payloads );
       
   620     payloads.AppendL( KPcmuPayloadType );
       
   621     iSource->RegisterPayloadTypesL( payloads );
       
   622     iSource->FillBufferL( buffer, amrPfRead, TMediaId() );
       
   623     EUNIT_ASSERT_NO_LEAVE( iSource->ValidatePacketL( streamId, header, data5 ) );
       
   624     CleanupStack::PopAndDestroy( &payloads );
       
   625     CleanupStack::PopAndDestroy( amrPfRead );
       
   626     CleanupStack::PopAndDestroy( buffer );
       
   627     
       
   628     }
       
   629 
       
   630 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_CreateStreamLL()
       
   631     {
       
   632     TMccRtpSessionParams params;
       
   633     params.iRtpAPI = iRtpApi;
       
   634     params.iSessionId = iSession;
       
   635     params.iEnableRTCP = ETrue;
       
   636     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   637     EUNIT_ASSERT_NO_LEAVE( iSource->SetSessionParamsL( params ) );
       
   638 
       
   639     TMccCodecInfo cInfo;
       
   640     TMccCodecInfoBuffer cInfoBuf( cInfo );
       
   641     
       
   642     EUNIT_ASSERT_NO_LEAVE( iSource->ConfigureL( cInfoBuf ) );
       
   643 
       
   644     // Get a new Source
       
   645     Teardown();
       
   646     SetupL();
       
   647 
       
   648     // This should leave because the string is too short
       
   649     TBuf8<5> dummy;
       
   650     dummy.Format( _L8( "foo42" ) );
       
   651     EUNIT_ASSERT_NO_LEAVE( iSource->SetSessionParamsL( params ) );
       
   652     EUNIT_ASSERT_LEAVE( iSource->ConfigureL( dummy ) );
       
   653 
       
   654     // Get a new Source
       
   655     Teardown();
       
   656     SetupL();
       
   657 
       
   658     TMccRtpSessionParams params2;
       
   659     params2.iRtpAPI = iRtpApi;
       
   660     params2.iSessionId = iSession;
       
   661     params2.iEnableRTCP = EFalse;
       
   662     params2.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   663     iSource->SetSessionParamsL( params2 );
       
   664     
       
   665     TMccCodecInfo cInfo2;
       
   666     cInfo2.iFourCC = TFourCC( KMccFourCCIdG711 );
       
   667     cInfo2.iEnableDTX = ETrue;
       
   668     cInfo2.iRedundantPayload = 97;
       
   669     cInfo2.iRedundancyCount = 1;
       
   670     cInfo2.iAlgoUsed = EGenRedUsed;
       
   671     TMccCodecInfoBuffer cInfoBuf2( cInfo2 );
       
   672 
       
   673     EUNIT_ASSERT_NO_LEAVE( iSource->ConfigureL( cInfoBuf2 ) );
       
   674     }
       
   675 
       
   676 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_DoCreateSrtpStreamL()
       
   677     {
       
   678     // Rtp stream not created
       
   679     iSource->iRtpStreamId = KNullId;
       
   680     EUNIT_ASSERT_NO_LEAVE( iSource->DoCreateSrtpStreamL() );
       
   681     }
       
   682          
       
   683 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_TestSendEventL()
       
   684     {
       
   685     iSource->SourceThreadLogon( *iEventHandler );
       
   686     
       
   687     // No target payload
       
   688     iSource->SendStreamEventToClient( KMccStreamPaused, KErrNone, KMccPTNotDefined );
       
   689     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccStreamPaused );
       
   690     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventNumData, 0 );
       
   691     
       
   692     // Target payload
       
   693     iSource->SendStreamEventToClient( KMccStreamResumed, KErrNone, 100 );
       
   694     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccStreamResumed );
       
   695     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventNumData, KMccPayloadSpecificEvent );
       
   696     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iReserved, 100 );
       
   697     
       
   698     // No event handler
       
   699     iSource->iEventHandler = NULL;
       
   700     iSource->SendStreamEventToClient( KMccStreamStopped, KErrNone, KMccPTNotDefined );
       
   701     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccStreamResumed );
       
   702     
       
   703     // Jitter event when no event handler
       
   704     TMccRtpEventData eventData;
       
   705     iSource->SendJitterEvent( eventData, KErrNone );
       
   706     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccStreamResumed );
       
   707 
       
   708     // Event handler exists
       
   709     iSource->iEventHandler = iEventHandler;
       
   710     iSource->SendJitterEvent( eventData, KErrNone );
       
   711     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccMediaQualityStatus );
       
   712     }
       
   713          
       
   714 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_StandbyL()
       
   715     {
       
   716     EUNIT_ASSERT_EQUALS( iSource->StandBy( EForceStandby, 100 ), KErrNotFound );
       
   717     
       
   718     // Standby force when properly initialized
       
   719     InitializeL();
       
   720    
       
   721     EUNIT_ASSERT_EQUALS( iSource->iUsers.Count(), 2 );
       
   722     EUNIT_ASSERT_EQUALS( iSource->StandBy( EForceStandby, KPcmuPayloadType ), KErrNone );
       
   723     iSource->iState = MMccRtpInterface::ERtpStatePlaying;
       
   724     EUNIT_ASSERT_EQUALS( iSource->StandBy( EForceStandby, KPcmuPayloadType ), KErrNone );
       
   725     EUNIT_ASSERT( iSource->iUsers[ 0 ].iStandbyState == EInactive );
       
   726     
       
   727     // Test activation when already inactive
       
   728     EUNIT_ASSERT_EQUALS( iSource->StandBy( EActivateStandby, KPcmuPayloadType ), KErrNone );
       
   729     EUNIT_ASSERT( iSource->iUsers[ 0 ].iStandbyState == EInactive );
       
   730     
       
   731     // Test activation when activating
       
   732     iSource->iUsers[ 0 ].iStandbyState = EActivating;
       
   733     EUNIT_ASSERT_EQUALS( iSource->StandBy( EActivateStandby, KPcmuPayloadType ), KErrNone );
       
   734     EUNIT_ASSERT( iSource->iUsers[ 0 ].iStandbyState == EActivating );
       
   735     
       
   736     // Test activation when inactive
       
   737     iSource->iUsers[ 0 ].iStandbyState = EActive;
       
   738     EUNIT_ASSERT_EQUALS( iSource->StandBy( EActivateStandby, KPcmuPayloadType ), KErrNone );
       
   739     EUNIT_ASSERT( iSource->iUsers[ 0 ].iStandbyState == EInactive );
       
   740     
       
   741     // Test deactivation
       
   742     EUNIT_ASSERT_EQUALS( iSource->StandBy( EDeactivateStandby, KPcmuPayloadType ), KErrNone );
       
   743     EUNIT_ASSERT( iSource->iUsers[ 0 ].iStandbyState == ETurnedOff );
       
   744     
       
   745     // Test activation when standby is turned off (timer expires)
       
   746     iSource->iUsers[ 0 ].iTimerId = 2;
       
   747     EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->TimerExpiredL( 2, NULL ), KErrNotSupported );
       
   748     
       
   749     // Test timer expiration for inactivity
       
   750     iSource->iInactivityTimerId = 3;
       
   751     iSource->TimerExpiredL( 3, NULL );
       
   752     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccInactivityEvent );
       
   753     }
       
   754          
       
   755 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SourceCustomCommandL()
       
   756     {
       
   757     // A bit hard to test
       
   758     EUNIT_ASSERT( ETrue );
       
   759     }
       
   760     
       
   761 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_TestBaseClassL()
       
   762     {
       
   763     // Test some base class functions which are hard to test by other means
       
   764     
       
   765     // Internal event to all clients (no users)
       
   766     iSource->SendInternalRtpEventToAllClients( 
       
   767         iSource->iUsers, KMccRtpSourceUid, EMccInternalEventNone, KMccStreamError, 0, KErrGeneral );
       
   768     
       
   769     // Users exist
       
   770     InitializeL();
       
   771     
       
   772     iSource->SendInternalRtpEventToAllClients( 
       
   773         iSource->iUsers, KMccRtpSourceUid, EMccInternalEventNone, KMccStreamError, 0, KErrGeneral );
       
   774     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccStreamError );
       
   775     
       
   776     // Secure events
       
   777     iSource->SendSecureRtpEventToClient( 
       
   778         NULL, KMccRtpSourceUid, EMccInternalEventNone, KMccStreamPaused, 0 );
       
   779     iSource->SendSecureRtpEventToClient( 
       
   780         iEventHandler, KMccRtpSourceUid, EMccInternalEventNone, KMccStreamPaused, 0 );
       
   781     EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccStreamPaused );
       
   782     }
       
   783     
       
   784 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_DoStandbyDecisionL()
       
   785     {
       
   786     // Standby not enabled
       
   787     iSource->DoStandByDecision( NULL );
       
   788     
       
   789     // Standby enabled
       
   790     InitializeL();
       
   791     iSource->DoStandByDecision( &iSource->iUsers[ 0 ] );
       
   792     EUNIT_ASSERT( iSource->iUsers[ 0 ].iStandbyState == EActive );
       
   793     }
       
   794     
       
   795 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_RegisterPayloadTypesLL()
       
   796     {
       
   797     RArray<TUint> payloads;
       
   798     CleanupClosePushL( payloads );
       
   799     payloads.AppendL( KPcmuPayloadType );
       
   800     payloads.AppendL( KDefaultAmrNbPT );
       
   801     iSource->RegisterPayloadTypesL( payloads );
       
   802     EUNIT_ASSERT_EQUALS( iSource->iUsers.Count(), 2 );
       
   803     
       
   804     // Do again, multiple entries are not created
       
   805     iSource->RegisterPayloadTypesL( payloads );
       
   806     EUNIT_ASSERT_EQUALS( iSource->iUsers.Count(), 2 );
       
   807 
       
   808     // Try to unregister not registered payload type
       
   809     RArray<TUint> payloads2;
       
   810     CleanupClosePushL( payloads2 );
       
   811     payloads2.AppendL( KPcmaPayloadType );
       
   812     iSource->UnRegisterPayloadTypes( payloads2 );
       
   813     EUNIT_ASSERT_EQUALS( iSource->iUsers.Count(), 2 );
       
   814     CleanupStack::PopAndDestroy( &payloads2 );
       
   815     
       
   816     // Unregister registered payload types
       
   817     iSource->UnRegisterPayloadTypes( payloads );
       
   818     EUNIT_ASSERT_EQUALS( iSource->iUsers.Count(), 0 );
       
   819     CleanupStack::PopAndDestroy( &payloads );
       
   820     }
       
   821 
       
   822 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SRTPMasterKeyStaleEvent1L()
       
   823 	{
       
   824 	//SetUp SecureSession
       
   825 	TInetAddr destination; 
       
   826 	destination.Input(_L("127.0.0.1") );
       
   827 	iSecSession = CSRTPSession::NewL( destination );
       
   828 	
       
   829 	//Set up MCCparams
       
   830 	TMccRtpSessionParams params;
       
   831     params.iRtpAPI = iRtpApi;
       
   832     params.iSecSession = iSecSession;
       
   833     params.iSessionId = iSession;
       
   834     params.iEnableRTCP = EFalse;
       
   835     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   836     EUNIT_ASSERT_NO_LEAVE( iSource->SetSessionParamsL( params ) );
       
   837     iSource->SourceThreadLogon( *iEventHandler );
       
   838     
       
   839 	iSource->SRTPMasterKeyStaleEvent( *iSecSession );
       
   840 	EUNIT_ASSERT( iSource->iSecureKeyExpired );
       
   841 	EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccMasterKeyStaled );
       
   842     EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->SourcePlayL(), KErrGeneral );
       
   843     }
       
   844     
       
   845 void UT_CMccRtpDataSource::UT_CMccRtpDataSource_SRTPMasterKeyStaleEvent2L()
       
   846 	{
       
   847 	//SetUp SecureSession
       
   848 	TInetAddr destination; 
       
   849 	destination.Input(_L("127.0.0.1") );
       
   850 	iSecSession = CSRTPSession::NewL( destination );
       
   851 	
       
   852 	//Set up Secure Stream
       
   853 	//Secure Context
       
   854 	
       
   855 	HBufC8* masterKey = HBufC8::NewL(KRFC3711_TestMasterKey128bits().Length());
       
   856     CleanupStack::PushL( masterKey );
       
   857     *masterKey = KRFC3711_TestMasterKey128bits;
       
   858     
       
   859     HBufC8* masterSalt =HBufC8::NewL(KRFC3711_TestMasterSalt112bits().Length());
       
   860     CleanupStack::PushL( masterSalt );
       
   861 	*masterSalt = KRFC3711_TestMasterSalt112bits;
       
   862 	
       
   863 	
       
   864 	HBufC8* mki =HBufC8::NewL(KTestMKI128Bits().Length());
       
   865     CleanupStack::PushL( mki );
       
   866 	*mki = KTestMKI128Bits;
       
   867 	//Hex(*mki);
       
   868 	
       
   869 	CSRTPMasterKey* mKey = CSRTPMasterKey::NewL( *masterKey, *mki );
       
   870 	CleanupStack::PushL( mKey );
       
   871     CSRTPMasterSalt* saltKey = CSRTPMasterSalt::NewL( *masterSalt );
       
   872     CleanupStack::PushL( saltKey );
       
   873     
       
   874     TSrtpCryptoParams srtpParams;
       
   875     CSRTPCryptoContext* context = CSRTPCryptoContext::NewL(mKey, saltKey, srtpParams );
       
   876     CleanupStack::Pop( saltKey );
       
   877     CleanupStack::Pop( mKey );
       
   878 
       
   879     CleanupStack::PopAndDestroy( mki );
       
   880     CleanupStack::PopAndDestroy( masterSalt );
       
   881     CleanupStack::PopAndDestroy( masterKey ); 
       
   882     
       
   883     CleanupStack::PushL( context );
       
   884 	
       
   885 	CSRTPStreamIn* srtpStream = CSRTPStreamIn::NewL( *iSecSession, context, *iSource );
       
   886 	CleanupStack::Pop( context );
       
   887 	CleanupStack::PushL( srtpStream );
       
   888 	
       
   889 	//Set up MCCparams
       
   890 	TMccRtpSessionParams params;
       
   891     params.iRtpAPI = iRtpApi;
       
   892     params.iSecSession = iSecSession;
       
   893     params.iSessionId = iSession;
       
   894     params.iEnableRTCP = EFalse;
       
   895     
       
   896     params.iRtpKeepalive = iRtpKeepaliveMechanism;
       
   897     EUNIT_ASSERT_NO_LEAVE( iSource->SetSessionParamsL( params ) );
       
   898     iSource->SourceThreadLogon( *iEventHandler );
       
   899     //srtpStream is not equal
       
   900 	iSource->SRTPMasterKeyStaleEvent( *srtpStream );
       
   901 	EUNIT_ASSERT( !iSource->iSecureKeyExpired );
       
   902 	EUNIT_ASSERT_NOT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccMasterKeyStaled );
       
   903     //srtpStream is equal
       
   904     iSource->iSrtpStream = srtpStream;
       
   905     iSource->SRTPMasterKeyStaleEvent( *srtpStream );
       
   906 	EUNIT_ASSERT( iSource->iSecureKeyExpired );
       
   907 	EUNIT_ASSERT_EQUALS( iEventHandler->iLastEvent.iEventType, KMccMasterKeyStaled );
       
   908   	EUNIT_ASSERT_SPECIFIC_LEAVE( iSource->SourcePlayL(), KErrGeneral );
       
   909   	CleanupStack::Pop( srtpStream );
       
   910     }	
       
   911 	
       
   912 //  TEST TABLE
       
   913 
       
   914 EUNIT_BEGIN_TEST_TABLE( 
       
   915     UT_CMccRtpDataSource,
       
   916     "CMccRtpDataSource",
       
   917     "UNIT" )
       
   918     
       
   919 EUNIT_TEST(
       
   920     "RtpPacketReceived - test ",
       
   921     "CMccRtpDataSource",
       
   922     "RtpPacketReceived",
       
   923     "FUNCTIONALITY",
       
   924     SetupL, UT_CMccRtpDataSource_RtpPacketReceivedL, Teardown)
       
   925 
       
   926 EUNIT_TEST(
       
   927     "StartInactivityTimerL - test ",
       
   928     "CMccRtpDataSource",
       
   929     "StartInactivityTimerL",
       
   930     "FUNCTIONALITY",
       
   931     SetupL, UT_CMccRtpDataSource_StartInactivityTimerLL, Teardown)
       
   932 
       
   933 EUNIT_TEST(
       
   934     "StopInactivityTimerL - test ",
       
   935     "CMccRtpDataSource",
       
   936     "StopInactivityTimerL",
       
   937     "FUNCTIONALITY",
       
   938     SetupL, UT_CMccRtpDataSource_StopInactivityTimerLL, Teardown)
       
   939 
       
   940 EUNIT_TEST(
       
   941     "SendMediaSignallingL - test ",
       
   942     "CMccRtpDataSource",
       
   943     "SendMediaSignallingL",
       
   944     "FUNCTIONALITY",
       
   945     SetupL, UT_CMccRtpDataSource_SendMediaSignallingLL, Teardown)
       
   946 
       
   947 EUNIT_TEST(
       
   948     "SourceDataTypeCode - test ",
       
   949     "CMccRtpDataSource",
       
   950     "SourceDataTypeCode",
       
   951     "FUNCTIONALITY",
       
   952     SetupL, UT_CMccRtpDataSource_SourceDataTypeCodeL, Teardown)
       
   953 
       
   954 EUNIT_TEST(
       
   955     "SetSourceDataTypeCode - test ",
       
   956     "CMccRtpDataSource",
       
   957     "SetSourceDataTypeCode",
       
   958     "FUNCTIONALITY",
       
   959     SetupL, UT_CMccRtpDataSource_SetSourceDataTypeCodeL, Teardown)
       
   960 
       
   961 EUNIT_TEST(
       
   962     "BufferEmptiedL - test ",
       
   963     "CMccRtpDataSource",
       
   964     "BufferEmptiedL",
       
   965     "FUNCTIONALITY",
       
   966     SetupL, UT_CMccRtpDataSource_BufferEmptiedLL, Teardown)
       
   967 
       
   968 EUNIT_TEST(
       
   969     "CanCreateSourceBuffer - test ",
       
   970     "CMccRtpDataSource",
       
   971     "CanCreateSourceBuffer",
       
   972     "FUNCTIONALITY",
       
   973     SetupL, UT_CMccRtpDataSource_CanCreateSourceBufferL, Teardown)
       
   974 
       
   975 EUNIT_TEST(
       
   976     "CreateSourceBufferL - test ",
       
   977     "CMccRtpDataSource",
       
   978     "CreateSourceBufferL",
       
   979     "FUNCTIONALITY",
       
   980     SetupL, UT_CMccRtpDataSource_CreateSourceBufferLL, Teardown)
       
   981 
       
   982 EUNIT_TEST(
       
   983     "SourceThreadLogon - test ",
       
   984     "CMccRtpDataSource",
       
   985     "SourceThreadLogon",
       
   986     "FUNCTIONALITY",
       
   987     SetupL, UT_CMccRtpDataSource_SourceThreadLogonL, Teardown)
       
   988 
       
   989 EUNIT_TEST(
       
   990     "SourceThreadLogoff - test ",
       
   991     "CMccRtpDataSource",
       
   992     "SourceThreadLogoff",
       
   993     "FUNCTIONALITY",
       
   994     SetupL, UT_CMccRtpDataSource_SourceThreadLogoffL, Teardown)
       
   995 
       
   996 EUNIT_TEST(
       
   997     "SourcePrimeL - test ",
       
   998     "CMccRtpDataSource",
       
   999     "SourcePrimeL",
       
  1000     "FUNCTIONALITY",
       
  1001     SetupL, UT_CMccRtpDataSource_SourcePrimeLL, Teardown)
       
  1002 
       
  1003 EUNIT_TEST(
       
  1004     "SourcePlayL - test ",
       
  1005     "CMccRtpDataSource",
       
  1006     "SourcePlayL",
       
  1007     "FUNCTIONALITY",
       
  1008     SetupL, UT_CMccRtpDataSource_SourcePlayLL, Teardown)
       
  1009 
       
  1010 EUNIT_TEST(
       
  1011     "SourcePauseL - test ",
       
  1012     "CMccRtpDataSource",
       
  1013     "SourcePauseL",
       
  1014     "FUNCTIONALITY",
       
  1015     SetupL, UT_CMccRtpDataSource_SourcePauseLL, Teardown)
       
  1016 
       
  1017 EUNIT_TEST(
       
  1018     "SourceStopL - test ",
       
  1019     "CMccRtpDataSource",
       
  1020     "SourceStopL",
       
  1021     "FUNCTIONALITY",
       
  1022     SetupL, UT_CMccRtpDataSource_SourceStopLL, Teardown)
       
  1023 
       
  1024 EUNIT_TEST(
       
  1025     "FillBufferL - test ",
       
  1026     "CMccRtpDataSource",
       
  1027     "FillBufferL",
       
  1028     "FUNCTIONALITY",
       
  1029     SetupL, UT_CMccRtpDataSource_FillBufferLL, Teardown)
       
  1030 
       
  1031 EUNIT_TEST(
       
  1032     "SendRTCPReceiverReport - test ",
       
  1033     "CMccRtpDataSource",
       
  1034     "SendRTCPReceiverReport",
       
  1035     "FUNCTIONALITY",
       
  1036     SetupL, UT_CMccRtpDataSource_SendRTCPReceiverReportL, Teardown)
       
  1037 
       
  1038 EUNIT_TEST(
       
  1039     "SendRTCPSenderReport - test ",
       
  1040     "CMccRtpDataSource",
       
  1041     "SendRTCPSenderReport",
       
  1042     "FUNCTIONALITY",
       
  1043     SetupL, UT_CMccRtpDataSource_SendRTCPSenderReportL, Teardown)
       
  1044 
       
  1045 EUNIT_TEST(
       
  1046     "SendRTCPDataL - test ",
       
  1047     "CMccRtpDataSource",
       
  1048     "SendRTCPDataL",
       
  1049     "FUNCTIONALITY",
       
  1050     SetupL, UT_CMccRtpDataSource_SendRTCPDataLL, Teardown)
       
  1051 
       
  1052 EUNIT_TEST(
       
  1053     "NegotiateSourceL - test ",
       
  1054     "CMccRtpDataSource",
       
  1055     "NegotiateSourceL",
       
  1056     "FUNCTIONALITY",
       
  1057     SetupL, UT_CMccRtpDataSource_NegotiateSourceLL, Teardown)
       
  1058 
       
  1059 EUNIT_TEST(
       
  1060     "ConstructSourceL - test ",
       
  1061     "CMccRtpDataSource",
       
  1062     "ConstructSourceL",
       
  1063     "FUNCTIONALITY",
       
  1064     SetupL, UT_CMccRtpDataSource_ConstructSourceLL, Teardown)
       
  1065 
       
  1066 EUNIT_TEST(
       
  1067     "ValidatePacket - test ",
       
  1068     "CMccRtpDataSource",
       
  1069     "ValidatePacket",
       
  1070     "FUNCTIONALITY",
       
  1071     SetupL, UT_CMccRtpDataSource_ValidatePacketL, Teardown)
       
  1072 
       
  1073 EUNIT_TEST(
       
  1074     "DoCreateSrtpStreamL - test ",
       
  1075     "CMccRtpDataSource",
       
  1076     "DoCreateSrtpStreamL",
       
  1077     "FUNCTIONALITY",
       
  1078     SetupL, UT_CMccRtpDataSource_DoCreateSrtpStreamL, Teardown)
       
  1079 
       
  1080 EUNIT_TEST(
       
  1081     "TestSendEvent - test ",
       
  1082     "CMccRtpDataSource",
       
  1083     "TestSendEvent",
       
  1084     "FUNCTIONALITY",
       
  1085     SetupL, UT_CMccRtpDataSource_TestSendEventL, Teardown)
       
  1086 
       
  1087 EUNIT_TEST(
       
  1088     "Standby - test ",
       
  1089     "CMccRtpDataSource",
       
  1090     "Standby",
       
  1091     "FUNCTIONALITY",
       
  1092     SetupL, UT_CMccRtpDataSource_StandbyL, Teardown)
       
  1093 
       
  1094 EUNIT_TEST(
       
  1095     "SourceCustomCommand - test ",
       
  1096     "CMccRtpDataSource",
       
  1097     "SourceCustomCommand",
       
  1098     "FUNCTIONALITY",
       
  1099     SetupL, UT_CMccRtpDataSource_SourceCustomCommandL, Teardown)
       
  1100 
       
  1101 EUNIT_TEST(
       
  1102     "DoStandbyDecision - test ",
       
  1103     "CMccRtpDataSource",
       
  1104     "DoStandbyDecision",
       
  1105     "FUNCTIONALITY",
       
  1106     SetupL, UT_CMccRtpDataSource_DoStandbyDecisionL, Teardown)
       
  1107 
       
  1108 EUNIT_TEST(
       
  1109     "RegisterPayloadTypesL - test ",
       
  1110     "CMccRtpDataSource",
       
  1111     "RegisterPayloadTypesL",
       
  1112     "FUNCTIONALITY",
       
  1113     SetupL, UT_CMccRtpDataSource_RegisterPayloadTypesLL, Teardown)
       
  1114         
       
  1115 EUNIT_TEST(
       
  1116     "TestBaseClass - test ",
       
  1117     "CMccRtpDataSource",
       
  1118     "TestBaseClass",
       
  1119     "FUNCTIONALITY",
       
  1120     SetupL, UT_CMccRtpDataSource_TestBaseClassL, Teardown)
       
  1121     
       
  1122 EUNIT_TEST(
       
  1123     "SRTPMasterKeyStaleEvent1L - test ",
       
  1124     "CMccRtpDataSource",
       
  1125     "SRTPMasterKeyStaleEvent1L",
       
  1126     "FUNCTIONALITY",
       
  1127     SetupL, UT_CMccRtpDataSource_SRTPMasterKeyStaleEvent1L, Teardown)
       
  1128 
       
  1129 EUNIT_TEST(
       
  1130     "SRTPMasterKeyStaleEvent2L - test ",
       
  1131     "CMccRtpDataSource",
       
  1132     "SRTPMasterKeyStaleEvent2L",
       
  1133     "FUNCTIONALITY",
       
  1134     SetupL, UT_CMccRtpDataSource_SRTPMasterKeyStaleEvent2L, Teardown)
       
  1135                         
       
  1136 EUNIT_END_TEST_TABLE
       
  1137 
       
  1138 //  END OF FILE