diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/simtsy/test/Te_Sim/Te_SimCallOOMTest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserverplugins/simtsy/test/Te_Sim/Te_SimCallOOMTest.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,135 @@ +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "Te_SimCallOOMTest.h" + +CSimCallOOMTest::CSimCallOOMTest() + { + SetTestStepName(_L("CallOOMTest")); + } + +TVerdict CSimCallOOMTest::doTestStepL() + { + INFO_PRINTF1(_L("BeginCallOOMTest")); + + CreateConfigFileL(_L("c:\\config3.txt")); + SetTestNumberL(0); + + TInt ret = iPhone.Open(iTelServer,KPhoneName); + INFO_PRINTF2(_L("Result: %d"),ret); + TESTL(ret == KErrNone); + INFO_PRINTF1(_L("Opened phone object")); + + iTelServer.SetPriorityClient(); + + TESTL(iPhone.Initialise()==KErrNone); + INFO_PRINTF1(_L("Opened phone object")); + + TESTL(iLine.Open(iPhone,KVoiceLineName)==KErrNone); + INFO_PRINTF1(_L("Opened Line object")); + + TName callName; + TESTL(iCall.OpenNewCall(iLine,callName)==KErrNone); + INFO_PRINTF1(_L("Opened Call object")); + + iLine.Close(); + iCall.Close(); + + TESTL(iLine.Open(iPhone,KVoiceLineName)==KErrNone); + INFO_PRINTF1(_L("Opened Line object")); + + TName callName2; + TInt error = iCall.OpenNewCall(iLine,callName2); + TESTL(error==KErrNone); + INFO_PRINTF1(_L("Opened Call object")); + +#ifdef _DEBUG + TRequestStatus stat; + TBool oomAvailable = EFalse; + TInt failure(0); + const TInt KMaxTests = 1000; + _LIT(KEmergencyNo, "01632960000"); + + while (!oomAvailable && failure < KMaxTests) + { + INFO_PRINTF2(_L("Failing alloc %d. Making Call... "),failure); + + iTelServer.__DbgFailNext(failure); + + // Check that the heap is balanced at the same level before and + // after all attempts at emergency call. + iTelServer.__DbgMarkHeap(); + iCall.DialEmergencyCall(stat, KEmergencyNo); + User::WaitForRequest(stat); + INFO_PRINTF2(_L("result=%d... "), stat.Int()); + + if (stat.Int()!=KErrNone) + { + INFO_PRINTF2(_L("Failing after %d Allocs"),failure); + iTelServer.__DbgMarkEnd(0); + } + else + { + INFO_PRINTF2(_L("Passing after %d Allocs"),failure); + } + + iTelServer.__DbgFailNextAvailable(oomAvailable); + + TInt ret = iCall.HangUp(); + INFO_PRINTF2(_L("HangUp result=%d"), ret); + + if (ret!=KErrNone) + { + iCall.HangUp();//if hang up unsuceessfull call again without heap fail + } + + // Test for the end of the test. Not perfect (doesn't demonstrate + // that there wasn't an OOM situation that was handled quietly + // such that the call/hangup still worked) but I think it's all we + // can do. + + if ( stat!=KErrNone || ret!=KErrNone) + { + INFO_PRINTF3(_L("OOM testing complete. Call status is %d and hang-up return is %d"),stat.Int(),ret); + break; + } + + + failure++; + } + + // Resetting the heap to flush any FailNext there might be hanging around. + iTelServer.__DbgFailNext(0); + + iCall.DialEmergencyCall(stat, KEmergencyNo);//use this to make the previous memory failure happen + User::WaitForRequest(stat); + iCall.HangUp(); + + // KMaxTests is used to stop the above while statement looping + // indefinitely. If KMaxTests is reached then we can guess that something + // has gone wrong and the test should be failed. + TESTL(failure < KMaxTests); +#else + INFO_PRINTF1(_L("TestDisabled on release build")); +#endif // _DEBUG + INFO_PRINTF1(_L("Closing objects...")); + iCall.Close(); + iLine.Close(); + iPhone.Close(); + ASSERT(RThread().RequestCount()==0); + + return TestStepResult(); + } +