multimediacommscontroller/mmccsubcontroller/tsrc/ut_subcontroller/Src/UT_CMccRtpKeepalive.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_CMccRtpKeepalive.h"
       
    23 
       
    24 //  EXTERNAL INCLUDES
       
    25 #include <digia/eunit/EUnitMacros.h>
       
    26 #include <digia/eunit/CEunitAllocTestCaseDecorator.h>   // for using EUNIT_ALLOC_TEST
       
    27 
       
    28 
       
    29 //  INTERNAL INCLUDES
       
    30 #include "mccrtpkeepalivecontainer.h"
       
    31 #include "mccrtpkeepalive.h"
       
    32 #include "mccrtpdatasink.h"
       
    33 #include "mccrtpdatasource.h"
       
    34 #include "mccuids.hrh"
       
    35 #include "mcctesteventhandler.h"
       
    36 #include "mccrtpmediaclock.h"
       
    37 
       
    38 #include "mccunittestmacros.h"
       
    39 
       
    40 // CONSTANS
       
    41 const TUid KRtpDataSink =  { KImplUidRtpDataSink };
       
    42 const TUid KRtpDataSource  =  { KImplUidRtpDataSource }; 
       
    43     
       
    44 // CONSTRUCTION
       
    45 UT_CMccRtpKeepalive* UT_CMccRtpKeepalive::NewL()
       
    46     {
       
    47     UT_CMccRtpKeepalive* self = UT_CMccRtpKeepalive::NewLC(); 
       
    48     CleanupStack::Pop();
       
    49 
       
    50     return self;
       
    51     }
       
    52 
       
    53 UT_CMccRtpKeepalive* UT_CMccRtpKeepalive::NewLC()
       
    54     {
       
    55     UT_CMccRtpKeepalive* self = new( ELeave ) UT_CMccRtpKeepalive();
       
    56     CleanupStack::PushL( self );
       
    57 
       
    58 	self->ConstructL(); 
       
    59 
       
    60     return self;
       
    61     }
       
    62 
       
    63 // Destructor (virtual by CBase)
       
    64 UT_CMccRtpKeepalive::~UT_CMccRtpKeepalive()
       
    65     {
       
    66     }
       
    67 
       
    68 // Default constructor
       
    69 UT_CMccRtpKeepalive::UT_CMccRtpKeepalive()
       
    70     {
       
    71     }
       
    72 
       
    73 // Second phase construct
       
    74 void UT_CMccRtpKeepalive::ConstructL()
       
    75     {
       
    76     // The ConstructL from the base class CEUnitTestSuiteClass must be called.
       
    77     // It generates the test case table.
       
    78     CEUnitTestSuiteClass::ConstructL();
       
    79     }
       
    80 
       
    81 //  METHODS
       
    82 
       
    83 
       
    84 void UT_CMccRtpKeepalive::SetupL()
       
    85     {
       
    86     iEventHandler = CMccTestEventHandler::NewL();
       
    87     iRtpApi = CRtpAPI::NewL( *iEventHandler );
       
    88     TPckgBuf<TInt> params( 30000 );
       
    89     iRtpSource = MDataSource::NewSourceL( KRtpDataSource, params );
       
    90 	iRtpSink = MDataSink::NewSinkL( KRtpDataSink, KNullDesC8 );
       
    91 	
       
    92 	TMccCodecInfo codecInfo;
       
    93 	TMccCodecInfoBuffer infoBuffer( codecInfo );
       
    94 	CMccRtpDataSource* dSource = static_cast<CMccRtpDataSource*>( iRtpSource );
       
    95 	dSource->ConfigureL( infoBuffer );
       
    96 	CMccRtpDataSink* dSink = static_cast<CMccRtpDataSink*>( iRtpSink );
       
    97 	dSink->ConfigureL( infoBuffer );
       
    98 	
       
    99 	iRtpMediaClock = CMccRtpMediaClock::NewL();
       
   100     } 
       
   101 
       
   102 void UT_CMccRtpKeepalive::Setup2L()
       
   103     {
       
   104     iEventHandler = CMccTestEventHandler::NewL();
       
   105     iRtpApi = CRtpAPI::NewL( *iEventHandler );
       
   106     TPckgBuf<TInt> params( 30000 );
       
   107     iRtpSource = MDataSource::NewSourceL( KRtpDataSource, params );
       
   108 	iRtpSink = MDataSink::NewSinkL( KRtpDataSink, KNullDesC8 );
       
   109 	
       
   110 	TMccCodecInfo codecInfo;
       
   111 	TMccCodecInfoBuffer infoBuffer( codecInfo );
       
   112 	CMccRtpDataSource* dSource = static_cast<CMccRtpDataSource*>( iRtpSource );
       
   113 	dSource->ConfigureL( infoBuffer );
       
   114 	CMccRtpDataSink* dSink = static_cast<CMccRtpDataSink*>( iRtpSink );
       
   115 	dSink->ConfigureL( infoBuffer );
       
   116 	
       
   117 	iRtpMediaClock = CMccRtpMediaClock::NewL();
       
   118 	iKeepaliveHandler = 
       
   119 	    CMccRtpKeepalive::NewL( *iEventHandler, *iRtpApi, TRtpId(), 96, 1000, KNullDesC8, ETrue );
       
   120 	    
       
   121     EUNIT_ASSERT_EQUALS( iKeepaliveHandler->PayloadType(), 96 );
       
   122     } 
       
   123 
       
   124 
       
   125 void UT_CMccRtpKeepalive::SetupAL(  )
       
   126     {
       
   127     SetupL();
       
   128 	    
       
   129     iAlloc = ETrue;
       
   130     }
       
   131       
       
   132 void UT_CMccRtpKeepalive::SetupA2L(  )
       
   133     {
       
   134     Setup2L();
       
   135     iAlloc = ETrue;
       
   136     }
       
   137         
       
   138 void UT_CMccRtpKeepalive::Teardown()
       
   139     {
       
   140     delete iKeepaliveHandler;
       
   141     delete iRtpSource;
       
   142     delete iRtpSink;
       
   143     delete iRtpApi;
       
   144     delete iEventHandler;
       
   145     delete iRtpMediaClock;
       
   146     REComSession::FinalClose();
       
   147     }
       
   148 
       
   149 // INHERITED FUNCTIONS
       
   150 
       
   151 // TEST CASE FUNCTIONS
       
   152 
       
   153 void UT_CMccRtpKeepalive::UT_CMccRtpKeepalive_ContainerTestsL()
       
   154     {
       
   155     if ( !iAlloc )
       
   156         {
       
   157         CMccRtpKeepaliveContainer* container = 
       
   158             CMccRtpKeepaliveContainer::NewL( *iEventHandler, *iRtpApi, TRtpId() );
       
   159         CleanupStack::PushL( container );
       
   160         
       
   161         // Start keepalive
       
   162         //
       
   163         
       
   164         // Interval not defined
       
   165         TMccCodecInfo codecInfo;
       
   166         codecInfo.iKeepalivePT = 96;
       
   167         container->StartKeepaliveL( *static_cast<CMccRtpDataSink*>( iRtpSink ), codecInfo, *iRtpMediaClock );
       
   168         
       
   169         // Interval defined
       
   170         codecInfo.iKeepaliveInterval = 1000;
       
   171         container->StartKeepaliveL( *static_cast<CMccRtpDataSink*>( iRtpSink ), codecInfo, *iRtpMediaClock );
       
   172         
       
   173         // Keepalive handler already exists for the payload type
       
   174         container->StartKeepaliveL( *static_cast<CMccRtpDataSource*>( iRtpSource ), codecInfo, *iRtpMediaClock );
       
   175         
       
   176         // Remote address set
       
   177         EUNIT_ASSERT_EQUALS( container->RemoteAddressSet(), KErrNone );
       
   178         
       
   179         // Update valid case
       
   180         MCC_EUNIT_ASSERT_NO_LEAVE( container->UpdateParamsL( *static_cast<CMccRtpDataSink*>( iRtpSink ), codecInfo ) );
       
   181         
       
   182         // Update with keealive interval 0
       
   183         codecInfo.iKeepaliveInterval = 0;
       
   184         MCC_EUNIT_ASSERT_NO_LEAVE( container->UpdateParamsL( *static_cast<CMccRtpDataSink*>( iRtpSink ), codecInfo ) );
       
   185         
       
   186         // Stop keepalive
       
   187         //
       
   188         
       
   189         // First user
       
   190         container->StopKeepalive( *static_cast<CMccRtpDataSink*>( iRtpSink ), codecInfo );
       
   191         
       
   192         // Second user
       
   193         container->StopKeepalive( *static_cast<CMccRtpDataSource*>( iRtpSource ), codecInfo );
       
   194         
       
   195         // Handler not found
       
   196         EUNIT_ASSERT_EQUALS( container->StopKeepalive( *static_cast<CMccRtpDataSource*>( iRtpSource ), codecInfo ),
       
   197                              KErrNotFound );
       
   198         
       
   199         // Stop 
       
   200         container->StopAll();
       
   201         
       
   202         // Remote address set while stopped
       
   203         EUNIT_ASSERT_EQUALS( container->RemoteAddressSet(), KErrNotReady );
       
   204         
       
   205         CleanupStack::PopAndDestroy( container );       
       
   206         }
       
   207     else
       
   208         {
       
   209         CMccRtpKeepaliveContainer* container = 
       
   210             CMccRtpKeepaliveContainer::NewL( *iEventHandler, *iRtpApi, TRtpId() );
       
   211         CleanupStack::PushL( container );
       
   212         
       
   213         // Interval not defined
       
   214         TMccCodecInfo codecInfo;
       
   215         codecInfo.iKeepalivePT = 96;
       
   216         container->StartKeepaliveL( *static_cast<CMccRtpDataSink*>( iRtpSink ), codecInfo, *iRtpMediaClock );
       
   217         
       
   218         // Interval defined
       
   219         codecInfo.iKeepaliveInterval = 1000;
       
   220         container->StartKeepaliveL( *static_cast<CMccRtpDataSink*>( iRtpSink ), codecInfo, *iRtpMediaClock );
       
   221         
       
   222         // Keepalive handler already exists for the payload type
       
   223         container->StartKeepaliveL( *static_cast<CMccRtpDataSource*>( iRtpSource ), codecInfo, *iRtpMediaClock );
       
   224         
       
   225         // Remote address set
       
   226         EUNIT_ASSERT_EQUALS( container->RemoteAddressSet(), KErrNone );
       
   227         
       
   228         // Update valid case
       
   229         container->UpdateParamsL( *static_cast<CMccRtpDataSink*>( iRtpSink ), codecInfo );
       
   230         
       
   231         // Update with keealive interval 0
       
   232         codecInfo.iKeepaliveInterval = 0;
       
   233         container->UpdateParamsL( *static_cast<CMccRtpDataSink*>( iRtpSink ), codecInfo );
       
   234         
       
   235         
       
   236         // Stop keepalive
       
   237         //
       
   238         
       
   239         // First user
       
   240         container->StopKeepalive( *static_cast<CMccRtpDataSink*>( iRtpSink ), codecInfo );
       
   241         
       
   242         // Second user
       
   243         container->StopKeepalive( *static_cast<CMccRtpDataSource*>( iRtpSource ), codecInfo );
       
   244         
       
   245         // Handler not found
       
   246         EUNIT_ASSERT_EQUALS( container->StopKeepalive( *static_cast<CMccRtpDataSource*>( iRtpSource ), codecInfo ),
       
   247                              KErrNotFound );
       
   248         
       
   249         // Stop 
       
   250         container->StopAll();
       
   251         
       
   252         // Remote address set while stopped
       
   253         EUNIT_ASSERT_EQUALS( container->RemoteAddressSet(), KErrNotReady );
       
   254         CleanupStack::PopAndDestroy( container );
       
   255         }
       
   256 
       
   257     }
       
   258 
       
   259 void UT_CMccRtpKeepalive::UT_CMccRtpKeepalive_StartKeepaliveLL()
       
   260     {
       
   261     if ( iAlloc )
       
   262         {
       
   263         CMccRtpKeepalive* keepaliveHandler = 
       
   264 	        CMccRtpKeepalive::NewL( *iEventHandler, *iRtpApi, TRtpId(), 96, 1000, KNullDesC8, ETrue );
       
   265 	     
       
   266 	    CleanupStack::PushL( keepaliveHandler );	     
       
   267 
       
   268         // Keepalive is sent when only RTP source exists
       
   269         keepaliveHandler->StartKeepaliveL( *static_cast<CMccRtpDataSource*>( iRtpSource ), *iRtpMediaClock );
       
   270         EUNIT_ASSERT( keepaliveHandler->iCurrentState == CMccRtpKeepalive::EWaitingTimer );
       
   271         
       
   272         // Try when already sending
       
   273         keepaliveHandler->StartKeepaliveL( *static_cast<CMccRtpDataSource*>( iRtpSource ), *iRtpMediaClock );
       
   274         
       
   275         // Keepalive preaudio packet is sent
       
   276         keepaliveHandler->StartKeepaliveL( *static_cast<CMccRtpDataSink*>( iRtpSink ), *iRtpMediaClock );
       
   277         
       
   278         CleanupStack::PopAndDestroy( keepaliveHandler );
       
   279         
       
   280         // Test starting while remote address is not set
       
   281         keepaliveHandler = 
       
   282     	    CMccRtpKeepalive::NewL( *iEventHandler, *iRtpApi, TRtpId(), 96, 1000, KNullDesC8, EFalse );
       
   283     	    
       
   284     	CleanupStack::PushL( keepaliveHandler );
       
   285     	
       
   286     	iKeepaliveHandler->StartKeepaliveL( *static_cast<CMccRtpDataSource*>( iRtpSource ), *iRtpMediaClock );
       
   287 
       
   288         CleanupStack::PopAndDestroy( keepaliveHandler );
       
   289         }
       
   290     else
       
   291         {
       
   292         // Incorrect payload type
       
   293         MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( iKeepaliveHandler = 
       
   294     	    CMccRtpKeepalive::NewL( *iEventHandler, *iRtpApi, TRtpId(), 200, 1000, KNullDesC8, ETrue ), KErrArgument );
       
   295         
       
   296         iKeepaliveHandler = 
       
   297     	    CMccRtpKeepalive::NewL( *iEventHandler, *iRtpApi, TRtpId(), 96, 1000, KNullDesC8, ETrue );
       
   298         
       
   299         delete iKeepaliveHandler;
       
   300         iKeepaliveHandler = NULL;
       
   301         
       
   302         iKeepaliveHandler = 
       
   303     	    CMccRtpKeepalive::NewL( *iEventHandler, *iRtpApi, TRtpId(), 96, 1000, KNullDesC8, ETrue );
       
   304         
       
   305         // Keepalive is sent when only RTP source exists
       
   306         iKeepaliveHandler->StartKeepaliveL( *static_cast<CMccRtpDataSource*>( iRtpSource ), *iRtpMediaClock );
       
   307         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::EWaitingTimer );
       
   308         
       
   309         // Try when already sending
       
   310         iKeepaliveHandler->StartKeepaliveL( *static_cast<CMccRtpDataSource*>( iRtpSource ), *iRtpMediaClock );
       
   311         
       
   312         // Keepalive preaudio packet is sent
       
   313         iKeepaliveHandler->StartKeepaliveL( *static_cast<CMccRtpDataSink*>( iRtpSink ), *iRtpMediaClock );
       
   314         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::EWaitingTimer );
       
   315         
       
   316         delete iKeepaliveHandler;
       
   317         iKeepaliveHandler = NULL;
       
   318         
       
   319         // Test starting while remote address is not set
       
   320         iKeepaliveHandler = 
       
   321     	    CMccRtpKeepalive::NewL( *iEventHandler, *iRtpApi, TRtpId(), 96, 1000, KNullDesC8, EFalse );
       
   322     	iKeepaliveHandler->StartKeepaliveL( *static_cast<CMccRtpDataSource*>( iRtpSource ), *iRtpMediaClock );
       
   323         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::ESendingPending );
       
   324 
       
   325         delete iKeepaliveHandler;
       
   326         iKeepaliveHandler = NULL;        
       
   327         }
       
   328     }
       
   329     
       
   330 void UT_CMccRtpKeepalive::UT_CMccRtpKeepalive_UpdateParamsLL()
       
   331     {
       
   332     if ( iAlloc )
       
   333         { 
       
   334         CMccRtpKeepalive* keepaliveHandler = 
       
   335 	        CMccRtpKeepalive::NewL( *iEventHandler, *iRtpApi, TRtpId(), 96, 1000, KNullDesC8, ETrue );
       
   336 	        
       
   337 	    CleanupStack::PushL( keepaliveHandler );    
       
   338     
       
   339         TUint8 keepalivePT(96); 
       
   340         TUint8 keepaliveInterval(25);    
       
   341         const TUint8 KAmrKeepAlivePayload[6] = 
       
   342         { 
       
   343         0xF4, 0x00, 0x00, 0x00, 0x00, 0x00
       
   344         };
       
   345         TBuf8<6> keepAliveData;
       
   346         keepAliveData.Copy( KAmrKeepAlivePayload );
       
   347         
       
   348         // Valid case
       
   349         EUNIT_ASSERT_LEAVE( keepaliveHandler->UpdateParamsL( keepalivePT, keepaliveInterval, keepAliveData ) );
       
   350 
       
   351         // Wrong payload type
       
   352         keepalivePT = 129;
       
   353         EUNIT_ASSERT_LEAVE( keepaliveHandler->UpdateParamsL( keepalivePT, keepaliveInterval, keepAliveData ) );    
       
   354         CleanupStack::PopAndDestroy( keepaliveHandler );
       
   355         }
       
   356     else
       
   357         {
       
   358         iKeepaliveHandler = 
       
   359      	    CMccRtpKeepalive::NewL( *iEventHandler, *iRtpApi, TRtpId(), 96, 1000, KNullDesC8, ETrue );
       
   360         
       
   361         TUint8 keepalivePT(96); 
       
   362         TUint8 keepaliveInterval(25);    
       
   363         const TUint8 KAmrKeepAlivePayload[6] = 
       
   364         { 
       
   365         0xF4, 0x00, 0x00, 0x00, 0x00, 0x00
       
   366         };
       
   367         TBuf8<6> keepAliveData;
       
   368         keepAliveData.Copy( KAmrKeepAlivePayload );
       
   369         
       
   370         // Valid case
       
   371         MCC_EUNIT_ASSERT_NO_LEAVE( iKeepaliveHandler->UpdateParamsL( keepalivePT, keepaliveInterval, keepAliveData ) );
       
   372 
       
   373         // Wrong payload type
       
   374         keepalivePT = 129;
       
   375         MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( iKeepaliveHandler->UpdateParamsL( keepalivePT, keepaliveInterval, keepAliveData ), KErrArgument );            
       
   376         }
       
   377     }
       
   378 
       
   379 void UT_CMccRtpKeepalive::UT_CMccRtpKeepalive_StopKeepaliveL()
       
   380     {
       
   381     TInt refCount( 0 );
       
   382     
       
   383     if ( iAlloc )
       
   384         {
       
   385          iKeepaliveHandler->StartKeepaliveL(
       
   386             *static_cast<CMccRtpDataSource*>( iRtpSource ), *iRtpMediaClock );
       
   387 
       
   388         
       
   389         iKeepaliveHandler->StopKeepalive( *static_cast<CMccRtpDataSource*>( iRtpSource ), refCount );
       
   390         EUNIT_ASSERT_EQUALS( refCount, 0 );       
       
   391         }
       
   392     else
       
   393         {
       
   394         EUNIT_ASSERT_EQUALS( 
       
   395             iKeepaliveHandler->StopKeepalive( *static_cast<CMccRtpDataSource*>( iRtpSource ), refCount ), 
       
   396             KErrNotFound );
       
   397         
       
   398         iKeepaliveHandler->StartKeepaliveL( *static_cast<CMccRtpDataSource*>( iRtpSource ), *iRtpMediaClock );
       
   399         EUNIT_ASSERT_EQUALS( iKeepaliveHandler->iUsers.Count(), 1 );
       
   400         
       
   401         iKeepaliveHandler->StopKeepalive( *static_cast<CMccRtpDataSource*>( iRtpSource ), refCount );
       
   402         EUNIT_ASSERT_EQUALS( refCount, 0 );
       
   403         }
       
   404     }
       
   405     
       
   406 void UT_CMccRtpKeepalive::UT_CMccRtpKeepalive_RemoteAddressSetL()
       
   407     {
       
   408     if ( iAlloc )
       
   409         {
       
   410         MCC_EUNIT_ASSERT_NO_LEAVE( iKeepaliveHandler->RemoteAddressSet() );
       
   411         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::ESendingPending;
       
   412         MCC_EUNIT_ASSERT_NO_LEAVE( iKeepaliveHandler->RemoteAddressSet() );
       
   413         }
       
   414     else
       
   415         {
       
   416         iKeepaliveHandler->RemoteAddressSet();
       
   417         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::ESendingPending;
       
   418         iKeepaliveHandler->RemoteAddressSet();       
       
   419         }
       
   420     }
       
   421 
       
   422 void UT_CMccRtpKeepalive::UT_CMccRtpKeepalive_RunLL()
       
   423     {
       
   424     if ( iAlloc )
       
   425         {
       
   426          // Timer completed
       
   427         iKeepaliveHandler->iStatus = KErrNone;
       
   428         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::EWaitingTimer;
       
   429         MCC_EUNIT_ASSERT_NO_LEAVE( iKeepaliveHandler->RunL() );
       
   430         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::ESending );
       
   431         EUNIT_ASSERT( iKeepaliveHandler->IsActive() );
       
   432         
       
   433         // Sending when already active fails
       
   434         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::EWaitingTimer;
       
   435         EUNIT_ASSERT_LEAVE( iKeepaliveHandler->RunL() );
       
   436         
       
   437         // Send completed
       
   438         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::ESending;
       
   439         MCC_EUNIT_ASSERT_NO_LEAVE( iKeepaliveHandler->RunL() );
       
   440         // Nothing happens as was still active (not possible in real life)
       
   441         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::ESending );
       
   442         
       
   443         // Send completion ok when not active anymore, timer is started
       
   444         iKeepaliveHandler->Cancel();
       
   445         iKeepaliveHandler->iStatus = KErrNone;
       
   446         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::ESending;
       
   447         MCC_EUNIT_ASSERT_NO_LEAVE( iKeepaliveHandler->RunL() );
       
   448         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::EWaitingTimer );
       
   449         EUNIT_ASSERT( iKeepaliveHandler->IsActive() );
       
   450         
       
   451         // Completed in not supported state
       
   452         iKeepaliveHandler->iStatus = KErrNone;
       
   453         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::EIdle;
       
   454         MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( iKeepaliveHandler->RunL(), KErrArgument );
       
   455         
       
   456         // RunL error
       
   457         // NB: seems that this test case goes so that the keepalive handler is
       
   458         // waiting for the timer thus the only state to work in the cancel case
       
   459         // is the 'waiting timer'-state.
       
   460         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::EWaitingTimer;
       
   461         iKeepaliveHandler->Cancel();
       
   462         iKeepaliveHandler->iStatus = KErrGeneral;
       
   463         
       
   464         EUNIT_ASSERT_LEAVE( iKeepaliveHandler->RunL() );
       
   465         
       
   466         //
       
   467         TUint8 keepalivePT(96); 
       
   468         TUint8 keepaliveInterval(25);    
       
   469         const TUint8 KAmrKeepAlivePayload[6] = 
       
   470         { 
       
   471         0xF4, 0x00, 0x00, 0x00, 0x00, 0x00
       
   472         };
       
   473         TBuf8<6> keepAliveData;
       
   474         keepAliveData.Copy( KAmrKeepAlivePayload );
       
   475         EUNIT_ASSERT_LEAVE( iKeepaliveHandler->UpdateParamsL( keepalivePT, keepaliveInterval, keepAliveData ) );
       
   476         
       
   477         // Send completion ok when not active anymore, timer is started
       
   478         iKeepaliveHandler->Cancel();
       
   479         iKeepaliveHandler->iStatus = KErrNone;
       
   480         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::ESending;
       
   481         MCC_EUNIT_ASSERT_NO_LEAVE( iKeepaliveHandler->RunL() );
       
   482         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::EWaitingTimer );
       
   483         EUNIT_ASSERT( iKeepaliveHandler->IsActive() );
       
   484      
       
   485         // Test RunError
       
   486         EUNIT_ASSERT_EQUALS( iKeepaliveHandler->RunError( KErrGeneral ), KErrNone );
       
   487         EUNIT_ASSERT_EQUALS( iKeepaliveHandler->RunError( KErrNoMemory ), KErrNoMemory );
       
   488         }
       
   489     else
       
   490         {
       
   491         // Timer completed
       
   492         iKeepaliveHandler->iStatus = KErrNone;
       
   493         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::EWaitingTimer;
       
   494         iKeepaliveHandler->RunL();
       
   495         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::ESending );
       
   496         EUNIT_ASSERT( iKeepaliveHandler->IsActive() );
       
   497         
       
   498         // Sending when already active fails
       
   499         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::EWaitingTimer;
       
   500         MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( iKeepaliveHandler->RunL(), KErrInUse );
       
   501         
       
   502         // Send completed
       
   503         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::ESending;
       
   504         iKeepaliveHandler->RunL();
       
   505         // Nothing happens as was still active (not possible in real life)
       
   506         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::ESending );
       
   507         
       
   508         // Send completion ok when not active anymore, timer is started
       
   509         iKeepaliveHandler->Cancel();
       
   510         iKeepaliveHandler->iStatus = KErrNone;
       
   511         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::ESending;
       
   512         iKeepaliveHandler->RunL();
       
   513         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::EWaitingTimer );
       
   514         EUNIT_ASSERT( iKeepaliveHandler->IsActive() );
       
   515         
       
   516         // Completed in not supported state
       
   517         iKeepaliveHandler->iStatus = KErrNone;
       
   518         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::EIdle;
       
   519         MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( iKeepaliveHandler->RunL(), KErrArgument );
       
   520         
       
   521         // RunL error
       
   522         // NB: seems that this test case goes so that the keepalive handler is
       
   523         // waiting for the timer thus the only state to work in the cancel case
       
   524         // is the 'waiting timer'-state.
       
   525         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::EWaitingTimer;
       
   526         iKeepaliveHandler->Cancel();
       
   527         iKeepaliveHandler->iStatus = KErrGeneral;
       
   528         
       
   529         MCC_EUNIT_ASSERT_SPECIFIC_LEAVE( iKeepaliveHandler->RunL(), KErrGeneral );
       
   530         
       
   531         //
       
   532         TUint8 keepalivePT(96); 
       
   533         TUint8 keepaliveInterval(25);    
       
   534         const TUint8 KAmrKeepAlivePayload[6] = 
       
   535         { 
       
   536         0xF4, 0x00, 0x00, 0x00, 0x00, 0x00
       
   537         };
       
   538         TBuf8<6> keepAliveData;
       
   539         keepAliveData.Copy( KAmrKeepAlivePayload );
       
   540         MCC_EUNIT_ASSERT_NO_LEAVE( iKeepaliveHandler->UpdateParamsL( keepalivePT, keepaliveInterval, keepAliveData ) );
       
   541         
       
   542         // Send completion ok when not active anymore, timer is started
       
   543         iKeepaliveHandler->Cancel();
       
   544         iKeepaliveHandler->iStatus = KErrNone;
       
   545         iKeepaliveHandler->iCurrentState = CMccRtpKeepalive::ESending;
       
   546         iKeepaliveHandler->RunL();
       
   547         EUNIT_ASSERT( iKeepaliveHandler->iCurrentState == CMccRtpKeepalive::EWaitingTimer );
       
   548         EUNIT_ASSERT( iKeepaliveHandler->IsActive() );
       
   549      
       
   550         // Test RunError
       
   551         EUNIT_ASSERT_EQUALS( iKeepaliveHandler->RunError( KErrGeneral ), KErrNone );
       
   552         EUNIT_ASSERT_EQUALS( iKeepaliveHandler->RunError( KErrNoMemory ), KErrNoMemory );
       
   553         }
       
   554     }
       
   555     
       
   556 //  TEST TABLE
       
   557 
       
   558 EUNIT_BEGIN_TEST_TABLE( 
       
   559     UT_CMccRtpKeepalive,
       
   560     "CMccKeepalive test",
       
   561     "UNIT" )
       
   562 
       
   563 EUNIT_TEST(
       
   564     "ContainerTests - test ",
       
   565     "CMccRtpKeepalive",
       
   566     "ContainerTests",
       
   567     "FUNCTIONALITY",
       
   568     SetupL, UT_CMccRtpKeepalive_ContainerTestsL, Teardown )
       
   569     
       
   570 EUNIT_TEST(
       
   571     "StartKeepaliveL - test ",
       
   572     "CMccRtpKeepalive",
       
   573     "StartKeepaliveL",
       
   574     "FUNCTIONALITY",
       
   575     SetupL, UT_CMccRtpKeepalive_StartKeepaliveLL, Teardown )
       
   576    
       
   577 EUNIT_TEST(
       
   578     "UpdateParamsL - test ",
       
   579     "CMccRtpKeepalive",
       
   580     "UpdateParamsL",
       
   581     "FUNCTIONALITY",
       
   582     SetupL, UT_CMccRtpKeepalive_UpdateParamsLL, Teardown )    
       
   583     
       
   584 EUNIT_TEST(
       
   585     "StopKeepalive - test ",
       
   586     "CMccRtpKeepalive",
       
   587     "StopKeepalive",
       
   588     "FUNCTIONALITY",
       
   589     Setup2L, UT_CMccRtpKeepalive_StopKeepaliveL, Teardown )
       
   590 
       
   591 EUNIT_TEST(
       
   592     "RemoteAddressSet - test ",
       
   593     "CMccRtpKeepalive",
       
   594     "RemoteAddressSet",
       
   595     "FUNCTIONALITY",
       
   596     Setup2L, UT_CMccRtpKeepalive_RemoteAddressSetL, Teardown )
       
   597 
       
   598 EUNIT_TEST(
       
   599     "RunL - test ",
       
   600     "CMccRtpKeepalive",
       
   601     "RunL",
       
   602     "FUNCTIONALITY",
       
   603     Setup2L, UT_CMccRtpKeepalive_RunLL, Teardown )
       
   604 
       
   605 // ALLOC TESTS
       
   606 
       
   607 #ifdef ALLOC_TEST_ON
       
   608           
       
   609 EUNIT_ALLOC_TEST(
       
   610     "ContainerTests - alloc test",
       
   611     "CMccRtpKeepalive",
       
   612     "ContainerTests",
       
   613     "ERRORHANDLING",
       
   614     SetupA2L, UT_CMccRtpKeepalive_ContainerTestsL, Teardown) 
       
   615 
       
   616 EUNIT_ALLOC_TEST(
       
   617     "StartKeepaliveL - alloc test",
       
   618     "CMccRtpKeepalive",
       
   619     "StartKeepaliveL",
       
   620     "ERRORHANDLING",
       
   621     SetupA2L, UT_CMccRtpKeepalive_StartKeepaliveLL, Teardown)
       
   622 
       
   623 EUNIT_ALLOC_TEST(
       
   624     "UpdateParamsL - alloc test",
       
   625     "CMccRtpKeepalive",
       
   626     "UpdateParamsL",
       
   627     "ERRORHANDLING",
       
   628     SetupA2L, UT_CMccRtpKeepalive_UpdateParamsLL, Teardown)
       
   629     
       
   630 EUNIT_ALLOC_TEST(
       
   631     "StopKeepalive - alloc test",
       
   632     "CMccRtpKeepalive",
       
   633     "StopKeepalive",
       
   634     "ERRORHANDLING",
       
   635     SetupA2L, UT_CMccRtpKeepalive_StopKeepaliveL, Teardown)
       
   636 
       
   637 EUNIT_ALLOC_TEST(
       
   638     "RemoteAddressSet - alloc test",
       
   639     "CMccRtpKeepalive",
       
   640     "RemoteAddressSet",
       
   641     "ERRORHANDLING",
       
   642     SetupA2L, UT_CMccRtpKeepalive_RemoteAddressSetL, Teardown)
       
   643     
       
   644 EUNIT_ALLOC_TEST(
       
   645     "RunL - alloc test",
       
   646     "CMccRtpKeepalive",
       
   647     "RunL",
       
   648     "ERRORHANDLING",
       
   649     SetupA2L, UT_CMccRtpKeepalive_RunLL, Teardown)    
       
   650            
       
   651 #endif // ALLOC_TEST
       
   652       
       
   653 EUNIT_END_TEST_TABLE
       
   654 
       
   655 //  END OF FILE