189 if(err != KErrNone && err != KErrAlreadyExists) |
222 if(err != KErrNone && err != KErrAlreadyExists) |
190 User::LeaveIfError(err); |
223 User::LeaveIfError(err); |
191 INFO_PRINTF1(_L("Destroy SSM adaptation server.")); |
224 INFO_PRINTF1(_L("Destroy SSM adaptation server.")); |
192 delete server; |
225 delete server; |
193 } |
226 } |
194 |
227 #ifdef TEST_SSM_SERVER |
195 /** |
228 /** |
196 * Tests for client calling Activate/Deactivate Rf without setting as priorityclient. |
229 * Tests for client calling Activate/Deactivate Rf without setting as priorityclient. |
197 */ |
230 */ |
198 void CSusAdaptionServerTest::doTestForNormalEmergencyCallinOOM() |
231 void CSusAdaptionServerTest::doTestForNormalEmergencyCallinOOM() |
199 { |
232 { |
200 INFO_PRINTF1(_L("doTestForNormalEmergencyCallinOOM started.")); |
233 INFO_PRINTF1(_L("doTestForNormalEmergencyCallinOOM started.")); |
201 __UHEAP_MARK; |
234 __UHEAP_MARK; |
|
235 RThread thread; |
|
236 CleanupClosePushL(thread); |
|
237 TESTL(KErrNone == StartAdaptationServer(thread)); |
|
238 |
202 RTestSusAdaptationCli adaptationclitest; |
239 RTestSusAdaptationCli adaptationclitest; |
203 TInt err = adaptationclitest.Connect(); |
240 TInt err = adaptationclitest.Connect(KTestAdaptationServerName); |
204 INFO_PRINTF2(_L("Connect() returned Error %d : Expected Error is KErrNone."),err); |
241 INFO_PRINTF2(_L("Connect() returned Error %d : Expected Error is KErrNone."),err); |
205 TEST(err == KErrNone); |
242 TEST(err == KErrNone); |
206 TRequestStatus status; |
243 TRequestStatus status; |
207 // Simulate OOM condition |
244 // Simulate OOM condition |
208 User::__DbgSetAllocFail(EFalse, RAllocator::EDeterministic, 1); |
|
209 User::__DbgSetAllocFail(ETrue, RAllocator::EDeterministic, 1); |
245 User::__DbgSetAllocFail(ETrue, RAllocator::EDeterministic, 1); |
210 //Simulate OOM at Serverside |
246 //Simulate OOM at Serverside |
211 adaptationclitest.SetHeapFailure(1); |
247 adaptationclitest.SetHeapFailure(1); |
|
248 adaptationclitest.SetHeapMark(); |
212 //Normal client calling ActivateRfForEmergencyCall Rf in OOM condition. This call must fail with KErrNoMemory |
249 //Normal client calling ActivateRfForEmergencyCall Rf in OOM condition. This call must fail with KErrNoMemory |
213 //as there is no memory reserved. |
250 //as there is no memory reserved. |
214 adaptationclitest.ActivateRfForEmergencyCall(status); |
251 adaptationclitest.ActivateRfForEmergencyCall(status); |
215 // Wait for completion of requests |
252 // Wait for completion of requests |
216 User::WaitForRequest(status); |
253 User::WaitForRequest(status); |
217 //Restore OOM condition |
254 //Restore OOM condition |
218 adaptationclitest.UnSetHeapFailure(); |
255 adaptationclitest.UnSetHeapFailure(); |
219 adaptationclitest.Close(); |
256 adaptationclitest.UnSetHeapMark(); |
220 User::__DbgSetAllocFail(EFalse, RAllocator::ENone, 1); |
257 adaptationclitest.Close(); |
221 User::__DbgSetAllocFail(ETrue, RAllocator::ENone, 1); |
258 User::__DbgSetAllocFail(ETrue, RAllocator::ENone, 1); |
222 TEST(status.Int() == KErrNoMemory); |
259 TEST(status.Int() == KErrNoMemory); |
|
260 thread.Kill(KErrNone); |
|
261 CleanupStack::PopAndDestroy(&thread); |
223 __UHEAP_MARKEND; |
262 __UHEAP_MARKEND; |
224 INFO_PRINTF1(_L("doTestForNormalEmergencyCallinOOM completed.")); |
263 INFO_PRINTF1(_L("doTestForNormalEmergencyCallinOOM completed.")); |
225 } |
264 } |
226 |
265 |
227 |
266 |
254 User::WaitForRequest(status3); |
293 User::WaitForRequest(status3); |
255 TEST(status1.Int() == KErrNone); |
294 TEST(status1.Int() == KErrNone); |
256 TEST(status2.Int() == KErrNone); |
295 TEST(status2.Int() == KErrNone); |
257 TEST(status3.Int() == KErrNone); |
296 TEST(status3.Int() == KErrNone); |
258 // Simulate OOM condition |
297 // Simulate OOM condition |
259 User::__DbgSetAllocFail(EFalse, RAllocator::EDeterministic, 1); |
|
260 User::__DbgSetAllocFail(ETrue, RAllocator::EDeterministic, 1); |
298 User::__DbgSetAllocFail(ETrue, RAllocator::EDeterministic, 1); |
261 //Simulate OOM at Serverside |
299 //Simulate OOM at Serverside |
262 adaptationclitest.SetHeapFailure(1); |
300 adaptationclitest.SetHeapFailure(1); |
263 |
301 |
264 //After the above 2 calls to Activate the Rfs, will be left with 4 reserved memory in queue, so in OOM |
302 //Two simulataneous calls for Active/deactivate Rf are allowed. The 3rd simultaneous request fail with KErrNoMemory |
265 //condition client can queue 4 activate/deactivate requests.The 5th request will fail with KErrNoMemory |
|
266 adaptationclitest.ActivateRfForEmergencyCall(status1); |
303 adaptationclitest.ActivateRfForEmergencyCall(status1); |
267 adaptationclitest.ActivateRfForEmergencyCall(status2); |
304 adaptationclitest.DeactivateRfForEmergencyCall(status2); |
268 adaptationclitest.DeactivateRfForEmergencyCall(status3); |
305 adaptationclitest.ActivateRfForEmergencyCall(status3); |
269 adaptationclitest.DeactivateRfForEmergencyCall(status4); |
306 // Wait for completion of requests |
|
307 User::WaitForRequest(status1); |
|
308 User::WaitForRequest(status2); |
|
309 User::WaitForRequest(status3); |
|
310 |
|
311 //If the previous request for Activate/Deactivate is already finished. User can perform 2 more calls. |
|
312 adaptationclitest.ActivateRfForEmergencyCall(status4); |
270 adaptationclitest.DeactivateRfForEmergencyCall(status5); |
313 adaptationclitest.DeactivateRfForEmergencyCall(status5); |
271 adaptationclitest.DeactivateRfForEmergencyCall(status6); |
314 |
|
315 User::WaitForRequest(status4); |
|
316 User::WaitForRequest(status5); |
|
317 |
|
318 adaptationclitest.ActivateRfForEmergencyCall(status6); |
|
319 adaptationclitest.DeactivateRfForEmergencyCall(status7); |
|
320 adaptationclitest.Cancel(); |
272 // Wait for completion of requests |
321 // Wait for completion of requests |
|
322 User::WaitForRequest(status6); |
|
323 User::WaitForRequest(status7); |
|
324 |
|
325 //Restore OOM condition |
|
326 adaptationclitest.UnSetHeapFailure(); |
|
327 User::__DbgSetAllocFail(ETrue, RAllocator::ENone, 1); |
|
328 TEST(status1.Int() == KErrNone); |
|
329 TEST(status2.Int() == KErrNone); |
|
330 TEST(status3.Int() == KErrNoMemory); |
|
331 TEST(status4.Int() == KErrNone); |
|
332 TEST(status5.Int() == KErrNone); |
|
333 TEST(status6.Int() == KErrNone); |
|
334 TEST(status7.Int() == KErrCancel); |
|
335 adaptationclitest.UnSetHeapMark(); |
|
336 adaptationclitest.Close(); |
|
337 thread.Kill(KErrNone); |
|
338 CleanupStack::PopAndDestroy(&thread); |
|
339 __UHEAP_MARKEND; |
|
340 INFO_PRINTF1(_L("doTestForEmergencyCallOOM completed.")); |
|
341 } |
|
342 |
|
343 /** |
|
344 * Tests to Set PriorityClient from two different clients. |
|
345 */ |
|
346 void CSusAdaptionServerTest::doTestForSettingPriorityClient() |
|
347 { |
|
348 INFO_PRINTF1(_L("doTestForSettingPriorityClient started.")); |
|
349 __UHEAP_MARK; |
|
350 RThread thread; |
|
351 CleanupClosePushL(thread); |
|
352 TESTL(KErrNone == StartAdaptationServer(thread)); |
|
353 RTestSusAdaptationCli adaptationclitest1; |
|
354 TInt err = adaptationclitest1.Connect(KTestAdaptationServerName); |
|
355 INFO_PRINTF2(_L("adaptationclitest1.Connect() returned Error %d : Expected Error is KErrNone."),err); |
|
356 TEST(err == KErrNone); |
|
357 |
|
358 RTestSusAdaptationCli adaptationclitest2; |
|
359 err = adaptationclitest2.Connect(KTestAdaptationServerName); |
|
360 INFO_PRINTF2(_L("adaptationclitest2.Connect() returned Error %d : Expected Error is KErrNone."),err); |
|
361 TEST(err == KErrNone); |
|
362 |
|
363 err = adaptationclitest1.SetAsPriorityClient(); |
|
364 INFO_PRINTF2(_L("adaptationclitest1.SetAsPriorityClient() returned Error %d : Expected Error is KErrNone."),err); |
|
365 TEST(err == KErrNone); |
|
366 |
|
367 err = adaptationclitest2.SetAsPriorityClient(); |
|
368 INFO_PRINTF2(_L("adaptationclitest2.SetAsPriorityClient() returned Error %d : Expected Error is KErrAlreadyExists."),err); |
|
369 TEST(err == KErrAlreadyExists); |
|
370 |
|
371 // Restore OOM condition |
|
372 adaptationclitest1.Close(); |
|
373 adaptationclitest2.Close(); |
|
374 |
|
375 thread.Kill(KErrNone); |
|
376 CleanupStack::PopAndDestroy(&thread); |
|
377 __UHEAP_MARKEND; |
|
378 INFO_PRINTF1(_L("doTestForSettingPriorityClient completed.")); |
|
379 } |
|
380 |
|
381 /** |
|
382 * Multiple clients performing Emergency call during OOM situation |
|
383 */ |
|
384 void CSusAdaptionServerTest::doTestForMultipleClientinOOMcondition() |
|
385 { |
|
386 INFO_PRINTF1(_L("doTestForMultipleClientinOOMcondition started.")); |
|
387 __UHEAP_MARK; |
|
388 RThread thread; |
|
389 CleanupClosePushL(thread); |
|
390 |
|
391 TESTL(KErrNone == StartAdaptationServer(thread)); |
|
392 RTestSusAdaptationCli adaptationclitest1; |
|
393 TInt err = adaptationclitest1.Connect(KTestAdaptationServerName); |
|
394 INFO_PRINTF2(_L("adaptationclitest1.Connect() returned Error %d : Expected Error is KErrNone."),err); |
|
395 TEST(err == KErrNone); |
|
396 |
|
397 RTestSusAdaptationCli adaptationclitest2; |
|
398 err = adaptationclitest2.Connect(KTestAdaptationServerName); |
|
399 INFO_PRINTF2(_L("adaptationclitest2.Connect() returned Error %d : Expected Error is KErrNone."),err); |
|
400 TEST(err == KErrNone); |
|
401 |
|
402 RTestSusAdaptationCli adaptationclitest3; |
|
403 err = adaptationclitest3.Connect(KTestAdaptationServerName); |
|
404 INFO_PRINTF2(_L("adaptationclitest3.Connect() returned Error %d : Expected Error is KErrNone."),err); |
|
405 TEST(err == KErrNone); |
|
406 |
|
407 err = adaptationclitest1.SetAsPriorityClient(); |
|
408 INFO_PRINTF2(_L("adaptationclitest1.SetAsPriorityClient() returned Error %d : Expected Error is KErrNone."),err); |
|
409 TEST(err == KErrNone); |
|
410 |
|
411 err = adaptationclitest2.SetAsPriorityClient(); |
|
412 INFO_PRINTF2(_L("adaptationclitest2.SetAsPriorityClient() returned Error %d : Expected Error is KErrAlreadyExists."),err); |
|
413 TEST(err == KErrAlreadyExists); |
|
414 |
|
415 err = adaptationclitest3.SetAsPriorityClient(); |
|
416 INFO_PRINTF2(_L("adaptationclitest3.SetAsPriorityClient() returned Error %d : Expected Error is KErrAlreadyExists."),err); |
|
417 TEST(err == KErrAlreadyExists); |
|
418 |
|
419 TRequestStatus status1,status2,status3,status4,status5,status6; |
|
420 // Simulate OOM condition |
|
421 User::__DbgSetAllocFail(ETrue, RAllocator::EDeterministic, 1); |
|
422 //Simulate OOM Condition on server side |
|
423 adaptationclitest1.SetHeapFailure(1); |
|
424 adaptationclitest1.SetHeapMark(); |
|
425 adaptationclitest1.ActivateRfForEmergencyCall(status1); |
|
426 adaptationclitest2.ActivateRfForEmergencyCall(status2); |
|
427 adaptationclitest3.ActivateRfForEmergencyCall(status3); |
|
428 adaptationclitest1.DeactivateRfForEmergencyCall(status4); |
|
429 adaptationclitest2.DeactivateRfForEmergencyCall(status5); |
|
430 adaptationclitest3.DeactivateRfForEmergencyCall(status6); |
|
431 |
273 User::WaitForRequest(status1); |
432 User::WaitForRequest(status1); |
274 User::WaitForRequest(status2); |
433 User::WaitForRequest(status2); |
275 User::WaitForRequest(status3); |
434 User::WaitForRequest(status3); |
276 User::WaitForRequest(status4); |
435 User::WaitForRequest(status4); |
277 User::WaitForRequest(status5); |
436 User::WaitForRequest(status5); |
278 User::WaitForRequest(status6); |
437 User::WaitForRequest(status6); |
279 |
|
280 //Restore OOM condition |
|
281 adaptationclitest.UnSetHeapFailure(); |
|
282 User::__DbgSetAllocFail(EFalse, RAllocator::ENone, 1); |
|
283 User::__DbgSetAllocFail(ETrue, RAllocator::ENone, 1); |
|
284 TEST(status1.Int() == KErrNone); |
|
285 TEST(status2.Int() == KErrNone); |
|
286 TEST(status3.Int() == KErrNone); |
|
287 TEST(status4.Int() == KErrNone); |
|
288 TEST(status5.Int() == KErrNone); |
|
289 //6th request will fail with KErrNoMemory if, above 5 requests are still queued and there is no reserved slot for |
|
290 //6th one..otherwise, 6th request will be queued and processed |
|
291 TEST(status6.Int() == KErrNoMemory || status6.Int() == KErrNone); |
|
292 |
|
293 adaptationclitest.Close(); |
|
294 __UHEAP_MARKEND; |
|
295 INFO_PRINTF1(_L("doTestForEmergencyCallOOM completed.")); |
|
296 } |
|
297 |
|
298 /** |
|
299 * Tests to Set PriorityClient from two different clients. |
|
300 */ |
|
301 void CSusAdaptionServerTest::doTestForSettingPriorityClient() |
|
302 { |
|
303 INFO_PRINTF1(_L("doTestForSettingPriorityClient started.")); |
|
304 __UHEAP_MARK; |
|
305 RTestSusAdaptationCli adaptationclitest1; |
|
306 TInt err = adaptationclitest1.Connect(); |
|
307 INFO_PRINTF2(_L("adaptationclitest1.Connect() returned Error %d : Expected Error is KErrNone."),err); |
|
308 TEST(err == KErrNone); |
|
309 |
|
310 RTestSusAdaptationCli adaptationclitest2; |
|
311 err = adaptationclitest2.Connect(); |
|
312 INFO_PRINTF2(_L("adaptationclitest2.Connect() returned Error %d : Expected Error is KErrNone."),err); |
|
313 TEST(err == KErrNone); |
|
314 |
|
315 err = adaptationclitest1.SetAsPriorityClient(); |
|
316 INFO_PRINTF2(_L("adaptationclitest1.SetAsPriorityClient() returned Error %d : Expected Error is KErrNone."),err); |
|
317 TEST(err == KErrNone); |
|
318 |
|
319 err = adaptationclitest2.SetAsPriorityClient(); |
|
320 INFO_PRINTF2(_L("adaptationclitest2.SetAsPriorityClient() returned Error %d : Expected Error is KErrAlreadyExists."),err); |
|
321 TEST(err == KErrAlreadyExists); |
|
322 |
|
323 // Restore OOM condition |
438 // Restore OOM condition |
324 adaptationclitest1.Close(); |
439 adaptationclitest1.Close(); |
325 adaptationclitest2.Close(); |
440 adaptationclitest2.Close(); |
|
441 adaptationclitest3.Close(); |
|
442 //Restore OOM condition |
|
443 adaptationclitest1.UnSetHeapMark(); |
|
444 adaptationclitest1.UnSetHeapFailure(); |
|
445 User::__DbgSetAllocFail(ETrue, RAllocator::ENone, 1); |
|
446 //Priority client Performing Activate Rf returns KErrNone |
|
447 TEST(status1.Int() == KErrNone); |
|
448 //Normal clients performing Activate Rf fail with KErrNoMemory in OOM codition |
|
449 TEST(status2.Int() == KErrNoMemory); |
|
450 TEST(status3.Int() == KErrNoMemory); |
|
451 //Priority client Performing Deactivate Rf returns KErrNone |
|
452 TEST(status4.Int() == KErrNone); |
|
453 //Normal clients peforming Deactivate Rf fail with KErrNoMemory in OOM codition |
|
454 TEST(status5.Int() == KErrNoMemory); |
|
455 TEST(status6.Int() == KErrNoMemory); |
|
456 thread.Kill(KErrNone); |
|
457 CleanupStack::PopAndDestroy(&thread); |
326 __UHEAP_MARKEND; |
458 __UHEAP_MARKEND; |
327 INFO_PRINTF1(_L("doTestForSettingPriorityClient completed.")); |
459 INFO_PRINTF1(_L("doTestForMultipleClientinOOMcondition completed.")); |
328 } |
460 } |
329 |
461 |
|
462 /** |
|
463 * Tests for iterating heapfailure in ActivateRfForEmergencyCall and DeactivateRfForEmergencyCall. |
|
464 */ |
|
465 void CSusAdaptionServerTest::doTestForEmergencyCallOOMIterative() |
|
466 { |
|
467 INFO_PRINTF1(_L("doTestForEmergencyCallOOMIterative started.")); |
|
468 __UHEAP_MARK; |
|
469 RThread thread; |
|
470 CleanupClosePushL(thread); |
|
471 TESTL(KErrNone == StartAdaptationServer(thread)); |
|
472 RTestSusAdaptationCli adaptationclitest; |
|
473 TInt err = adaptationclitest.Connect(KTestAdaptationServerName); |
|
474 INFO_PRINTF2(_L("Connect() returned Error %d : Expected Error is KErrNone."),err); |
|
475 TEST(err == KErrNone); |
|
476 err = adaptationclitest.SetAsPriorityClient(); |
|
477 INFO_PRINTF2(_L("SetAsPriorityClient() returned Error %d : Expected Error is KErrNone."),err); |
|
478 TEST(err == KErrNone); |
|
479 TRequestStatus status1,status2; |
|
480 //simulate OOM at kernel |
|
481 User::__DbgSetAllocFail(ETrue, RAllocator::EDeterministic, 1); |
|
482 TInt maximumAllocation = 3; |
|
483 //Iterate through the ActivateRfForEmergencyCall. |
|
484 adaptationclitest.SetHeapMark(); |
|
485 for(TInt allocFailRate=1; allocFailRate <= 2*maximumAllocation; ++allocFailRate) |
|
486 { |
|
487 INFO_PRINTF2(_L("allocFailRateL %d:."), allocFailRate); |
|
488 adaptationclitest.SetHeapFailure(allocFailRate); |
|
489 adaptationclitest.ActivateRfForEmergencyCall(status1); |
|
490 adaptationclitest.ActivateRfForEmergencyCall(status2); |
|
491 User::WaitForRequest(status1); |
|
492 User::WaitForRequest(status2); |
|
493 TEST(status1.Int() == KErrNone); |
|
494 TEST(status2.Int() == KErrNone); |
|
495 } |
|
496 |
|
497 //Iterate through the DeactivateRfForEmergencyCall. |
|
498 for(TInt allocFailRate=1; allocFailRate < 2*maximumAllocation; allocFailRate++) |
|
499 { |
|
500 INFO_PRINTF2(_L("allocFailRateL %d:."), allocFailRate); |
|
501 adaptationclitest.SetHeapFailure(allocFailRate); |
|
502 adaptationclitest.DeactivateRfForEmergencyCall(status1); |
|
503 adaptationclitest.DeactivateRfForEmergencyCall(status2); |
|
504 User::WaitForRequest(status1); |
|
505 User::WaitForRequest(status2); |
|
506 TEST(status1.Int() == KErrNone); |
|
507 TEST(status2.Int() == KErrNone); |
|
508 } |
|
509 adaptationclitest.UnSetHeapMark(); |
|
510 //Restore OOM condition |
|
511 adaptationclitest.UnSetHeapFailure(); |
|
512 User::__DbgSetAllocFail(ETrue, RAllocator::ENone, 1); |
|
513 adaptationclitest.Close(); |
|
514 thread.Kill(KErrNone); |
|
515 CleanupStack::PopAndDestroy(&thread); |
|
516 __UHEAP_MARKEND; |
|
517 INFO_PRINTF1(_L("doTestForEmergencyCallOOMIterative completed.")); |
|
518 } |
|
519 |
|
520 #endif //TEST_SSM_SERVER |
|
521 |
|
522 |