multimediacommscontroller/mmccrtpsourcesink/tsrc/ut_rtpsourcesink/src/UT_CMccJitterCalculator.cpp
branchRCL_3
changeset 59 b0e4b01681c5
parent 42 817c922b90eb
equal deleted inserted replaced
55:f72c4fccd381 59:b0e4b01681c5
    64     // It generates the test case table.
    64     // It generates the test case table.
    65     CEUnitTestSuiteClass::ConstructL();
    65     CEUnitTestSuiteClass::ConstructL();
    66     }
    66     }
    67 
    67 
    68 // Observer impl
    68 // Observer impl
    69 void UT_CMccJitterCalculator::SendJitterEvent( TMccRtpEventDataExtended aEvent, TInt aError )
    69 void UT_CMccJitterCalculator::SendJitterEvent( TMccRtpEventData aEvent, TInt aError )
    70     {
    70     {
    71     iLastEvent = aEvent;
    71     iLastEvent = aEvent;
    72     iLastError = aError;
    72     iLastError = aError;
    73     }
    73     }
    74     
    74     
   124     iCalculator->iHomeTime.HomeTime();
   124     iCalculator->iHomeTime.HomeTime();
   125     
   125     
   126     // Not active
   126     // Not active
   127     iCalculator->JitterObserving();
   127     iCalculator->JitterObserving();
   128     
   128     
   129     iCalculator->iStartingSeqNum = 80;
       
   130     iCalculator->iCurrentSeqNum = 100; 
       
   131     iCalculator->iReceivedPacketCounter = 20; // 100-80=20, no packets lost
       
   132     
       
   133     iCalculator->iPacketsReceived = 5;
   129     iCalculator->iPacketsReceived = 5;
   134     iCalculator->iJitterLevelFromClient = 10000;
   130     iCalculator->iJitterLevelFromClient = 10000;
   135     iCalculator->iCurJitter = 10000;
   131     iCalculator->iCurJitter = 10000;
   136     iCalculator->iJitterObsOn = ETrue;
   132     iCalculator->iJitterObsOn = ETrue;
   137     iCalculator->iFrameLossObsOn = ETrue;
       
   138     
   133     
   139     // Time based reporting   
   134     // Time based reporting   
   140     // 
   135     // 
   141     iCalculator->iReportIntervalType = EMccQualityTimeBased;
   136     iCalculator->iReportIntervalType = EMccQualityTimeBased;
   142     iCalculator->iCurTime.HomeTime();
   137     iCalculator->iCurTime.HomeTime();
   143     
   138     
   144     // Not reported as not enough time elapsed
   139     // Not reported as not enough time elapsed
   145     iCalculator->iReportInterval = 100000;
   140     iCalculator->iReportInterval = 100000;
   146     iCalculator->JitterObserving();
   141     iCalculator->JitterObserving();
   147     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 0 );
   142     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 0 );
   148     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketLoss, 0 );
       
   149     
   143     
   150     // Enough time elapsed but not over jitter level defined by client
   144     // Enough time elapsed but not over jitter level defined by client
   151     iCalculator->iReportInterval = 0;
   145     iCalculator->iReportInterval = 0;
   152     iCalculator->JitterObserving();
   146     iCalculator->JitterObserving();
   153     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 0 );
   147     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 0 );
   154     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketLoss, 0 );
   148     
   155     
   149     // Jitter level defined by client exceeded
   156     // Jitter and packet loss level defined by client exceeded
       
   157     iCalculator->iStartingSeqNum = 100;
       
   158     iCalculator->iCurrentSeqNum = 125; 
       
   159     iCalculator->iPrevFerValue = 93000; // 9%
       
   160 
       
   161     iCalculator->iPrevExpectedPackets = 20;
       
   162     iCalculator->iReceivedPacketCounter = 20; // 5 packets is lost. 
       
   163 
       
   164     iCalculator->iJitterLevelFromClient = 10;
   150     iCalculator->iJitterLevelFromClient = 10;
   165     User::After( 5000 );
       
   166     iCalculator->JitterObserving();
   151     iCalculator->JitterObserving();
   167     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 5 ); // just making sure that callback was called
   152     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 5 ); // just making sure that callback was called
   168     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketLoss, 19 );
       
   169     
   153     
   170     // Quality based reporting
   154     // Quality based reporting
   171     //
   155     //
   172     EUNIT_ASSERT_EQUALS( iCalculator->iReceivedPacketCounter, 20 ); // counter is not zeroed
       
   173     
       
   174     iCalculator->iReportIntervalType = EMccQualityPacketBased;
   156     iCalculator->iReportIntervalType = EMccQualityPacketBased;
       
   157     iLastEvent.iPacketsReceived = 0;
       
   158     iCalculator->iReportInterval = 2;
   175     iCalculator->iJitterObsOn = ETrue;
   159     iCalculator->iJitterObsOn = ETrue;
   176     iCalculator->iFrameLossObsOn = ETrue;
   160     
   177     iLastEvent.iPacketsReceived = 0;
   161     // Not the packet when calculation is done
   178     iLastEvent.iPacketLoss = 0;
   162     iCalculator->iReceivedPacketCounter = 0;
   179     iCalculator->iReportInterval = 2;
   163     iCalculator->JitterObserving();
   180     iCalculator->iPacketsReceived = 2;
   164     EUNIT_ASSERT_EQUALS( iCalculator->iReceivedPacketCounter, 1 );
   181 
   165     
   182     iCalculator->iStartingSeqNum = 120;
   166     // Now the interval is reached
   183     iCalculator->iCurrentSeqNum = 121; 
   167     iCalculator->JitterObserving();
   184     iCalculator->iReceivedPacketCounter = 1; 
   168     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 5 ); // just making sure that callback was called
   185     iCalculator->iCurJitter = 10000;
   169     EUNIT_ASSERT_EQUALS( iCalculator->iReceivedPacketCounter, 0 ); // counter is zeroed
   186     iCalculator->iJitterLevelFromClient = 10000;
       
   187     
       
   188     iCalculator->JitterObserving();
       
   189     //Check that nothing was changed in iLastEvent:
       
   190     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 0 );
       
   191     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketLoss, 0 );
       
   192     
       
   193     // One packet more...
       
   194     iCalculator->iPrevFerValue = 0; // 0%
       
   195     iCalculator->iCurrentSeqNum++;
       
   196     iCalculator->iReceivedPacketCounter++; 
       
   197     iCalculator->JitterObserving();
       
   198     //Check that nothing was changed in iLastEvent:
       
   199     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 0 );
       
   200     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketLoss, 0 );
       
   201     
       
   202     //Do the packet loss, with reporting:
       
   203     iCalculator->iStartingSeqNum = 122;
       
   204     iCalculator->iCurrentSeqNum = 126; 
       
   205     iCalculator->iPrevFerValue = 98000; // 9%
       
   206     iCalculator->iPrevExpectedPackets = 1;
       
   207     
       
   208     iCalculator->iReceivedPacketCounter = 2; 
       
   209     iCalculator->iCurJitter = 10000;
       
   210     iCalculator->iJitterLevelFromClient = 10;
       
   211     iCalculator->JitterObserving();
       
   212     //Check that values were changed in iLastEvent:
       
   213     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 2 );
       
   214     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketLoss, 20 );
       
   215     
   170     
   216     // Other reporting
   171     // Other reporting
   217     iCalculator->iReportIntervalType = 998;
   172     iCalculator->iReportIntervalType = 998;
   218     iLastEvent.iPacketsReceived = 0;
   173     iLastEvent.iPacketsReceived = 0;
   219     iCalculator->iJitterObsOn = ETrue;
   174     iCalculator->iJitterObsOn = ETrue;
   220     iCalculator->iFrameLossObsOn = ETrue;
   175     iCalculator->JitterObserving();
   221     iCalculator->JitterObserving();
   176     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 5 ); // just making sure that callback was called
   222     EUNIT_ASSERT_EQUALS( iLastEvent.iPacketsReceived, 2 ); // just making sure that callback was called
       
   223     EUNIT_ASSERT_EQUALS( iLastError, KErrArgument ); 
       
   224     }
   177     }
   225 
   178 
   226 void UT_CMccJitterCalculator::UT_CMccJitterCalculator_RtpPacketReceivedL()
   179 void UT_CMccJitterCalculator::UT_CMccJitterCalculator_RtpPacketReceivedL()
   227     {
   180     {
   228     iCalculator->iReportIntervalType = EMccQualityPacketBased;
       
   229     // TBD: real assert for values
   181     // TBD: real assert for values
   230     
   182     
   231     const TInt KTestConversion = 8000;
   183     const TInt KTestConversion = 8000;
   232     TUint testSeqNum = 222;
       
   233     iCalculator->iCurrentSeqNum = 0;
       
   234     iCalculator->iStartingSeqNum = 0;
       
   235     iCalculator->iReceivedPacketCounter = 0;
       
   236     
   184     
   237     // First packet
   185     // First packet
   238     const TInt PacketTimestamp1 = 1000;
   186     const TInt firstPacketTimestamp = 1000;
   239     iCalculator->RtpPacketReceived( PacketTimestamp1, EFalse, testSeqNum );
   187     iCalculator->RtpPacketReceived( firstPacketTimestamp, EFalse );
   240     EUNIT_ASSERT( iCalculator->iPrevPacketTransit != 0 );
   188     EUNIT_ASSERT( iCalculator->iPrevPacketTransit != 0 );
   241     EUNIT_ASSERT( iCalculator->iCurrentSeqNum == 222 );
   189     
   242     EUNIT_ASSERT( iCalculator->iStartingSeqNum == 221 );
       
   243     EUNIT_ASSERT( iCalculator->iReceivedPacketCounter == 1 );
       
   244     
       
   245     testSeqNum++; //Increase seqnum for next packet. 
       
   246     // Second packet (fake that it is the one when reporting)
   190     // Second packet (fake that it is the one when reporting)
   247     iCalculator->iPacketsReceived = 15; // ( KJitterReportInterval - 1 )
   191     iCalculator->iPacketsReceived = 15; // ( KJitterReportInterval - 1 )
   248     const TInt PacketTimestamp2 = 3000;
   192     const TInt secondPacketTimestamp = 3000;
   249     iCalculator->RtpPacketReceived( PacketTimestamp2, EFalse, testSeqNum );
   193     iCalculator->RtpPacketReceived( secondPacketTimestamp, EFalse );
   250     EUNIT_ASSERT( iCalculator->iCurJitter != 0 );
   194     EUNIT_ASSERT( iCalculator->iCurJitter != 0 );
   251     EUNIT_ASSERT_EQUALS( (TInt)iLastEvent.iPacketsReceived, 16 ); // just making sure that callback was called
   195     EUNIT_ASSERT_EQUALS( (TInt)iLastEvent.iPacketsReceived, 16 ); // just making sure that callback was called
   252     EUNIT_ASSERT( iCalculator->iCurrentSeqNum == 223 );
   196     }
   253     EUNIT_ASSERT( iCalculator->iStartingSeqNum == 221 );
   197     
   254     EUNIT_ASSERT( iCalculator->iReceivedPacketCounter == 2 );
       
   255     
       
   256     
       
   257     iCalculator->iReportIntervalType = EMccQualityTimeBased;
       
   258     iCalculator->iFrameLossObsOn = EFalse;
       
   259     testSeqNum++; //Increase seqnum for next packet. 
       
   260 
       
   261     const TInt packetTimestamp3 = 4000;
       
   262     iCalculator->RtpPacketReceived( packetTimestamp3, EFalse, testSeqNum );
       
   263     EUNIT_ASSERT( iCalculator->iCurJitter != 0 );
       
   264     EUNIT_ASSERT_EQUALS( (TInt)iLastEvent.iPacketsReceived, 16 ); // just making sure that callback wasn't called
       
   265     EUNIT_ASSERT( iCalculator->iCurrentSeqNum == 223 );
       
   266     EUNIT_ASSERT( iCalculator->iStartingSeqNum == 221 );
       
   267     EUNIT_ASSERT( iCalculator->iReceivedPacketCounter == 2 );
       
   268     
       
   269     // Sequence number start from 0
       
   270     iCalculator->iReportIntervalType = EMccQualityPacketBased;
       
   271     iCalculator->iFrameLossObsOn = ETrue;
       
   272     testSeqNum = 0;
       
   273     const TInt packetTimestamp4 = 5000;
       
   274     iCalculator->RtpPacketReceived( packetTimestamp4, EFalse, testSeqNum );
       
   275     EUNIT_ASSERT( iCalculator->iCurJitter != 0 );
       
   276     EUNIT_ASSERT_EQUALS( (TInt)iLastEvent.iPacketsReceived, 16 ); // just making sure that callback wasn't called
       
   277     EUNIT_ASSERT_EQUALS( iCalculator->iCurrentSeqNum, 0);
       
   278     EUNIT_ASSERT( iCalculator->iStartingSeqNum == 0 );
       
   279     EUNIT_ASSERT( iCalculator->iReceivedPacketCounter == 3 );
       
   280     
       
   281     // Sequence number start from 1
       
   282     testSeqNum = 1;
       
   283     const TInt packetTimestamp5 = 6000;
       
   284     iCalculator->RtpPacketReceived( packetTimestamp5, EFalse, testSeqNum );
       
   285     EUNIT_ASSERT( iCalculator->iCurJitter != 0 );
       
   286     EUNIT_ASSERT_EQUALS( (TInt)iLastEvent.iPacketsReceived, 16 ); // just making sure that callback wasn't called
       
   287     EUNIT_ASSERT_EQUALS( iCalculator->iCurrentSeqNum, 1);
       
   288     EUNIT_ASSERT( iCalculator->iStartingSeqNum == 0 );
       
   289     EUNIT_ASSERT( iCalculator->iReceivedPacketCounter == 4 );
       
   290     
       
   291     }
       
   292     
       
   293 
       
   294 void UT_CMccJitterCalculator::UT_CMccJitterCalculator_CalculateFerL()
       
   295     {
       
   296     TUint32 returnValue( 0 );
       
   297     
       
   298     // packet  lost
       
   299     TUint32 prevValue( 0 );
       
   300     TBool valueToadd( ETrue );
       
   301     TBool flagToAdd( ETrue );
       
   302     returnValue = iCalculator->CalculateFer( prevValue, valueToadd, flagToAdd );
       
   303     EUNIT_ASSERT_EQUALS( returnValue, 2000 );
       
   304     
       
   305     // packet  lost
       
   306     // returnValue == 2000
       
   307     returnValue = iCalculator->CalculateFer( returnValue, valueToadd, flagToAdd );
       
   308     EUNIT_ASSERT_EQUALS( returnValue, 3992 );
       
   309     
       
   310     // no packet lost - late packet - remove FER
       
   311     // decrease fer
       
   312     flagToAdd = EFalse;
       
   313     // returnValue == 3996
       
   314     returnValue = iCalculator->CalculateFer( returnValue, valueToadd, flagToAdd );
       
   315     
       
   316     EUNIT_ASSERT_EQUALS( returnValue, 2008 );
       
   317     
       
   318     // no packet lost - late packet - remove FER
       
   319     // decrease fer
       
   320     flagToAdd = EFalse;
       
   321     // returnValue == 5
       
   322     returnValue = 5;
       
   323     returnValue = iCalculator->CalculateFer( returnValue, valueToadd, flagToAdd );
       
   324     
       
   325     EUNIT_ASSERT_EQUALS( returnValue, 0);
       
   326     }
       
   327 
       
   328 void UT_CMccJitterCalculator::UT_CMccJitterCalculator_CountPacketLossPercentageL()
       
   329     {
       
   330     TInt percentage( 0 );
       
   331     
       
   332     iCalculator->iHomeTime.HomeTime();
       
   333     
       
   334     // Not active
       
   335     iCalculator->JitterObserving();
       
   336     
       
   337     iCalculator->iPrevFerValue = 0;
       
   338     iCalculator->iStartingSeqNum = 80;
       
   339     iCalculator->iCurrentSeqNum = 100;
       
   340     
       
   341     // no packets lost
       
   342     iCalculator->iPrevExpectedPackets = 20;
       
   343     iCalculator->iReceivedPacketCounter = 20;
       
   344 
       
   345     iCalculator->CountPacketLossPercentage();
       
   346     
       
   347     EUNIT_ASSERT_EQUALS( iCalculator->iPrevFerValue, 0 );
       
   348     EUNIT_ASSERT_EQUALS( iCalculator->iPrevExpectedPackets, 20 );
       
   349     EUNIT_ASSERT_EQUALS( iCalculator->iPrevPacketsReceived, 20 );
       
   350     
       
   351     
       
   352     // no packets lost, inorder
       
   353     iCalculator->iCurrentSeqNum = 102;  
       
   354     iCalculator->iPrevExpectedPackets = 22;
       
   355 
       
   356     iCalculator->CountPacketLossPercentage();
       
   357     
       
   358     EUNIT_ASSERT_EQUALS( iCalculator->iPrevFerValue, 0 );
       
   359     EUNIT_ASSERT_EQUALS( iCalculator->iPrevExpectedPackets, 22 );
       
   360     EUNIT_ASSERT_EQUALS( iCalculator->iPrevPacketsReceived, 20 );
       
   361     
       
   362 	
       
   363     // packet  lost - add FER by number of packets lost.
       
   364     // 5 packets lost
       
   365     iCalculator->iPrevFerValue = 0;
       
   366     iCalculator->iStartingSeqNum = 80;
       
   367     iCalculator->iCurrentSeqNum = 105;
       
   368 
       
   369     iCalculator->iPrevExpectedPackets = 20;
       
   370     iCalculator->iReceivedPacketCounter = 20;
       
   371 
       
   372     percentage = iCalculator->CountPacketLossPercentage();
       
   373     
       
   374     EUNIT_ASSERT_EQUALS( percentage, 1 );
       
   375     EUNIT_ASSERT_EQUALS( iCalculator->iPrevFerValue, 7952 );
       
   376     EUNIT_ASSERT_EQUALS( iCalculator->iPrevExpectedPackets, 25 );
       
   377     EUNIT_ASSERT_EQUALS( iCalculator->iPrevPacketsReceived, 20 );
       
   378     }
       
   379 
       
   380 void UT_CMccJitterCalculator::UT_CMccJitterCalculator_ResetCountersL()
       
   381     {
       
   382     
       
   383     iCalculator->iPacketsReceived = 20;
       
   384     iCalculator->iCurJitter = 200;
       
   385     iCalculator->iPrevPacketTransit = 100;
       
   386     iCalculator->iCurrentSeqNum = 25;
       
   387     iCalculator->iStartingSeqNum = 2;
       
   388     iCalculator->iReceivedPacketCounter = 30;
       
   389 
       
   390     iCalculator->ResetCounters();
       
   391     
       
   392     EUNIT_ASSERT_EQUALS( iCalculator->iPacketsReceived, 0 );
       
   393     EUNIT_ASSERT_EQUALS( iCalculator->iCurJitter, 0 );
       
   394     EUNIT_ASSERT_EQUALS( iCalculator->iPrevPacketTransit, 0 );
       
   395     EUNIT_ASSERT_EQUALS( iCalculator->iCurrentSeqNum, 0 );
       
   396     EUNIT_ASSERT_EQUALS( iCalculator->iStartingSeqNum, 0 );
       
   397     EUNIT_ASSERT_EQUALS( iCalculator->iReceivedPacketCounter, 0 );
       
   398     }
       
   399 
       
   400 
       
   401 //  TEST TABLE
   198 //  TEST TABLE
   402 
   199 
   403 EUNIT_BEGIN_TEST_TABLE( 
   200 EUNIT_BEGIN_TEST_TABLE( 
   404     UT_CMccJitterCalculator,
   201     UT_CMccJitterCalculator,
   405     "CMccJitterCalculator",
   202     "Add test suite description here.",
   406     "UNIT" )
   203     "UNIT" )
   407     
   204     
   408 EUNIT_TEST(
   205 EUNIT_TEST(
   409     "StartObserving - test ",
   206     "StartObserving - test ",
   410     "CMccJitterCalculator",
   207     "CMccJitterCalculator",
   424     "CMccJitterCalculator",
   221     "CMccJitterCalculator",
   425     "RtpPacketReceived",
   222     "RtpPacketReceived",
   426     "FUNCTIONALITY",
   223     "FUNCTIONALITY",
   427     SetupL, UT_CMccJitterCalculator_RtpPacketReceivedL, Teardown)
   224     SetupL, UT_CMccJitterCalculator_RtpPacketReceivedL, Teardown)
   428     
   225     
   429 
       
   430 EUNIT_TEST(
       
   431     "CalculateFer - test ",
       
   432     "CMccJitterCalculator",
       
   433     "CalculateFer",
       
   434     "FUNCTIONALITY",
       
   435     SetupL, UT_CMccJitterCalculator_CalculateFerL, Teardown)
       
   436 
       
   437 EUNIT_TEST(
       
   438     "CountPacketLossPercentage - test ",
       
   439     "CMccJitterCalculator",
       
   440     "CountPacketLossPercentage",
       
   441     "FUNCTIONALITY",
       
   442     SetupL, UT_CMccJitterCalculator_CountPacketLossPercentageL, Teardown)
       
   443     
       
   444 EUNIT_TEST(
       
   445     "ResetCounters - test ",
       
   446     "CMccJitterCalculator",
       
   447     "ResetCounters",
       
   448     "FUNCTIONALITY",
       
   449     SetupL, UT_CMccJitterCalculator_ResetCountersL, Teardown)
       
   450     
       
   451     
       
   452 EUNIT_END_TEST_TABLE
   226 EUNIT_END_TEST_TABLE
   453 
   227 
   454 //  END OF FILE
   228 //  END OF FILE