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", |